diff --git a/.clang-format b/.clang-format index cc430e627..0965e5724 100644 --- a/.clang-format +++ b/.clang-format @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- BasedOnStyle: WebKit @@ -6,6 +8,7 @@ AlignEscapedNewlines: DontAlign AllowAllParametersOfDeclarationOnNextLine: "false" AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: "false" +AllowShortLambdasOnASingleLine: All AllowShortLoopsOnASingleLine: "false" AlwaysBreakAfterReturnType: TopLevelDefinitions AlwaysBreakTemplateDeclarations: Yes @@ -25,8 +28,9 @@ PointerAlignment: Left ReflowComments: "false" SortIncludes: "true" SpaceAfterCStyleCast: "false" +SpaceInEmptyBlock: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "true" SpacesInParentheses: "true" SpacesInSquareBrackets: "true" -Standard: Cpp11 +Standard: c++17 diff --git a/.editorconfig b/.editorconfig index d5851076b..44e191e5c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,5 @@ -# http://EditorConfig.org +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 root = true diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..9fc9f1940 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +18fef8dfe5d926ec0bc979562553adf4db8db2e9 +874a0c1f38b0da4e5bc83083b13a63b1c7eed935 diff --git a/.gitattributes b/.gitattributes index 3b8a7f1e8..6a8126fad 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 + .editorconfig export-ignore .gitattributes export-ignore .github export-ignore diff --git a/.github/ISSUE_TEMPLATE/usability_test.md b/.github/ISSUE_TEMPLATE/usability_test.md new file mode 100644 index 000000000..b41303637 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/usability_test.md @@ -0,0 +1,63 @@ +--- +name: Usability testing +about: Propose a usability test to help us +--- +# Objective +The test goals. e.g.: Evaluate the language selection and the partitioning configurations. + +# Requirements + +## Environment +What is the environment that should be tested and how it should be prepared. e.g.: The test needs to run in the release 3.32.34 installing Manjaro. + +## User profile +Describe the target users you are looking for the test. e.g.: A user that has already used a system-installer. + +## Facilitator +What the facilitator should be familiar with to run the tests. e.g.: The facilitator needs to know how to build Calamares to be able to run the tests. + +# Test design +## Tasks +A list of tasks that the user has to perform. e.g.: + +* Use another language. +* Change partitioning configurations. + +## Scenarios +A list of scenarios for the user to perform the tasks. They should put the user in a context and not give specific hints about what you want the user to do. e.g.: + +1. You want to change the installer language to English. Please, look for this option in the application. +2. You are a big fan of a lot of distributions and want to have some space left to install other distributions in your disk after this installation. Please, resize your disk to have 35GB of space left. + + \ No newline at end of file diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml new file mode 100644 index 000000000..ae2670f2f --- /dev/null +++ b/.github/workflows/issues.yml @@ -0,0 +1,32 @@ +name: issues + +on: + issues: + types: [opened, reopened, closed] + +jobs: + notify: + runs-on: ubuntu-latest + steps: + - name: "notify: new" + if: github.event.issue.state == 'open' + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: "OPENED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}" + - name: "notify: closed" + if: github.event.issue.state != 'open' + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: "CLOSED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}" + - name: "remove in-progress label" + if: github.event.issue.state != 'open' + run: | + curl -X DELETE \ + -H 'Accept: application/vnd.github.v3+json' \ + -H 'Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \ + "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/labels/hacking%3A%20in-progress" + diff --git a/.github/workflows/nightly-debian.yml b/.github/workflows/nightly-debian.yml new file mode 100644 index 000000000..9d3fc4d4d --- /dev/null +++ b/.github/workflows/nightly-debian.yml @@ -0,0 +1,46 @@ +name: nightly-debian-10 + +on: + schedule: + - cron: "12 23 * * *" + workflow_dispatch: + +env: + BUILDDIR: /build + SRCDIR: ${{ github.workspace }} + CMAKE_ARGS: | + -DWEBVIEW_FORCE_WEBKIT=1 + -DKDE_INSTALL_USE_QT_SYS_PATHS=ON + -DWITH_PYTHONQT=OFF" + -DCMAKE_BUILD_TYPE=Debug + +jobs: + build: + runs-on: ubuntu-latest + container: + image: docker://debian:10 + options: --tmpfs /build:rw --user 0:0 + steps: + - name: "prepare env" + uses: calamares/actions/prepare-debian@v4 + - name: "prepare source" + uses: calamares/actions/generic-checkout@v4 + - name: "build" + id: build + uses: calamares/actions/generic-build@v4 + - name: "notify: ok" + if: ${{ success() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.build.outputs.git-summary }} + - name: "notify: fail" + if: ${{ failure() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.build.outputs.git-summary }} diff --git a/.github/workflows/nightly-neon.yml b/.github/workflows/nightly-neon.yml new file mode 100644 index 000000000..b0c576721 --- /dev/null +++ b/.github/workflows/nightly-neon.yml @@ -0,0 +1,58 @@ +name: nightly-neon + +on: + schedule: + - cron: "52 23 * * *" + workflow_dispatch: + +env: + BUILDDIR: /build + SRCDIR: ${{ github.workspace }} + CMAKE_ARGS: | + -DWEBVIEW_FORCE_WEBKIT=1 + -DKDE_INSTALL_USE_QT_SYS_PATHS=ON + -DWITH_PYTHONQT=OFF" + -DCMAKE_BUILD_TYPE=Debug + +jobs: + build: + runs-on: ubuntu-latest + container: + image: docker://kdeneon/plasma:user + options: --tmpfs /build:rw --user 0:0 + steps: + - name: "prepare env" + uses: calamares/actions/prepare-neon@v4 + - name: "prepare source" + uses: calamares/actions/generic-checkout@v4 + - name: "build" + id: build + uses: calamares/actions/generic-build@v4 + - name: "notify: ok" + if: ${{ success() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.build.outputs.git-summary }} + - name: "notify: fail" + if: ${{ failure() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.build.outputs.git-summary }} + - name: "Calamares: archive" + working-directory: ${{ env.BUILDDIR }} + run: | + make install DESTDIR=${{ env.BUILDDIR }}/stage + tar czf calamares.tar.gz stage + - name: "Calamares: upload" + uses: actions/upload-artifact@v2 + with: + name: calamares-tarball + path: ${{ env.BUILDDIR }}/calamares.tar.gz + if-no-files-found: error + retention-days: 7 diff --git a/.github/workflows/nightly-opensuse.yml b/.github/workflows/nightly-opensuse.yml new file mode 100644 index 000000000..717cabe66 --- /dev/null +++ b/.github/workflows/nightly-opensuse.yml @@ -0,0 +1,46 @@ +name: nightly-opensuse + +on: + schedule: + - cron: "32 23 * * *" + workflow_dispatch: + +env: + BUILDDIR: /build + SRCDIR: ${{ github.workspace }} + CMAKE_ARGS: | + -DWEBVIEW_FORCE_WEBKIT=1 + -DKDE_INSTALL_USE_QT_SYS_PATHS=ON + -DWITH_PYTHONQT=OFF" + -DCMAKE_BUILD_TYPE=Debug + +jobs: + build: + runs-on: ubuntu-latest + container: + image: docker://opensuse/leap + options: --tmpfs /build:rw --user 0:0 + steps: + - name: "prepare env" + uses: calamares/actions/prepare-opensuse@v4 + - name: "prepare source" + uses: calamares/actions/generic-checkout@v4 + - name: "build" + id: build + uses: calamares/actions/generic-build@v4 + - name: "notify: ok" + if: ${{ success() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.build.outputs.git-summary }} + - name: "notify: fail" + if: ${{ failure() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.build.outputs.git-summary }} diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 000000000..cf1505f17 --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,56 @@ +name: ci-push + +on: + push: + branches: + - calamares + - work-3.3 + pull_request: + types: + - opened + - reopened + - synchronize + workflow_dispatch: + +env: + BUILDDIR: /build + SRCDIR: ${{ github.workspace }} + CMAKE_ARGS: | + -DWEBVIEW_FORCE_WEBKIT=1 + -DKDE_INSTALL_USE_QT_SYS_PATHS=ON + -DWITH_PYTHONQT=OFF" + -DCMAKE_BUILD_TYPE=Debug + +jobs: + build: + runs-on: ubuntu-latest + container: + image: docker://kdeneon/plasma:user + options: --tmpfs /build:rw --user 0:0 + steps: + - name: "prepare env" + uses: calamares/actions/prepare-neon@v4 + - name: "prepare source" + uses: calamares/actions/generic-checkout@v4 + - name: "build" + id: build + uses: calamares/actions/generic-build@v4 + - name: "notify: ok" + if: ${{ success() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + OK ${{ github.workflow }} in ${{ github.repository }} by ${{ github.actor }} on ${{ github.event.ref }} + .. ${{ steps.build.outputs.git-summary }} + - name: "notify: fail" + if: ${{ failure() && github.repository == 'calamares/calamares' }} + uses: calamares/actions/matrix-notify@v4 + with: + token: ${{ secrets.MATRIX_TOKEN }} + room: ${{ secrets.MATRIX_ROOM }} + message: | + FAIL ${{ github.workflow }} in ${{ github.repository }} by ${{ github.actor }} on ${{ github.event.ref }} + .. ${{ steps.build.outputs.git-summary }} + .. ${{ github.event.compare }} diff --git a/.gitignore b/.gitignore index 2f36a5de6..4023c2c49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # C++ objects and libs *.slo @@ -47,6 +50,8 @@ CMakeLists.txt.user # Backup files *~ +*.bak # Kate *.kate-swp +tags diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 000000000..cfd836c01 --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,90 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Calamares +Source: https://github.com/calamares/calamares.git + +### ACTUAL LICENSES +# +# Images in the locale module are a bit unclear; they were added +# by Teo in 2014 but I suspect they came from somewhere else. +# +Files: src/modules/locale/images/timezone*.png +License: GPL-3.0-or-later +Copyright: 2014 Teo Mrnjavac + +Files: man/calamares.8 +License: GPL-3.0-or-later +Copyright: 2017 Jonathan Carter + +### BUILD ARTIFACTS / NOT SOURCE +# +# QRC Files are basically build artifacts +# +FILES: src/modules/*/*.qrc +License: CC0-1.0 +Copyright: no + +# GitHub issue templates are not part of the source +# +Files: .github/ISSUE_TEMPLATE/* +License: CC0-1.0 +Copyright: no + +# GitHub actions are not part of the source +Files: .github/workflows/*.yml +License: CC0-1.0 +Copyright: no + +# Packaging information +# +Files: data/FreeBSD/distinfo data/FreeBSD/pkg-descr data/FreeBSD/pkg-plist +License: CC0-1.0 +Copyright: no + +# Example data for timezones, which is copied out of zoneinfo, +# which has this notice: +# +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +Files: data/example-root/usr/share/zoneinfo/Zulu data/example-root/usr/share/zoneinfo/UTC data/example-root/usr/share/zoneinfo/America/New_York +License: CC0-1.0 +Copyright: no + +### TRANSLATIONS +# +# .desktop files and template change only with translation +# +FILES: calamares.desktop* +License: CC0-1.0 +Copyright: no + +# Transifex translations derive from the source, and have no +# embedded copyright information. +# +Files: lang/*.ts +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +# Translations of branding slideshow are the same +Files: src/branding/default/lang/*.ts +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +# Python translation files have some copyright information, but +# it's generally very sketchy. +# +Files: lang/python.pot +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: lang/python/*/LC_MESSAGES/python.po +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: src/modules/dummypythonqt/lang/dummypythonqt.pot +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators + +Files: src/modules/dummypythonqt/lang/*/LC_MESSAGES/dummypythonqt.po +License: GPL-3.0-or-later +Copyright: 2020 Calamares authors and translators diff --git a/.tx/config b/.tx/config index 3cf9489f6..65a8521b5 100644 --- a/.tx/config +++ b/.tx/config @@ -1,17 +1,15 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 + [main] host = https://www.transifex.com -[calamares.calamares-master] +[calamares.calamares] file_filter = lang/calamares_.ts source_file = lang/calamares_en.ts source_lang = en type = QT -[calamares.dummypythonqt] -file_filter = src/modules/dummypythonqt/lang//LC_MESSAGES/dummypythonqt.po -source_file = src/modules/dummypythonqt/lang/dummypythonqt.pot -source_lang = en - [calamares.fdo] file_filter = lang/desktop_.desktop source_file = calamares.desktop diff --git a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp index 77e95e649..284870e06 100644 --- a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp +++ b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h index b9c5d588f..19fdaa082 100644 --- a/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h +++ b/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp index a13a45a27..3af326193 100644 --- a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp +++ b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h index 82b759283..64b5c267f 100644 --- a/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h +++ b/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp index 4c13e1da0..52eb60d37 100644 --- a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp +++ b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -764,7 +765,7 @@ void KDSingleApplicationGuard::Private::create( const QStringList & arguments ) } const int maxWaitMSecs = 1000 * 60; // stop waiting after 60 seconds - QTime waitTimer; + QElapsedTimer waitTimer; waitTimer.start(); // lets wait till the other instance initialized the register @@ -1118,7 +1119,7 @@ void KDSingleApplicationGuard::Private::poll() { } } -#include "moc_kdsingleapplicationguard.cpp" +// #include "moc_kdsingleapplicationguard.cpp" #ifdef KDTOOLSCORE_UNITTESTS diff --git a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h index 8ac411a68..f75825cef 100644 --- a/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h +++ b/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ @@ -41,7 +41,7 @@ public: explicit KDSingleApplicationGuard( Policy policy, QObject * parent=nullptr ); explicit KDSingleApplicationGuard( const QStringList & arguments, QObject * parent=nullptr ); explicit KDSingleApplicationGuard( const QStringList & arguments, Policy policy, QObject * parent=nullptr ); - ~KDSingleApplicationGuard(); + ~KDSingleApplicationGuard() override; bool isOperational() const; @@ -70,7 +70,7 @@ public Q_SLOTS: void killOtherInstances(); protected: - /*! \reimp */ bool event( QEvent * event ); + /*! \reimp */ bool event( QEvent * event ) override; private: #ifndef Q_WS_WIN diff --git a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp index d3405e82f..f886189c3 100644 --- a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp +++ b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h index 37ca5857e..5086ddd71 100644 --- a/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h +++ b/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp b/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp index 35b52d419..f2b0a4dd9 100644 --- a/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp +++ b/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/kdsingleapplicationguard/pimpl_ptr.h b/3rdparty/kdsingleapplicationguard/pimpl_ptr.h index 41b33b582..b8b4786ba 100644 --- a/3rdparty/kdsingleapplicationguard/pimpl_ptr.h +++ b/3rdparty/kdsingleapplicationguard/pimpl_ptr.h @@ -1,6 +1,6 @@ /* + * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only - * License-Filename: LICENSES/LGPLv2-KDAB * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ diff --git a/3rdparty/waitingspinnerwidget.cpp b/3rdparty/waitingspinnerwidget.cpp index 45c689019..98931a6ad 100644 --- a/3rdparty/waitingspinnerwidget.cpp +++ b/3rdparty/waitingspinnerwidget.cpp @@ -1,6 +1,8 @@ /* + * SPDX-FileCopyrightText: 2012-2014 Alexander Turkin + * SPDX-FileCopyrightText: 2014 William Hallatt + * SPDX-FileCopyrightText: 2015 Jacob Dawid * SPDX-License-Identifier: MIT - * License-Filename: LICENSES/MIT-QtWaitingSpinner */ /* Original Work Copyright (c) 2012-2014 Alexander Turkin diff --git a/3rdparty/waitingspinnerwidget.h b/3rdparty/waitingspinnerwidget.h index b3e8df9a0..d171e9beb 100644 --- a/3rdparty/waitingspinnerwidget.h +++ b/3rdparty/waitingspinnerwidget.h @@ -1,11 +1,14 @@ /* + * SPDX-FileCopyrightText: 2012-2014 Alexander Turkin + * SPDX-FileCopyrightText: 2014 William Hallatt + * SPDX-FileCopyrightText: 2015 Jacob Dawid * SPDX-License-Identifier: MIT - * License-Filename: LICENSES/MIT-QtWaitingSpinner */ /* Original Work Copyright (c) 2012-2014 Alexander Turkin Modified 2014 by William Hallatt Modified 2015 by Jacob Dawid + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to @@ -82,7 +85,7 @@ private slots: void rotate(); protected: - void paintEvent(QPaintEvent *paintEvent); + void paintEvent(QPaintEvent *paintEvent) override; private: static int lineCountDistanceFromPrimary(int current, int primary, diff --git a/AUTHORS b/AUTHORS index ecd0aafc8..1c4d7aa24 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,3 +1,7 @@ + + # MAINTAINER Calamares development is sponsored by Blue Systems GmbH - Liberating Software. @@ -34,6 +38,7 @@ and moral support from (alphabetically by first name or nickname): - Kevin Kofler - Kyle Robertze - Lisa Vitolo + - Neal Gompa - n3rdopolis - Philip Müller - Ramon Buldó diff --git a/CHANGES b/CHANGES deleted file mode 100644 index 2ed4996b2..000000000 --- a/CHANGES +++ /dev/null @@ -1,802 +0,0 @@ -This is the changelog for Calamares. For each release, the major changes and -contributors are listed. Note that Calamares does not have a historical -changelog -- this log starts with version 3.2.0. The release notes on the -website will have to do for older versions. - -# 3.2.22 (unreleased) # - -This release contains contributions from (alphabetically by first name): - - Anke Boersma - - Camilo Higuita - -## Core ## - - Both the sidebar (on the left) and the navigation buttons (along the - bottom of the window) can now be configured to use the traditional - *widgets*, to use *qml*, or *hidden* from view (hiding the navigation - is not recommended unless you have a pure-QML UI to run inside - Calamares). The example QML that is compiled into Calamares has - been improved. To use your own QML, put files `calamares-sidebar.qml` - or `calamares-navigation.qml` into the branding directory. - - The sidebar and navigation can now be placed on any side of the - main window. This is probably only useful for QML-based UIs. - See `branding.desc` for details. - -## Modules ## - - The *welcomeq* module has been improved with better layout and - nicer buttons in the example QML form. (Thanks to Anke Boersma) - - The *keyboardq* and *localeq* modules now provide some QML for - configuring these parts, although they are still very primitive. - - *netinstall* has had some minor layout fixes. - - *unpackfs* has much more detailed progress reporting and no - longer jumps around strangely in overall progress. - - -# 3.2.21 (2020-03-27) # - -This release contains contributions from (alphabetically by first name): - - Anke Boersma - - Camilo Higuita - - Gabriel Craciunescu - - Gaël PORTAY - -## Core ## - - Python job modules (such as *unpackfs* or *packages*) can now provide - a `pretty_status_message()` function, like the existing `pretty_name()` - function, that is used to update the status during install. #1330 - - QML support-modules and objects are now registered into the io.calamares - namespace. This affects modules using Calamares models inside their - QML UI (at this point, very few). With this release, the necessary - `import` for Calamares parts looks like - > ```import io.calamares.ui 1.0``` - A complete list of objects available from Calamares van be found in the - documentation in `Qml.h`. - - The sidebar (which shows overall progress in the installation) is now - more configurable: the branding key *sidebar* controls it. The sidebar - can be shown as a widget (default, as it has been), hidden, or use a - new QML view which is more easily customised. - - A new `settings.conf` key *quit-at-end* will automatically close - Calamares (by clicking on the *Done* button) when the end of the - sequence is reached. If *finished* is the last module in the sequence, - this will run whatever it is configured for; you can also leave out - the finished page and Calamares will close after the exec parts. - -## Modules ## - - *packages* now reports more details in the installation progress-bar. - - *netinstall* module supports an `expanded` key, which will pre-expand - a group (as if the user had pressed the arrow-button in the tree-view). - This only affects the UI, and only the **outermost** level of groups. - - *netinstall* module now supports a special value for *groupsUrl*. - Setting this to *local* will read the groups directly from the - configuration file. - - *netinstall* groups now support a new key `immutable` which prevents - their check-state from being changed (they are shown, or hidden, - as usual and can be expanded). - - Modules that use QML need a new import line. The QML file for the - module is configured through new keys *qmlSearch* and *qmlFilename* - (previously those were without the `qml` prefix, which invites name - collisions). The full module identifier is also used as a filename, - so that multiple instances of a module can use different QML files. - - *partition* module has a number of new features and settings for - type, UUID, and filesystem characteristics. Thanks to Gaël. - - -# 3.2.20 (2020-02-27) # - -This release contains contributions from (alphabetically by first name): - - Bart Ribbers - -## Core ## - - When logging level is set to 8 (eight), for instance via the `-D8` - logging flag, or the `-d` debug flag, the *Show debug information* - button will appear in the progress view. This helps with debugging - issues where the `-d` flag would be inappropriate. - - Calamares now starts at logging level 1 (warnings and errors to - the console) by default. Previously it (wrongly) started at level 8. - -## Modules ## - - The *partition* module now stores which filesystems are in use in - global storage. - - The *contextualprocess* module now understands "compound variable - names", where a dot (.) is used to index into structured data - stored in global storage. This allows it to use the map stored - by the partition module (but also other things, like looking into - the branding information). - - The *packages* module now understands "apk", the Alpine Linux - package manager. - - -# 3.2.19.1 (2020-02-24) # - -This is a hotfix release for bugs in the *users* module. -Reported by Philip Mueller and Walter Lapchynski. - -## Modules ## - - The *users* module no longer wrote `/etc/hostname` at all. - - The *users* module erroneously shows the root password input fields. - - The *initramfs* module sets a resume-hook even when there is no swap. - - The partitioning service expects *udevadm* in `/sbin`, but some - distro's place it elsewhere. - - The mount service didn't unmount directories properly, leading to - blocked installations. - - -# 3.2.19 (2020-02-21) # - -This release contains contributions from (alphabetically by first name): - - Anke Boersma - - Camilo Higuita - - Gabriel Craciunescu - -## Core ## - - *Assamese* translation has been completed. - - Translations are now loaded from more places: instead of **only** - being compiled in to the Calamares executable, they can now be - read from the current directory (when Calamares is run in developer - mode) and from the application data directory.This allows updating the - translations without requiring a recompile: helpful for translators - and possibly for distributions with their own translation style. - See the translators and deployers wiki for details. - - A new `ViewStep` base class, `QmlViewStep`, has been added that loads - a configurable QML file and plays it. This is used by the new *notesqml* - module -- which is in itself a minimal wrapper around the same that - adds only a translatable module name. - -## Modules ## - - The *machineid* and *users* modules now prefer high-quality random - data from `/dev/urandom` rather than pseudo-random data. #1254 - - A new *notesqml* module supports loading QML. This can be used for - "fancy" release notes as a QML application, rather than a webview - or text widget. Note that this does not replace the slideshow-during- - installation module. - - The *users* module now has knobs for setting the hostname and writing - the `/etc/hosts` file. The new configuration options are documented - in `users.conf`. #1140 - - Multiple *netinstall* modules can exist side-by-side, and they each - control the package installation for their part of the package list. - Previously, a netinstall module would overwrite all of the package - configuration done by other netinstall modules. Translations can be - provided in the configuration file, `netinstall.conf`. #1303 - - The *fstab* module no longer "claims" all the swap partitions it finds - on disk. It only uses swap specified for the current installation. - This means that "replace" and "alongside" installations will have - no swap configured in the target system. - - -# 3.2.18 (2020-01-28) # - -This release contains contributions from (alphabetically by first name): - - Bill Auger - -## Core ## - - *Assamese* translation has been added (still in preliminary state). - - Timezone support code has migrated into the core of Calamares. This - means that modules now have easier access to timezone information. - Translations for timezones have also been enabled, so it is **possible** - at least to translate the displayed zones in the *locale* module. - - Branding can now specify whether to (try to) display the Calamares window - in the middle of the desktop or not. The *windowPlacement* key in - `branding.desc` specifies *center* or *free* placement. - -## Modules ## - - All modules can now set a new key in `module.desc` called *noconfig*. - If this key is set to `true` (the default is `false), no configuration - file is searched-for or loaded, and no warning is printed if the - configuration is missing. This should tidy up some unnecessary warnings - on startup. #1302 #1301 - - The *license* module has seen a significant change to its looks. - Actions are now labeled more clearly, and the URL (or filename) - for each license is displayed. - - The *locale* module now supports translations for timezone and - location names (e.g. "Berlin" is "Berlijn" in Dutch). - - *Packagechooser* is a little more careful with displaying - default and empty package names. (thanks to Bill Auger) - - The *unpackfs* module now carries a larger weight in the overall - progress of the installation, which should resolve downstream reports - like "progress stops at 24% for a long time". This is currently - hard-coded, but will become configurable in a future release. #1176 - - -# 3.2.17.1 (2019-12-02) # - -This is a hotfix release for a bug in the grubcfg module. -Reported by Philip Mueller and Erik Dubois. - -## Modules ## - - The *grubcfg* module had a typo in it that made installations fail. - - -# 3.2.17 (2019-11-28) # - -This release contains contributions from (alphabetically by first name): - - Bill Auger - -## Core ## - - A translation "string freeze" is now enforced by the release scripts. - -## Modules ## - - A new module, *hostinfo*, places information about the host into - Global Storage. This can support contextualprocess modules that - need that information. - - The password-checks in the *users* module are now ordered consistently. - A new check *nonempty* can be used to explicitly check for a non-empty - password. This was previously hard-coded. If you have no other - password-requirements set (e.g. minimum-length) and rely on - Calamares to filter out empty passwords, add this check. - - The *grubcfg* module has a new configuration setting *keepDistributor* - which prevents replacing the `GRUB_DISTRIBUTION` line when writing - the new configuration. #1201 - - *packagechooser* documentation has been updated. - - *welcome* module now works better with dark themes. - - The *license* module could get into a confused state, now fixed. #1271 - - -# 3.2.16 (2019-11-01) # - -This release contains contributions from (alphabetically by first name): - - Bill Auger - -## Core ## - - Some obscure build scenarios which would lead to bogus module-is- - misconfigured messages on startup have been resolved. - -## Modules ## - - The explanatory messages on the *users* page have moved to tooltips, - and placeholder text has been added to the fields. #1202 - - The bad-password messages in the *users* page have been improved. #1261 - - Password-checking in the *users* module has been substantially - changed. A new key *allowWeakPasswords* can be used to introduce - an additional checkbox to the page, which can then be used to - switch off strict password checking. (Thanks to Bill Auger) - - The icons used in password warnings on the *users* page have been - changed to the colorful status icons (rather than the thin red X). - - -# 3.2.15 (2019-10-11) # - -This release contains contributions from (alphabetically by first name): - - No other contributors this time around. - -## Core ## - - No changes to core functionality - -## Modules ## - - - *displaymanager* module now treats *sysconfig* as a regular entry in the - *displaymanagers* list, and the *sysconfigSetup* key is used as a - shorthand to force **only** that entry in the list. #1253 - - *machineid* module has been re-written in C++ and extended with - a new configuration key to generate urandom pool data. #1252 - - *unpackfs* now supports a special *sourcefs* value of `file` - for copying single files (optionally with renaming) or directory - trees to the target system. - - *unpackfs* now support an *exclude* and *excludeFile* setting for - excluding particular files or patters from unpacking. #1229 - - -# 3.2.14 (2019-09-30) # - -This release contains contributions from (alphabetically by first name): - - Andrius Štikonas - - Harald Sitter - -## Core ## - - No changes to core functionality - -## Modules ## - - - *locale* module no longer recognizes the legacy GeoIP configuration. - This has been deprecated since Calamares 3.2.8 and is now removed. - - *packagechooser* module can now be custom-labeled in the overall - progress (left-hand column). #1228 - - *displaymanager* module now recognizes KDE Plasma 5.17. - - *displaymanager* module now can handle Wayland sessions and can detect - sessions from their .desktop files. #1247 #1248 - - *unpackfs* now has special handling for *sourcefs* setting "file" - (so you can copy single files or directories that are on the source - system, directly to the target). #1188 #1181 - - -# 3.2.13 (2019-08-30) # - -This release contains contributions from (alphabetically by first name): - - Arnaud Ferraris - - Arnaud Rebillout - - Bill Auger - - Kevin Kofler - -## Core ## - -- The Calamares standard coding style -- embodied in `ci/calamaresstyle` - has had a few updates and has now been consistently applied across - the core codebase (e.g. libcalamares, libcalamaresui, calamares, but - not the modules). -- *KCoreAddons* is now a required dependency. This lets us drop a chunk - of code that was copied from KCoreAddons years ago, and use the - (maintained!) upstream version instead. It also gives us KMacroExpander - everywhere, which will simplify code for handling substitutions - in configuration files. -- *Slideshows* now have a new property *activatedInCalamares* which - controls the keyboard shortcuts (and can control timers and other - properties of the slideshow, too). - -## Modules ## - -- The *packagechooser* module can load data from the config-file, - from AppData XML files referred by the config-file, and (new) also - from AppStream caches by referring to an application's AppStream id. #1212 -- The *partition* module now understands the units *KB*, *MB*, *GB* which - are powers-of-ten sizes, alongside the powers-of-two sizes that it already - used. (thanks to Arnaud) -- The *welcome* module now supports a *Donate* button if *showDonateUrl* - is set to a non-empty URL. #1197 -- The *welcome* module can have URLs for the various buttons configured - directly in the module configuration (rather than in `branding.desc`). - - -# 3.2.12 (2019-08-07) # - -This release contains contributions from (alphabetically by first name): - - apt-ghetto - - Bill Auger - - embar - -## Core ## - - - Preliminary work to allow jobs to have a *weight* assigned to them - has been added. This will allow the progress bar to better reflect - progress by the amount of work done rather than purely by the - number of jobs. (Thanks to Bill Auger) - - Preliminary work has been added to post the installation log to a - pastebin for bug reporting. (Thanks to Bill Auger) - - Support for translated human-readable strings in Calamares - config files has been added. This is used only in the *packagechooser* - module (see below) but will expand to those modules that need - user-visible strings from the configuration file (existing - solutions need either gettext or Qt support). - - Esperanto is now available when Qt version 5.12.2 or later is used. - -## Modules ## - - - *fstab* A new configuration key *efiMountOptions* has been added, to - allow setting filesystem options specifically for the EFI partition. - (Thanks to apt-ghetto) - - *packagechooser* is a new module for low-density package choices, - e.g. for selecting a default desktop environment, or adding some - proprietary drivers, or chosing browsers of office suites. It presents - **one** collection of items -- at most ten or so, because of the UI -- - and the user can select zero or more of them. The behavior is - configurable, and package information can be set through the Calamares - configuration file or by reading AppData files for the packages. #426 - - -# 3.2.11 (2019-07-06) # - -This release contains contributions from (alphabetically by first name): - - No other contributors this time around. - -This is a security release with no functional changes (except for -improved security) relative to 3.2.10. The Calamares team would like -to acknowledge the help of the following people in reporting and -understanding the issues (alphabetically by first name): - - Kevin Kofler - - Seth Arnold - - Simon Quigley - - Thomas Ward -Both CVE's have been resolved. - -## Core ## - -No core changes. - -## Modules ## - - - *initramfs* could create an initramfs with insecure permissions. - Since the keyfile is included in the initramfs, an attacker could - read the file from the initramfs. #1190 CVE-2019-13178 - - *luksbootkeyfile* created a key file where a window of opportunity - existed where the key file could have too-lax file permissions. - #1191 CVE-2019-13179 - - -# 3.2.10 (2019-06-28) # - -This release contains contributions from (alphabetically by first name): - - No other contributors this time around. - -Distributions are **advised** to check the slideshow they use for the -installation step; changes in loading and translation mechanisms may -require changes in the slideshow. - -## Core ## - - - With this release, option *WITH_PYTHONQT* changes default to **off**. - There does not seem to be any serious use of the PythonQt API and - the UI opportunities it offers, so begin the process of deprecating - and removing that. Sometime in the future, QML pages will fill the - gap for easily-prototyped-yet-slick UI elements. - - A crash when no *finished* page (or rather, no page at all) is - configured after the last *exec* section of the sequence has been - solved. The *finished* page can be left out (but then you don't get - the restart-now functionality). #1168 - - The *slideshow* which is run during installation now has API versions. - API version 1 (the default) runs as before, where the slideshow is loaded - when the installation starts. API version 2 loads the slideshow on - Calamares startup, thus improving responsiveness. Documentation - in `src/branding/README.md`. #1152 - - The example slideshow now uses API version 2. - -## Modules ## - - - *initramfs* has been changed from a Python module to a C++ module. - Packaging will need to adjust now it installs a .so instead of a .py. - The module itself functions as before. It does have a new configuration - option, to change the version passed as to the `-k` option of - update-initramfs. #1180 - - *partition* Now has its own setting for *requiredStorage*, duplicating - the same setting in the *welcome* module. This is useful for - configurations where no *welcome* module is used, but a minimum - size must be checked anyway. #1169 - - -# 3.2.9 (2019-06-03) # - -This release contains contributions from (alphabetically by first name): - - Kevin Kofler - -## Core ## - -No user- or deployer-visible changes. Bugfixing as usual, see the -milestone for details. - -## Modules ## - - - *branding* now supports os-release variables in the *strings* section, - which allows re-using (at runtime) information set in /etc/os-release . - This requires KDE Frameworks 5.58. #1150 - - *branding* allows the use of FreeDesktop.org icon names for the - *productLogo* and *productIcon* keys. If a file is named there, then - the file is used, and otherwise the icon is looked up in the current - theme. #1160 - - *packages* On Arch, with the `pacman` package manager, avoid a hang - during system update. #1154 - - *welcome* allows a custom image path or icon name to be set for the - language-selection drop-down (instead of the international standard one). - - -# 3.2.8 (2019-05-10) # - -This is a **source-incompatible** release of Calamares. Include files -have been shuffled around, so third-party C++ modules will need -adjustment to the changed names. - -This release contains contributions from (alphabetically by first name): - - Arnaud Ferraris - - Kevin Kofler - -## Core ## - - - All user-visible texts referring to "MB" and "GB" now use the standard - "MiB" and "GiB" wording, which matches what we were actually calculating - with (i.e. 2^20 and 2^30 respectively). #1129 - - The side-pane, which shows the list of steps that will be executed, - now tries to fit the text (name of each module) into the available space - by shrinking the font as needed. #1137 - - *libcalamares* (accidentally) linked with Qt's GUI libraries when - PythonQt was found. This led to the odd situation where the non-GUI - Calamares library depends on a bunch of GUI libraries. - - *libcalamares* The `utils/` subdirectory has been hugely refactored, - with functionality split out into separate files. C++ modules will - need to have their `#include` names updated. Basically, users of - `utils/CalamaresUtils.h` will need to include the header file for - the functionality that is actually used. - -## Modules ## - - - *finished* has a new mechanism for configuring the behavior of the - *restart now* button. The old-style boolean configuration is still - supported but generates a warning. #1138 - - *locale* module GeoIP configuration has a new preferred format. - See `locale.conf` for details. The old configuration is still - supported but will be phased out before 3.3.0 -- in particular, - support for "legacy" format will be removed, since that was a - crutch for the disappearance of one GeoIP provider in 2018. - - *oemid* is a new module for configuring OEM phase-0 (image pre-mastering, - or pre-deployment) things. It has limited functionality at the moment, - writing only a single batch-identifier file. #943 - - *welcome* can now do GeoIP lookups as well (but be careful with the - configuration, since you need a GeoIP that provides country information, - not just timezones). This will let Calamares select a starting language - that matches where it is -- which might not be useful at all. #934 - - All Python modules now bail out gracefully on (at least some) bad - configurations, rather than raising an exception. The pre-release - scripts now test for exceptions to avoid shipping modules with - ImportError or SyntaxError results. - - -# 3.2.7 (2019-04-27) # - -This is a **hotfix** release for regressions introduced in the -Python modules. The *localecfg* module was unusable because of -a missing `import`. - - -# 3.2.6 (2019-04-25) # - -This release contains contributions from (alphabetically by first name): - - Arnaud Ferraris - - Dominic Hayes (feren) - - Raul Rodrigo Segura (raurodse) - -## Core ## - - * Under-the-hood code cleanups in lots of parts of the core. Calamares now - builds without warnings when Clang 8 is used. - * A new *disable-cancel-during-exec* setting provides more fine-grained - control than *disable-cancel*, which hides the button entirely. - #1122 (Thanks to Dominic, FerenOS) - * A branding module can now also cause a stylesheet to be loaded, which - will be applied to the widgets inside Calamares. #961 (Thanks to Raul) - -## Modules ## - - * All of the Python-based modules now have translations enabled. #991 - * *Displaymanager* module has improved support for LightDM configuration. - #1123 (Thanks to Dominic, FerenOS) - * *License* module can now display local files inline, and scrolls to - allow longer lists of licenses and to support long license texts - displayed inline. #1124 #1125 #1052 - * *Partition* module has additional checks for validity partition layouts. - #1127 (Thanks to Arnaud) - * *Welcome* module has improved usability: a standard icon - alongside the *Language* label, for improved recognition, - and improved language-list display and sorting. #1107 - - -# 3.2.5 (2019-04-15) # - -This release contains contributions from (alphabetically by first name): - - Arnaud Ferraris - - Dan Simmons - - Gabriel Craciunescu - -## Core ## - - * View modules (in C++) can now perform their own requirements-checking - to see if installation makes sense. This expands upon the existing - requirements checks in the welcome module (RAM, disk space, ..). - The checks have been made asynchronous, so that responsiveness during - requirements-checking is improved and the user has better feedback. - * Support for building an AppImage of Calamares has been added to the - `ci/` directory. There are use-cases where a containerized build and - configuration make sense rather than having Calamares installed in the - host system. (Thanks to the AppImage team, Alexis) - * OEM mode (phase-1) now correctly refers to Calamares as a "Setup Program" - rather than an installer. #1100 (Thanks to Arnaud) - -## Modules ## - - * *Bootloader* module: a serious bug introduced in 3.2.4 which prevents - succesful boot after installation on EFI machines, has been repaired. - (Thanks to Gabriel) #1104 - * *Displaymanager* module: it is no longer a fatal error to not have any - display-managers. #1095 - * *Partition* module: it is now possible to build without libparted. Since - KPMCore may not need this library anymore, it is a dependency that will - be dropped as soon as it is feasible. Add this to the CMake flags: - `-DCMAKE_DISABLE_FIND_PACKAGE_LIBPARTED=ON` - * *Partition* module: the location that is selected for the bootloader, - no longer changes when a new partition is created. #1098 - * Python modules: several modules have had translations added. This is - usually only visible when the module runs as part of the *exec* step, - when the module's *pretty name* is displayed. In addition, some error - messages are now translated. - * *UnpackFS* module: improved progress reporting and tests. #565 - - -# 3.2.4 (2019-02-12) # - -This release contains contributions from (alphabetically by first name): - - Alf Gaida - - aliveafter1000 - - Arnaud Ferraris - - Caio Jordão Carvalho - - Collabora LTD - - Gabriel Craciunescu - - Kevin Kofler - - Philip Mueller - - Scott Harvey - -## Core ## - - * The Calamares application now recognizes the `-X` or `--xdg-config` - option, which adds XDG_DATA_DIRS to the places used to find QML - and branding directories, and XDG_CONFIG_DIRS to the places used - to find the global settings and module configurations. This allows - a more fine-grained, and more layered, approach to setting up - Calamares configurations (in particular, distro's can **add** - configuration files and give them priority, instead of **forking** - configuration files). - * The *branding* file now contains settings that control the size - and resize behavior of Calamares. See the branding file for - more documentation. In particular, the setting *windowExpanding* - can be set to *normal*, *fullscreen* or *noexpand*. - * The `settings.conf` file can now configure whether the *Cancel* button - is shown (this isn't a branding thing, because it's quite fundamental - to the workflow of the installer). - -## Modules ## - - * The *partition* module supports RAID devices, but only when Calamares - is compiled with the newest KPMCore release (3.3.0). - * The calculation of required space -- including swap -- has been simplified, - and Calamares no longer reserves 2GiB of space in calculations for internal - use (this means that it no longer mysteriously drops swap when the disk - size is close to the required installation size). - * The name of the type of default filesystem (e.g. ext4 or btrfs) is now handled - case- and localization-insensitively. This means that *btrfs* is now always - an acceptable spelling. - * The currently-selected disk device is remembered between manual partitioning - and the partitioning-overview pages. (Thanks to Arnaud) - * *partition* There is new support for partitioning layout presets. - See `partition.conf` for documentation and details. - * The *keyboard* module now handles the (bogus) Austrian keymap for - the system console properly. (Thanks to Kevin) - * The *preservefiles* module now has a mechanism for setting the permissions - (and ownership) of preserved files. (Thanks to Scott) - * New module *fsresizer* can be used to resize filesystems. It is intended - for use in OEM installs where an image of fixed size is created, - and then sized to the actual SD card the user has used. - * The *mount* module now handles missing *extraMounts* and *extraMountsEfi* - keys gracefully (this is probably a misconfiguration, though, and gives a - warning). - * The *packages* module now supports pre- and post-script options - for all operations, not just during install (keep in mind that - these run as three separate shells, though). - * A new *rawfs* module supports straightforward copying of filesystems from - the installation media to the target stystem. This can be used, for instance, - for block-level-identical installations. - - -# 3.2.3 (2019-01-09) # - -This release contains contributions from (alphabetically by first name): - - aliveafter1000 - -## Core ## - -There are no core changes in this release. - -## Modules ## - - * *partition* Fixed bug where, during detection of existing systems, the - existing system partitions may be mounted and then files deleted. - This is a **limited** version of the patch from aliveafter1000 - that will be in 3.2.4, which tries harder to mount filesystems - read-only and unmodifiable. - * *locale* It was possible to set the installer and system language - (e.g. to German) while the global storage value for *locale* - remained set to English. Then no localization packages are installed - (see feature `${LOCALE}` in `packages.conf`). Reported downstream - in Netrunner. - - -# 3.2.2 (2018-09-04) # - -This release contains contributions from (alphabetically by first name): - - Andrius Štikonas - - artoo@cromnix.org - - Caio Jordão Carvalho - - Harald Sitter - - Philip Müller - - Simon Quigley - - Walter Lapchynski - -## Core ## - - * Example configurations are **no longer installed** by default. - The default setting for *INSTALL_CONFIG* has changed. Distributions - are strongly encouraged to write their own configuration files and - not rely on the example configuration files. Example configurations - may change unpredictably. - * It is now possible to express module dependencies through the - *requiredModules* key in `module.desc`. All of the required modules - for a given module must occur in the sequence **before** the module - requiring them. None of the core modules use this facility. - * The search paths for QML files, branding descriptors and module - descriptors have been revamped and now self-document in the log. - * A new `ci/RELEASE.sh` script has been added to streamline releases; - it is not guaranteed to work anywhere in particular though. - -## Modules ## - - * When multiple modules are mutually exclusive, or don't make sense - to enable concurrectly, a new `USE_` framework has been added - to CMake to simplify the selection of modules. This is in addition - to the existing `SKIP_MODULES` mechanism. - * Various off-by-one-sector errors in the automatic partitioning - mode have been corrected. In addition, swap space is calculated - a little more conservatively. - * A new module has been added to the core which can configure openrc - services. To make services configuration consistent: - - The *services* module has been **renamed** *services-systemd*, - - The openrc module is named *services-openrc*, - - At CMake time, it is possible to select all of the services modules, - or one specific one, by setting the *USE_services* CMake variable. - By default, all of the modules are built and installed. - * The systemd-services module can now disable targets and mask both - targets and services (which will allow you to break the system with - a bad configuration). The configuration is a little more flexible - because a service (or target) name can be used on its own with - sensible defaults. - * The displaymanager module has been entirely revamped. A long-standing - bug which ignored the settings for default desktop has been fixed - (thanks to Walter Lapchynski). Translations have been added to the - error messages. Each DM now has an implementation class for doing - all the configuration steps it needs. This groups the code needed for - a specific DM (and presumably, per-distro) in one place. - Distro's are **strongly advised** to re-test their DM configuration - and installation with the revamped code. - -# 3.2.1 (2018-06-25) # - -This release contains contributions from (alphabetically by first name): - - Bill Auguer - - Gabriel Craciunescu - - Phil Mueller - - Raul Rodrigo Segura - -## Core ## - - * Qt 5.7 is now the minimum required Qt version. Because KPMCore - (a fairly fundamental dependency) requires Qt 5.7, Calamares - has followed suit. - * New testing application `loadmodule` for loading and running a - single Calamares module. - * New translations Belarussian and Korean. - * Jobs can now be *emergency jobs* which run even after a failure. - * Improved debugging when modules fail to load. - * Bad configuration files will now cause the user-interface of - Calamares to display an error message, rather than silently - ignoring some configuration errors. This will certainly cause - problems for distributions with sloppy configurations. - -## Modules ## - - * New module preservefiles, keeps (log) files around after install; - this duplicates functionality with the unmount module, but unmount - is very late, rather limited, and fragile. - * Interactiveterminal module now disables itself if build requirements - are not met, rather than blocking the build. - * Fixes in the timezone map data make the southern hemisphere more - usable and put Reykjavik in its place. - * The packages module can now update the target system if explicitly - told to do so. - * More paths and executables are configurable in the bootloader module. - * Distributions are advised to review the `users.conf` setup **again**, - as some changes in version 3.2.0 caused regressions downstream. - * Distributions are advised to review their `locale.gen` files - **again**. Previous changes were too restrictive, matching only - the specific format Chakra Linux uses. Calamares now preserves - all the comment-lines in the file and writes enabled locales - at the end, with a descriptive comment. - -# 3.2.0 (2018-05-17) # - -This release contains contributions from (alphabetically by first name): - - Alf Gaida - - AlmAck - - Caio Jordão Carvalho - - Frede H - -## Modules ## - - * UI annoyances in the partitioning module were fixed; the - mount-point selector is now more obvious when no mount-point - has been chosen, and the mount-point and flags are preserved - when (re)editing partitions. - * The handling of `@@ROOT@@` substitution in shellprocesses was - backwards; this has been fixed (the substitution is made when - running in the **host**). - * The user shell is no longer hard-coded to `/bin/bash`, - but follows the default setting for useradd(8), e.g. - those set in `/etc/default/useradd`. diff --git a/CHANGES-3.2 b/CHANGES-3.2 new file mode 100644 index 000000000..2c5e0bdcd --- /dev/null +++ b/CHANGES-3.2 @@ -0,0 +1,1964 @@ + + + +This is the changelog for Calamares. For each release, the major changes and +contributors are listed. Note that Calamares does not have a historical +changelog -- this log starts with version 3.2.0. The release notes on the +website will have to do for older versions. + +# 3.2.58 (2022-05-18) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Arjen Balfoort + - Enrique Medina Gremaldos + - Evan James + +## Core ## + - Internal improvements to translations-setup means that Catalan (in the + Valencian dialect), Occitan (Lenga d'Oc) and Serbian (in Latin script) + are all better supported. Thanks Enrique. + +## Modules ## + - *netinstall* Now displays entries with an empty name slightly differently. + An empty name is not generally useful, but in combination with + *immutable:true* and *selected:false* can be used to introduce separators + or descriptive comments into the list of packages. + - *partition* does not offer full-disk encryption when using ZFS. ZFS and the + way Calamares sets up FDE don't mix well. (Thanks Evan) + - *partition* Various bugs related to LUKS have been fixed. (Thanks Arjen) + - *users* module now has a structured *user* key with settings specific + to the user (shell, in particular). This maintains backwards compatibility + with the *userShell* key. + - *users* module now has lists of forbidden login- and host-names, to + avoid settings that will mess up the install (e.g. using a login-name + that is one of the system's reserved names). #1944 + + +# 3.2.57 (2022-05-04) # + +This release contains contributions from (alphabetically by first name): + - Arjen Balfoort (new contributor! Welcome!) + - Victor Fuentes + +## Core ## + - Calamares can now be started in Serbian (Latin Script) and Catalan + (Valencia) when the LANG environment variable is set to values + that indicate those languages. + +## Modules ## + - *fstab* and *luksbootkeyfile* have better support for an **un**encrypted + `/boot` partition. #1931 (thanks Arjen) + - *packagechooser* and *packagechooserq* can now be given a custom name + in the side-panel. #1932 (thanks Victor) + + +# 3.2.56 (2022-04-22) # + +As of this release, Calamares 3.2 development is winding down. The +reason is simple: systems where the backwards-compatibility of Calamares +3.2 is important are becoming increasingly difficult to work with +for **other** reasons. Foremost among these are deprecated versions +of dependencies and tools. Calamares 3.2 branch remains open for +bugfixes and will see a few more releases, but development is now +shifting wholesale to the newer generation. + +This release contains contributions from (alphabetically by first name): + - Victor Fuentes (new contributor! Welcome!) + +## Core ## + - Changes in git forced some changes on the CI tooling. + +## Modules ## + - *locale* showed the wrong timezone for Dhaka, although it configured + the correct one. #1929 + - *users* module sets global storage key *fullname* to the full name + of the user (e.g. what is entered in the "your full name" box on the + users page). #1923 (Thanks Victor) + + +# 3.2.55 (2022-04-11) # + +This release contains contributions from (alphabetically by first name): + - vtriolet (new contributor! Welcome!) + +## Core ## + - `readTargetFile()` did not properly return all the lines of the target + file. #1918 (thanks vtriolet) + +## Modules ## + - *users* module has rearranged configuration for setting the hostname. + Legacy settings are preserved, but produce a warning. Please see + `users.conf` for details. + - *users* module has a new hostname.location setting, *Transient*, which + will force the installed system to transient-hostname-setting by removing + the file `/etc/hostname`. + - *users* module has a new hostname.template setting, which allows some + tweaking of how the hostname suggestion is constructed. In particular, + it can be configured to use the current hostname (whatever that may be). + See the example `users.conf` for details on available keys. + + +# 3.2.54 (2022-03-21) # + +This release contains contributions from (alphabetically): + - Bob van der Linden (new contributor! Welcome!) + - El-Wumbus (new contributor! Welcome!) + - Evan James + - Santosh Mahto (new contributor! Welcome!) + +## Core ## + - During the installation ("exec") step, while the slideshow is displayed, + there is also a button to show the scrolling installation log as it + is written. (Thanks Bob) + +## Modules ## + - *fstab* module correctly handles empty UUID strings. (Thanks Evan) + - *partition* module no longer forgets configured partition-layouts. + It also respects configured partition labels better. (Thanks Santosh) + + +# 3.2.53 (2022-03-04) # + +This release contains contributions from (alphabetically by first name): + - Huang Jia Wen (new contributor! Welcome!) + +## Core ## + - Automount-manipulation (to switch off KDE Plasma automounting new devices) + now logs slightly more as it works. Defaults have changed in KDE Plasma + 5.24 and it turns out the automount-manipulation does not work well. + Distro's are encouraged to turn off automount in the live ISO (see #1885). + +## Modules ## + - *bootloader* now knows about loongarch64 and can install suitable EFI + files for this CPU type. (Thanks Huang Jia Wen) + - Progress reporting for `pacman` from the *packages* module has been switched + off. The progress reporting works under low load, but there are many reports + of it crashing (from XeroLinux and from Evan James, who has been debugging + the issue) during a regular installation with thousands of updates. This + will be revisited in the next release. + - The *umount* module was buggy and did not actually unmount anything. + + +# 3.2.52 (2022-02-25) # + +This release contains contributions from (alphabetically by first name): + - Evan James + +## Core ## + - No core changes yet + +## Modules ## + - *fstab* recognizes nvme and mmc devices correctly as SSDs now. #1883 + - *luksbootkeyfile* handles trailing slashes in mount point + - *partition* can be built with a new `SKIP` option, which skips + the actual formatting steps but does not fail. The old `LAME` + option is renamed `BAIL_OUT`. + - *users* has a new key *sudoersConfigureWithGroup* to allow for + different styles of sudo configuration. #1887 + + +# 3.2.51 (2022-02-01) # + +This release contains contributions from (alphabetically by first name): + - Evan James + +**WARNING** The *umount* module has been rewritten in C++. Check your +configuration if you previously used the copy-a-log functionality. + +## Core ## + - Evan has made a start on documenting which Global Storage keys there + are and how they tie modules together. This can be found in the + `src/modules/README.md` documentation. + +## Modules ## + - *bootloader* can now be configured to try to generate a unique + suffix for the bootloader-id. #1820 + - *grubcfg* now has a configurable default for kernel parameters, + which allows distributions to change the value from `quiet`. + The default, if nothing is set, remains `quiet`. Use an explicitly- + empty list to specify no-arguments-at-all. + - *packagechooser* can now export its choices for use by the *netinstall* + module. This makes it possible to use *packagechooser* for large-scale + choices, followed by *netinstall* for fine-grained control. (Thanks Evan) + - When the *partition* module has a conflicting configuration for the + swap choices, it prints a warning and uses the configured choice, rather + than always using "suspend". #1881 + - The *umount* module has been re-written in C++. The copy-a-log-file + functionality has been removed. Use the *preservefiles* module for that. + + +# 3.2.50 (2022-01-18) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Erik Dubois + - Evan James + - Johannes Kamprad + - Taejun Park (new contributor, welcome!) + +**Replacement notice:** The *umount* module will be replaced by a C++ +implementation in the next release. The "preserve log file" feature +will be removed in that release. Use the *preservefiles* module instead. + +## Core ## + - No core changes yet + +## Modules ## + - *initcpiocfg* mentioned a special kernel-name "all", which did not work, + and a special kernel-name "$uname" which cannot work. Fixed the former + and removed the "$uname" special key. (Thanks Evan) + - *luksswaphookcfg* has been converted to a C++ module. + - *networkcfg* could fail to update the NetworkManager configuration + if the SSID or username contained non-ASCII characters **and** the + default Python text-file encoding was set to ASCII. The files are + now read and written in UTF-8, explicitly. #1848 + - *partition* always sets *bigtime* option on XFS filesystems, if possible. + Requires sufficiently-recent xfsprogs. #1874 + - *preservefiles* was missing some necessary features, needed for it + to replace the deprecated log-file-saving functionality in the *umount* + module. (Thanks Erik and Joe for testing) #1851 + - *umount* is now marked as an emergency module in the example configuration, + since it should **probably** be run as a cleanup. (Thanks Evan) + - *welcome* and *locale* could be confusing, together, and configure + the target system with a language that does not match the installer + language, even though the user did not make any explicit choice. + (Thanks Taejun) #1864 + + +# 3.2.49.1 (2021-12-11) # + +This is a hot-fix release, to fix a regression in the calculation of +swap-size. Reported by EndeavourOS (Joe Kamprad) and Xero Linux. + + +# 3.2.49 (2021-12-10) # + +This release contains contributions from (alphabetically by first name): + - Artem Grinev + - Evan James + +Distributions are **specifically** reminded to update the *umount* module +configuration (and to use *preservefiles* if needed). + +## Core ## + - Errors (e.g. when an installation fails for whatever reason) are displayed + in a dialog with a scrollable details panel, rather than growing up + to the size of the screen. (Thanks Artem) + +## Modules ## + - *bootloader* better supports multiple installations of the same OS. + - *mount* supports btrfs subvolumes on subdirectories of / now. + - *partition* now supports "deep" btrfs subvolume names, e.g. a + separate subvolume for `/usr/local`. (Thanks Evan) + - The *umount* module now warns if the "preserve log file" feature is used. + This has been deprecated for a long time: use the *preservefiles* module + instead. A future release will turn this into an error. + + +# 3.2.48 (2021-12-03) # + +This release contains contributions from (alphabetically by first name): + - Evan James + +## Core ## + - Python modules now have `warn()` and `error()` methods they can call, + alongside the existing `debug()` and `warning()` (all live in the + *libcalamares.utils* module). + - Python modules can load YAML files via `libcalamares.utils.load_yaml()`. + This may be the most useful for test-scripts. + +## Modules ## + - *fstab* now has a separate, special, flags-setting for swap subvolumes + on btrfs. A swap subvolume is created if a swap **file** (not a separate + partition) is selected in the auto-partitioning page. (Thanks Evan) + - When using btrfs, the *mount* module creates subvolumes. It was not + possible to **avoid** having a subvolume name created for the root. + This is now possible. #1837 + - The *packages* module now has some special settings for the `pacman` + package manager (generally used on Arch-derivatives). This allows + tweaking of the installation process, if downloads are slow or + packages may fail to install. See the `packages.conf` file for + details. (Thanks Evan) + + +# 3.2.47 (2021-11-19) # + +This release contains contributions from (alphabetically by first name): + - Evan James + - Jonas Strassel + +## Core ## + - The translation for Sinhala (`si`) has reached 100%. Thank you to + හෙළබස and Sandaruwan, translators for Sinhala, for special effort + in completing that translation. + - Logging now supports Redacted names. This reduces the scope for + leaking names or other private information through the logs + (if they are posted to a pastebin). A name is redacted consistently + within one run of Calamares, but differently each time. + +## Modules ## + - *bootloader* with systemd-boot now handles root subvolumes better + (Thanks Evan) + - *displaymanager* supports the *greetd* display manager, which is a + kind of meta-DM itself, supporting multiple greeters. (Thanks Jonas) + - *finishedq* now has an extra example QML file that builds the UI in + a different fashion, demonstrating how a mobile-OS customization of + Calamares would present the "all done" message. + - *fstab* has an example configuration file that mentioned `space_cache` + as an option. Since 2014 there was only one possible value, so this + option matched the default-and-only value. Newer kernels with newer + btrfs versions have a `v2` option value as well. Remove the example + option, since the kernel automatically picks the right value, while + setting it to the wrong one may prevent the system from booting. + (Thanks Evan) + - The *partition* module no longer logs recognizable disk names or + UUIDs. These are redacted in the logs. #1593 + - The *partition* module, together with the new *zfs* module and changes + in *mount* and *bootloader* can install to ZFS **if** the distribution + kernel supports it. ZFS tools are required, as well as the relevant + kernel modules. See the `README.md` in the *zfs* module. (Thanks Evan) + + +# 3.2.46 (2021-11-09) # + +This release contains contributions from (alphabetically by first name): + - Philip Müller + +## Core ## + - A new core class `Runner` is now responsible for running commands + either in the host or in the target system. This is invisible for + end-users, but **does** expand the API available to consumers inside + Calamares modules. In particular, Python modules can now easily read + and respond to command output. #1740 + +## Modules ## + - *fstab* writes a slightly different message in `/etc/crypttab` + about the root filesystem. Since Calamares itself ignores the + (previous wording of) message, it was confusing. #1811 + - *packages* module has some support for reporting progress while + the packages are installed. This depends on the package-manager itself + reporting useful progress information **and** the *packages* module having + support-code to interpret that progress. A proof-of-concept for `pacman` + has been implemented. #1582 + - *partition* has a number of edge-cases for LVM and LUKS resolved. #1564 #1817 + - *partition* module once again always offers `/boot` as a mount-point, even + when EFI would want `/boot/efi`. (Thanks Phil) + - *summary* had a regression and showed some descriptive texts twice. + + +# 3.2.45 (2021-10-31) # + +This release contains contributions from (alphabetically by first name): + - Evan James (new contributor, welcome!) + +## Core ## + - New internal convenience functions from Evan + +## Modules ## + - *packagechooser* now displays screenshots nicely-scaled + rather than jagged. (#1807) + - *partition* module removes ZFS partitions directly. At install-time, + we think that the partitions should be handled separately from a + zpool that potentially includes those partitions. (Thanks Evan) + - *services-systemd* supports timers, e.g. for weekly trim on SSDs. + (Thanks Evan) + + +# 3.2.44.3 (2021-10-04) # + +This is not a hotfix release, but a tiny-tiny incremental improvement +that fixes one hugely annoying -- user-facing message presenting +bytes as mebibytes -- bug in the partition module. + +## Modules ## + - The *partition* module now consistently uses the configured EFI + partition size (defaults to 300MiB). + - Internal changes in the *summary* module to increase consistency + between *summary* and *summaryq*. + + +# 3.2.44.2 (2021-09-27) # + +This release contains contributions from (alphabetically by first name): + - Corey Lang (new contributor, welcome!) + +This is a hotfix for a typo -- not a syntax error -- that affects the +*networkcfg* module. Reported and fixed by Corey. + + +# 3.2.44.1 (2021-09-24) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + +This is a hotfix for a typo -- not a syntax error -- that affects the +*initcpiocfg* module. Reported and fixed by Anke. + + +# 3.2.44 (2021-09-24) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Shrinivas Vishnu Kumbhar (new contributor, welcome!) + - whorfin (new contributor, welcome!) + +## Core ## + - "Log spam" has been reduced a little in the partitioning module. + +## Modules ## + - *initcpiocfg* has had a number of internal code-fixes, and now adds + the `consolefont` hook by default as well. (Thanks Shrinivas) + - Both *locale* and *keyboard* have received some tweaks for configurations + in India; unless the user selects otherwise, English is preferred. + - The *luksbootkeyfile* module was reported to be too quick to declare + a timeout when applying the keyfile. The timeout has been increased + to one minute. (Thanks whorfin) + - *networkcfg* tries harder to find the live-user login for re-working + networking settings. This fixes a regression on FerenOS, where the + installer was crashing because it could not find the live-user login. + + +# 3.2.43 (2021-09-17) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Joe Kamprad + +## Core ## + - Translations have been made more consistent. In particular, some *OK*, + *Yes*, *No* and *Cancel* buttons that were previously untranslated + or "stuck" in the language that Calamares started in, are now + changed to the current language as selected in the welcome page. + - Documentation improvements from Joe Kamprad. A *sizeLimit* of zero + (which is the default if nothing is set in the branding configuration) + disables log uploads. + +## Modules ## + - The *keyboardq* module (QML-based UI for keyboard-layout-selection) + now features an interactive keyboard preview and has the + layout adjusted. (Thanks Anke) + + +# 3.2.42 (2021-09-06) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Artem Grinev + - Nico 'dr460nf1r3' (new contributor, welcome!) + - Waneon Kim (new contributor, welcome!) + +## Core ## + - No core changes yet + +## Modules ## + - BTRFS partitions are no longer listed as "check in phase 2" in + the *fstab* module. (Thanks Nico) + - The *keyboard* module (and *keyboardq*) now pick an English layout + (with Rupee) for keyboards when the language is English and locale is India, + rather than Hindi layout. + - The *localeq* module had the i18n.qml rewritten to make it easier + to customize. A bug in the layout has been fixed, and the overall + look has been updated. + - *networkcfg* now translates the "live user" on an ISO to the regular + user on the installed system, so that network configuration changes + made in the live system are automatically used after installation. #1755 + - *partition* no longer allows you to delete an extended partition with + children (which led to crashes). #1749 (Thanks Artem) + - *partition* complains in more detail about the state of the UEFI + boot partition (under manual partitioning schemes). #1761 + - *welcome* can now check multiple URLs to determine if internet connectivity + is available. It is still recommended to check the distro home-page or + some special "ping" page of the distro, although that has some privacy + implications; using example.com or google.com may work as well. Listing + multiple URLs will ping each of them in turn until one succeeds. #1669 + - The work to make a QML version available for all view modules is almost + completed. Two new QML modules have been added *packagechooserq* and *summaryq*. + Summaryq brings the option to present the summary page in a customizable + way, with a bit more of a contemporary look. Packagechooserq adds the option + to preselect an item and displays all options in one overview. + (Thanks Anke) + + +# 3.2.41.1 (2021-08-05) # + +This is a hotfix release for a crash in the *partition* module, reported on +KDE neon. #1746 + + +# 3.2.41 (2021-07-31) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Camilo Higuita + +## Core ## + - The (re)translation framework has been internally re-vamped to be + less resource-intensive and to work with all QObjects, not just + widgets. Consumers of the translations framework are expected to + set up the event filter on the top-level widget(s) manually. Since + Calamares and the Calamares-test-applications have been adjusted already, + no further action is needed. + +## Modules ## + - When the *keyboard* module is activated, it no longer replaces + an explicit user choice (e.g. for a Belgian layout) by a guessed-for- + this-language layout (e.g. Danish if you're installing in Danish). + - Logic for handling installation lists has been moved around in the + *packages* module so that package managers can, in principle, + adjust how to handle critical and non-critical package lists. + - In the *partition* module, translation code has been simplified. + - The *usersq* module has had a fair bit of QML rewritten to make it easier + to customize the colors used by the module in a consistent way. + (Thanks Anke) + - *Welcome* now uses a translated message from the Config object, + increasing the sharing between widgets- and QML-modules. + + +# 3.2.40 (2021-07-14) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Anubhav Choudhary (SoK success!) + - Emmanuel Arias (new contributor! welcome!) + - Erik Dubois + - Jerrod Frost (new contributor! welcome!) + - Jia Chao (new contributor! welcome!) + - Joe Kamprad + - Lisa Vitolo (blast from the past!) + - Omer I.S. (new contributor! welcome!) + +In project news, chat (instant-messaging) communications has largely +moved to Matrix and Libera.Chat. CI notifications -- issues and build +results -- are sent to Matrix only. + +## Core ## + - The CMake modules for consumption by external modules (e.g. the + calamares-extensions repository, but also any other modules built + by distro's for internal use) now support consistent skip-module + behavior and reporting. #1641 (one tiny part of this change) + - In global storage, the *filesystem_use* key now has an API in + libcalamares to systematically mark filesystem (types) as "in use" + or not. This, in turn, means that modules can depend on that information + for other work (e.g. removing drivers for unused filesystems). #1635 + - The "upload log file" now has a configurable log-file-size. (Thanks Anubhav) + +## Modules ## + - *bootloader* can now install an aarch64 (ARM) compatible EFI GRUB. (Thanks Jia) + - *displaymanager* example configuration has been shuffled around a bit, + for better results when the live image is running XFCE. Also lists + more potential display managers. #1205 (Thanks Erik) + - *keyboard* now switches on an alternate `en_US` keyboard layout when + Arabic or Hebrew is selected as primary layout. (Thanks Omer) + - *localeq* now has a fully functional offline option (alongside the default + interactive map option, which requires internet). + - The *netinstall* module can now fall back to alternative URLs when + loading groups data. The first URL to yield a non-empty groups + collection is accepted. No changes are needed in the configuration. #1673 + - *packagechooser* can now integrate with the *packages* module; that + means you can specify package names to install for a given selection, + and the regular package-installation mechanism will take care of it. + Legacy configurations that use *contextualprocess* are still supported. + See the `packagechooser.conf` file for details. #1550 + - A long-neglected pull request from Lisa Vitolo for the *partition* + module -- allowing to set filesystem labels during manual partitioning -- + has been revived and merged. + - The *partition* manager has had a long-standing bug with partition-flags + and manual partitioning resolved. This may help resolve some installation + issues on UEFI systems. #1724 + - *usersq* is further implemented and can now be used for a successful install. + Not all warning messages available in the regular users module are implemented. + + +# 3.2.39.3 (2021-04-14) # + +A minor bugfix tweak release. Since this contains yet **another** +autologin-related fix, and there is nothing large enough to justify +a 3.2.40 release yet, add it to the growing tail of 3.2.39. (Reported +by Joe Kamprad, #1672). Also fixes a regression from 3.2.28 in +localized packages (e.g. *package-LOCALE* did not work). + + +# 3.2.39.2 (2021-04-02) # + +This is **another** hotfix release for issues around autologin .. +autoLogin, really, since the whole problem is that internal capitalization +changed. An unrelated bug in writing /etc/default/keyboard was +also fixed. (Reported by pcrepix, #1668) + + +# 3.2.39.1 (2021-03-30) # + +This hotfix release corrects a regression in the *displaymanager* +module caused by changes in the *users* module; autologin was +internally renamed and no longer recognized by the *displaymanager* +module. (Reported by Erik Dubois, #1665) + + +# 3.2.39 (2021-03-19) # + +This release contains contributions from (alphabetically by first name): + - Matti Hyttinen + +## Core ## + - A *packages* service has been added to the core, for use by + *netinstall* module and any others that need to set up + package information for the *packages* module. + +## Modules ## + - The *mount* module has gained a configurable setup for btrfs volumes. + If your distro has a default-to-btrfs setup, it can skip the hard- + coded setup (which Calamares has had for a long time with @home + and similar) and introduce a custom btrfs configuration through the + `mount.conf` file. See issues #1659 and #1661 for warnings about + using this in production. + - *netinstall* now supports fallbacks for the groups data. + Instead of a single URL, multiple URLs may be specified in + a list and Calamares goes through them until one is successfully + retrieved. Older configurations with a single string are + treated like a one-item list. #1579 + - The *usersq* module now connects to the internal configuration + object and may be usable for regular installations. + + +# 3.2.38.1 (2021-03-15) # + +This hotfix release is for this item in the release notes of 3.2.38: + - The .desktop file for Calamares now makes a longer trip, calling + `sh -c "pkexec calamares"`; distributions may still need to adjust. +The change had been lost while updating other files. It has been restored +in `calamares.desktop` and `calamares.desktop.in`. (Reported by Erik) +Other minor changes and fixes: + - presets in the *users* module show the hostname, too, + - translations update for Korean, Ukranian and Chinese (zh_TW). + + +# 3.2.38 (2021-03-14) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Anubhav Choudhary + - Neal Gompa + +## Core ## + - Uploading your log files (in case of installation failure) has been + expanded and is now more configurable. Users should still take care + when uploading logs, and distro's should configure a URL with + no public viewing of those logs. (Thanks Anubhav) + - The .desktop file for Calamares now makes a longer trip, calling + `sh -c "pkexec calamares"`; distributions may still need to adjust. + +## Modules ## + - A new QML-based *finishedq* module has been added. (Thanks Anke) + - The *packages* module no longer supports *urpmi*; no Calamares- + consumers with that package manager seem to exist. (Thanks Neal) + - The *users* module now can set a fixed username and prevent editing. + The *presets* configuration entry in `users.conf` can set a *loginName* + and a *fullName* and (independently) enable or disable editing of + that value. You can, for instance, set *loginName* to "manjaro" if + you like; the user can change it afterwards. You could set the + *loginName* to "oem" and prevent editing it as well. #942 + + +# 3.2.37 (2021-02-23) # + +This release contains contributions from (alphabetically by first name): + - benne-dee + +## Core ## + - Calamares has a table of 'best guess' languages for each country + and when GeoIP is enabled, it will automatically select that + country's language as default -- the user can of course pick + a different one. The 'best guess' is based on Unicode / ISO + data, which is sometimes dubious. Based on some personal notes, + the 'best guess' language for Belarus has been changed to Russian. + - Calamares has a table of 'best guess' keyboard mappings, + allowing native language input. However, usernames and + passwords should be in US-ASCII (this is a limitation of + the login system -- **some** parts of the system will support + non-ASCII input, but it's better safe than sorry). + Add Greek to the list of languages that needs US-ASCII + in addition to native input. + - The CI infrastructure now builds Calamares and Calamares-extensions + on a nightly basis. + +## Modules ## + - The *netinstall* module has a YAML schema, allowing packagers + to validate and verify their netinstall configurations before + shipping an ISO (or writing bug reports). Thanks benne-dee. + - The *finished* module has been heavily refactored, opening + the way to a QML-based version of the same module. This is + also preparatory work for allowing packagers (e.g. PostmarketOS) + to customize the messages on the finished page. + + +# 3.2.36 (2021-02-03) # + +This release contains contributions from (alphabetically by first name): + - Anubhav Choudhary + - benne-dee + - Gaël PORTAY + - Jonas Strassel + - Kevin Kofler + - Matti Hyttinen + - Neal Gompa + +## Core ## + - It is now possible to hide the *next* and *back* buttons during + the "exec" phase of installation. Thanks Anubhav. + - The Calamares CI has migrated to GitHub actions. Thanks Jonas. + +## Modules ## + - *bootloader* now uses the current file names for the UEFI Secure Boot + shim instead of obsolete ones. + - The *mount* module creates swap in its own subvolume, if btrfs is used. + Thanks Matti. + - *partition* includes more information about what it will do, including + GPT partition types (in human-readable format, if possible). Thanks Gaël. + - Some edge-cases with overlay filesystems have been resolved in the + *partition* module. Thanks Gaël. + - During the creation of filesystems and partitions, automounting is + turned off (if DBus is available, and the host system supports + KDE Solid automount control). This should reduce the number of + failed installations if automount grabs partitions while they are + being created. The code is prepared to handle other ways to control + automount-behavior as well. + + +# 3.2.35.1 (2020-12-07) # + +This release contains contributions from (alphabetically by first name): + - Anubhav Choudhary + - Matti Hyttinen + +Some strange string artifacts appeared, leading to `{1?}` being +displayed in various user-facing messages. These have been removed +and the translations updated. + +## Modules ## + - The *initcpiocfg* module would sometimes configure the system to ask + for a passphrase, when none is needed. + + +# 3.2.35 (2020-11-30) # + +This release contains contributions from (alphabetically by first name): + - Clarissa Borges + - Matti Hyttinen + +A new kind of issue template has been added for Calamares, +for reporting (and adding tests for) usability issues. Thanks +to Clarissa for leading that effort. + +## Core ## + - No core changes yet + +## Modules ## + - The *partition* module now supports a not-full-disk-encryption setup, + where `/boot` is not encrypted, but the rest of the system is. + - The *plasmalnf* module has been substantially rewritten, so that it + can support a QML version of the module in future. The UI has changed + a little, and now displays more themes than before. + + +# 3.2.34 (2020-11-16) # + +This release contains contributions from (alphabetically by first name): + - Artem Grinev + - Gaël PORTAY + +## Core ## + - No core changes yet + +## Modules ## + - The *keyboard* module had a regression in which it no-longer painted + the keycaps in the keyboard preview. (reported by Vinnie) + - The *plasmalnf* module did not set all of the look-and-feel values + in the target system. (reported by Bluestar Linux) + - In the *users* module, warnings about the strength of the password + are now correctly pluralized when possible. + - In the *users* module, if ICU is installed, the user's full name is + automatically transliterated to US-ASCII (for some locales; this will + need tweaking) so that the login name is acceptable. (Thanks Artem) + + +# 3.2.33 (2020-11-09) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Andrius Štikonas + - Artem Grinev + - Gaël PORTAY + - Matti Hyttinen + - TTran Me + +## Core ## + - 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! (Thanks TTran) + +## Modules ## + - The *initcpiocfg* module should support plymouth with encryption + now. (Thanks Matti) + - The *keyboard* and *keyboardq* modules now share backend code + and handle non-ASCII layouts better (for setting passwords + and usernames). (Thanks Artem) + - Various cleanups and documentation improvements in the *partition* + module, and configurable GPT name for swap. (Thanks Gaël) + - A long-standing bug related to GPT partition flags in the + *partition* module has been resolved. #1327 #1267 + - The *users* module now has a more detailed way to specify + user groups -- which may be system groups rather than user-GIDs. + A new option in each group can require that the group already + exists in the target system, allowing for better consistency checks + with the squashfs. #1523 + + +# 3.2.32.1 (2020-10-17) # + +This is a release to address source-incompatible changes in KPMcore 4.2.0, +which was released just before Calamares 3.2.32 and had not yet been +compile-tested. There is also one changed message in the translations, +reported by Yuri Chornoivan. + + +# 3.2.32 (2020-10-16) # + +This release contains contributions from (alphabetically by first name): + - Fabian Tomat + - Gaël PORTAY + +## Core ## + - When doing GeoIP lookups, Calamares pretends to be Firefox. + This resolves an issue where the GeoIP provider was refusing + QNAM connections with the default User-Agent. + - New translation available, Friulian. Welcome! + +## Modules ## + - The *netinstall* module has some tricky configuration files; + it now complains about more cases of bad syntax or poor structure. + - The *partition* module can now be constrained to work only with + a particular kind of partition table. (thanks Gaël) + - The *partition* module is a little more resilient to variations + in btrfs notation from os-prober. + - The *shellprocess* module now supports having a different progress + message (other than "Shell Processes Job") through the config file. + + + # 3.2.31 (2020-10-06) # + +This release contains contributions from (alphabetically by first name): + - Corentin Noël + - kadler15 (new contributor! hi!) + +## Core ## + - At the start of the *exec* phase, an overview is given of the + various job weights, which allows you to tweak the overall + progress reporting during the installation. + - Problems with running Calamares on a 1-core single CPU have been resolved. + +## Modules ## + - The *keyboard* module now recognizes Turkish "F" layout and + will set the vconsole keyboard layout correctly even if xkb + keymaps are not found. + - The *machineid* module, which generates UUIDs for systemd and dbus + and can generate entropy files (filled from `/dev/urandom` in the host + system) now supports more than one entropy file; generate them as needed + (or copy a fixed value to all, depending on *entropy-copy*). Deprecate + *entropy* (which generates a specific output file) as too inflexible. + - In the *partition* module, swap can now be chosen as *file*, which is + **not** create a swap partition, but write a `/swapfile` in the root + directory, 512MiB large, and set that as swap. There is as yet no + "smarts" about the size of the swap file. + - Multiple problems in the *partition* module around partition + sizing have been resolved by Corentin Noël. + - The *preservefiles* module documentation did not match the functionality, + and when used, didn't work right. #1521 (thanks kadler15) + - Progress reporting from the *unpackfs* module has been revamped: + it reports more often now, so that it is more obvious that files + are being transferred even when the percentage progress does not + change. + - The *unpackfs* module now supports a *weight* setting for each + of the unpack entries. For a single entry this does not matter, + but if there are multiple entries it allows tweaking the relative + progress between each entry. + + +# 3.2.30 (2020-09-03) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Asif Mahmud Shimon + - Manzoor Ahmed Munawar + - Sai Kamal + - Victor Ibragimov + +This release has two giant source-code changes that have no effect +on functionality, but do touch each and every source file: + - SPDX headers for licensing information, following the standard + set by REUSE.software ; all source files and resources have + SPDX-License-Identifier information and copyright notices. All + of the boilerplate texts have been removed. + - Calamares coding style has been mechanically applied to the entire + codebase. This was already done to most of it, but there were + some hold-outs. + +## Core ## + - Network access status is deprecated in Qt 5.15's QNetworkAccessManager, + and was not useful already in some previous versions. Replace its + use in the Calamares network service by testing-it-ourself directly + via a synchronous ping. (Thanks to Asif) + - New Telugu translation. (Thanks to Sai) + - Urdu translation started. (Thanks to Manzoor) + - Timezones translated in Tajik and Russian. (Thanks to Victor) + +## Modules ## + - *keyboardq* and *localeq* improvements. (Thanks to Anke) + - *users* module did not set up autologin properly. This is yet another + regression left over from 3.2.28. (Reported by Phil and pcrepix, #1498) + - *welcome* module now sets the *LANG* key in the locale configuration + (which is shared with the *locale* module and consumed by the + *localecfg* module). This makes it feasible to drop the *locale* + module and still set the installed system's language to the language + selected in Calamares. (Reported by FerenOS) + + +# 3.2.29 (2020-08-20) # + +This release contains contributions from (alphabetically by first name): + - Asif Mahmud Shimon (new contributor! hi!) + +## Core ## + - Edge case in extracting string-lists from YAML, reported and fixed + by Asif (#1491). + - Progress reporting is now more flexible. Modules can have a weight + assigned to them in the descriptor; module instances can have a weight + assigned which overrides the module descriptor. When jobs are run + for a module instance, the jobs report progress pro-rated by the + module's weight. Or in other words, it is now possible to tweak + the amount of the overall progress bar that different modules fill. + The default settings give unpackfs a weight of 12. (#1176) + +## Modules ## + - The *users* module did not read the *defaultGroups* correctly. + Fixed by the string-lists change mentioned above. + + + # 3.2.28.3 (2020-08-18) # + +Another hotfix, for more issues reported by Marco Obaid. Users +were not having a password set (#1489) + + +# 3.2.28.2 (2020-08-12) # + +A second hotfix, for autologin support -- the autologin group was not +created in the target system before assigning the user to it. Reported +by Marco Obaid. + + +# 3.2.28.1 (2020-08-10) # + +This is a hotfix release for #1482 and #1483, where no user was +created during installation and a chmod was failing (resulting in +a failed installation). Reported by Jonathan Riddell. + +With incidental improvements in SPDX tagging (code licensing) +and some new icon options for the welcomeq and localeq modules. + + +# 3.2.28 (2020-08-09) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - apt-ghetto + - Victor Ibragimov + +## Core ## + - A new object *Network* is available to QML modules in `io.calamares.core`. + It exposes network status through the *hasInternet* property. + - Welcome to Tajik translations. The Tajik language has quickly reached + 100% completion. Thanks Victor! + - Welcome to [Interlingue](https://en.wikipedia.org/wiki/Interlingue). + The translation is at an early stage. Qt does not support language + code *ie* though, so it may take some time to be integrated (much + like Esperanto wasn't supported until Qt 5.12). + +## Modules ## + - The *locale* module has been completely redone on the inside. + Users should see no changes. #1391 + - The *localeq* module uses the redone internals of the locale module. + It can now be used to set timezone, language and locale information + and is a suitable alternative module. Thanks to Anke Boersma who did + the work of figuring out maps. Note that the map uses several GeoIP + and GeoData providers and you may need to configure the URLs + with suitable usernames for those services. #1426 + - Both *locale* and *localeq* can now be configured to use the system's + timezone setting -- this can be useful to avoid both hard-coding an + initial zone and doing extra GeoIP lookups, in the case where the + live system already does so. #1391 + - The *locale* and *localeq* modules have additional machinery for + timezone lookups; please report cases where clicking on the map + returns an obviously bogus timezone (up until this release, for + instance, Cape Town). + - The *users* module no longer accepts `root` as a username. #1462 + - The *keyboardq* module is now more inline with the look of the rest + of the Calamares modules, use of a background image is removed. + - The *grubcfg* module now understands `/etc/default/grub.d`. #1457 + + +# 3.2.27 (2020-07-11) # + +This release contains contributions from (alphabetically by first name): + - Gaël PORTAY + - Vitor Lopes (new! welcome!) + +## Core ## + - QML modules with no surrounding navigation -- this is basically a + special case for full-screen Calamares -- now have margins suitable + for full-screen use. + - PythonQt modules are increasingly on the way out. + +## Modules ## + - The Manjaro package manager *pamac* has been added to those supported by + the *packages* module. + - The *netinstall* module has had some minor UI tweaks. + - Partitioning now tries harder to avoid floppy drives. + + +# 3.2.26.1 (2020-06-23) # + +This is a hotfix release for undefined behavior caused by an +uninitialized integer variable. It includes new translations +and features as well since those arrived independently. + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Gaël PORTAY + +## Core ## + - Welcome to Azerbaijani translations. These are available + in two variations, *Azerbaijani* and *Azerbaijani (Azerbaijan)*. + [Wikipedia Azerbaijani](https://en.wikipedia.org/wiki/Azerbaijani_language#North_vs._South_Azerbaijani) + has a nice overview. + - Warnings while building with Qt 5.15 have been much reduced. + +## Modules ## + - *partitioning* has one case of undefined behavior (UB) due + to a missing integer-initialization. (Thanks Gaël) + - *keyboardq* QML module now works correctly. (Thanks Anke) + + +# 3.2.26 (2020-06-18) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Gaël PORTAY + - Pablo Ovelleiro Corral + - Philip Müller + +## Core ## + - The default branch for Calamares source repositories (calamares + and calamares-extensions) is now *calamares*. + - External modules can now be built again, outside of the Calamares + source and build-tree. + - The repository *calamares-tools* has been removed. The idea behind + the tooling was to provide schema validation for Calamares configuration + files. This has been merged into the primary repository, where it + is now part of the test suite. + +## Modules ## + - *locale* put some more places into the correct timezone **visually**; + for instance Norfolk Island gave up UTC+11.5 in 2015 and is now + UTC+11, but Calamares still showed it in a zone separate from UTC+11. + - *localeq* can now properly switch between on & offline mode, + it detects internet status through js. + - *packages* gained support for the Void Linux package manager, + *xbps*. (thanks Pablo) + - *tracking* now supports kuserfeedback configuration. + - *welcomeq* added the GEOIP configuration option, so locale can be + initially set according to IP address. + + +# 3.2.25 (2020-06-06) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Callum Farmer + - FLVAL + - Gaël PORTAY + +## Core ## + - The slideshow in `branding.desc` can be configured with QML (recommended, + as it has been for the past umpteen releases) or with a list of + images (new). + - It is possible to turn off all the new QML code -- navigation, slideshow, + QML-based modules -- with a single `-DWITH_QML=OFF` at CMake time. + This removes QML from Calamares' dependency footprint (but only saves + 200kB in Calamares itself). + - Tests have been extended and now support a tests/CMakeTests.txt file + for fine-tuning tests for Python modules. + - SPDX identifiers are used much more widely and consistently in Calamares. + (thanks Callum) + +## Modules ## + - The QML based *welcomeq* module is now a viable alternative to the + *welcome*(widgets based) module. Using QML files means it no longer + is needed to have pop-up windows for additional information or warnings, + all loads in the Calamares window itself. Additional features include the + option to customize the *About* info and load files like Release Notes + direct into Calamares, QML files added to the branding directory can be used. + - The *welcome* and *locale* modules that do GeoIP lookup can now also + use "fixed" style; this just negates the GeoIP lookup and substitutes a + constant (fixed) value; useful for testing specific locales. + - The *keyboard* module no longer uses *ca_eng* keyboards in Canada by + default, but sticks to the *us* keyboard. #1419 + + +# 3.2.24 (2020-05-11) # + +This release contains contributions from (alphabetically by first name): + - Bill Auger + - Gaël PORTAY + - Luna Jernberg + - Philip Müller + +## Core ## + - There is now a bash-completions script for Calamares; turn on + the (CMake-time) option INSTALL_COMPLETION to get it. (Thanks Gaël) + - The *productWallpaper* setting is documented and works. (Thanks Bill) + - GlobalStorage is available to QML modules as `Global`. + - The height of the navigation bar in QML can be set within the + QML code for the navigation; if not set, try something sensible. + - A regression in the requirements-checker which could block the + installer from proceeding without telling the user **why** it + was blocked, has been resolved. + +## Modules ## + - The *bootloader* module can force a UEFI-based machine to boot into + the newly-installed system. #1394 (Thanks Gaël) + - *partition* Pop-ups about boot flags use the right flag names. #1192 + + +# 3.2.23 (2020-04-17) # + +This release contains contributions from (alphabetically by first name): + - FLVAL + +## Core ## + - Some strange annotations were added to the *About* dialog text in + all the translations, like `{1?}`. These have been removed again. + +## Modules ## + - *locale* module had some errors in timezone data, where clicking + on a city would select a different timezone. Some of these are + now fixed (thanks FLVAL). #1374 + - *netinstall* supports a wider variety of package naming schemes, + and is more flexible in loading a `netinstall.yaml` that is copied from + the example configuration file, *groups* key and all. #1369 + - *users* module logs a full error message from libpwquality if something + is wrong internally. + + +# 3.2.22 (2020-04-08) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Camilo Higuita + +## Core ## + - Both the sidebar (on the left) and the navigation buttons (along the + bottom of the window) can now be configured to use the traditional + *widgets*, to use *qml*, or *hidden* from view (hiding the navigation + is not recommended unless you have a pure-QML UI to run inside + Calamares). The example QML that is compiled into Calamares has + been improved. To use your own QML, put files `calamares-sidebar.qml` + or `calamares-navigation.qml` into the branding directory. + - The sidebar and navigation can now be placed on any side of the + main window. This is probably only useful for QML-based UIs. + See `branding.desc` for details. + +## Modules ## + - The *welcomeq* module has been improved with better layout and + nicer buttons in the example QML form. (Thanks to Anke Boersma) + - The *keyboardq* and *localeq* modules now provide some QML for + configuring these parts, although they are still very primitive. + - *netinstall* has had some minor layout fixes. + - *unpackfs* has much more detailed progress reporting and no + longer jumps around strangely in overall progress. + - *partition* now correctly marks a partition as bootable in BIOS + MBR + installs. #1175 + + +# 3.2.21 (2020-03-27) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Camilo Higuita + - Gabriel Craciunescu + - Gaël PORTAY + +## Core ## + - Python job modules (such as *unpackfs* or *packages*) can now provide + a `pretty_status_message()` function, like the existing `pretty_name()` + function, that is used to update the status during install. #1330 + - QML support-modules and objects are now registered into the io.calamares + namespace. This affects modules using Calamares models inside their + QML UI (at this point, very few). With this release, the necessary + `import` for Calamares parts looks like + > ```import io.calamares.ui 1.0``` + A complete list of objects available from Calamares van be found in the + documentation in `Qml.h`. + - The sidebar (which shows overall progress in the installation) is now + more configurable: the branding key *sidebar* controls it. The sidebar + can be shown as a widget (default, as it has been), hidden, or use a + new QML view which is more easily customised. + - A new `settings.conf` key *quit-at-end* will automatically close + Calamares (by clicking on the *Done* button) when the end of the + sequence is reached. If *finished* is the last module in the sequence, + this will run whatever it is configured for; you can also leave out + the finished page and Calamares will close after the exec parts. + +## Modules ## + - *packages* now reports more details in the installation progress-bar. + - *netinstall* module supports an `expanded` key, which will pre-expand + a group (as if the user had pressed the arrow-button in the tree-view). + This only affects the UI, and only the **outermost** level of groups. + - *netinstall* module now supports a special value for *groupsUrl*. + Setting this to *local* will read the groups directly from the + configuration file. + - *netinstall* groups now support a new key `immutable` which prevents + their check-state from being changed (they are shown, or hidden, + as usual and can be expanded). + - Modules that use QML need a new import line. The QML file for the + module is configured through new keys *qmlSearch* and *qmlFilename* + (previously those were without the `qml` prefix, which invites name + collisions). The full module identifier is also used as a filename, + so that multiple instances of a module can use different QML files. + - *partition* module has a number of new features and settings for + type, UUID, and filesystem characteristics. Thanks to Gaël. + + +# 3.2.20 (2020-02-27) # + +This release contains contributions from (alphabetically by first name): + - Bart Ribbers + +## Core ## + - When logging level is set to 8 (eight), for instance via the `-D8` + logging flag, or the `-d` debug flag, the *Show debug information* + button will appear in the progress view. This helps with debugging + issues where the `-d` flag would be inappropriate. + - Calamares now starts at logging level 1 (warnings and errors to + the console) by default. Previously it (wrongly) started at level 8. + +## Modules ## + - The *partition* module now stores which filesystems are in use in + global storage. + - The *contextualprocess* module now understands "compound variable + names", where a dot (.) is used to index into structured data + stored in global storage. This allows it to use the map stored + by the partition module (but also other things, like looking into + the branding information). + - The *packages* module now understands "apk", the Alpine Linux + package manager. + + +# 3.2.19.1 (2020-02-24) # + +This is a hotfix release for bugs in the *users* module. +Reported by Philip Mueller and Walter Lapchynski. + +## Modules ## + - The *users* module no longer wrote `/etc/hostname` at all. + - The *users* module erroneously shows the root password input fields. + - The *initramfs* module sets a resume-hook even when there is no swap. + - The partitioning service expects *udevadm* in `/sbin`, but some + distro's place it elsewhere. + - The mount service didn't unmount directories properly, leading to + blocked installations. + + +# 3.2.19 (2020-02-21) # + +This release contains contributions from (alphabetically by first name): + - Anke Boersma + - Camilo Higuita + - Gabriel Craciunescu + +## Core ## + - *Assamese* translation has been completed. + - Translations are now loaded from more places: instead of **only** + being compiled in to the Calamares executable, they can now be + read from the current directory (when Calamares is run in developer + mode) and from the application data directory.This allows updating the + translations without requiring a recompile: helpful for translators + and possibly for distributions with their own translation style. + See the translators and deployers wiki for details. + - A new `ViewStep` base class, `QmlViewStep`, has been added that loads + a configurable QML file and plays it. This is used by the new *notesqml* + module -- which is in itself a minimal wrapper around the same that + adds only a translatable module name. + +## Modules ## + - The *machineid* and *users* modules now prefer high-quality random + data from `/dev/urandom` rather than pseudo-random data. #1254 + - A new *notesqml* module supports loading QML. This can be used for + "fancy" release notes as a QML application, rather than a webview + or text widget. Note that this does not replace the slideshow-during- + installation module. + - The *users* module now has knobs for setting the hostname and writing + the `/etc/hosts` file. The new configuration options are documented + in `users.conf`. #1140 + - Multiple *netinstall* modules can exist side-by-side, and they each + control the package installation for their part of the package list. + Previously, a netinstall module would overwrite all of the package + configuration done by other netinstall modules. Translations can be + provided in the configuration file, `netinstall.conf`. #1303 + - The *fstab* module no longer "claims" all the swap partitions it finds + on disk. It only uses swap specified for the current installation. + This means that "replace" and "alongside" installations will have + no swap configured in the target system. + + +# 3.2.18 (2020-01-28) # + +This release contains contributions from (alphabetically by first name): + - Bill Auger + +## Core ## + - *Assamese* translation has been added (still in preliminary state). + - Timezone support code has migrated into the core of Calamares. This + means that modules now have easier access to timezone information. + Translations for timezones have also been enabled, so it is **possible** + at least to translate the displayed zones in the *locale* module. + - Branding can now specify whether to (try to) display the Calamares window + in the middle of the desktop or not. The *windowPlacement* key in + `branding.desc` specifies *center* or *free* placement. + +## Modules ## + - All modules can now set a new key in `module.desc` called *noconfig*. + If this key is set to `true` (the default is `false), no configuration + file is searched-for or loaded, and no warning is printed if the + configuration is missing. This should tidy up some unnecessary warnings + on startup. #1302 #1301 + - The *license* module has seen a significant change to its looks. + Actions are now labeled more clearly, and the URL (or filename) + for each license is displayed. + - The *locale* module now supports translations for timezone and + location names (e.g. "Berlin" is "Berlijn" in Dutch). + - *Packagechooser* is a little more careful with displaying + default and empty package names. (thanks to Bill Auger) + - The *unpackfs* module now carries a larger weight in the overall + progress of the installation, which should resolve downstream reports + like "progress stops at 24% for a long time". This is currently + hard-coded, but will become configurable in a future release. #1176 + + +# 3.2.17.1 (2019-12-02) # + +This is a hotfix release for a bug in the grubcfg module. +Reported by Philip Mueller and Erik Dubois. + +## Modules ## + - The *grubcfg* module had a typo in it that made installations fail. + + +# 3.2.17 (2019-11-28) # + +This release contains contributions from (alphabetically by first name): + - Bill Auger + +## Core ## + - A translation "string freeze" is now enforced by the release scripts. + +## Modules ## + - A new module, *hostinfo*, places information about the host into + Global Storage. This can support contextualprocess modules that + need that information. + - The password-checks in the *users* module are now ordered consistently. + A new check *nonempty* can be used to explicitly check for a non-empty + password. This was previously hard-coded. If you have no other + password-requirements set (e.g. minimum-length) and rely on + Calamares to filter out empty passwords, add this check. + - The *grubcfg* module has a new configuration setting *keepDistributor* + which prevents replacing the `GRUB_DISTRIBUTION` line when writing + the new configuration. #1201 + - *packagechooser* documentation has been updated. + - *welcome* module now works better with dark themes. + - The *license* module could get into a confused state, now fixed. #1271 + + +# 3.2.16 (2019-11-01) # + +This release contains contributions from (alphabetically by first name): + - Bill Auger + +## Core ## + - Some obscure build scenarios which would lead to bogus module-is- + misconfigured messages on startup have been resolved. + +## Modules ## + - The explanatory messages on the *users* page have moved to tooltips, + and placeholder text has been added to the fields. #1202 + - The bad-password messages in the *users* page have been improved. #1261 + - Password-checking in the *users* module has been substantially + changed. A new key *allowWeakPasswords* can be used to introduce + an additional checkbox to the page, which can then be used to + switch off strict password checking. (Thanks to Bill Auger) + - The icons used in password warnings on the *users* page have been + changed to the colorful status icons (rather than the thin red X). + + +# 3.2.15 (2019-10-11) # + +This release contains contributions from (alphabetically by first name): + - No other contributors this time around. + +## Core ## + - No changes to core functionality + +## Modules ## + + - *displaymanager* module now treats *sysconfig* as a regular entry in the + *displaymanagers* list, and the *sysconfigSetup* key is used as a + shorthand to force **only** that entry in the list. #1253 + - *machineid* module has been re-written in C++ and extended with + a new configuration key to generate urandom pool data. #1252 + - *unpackfs* now supports a special *sourcefs* value of `file` + for copying single files (optionally with renaming) or directory + trees to the target system. + - *unpackfs* now support an *exclude* and *excludeFile* setting for + excluding particular files or patters from unpacking. #1229 + + +# 3.2.14 (2019-09-30) # + +This release contains contributions from (alphabetically by first name): + - Andrius Štikonas + - Harald Sitter + +## Core ## + - No changes to core functionality + +## Modules ## + + - *locale* module no longer recognizes the legacy GeoIP configuration. + This has been deprecated since Calamares 3.2.8 and is now removed. + - *packagechooser* module can now be custom-labeled in the overall + progress (left-hand column). #1228 + - *displaymanager* module now recognizes KDE Plasma 5.17. + - *displaymanager* module now can handle Wayland sessions and can detect + sessions from their .desktop files. #1247 #1248 + - *unpackfs* now has special handling for *sourcefs* setting "file" + (so you can copy single files or directories that are on the source + system, directly to the target). #1188 #1181 + + +# 3.2.13 (2019-08-30) # + +This release contains contributions from (alphabetically by first name): + - Arnaud Ferraris + - Arnaud Rebillout + - Bill Auger + - Kevin Kofler + +## Core ## + +- The Calamares standard coding style -- embodied in `ci/calamaresstyle` + has had a few updates and has now been consistently applied across + the core codebase (e.g. libcalamares, libcalamaresui, calamares, but + not the modules). +- *KCoreAddons* is now a required dependency. This lets us drop a chunk + of code that was copied from KCoreAddons years ago, and use the + (maintained!) upstream version instead. It also gives us KMacroExpander + everywhere, which will simplify code for handling substitutions + in configuration files. +- *Slideshows* now have a new property *activatedInCalamares* which + controls the keyboard shortcuts (and can control timers and other + properties of the slideshow, too). + +## Modules ## + +- The *packagechooser* module can load data from the config-file, + from AppData XML files referred by the config-file, and (new) also + from AppStream caches by referring to an application's AppStream id. #1212 +- The *partition* module now understands the units *KB*, *MB*, *GB* which + are powers-of-ten sizes, alongside the powers-of-two sizes that it already + used. (thanks to Arnaud) +- The *welcome* module now supports a *Donate* button if *showDonateUrl* + is set to a non-empty URL. #1197 +- The *welcome* module can have URLs for the various buttons configured + directly in the module configuration (rather than in `branding.desc`). + + +# 3.2.12 (2019-08-07) # + +This release contains contributions from (alphabetically by first name): + - apt-ghetto + - Bill Auger + - embar + +## Core ## + + - Preliminary work to allow jobs to have a *weight* assigned to them + has been added. This will allow the progress bar to better reflect + progress by the amount of work done rather than purely by the + number of jobs. (Thanks to Bill Auger) + - Preliminary work has been added to post the installation log to a + pastebin for bug reporting. (Thanks to Bill Auger) + - Support for translated human-readable strings in Calamares + config files has been added. This is used only in the *packagechooser* + module (see below) but will expand to those modules that need + user-visible strings from the configuration file (existing + solutions need either gettext or Qt support). + - Esperanto is now available when Qt version 5.12.2 or later is used. + +## Modules ## + + - *fstab* A new configuration key *efiMountOptions* has been added, to + allow setting filesystem options specifically for the EFI partition. + (Thanks to apt-ghetto) + - *packagechooser* is a new module for low-density package choices, + e.g. for selecting a default desktop environment, or adding some + proprietary drivers, or chosing browsers of office suites. It presents + **one** collection of items -- at most ten or so, because of the UI -- + and the user can select zero or more of them. The behavior is + configurable, and package information can be set through the Calamares + configuration file or by reading AppData files for the packages. #426 + + +# 3.2.11 (2019-07-06) # + +This release contains contributions from (alphabetically by first name): + - No other contributors this time around. + +This is a security release with no functional changes (except for +improved security) relative to 3.2.10. The Calamares team would like +to acknowledge the help of the following people in reporting and +understanding the issues (alphabetically by first name): + - Kevin Kofler + - Seth Arnold + - Simon Quigley + - Thomas Ward +Both CVE's have been resolved. + +## Core ## + +No core changes. + +## Modules ## + + - *initramfs* could create an initramfs with insecure permissions. + Since the keyfile is included in the initramfs, an attacker could + read the file from the initramfs. #1190 CVE-2019-13178 + - *luksbootkeyfile* created a key file where a window of opportunity + existed where the key file could have too-lax file permissions. + #1191 CVE-2019-13179 + + +# 3.2.10 (2019-06-28) # + +This release contains contributions from (alphabetically by first name): + - No other contributors this time around. + +Distributions are **advised** to check the slideshow they use for the +installation step; changes in loading and translation mechanisms may +require changes in the slideshow. + +## Core ## + + - With this release, option *WITH_PYTHONQT* changes default to **off**. + There does not seem to be any serious use of the PythonQt API and + the UI opportunities it offers, so begin the process of deprecating + and removing that. Sometime in the future, QML pages will fill the + gap for easily-prototyped-yet-slick UI elements. + - A crash when no *finished* page (or rather, no page at all) is + configured after the last *exec* section of the sequence has been + solved. The *finished* page can be left out (but then you don't get + the restart-now functionality). #1168 + - The *slideshow* which is run during installation now has API versions. + API version 1 (the default) runs as before, where the slideshow is loaded + when the installation starts. API version 2 loads the slideshow on + Calamares startup, thus improving responsiveness. Documentation + in `src/branding/README.md`. #1152 + - The example slideshow now uses API version 2. + +## Modules ## + + - *initramfs* has been changed from a Python module to a C++ module. + Packaging will need to adjust now it installs a .so instead of a .py. + The module itself functions as before. It does have a new configuration + option, to change the version passed as to the `-k` option of + update-initramfs. #1180 + - *partition* Now has its own setting for *requiredStorage*, duplicating + the same setting in the *welcome* module. This is useful for + configurations where no *welcome* module is used, but a minimum + size must be checked anyway. #1169 + + +# 3.2.9 (2019-06-03) # + +This release contains contributions from (alphabetically by first name): + - Kevin Kofler + +## Core ## + +No user- or deployer-visible changes. Bugfixing as usual, see the +milestone for details. + +## Modules ## + + - *branding* now supports os-release variables in the *strings* section, + which allows re-using (at runtime) information set in /etc/os-release . + This requires KDE Frameworks 5.58. #1150 + - *branding* allows the use of FreeDesktop.org icon names for the + *productLogo* and *productIcon* keys. If a file is named there, then + the file is used, and otherwise the icon is looked up in the current + theme. #1160 + - *packages* On Arch, with the `pacman` package manager, avoid a hang + during system update. #1154 + - *welcome* allows a custom image path or icon name to be set for the + language-selection drop-down (instead of the international standard one). + + +# 3.2.8 (2019-05-10) # + +This is a **source-incompatible** release of Calamares. Include files +have been shuffled around, so third-party C++ modules will need +adjustment to the changed names. + +This release contains contributions from (alphabetically by first name): + - Arnaud Ferraris + - Kevin Kofler + +## Core ## + + - All user-visible texts referring to "MB" and "GB" now use the standard + "MiB" and "GiB" wording, which matches what we were actually calculating + with (i.e. 2^20 and 2^30 respectively). #1129 + - The side-pane, which shows the list of steps that will be executed, + now tries to fit the text (name of each module) into the available space + by shrinking the font as needed. #1137 + - *libcalamares* (accidentally) linked with Qt's GUI libraries when + PythonQt was found. This led to the odd situation where the non-GUI + Calamares library depends on a bunch of GUI libraries. + - *libcalamares* The `utils/` subdirectory has been hugely refactored, + with functionality split out into separate files. C++ modules will + need to have their `#include` names updated. Basically, users of + `utils/CalamaresUtils.h` will need to include the header file for + the functionality that is actually used. + +## Modules ## + + - *finished* has a new mechanism for configuring the behavior of the + *restart now* button. The old-style boolean configuration is still + supported but generates a warning. #1138 + - *locale* module GeoIP configuration has a new preferred format. + See `locale.conf` for details. The old configuration is still + supported but will be phased out before 3.3.0 -- in particular, + support for "legacy" format will be removed, since that was a + crutch for the disappearance of one GeoIP provider in 2018. + - *oemid* is a new module for configuring OEM phase-0 (image pre-mastering, + or pre-deployment) things. It has limited functionality at the moment, + writing only a single batch-identifier file. #943 + - *welcome* can now do GeoIP lookups as well (but be careful with the + configuration, since you need a GeoIP that provides country information, + not just timezones). This will let Calamares select a starting language + that matches where it is -- which might not be useful at all. #934 + - All Python modules now bail out gracefully on (at least some) bad + configurations, rather than raising an exception. The pre-release + scripts now test for exceptions to avoid shipping modules with + ImportError or SyntaxError results. + + +# 3.2.7 (2019-04-27) # + +This is a **hotfix** release for regressions introduced in the +Python modules. The *localecfg* module was unusable because of +a missing `import`. + + +# 3.2.6 (2019-04-25) # + +This release contains contributions from (alphabetically by first name): + - Arnaud Ferraris + - Dominic Hayes (feren) + - Raul Rodrigo Segura (raurodse) + +## Core ## + + * Under-the-hood code cleanups in lots of parts of the core. Calamares now + builds without warnings when Clang 8 is used. + * A new *disable-cancel-during-exec* setting provides more fine-grained + control than *disable-cancel*, which hides the button entirely. + #1122 (Thanks to Dominic, FerenOS) + * A branding module can now also cause a stylesheet to be loaded, which + will be applied to the widgets inside Calamares. #961 (Thanks to Raul) + +## Modules ## + + * All of the Python-based modules now have translations enabled. #991 + * *Displaymanager* module has improved support for LightDM configuration. + #1123 (Thanks to Dominic, FerenOS) + * *License* module can now display local files inline, and scrolls to + allow longer lists of licenses and to support long license texts + displayed inline. #1124 #1125 #1052 + * *Partition* module has additional checks for validity partition layouts. + #1127 (Thanks to Arnaud) + * *Welcome* module has improved usability: a standard icon + alongside the *Language* label, for improved recognition, + and improved language-list display and sorting. #1107 + + +# 3.2.5 (2019-04-15) # + +This release contains contributions from (alphabetically by first name): + - Arnaud Ferraris + - Dan Simmons + - Gabriel Craciunescu + +## Core ## + + * View modules (in C++) can now perform their own requirements-checking + to see if installation makes sense. This expands upon the existing + requirements checks in the welcome module (RAM, disk space, ..). + The checks have been made asynchronous, so that responsiveness during + requirements-checking is improved and the user has better feedback. + * Support for building an AppImage of Calamares has been added to the + `ci/` directory. There are use-cases where a containerized build and + configuration make sense rather than having Calamares installed in the + host system. (Thanks to the AppImage team, Alexis) + * OEM mode (phase-1) now correctly refers to Calamares as a "Setup Program" + rather than an installer. #1100 (Thanks to Arnaud) + +## Modules ## + + * *Bootloader* module: a serious bug introduced in 3.2.4 which prevents + succesful boot after installation on EFI machines, has been repaired. + (Thanks to Gabriel) #1104 + * *Displaymanager* module: it is no longer a fatal error to not have any + display-managers. #1095 + * *Partition* module: it is now possible to build without libparted. Since + KPMCore may not need this library anymore, it is a dependency that will + be dropped as soon as it is feasible. Add this to the CMake flags: + `-DCMAKE_DISABLE_FIND_PACKAGE_LIBPARTED=ON` + * *Partition* module: the location that is selected for the bootloader, + no longer changes when a new partition is created. #1098 + * Python modules: several modules have had translations added. This is + usually only visible when the module runs as part of the *exec* step, + when the module's *pretty name* is displayed. In addition, some error + messages are now translated. + * *UnpackFS* module: improved progress reporting and tests. #565 + + +# 3.2.4 (2019-02-12) # + +This release contains contributions from (alphabetically by first name): + - Alf Gaida + - aliveafter1000 + - Arnaud Ferraris + - Caio Jordão Carvalho + - Collabora LTD + - Gabriel Craciunescu + - Kevin Kofler + - Philip Mueller + - Scott Harvey + +## Core ## + + * The Calamares application now recognizes the `-X` or `--xdg-config` + option, which adds XDG_DATA_DIRS to the places used to find QML + and branding directories, and XDG_CONFIG_DIRS to the places used + to find the global settings and module configurations. This allows + a more fine-grained, and more layered, approach to setting up + Calamares configurations (in particular, distro's can **add** + configuration files and give them priority, instead of **forking** + configuration files). + * The *branding* file now contains settings that control the size + and resize behavior of Calamares. See the branding file for + more documentation. In particular, the setting *windowExpanding* + can be set to *normal*, *fullscreen* or *noexpand*. + * The `settings.conf` file can now configure whether the *Cancel* button + is shown (this isn't a branding thing, because it's quite fundamental + to the workflow of the installer). + +## Modules ## + + * The *partition* module supports RAID devices, but only when Calamares + is compiled with the newest KPMCore release (3.3.0). + * The calculation of required space -- including swap -- has been simplified, + and Calamares no longer reserves 2GiB of space in calculations for internal + use (this means that it no longer mysteriously drops swap when the disk + size is close to the required installation size). + * The name of the type of default filesystem (e.g. ext4 or btrfs) is now handled + case- and localization-insensitively. This means that *btrfs* is now always + an acceptable spelling. + * The currently-selected disk device is remembered between manual partitioning + and the partitioning-overview pages. (Thanks to Arnaud) + * *partition* There is new support for partitioning layout presets. + See `partition.conf` for documentation and details. + * The *keyboard* module now handles the (bogus) Austrian keymap for + the system console properly. (Thanks to Kevin) + * The *preservefiles* module now has a mechanism for setting the permissions + (and ownership) of preserved files. (Thanks to Scott) + * New module *fsresizer* can be used to resize filesystems. It is intended + for use in OEM installs where an image of fixed size is created, + and then sized to the actual SD card the user has used. + * The *mount* module now handles missing *extraMounts* and *extraMountsEfi* + keys gracefully (this is probably a misconfiguration, though, and gives a + warning). + * The *packages* module now supports pre- and post-script options + for all operations, not just during install (keep in mind that + these run as three separate shells, though). + * A new *rawfs* module supports straightforward copying of filesystems from + the installation media to the target stystem. This can be used, for instance, + for block-level-identical installations. + + +# 3.2.3 (2019-01-09) # + +This release contains contributions from (alphabetically by first name): + - aliveafter1000 + +## Core ## + +There are no core changes in this release. + +## Modules ## + + * *partition* Fixed bug where, during detection of existing systems, the + existing system partitions may be mounted and then files deleted. + This is a **limited** version of the patch from aliveafter1000 + that will be in 3.2.4, which tries harder to mount filesystems + read-only and unmodifiable. + * *locale* It was possible to set the installer and system language + (e.g. to German) while the global storage value for *locale* + remained set to English. Then no localization packages are installed + (see feature `${LOCALE}` in `packages.conf`). Reported downstream + in Netrunner. + + +# 3.2.2 (2018-09-04) # + +This release contains contributions from (alphabetically by first name): + - Andrius Štikonas + - artoo@cromnix.org + - Caio Jordão Carvalho + - Harald Sitter + - Philip Müller + - Simon Quigley + - Walter Lapchynski + +## Core ## + + * Example configurations are **no longer installed** by default. + The default setting for *INSTALL_CONFIG* has changed. Distributions + are strongly encouraged to write their own configuration files and + not rely on the example configuration files. Example configurations + may change unpredictably. + * It is now possible to express module dependencies through the + *requiredModules* key in `module.desc`. All of the required modules + for a given module must occur in the sequence **before** the module + requiring them. None of the core modules use this facility. + * The search paths for QML files, branding descriptors and module + descriptors have been revamped and now self-document in the log. + * A new `ci/RELEASE.sh` script has been added to streamline releases; + it is not guaranteed to work anywhere in particular though. + +## Modules ## + + * When multiple modules are mutually exclusive, or don't make sense + to enable concurrectly, a new `USE_` framework has been added + to CMake to simplify the selection of modules. This is in addition + to the existing `SKIP_MODULES` mechanism. + * Various off-by-one-sector errors in the automatic partitioning + mode have been corrected. In addition, swap space is calculated + a little more conservatively. + * A new module has been added to the core which can configure openrc + services. To make services configuration consistent: + - The *services* module has been **renamed** *services-systemd*, + - The openrc module is named *services-openrc*, + - At CMake time, it is possible to select all of the services modules, + or one specific one, by setting the *USE_services* CMake variable. + By default, all of the modules are built and installed. + * The systemd-services module can now disable targets and mask both + targets and services (which will allow you to break the system with + a bad configuration). The configuration is a little more flexible + because a service (or target) name can be used on its own with + sensible defaults. + * The displaymanager module has been entirely revamped. A long-standing + bug which ignored the settings for default desktop has been fixed + (thanks to Walter Lapchynski). Translations have been added to the + error messages. Each DM now has an implementation class for doing + all the configuration steps it needs. This groups the code needed for + a specific DM (and presumably, per-distro) in one place. + Distro's are **strongly advised** to re-test their DM configuration + and installation with the revamped code. + +# 3.2.1 (2018-06-25) # + +This release contains contributions from (alphabetically by first name): + - Bill Auguer + - Gabriel Craciunescu + - Phil Mueller + - Raul Rodrigo Segura + +## Core ## + + * Qt 5.7 is now the minimum required Qt version. Because KPMCore + (a fairly fundamental dependency) requires Qt 5.7, Calamares + has followed suit. + * New testing application `loadmodule` for loading and running a + single Calamares module. + * New translations Belarussian and Korean. + * Jobs can now be *emergency jobs* which run even after a failure. + * Improved debugging when modules fail to load. + * Bad configuration files will now cause the user-interface of + Calamares to display an error message, rather than silently + ignoring some configuration errors. This will certainly cause + problems for distributions with sloppy configurations. + +## Modules ## + + * New module preservefiles, keeps (log) files around after install; + this duplicates functionality with the unmount module, but unmount + is very late, rather limited, and fragile. + * Interactiveterminal module now disables itself if build requirements + are not met, rather than blocking the build. + * Fixes in the timezone map data make the southern hemisphere more + usable and put Reykjavik in its place. + * The packages module can now update the target system if explicitly + told to do so. + * More paths and executables are configurable in the bootloader module. + * Distributions are advised to review the `users.conf` setup **again**, + as some changes in version 3.2.0 caused regressions downstream. + * Distributions are advised to review their `locale.gen` files + **again**. Previous changes were too restrictive, matching only + the specific format Chakra Linux uses. Calamares now preserves + all the comment-lines in the file and writes enabled locales + at the end, with a descriptive comment. + +# 3.2.0 (2018-05-17) # + +This release contains contributions from (alphabetically by first name): + - Alf Gaida + - AlmAck + - Caio Jordão Carvalho + - Frede H + +## Modules ## + + * UI annoyances in the partitioning module were fixed; the + mount-point selector is now more obvious when no mount-point + has been chosen, and the mount-point and flags are preserved + when (re)editing partitions. + * The handling of `@@ROOT@@` substitution in shellprocesses was + backwards; this has been fixed (the substitution is made when + running in the **host**). + * The user shell is no longer hard-coded to `/bin/bash`, + but follows the default setting for useradd(8), e.g. + those set in `/etc/default/useradd`. diff --git a/CMakeLists.txt b/CMakeLists.txt index d70863929..13f63ecc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,20 +1,15 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +### # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . +# Calamares is Free Software: see the License-Identifier above. # -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE +# Individual files may have different licenses (like the CMake +# infrastructure, which is BSD-2-Clause licensed). Check the SPDX +# identifiers in each file. # ### # @@ -27,8 +22,13 @@ # USE_ : fills in SKIP_MODULES for modules called - # WITH_ : try to enable (these usually default to ON). For # a list of WITH_ grep CMakeCache.txt after running -# CMake once. +# CMake once. These affect the ABI offered by Calamares. +# - PYTHON (enable Python Job modules) +# - QML (enable QML UI View modules) +# - PYTHONQT # TODO:3.3: remove # BUILD_ : choose additional things to build +# - TESTING (standard CMake option) +# - SCHEMA_TESTING (requires Python, see ci/configvalidator.py) # DEBUG_ : special developer flags for debugging # # Example usage: @@ -38,21 +38,44 @@ # One special target is "show-version", which can be built # to obtain the version number from here. +# TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.22 - LANGUAGES C CXX ) + VERSION 3.2.58 + LANGUAGES C CXX +) -set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development +set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development +if( CALAMARES_VERSION_RC EQUAL 1 AND CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) + message( FATAL_ERROR "Do not build development versions in the source-directory." ) +endif() ### OPTIONS # option( INSTALL_CONFIG "Install configuration files" OFF ) option( INSTALL_POLKIT "Install Polkit configuration" ON ) -option( BUILD_TESTING "Build the testing tree." ON ) +option( INSTALL_COMPLETION "Install shell completions" OFF ) +# Options for the calamares executable +option( WITH_KF5Crash "Enable crash reporting with KCrash." ON ) # TODO:3.3: WITH->BUILD (this isn't an ABI thing) +option( WITH_KF5DBus "Use DBus service for unique-application." OFF ) # TODO:3.3: WITH->BUILD +# When adding WITH_* that affects the ABI offered by libcalamares, +# also update libcalamares/CalamaresConfig.h.in option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON ) -option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF ) -option( WITH_KF5Crash "Enable crash reporting with KCrash." ON ) +option( WITH_PYTHONQT "Enable Python view modules API (deprecated, requires PythonQt)." OFF ) # TODO:3.3: remove +option( WITH_QML "Enable QML UI options." ON ) +# +# Additional parts to build +option( BUILD_SCHEMA_TESTING "Enable schema-validation-tests" ON ) + + +# Possible debugging flags are: +# - DEBUG_TIMEZONES draws latitude and longitude lines on the timezone +# widget and enables chatty debug logging, for dealing with the timezone +# location database. +# - DEBUG_FILESYSTEMS does extra logging and checking when looking at +# partition configuration. Lists known KPMCore FS types. +# - DEBUG_PARTITION_UNSAFE (see partition/CMakeLists.txt) +# - DEBUG_PARTITION_BAIL_OUT (see partition/CMakeLists.txt) ### USE_* @@ -70,8 +93,14 @@ option( WITH_KF5Crash "Enable crash reporting with KCrash." ON ) # all the implementations are enabled (this just means they are # **available** to `settings.conf`, not that they are used). # -# Currently, only USE_services is in use (to pick only one of the two -# modules, systemd or openrc). +# To explicitly disable a set of modules, set USE_=none +# (e.g. the literal string none), which won't match any of the +# modules but is handled specially. +# +# The following USE_* functionalities are available: +# - *services* picks one of the two service-configuration modules, +# for either systemd or openrc. This defaults to empty so that +# **both** modules are available. set( USE_services "" CACHE STRING "Select the services module to use" ) ### Calamares application info @@ -96,26 +125,24 @@ set( CALAMARES_DESCRIPTION_SUMMARY # # When adding a new language, take care that it is properly loaded # by the translation framework. Languages with alternate scripts -# (sr@latin in particular) may need special handling in CalamaresUtils.cpp. -# -# TODO: drop the es_ES translation from Transifex +# (sr@latin in particular) or location (ca@valencia) need special +# handling in libcalamares/locale/Translation.h . # # NOTE: move eo (Esperanto) to _ok once Qt can actually create a -# locale for it. (Qt 5.12.2 can, see check later on). -# NOTE: update these lines by running txstats.py, or copy these four lines -# and prefix each variable name with "p", so that the automatic -# checks for new languages and misspelled ones are done (that is, -# copy these four lines to four backup lines, add "p", and then update -# the original four lines with the current translations). +# locale for it. (Qt 5.12.2 can, see Translation Status section). +# NOTE: move ie (Interlingue) to _ok once Qt supports it. +# NOTE: update these lines by running `txstats.py`, or for full automation +# `txstats.py -e`. See also # -# Total 62 languages -set( _tx_complete ca da fi_FI fr he hr ja lt sq tr_TR ) -set( _tx_good ast cs_CZ de es es_MX et gl hi hu id it_IT ko ml nl - pl pt_BR pt_PT ru sk zh_TW ) -set( _tx_ok ar as be bg el en_GB es_PR eu is mr nb ro sl sr - sr@latin sv th uk zh_CN ) -set( _tx_incomplete ca@valencia eo fa fr_CH gu kk kn lo mk ne_NP ur - uz ) +# Total 74 languages +set( _tx_complete az az_AZ ca es fi_FI he hi hr ja lt pt_BR pt_PT + sq sv uk zh_TW ) +set( _tx_good as be ca@valencia cs_CZ da de fa fr fur it_IT ko ml + nl ru si sk tg tr_TR vi zh_CN ) +set( _tx_ok ar ast bg bn el en_GB es_MX et eu gl hu id is mr nb oc + pl ro sl sr sr@latin th ) +set( _tx_incomplete eo es_PR gu ie ja-Hira kk kn lo lv mk ne_NP + ta_IN te ur zh zh_HK ) ### Required versions # @@ -148,46 +175,40 @@ if(NOT CMAKE_VERSION VERSION_LESS "3.10.0") ) endif() +# CMake Modules +include( CMakePackageConfigHelpers ) +include( CTest ) +include( FeatureSummary ) + +# Calamares Modules +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 "-Og -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 ) - -# Debugging flags -# -# Possible debugging flags are: -# - DEBUG_TIMEZONES draws latitude and longitude lines on the timezone -# widget and enables chatty debug logging, for dealing with the timezone -# location database. -# - DEBUG_FILESYSTEMS does extra logging and checking when looking at -# partition configuration. Lists known KPMCore FS types. -# -# The flags listed here are enabled in Debug builds. By default, none -# are **actually** listed, because they're for such specific scenarios. -set( _enable_debug_flags - # DEBUG_TIMEZONES - # DEBUG_FILESYSTEMS -) -# Add those flags to the CXX flags in a suitable format. -foreach( _edf ${_enable_debug_flags} ) - string( APPEND CMAKE_CXX_FLAGS_DEBUG " -D${_edf}" ) -endforeach() - set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" ) +set( CMAKE_C_FLAGS_DEBUG "-Og -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 @@ -199,40 +220,30 @@ 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]]'") + + # The dwarf-debugging flags are slightly different, too + string( APPEND CMAKE_CXX_FLAGS_DEBUG " -gdwarf" ) + string( APPEND CMAKE_C_FLAGS_DEBUG " -gdwarf" ) # 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( [...] ) # 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 @@ -253,20 +264,12 @@ if( CMAKE_COMPILER_IS_GNUCXX ) endif() endif() -include( FeatureSummary ) -include( CMakeColors ) - ### DEPENDENCIES # -find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Concurrent Core Gui Widgets LinguistTools Svg Quick QuickWidgets ) -if( Qt5_VERSION VERSION_GREATER 5.12.1 ) - # At least Qt 5.12.2 seems to support Esperanto in QLocale - if( "eo" IN_LIST _tx_incomplete ) - message(STATUS "Esperanto support since Qt 5.12.2, enabling Esperanto locale") - list( REMOVE_ITEM _tx_incomplete "eo" ) - list( APPEND _tx_ok "eo" ) - endif() +find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Concurrent Core Gui LinguistTools Network Svg Widgets ) +if( WITH_QML ) + find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Quick QuickWidgets ) endif() # Optional Qt parts find_package( Qt5DBus CONFIG ) @@ -300,7 +303,7 @@ if( ECM_FOUND ) include(KDEInstallDirs) endif() -find_package( KF5 QUIET COMPONENTS CoreAddons Crash ) +find_package( KF5 QUIET COMPONENTS CoreAddons Crash DBusAddons ) set_package_properties( KF5::CoreAddons PROPERTIES TYPE REQUIRED @@ -309,22 +312,63 @@ set_package_properties( PURPOSE "About Calamares" ) if( NOT KF5Crash_FOUND ) + if( WITH_KF5Crash ) + message(WARNING "WITH_KF5Crash is set, but KF5::Crash is not available.") + endif() set( WITH_KF5Crash OFF ) endif() +if( NOT KF5DBusAddons_FOUND ) + if( WITH_KF5DBus ) + message(WARNING "WITH_KF5DBus is set, but KF5::DBusAddons is not available.") + endif() + set( WITH_KF5DBus OFF ) +endif() -if( BUILD_TESTING ) - enable_testing() -endif () +# TODO:3.3: Use FindPython3 instead +find_package( PythonInterp ${PYTHONLIBS_VERSION} ) +set_package_properties( + PythonInterp PROPERTIES + DESCRIPTION "Python 3 interpreter." + URL "https://python.org" + PURPOSE "Python 3 interpreter for certain tests." +) + +set( _schema_explanation "" ) +if ( PYTHONINTERP_FOUND ) + if ( BUILD_SCHEMA_TESTING ) + # The configuration validator script has some dependencies, + # and if they are not installed, don't run. If errors out + # with exit(1) on missing dependencies. + if ( CALAMARES_CONFIGVALIDATOR_CHECKED ) + set( _validator_deps ${CALAMARES_CONFIGVALIDATOR_RESULT} ) + else() + exec_program( ${PYTHON_EXECUTABLE} ARGS "${CMAKE_SOURCE_DIR}/ci/configvalidator.py" -x RETURN_VALUE _validator_deps ) + set( CALAMARES_CONFIGVALIDATOR_CHECKED TRUE CACHE INTERNAL "Dependencies for configvalidator checked" ) + set( CALAMARES_CONFIGVALIDATOR_RESULT ${_validator_deps} CACHE INTERNAL "Result of configvalidator dependency check" ) + endif() + # It should never succeed, but only returns 1 when the imports fail + if ( _validator_deps EQUAL 1 ) + set( _schema_explanation " Missing dependencies for configvalidator.py." ) + set( BUILD_SCHEMA_TESTING OFF ) + endif() + endif() +else() + # Can't run schema tests without Python3. + set( _schema_explanation " Missing Python3." ) + set( BUILD_SCHEMA_TESTING OFF ) +endif() +add_feature_info( yaml-schema BUILD_SCHEMA_TESTING "Validate YAML (config files) with schema.${_schema_explanation}" ) find_package( PythonLibs ${PYTHONLIBS_VERSION} ) set_package_properties( PythonLibs PROPERTIES DESCRIPTION "C interface libraries for the Python 3 interpreter." - URL "http://python.org" + URL "https://python.org" PURPOSE "Python 3 is used for Python job modules." ) if ( PYTHONLIBS_FOUND ) + # TODO:3.3: Require Boost + CMake; sort out Boost::Python # Since Boost provides CMake config files (starting with Boost 1.70. # or so) the mess that is the Calamares find code picks the wrong # bits. Suppress those CMake config files, as suggested by @jmrcpn @@ -335,7 +379,7 @@ if ( PYTHONLIBS_FOUND ) Boost PROPERTIES PURPOSE "Boost.Python is used for Python job modules." ) - + # TODO:3.3: Remove PythonQt support find_package( PythonQt ) set_package_properties( PythonQt PROPERTIES DESCRIPTION "A Python embedding solution for Qt applications." @@ -353,32 +397,34 @@ if( NOT PYTHONLIBS_FOUND OR NOT PYTHONQT_FOUND ) set( WITH_PYTHONQT OFF ) endif() +# Now we know the state of the ABI-options, copy them into "Calamares_" +# prefixed variables, to match how the variables would-be-named +# when building out-of-tree. +set(Calamares_WITH_PYTHON ${WITH_PYTHON}) +set(Calamares_WITH_PYTHONQT ${WITH_PYTHONQT}) +set(Calamares_WITH_QML ${WITH_QML}) + ### Transifex Translation status # -# Construct language lists for use. If there are p_tx* variables, -# then run an extra cmake-time check for consistency of the old -# (p_tx*) and new (_tx*) lists. +# Construct language lists for use. This massages the language lists +# for use with older Qt (which does not support Esperanto) and checks +# for some obvious error. The actual work of compiling translations +# is done in the lang/ directory. # -set( prev_tx ${p_tx_complete} ${p_tx_good} ${p_tx_ok} ${p_tx_incomplete} ) +if( Qt5_VERSION VERSION_GREATER 5.12.1 ) + # At least Qt 5.12.2 seems to support Esperanto in QLocale + if( "eo" IN_LIST _tx_incomplete ) + message(STATUS "Esperanto support since Qt 5.12.2, enabling Esperanto locale") + list( REMOVE_ITEM _tx_incomplete "eo" ) + list( APPEND _tx_ok "eo" ) + endif() +endif() + set( curr_tx ${_tx_complete} ${_tx_good} ${_tx_ok} ${_tx_incomplete} ) set( tx_errors OFF ) -if ( prev_tx ) - # Gone in new list - foreach( l ${prev_tx} ) - list( FIND curr_tx ${l} p_l ) - if( p_l EQUAL -1 ) - message(WARNING "Language ${l} was present in previous translations and is now absent.") - set( tx_errors ON ) - endif() - endforeach() - +if ( curr_tx ) # New in list foreach( l ${curr_tx} ) - list( FIND prev_tx ${l} p_l ) - if( p_l EQUAL -1 ) - message(WARNING "Language ${l} is new.") - set( tx_errors ON ) - endif() set( p_l "lang/calamares_${l}.ts" ) if( NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${p_l} ) message(WARNING "Language ${l} has no .ts file yet.") @@ -389,7 +435,6 @@ if ( prev_tx ) unset( p_l ) unset( l ) endif() -unset( prev_tx ) unset( curr_tx ) if( tx_errors ) message( FATAL_ERROR "Translation warnings, see above." ) @@ -400,7 +445,6 @@ list( SORT CALAMARES_TRANSLATION_LANGUAGES ) add_subdirectory( lang ) # i18n tools - ### Example Distro # # For testing purposes Calamares includes a very, very, limited sample @@ -461,22 +505,15 @@ if( CALAMARES_VERSION_TWEAK ) set( CALAMARES_VERSION "${CALAMARES_VERSION}.${CALAMARES_VERSION_TWEAK}" ) endif() set( CALAMARES_VERSION_SHORT "${CALAMARES_VERSION}" ) -if( CALAMARES_VERSION_RC ) - set( CALAMARES_VERSION ${CALAMARES_VERSION}rc${CALAMARES_VERSION_RC} ) -endif() -# additional info for non-release builds +# Additional info for non-release builds. The "extended" version information +# with date and git information (commit, dirty status) is used only +# by CalamaresVersionX.h, which is included by consumers that need a full +# version number with all that information; normal consumers can include +# CalamaresVersion.h with more stable numbers. if( NOT BUILD_RELEASE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git/" ) - include( CMakeDateStamp ) - set( CALAMARES_VERSION_DATE "${CMAKE_DATESTAMP_YEAR}${CMAKE_DATESTAMP_MONTH}${CMAKE_DATESTAMP_DAY}" ) - if( CALAMARES_VERSION_DATE GREATER 0 ) - set( CALAMARES_VERSION ${CALAMARES_VERSION}.${CALAMARES_VERSION_DATE} ) - endif() - - include( CMakeVersionSource ) - if( CMAKE_VERSION_SOURCE ) - set( CALAMARES_VERSION ${CALAMARES_VERSION}-${CMAKE_VERSION_SOURCE} ) - endif() + include( ExtendedVersion ) + extend_version( "${CALAMARES_VERSION}" OFF CALAMARES_VERSION_SHORT CALAMARES_VERSION ) endif() # Special target for not-RC (e.g. might-be-release) builds. @@ -489,7 +526,11 @@ if ( CALAMARES_VERSION_RC EQUAL 0 ) endif() # enforce using constBegin, constEnd for const-iterators -add_definitions( "-DQT_STRICT_ITERATORS" ) +add_definitions( + -DQT_STRICT_ITERATORS + -DQT_SHARED + -DQT_SHAREDPOINTER_TRACK_POINTERS +) # set paths set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) @@ -506,16 +547,10 @@ endif() # make predefined install dirs available everywhere include( GNUInstallDirs ) -# make uninstall support -configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY -) - -# Early configure these files as we need them later on -set( CALAMARES_CMAKE_DIR "${CMAKE_SOURCE_DIR}/CMakeModules" ) -set( CALAMARES_LIBRARIES calamares ) +# This is used by CalamaresAddLibrary; once Calamares is installed, +# the CalamaresConfig.cmake module sets this variable to the IMPORTED +# libraries for Calamares. +set( Calamares_LIBRARIES calamares ) add_subdirectory( src ) @@ -523,33 +558,41 @@ add_feature_info(Python ${WITH_PYTHON} "Python job modules") add_feature_info(PythonQt ${WITH_PYTHONQT} "Python view modules") add_feature_info(Config ${INSTALL_CONFIG} "Install Calamares configuration") add_feature_info(KCrash ${WITH_KF5Crash} "Crash dumps via KCrash") +add_feature_info(KDBusAddons ${WITH_KF5DBus} "Unique-application via DBus") -# Add all targets to the build-tree export set +### CMake infrastructure installation +# +# set( CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/Calamares" CACHE PATH "Installation directory for CMake files" ) set( CMAKE_INSTALL_FULL_CMAKEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" ) -export( TARGETS calamares - FILE "${PROJECT_BINARY_DIR}/CalamaresLibraryDepends.cmake" ) -# Export the package for use from the build-tree -# (this registers the build-tree with a global CMake-registry) export( PACKAGE Calamares ) - -# Create a CalamaresBuildTreeSettings.cmake file for the use from the build tree -configure_file( CalamaresBuildTreeSettings.cmake.in "${PROJECT_BINARY_DIR}/CalamaresBuildTreeSettings.cmake" @ONLY ) - -# Create the CalamaresConfig.cmake and CalamaresConfigVersion files -file( RELATIVE_PATH CONF_REL_INCLUDE_DIR "${CMAKE_INSTALL_FULL_CMAKEDIR}" "${CMAKE_INSTALL_FULL_INCLUDEDIR}" ) - -configure_file( CalamaresConfig.cmake.in "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake" @ONLY ) -configure_file( CalamaresConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake" @ONLY ) -configure_file( CalamaresUse.cmake.in "${PROJECT_BINARY_DIR}/CalamaresUse.cmake" @ONLY ) +configure_package_config_file( + "CalamaresConfig.cmake.in" + "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" + PATH_VARS + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_LIBDIR + CMAKE_INSTALL_DATADIR +) +write_basic_package_version_file( + ${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) +install( + EXPORT Calamares + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" + FILE "CalamaresTargets.cmake" + NAMESPACE Calamares:: +) # Install the cmake files install( FILES "${PROJECT_BINARY_DIR}/CalamaresConfig.cmake" "${PROJECT_BINARY_DIR}/CalamaresConfigVersion.cmake" - "${PROJECT_BINARY_DIR}/CalamaresUse.cmake" "CMakeModules/CalamaresAddBrandingSubdirectory.cmake" "CMakeModules/CalamaresAddLibrary.cmake" "CMakeModules/CalamaresAddModuleSubdirectory.cmake" @@ -557,49 +600,46 @@ install( "CMakeModules/CalamaresAddTest.cmake" "CMakeModules/CalamaresAddTranslations.cmake" "CMakeModules/CalamaresAutomoc.cmake" + "CMakeModules/CalamaresCheckModuleSelection.cmake" "CMakeModules/CMakeColors.cmake" + "CMakeModules/FindYAMLCPP.cmake" DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" ) -# Install the export set for use with the install-tree -install( - EXPORT - CalamaresLibraryDepends - DESTINATION - "${CMAKE_INSTALL_CMAKEDIR}" -) - +### Miscellaneous installs +# +# if( INSTALL_CONFIG ) install( - FILES - settings.conf - DESTINATION - share/calamares + FILES settings.conf + DESTINATION share/calamares ) endif() if( INSTALL_POLKIT ) install( - FILES - com.github.calamares.calamares.policy - DESTINATION - "${POLKITQT-1_POLICY_FILES_INSTALL_DIR}" + FILES com.github.calamares.calamares.policy + DESTINATION "${POLKITQT-1_POLICY_FILES_INSTALL_DIR}" ) endif() +if ( INSTALL_COMPLETION ) + if( NOT CMAKE_INSTALL_BASHCOMPLETIONDIR ) + set( CMAKE_INSTALL_BASHCOMPLETIONDIR "${CMAKE_INSTALL_DATADIR}/bash-completion/completions" ) + endif() + + install( FILES ${CMAKE_SOURCE_DIR}/data/completion/bash/calamares DESTINATION "${CMAKE_INSTALL_BASHCOMPLETIONDIR}" ) +endif() + install( - FILES - calamares.desktop - DESTINATION - ${CMAKE_INSTALL_DATADIR}/applications + FILES calamares.desktop + DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) install( - FILES - man/calamares.8 - DESTINATION - ${CMAKE_INSTALL_MANDIR}/man8/ + FILES man/calamares.8 + DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/ ) # uninstall target @@ -637,3 +677,16 @@ feature_summary( DESCRIPTION "The following REQUIRED packages were not found:" QUIET_ON_EMPTY ) + +### PACKAGING +# +# Note: most distro's will do distro-specific packaging rather than +# using CPack, and this duplicates information in the AppStream, too. +# TODO:3.3 With newer CMake, move HOMEPAGE_URL to the project()call +set(CPACK_PACKAGE_VENDOR calamares) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A Linux system installer") +set(CPACK_PACKAGE_DESCRIPTION "Calamares is a Linux system installer, intended for Linux distributions to use on their ISOs and other bootable media to install the distribution to the end-user's computer. Calamares can also be used as an OEM configuration tool. It is modular, extensible and highly-configurable for Linux distributions from all five major Linux families.") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://calamares.io") +set(CPACK_PACKAGE_ICON "data/images/squid.png") + +include(CPack) diff --git a/CMakeModules/BoostPython3.cmake b/CMakeModules/BoostPython3.cmake index 021c1947a..bd1d24e0e 100644 --- a/CMakeModules/BoostPython3.cmake +++ b/CMakeModules/BoostPython3.cmake @@ -1,3 +1,17 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-FileCopyrightText: 2019 Kevin Kofler +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# Handles the mess that Boost::Python is before CMake 3.16 and +# Boost 1.70 or so. +# +### +# # On Ubuntu 14.04, the libboost-python1.54-dev package comes with one library # for each Python version: # libboost_python-py27.so @@ -68,7 +82,7 @@ macro( find_boost_python3 boost_version python_version found_var ) endif() set( ${found_var} ${_fbp_found} ) - + # This is superfluous, but allows proper reporting in the features list if ( _fbp_found ) find_package( Boost ${boost_version} COMPONENTS ${_fbp_found} ) diff --git a/CMakeModules/CMakeColors.cmake b/CMakeModules/CMakeColors.cmake index 97739627d..073c24de6 100644 --- a/CMakeModules/CMakeColors.cmake +++ b/CMakeModules/CMakeColors.cmake @@ -1,3 +1,14 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2014 Kevin Kofler +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# Defines a handful of strings that, with normal xterm handling, +# will change colors in the output, so it's nicer to read. if(NOT WIN32) set(_use_color ON) if("0" STREQUAL "$ENV{CLICOLOR}") diff --git a/CMakeModules/CMakeDateStamp.cmake b/CMakeModules/CMakeDateStamp.cmake deleted file mode 100644 index 0b6a3896f..000000000 --- a/CMakeModules/CMakeDateStamp.cmake +++ /dev/null @@ -1,23 +0,0 @@ -find_program(DATE_EXECUTABLE NAMES date) -mark_as_advanced(DATE_EXECUTABLE) - -if(DATE_EXECUTABLE) - execute_process( - COMMAND ${DATE_EXECUTABLE} +%Y - OUTPUT_VARIABLE CMAKE_DATESTAMP_YEAR - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - execute_process( - COMMAND ${DATE_EXECUTABLE} +%m - OUTPUT_VARIABLE CMAKE_DATESTAMP_MONTH - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - execute_process( - COMMAND ${DATE_EXECUTABLE} +%d - OUTPUT_VARIABLE CMAKE_DATESTAMP_DAY - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) -endif() diff --git a/CMakeModules/CMakeVersionSource.cmake b/CMakeModules/CMakeVersionSource.cmake deleted file mode 100644 index 826546807..000000000 --- a/CMakeModules/CMakeVersionSource.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# Try to identify the current development source version. -set(CMAKE_VERSION_SOURCE "") -if(EXISTS ${CMAKE_SOURCE_DIR}/.git/HEAD) - find_program(GIT_EXECUTABLE NAMES git git.cmd) - mark_as_advanced(GIT_EXECUTABLE) - if(GIT_EXECUTABLE) - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD - OUTPUT_VARIABLE head - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - if(head) - set(branch "") - execute_process( - COMMAND ${GIT_EXECUTABLE} name-rev HEAD - OUTPUT_VARIABLE branch - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - string(REGEX REPLACE "HEAD " "" branch "${branch}") - set(CMAKE_VERSION_SOURCE "git-${branch}-${head}") - execute_process( - COMMAND ${GIT_EXECUTABLE} update-index -q --refresh - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - execute_process( - COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- - OUTPUT_VARIABLE dirty - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - if(dirty) - set(CMAKE_VERSION_SOURCE "${CMAKE_VERSION_SOURCE}-dirty") - endif() - endif() - endif() -elseif(EXISTS ${CMAKE_SOURCE_DIR}/CVS/Repository) - file(READ ${CMAKE_SOURCE_DIR}/CVS/Repository repo) - set(branch "") - if("${repo}" MATCHES "\\.git/") - string(REGEX REPLACE ".*\\.git/([^\r\n]*).*" "-\\1" branch "${repo}") - endif() - set(CMAKE_VERSION_SOURCE "cvs${branch}") -endif() diff --git a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake index 80cf86f38..062ad6706 100644 --- a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake +++ b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake @@ -1,20 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # @@ -70,7 +61,11 @@ function( calamares_add_branding NAME ) foreach( BRANDING_COMPONENT_FILE ${BRANDING_COMPONENT_FILES} ) set( _subpath ${_brand_dir}/${BRANDING_COMPONENT_FILE} ) if( NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${_subpath} ) - configure_file( ${_subpath} ${_subpath} COPYONLY ) + set( _src ${CMAKE_CURRENT_SOURCE_DIR}/${_subpath} ) + set( _dst ${CMAKE_CURRENT_BINARY_DIR}/${_subpath} ) + if( ${_src} IS_NEWER_THAN ${_dst} ) + configure_file( ${_src} ${_dst} COPYONLY ) + endif() install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${_subpath} DESTINATION ${BRANDING_COMPONENT_DESTINATION}/${_subdir}/ ) diff --git a/CMakeModules/CalamaresAddLibrary.cmake b/CMakeModules/CalamaresAddLibrary.cmake index 0829d919e..0cbad7424 100644 --- a/CMakeModules/CalamaresAddLibrary.cmake +++ b/CMakeModules/CalamaresAddLibrary.cmake @@ -1,20 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # @@ -62,10 +53,8 @@ function(calamares_add_library) include_directories(${CMAKE_CURRENT_BINARY_DIR}) # add resources from current dir - if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${LIBRARY_RESOURCES}") - qt5_add_resources(LIBRARY_RC_SOURCES "${LIBRARY_RESOURCES}") - list(APPEND LIBRARY_SOURCES ${LIBRARY_RC_SOURCES}) - unset(LIBRARY_RC_SOURCES) + if(LIBRARY_RESOURCES) + list(APPEND LIBRARY_SOURCES ${LIBRARY_RESOURCES}) endif() # add target @@ -81,6 +70,9 @@ function(calamares_add_library) if(LIBRARY_UI) calamares_autouic(${target} ${LIBRARY_UI}) endif() + if(LIBRARY_RESOURCES) + calamares_autorcc(${target} ${LIBRARY_RESOURCES}) + endif() if(LIBRARY_EXPORT_MACRO) set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS ${LIBRARY_EXPORT_MACRO}) @@ -93,11 +85,10 @@ function(calamares_add_library) # add link targets target_link_libraries(${target} - LINK_PUBLIC ${CALAMARES_LIBRARIES} + LINK_PUBLIC ${Calamares_LIBRARIES} Qt5::Core Qt5::Gui Qt5::Widgets - ${LIBRARY_QT5_MODULES} ) if(LIBRARY_LINK_LIBRARIES) target_link_libraries(${target} LINK_PUBLIC ${LIBRARY_LINK_LIBRARIES}) diff --git a/CMakeModules/CalamaresAddModuleSubdirectory.cmake b/CMakeModules/CalamaresAddModuleSubdirectory.cmake index 53b952b54..91524a09e 100644 --- a/CMakeModules/CalamaresAddModuleSubdirectory.cmake +++ b/CMakeModules/CalamaresAddModuleSubdirectory.cmake @@ -1,53 +1,94 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # # Function and support code for adding a Calamares module (either a Qt / C++ plugin, # or a Python module, or whatever) to the build. # +# # Usage +# +# The public API is one single function: +# +# - calamares_add_module_subdirectory(subdirectory [skiplistvar]) +# Adds a given *subdirectory* to the modules list, building the +# module that is there. The *subdirectory* must contain a `module.desc` +# (generally non-C++ modules) or a `CMakeLists.txt` (for C++ modules, +# or special cases). The module is assumed to be named after the +# (last component of) the subdirectory. +# +# If the module would be skipped (by the global SKIP_MODULES setting +# or a USE_* setting) or the module itself sets a reason to skip +# via the calamares_skip_module() function, the module is added to +# the list of skipped-modules in *skiplistvar*. If no variable is +# given, the reason is set in the parent scope variable +# SKIPPED_MODULES . Do **not** use SKIPPED_MODULES as the name of +# *skiplistvar*, things will get weird. +# +# Do note that the name of a module must be the same as the name of +# the directory containing it (as documented in src/modules/README.md). +# This applies to both C++ and Python modules, and allows the use of +# the subdirectory as a proxy for the module name inside. +# + include( CalamaresAddTranslations ) +include( CalamaresCheckModuleSelection ) set( MODULE_DATA_DESTINATION share/calamares/modules ) -# Convenience function to indicate that a module has been skipped -# (optionally also why). Call this in the module's CMakeLists.txt -macro( calamares_skip_module ) - set( SKIPPED_MODULES ${SKIPPED_MODULES} ${ARGV} PARENT_SCOPE ) -endmacro() +# We look for Pylint (just once) so that unittests can be added that +# check the syntax / variables of Python modules. This should help +# avoid more typo's-in-releases. +if(BUILD_TESTING AND NOT PYLINT_COMMAND_SEARCHED) + set(PYLINT_COMMAND_SEARCHED TRUE) + find_program( + PYLINT_COMMAND + NAMES pylint3 pylint + PATHS $ENV{HOME}/.local/bin + ) +endif() -function( calamares_explain_skipped_modules ) - if ( ARGN ) - message( "${ColorReset}-- Skipped modules:" ) - foreach( SUBDIRECTORY ${ARGN} ) - message( "${ColorReset}-- Skipped ${BoldRed}${SUBDIRECTORY}${ColorReset}." ) - endforeach() - message( "" ) - endif() -endfunction() - -function( calamares_add_module_subdirectory ) +function( _calamares_add_module_subdirectory_impl ) set( SUBDIRECTORY ${ARGV0} ) - set( SKIPPED_MODULES ) + # Set SKIPPED_MODULES here, so CMake-based modules have a + # parent scope to set it in; this function, in turn sets it + # in **its** parent scope. + set( SKIPPED_MODULES "" ) set( MODULE_CONFIG_FILES "" ) + # The module subdirectory may be given as a/b/c, but the module + # needs to be installed as "c", so we split off any intermediate + # directories. + # + # Compute _modulename (the last directory name) and _mod_dir + # (the full path to the module sources). + get_filename_component(_dirname "${SUBDIRECTORY}" DIRECTORY) + if( _dirname ) + # Remove the dirname and any leftover leading /s + string( REGEX REPLACE "^${_dirname}/*" "" _modulename "${SUBDIRECTORY}" ) + else() + set( _modulename ${SUBDIRECTORY} ) + endif() + # Strip any remaining / + string( REGEX REPLACE "/" "" _modulename "${_modulename}" ) set( _mod_dir "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" ) + + # Skip list check applies to all kinds of modules + calamares_check_skip( ${_modulename} SKIPPED_MODULES ) + if ( SKIPPED_MODULES ) + # If it's skipped by infrastucture, the message already includes the module + # name. We don't need to do any further checking. + set( SKIPPED_MODULES "${SKIPPED_MODULES}" PARENT_SCOPE ) + return() + endif() + # If this subdirectory has a CMakeLists.txt, we add_subdirectory it... if( EXISTS "${_mod_dir}/CMakeLists.txt" ) add_subdirectory( ${SUBDIRECTORY} ) @@ -57,11 +98,21 @@ function( calamares_add_module_subdirectory ) if ( SKIPPED_MODULES ) set( SKIPPED_MODULES ${SKIPPED_MODULES} PARENT_SCOPE ) set( MODULE_CONFIG_FILES "" ) + else() + # The SKIPPED_MODULES may be set in the directory itself + get_directory_property( _skip DIRECTORY ${SUBDIRECTORY} DEFINITION SKIPPED_MODULES ) + if ( _skip ) + set( SKIPPED_MODULES ${_skip} PARENT_SCOPE ) + set( MODULE_CONFIG_FILES "" ) + endif() + endif() + if ( SKIPPED_MODULES ) + return() endif() # ...otherwise, we look for a module.desc. elseif( EXISTS "${_mod_dir}/module.desc" ) set( MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/calamares/modules ) - set( MODULE_DESTINATION ${MODULES_DIR}/${SUBDIRECTORY} ) + set( MODULE_DESTINATION ${MODULES_DIR}/${_modulename} ) # Read module.desc, check that the interface type is supported. # @@ -70,11 +121,11 @@ function( calamares_add_module_subdirectory ) # _mod_testing boolean if the module should be added to the loadmodule tests file(STRINGS "${_mod_dir}/module.desc" MODULE_INTERFACE REGEX "^interface") if ( MODULE_INTERFACE MATCHES "pythonqt" ) - set( _mod_enabled ${WITH_PYTHONQT} ) + set( _mod_enabled ${Calamares_WITH_PYTHONQT} ) set( _mod_reason "No PythonQt support" ) set( _mod_testing OFF ) elseif ( MODULE_INTERFACE MATCHES "python" ) - set( _mod_enabled ${WITH_PYTHON} ) + set( _mod_enabled ${Calamares_WITH_PYTHON} ) set( _mod_reason "No Python support" ) set( _mod_testing ON ) # Will check syntax and imports, at least elseif ( MODULE_INTERFACE MATCHES "qtplugin" ) @@ -113,7 +164,7 @@ function( calamares_add_module_subdirectory ) endif() endforeach() - message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${SUBDIRECTORY}${ColorReset}" ) + message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${_modulename}${ColorReset}" ) message( " ${Green}TYPE:${ColorReset} jobmodule" ) message( " ${Green}MODULE_DESTINATION:${ColorReset} ${MODULE_DESTINATION}" ) if( MODULE_CONFIG_FILES ) @@ -126,10 +177,10 @@ function( calamares_add_module_subdirectory ) endif() message( "" ) # We copy over the lang directory, if any - if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" ) + if( IS_DIRECTORY "${_mod_dir}/lang" ) install_calamares_gettext_translations( ${SUBDIRECTORY} - SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" + SOURCE_DIR "${_mod_dir}/lang" FILENAME ${SUBDIRECTORY}.mo RENAME calamares-${SUBDIRECTORY}.mo ) @@ -158,15 +209,78 @@ function( calamares_add_module_subdirectory ) endforeach() endif() - # Check that the module can be loaded. Since this calls exec(), the module + # Adding general tests + # + # Add a check that the module can be loaded. Since this calls exec(), the module # may try to do things to the running system. Needs work to make that a # safe thing to do. # + # If the module has a tests/ subdirectory with *.global and *.job + # files (YAML files holding global and job-configurations for + # testing purposes) then those files are used to drive additional + # tests. The files must be numbered (starting from 1) for this to work; + # 1.global and 1.job together make the configuration for test 1. + # + # If the module has a tests/CMakeLists.txt while it doesn't have its + # own CMakeLists.txt (e.g. a Python module), then the subdirectory + # for tests/ is added on its own. + # if ( BUILD_TESTING AND _mod_enabled AND _mod_testing ) add_test( NAME load-${SUBDIRECTORY} COMMAND loadmodule ${SUBDIRECTORY} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) + # Try it with the tests/ configurations shipped with the module + set( _count 1 ) + set( _testdir ${_mod_dir}/tests ) + while ( EXISTS "${_testdir}/${_count}.global" OR EXISTS "${_testdir}/${_count}.job" ) + set( _dash_g "" ) + set( _dash_j "" ) + if ( EXISTS "${_testdir}/${_count}.global" ) + set( _dash_g -g ${_testdir}/${_count}.global ) + endif() + if ( EXISTS "${_testdir}/${_count}.job" ) + set( _dash_j -j ${_testdir}/${_count}.job ) + endif() + add_test( + NAME load-${SUBDIRECTORY}-${_count} + COMMAND loadmodule ${_dash_g} ${_dash_j} ${SUBDIRECTORY} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) + math( EXPR _count "${_count} + 1" ) + endwhile() + if ( EXISTS ${_testdir}/CMakeTests.txt AND NOT EXISTS ${_mod_dir}/CMakeLists.txt ) + include( ${_testdir}/CMakeTests.txt ) + endif() + if ( PYLINT_COMMAND AND MODULE_INTERFACE MATCHES "python" ) + # Python modules get an additional test via pylint; this + # needs to run at top-level because the ci/libcalamares directory + # contains API stubs. + # + # TODO: the entry point is assumed to be `main.py`, but that is + # configurable through module.desc + add_test( + NAME lint-${SUBDIRECTORY} + COMMAND env PYTHONPATH=ci: ${PYLINT_COMMAND} -E ${_mod_dir}/main.py + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + endif() + endif() +endfunction() + +function( calamares_add_module_subdirectory ) + set( SUBDIRECTORY ${ARGV0} ) + set( _ams_SKIP_LIST ${ARGV1} ) + + set( SKIPPED_MODULES "" ) + _calamares_add_module_subdirectory_impl( ${SUBDIRECTORY} ) + if ( SKIPPED_MODULES ) + if ( _ams_SKIP_LIST ) + list( APPEND ${_ams_SKIP_LIST} "${SKIPPED_MODULES}" ) + set( ${_ams_SKIP_LIST} "${${_ams_SKIP_LIST}}" PARENT_SCOPE ) + else() + set( SKIPPED_MODULES "${SKIPPED_MODULES}" PARENT_SCOPE ) + endif() endif() endfunction() diff --git a/CMakeModules/CalamaresAddPlugin.cmake b/CMakeModules/CalamaresAddPlugin.cmake index c8f81e684..7e2a3f583 100644 --- a/CMakeModules/CalamaresAddPlugin.cmake +++ b/CMakeModules/CalamaresAddPlugin.cmake @@ -1,20 +1,11 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # @@ -41,6 +32,7 @@ # [NO_CONFIG] # [SHARED_LIB] # [EMERGENCY] +# [WEIGHT w] # ) # # Function parameters: @@ -63,17 +55,28 @@ # - EMERGENCY # If this is set, the module is marked as an *emergency* module in the # descriptor. See *Emergency Modules* in the module documentation. +# - WEIGHT +# If this is set, writes an explicit weight into the module.desc; +# module weights are used in progress reporting. # +# +# This function follows the global SKIP_MODULES and USE_* settings, so +# a plugin may be skipped -- then nothing will be built. In that case, +# SKIPPED_MODULES is set in the parent (i.e. caller's) scope with the +# reason why. This should rarely be a concern as AddModuleSubdirectory +# already handles skip-reasons and collects them for reporting. include( CMakeParseArguments ) + include( CalamaresAddLibrary ) +include( CalamaresCheckModuleSelection ) include( CMakeColors ) function( calamares_add_plugin ) # parse arguments ( name needs to be saved before passing ARGN into the macro ) set( NAME ${ARGV0} ) set( options NO_CONFIG NO_INSTALL SHARED_LIB EMERGENCY ) - set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES ) + set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES WEIGHT ) set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS REQUIRES ) cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( PLUGIN_NAME ${NAME} ) @@ -85,6 +88,12 @@ function( calamares_add_plugin ) set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) + calamares_check_skip( ${NAME} _skip) + if ( _skip ) + set( SKIPPED_MODULES "${_skip}" PARENT_SCOPE ) + return() + endif() + message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${PLUGIN_NAME}${ColorReset}" ) message( " ${Green}TYPE:${ColorReset} ${PLUGIN_TYPE}" ) message( " ${Green}LINK_LIBRARIES:${ColorReset} ${PLUGIN_LINK_LIBRARIES}" ) @@ -117,6 +126,15 @@ function( calamares_add_plugin ) # create target name once for convenience set( target "calamares_${PLUGIN_TYPE}_${PLUGIN_NAME}" ) + # automatic library linkage + if(PLUGIN_TYPE STREQUAL "view" OR PLUGIN_TYPE STREQUAL "viewmodule") + list(APPEND PLUGIN_LINK_PRIVATE_LIBRARIES Calamares::calamaresui) + elseif(PLUGIN_TYPE STREQUAL "job") + list(APPEND PLUGIN_LINK_PRIVATE_LIBRARIES Calamares::calamares) + else() + message(FATAL_ERROR "Unknown plugin type ${PLUGIN_TYPE}") + endif() + # determine target type if( NOT ${PLUGIN_SHARED_LIB} ) set( target_type "MODULE" ) @@ -181,19 +199,31 @@ function( calamares_add_plugin ) if ( PLUGIN_NO_CONFIG ) file( APPEND ${_file} "noconfig: true\n" ) endif() + if ( PLUGIN_WEIGHT ) + file( APPEND ${_file} "weight: ${PLUGIN_WEIGHT}\n" ) + endif() endif() if ( NOT PLUGIN_NO_INSTALL ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE} DESTINATION ${PLUGIN_DESTINATION} ) + set( _warned_config OFF ) foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} ) - configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY ) + if( ${CMAKE_CURRENT_SOURCE_DIR}/${PLUGIN_CONFIG_FILE} IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE} OR INSTALL_CONFIG ) + configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY ) + else() + message( " ${BoldYellow}Not updating${ColorReset} ${PLUGIN_CONFIG_FILE}" ) + set( _warned_config ON ) + endif() if ( INSTALL_CONFIG ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE} DESTINATION ${PLUGIN_DATA_DESTINATION} ) endif() endforeach() + if ( _warned_config ) + message( "" ) + endif() endif() endfunction() diff --git a/CMakeModules/CalamaresAddTest.cmake b/CMakeModules/CalamaresAddTest.cmake index 65f9389e8..cd757bb88 100644 --- a/CMakeModules/CalamaresAddTest.cmake +++ b/CMakeModules/CalamaresAddTest.cmake @@ -1,20 +1,10 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # @@ -24,6 +14,7 @@ # calamares_add_test( # # [GUI] +# [RESOURCES FILE] # SOURCES # ) @@ -34,25 +25,31 @@ function( calamares_add_test ) # parse arguments (name needs to be saved before passing ARGN into the macro) set( NAME ${ARGV0} ) set( options GUI ) + set( oneValueArgs NAME RESOURCES ) set( multiValueArgs SOURCES LIBRARIES DEFINITIONS ) - cmake_parse_arguments( TEST "${options}" "" "${multiValueArgs}" ${ARGN} ) + cmake_parse_arguments( TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( TEST_NAME ${NAME} ) if( ECM_FOUND AND BUILD_TESTING ) ecm_add_test( - ${TEST_SOURCES} + ${TEST_SOURCES} ${TEST_RESOURCES} TEST_NAME ${TEST_NAME} LINK_LIBRARIES - calamares + Calamares::calamares ${TEST_LIBRARIES} Qt5::Core Qt5::Test ) calamares_automoc( ${TEST_NAME} ) + # We specifically pass in the source directory of the test-being- + # compiled, so that it can find test-files in that source dir. target_compile_definitions( ${TEST_NAME} PRIVATE -DBUILD_AS_TEST="${CMAKE_CURRENT_SOURCE_DIR}" ${TEST_DEFINITIONS} ) if( TEST_GUI ) - target_link_libraries( ${TEST_NAME} calamaresui Qt5::Gui ) + target_link_libraries( ${TEST_NAME} Calamares::calamaresui Qt5::Gui ) + endif() + if( TEST_RESOURCES ) + calamares_autorcc( ${TEST_NAME} ${TEST_RESOURCES} ) endif() endif() endfunction() diff --git a/CMakeModules/CalamaresAddTranslations.cmake b/CMakeModules/CalamaresAddTranslations.cmake index d74e4bdfb..56953187c 100644 --- a/CMakeModules/CalamaresAddTranslations.cmake +++ b/CMakeModules/CalamaresAddTranslations.cmake @@ -1,20 +1,10 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # @@ -22,104 +12,14 @@ include( CMakeParseArguments ) -if( NOT _rcc_version_support_checked ) - set( _rcc_version_support_checked TRUE ) - - # Extract the executable name - get_property( _rcc_executable - TARGET ${Qt5Core_RCC_EXECUTABLE} - PROPERTY IMPORTED_LOCATION - ) - if( NOT _rcc_executable ) - # Weird, probably now uses Qt5::rcc which is wrong too - set( _rcc_executable ${Qt5Core_RCC_EXECUTABLE} ) - endif() - - # Try an empty RCC file with explicit format-version - execute_process( - COMMAND echo "" - COMMAND ${Qt5Core_RCC_EXECUTABLE} --format-version 1 --list - - RESULT_VARIABLE _rcc_version_rv - ERROR_VARIABLE _rcc_version_dump - ) - if ( _rcc_version_rv EQUAL 0 ) - # Supported: force to the reproducible version - set( _rcc_version_support --format-version 1 ) - else() - # Older Qt versions (5.7, 5.8) don't support setting the - # rcc format-version, so won't be reproducible if they - # default to version 2. - set( _rcc_version_support "" ) - endif() - unset( _rcc_version_rv ) - unset( _rcc_version_dump ) -endif() - - -# Internal macro for adding the C++ / Qt translations to the -# build and install tree. Should be called only once, from -# src/calamares/CMakeLists.txt. -macro(add_calamares_translations language) - list( APPEND CALAMARES_LANGUAGES ${ARGV} ) - - set( calamares_i18n_qrc_content "\n" ) - - # calamares and qt language files - set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}\n" ) - foreach( lang ${CALAMARES_LANGUAGES} ) - foreach( tlsource "calamares_${lang}" "tz_${lang}" ) - if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) - set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}${tlsource}.qm\n" ) - list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) - endif() - endforeach() - endforeach() - - set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}\n" ) - set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}\n" ) - - file( WRITE ${CMAKE_BINARY_DIR}/lang/calamares_i18n.qrc "${calamares_i18n_qrc_content}" ) - - qt5_add_translation(QM_FILES ${TS_FILES}) - - ## HACK HACK HACK - around rcc limitations to allow out of source-tree building - set( trans_file calamares_i18n ) - set( trans_srcfile ${CMAKE_BINARY_DIR}/lang/${trans_file}.qrc ) - set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) - set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${trans_file}.cxx ) - - # Copy the QRC file to the output directory - add_custom_command( - OUTPUT ${trans_infile} - COMMAND ${CMAKE_COMMAND} -E copy ${trans_srcfile} ${trans_infile} - MAIN_DEPENDENCY ${trans_srcfile} - ) - - # Run the resource compiler (rcc_options should already be set) - add_custom_command( - OUTPUT ${trans_outfile} - COMMAND "${Qt5Core_RCC_EXECUTABLE}" - ARGS ${rcc_options} ${_rcc_version_support} -name ${trans_file} -o ${trans_outfile} ${trans_infile} - MAIN_DEPENDENCY ${trans_infile} - DEPENDS ${QM_FILES} - ) -endmacro() - -# Internal macro for Python translations -# -# Translations of the Python modules that don't have their own -# lang/ subdirectories -- these are collected in top-level -# lang/python//LC_MESSAGES/python.mo -macro(add_calamares_python_translations language) - set( CALAMARES_LANGUAGES "" ) - list( APPEND CALAMARES_LANGUAGES ${ARGV} ) - - install_calamares_gettext_translations( python - SOURCE_DIR ${CMAKE_SOURCE_DIR}/lang/python - FILENAME python.mo - RENAME calamares-python.mo - ) -endmacro() +# The Gettext module is still old-fashioned, ALLCAPS variables +find_package( Gettext ) +set_package_properties( GETTEXT PROPERTIES + DESCRIPTION "GNU gettext (translation) tools." + URL "https://www.gnu.org/software/gettext/" + PURPOSE "Gettext is used in the translation of Python modules." + TYPE REQUIRED +) # Installs a directory containing language-code-labeled subdirectories with # gettext data into the appropriate system directory. Allows renaming the @@ -151,31 +51,52 @@ function( install_calamares_gettext_translations ) if( NOT TRANSLATION_RENAME ) set( TRANSLATION_RENAME "${TRANSLATION_FILENAME}" ) endif() + string( REGEX REPLACE ".mo$" ".po" TRANSLATION_SOURCE_FILENAME "${TRANSLATION_FILENAME}" ) - message(STATUS "Installing gettext translations for ${TRANSLATION_NAME}") - message(STATUS " Installing ${TRANSLATION_FILENAME} from ${TRANSLATION_SOURCE_DIR}") + if ( GETTEXT_FOUND AND GETTEXT_MSGFMT_EXECUTABLE ) + message( STATUS "Installing gettext translations for ${TRANSLATION_NAME}") + message( STATUS " Installing ${TRANSLATION_FILENAME} from ${TRANSLATION_SOURCE_DIR}") + else() + message( WARNING "Gettext translations requested for ${TRANSLATION_NAME}, but gettext was not found." ) + return() + endif() + + set( TARGET_NAME calamares-gettext-translations-${NAME} ) + if( NOT TARGET "${TARGET_NAME}" ) + add_custom_target( "${TARGET_NAME}" ALL ) + endif() set( TRANSLATION_NAME "${NAME}" ) - set( INSTALLED_TRANSLATIONS "" ) foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) # Global - set( lang_mo "${TRANSLATION_SOURCE_DIR}/${lang}/LC_MESSAGES/${TRANSLATION_FILENAME}" ) + string( MAKE_C_IDENTIFIER "${TARGET_NAME}-${lang}" TARGET_SUBNAME ) + + set( lang_po "${TRANSLATION_SOURCE_DIR}/${lang}/LC_MESSAGES/${TRANSLATION_SOURCE_FILENAME}" ) + set( lang_mo_dir "${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES" ) + set( lang_mo "${lang_mo_dir}/${TRANSLATION_RENAME}" ) if( lang STREQUAL "en" ) message( STATUS " Skipping ${TRANSLATION_NAME} translations for en_US" ) - else( EXISTS ${lang_mo} ) - list( APPEND INSTALLED_LANGUAGES "${lang}" ) + else() + # We **don't** use the gettext macro's here because the source + # structure doesn't match: we are calling this once per language + # for all of Calamares's languages, while the gettext module + # expects it to be called once, for a given language source-dir. + # + # Using any of the gettext macros just gets us multiple rules + # for python.gmo, and it wants to use msgmerge, besides, which + # doesn't fit our Transifex workflow. + make_directory( ${lang_mo_dir} ) + add_custom_command( + OUTPUT ${lang_mo} + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} + ARGS -o ${lang_mo} ${lang_po} + MAIN_DEPENDENCY ${lang_po} + ) + add_custom_target( "${TARGET_SUBNAME}" DEPENDS ${lang_mo} ) + add_dependencies( "${TARGET_NAME}" "${TARGET_SUBNAME}" ) install( FILES ${lang_mo} DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${lang}/LC_MESSAGES/ - RENAME ${TRANSLATION_RENAME} ) - # TODO: make translations available in build dir too, for - # translation when running calamares -d from builddir. - set(_build_lc ${CMAKE_BINARY_DIR}/lang/${lang}/LC_MESSAGES/) - file(COPY ${lang_mo} DESTINATION ${_build_lc}) - if (NOT TRANSLATION_FILENAME STREQUAL TRANSLATION_RENAME) - file(RENAME ${_build_lc}${TRANSLATION_FILENAME} ${_build_lc}${TRANSLATION_RENAME}) - endif() - endif() endforeach() endfunction() diff --git a/CMakeModules/CalamaresAutomoc.cmake b/CMakeModules/CalamaresAutomoc.cmake index f8aa7faef..c7dbd72bf 100644 --- a/CMakeModules/CalamaresAutomoc.cmake +++ b/CMakeModules/CalamaresAutomoc.cmake @@ -1,34 +1,35 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Calamares is Free Software: see the License-Identifier above. # -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE # ### # -# Helper function for doing automoc on a target, and autoui on a .ui file. +# Helper function for doing automoc, autouic, autorcc on targets, +# and on the corresponding .ui or .rcc files. # -# Sets AUTOMOC TRUE for a target. +# calamares_automoc(target) +# Sets AUTOMOC TRUE for a target. # -# If the global variable CALAMARES_AUTOMOC_OPTIONS is set, uses that -# as well to set options passed to MOC. This can be used to add -# libcalamares/utils/moc-warnings.h file to the moc, which in turn -# reduces compiler warnings in generated MOC code. +# If the global variable CALAMARES_AUTOMOC_OPTIONS is set, uses that +# as well to set options passed to MOC. This can be used to add +# libcalamares/utils/moc-warnings.h file to the moc, which in turn +# reduces compiler warnings in generated MOC code. # -# If the global variable CALAMARES_AUTOUIC_OPTIONS is set, adds that -# to the options passed to uic. +# calamares_autouic(target [uifile ..]) +# Sets AUTOUIC TRUE for a target. +# +# If the global variable CALAMARES_AUTOUIC_OPTIONS is set, adds that +# to the options passed to uic for each of the named uifiles. +# +# calamares_autorcc(target [rcfile ..]) +# Sets AUTOUIC TRUE for a target. +# +# If the global variable CALAMARES_AUTORCC_OPTIONS is set, adds that +# to the options passed to rcc for each of the named rcfiles. function(calamares_automoc TARGET) set_target_properties( ${TARGET} PROPERTIES AUTOMOC TRUE ) @@ -45,3 +46,12 @@ function(calamares_autouic TARGET) endforeach() endif() endfunction() + +function(calamares_autorcc TARGET) + set_target_properties( ${TARGET} PROPERTIES AUTORCC TRUE ) + if ( CALAMARES_AUTORCC_OPTIONS ) + foreach(S ${ARGN}) + set_property(SOURCE ${S} PROPERTY AUTORCC_OPTIONS "${CALAMARES_AUTORCC_OPTIONS}") + endforeach() + endif() +endfunction() diff --git a/CMakeModules/CalamaresCheckModuleSelection.cmake b/CMakeModules/CalamaresCheckModuleSelection.cmake new file mode 100644 index 000000000..5eeb0e970 --- /dev/null +++ b/CMakeModules/CalamaresCheckModuleSelection.cmake @@ -0,0 +1,116 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# Calamares is Free Software: see the License-Identifier above. +# +### +# +# This module implements the "skip modules" part of configuring +# the Calamares repository or an external-modules repository. +# +# It should not be necessary to include() this module explicitly, +# since both AddPlugin and AddModuleSubdirectory do so implicitly. +# +# +# # Usage +# +# The public API is two functions: +# +# - calamares_skip_module(reason) +# A C++ module (or any that uses CMake) can call this macro to +# add *reason* to the list of skipped modules. Typically a module +# will pass in "modulename (why)" so that it is clear **which** +# module is skipped. This macro should be called at the top-level +# of a module's CMakeLists.txt and the module should then **not** +# call calamares_add_plugin(). +# - calamares_explain_skipped_modules(list...) +# This will print out all the module reasons (see above) that have +# been added to the given *listvar*. When AddModuleSubdirectory is +# used as the mechanism to add all the subdirectories in the repository +# that contain modules, with a consistent *listvar* setting, +# this will show all the modules that have been skipped. +# +# The internal API is one function: +# +# - calamares_check_skip(modulename outvar) +# Checks if the *modulename* has been listed in the global SKIP_MODULES +# variable (to skip specifically-named modules) or if there is a USE_* +# setting applicable to the module. If the module is skipped for this +# reason, a suitable entry is added to *outvar* as if +# calamares_skip_module() had been called. +# +# Best practice is to pick a variable to collect all of the skipped +# modules, and to pass the name of that variable to AddModuleSubdirectory +# in each call. After all subdirectories have been added, call +# calamares_explain_skipped_modules() with the value of that variable. + + +# Convenience function to indicate that a module has been skipped +# (optionally also why). Call this in the module's CMakeLists.txt +macro( calamares_skip_module ) + set( SKIPPED_MODULES ${SKIPPED_MODULES} ${ARGV} PARENT_SCOPE ) +endmacro() + +function( calamares_explain_skipped_modules ) + if ( ARGN ) + message( "${ColorReset}-- Skipped modules:" ) + foreach( SUBDIRECTORY ${ARGN} ) + message( "${ColorReset}-- Skipped ${BoldRed}${SUBDIRECTORY}${ColorReset}." ) + endforeach() + message( "" ) + endif() +endfunction() + +# Globally, SKIP_MODULES and USE_* affect what modules are built. +# Check if *modulename* should be skipped, and if so, set *outvar* to +# a human-readable reason for skipping it. +function( _calamares_check_skip_impl modulename outvar ) + # Globally-defined SKIP_MODULES may be space- or semicolon- separated + # so convert it to a list-variable. + string( REPLACE " " ";" SKIP_LIST "${SKIP_MODULES}" ) + + list( FIND SKIP_LIST "${modulename}" DO_SKIP ) + if( NOT DO_SKIP EQUAL -1 ) + set( ${outvar} "user request" PARENT_SCOPE ) + return() + endif() + + # Not skipped by the global check, see if it has an applicable USE_* + if( "${modulename}" MATCHES "^[a-zA-Z0-9_]+-" ) + # Split the name into - + string( REGEX REPLACE "-.*" "" _category "${modulename}" ) + string( REGEX REPLACE "^[^-]+-" "" _implementation "${modulename}" ) + else() + # Not a module to which USE_* applies + return() + endif() + + if( "${USE_${_category}}" STREQUAL "none" ) + set( ${outvar} "category ${_category} disabled" PARENT_SCOPE ) + return() + elseif( "${USE_${_category}}" STREQUAL "" ) + # Category not set at all or nonexistent + return() + endif() + + if ( "${USE_${_category}}" STREQUAL "${_implementation}" ) + # Matches, so accept this module + else() + set( ${outvar} "category ${_category} selects ${USE_${_category}}" PARENT_SCOPE ) + endif() +endfunction() + +# This is the public API;it calls the _impl version so that there +# is an extra intermediate scope for the subdirectory to write results into. +function( calamares_check_skip modulename outvar ) + set( _skip "" ) + _calamares_check_skip_impl( "${modulename}" _skip ) + if ( _skip ) + message( "${ColorReset}-- Skipping module ${BoldRed}${modulename} (${_skip})${ColorReset}." ) + message( "" ) + set( ${outvar} "${modulename} (${_skip})" PARENT_SCOPE ) + endif() +endfunction() diff --git a/CMakeModules/ExtendedVersion.cmake b/CMakeModules/ExtendedVersion.cmake new file mode 100644 index 000000000..b737dd2e2 --- /dev/null +++ b/CMakeModules/ExtendedVersion.cmake @@ -0,0 +1,75 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2021 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# This file defines one function for extending a VERSION-like value +# with date and git information (if desired). +# +# - extend_version( version-string short_only short_var long_var ) +# Calling this function will copy *version-string* (which would typically +# be a semver-style string, like "3.2.40") into the variable *short_var*. +# If *short_only* is true, then: +# - the short version is also copied into the variable *long_var*, +# If *short_only* is false, then: +# - the *version-string* plus date and git information, is copied +# into the varialbe *long_var*, in the format {version}-{date}-{hash} +# +# + +function( get_git_version_info out_var ) + set(CMAKE_VERSION_SOURCE "") + if(EXISTS ${CMAKE_SOURCE_DIR}/.git/HEAD) + find_program(GIT_EXECUTABLE NAMES git git.cmd) + mark_as_advanced(GIT_EXECUTABLE) + if(GIT_EXECUTABLE) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=8 HEAD + OUTPUT_VARIABLE head + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + if(head) + set(CMAKE_VERSION_SOURCE "${head}") + execute_process( + COMMAND ${GIT_EXECUTABLE} update-index -q --refresh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + execute_process( + COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- + OUTPUT_VARIABLE dirty + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + if(dirty) + set(CMAKE_VERSION_SOURCE "${CMAKE_VERSION_SOURCE}-dirty") + endif() + endif() + endif() + endif() + set( ${out_var} "${CMAKE_VERSION_SOURCE}" PARENT_SCOPE ) +endfunction() + +function( extend_version version short_only short_var long_var ) + set( ${short_var} "${version}" PARENT_SCOPE ) + set( _v "${version}" ) + if ( NOT short_only ) + # Additional info for non-release builds which want "long" version info + # with date and git information (commit, dirty status). That is used only + # by CalamaresVersionX.h, which is included by consumers that need a full + # version number with all that information; normal consumers can include + # CalamaresVersion.h with more stable numbers. + string( TIMESTAMP CALAMARES_VERSION_DATE "%Y%m%d" ) + if( CALAMARES_VERSION_DATE GREATER 0 ) + set( _v ${_v}.${CALAMARES_VERSION_DATE} ) + endif() + get_git_version_info( _gitv ) + if( _gitv ) + set( _v "${_v}-${_gitv}" ) + endif() + endif() + set( ${long_var} "${_v}" PARENT_SCOPE ) +endfunction() diff --git a/CMakeModules/FindCrypt.cmake b/CMakeModules/FindCrypt.cmake index d17d70178..94f8a4510 100644 --- a/CMakeModules/FindCrypt.cmake +++ b/CMakeModules/FindCrypt.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # - Find libcrypt # Find the libcrypt includes and the libcrypt libraries # This module defines diff --git a/CMakeModules/FindLIBPARTED.cmake b/CMakeModules/FindLIBPARTED.cmake index 97e7d9758..494271003 100644 --- a/CMakeModules/FindLIBPARTED.cmake +++ b/CMakeModules/FindLIBPARTED.cmake @@ -1,4 +1,5 @@ -# Copyright (C) 2008,2010,2011 by Volker Lanz +# SPDX-FileCopyrightText: 2008,2010,2011 by Volker Lanz +# SPDX-License-Identifier: BSD-2-Clause # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -44,7 +45,7 @@ else (LIBPARTED_FS_RESIZE_LIBRARY) set(LIBPARTED_LIBS ${LIBPARTED_LIBRARY}) endif (LIBPARTED_FS_RESIZE_LIBRARY) -# KDE adds -ansi to the C make flags, parted headers use GNU extensions, so +# KDE adds -ansi to the C make flags, parted headers use GNU extensions, so # undo that unset(CMAKE_C_FLAGS) diff --git a/CMakeModules/FindLibPWQuality.cmake b/CMakeModules/FindLibPWQuality.cmake index 84136f5ad..2a9943f3d 100644 --- a/CMakeModules/FindLibPWQuality.cmake +++ b/CMakeModules/FindLibPWQuality.cmake @@ -1,3 +1,10 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Locate libpwquality # https://github.com/libpwquality/libpwquality # @@ -6,10 +13,16 @@ # LibPWQuality_LIBRARIES, where to find the library # LibPWQuality_INCLUDE_DIRS, where to find pwquality.h # -include(FindPkgConfig) +find_package(PkgConfig) include(FindPackageHandleStandardArgs) -pkg_search_module(pc_pwquality QUIET pwquality) +if(PkgConfig_FOUND) + pkg_search_module(pc_pwquality QUIET pwquality) +else() + # It's just possible that the find_path and find_library will + # find it **anyway**, so let's pretend it was there. + set(pc_pwquality_FOUND ON) +endif() find_path(LibPWQuality_INCLUDE_DIR NAMES pwquality.h diff --git a/CMakeModules/FindPythonQt.cmake b/CMakeModules/FindPythonQt.cmake index 519e1c93e..81208a86e 100644 --- a/CMakeModules/FindPythonQt.cmake +++ b/CMakeModules/FindPythonQt.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Find PythonQt # # Sets PYTHONQT_FOUND, PYTHONQT_INCLUDE_DIR, PYTHONQT_LIBRARY, PYTHONQT_LIBRARIES diff --git a/CMakeModules/FindYAMLCPP.cmake b/CMakeModules/FindYAMLCPP.cmake index 395c794bb..f8ea4394c 100644 --- a/CMakeModules/FindYAMLCPP.cmake +++ b/CMakeModules/FindYAMLCPP.cmake @@ -1,3 +1,11 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# # Locate yaml-cpp # # This module defines @@ -5,7 +13,7 @@ # YAMLCPP_LIBRARY, where to find yaml-cpp # YAMLCPP_INCLUDE_DIR, where to find yaml.h # There is also one IMPORTED library target, -# yamlcpp +# yamlcpp::yamlcpp # # By default, the dynamic libraries of yaml-cpp will be found. To find the static ones instead, # you must set the YAMLCPP_STATIC_LIBRARY variable to TRUE before calling find_package(YamlCpp ...). @@ -13,6 +21,10 @@ # If yaml-cpp is not installed in a standard path, you can use the YAMLCPP_DIR CMake variable # to tell CMake where yaml-cpp is. +if(TARGET yamlcpp::yamlcpp) + return() +endif() + # attempt to find static library first if this is set if(YAMLCPP_STATIC_LIBRARY) set(YAMLCPP_STATIC libyaml-cpp.a) @@ -53,9 +65,9 @@ mark_as_advanced(YAMLCPP_INCLUDE_DIR YAMLCPP_LIBRARY) # Add an imported target if( YAMLCPP_LIBRARY ) - add_library( yamlcpp UNKNOWN IMPORTED ) - set_property( TARGET yamlcpp PROPERTY IMPORTED_LOCATION ${YAMLCPP_LIBRARY} ) + add_library( yamlcpp::yamlcpp UNKNOWN IMPORTED ) + set_property( TARGET yamlcpp::yamlcpp PROPERTY IMPORTED_LOCATION ${YAMLCPP_LIBRARY} ) if ( YAMLCPP_INCLUDE_DIR ) - set_property( TARGET yamlcpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${YAMLCPP_INCLUDE_DIR} ) + set_property( TARGET yamlcpp::yamlcpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${YAMLCPP_INCLUDE_DIR} ) endif() endif() diff --git a/CMakeModules/IncludeKPMCore.cmake b/CMakeModules/IncludeKPMCore.cmake deleted file mode 100644 index 4b4b8b3f2..000000000 --- a/CMakeModules/IncludeKPMCore.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# Shared CMake core for finding KPMCore -# -# This is wrapped into a CMake include file because there's a bunch of -# pre-requisites that need searching for before looking for KPMCore. -# If you just do find_package( KPMCore ) without finding the things -# it links against first, you get CMake errors. -# -# -find_package(ECM 5.10.0 REQUIRED NO_MODULE) -set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) - -include(KDEInstallDirs) -include(GenerateExportHeader) -find_package( KF5 REQUIRED CoreAddons ) -find_package( KF5 REQUIRED Config I18n Service WidgetsAddons ) - -find_package( KPMcore 3.2 REQUIRED ) diff --git a/CMakeModules/KPMcoreHelper.cmake b/CMakeModules/KPMcoreHelper.cmake new file mode 100644 index 000000000..6aacfc95c --- /dev/null +++ b/CMakeModules/KPMcoreHelper.cmake @@ -0,0 +1,39 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +### +# +# Finds KPMcore and consistently sets API flags based on the version. +# +if ( NOT KPMcore_searched_for ) + set( KPMcore_searched_for TRUE ) + + find_package( KPMcore 3.3 ) + set_package_properties( + KPMcore PROPERTIES + URL "https://invent.kde.org/kde/kpmcore" + DESCRIPTION "KDE Partitioning library" + TYPE RECOMMENDED + PURPOSE "For disk partitioning support" + ) + + if( KPMcore_FOUND ) + set( KPMcore_API_DEFINITIONS "" ) + if( KPMcore_VERSION VERSION_GREATER "3.3.70" AND KPMcore_VERSION VERSION_LESS "4.0" ) + message( FATAL_ERROR "KPMCore beta versions ${KPMcore_VERSION} not supported" ) + endif() + if ( KPMcore_VERSION VERSION_GREATER "3.3.0") + list( APPEND KPMcore_API_DEFINITIONS WITH_KPMCORE331API) # kpmcore > 3.3.0 with deprecations + endif() + if ( KPMcore_VERSION VERSION_GREATER_EQUAL "4.0") + list( APPEND KPMcore_API_DEFINITIONS WITH_KPMCORE4API) # kpmcore 4 with new API + endif() + if( KPMcore_VERSION VERSION_GREATER_EQUAL "4.2" ) + list( APPEND KPMcore_API_DEFINITIONS WITH_KPMCORE42API) # kpmcore 4.2 with new API + endif() + else() + set( KPMcore_API_DEFINITIONS WITHOUT_KPMcore ) + endif() +endif() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..0be408ba0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,121 @@ + + +# Contributing to Calamares + +Welcome to Calamares! We're happy that you would like to add +something to Calamares. This contribution guide should help you +get started. The guide is not exhaustive: most of it points +to other documents that you will need. + + +## Code of Conduct + +The Calamares community -- of developers, translators, and downstream (distro) users -- +aims to be courteous, professional, and inclusive. Harrassment, discriminatory +statements and abuse are not tolerated. In general, we apply the +[KDE Code of Conduct](https://www.kde.org/code-of-conduct/) and the +[GNOME Code of Conduct](https://wiki.gnome.org/Foundation/CodeOfConduct) (the +rules of decent behavior in both communities are pretty much the same). + +> See the [CoC section on the wiki](https://github.com/calamares/calamares/wiki#code-of-conduct) +> for a longer text. To report a problem, please contact the maintainer, +> Adriaan de Groot, or the KDE Community Working Group. + + +## Join the Conversation + +GitHub Issues are **one** place for discussing Calamares if there are concrete +problems or a new feature to discuss. + +Regular Calamares development chit-chat happens in a [Matrix](https://matrix.org/) +room, `#calamares:kde.org`. The conversation is bridged with IRC +on [Libera.Chat](https://libera.chat/). +Responsiveness is best during the day +in Europe, but feel free to idle. If you use IRC, **DO NOT** ask-and-leave. Keep +that chat window open because it can easily take a few hours for +someone to notice a message. +Matrix is persistent, and we'll see your message eventually. + +* [![Join us on Matrix](https://img.shields.io/badge/Matrix-%23calamares:kde.org-blue)](https://webchat.kde.org/#/room/%23calamares:kde.org) +* [![Chat on IRC](https://img.shields.io/badge/IRC-Libera.Chat%20%23calamares-green)](https://kiwiirc.com/client/irc.libera.chat/#calamares) + + +## General Guidelines + +Pull Requests are welcome! + +It is often a good idea to start a Pull Request early, with just work-in-progress, +so that the overall approach can be discussed before you put a lot of work +into something. Or file an issue describing what you would like to do. + +If you are writing code, stick to the existing coding style and apply +the coding-style tool before you commit. It's not my favorite style, +but at least all of Calamares is consistent and the tool helps it +stay that way. + +If you are writing documentation, use *en_US* spelling. + +If you are doing cool stuff, let us know (on IRC or through issues). + +**Do** fork Calamares to try new things, **don't** keep your fork to +yourself, **do** upstream things as much as you can. When you make cool +new things, it's best for the whole Calamares-using-community +to build new things that are configurable and applicable to other +distributions than your own. So keep other folk in mind. There is +also the [extensions](https://github.com/calamares/calamares-extensions) +repository for somewhat-more-specialized modules and examples. + + +## Building Calamares + +Up to date +[building-Calamares](https://github.com/calamares/calamares/wiki/Develop-Guide) +instructions are on the wiki. + +### Dependencies + +Main: +* Compiler with C++17 support: GCC >= 7 or Clang >= 5 +* CMake >= 3.3 +* Qt >= 5.9 +* yaml-cpp >= 0.5.1 +* Python >= 3.3 (required for some modules) +* Boost.Python >= 1.55.0 (required for some modules) +* KDE extra-cmake-modules >= 5.18 (recommended; required for some modules; + required for some tests) +* KDE Frameworks KCoreAddons (>= 5.58 recommended) +* PythonQt (optional, deprecated) + +Individual modules may have their own requirements; +these are listed in CMake output. +Particular requirements (not complete): + +* *fsresizer* KPMCore >= 3.3 (>= 4.2 recommended) +* *partition* KPMCore >= 3.3 (>= 4.2 recommended) +* *users* LibPWQuality (optional) + + +## Configuring and Deploying Calamares + +[Deployment](https://github.com/calamares/calamares/wiki/Deploy-Guide) +instructions are on the wiki. + + +## Translating Calamares + +Calamares translations are done on Transifex. +The [translator's guide](https://github.com/calamares/calamares/wiki/Translate-Guide) +on the wiki explains how to get involved there. + + +## Testing Calamares + +There is a [testing guide](https://github.com/calamares/calamares/wiki/Test-Guide) +on the wiki. It is possible to test most parts of Calamares in isolation, +but the real proof of the pudding comes with an actual installation +of *some* distro using Calamares. + +The UI components should get some specific usability testing instructions soon. + diff --git a/CalamaresBuildTreeSettings.cmake.in b/CalamaresBuildTreeSettings.cmake.in deleted file mode 100644 index 507fc3d64..000000000 --- a/CalamaresBuildTreeSettings.cmake.in +++ /dev/null @@ -1,4 +0,0 @@ -set(CALAMARES_INCLUDE_DIRS - "@PROJECT_SOURCE_DIR@/src/libcalamares" - "@PROJECT_BINARY_DIR@/src/libcalamares" -) diff --git a/CalamaresConfig.cmake.in b/CalamaresConfig.cmake.in index 6d32410c6..4fb9621ca 100644 --- a/CalamaresConfig.cmake.in +++ b/CalamaresConfig.cmake.in @@ -1,32 +1,91 @@ +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# Note that Calamares itself is GPL-3.0-or-later: the above license +# applies to **this** CMake file. +# # Config file for the Calamares package # -# It defines the following variables -# CALAMARES_INCLUDE_DIRS - include directories for Calamares -# CALAMARES_LIBRARIES - libraries to link against -# CALAMARES_USE_FILE - name of a convenience include -# CALAMARES_APPLICATION_NAME - human-readable application name -# -# Typical use is: -# -# find_package(Calamares REQUIRED) -# include("${CALAMARES_USE_FILE}") +# The following IMPORTED targets are defined: +# - Calamares::calamares - the core library +# - Calamares::calamaresui - the UI (and QML) library # +# For legacy use it defines the following variables: +# - Calamares_INCLUDE_DIRS - include directories for Calamares +# - Calamares_LIB_DIRS - library directories +# - Calamares_LIBRARIES - libraries to link against -# Compute paths -get_filename_component(CALAMARES_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -if(EXISTS "${CALAMARES_CMAKE_DIR}/CMakeCache.txt") - # In build tree - include("${CALAMARES_CMAKE_DIR}/CalamaresBuildTreeSettings.cmake") -else() - set(CALAMARES_INCLUDE_DIRS "${CALAMARES_CMAKE_DIR}/@CONF_REL_INCLUDE_DIR@/libcalamares") +@PACKAGE_INIT@ + +### Versioning and IMPORTED targets +# +# +include(${CMAKE_CURRENT_LIST_DIR}/CalamaresConfigVersion.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/CalamaresTargets.cmake) +if (NOT TARGET Calamares::calamares OR NOT TARGET Calamares::calamaresui) + message(FATAL_ERROR "Calamares found with missing CMake targets") endif() -# Our library dependencies (contains definitions for IMPORTED targets) -include("${CALAMARES_CMAKE_DIR}/CalamaresLibraryDepends.cmake") +# Need various CMake files that are installed alongside this one. +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) -# These are IMPORTED targets created by CalamaresLibraryDepends.cmake -set(CALAMARES_LIBRARIES calamares) +### Dependencies +# +# The libraries can depend on a variety of Qt and KDE Frameworks +# components, so accumulate them and find (just once). +# +macro(accumulate_deps outvar target namespace) + string(LENGTH ${namespace} _nslen) + get_target_property(_libs ${target} INTERFACE_LINK_LIBRARIES) + foreach(_lib ${_libs}) + if (_lib MATCHES ^${namespace}) + string(SUBSTRING ${_lib} ${_nslen} -1 _component) + list(APPEND ${outvar} ${_component}) + endif() + endforeach() +endmacro() -# Convenience variables -set(CALAMARES_USE_FILE "${CALAMARES_CMAKE_DIR}/CalamaresUse.cmake") -set(CALAMARES_APPLICATION_NAME "Calamares") +# Qt5 infrastructure for translations is required +set(qt5_required Core Widgets LinguistTools) +accumulate_deps(qt5_required Calamares::calamares Qt5::) +accumulate_deps(qt5_required Calamares::calamaresui Qt5::) +find_package(Qt5 CONFIG REQUIRED ${qt5_required}) + +set(kf5_required "") +accumulate_deps(kf5_required Calamares::calamares KF5::) +accumulate_deps(kf5_required Calamares::calamaresui KF5::) +if(kf5_required) + find_package(ECM ${ECM_VERSION} NO_MODULE) + if( ECM_FOUND ) + list(INSERT CMAKE_MODULE_PATH 0 ${ECM_MODULE_PATH}) + find_package(KF5 REQUIRED COMPONENTS ${kf5_required}) + endif() +endif() + +find_package(YAMLCPP REQUIRED) + +### Legacy support +# +# +set(Calamares_LIB_DIRS "@PACKAGE_CMAKE_INSTALL_LIBDIR@") +set(Calamares_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") +set(Calamares_LIBRARIES Calamares::calamares) + +### CMake support +# +# +include(CalamaresAddBrandingSubdirectory) +include(CalamaresAddLibrary) +include(CalamaresAddModuleSubdirectory) +include(CalamaresAddPlugin) + +# These are feature-settings that affect consumers of Calamares +# libraries as well; without Python-support in the libs, for instance, +# there's no point in having a Python plugin. +# +# This list should match the one in libcalamares/CalamaresConfig.h, +# which is the C++-language side of the same configuration. +set(Calamares_WITH_PYTHON @WITH_PYTHON@) +set(Calamares_WITH_PYTHONQT @WITH_PYTHONQT@) +set(Calamares_WITH_QML @WITH_QML@) diff --git a/CalamaresConfigVersion.cmake.in b/CalamaresConfigVersion.cmake.in deleted file mode 100644 index 05b87c8d3..000000000 --- a/CalamaresConfigVersion.cmake.in +++ /dev/null @@ -1,12 +0,0 @@ -set(PACKAGE_VERSION "@CALAMARES_VERSION@") - -# Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() - diff --git a/CalamaresUse.cmake.in b/CalamaresUse.cmake.in deleted file mode 100644 index 00f3c968d..000000000 --- a/CalamaresUse.cmake.in +++ /dev/null @@ -1,29 +0,0 @@ -# A setup-cmake-things-for-Calamares module. -# -# This module handles looking for dependencies and including -# all of the Calamares macro modules, so that you can focus -# on just using the macros to build Calamares modules. -# Typical use looks like this: -# -# ``` -# find_package( Calamares REQUIRED ) -# include( "${CALAMARES_CMAKE_DIR}/CalamaresUse.cmake" ) -# ``` -# -# The first CMake command finds Calamares (which will contain -# this file), then adds the found location to the search path, -# and then includes this file. After that, you can use -# Calamares module and plugin macros. - -if( NOT CALAMARES_CMAKE_DIR ) - message( FATAL_ERROR "Use find_package(Calamares) first." ) -endif() -set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CALAMARES_CMAKE_DIR} ) - -find_package( Qt5 @QT_VERSION@ CONFIG REQUIRED Core Widgets LinguistTools ) - -include( CalamaresAddLibrary ) -include( CalamaresAddModuleSubdirectory ) -include( CalamaresAddPlugin ) -include( CalamaresAddBrandingSubdirectory ) - diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2c8be23a0..000000000 --- a/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM kdeneon/all:user -RUN sudo apt-get update && sudo apt-get -y install build-essential cmake extra-cmake-modules gettext kio-dev libatasmart-dev libboost-python-dev libkf5config-dev libkf5coreaddons-dev libkf5i18n-dev libkf5iconthemes-dev libkf5parts-dev libkf5service-dev libkf5solid-dev libkpmcore-dev libparted-dev libpolkit-qt5-1-dev libqt5svg5-dev libqt5webkit5-dev libyaml-cpp-dev os-prober pkg-config python3-dev qtbase5-dev qtdeclarative5-dev qttools5-dev qttools5-dev-tools diff --git a/LICENSES/BSD-2-Clause.txt b/LICENSES/BSD-2-Clause.txt new file mode 100644 index 000000000..919d22d1c --- /dev/null +++ b/LICENSES/BSD-2-Clause.txt @@ -0,0 +1,24 @@ + + Copyright 2019 Adriaan de Groot + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/BSD3-SameGame b/LICENSES/BSD3-SameGame deleted file mode 100644 index 9aefc27c5..000000000 --- a/LICENSES/BSD3-SameGame +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ diff --git a/LICENSES/CC-BY-4.0.txt b/LICENSES/CC-BY-4.0.txt new file mode 100644 index 000000000..3f92dfc5f --- /dev/null +++ b/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,324 @@ +Creative Commons Attribution 4.0 International Creative Commons Corporation +("Creative Commons") is not a law firm and does not provide legal services +or legal advice. Distribution of Creative Commons public licenses does not +create a lawyer-client or other relationship. Creative Commons makes its licenses +and related information available on an "as-is" basis. Creative Commons gives +no warranties regarding its licenses, any material licensed under their terms +and conditions, or any related information. Creative Commons disclaims all +liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions +that creators and other rights holders may use to share original works of +authorship and other material subject to copyright and certain other rights +specified in the public license below. The following considerations are for +informational purposes only, are not exhaustive, and do not form part of our +licenses. + +Considerations for licensors: Our public licenses are intended for use by +those authorized to give the public permission to use material in ways otherwise +restricted by copyright and certain other rights. Our licenses are irrevocable. +Licensors should read and understand the terms and conditions of the license +they choose before applying it. Licensors should also secure all rights necessary +before applying our licenses so that the public can reuse the material as +expected. Licensors should clearly mark any material not subject to the license. +This includes other CC-licensed material, or material used under an exception +or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors + +Considerations for the public: By using one of our public licenses, a licensor +grants the public permission to use the licensed material under specified +terms and conditions. If the licensor's permission is not necessary for any +reason–for example, because of any applicable exception or limitation to copyright–then +that use is not regulated by the license. Our licenses grant only permissions +under copyright and certain other rights that a licensor has authority to +grant. Use of the licensed material may still be restricted for other reasons, +including because others have copyright or other rights in the material. A +licensor may make special requests, such as asking that all changes be marked +or described. Although not required by our licenses, you are encouraged to +respect those requests where reasonable. More considerations for the public +: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution +4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to +be bound by the terms and conditions of this Creative Commons Attribution +4.0 International Public License ("Public License"). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +a. Adapted Material means material subject to Copyright and Similar Rights +that is derived from or based upon the Licensed Material and in which the +Licensed Material is translated, altered, arranged, transformed, or otherwise +modified in a manner requiring permission under the Copyright and Similar +Rights held by the Licensor. For purposes of this Public License, where the +Licensed Material is a musical work, performance, or sound recording, Adapted +Material is always produced where the Licensed Material is synched in timed +relation with a moving image. + +b. Adapter's License means the license You apply to Your Copyright and Similar +Rights in Your contributions to Adapted Material in accordance with the terms +and conditions of this Public License. + +c. Copyright and Similar Rights means copyright and/or similar rights closely +related to copyright including, without limitation, performance, broadcast, +sound recording, and Sui Generis Database Rights, without regard to how the +rights are labeled or categorized. For purposes of this Public License, the +rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. Effective Technological Measures means those measures that, in the absence +of proper authority, may not be circumvented under laws fulfilling obligations +under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, +and/or similar international agreements. + +e. Exceptions and Limitations means fair use, fair dealing, and/or any other +exception or limitation to Copyright and Similar Rights that applies to Your +use of the Licensed Material. + +f. Licensed Material means the artistic or literary work, database, or other +material to which the Licensor applied this Public License. + +g. Licensed Rights means the rights granted to You subject to the terms and +conditions of this Public License, which are limited to all Copyright and +Similar Rights that apply to Your use of the Licensed Material and that the +Licensor has authority to license. + +h. Licensor means the individual(s) or entity(ies) granting rights under this +Public License. + +i. Share means to provide material to the public by any means or process that +requires permission under the Licensed Rights, such as reproduction, public +display, public performance, distribution, dissemination, communication, or +importation, and to make material available to the public including in ways +that members of the public may access the material from a place and at a time +individually chosen by them. + +j. Sui Generis Database Rights means rights other than copyright resulting +from Directive 96/9/EC of the European Parliament and of the Council of 11 +March 1996 on the legal protection of databases, as amended and/or succeeded, +as well as other essentially equivalent rights anywhere in the world. + +k. You means the individual or entity exercising the Licensed Rights under +this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + +1. Subject to the terms and conditions of this Public License, the Licensor +hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, +irrevocable license to exercise the Licensed Rights in the Licensed Material +to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + +2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions +and Limitations apply to Your use, this Public License does not apply, and +You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + +4. Media and formats; technical modifications allowed. The Licensor authorizes +You to exercise the Licensed Rights in all media and formats whether now known +or hereafter created, and to make technical modifications necessary to do +so. The Licensor waives and/or agrees not to assert any right or authority +to forbid You from making technical modifications necessary to exercise the +Licensed Rights, including technical modifications necessary to circumvent +Effective Technological Measures. For purposes of this Public License, simply +making modifications authorized by this Section 2(a)(4) never produces Adapted +Material. + + 5. Downstream recipients. + +A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed +Material automatically receives an offer from the Licensor to exercise the +Licensed Rights under the terms and conditions of this Public License. + +B. No downstream restrictions. You may not offer or impose any additional +or different terms or conditions on, or apply any Effective Technological +Measures to, the Licensed Material if doing so restricts exercise of the Licensed +Rights by any recipient of the Licensed Material. + +6. No endorsement. Nothing in this Public License constitutes or may be construed +as permission to assert or imply that You are, or that Your use of the Licensed +Material is, connected with, or sponsored, endorsed, or granted official status +by, the Licensor or others designated to receive attribution as provided in +Section 3(a)(1)(A)(i). + + b. Other rights. + +1. Moral rights, such as the right of integrity, are not licensed under this +Public License, nor are publicity, privacy, and/or other similar personality +rights; however, to the extent possible, the Licensor waives and/or agrees +not to assert any such rights held by the Licensor to the limited extent necessary +to allow You to exercise the Licensed Rights, but not otherwise. + +2. Patent and trademark rights are not licensed under this Public License. + +3. To the extent possible, the Licensor waives any right to collect royalties +from You for the exercise of the Licensed Rights, whether directly or through +a collecting society under any voluntary or waivable statutory or compulsory +licensing scheme. In all other cases the Licensor expressly reserves any right +to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following +conditions. + + a. Attribution. + +1. If You Share the Licensed Material (including in modified form), You must: + +A. retain the following if it is supplied by the Licensor with the Licensed +Material: + +i. identification of the creator(s) of the Licensed Material and any others +designated to receive attribution, in any reasonable manner requested by the +Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + +v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + +B. indicate if You modified the Licensed Material and retain an indication +of any previous modifications; and + +C. indicate the Licensed Material is licensed under this Public License, and +include the text of, or the URI or hyperlink to, this Public License. + +2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner +based on the medium, means, and context in which You Share the Licensed Material. +For example, it may be reasonable to satisfy the conditions by providing a +URI or hyperlink to a resource that includes the required information. + +3. If requested by the Licensor, You must remove any of the information required +by Section 3(a)(1)(A) to the extent reasonably practicable. + +4. If You Share Adapted Material You produce, the Adapter's License You apply +must not prevent recipients of the Adapted Material from complying with this +Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to +Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, +reuse, reproduce, and Share all or a substantial portion of the contents of +the database; + +b. if You include all or a substantial portion of the database contents in +a database in which You have Sui Generis Database Rights, then the database +in which You have Sui Generis Database Rights (but not its individual contents) +is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or +a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. Unless otherwise separately undertaken by the Licensor, to the extent possible, +the Licensor offers the Licensed Material as-is and as-available, and makes +no representations or warranties of any kind concerning the Licensed Material, +whether express, implied, statutory, or other. This includes, without limitation, +warranties of title, merchantability, fitness for a particular purpose, non-infringement, +absence of latent or other defects, accuracy, or the presence or absence of +errors, whether or not known or discoverable. Where disclaimers of warranties +are not allowed in full or in part, this disclaimer may not apply to You. + +b. To the extent possible, in no event will the Licensor be liable to You +on any legal theory (including, without limitation, negligence) or otherwise +for any direct, special, indirect, incidental, consequential, punitive, exemplary, +or other losses, costs, expenses, or damages arising out of this Public License +or use of the Licensed Material, even if the Licensor has been advised of +the possibility of such losses, costs, expenses, or damages. Where a limitation +of liability is not allowed in full or in part, this limitation may not apply +to You. + +c. The disclaimer of warranties and limitation of liability provided above +shall be interpreted in a manner that, to the extent possible, most closely +approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights +licensed here. However, if You fail to comply with this Public License, then +Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section +6(a), it reinstates: + +1. automatically as of the date the violation is cured, provided it is cured +within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + +c. For the avoidance of doubt, this Section 6(b) does not affect any right +the Licensor may have to seek remedies for Your violations of this Public +License. + +d. For the avoidance of doubt, the Licensor may also offer the Licensed Material +under separate terms or conditions or stop distributing the Licensed Material +at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or +conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed +Material not stated herein are separate from and independent of the terms +and conditions of this Public License. + +Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not +be interpreted to, reduce, limit, restrict, or impose conditions on any use +of the Licensed Material that could lawfully be made without permission under +this Public License. + +b. To the extent possible, if any provision of this Public License is deemed +unenforceable, it shall be automatically reformed to the minimum extent necessary +to make it enforceable. If the provision cannot be reformed, it shall be severed +from this Public License without affecting the enforceability of the remaining +terms and conditions. + +c. No term or condition of this Public License will be waived and no failure +to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation +upon, or waiver of, any privileges and immunities that apply to the Licensor +or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative +Commons may elect to apply one of its public licenses to material it publishes +and in those instances will be considered the "Licensor." The text of the +Creative Commons public licenses is dedicated to the public domain under the +CC0 Public Domain Dedication. Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as otherwise +permitted by the Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative Commons" +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, +or agreements concerning use of licensed material. For the avoidance of doubt, +this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 000000000..a343ccd43 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,119 @@ +Creative Commons Legal Code + +CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES +NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE +AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION +ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE +OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS +LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION +OR WORKS PROVIDED HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive +Copyright and Related Rights (defined below) upon the creator and subsequent +owner(s) (each and all, an "owner") of an original work of authorship and/or +a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later claims +of infringement build upon, modify, incorporate in other works, reuse and +redistribute as freely as possible in any form whatsoever and for any purposes, +including without limitation commercial purposes. These owners may contribute +to the Commons to promote the ideal of a free culture and the further production +of creative, cultural and scientific works, or to gain reputation or greater +distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with +a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or +her Copyright and Related Rights in the Work and the meaning and intended +legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be protected +by copyright and related or neighboring rights ("Copyright and Related Rights"). +Copyright and Related Rights include, but are not limited to, the following: + +i. the right to reproduce, adapt, distribute, perform, display, communicate, +and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + +iii. publicity and privacy rights pertaining to a person's image or likeness +depicted in a Work; + +iv. rights protecting against unfair competition in regards to a Work, subject +to the limitations in paragraph 4(a), below; + +v. rights protecting the extraction, dissemination, use and reuse of data +in a Work; + +vi. database rights (such as those arising under Directive 96/9/EC of the +European Parliament and of the Council of 11 March 1996 on the legal protection +of databases, and under any national implementation thereof, including any +amended or successor version of such directive); and + +vii. other similar, equivalent or corresponding rights throughout the world +based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time extensions), +(iii) in any current or future medium and for any number of copies, and (iv) +for any purpose whatsoever, including without limitation commercial, advertising +or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the +benefit of each member of the public at large and to the detriment of Affirmer's +heirs and successors, fully intending that such Waiver shall not be subject +to revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account Affirmer's +express Statement of Purpose. In addition, to the extent the Waiver is so +judged Affirmer hereby grants to each affected person a royalty-free, non +transferable, non sublicensable, non exclusive, irrevocable and unconditional +license to exercise Affirmer's Copyright and Related Rights in the Work (i) +in all territories worldwide, (ii) for the maximum duration provided by applicable +law or treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional purposes +(the "License"). The License shall be deemed effective as of the date CC0 +was applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder of +the License, and in such case Affirmer hereby affirms that he or she will +not (i) exercise any of his or her remaining Copyright and Related Rights +in the Work or (ii) assert any associated claims and causes of action with +respect to the Work, in either case contrary to Affirmer's express Statement +of Purpose. + + 4. Limitations and Disclaimers. + +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, +licensed or otherwise affected by this document. + +b. Affirmer offers the Work as-is and makes no representations or warranties +of any kind concerning the Work, express, implied, statutory or otherwise, +including without limitation warranties of title, merchantability, fitness +for a particular purpose, non infringement, or the absence of latent or other +defects, accuracy, or the present or absence of errors, whether or not discoverable, +all to the greatest extent permissible under applicable law. + +c. Affirmer disclaims responsibility for clearing rights of other persons +that may apply to the Work or any use thereof, including without limitation +any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims +responsibility for obtaining any necessary consents, permissions or other +rights required for any use of the Work. + +d. Affirmer understands and acknowledges that Creative Commons is not a party +to this document and has no duty or obligation with respect to this CC0 or +use of the Work. diff --git a/LICENSE b/LICENSES/GPL-3.0-or-later.txt similarity index 100% rename from LICENSE rename to LICENSES/GPL-3.0-or-later.txt diff --git a/LICENSES/GPLv2+-libpwquality b/LICENSES/GPLv2+-libpwquality deleted file mode 100644 index 5d1984656..000000000 --- a/LICENSES/GPLv2+-libpwquality +++ /dev/null @@ -1,383 +0,0 @@ -Unless otherwise *explicitly* stated the following text describes the -licensed conditions under which the contents of this libpwquality release -may be distributed: - -------------------------------------------------------------------------- -Redistribution and use in source and binary forms of libpwquality, with -or without modification, are permitted provided that the following -conditions are met: - -1. Redistributions of source code must retain any existing copyright - notice, and this entire permission notice in its entirety, - including the disclaimer of warranties. - -2. Redistributions in binary form must reproduce all prior and current - copyright notices, this list of conditions, and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -3. The name of any author may not be used to endorse or promote - products derived from this software without their specific prior - written permission. - -ALTERNATIVELY, this product may be distributed under the terms of the -GNU General Public License version 2 or later, in which case the provisions -of the GNU GPL are required INSTEAD OF the above restrictions. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -The full text of the GNU GENERAL PUBLIC LICENSE Version 2 is included -below. - -------------------------------------------------------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/LICENSES/GPLv3+-ImageRegistry b/LICENSES/GPLv3+-ImageRegistry deleted file mode 100644 index 362e89766..000000000 --- a/LICENSES/GPLv3+-ImageRegistry +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2012, Christian Muehlhaeuser - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ diff --git a/LICENSES/LGPLv2-KDAB b/LICENSES/LGPL-2.0-only.txt similarity index 100% rename from LICENSES/LGPLv2-KDAB rename to LICENSES/LGPL-2.0-only.txt diff --git a/LICENSES/LGPL-2.1-only.txt b/LICENSES/LGPL-2.1-only.txt new file mode 100644 index 000000000..130dffb31 --- /dev/null +++ b/LICENSES/LGPL-2.1-only.txt @@ -0,0 +1,467 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. + +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts as the +successor of the GNU Library Public License, version 2, hence the version +number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public Licenses are intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + +This license, the Lesser General Public License, applies to some specially +designated software packages--typically libraries--of the Free Software Foundation +and other authors who decide to use it. You can use it too, but we suggest +you first think carefully about whether this license or the ordinary General +Public License is the better strategy to use in any particular case, based +on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. +Our General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish); that you receive source code or can get it if you want it; that you +can change the software and use pieces of it in new free programs; and that +you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors +to deny you these rights or to ask you to surrender these rights. These restrictions +translate to certain responsibilities for you if you distribute copies of +the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source code. If you link +other code with the library, you must provide complete object files to the +recipients, so that they can relink them with the library after making changes +to the library and recompiling it. And you must show them these terms so they +know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, +and (2) we offer you this license, which gives you legal permission to copy, +distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no +warranty for the free library. Also, if the library is modified by someone +else and passed on, the recipients should know that what they have is not +the original version, so that the original author's reputation will not be +affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free +program. We wish to make sure that a company cannot effectively restrict the +users of a free program by obtaining a restrictive license from a patent holder. +Therefore, we insist that any patent license obtained for a version of the +library must be consistent with the full freedom of use specified in this +license. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License. This license, the GNU Lesser General Public License, +applies to certain designated libraries, and is quite different from the ordinary +General Public License. We use this license for certain libraries in order +to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared +library, the combination of the two is legally speaking a combined work, a +derivative of the original library. The ordinary General Public License therefore +permits such linking only if the entire combination fits its criteria of freedom. +The Lesser General Public License permits more lax criteria for linking other +code with the library. + +We call this license the "Lesser" General Public License because it does Less +to protect the user's freedom than the ordinary General Public License. It +also provides other free software developers Less of an advantage over competing +non-free programs. These disadvantages are the reason we use the ordinary +General Public License for many libraries. However, the Lesser license provides +advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the +widest possible use of a certain library, so that it becomes a de-facto standard. +To achieve this, non-free programs must be allowed to use the library. A more +frequent case is that a free library does the same job as widely used non-free +libraries. In this case, there is little to gain by limiting the free library +to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs +enables a greater number of people to use a large body of free software. For +example, permission to use the GNU C Library in non-free programs enables +many more people to use the whole GNU operating system, as well as its variant, +the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a modified +version of the Library. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, whereas the latter must be combined with the library in +order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program +which contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Lesser General +Public License (also called "this License"). Each licensee is addressed as +"you". + +A "library" means a collection of software functions and/or data prepared +so as to be conveniently linked with application programs (which use some +of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means either +the Library or any derivative work under copyright law: that is to say, a +work containing the Library or a portion of it, either verbatim or with modifications +and/or translated straightforwardly into another language. (Hereinafter, translation +is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications +to it. For a library, complete source code means all the source code for all +modules it contains, plus any associated interface definition files, plus +the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and disclaimer +of warranty; keep intact all the notices that refer to this License and to +the absence of any warranty; and distribute a copy of this License along with +the Library. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all +of these conditions: + + a) The modified work must itself be a software library. + +b) You must cause the files modified to carry prominent notices stating that +you changed the files and the date of any change. + +c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + +d) If a facility in the modified Library refers to a function or a table of +data to be supplied by an application program that uses the facility, other +than as an argument passed when the facility is invoked, then you must make +a good faith effort to ensure that, in the event an application does not supply +such function or table, the facility still operates, and performs whatever +part of its purpose remains meaningful. + +(For example, a function in a library to compute square roots has a purpose +that is entirely well-defined independent of the application. Therefore, Subsection +2d requires that any application-supplied function or table used by this function +must be optional: if the application does not supply it, the square root function +must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Library, the distribution of the whole must be +on the terms of this License, whose permissions for other licensees extend +to the entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works based +on the Library. + +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage +or distribution medium does not bring the other work under the scope of this +License. + +3. You may opt to apply the terms of the ordinary GNU General Public License +instead of this License to a given copy of the Library. To do this, you must +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. +(If a newer version than version 2 of the ordinary GNU General Public License +has appeared, then you can specify that version instead if you wish.) Do not +make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you accompany it with the complete corresponding +machine-readable source code, which must be distributed under the terms of +Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated +place, then offering equivalent access to copy the source code from the same +place satisfies the requirement to distribute the source code, even though +third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but +is designed to work with the Library by being compiled or linked with it, +is called a "work that uses the Library". Such a work, in isolation, is not +a derivative work of the Library, and therefore falls outside the scope of +this License. + +However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable +is therefore covered by this License. Section 6 states terms for distribution +of such executables. + +When a "work that uses the Library" uses material from a header file that +is part of the Library, the object code for the work may be a derivative work +of the Library even though the source code is not. Whether this is true is +especially significant if the work can be linked without the Library, or if +the work is itself a library. The threshold for this to be true is not precisely +defined by law. + +If such an object file uses only numerical parameters, data structure layouts +and accessors, and small macros and small inline functions (ten lines or less +in length), then the use of the object file is unrestricted, regardless of +whether it is legally a derivative work. (Executables containing this object +code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute +the object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work +that uses the Library" with the Library to produce a work containing portions +of the Library, and distribute that work under terms of your choice, provided +that the terms permit modification of the work for the customer's own use +and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library +is used in it and that the Library and its use are covered by this License. +You must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + +a) Accompany the work with the complete corresponding machine-readable source +code for the Library including whatever changes were used in the work (which +must be distributed under Sections 1 and 2 above); and, if the work is an +executable linked with the Library, with the complete machine-readable "work +that uses the Library", as object code and/or source code, so that the user +can modify the Library and then relink to produce a modified executable containing +the modified Library. (It is understood that the user who changes the contents +of definitions files in the Library will not necessarily be able to recompile +the application to use the modified definitions.) + +b) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (1) uses at run time a copy of the library +already present on the user's computer system, rather than copying library +functions into the executable, and (2) will operate properly with a modified +version of the library, if the user installs one, as long as the modified +version is interface-compatible with the version that the work was made with. + +c) Accompany the work with a written offer, valid for at least three years, +to give the same user the materials specified in Subsection 6a, above, for +a charge no more than the cost of performing this distribution. + +d) If distribution of the work is made by offering access to copy from a designated +place, offer equivalent access to copy the above specified materials from +the same place. + +e) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must +include any data and utility programs needed for reproducing the executable +from it. However, as a special exception, the materials to be distributed +need not include anything that is normally distributed (in either source or +binary form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component itself +accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating system. +Such a contradiction means you cannot use both them and the Library together +in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side +in a single library together with other library facilities not covered by +this License, and distribute such a combined library, provided that the separate +distribution of the work based on the Library and of the other library facilities +is otherwise permitted, and provided that you do these two things: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities. This must be distributed +under the terms of the Sections above. + +b) Give prominent notice with the combined library of the fact that part of +it is a work based on the Library, and explaining where to find the accompanying +uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library +except as expressly provided under this License. Any attempt otherwise to +copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not +have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you +do not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this License +to do so, and all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), +the recipient automatically receives a license from the original licensor +to copy, distribute, link with or modify the Library subject to these terms +and conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement +or for any other reason (not limited to patent issues), conditions are imposed +on you (whether by court order, agreement or otherwise) that contradict the +conditions of this License, they do not excuse you from the conditions of +this License. If you cannot distribute so as to satisfy simultaneously your +obligations under this License and any other pertinent obligations, then as +a consequence you may not distribute the Library at all. For example, if a +patent license would not permit royalty-free redistribution of the Library +by all those who receive copies directly or indirectly through you, then the +only way you could satisfy both it and this License would be to refrain entirely +from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system which is implemented by public license practices. +Many people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose +that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Library under this License may add an explicit geographical +distribution limitation excluding those countries, so that distribution is +permitted only in or among countries not thus excluded. In such case, this +License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of +the Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Library does not specify a license version number, you may choose any version +ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make exceptions +for this. Our decision will be guided by the two goals of preserving the free +status of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE +OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE +OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES +OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH +HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest possible +use to the public, we recommend making it free software that everyone can +redistribute and change. You can do so by permitting redistribution under +these terms (or, alternatively, under the terms of the ordinary General Public +License). + +To apply these terms, attach the following notices to the library. It is safest +to attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the "copyright" +line and a pointer to where the full notice is found. + +< one line to give the library's name and an idea of what it does. > + +Copyright (C) < year > < name of author > + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 2.1 of the License, or (at your option) +any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. + +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 51 +Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information +on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the library, if necessary. Here +is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in + +the library `Frob' (a library for tweaking knobs) written + +by James Random Hacker. + +< signature of Ty Coon > , 1 April 1990 + +Ty Coon, President of Vice + +That's all there is to it! diff --git a/LICENSES/LGPL-3.0-or-later.txt b/LICENSES/LGPL-3.0-or-later.txt new file mode 100644 index 000000000..bd405afbe --- /dev/null +++ b/LICENSES/LGPL-3.0-or-later.txt @@ -0,0 +1,163 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms +and conditions of version 3 of the GNU General Public License, supplemented +by the additional permissions listed below. + + 0. Additional Definitions. + + + +As used herein, "this License" refers to version 3 of the GNU Lesser General +Public License, and the "GNU GPL" refers to version 3 of the GNU General Public +License. + + + +"The Library" refers to a covered work governed by this License, other than +an Application or a Combined Work as defined below. + + + +An "Application" is any work that makes use of an interface provided by the +Library, but which is not otherwise based on the Library. Defining a subclass +of a class defined by the Library is deemed a mode of using an interface provided +by the Library. + + + +A "Combined Work" is a work produced by combining or linking an Application +with the Library. The particular version of the Library with which the Combined +Work was made is also called the "Linked Version". + + + +The "Minimal Corresponding Source" for a Combined Work means the Corresponding +Source for the Combined Work, excluding any source code for portions of the +Combined Work that, considered in isolation, are based on the Application, +and not on the Linked Version. + + + +The "Corresponding Application Code" for a Combined Work means the object +code and/or source code for the Application, including any data and utility +programs needed for reproducing the Combined Work from the Application, but +excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License without +being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a facility +refers to a function or data to be supplied by an Application that uses the +facility (other than as an argument passed when the facility is invoked), +then you may convey a copy of the modified version: + +a) under this License, provided that you make a good faith effort to ensure +that, in the event an Application does not supply the function or data, the +facility still operates, and performs whatever part of its purpose remains +meaningful, or + +b) under the GNU GPL, with none of the additional permissions of this License +applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a header +file that is part of the Library. You may convey such object code under terms +of your choice, provided that, if the incorporated material is not limited +to numerical parameters, data structure layouts and accessors, or small macros, +inline functions and templates (ten or fewer lines in length), you do both +of the following: + +a) Give prominent notice with each copy of the object code that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the object code with a copy of the GNU GPL and this license document. + + 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken together, +effectively do not restrict modification of the portions of the Library contained +in the Combined Work and reverse engineering for debugging such modifications, +if you also do each of the following: + +a) Give prominent notice with each copy of the Combined Work that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the Combined Work with a copy of the GNU GPL and this license +document. + +c) For a Combined Work that displays copyright notices during execution, include +the copyright notice for the Library among these notices, as well as a reference +directing the user to the copies of the GNU GPL and this license document. + + d) Do one of the following: + +0) Convey the Minimal Corresponding Source under the terms of this License, +and the Corresponding Application Code in a form suitable for, and under terms +that permit, the user to recombine or relink the Application with a modified +version of the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + +1) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (a) uses at run time a copy of the Library +already present on the user's computer system, and (b) will operate properly +with a modified version of the Library that is interface-compatible with the +Linked Version. + +e) Provide Installation Information, but only if you would otherwise be required +to provide such information under section 6 of the GNU GPL, and only to the +extent that such information is necessary to install and execute a modified +version of the Combined Work produced by recombining or relinking the Application +with a modified version of the Linked Version. (If you use option 4d0, the +Installation Information must accompany the Minimal Corresponding Source and +Corresponding Application Code. If you use option 4d1, you must provide the +Installation Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) + + 5. Combined Libraries. + +You may place library facilities that are a work based on the Library side +by side in a single library together with other library facilities that are +not Applications and are not covered by this License, and convey such a combined +library under terms of your choice, if you do both of the following: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities, conveyed under the +terms of this License. + +b) Give prominent notice with the combined library that part of it is a work +based on the Library, and explaining where to find the accompanying uncombined +form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of the +GNU Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you +received it specifies that a certain numbered version of the GNU Lesser General +Public License "or any later version" applies to it, you have the option of +following the terms and conditions either of that published version or of +any later version published by the Free Software Foundation. If the Library +as you received it does not specify a version number of the GNU Lesser General +Public License, you may choose any version of the GNU Lesser General Public +License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether +future versions of the GNU Lesser General Public License shall apply, that +proxy's public statement of acceptance of any version is permanent authorization +for you to choose that version for the Library. diff --git a/LICENSES/LGPLv2.1-Presentation b/LICENSES/LGPLv2.1-Presentation deleted file mode 100644 index 1bb6461eb..000000000 --- a/LICENSES/LGPLv2.1-Presentation +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QML Presentation System. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QML Presentation System. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - diff --git a/LICENSES/LGPLv2.1-Presentation-Exception b/LICENSES/LGPLv2.1-Presentation-Exception deleted file mode 100644 index 7e2e30ff9..000000000 --- a/LICENSES/LGPLv2.1-Presentation-Exception +++ /dev/null @@ -1,22 +0,0 @@ -Digia Qt LGPL Exception version 1.1 - -As an additional permission to the GNU Lesser General Public License version -2.1, the object code form of a "work that uses the Library" may incorporate -material from a header file that is part of the Library. You may distribute -such object code under terms of your choice, provided that: - (i) the header files of the Library have not been modified; and - (ii) the incorporated material is limited to numerical parameters, data - structure layouts, accessors, macros, inline functions and - templates; and - (iii) you comply with the terms of Section 6 of the GNU Lesser General - Public License version 2.1. - -Moreover, you may apply this exception to a modified version of the Library, -provided that such modification does not involve copying material from the -Library into the modified Library's header files unless such material is -limited to (i) numerical parameters; (ii) data structure layouts; -(iii) accessors; and (iv) small macros, templates and inline functions of -five lines or less in length. - -Furthermore, you are not required to apply this additional permission to a -modified version of the Library. diff --git a/LICENSES/LGPLv3-Breeze b/LICENSES/LGPLv3-Breeze deleted file mode 100644 index 63d73657c..000000000 --- a/LICENSES/LGPLv3-Breeze +++ /dev/null @@ -1,209 +0,0 @@ -The Breeze Icon Theme in icons/ - - Copyright (C) 2014 Uri Herrera and others - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library. If not, see . - -Clarification: - - The GNU Lesser General Public License or LGPL is written for - software libraries in the first place. We expressly want the LGPL to - be valid for this artwork library too. - - KDE Breeze theme icons is a special kind of software library, it is an - artwork library, it's elements can be used in a Graphical User Interface, or - GUI. - - Source code, for this library means: - - where they exist, SVG; - - otherwise, if applicable, the multi-layered formats xcf or psd, or - otherwise png. - - The LGPL in some sections obliges you to make the files carry - notices. With images this is in some cases impossible or hardly useful. - - With this library a notice is placed at a prominent place in the directory - containing the elements. You may follow this practice. - - The exception in section 5 of the GNU Lesser General Public License covers - the use of elements of this art library in a GUI. - - https://vdesign.kde.org/ - ------ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/LICENSES/MIT-QtWaitingSpinner b/LICENSES/MIT-QtWaitingSpinner deleted file mode 100644 index c85c97aeb..000000000 --- a/LICENSES/MIT-QtWaitingSpinner +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Original Work Copyright (c) 2012-2015 Alexander Turkin -Modified 2014 by William Hallatt - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 000000000..204b93da4 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,19 @@ +MIT License Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 7b12532e5..570adf575 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,69 @@ -### Calamares: Distribution-Independent Installer Framework + + +# Calamares: Distribution-Independent Installer Framework --------- +[![Current issue](https://img.shields.io/badge/issue-in_progress-FE9B48)](https://github.com/calamares/calamares/labels/hacking%3A%20in-progress) [![GitHub release](https://img.shields.io/github/release/calamares/calamares.svg)](https://github.com/calamares/calamares/releases) -[![Travis Build Status](https://travis-ci.org/calamares/calamares.svg?branch=master)](https://travis-ci.org/calamares/calamares) -[![Coverity Scan Build Status](https://scan.coverity.com/projects/5389/badge.svg)](https://scan.coverity.com/projects/5389) -[![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/master/LICENSE) +[![GitHub Build Status](https://img.shields.io/github/workflow/status/calamares/calamares/ci?label=GH%20build)](https://github.com/calamares/calamares/actions?query=workflow%3Aci) +[![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/calamares/LICENSES/GPL-3.0-or-later.txt) -| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](https://github.com/calamares/calamares/wiki/Develop-Guide) | Freenode (IRC): #calamares | [Wiki](https://github.com/calamares/calamares/wiki) | -|:-----------------------------------------:|:----------------------:|:-----------------------:|:--------------------------:|:--------------------------:| -### Dependencies +| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [Matrix: #calamares:kde.org](https://webchat.kde.org/#/room/%23calamares:kde.org) | [IRC: Libera.Chat #calamares](https://kiwiirc.com/client/irc.libera.chat/#calamares) | [Wiki](https://github.com/calamares/calamares/wiki) | +|:--:|:--:|:--:|:--:|:--:|:--:| -Main: -* Compiler with C++14 support: GCC >= 5 or Clang >= 3.5.1 -* CMake >= 3.3 -* Qt >= 5.9 -* yaml-cpp >= 0.5.1 -* Python >= 3.3 (required for some modules) -* Boost.Python >= 1.55.0 (required for some modules) -* KDE extra-cmake-modules >= 5.18 (recommended; required for some modules; - required for some tests) -* KDE Frameworks KCoreAddons (>= 5.58 recommended) -* PythonQt (optional, deprecated) -Modules: -* Individual modules may have their own requirements; - these are listed in CMake output. Particular requirements (not complete): -* *fsresizer* KPMCore >= 3.3 -* *partition* KPMCore >= 3.3 -* *users* LibPWQuality (optional) +> Calamares is a distribution-independent system installer, with an advanced partitioning +> feature for both manual and automated partitioning operations. Calamares is designed to +> be customizable by distribution maintainers without need for cumbersome patching, +> thanks to third party branding and external modules support. -### Building +## Target Audience -See [wiki](https://github.com/calamares/calamares/wiki) for up to date -[building](https://github.com/calamares/calamares/wiki/Develop-Guide) -and [deployment](https://github.com/calamares/calamares/wiki/Deploy-Guide) -instructions. +Calamares is a Linux installer; users who install Linux on a computer will hopefully +use it just **once**, to install their Linux distribution. Calamares is not +a "ready to use" application: distributions apply a huge amount of customisation +and configuration to Calamares, and the target audience for this repository +is those distributions, and the people who make those Linux distro's. + +Calamares has some [generic user documentation](https://calamares.io/docs/users-guide/) +for end-users, but most of what we have is for distro developers. + +## Getting Calamares + +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++17, CMake-built application. +The dependencies are explained in [CONTRIBUTING.md](CONTRIBUTING.md). + +## Contributing to Calamares + +Calamares welcomes PRs. New issues are welcome, too. +There are both the Calamares **core** repository (this one), +and an **extensions** repository ([Calamares extensions](https://github.com/calamares/calamares-extensions)). + +Contributions to code, modules, documentation, the wiki and the website are all welcome. +There is more information in the [CONTRIBUTING.md](CONTRIBUTING.md) file. + +## Join the Conversation + +GitHub Issues are **one** place for discussing Calamares if there are concrete +problems or a new feature to discuss. + +Regular Calamares development chit-chat happens in a [Matrix](https://matrix.org/) +room, `#calamares:kde.org`. The conversation is bridged with IRC +on [Libera.Chat](https://libera.chat/). +Responsiveness is best during the day +in Europe, but feel free to idle. If you use IRC, **DO NOT** ask-and-leave. Keep +that chat window open because it can easily take a few hours for +someone to notice a message. +Matrix is persistent, and we'll see your message eventually. + +* [![Join us on Matrix](https://img.shields.io/badge/Matrix-%23calamares:kde.org-blue)](https://webchat.kde.org/#/room/%23calamares:kde.org) (needs a Matrix account) +* [![Chat on IRC](https://img.shields.io/badge/IRC-Libera.Chat%20%23calamares-green)](https://kiwiirc.com/client/irc.libera.chat/#calamares) (IRC supports guest accounts) diff --git a/calamares.desktop b/calamares.desktop index 6a5f91db5..9a1416e16 100644 --- a/calamares.desktop +++ b/calamares.desktop @@ -5,7 +5,7 @@ Name=Install System GenericName=System Installer Keywords=calamares;system;installer; TryExec=calamares -Exec=pkexec /usr/bin/calamares +Exec=sh -c "pkexec calamares" Comment=Calamares — System Installer Icon=calamares Terminal=false @@ -21,18 +21,38 @@ Name[as]=চিছটেম ইনস্তল কৰক Icon[as]=কেলামাৰেচ GenericName[as]=চিছটেম ইনস্তলাৰ Comment[as]=কেলামাৰেচ — চিছটেম​ ইনস্তলাৰ +Name[ast]=Instalar el sistema +Icon[ast]=calamares +GenericName[ast]=Instalador del sistema +Comment[ast]=Calamares — Instalador del sistema +Name[az]=Sistemi Quraşdırmaq +Icon[az]=calamares +GenericName[az]=Sistem Quraşdırıcısı +Comment[az]=Calamares Sistem Quraşdırıcısı +Name[az_AZ]=Sistemi quraşdırmaq +Icon[az_AZ]=calamares +GenericName[az_AZ]=Sistem quraşdırcısı +Comment[az_AZ]=Calamares — Sistem Quraşdırıcısı Name[be]=Усталяваць сістэму Icon[be]=calamares GenericName[be]=Усталёўшчык сістэмы Comment[be]=Calamares — усталёўшчык сістэмы Name[bg]=Инсталирай системата Icon[bg]=calamares -GenericName[bg]=Системен Инсталатор -Comment[bg]=Calamares — Системен Инсталатор +GenericName[bg]=Системен инсталатор +Comment[bg]=„Calamares“ – Системен инсталатор +Name[bn]=সিস্টেম ইনস্টল করুন +Icon[bn]=ক্যালামারেস +GenericName[bn]=সিস্টেম ইনস্টলার +Comment[bn]=ক্যালামারেস - সিস্টেম ইনস্টলার Name[ca]=Instal·la el sistema Icon[ca]=calamares GenericName[ca]=Instal·lador de sistema Comment[ca]=Calamares — Instal·lador de sistema +Name[cs_CZ]=Nainstalovat systém +Icon[cs_CZ]=calamares +GenericName[cs_CZ]=Instalátor systému +Comment[cs_CZ]=Calamares – instalátor operačních systémů Name[da]=Installér system Icon[da]=calamares GenericName[da]=Systeminstallationsprogram @@ -49,10 +69,19 @@ Name[en_GB]=Install System Icon[en_GB]=calamares GenericName[en_GB]=System Installer Comment[en_GB]=Calamares — System Installer -Name[es]=Instalar Sistema +Name[eo]=Instali Sistemo +Icon[eo]=calamares +GenericName[eo]=Sistema Instalilo +Comment[eo]=Calamares — Sistema Instalilo +Name[es]=Instalar el sistema Icon[es]=calamares -GenericName[es]=Instalador del Sistema -Comment[es]=Calamares — Instalador del Sistema +GenericName[es]=Instalador del sistema +Comment[es]=Calamares — Instalador del sistema +Name[es_MX]=Instalar el Sistema +Icon[es_MX]=calamares +GenericName[es_MX]=Instalador del sistema +Comment[es_MX]=Calamares - Instalador del sistema +Name[es_PR]=Instalar el sistema Name[et]=Paigalda süsteem Icon[et]=calamares GenericName[et]=Süsteemipaigaldaja @@ -61,11 +90,22 @@ Name[eu]=Sistema instalatu Icon[eu]=calamares GenericName[eu]=Sistema instalatzailea Comment[eu]=Calamares - sistema instalatzailea -Name[es_PR]=Instalar el sistema +Name[fa]=نصب سامانه +Icon[fa]=کالامارس +GenericName[fa]=نصب‌کننده سامانه +Comment[fa]=کالامارس — نصب‌کننده سامانه +Name[fi_FI]=Asenna järjestelmä +Icon[fi_FI]=calamares +GenericName[fi_FI]=Järjestelmän asennusohjelma +Comment[fi_FI]=Calamares — Järjestelmän asentaja Name[fr]=Installer le système Icon[fr]=calamares GenericName[fr]=Installateur système Comment[fr]=Calamares - Installateur système +Name[fur]=Instale il sisteme +Icon[fur]=calamares +GenericName[fur]=Program di instalazion dal sisteme +Comment[fur]=Calamares — Program di instalazion dal sisteme Name[gl]=Instalación do Sistema Icon[gl]=calamares GenericName[gl]=Instalador de sistemas @@ -90,14 +130,18 @@ Name[id]=Instal Sistem Icon[id]=calamares GenericName[id]=Pemasang Comment[id]=Calamares — Pemasang Sistem +Name[ie]=Installar li sistema +Icon[ie]=calamares +GenericName[ie]=Installator del sistema +Comment[ie]=Calamares — Installator del sistema Name[is]=Setja upp kerfið Icon[is]=calamares GenericName[is]=Kerfis uppsetning Comment[is]=Calamares — Kerfis uppsetning -Name[cs_CZ]=Nainstalovat systém -Icon[cs_CZ]=calamares -GenericName[cs_CZ]=Instalátor systému -Comment[cs_CZ]=Calamares – instalátor operačních systémů +Name[it_IT]=Installa il sistema +Icon[it_IT]=calamares +GenericName[it_IT]=Programma d'installazione del sistema +Comment[it_IT]=Calamares — Programma d'installazione del sistema Name[ja]=システムをインストール Icon[ja]=calamares GenericName[ja]=システムインストーラー @@ -110,10 +154,6 @@ Name[lt]=Įdiegti Sistemą Icon[lt]=calamares GenericName[lt]=Sistemos diegimas į kompiuterį Comment[lt]=Calamares — Sistemos diegimo programa -Name[it_IT]=Installa il sistema -Icon[it_IT]=calamares -GenericName[it_IT]=Programma d'installazione del sistema -Comment[it_IT]=Calamares — Programma d'installazione del sistema Name[mk]=Инсталирај го системот Icon[mk]=calamares GenericName[mk]=Системен Инсталер @@ -126,6 +166,10 @@ Name[nb]=Installer System Icon[nb]=calamares GenericName[nb]=Systeminstallatør Comment[nb]=Calamares-systeminstallatør +Name[ne_NP]= सिस्टम इन्स्टल गर्नुहोस् +Icon[ne_NP]=Calamares +GenericName[ne_NP]=सिस्टम इन्स्टलर +Comment[ne_NP]=Calamares - सिस्टम इन्स्टलर Name[nl]=Installeer systeem Icon[nl]=calamares GenericName[nl]=Installatieprogramma @@ -138,6 +182,10 @@ Name[pt_BR]=Sistema de Instalação Icon[pt_BR]=calamares GenericName[pt_BR]=Instalador de Sistema Comment[pt_BR]=Calamares — Instalador de Sistema +Name[pt_PT]=Instalar Sistema +Icon[pt_PT]=calamares +GenericName[pt_PT]=Instalador de Sistema +Comment[pt_PT]=Instalador de Sistema - Calamares Name[ro]=Instalează sistemul Icon[ro]=calamares GenericName[ro]=Instalator de sistem @@ -146,6 +194,10 @@ Name[ru]=Установить систему Icon[ru]=calamares GenericName[ru]=Установщик системы Comment[ru]=Calamares - Установщик системы +Name[si]=පද්ධතිය ස්ථාපනය කරන්න +Icon[si]=කැලමරේස් +GenericName[si]=පද්ධති ස්ථාපකය +Comment[si]=Calamares - පද්ධති ස්ථාපකය Name[sk]=Inštalovať systém Icon[sk]=calamares GenericName[sk]=Inštalátor systému @@ -155,24 +207,32 @@ Name[sq]=Instalo Sistemin Icon[sq]=calamares GenericName[sq]=Instalues Sistemi Comment[sq]=Calamares — Instalues Sistemi -Name[fi_FI]=Asenna Järjestelmä -Icon[fi_FI]=calamares -GenericName[fi_FI]=Järjestelmän Asennusohjelma -Comment[fi_FI]=Calamares — Järjestelmän Asentaja -Name[sr@latin]=Instaliraj sistem Name[sr]=Инсталирај систем Icon[sr]=calamares GenericName[sr]=Инсталатер система Comment[sr]=Каламарес — инсталатер система +Name[sr@latin]=Instaliraj sistem Name[sv]=Installera system Icon[sv]=calamares GenericName[sv]=Systeminstallerare Comment[sv]=Calamares — Systeminstallerare +Name[tg]=Насбкунии низом +Icon[tg]=calamares +GenericName[tg]=Насбкунандаи низомӣ +Comment[tg]=Calamares — Насбкунандаи низомӣ Name[th]=ติดตั้งระบบ +Name[tr_TR]=Sistemi Yükle +Icon[tr_TR]=calamares +GenericName[tr_TR]=Sistem Yükleyici +Comment[tr_TR]=Calamares — Sistem Yükleyici 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]=系统安装程序 @@ -181,27 +241,3 @@ Name[zh_TW]=安裝系統 Icon[zh_TW]=calamares GenericName[zh_TW]=系統安裝程式 Comment[zh_TW]=Calamares ── 系統安裝程式 -Name[ast]=Instalar el sistema -Icon[ast]=calamares -GenericName[ast]=Instalador del sistema -Comment[ast]=Calamares — Instalador del sistema -Name[eo]=Instali Sistemo -Icon[eo]=calamares -GenericName[eo]=Sistema Instalilo -Comment[eo]=Calamares — Sistema Instalilo -Name[ne_NP]= सिस्टम इन्स्टल गर्नुहोस् -Icon[ne_NP]=Calamares -GenericName[ne_NP]=सिस्टम इन्स्टलर -Comment[ne_NP]=Calamares - सिस्टम इन्स्टलर -Name[es_MX]=Instalar el Sistema -Icon[es_MX]=calamares -GenericName[es_MX]=Instalador del sistema -Comment[es_MX]=Calamares - Instalador del sistema -Name[pt_PT]=Instalar Sistema -Icon[pt_PT]=calamares -GenericName[pt_PT]=Instalador de Sistema -Comment[pt_PT]=Calamares - Instalador de Sistema -Name[tr_TR]=Sistemi Yükle -Icon[tr_TR]=calamares -GenericName[tr_TR]=Sistem Yükleyici -Comment[tr_TR]=Calamares — Sistem Yükleyici diff --git a/calamares.desktop.in b/calamares.desktop.in index 9bfbf8fd9..ed1d4def8 100644 --- a/calamares.desktop.in +++ b/calamares.desktop.in @@ -5,7 +5,7 @@ Name=Install System GenericName=System Installer Keywords=calamares;system;installer; TryExec=calamares -Exec=pkexec /usr/bin/calamares +Exec=sh -c "pkexec calamares" Comment=Calamares — System Installer Icon=calamares Terminal=false diff --git a/ci/AppImage.md b/ci/AppImage.md deleted file mode 100644 index 7fa51a8bc..000000000 --- a/ci/AppImage.md +++ /dev/null @@ -1,45 +0,0 @@ -# AppImage building for Calamares - -> It is possible to build Calamares as an AppImage (perhaps other -> containerized formats as well). This might make sense for -> OEM phase-1 deployments in environments where Calamares is -> not using the native toolkit. - -## AppImage tools - -You will need - - [`linuxdeploy-x86_64.AppImage`](https://github.com/linuxdeploy/linuxdeploy/releases) - - [`linuxdeploy-plugin-qt-x86_64.AppImage`](https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases) - - [`linuxdeploy-plugin-conda.sh`](https://github.com/linuxdeploy/linuxdeploy-plugin-conda) - -These tools should run -- they are bundled as AppImages after all -- on -any modern Linux system. The [AppImage packaging documentation](https://docs.appimage.org/packaging-guide/) -explains how the whole tooling works. - -If the tools are not present, the build script (see below) will download them, -but you should save them for later. - -## AppImage build - -From the **source** directory, run `ci/AppImage.sh`: - - Use `--tools-dir` to copy the tools from a local cache rather than - downloading them again. - - Run it with `--cmake-args` for special CMake handling. - - Use `--skip-build` to avoid rebuilding Calamares all the time. - - Use `--config-dir` to copy in Calamares configuration files (e.g. - *settings.conf* and the module configuration files) from a given - directory. - -The build process will: - - copy (or download) the AppImage tools into a fresh build directory - - configure and build Calamares with suitable settings - - modifies the standard `.desktop` file to be AppImage-compatible - - builds the image with the AppImage tools - -## AppImage caveats - -The resulting AppImage, `Calamares-x86_64.AppImage`, can be run as if it is -a regular Calamares executable. For internal reasons it always passes the -`-X` flag; any other command-line flags are passed in unchanged. Internally, -`XDG_*_DIRS` are used to get Calamares to find the resources inside the AppImage -rather than in the host system. diff --git a/ci/AppImage.sh b/ci/AppImage.sh index 1bb067b1e..116023c53 100755 --- a/ci/AppImage.sh +++ b/ci/AppImage.sh @@ -1,9 +1,8 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # -# Copyright 2019 Adriaan de Groot -# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: diff --git a/ci/HACKING.md b/ci/HACKING.md deleted file mode 100644 index f1c8b750b..000000000 --- a/ci/HACKING.md +++ /dev/null @@ -1 +0,0 @@ -This has moved [to the wiki](https://github.com/calamares/calamares/wiki/Develop-Code). diff --git a/ci/RELEASE.md b/ci/RELEASE.md index 524a67a65..28e97e4a6 100644 --- a/ci/RELEASE.md +++ b/ci/RELEASE.md @@ -1,21 +1,41 @@ # Calamares Release Process + + > Calamares releases are now rolling when-they-are-ready releases. -> Releases are made from *master* and tagged there. When, in future, +> Releases are made from *calamares* and tagged there. When, in future, > LTS releases resume, these steps may be edited again. > > Most things are automated through the release script [RELEASE.sh](RELEASE.sh) -## (0) A week in advance +## (0) During a release cycle + +* Fetch latest translations from Transifex. We only push / pull translations + from *calamares* branch, so longer-lived branches (e.g. 3.1.x) don't get + translation updates. This is to keep the translation workflow simple. + The script automatically commits changes to the translations. It's ok + to do this during a release cycle. Run `sh ci/txpull.sh` + to fetch translations and commit the changes in one go. +* Push the strings to Transifex. From a checkout, run `ci/txpush.sh` +* Update the list of enabled translation languages in `CMakeLists.txt`. + Check the [translation site][transifex] for the list of languages with + fairly complete translations, or use `ci/txstats.py --edit` for an automated + suggestion. If there are changes, commit them. + +## (1) Preparation + +* Double-check the *CALAMARES_VERSION* value at the top of `CMakeLists.txt`. +* Set *CALAMARES_RELEASE_MODE* to `ON` in `CMakeLists.txt`. +* Edit `CHANGES-*` and set the date of the release. Pick the right + file for the release-stream. +* Commit both. This is usually done with commit-message + *Changes: pre-release housekeeping*. + +## (2) Release Preparation -* Run [Coverity scan][coverity], fix what's relevant. The Coverity scan runs - automatically once a week on master. The badge is displayed on the - project front page and in the wiki. -* Build with clang -Weverything, fix what's relevant. - ``` - rm -rf build ; mkdir build ; cd build - CC=clang CXX=clang++ cmake .. && make - ``` * Make sure all tests pass. ``` make @@ -25,42 +45,16 @@ an additional environment variable to be set for some tests, which will destroy an attached disk. This is not always desirable. There are some sample config-files that are empty and which fail the config-tests. -* Notify [translators][transifex]. In the dashboard there is an *Announcements* - link that you can use to send a translation announcement. Note that regular - use of `txpush.sh` will notify translators as well of any changes. - -[coverity]: https://scan.coverity.com/projects/calamares-calamares?tab=overview -[transifex]: https://www.transifex.com/calamares/calamares/dashboard/ - - -## (1) Preparation - -* Pull latest translations from Transifex. We only push / pull translations - from master, so longer-lived branches (e.g. 3.1.x) don't get translation - updates. This is to keep the translation workflow simple. The script - automatically commits changes to the translations. - ``` - sh ci/txpull.sh - ``` -* Update the list of enabled translation languages in `CMakeLists.txt`. - Check the [translation site][transifex] for the list of languages with - fairly complete translations, or use `ci/txstats.py` for an automated - suggestion. If there are changes, commit them. -* Push the changes. -* Drop the RC variable to 0 in `CMakeLists.txt`, *CALAMARES_VERSION_RC*. -* Check `README.md` and the - [Coding Guide](https://github.com/calamares/calamares/wiki/Develop-Code), - make sure it's all still - relevant. Run `ci/calamaresstyle` to check the C++ code style. - Run pycodestyle on recently-modified Python modules, fix what makes sense. -* Check defaults in `settings.conf` and other configuration files. -* Edit `CHANGES` and set the date of the release. -* Commit both. This is usually done with commit-message - *Changes: pre-release housekeeping*. - - -## (2) Release Day - + Note that the release script (see below) also runs the tests and + will bail out if any fail. +* Make sure the translations are up-to-date. There is logic to check + for changes in translations: a movable tag *translations* indicates + when translations were last pushed, and the logic tries to enforce a + week of latency between push-translations and a release, to allow + translators to catch up. Run `ci/txcheck.sh` to confirm this. + Run `ci/txcheck.sh --cleanup` to tidy up afterwards, and possibly pass + `-T` to the release script to skip the translation-age check if you + feel it is warranted. * Run the helper script `ci/RELEASE.sh` or follow steps below. The script checks: - for uncommitted local changes, @@ -73,54 +67,69 @@ On success, it prints out a suitable signature- and SHA256 blurb for use in the release announcement. -### (2.1) Buld and Test +## (3) Release -* Build with gcc. If available, build again with Clang and double-check - any warnings Clang produces. -* Run the tests; `make test` in the build directory should have no - failures (or if there are, know why they are there). +Follow the instructions printed by the release script. -### (2.2) Tag - -* `git tag -s v1.1.0` Make sure the signing key is known in GitHub, so that the - tag is shown as a verified tag. Do not sign -rc tags. - You can use `make show-version` in the build directory to get the right - version number -- this will fail if you didn't follow step (1). - -### (2.3) Tarball - -* Create tarball: `git-archive-all -v calamares-1.1-rc1.tar.gz` or without - the helper script, - ``` - V=calamares-3.1.5 - git archive -o $V.tar.gz --prefix $V/ master - ``` - Double check that the tarball matches the version number. -* Test tarball (e.g. unpack somewhere else and run the tests from step 0). - - -## (3) Housekeeping - -* Generate MD5 and SHA256 checksums. -* Upload tarball. -* Announce on mailing list, notify packagers. -* Write release article. -* Publish tarball. -* Update download page. +* Push the tags. +* Create a new release on GitHub. +* Upload tarball and signature. * Publish release article on `calamares.io`. -* Publicize on social networks. -* Close associated milestone on GitHub if this is the actual release. -* Publish blog post. +* Close associated milestone on GitHub if it's entirely done. +* Update topic on #calamares IRC channel. ## (4) Post-Release -* Bump the version number in `CMakeLists.txt` in the `project()` command. -* Set *CALAMARES_VERSION_RC* back to 1. -* Add a placeholder entry for the next release in `CHANGES` with date - text *not released yet*. +* Bump the version number in `CMakeLists.txt` in *CALAMARES_VERSION*. +* Set *CALAMARES_RELEASE_MODE* back to `OFF`. +* Add a placeholder entry for the next release in `CHANGES-*` with date + text *not released yet*. See the text below, "Placeholder Release". + Add the placeholder to the right file for the release-stream. * Commit and push that, usually with the message *Changes: post-release housekeeping*. +# Related Material + +> This section isn't directly related to any specific release, +> but bears on all releases. + +## GPG Key Maintainence + +Calamares uses GPG Keys for signing the tarballs and some commits +(tags, mostly). Calamares uses the **maintainer's** personal GPG +key for this. This section details some GPG activities that the +maintainer should do with those keys. + +- Signing sub-key. It's convenient to use a signing sub-key specifically + for the signing of Calamares. To do so, add a key to the private key. + It's recommended to use key expiry, and to update signing keys periodically. + - Run `gpg -K` to find the key ID of your personal GPG secret key. + - Run `gpg --edit-key ` to edit that personal GPG key. + - In gpg edit-mode, use `addkey`, then pick a key type that is *sign-only* + (e.g. type 4, *RSA (sign only)*), then pick a keysize (3072 seems ok + as of 2020) and set a key expiry time, (e.g. in 18 months time). + - After generation, the secret key information is printed again, now + including the new signing subkey: + ``` +ssb rsa3072/0xCFDDC96F12B1915C + created: 2020-07-11 expires: 2022-01-02 usage: S +``` +- Update the `RELEASE.sh` script with a new signing sub-key ID when a new + one is generated. Also announce the change of signing sub-key (e.g. on + the Calmares site or as part of a release announcement). + - Send the updated key to keyservers with `gpg --send-keys ` + - Optional: sanitize the keyring for use in development machines. + Export the current subkeys of the primary key and keep **only** those + secret keys around. There is documentation + [here](https://blog.tinned-software.net/create-gnupg-key-with-sub-keys-to-sign-encrypt-authenticate/) + but be careful. + - Export the public key material with `gpg --export --armor `, + possibly also setting an output file. + - Upload that public key to the relevant GitHub profile. + - Upload that public key to the Calamares site. + +## Placeholder Release Notes + ``` # 3.2.XX (unreleased) # @@ -133,3 +142,4 @@ This release contains contributions from (alphabetically by first name): ## Modules ## - No module changes yet ``` + diff --git a/ci/RELEASE.sh b/ci/RELEASE.sh index ed1669ef7..e46ca2cc2 100755 --- a/ci/RELEASE.sh +++ b/ci/RELEASE.sh @@ -1,9 +1,14 @@ #! /bin/sh # +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# ### USAGE # # Release script for Calamares # +# NOTE: this script contains Linuxisms (in particular, expects GNU mktemp(1)) +# # This attempts to perform the different steps of the RELEASE.md # document automatically. It's not tested on other machines or # setups other than [ade]'s development VM. @@ -70,6 +75,12 @@ fi # # BUILDDIR=$(mktemp -d --suffix=-build --tmpdir=.) +KEY_ID="328D742D8807A435" + +# Try to make gpg cache the signing key, so we can leave the process +# to run and sign. +rm -f CMakeLists.txt.gpg +gpg -s -u $KEY_ID CMakeLists.txt ### Build with default compiler # @@ -78,7 +89,7 @@ if test "x$BUILD_DEFAULT" = "xtrue" ; then rm -rf "$BUILDDIR" mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; } ( cd "$BUILDDIR" && cmake .. && make -j4 ) || { echo "Could not perform test-build in $BUILDDIR." ; exit 1 ; } - ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR." ; exit 1 ; } + ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR ." ; exit 1 ; } fi ### Build with clang @@ -95,7 +106,7 @@ if test "x$BUILD_CLANG" = "xtrue" ; then fi if test "x$BUILD_ONLY" = "xtrue" ; then - echo "Builds completed, release stopped. Build remains in $BUILDDIR." + echo "Builds completed, release stopped. Build remains in $BUILDDIR ." exit 1 fi @@ -106,20 +117,19 @@ else # Presumably -B was given; just do the cmake part rm -rf "$BUILDDIR" mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; } - ( cd "$BUILDDIR" && cmake .. ) || { echo "Could not run cmake in $BUILDDIR." ; exit 1 ; } + ( cd "$BUILDDIR" && cmake .. ) || { echo "Could not run cmake in $BUILDDIR ." ; exit 1 ; } fi ### Get version number for this release # # V=$( cd "$BUILDDIR" && make show-version | grep ^CALAMARES_VERSION | sed s/^[A-Z_]*=// ) -test -n "$V" || { echo "Could not obtain version in $BUILDDIR." ; exit 1 ; } +test -n "$V" || { echo "Could not obtain version in $BUILDDIR ." ; exit 1 ; } ### Create signed tag # # This is the signing key ID associated with the GitHub account adriaandegroot, # which is used to create all "verified" tags in the Calamares repo. -KEY_ID="128F00873E05AF1D" git tag -u "$KEY_ID" -m "Release v$V" "v$V" || { echo "Could not sign tag v$V." ; exit 1 ; } ### Create the tarball @@ -139,7 +149,8 @@ TMPDIR=$(mktemp -d --suffix="-calamares-$D") test -d "$TMPDIR" || { echo "Could not create tarball-build directory." ; exit 1 ; } tar xzf "$TAR_FILE" -C "$TMPDIR" || { echo "Could not unpack tarball." ; exit 1 ; } test -d "$TMPDIR/$TAR_V" || { echo "Tarball did not contain source directory." ; exit 1 ; } -( cd "$TMPDIR/$TAR_V" && cmake . && make -j4 && make test ) || { echo "Tarball build failed in $TMPDIR." ; exit 1 ; } +( cd "$TMPDIR/$TAR_V" && cmake . && make -j4 && make test ) || { echo "Tarball build failed in $TMPDIR ." ; exit 1 ; } +gpg -s -u $KEY_ID --detach --armor $TAR_FILE # Sign the tarball ### Cleanup # @@ -152,7 +163,6 @@ rm -rf "$TMPDIR" # From tarball cat < +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause + # Do not create a backup file suffix=none diff --git a/ci/calamaresstyle b/ci/calamaresstyle index ecbd798c5..058468b91 100755 --- a/ci/calamaresstyle +++ b/ci/calamaresstyle @@ -1,7 +1,11 @@ #!/bin/sh # +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Calls astyle with settings matching Calamares coding style -# Requires astyle >= 2.04 and clang-format-7 +# Requires astyle >= 2.04 and clang-format-8 or later # # You can pass in directory names, in which case the files # in that directory (NOT below it) are processed. @@ -11,20 +15,52 @@ LC_ALL=C LC_NUMERIC=C export LANG LC_ALL LC_NUMERIC +BASEDIR=$(dirname $0) +TOPDIR=$( cd $BASEDIR/.. && pwd -P ) +test -d "$BASEDIR" || { echo "! Could not determine base for $0" ; exit 1 ; } +test -d "$TOPDIR" || { echo "! Cound not determine top-level source dir" ; exit 1 ; } +test -f "$TOPDIR/.clang-format" || { echo "! No .clang-format support files in $TOPDIR" ; exit 1 ; } + AS=$( which astyle ) -for _cf in clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format +# Allow specifying CF_VERSIONS outside already +CF_VERSIONS="$CF_VERSIONS clang-format13 clang-format-13 clang-format-13.0.1 clang-format12 clang-format-12 clang-format" +for _cf in $CF_VERSIONS do # Not an error if this particular clang-format isn't found - CF=$( which $_cf || true ) + CF=$( which $_cf 2> /dev/null || true ) test -n "$CF" && break done test -n "$AS" || { echo "! No astyle found in PATH"; exit 1 ; } -test -n "$CF" || { echo "! No clang-format-7 found in PATH"; exit 1 ; } +test -n "$CF" || { echo "! No clang-format ($CF_VERSIONS) found in PATH"; exit 1 ; } test -x "$AS" || { echo "! $AS is not executable."; exit 1 ; } test -x "$CF" || { echo "! $CF is not executable."; exit 1 ; } +### CLANG-FORMAT-WRANGLING +# +# Version 7 and earlier doesn't understand all the options we would like +# Version 12 handles lambdas nicely, so use that. +# Version 13 is also ok. +# Version 14 behaves differently with short-functions-in-class, +# spreading functions out that 13 keeps on one line. To avoid +# ping-pong commits, forbid 14. + +format_version=`"$CF" --version | tr -dc '[^.0-9]' | cut -d . -f 1` +case "$format_version" in + 12|13 ) + : + ;; + * ) + echo "! Clang-format version '$format_version' unsupported, versions 12 or 13 are ok." + exit 1 + ;; +esac + + +### FILE PROCESSING +# +# set -e any_dirs=no @@ -35,8 +71,10 @@ done style_some() { - $AS --options=$(dirname $0)/astylerc --quiet "$@" - $CF -i -style=file "$@" + if test -n "$*" ; then + $AS --options=$BASEDIR/astylerc --quiet "$@" + $CF -i -style=file "$@" + fi } if test "x$any_dirs" = "xyes" ; then diff --git a/ci/configvalidator.py b/ci/configvalidator.py new file mode 100755 index 000000000..efd488fbf --- /dev/null +++ b/ci/configvalidator.py @@ -0,0 +1,136 @@ +#! /usr/bin/env python3 +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +usage = """ +Validates a Calamares config file -- YAML syntax -- against a schema. + +The schema is also written in YAML syntax, but the schema itself +is JSON-schema. This is possible because all JSON is YAML, and most +YAML is JSON. The limited subset of YAML that Calamares uses is +JSON-representable, anyway. + +Usage: + configvalidator.py ... + configvalidator.py -m + configvalidator.py -x + +Exits with value 0 on success, otherwise: + 1 on missing dependencies + 2 on invalid command-line arguments + 3 on missing files + 4 if files have invalid syntax + 5 if files fail to validate +Use -x as only command-line argument to check the imports only. + +Use -m as shorthand for standard paths in src/modules// +""" + +# The schemata originally lived outside the Calamares repository, +# without documented tooling. By putting them in the repository +# with the example files and explicit tooling, there's a better +# chance of them catching problems and acting as documentation. + +dependencies = """ +Dependencies for this tool are: py-yaml and py-jsonschema. + + https://pyyaml.org/ + https://github.com/Julian/jsonschema + +Simple installation is `pip install pyyaml jsonschema` +""" + +ERR_IMPORT, ERR_USAGE, ERR_FILE_NOT_FOUND, ERR_SYNTAX, ERR_INVALID = range(1,6) + +### DEPENDENCIES +# +# +try: + from jsonschema import validate, SchemaError, ValidationError + from jsonschema import draft7_format_checker + from yaml import safe_load, YAMLError +except ImportError as e: + print(e) + print(dependencies) + exit(ERR_IMPORT) + +from os.path import exists +import sys + +### INPUT VALIDATION +# +# +if len(sys.argv) < 3: + # Special-case: called with -x to just test the imports + if len(sys.argv) == 2 and sys.argv[1] == "-x": + exit(0) + print(usage) + exit(ERR_USAGE) + +if len(sys.argv) == 3 and sys.argv[1] == "-m": + module = sys.argv[2] + schema_file_name = f"src/modules/{module}/{module}.schema.yaml" + config_file_names = [ f"src/modules/{module}/{module}.conf" ] +else: + schema_file_name = sys.argv[1] + config_file_names = sys.argv[2:] + +if not exists(schema_file_name): + print(usage) + print("\nSchema file '{}' does not exist.".format(schema_file_name)) + exit(ERR_FILE_NOT_FOUND) +for f in config_file_names: + if not exists(f): + print(usage) + print("\nYAML file '{}' does not exist.".format(f)) + exit(ERR_FILE_NOT_FOUND) + +### FILES SYNTAX CHECK +# +# +with open(schema_file_name, "r") as data: + try: + schema = safe_load(data) + except YAMLError as e: + print("Schema error: {} {}.".format(e.problem, e.problem_mark)) + print("\nSchema file '{}' is invalid YAML.".format(schema_file_name)) + exit(ERR_SYNTAX) + +try: + validate(instance={}, schema=schema) +# While developing the schemata, get full exceptions from schema failure +except SchemaError as e: + print(e) + print("\nSchema file '{}' is invalid JSON-Schema.".format(schema_file_name)) + exit(ERR_INVALID) +except ValidationError: + # Just means that empty isn't valid, but the Schema itself is + pass + +configs = [] +for f in config_file_names: + config = None + with open(f, "r") as data: + try: + config = safe_load(data) + except YAMLError as e: + print("YAML error: {} {}.".format(e.problem, e.problem_mark)) + print("\nYAML file '{}' is invalid.".format(f)) + exit(ERR_SYNTAX) + if config is None: + print("YAML file '{}' is empty.".format(f)) + configs.append(config) + +assert len(configs) == len(config_file_names), "Not all configurations loaded." + +### SCHEMA VALIDATION +# +# +for c, f in zip(configs, config_file_names): + try: + validate(instance=c, schema=schema) + except ValidationError as e: + print(e) + print("\nConfig file '{}' does not validate in schema.".format(f)) + exit(ERR_INVALID) diff --git a/ci/coverity-model.c b/ci/coverity-model.c index b4282397c..1d6345335 100644 --- a/ci/coverity-model.c +++ b/ci/coverity-model.c @@ -3,4 +3,7 @@ Calamares doesn't seem to geenerate any false positives, so the model-file is empty. + + SPDX-FileCopyrightText: 2017 Adriaan de Groot + SPDX-License-Identifier: BSD-2-Clause */ diff --git a/ci/cppcheck.sh b/ci/cppcheck.sh deleted file mode 100755 index e55e97ee4..000000000 --- a/ci/cppcheck.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -cd "$WORKSPACE" -cppcheck --enable=all --inconclusive --xml --xml-version=2 src 2> cppcheck.xml \ No newline at end of file diff --git a/ci/libcalamares/__init__.py b/ci/libcalamares/__init__.py new file mode 100644 index 000000000..1f7a09430 --- /dev/null +++ b/ci/libcalamares/__init__.py @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Stubs for part of the Python API from libcalamares +# (although the **actual** API is presented through +# Boost::Python, not as a bare C-extension) so that +# pylint doesn't complain about libcalamares internals. + +VERSION_SHORT="1.0" diff --git a/ci/libcalamares/globalstorage.py b/ci/libcalamares/globalstorage.py new file mode 100644 index 000000000..d40a28204 --- /dev/null +++ b/ci/libcalamares/globalstorage.py @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Stubs for part of the Python API from libcalamares +# (although the **actual** API is presented through +# Boost::Python, not as a bare C-extension) so that +# pylint doesn't complain about libcalamares internals. + +def count(): return 1 + +def keys(): return [] + +def contains(_): return True + +def value(key): + if key in ("branding",): + return dict() + if key in ("partitions",): + return list() + return "" + +def insert(key, value): pass + +def remove(_): pass diff --git a/ci/libcalamares/job.py b/ci/libcalamares/job.py new file mode 100644 index 000000000..9ea38b878 --- /dev/null +++ b/ci/libcalamares/job.py @@ -0,0 +1,15 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Stubs for part of the Python API from libcalamares +# (although the **actual** API is presented through +# Boost::Python, not as a bare C-extension) so that +# pylint doesn't complain about libcalamares internals. + +configuration = dict() + +def setprogress(_): pass + +def pretty_name(): return "" + +def working_path(): return "" diff --git a/ci/libcalamares/utils.py b/ci/libcalamares/utils.py new file mode 100644 index 000000000..b3676be0f --- /dev/null +++ b/ci/libcalamares/utils.py @@ -0,0 +1,27 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Stubs for part of the Python API from libcalamares +# (although the **actual** API is presented through +# Boost::Python, not as a bare C-extension) so that +# pylint doesn't complain about libcalamares internals. + +def debug(_): pass + +def warning(_): pass + +def error(_): pass + +def gettext_path(): pass + +def gettext_languages(): pass + +def target_env_call(_): return 0 + +def check_target_env_call(_): pass + +def target_env_process_output(cmd, *args): return 0 + +def host_env_process_output(cmd, *args): return 0 + +def mount(device, mountpoint, fstype, options): return 0 diff --git a/ci/travis-config.sh b/ci/travis-config.sh deleted file mode 100644 index 565b3deba..000000000 --- a/ci/travis-config.sh +++ /dev/null @@ -1,13 +0,0 @@ -# Build configuration on Travis. -# -# Defines a CMAKE_ARGS variable for use with cmake -# -# This file is sourced by travis.sh, and exports the variables -# to the environment. -CMAKE_ARGS="\ - -DCMAKE_BUILD_TYPE=Release \ - -DWEBVIEW_FORCE_WEBKIT=1 \ - -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \ - -DWITH_PYTHONQT=OFF" - -export CMAKE_ARGS diff --git a/ci/travis-continuous.sh b/ci/travis-continuous.sh deleted file mode 100755 index aefaca6f8..000000000 --- a/ci/travis-continuous.sh +++ /dev/null @@ -1,55 +0,0 @@ -#! /bin/sh -# -# Travis CI script for use on every-commit: -# - build and install Calamares -# -test -n "$BUILDDIR" || { echo "! \$BUILDDIR not set" ; exit 1 ; } -test -n "$SRCDIR" || { echo "! \$SRCDIR not set" ; exit 1 ; } - -test -d $BUILDDIR || { echo "! $BUILDDIR not a directory" ; exit 1 ; } -test -d $SRCDIR || { echo "! $SRCDIR not a directory" ; exit 1 ; } -test -f $SRCDIR/CMakeLists.txt || { echo "! Missing $SRCDIR/CMakeLists.txt" ; exit 1 ; } - -cd $BUILDDIR || exit 1 - -section() { -echo "###" -echo "### $1" -echo "###" -pwd -P -df -h -} - -section "cmake $CMAKE_ARGS $SRCDIR" -cmake $CMAKE_ARGS $SRCDIR || { echo "! CMake failed" ; exit 1 ; } - -section "make" -make -j2 || { echo "! Make recheck" ; pwd -P ; df -h ; make -j1 VERBOSE=1 ; echo "! Make failed" ; exit 1 ; } - -section "make install" - -install_debugging() { - ls -la $( find "$1" -type f -name '*.so' ) -} - -echo "# Build results" -install_debugging "$BUILDDIR" - -echo "# Install" -DESTDIR=/build/INSTALL_ROOT -mkdir -p "$DESTDIR" - -if make install VERBOSE=1 DESTDIR="$DESTDIR" ; -then - echo "# .. install OK" - result=true -else - echo "# .. install failed" - result=false -fi - - -section "Install results" -install_debugging "$DESTDIR" - -$result || { echo "! Install failed" ; exit 1 ; } # Result of make install, above diff --git a/ci/travis-coverity.sh b/ci/travis-coverity.sh deleted file mode 100755 index 88b6a2ab5..000000000 --- a/ci/travis-coverity.sh +++ /dev/null @@ -1,34 +0,0 @@ -#! /bin/sh -# -# Travis CI script for weekly (cron) use: -# - use the coverity tool to build and and upload results -# -test -n "$COVERITY_SCAN_TOKEN" || { echo "! Missing Coverity token" ; exit 1 ; } -test -n "$BUILDDIR" || { echo "! \$BUILDDIR not set" ; exit 1 ; } -test -n "$SRCDIR" || { echo "! \$SRCDIR not set" ; exit 1 ; } - -test -d $BUILDDIR || { echo "! $BUILDDIR not a directory" ; exit 1 ; } -test -d $SRCDIR || { echo "! $SRCDIR not a directory" ; exit 1 ; } -test -f $SRCDIR/CMakeLists.txt || { echo "! Missing $SRCDIR/CMakeLists.txt" ; exit 1 ; } - -cd $BUILDDIR || exit 1 - -curl -k -o coverity_tool.tar.gz \ - -d "token=$COVERITY_SCAN_TOKEN&project=calamares%2Fcalamares" \ - https://scan.coverity.com/download/cxx/linux64 || exit 1 -mkdir "$BUILDDIR/coveritytool" -tar xvf coverity_tool.tar.gz -C "$BUILDDIR/coveritytool" --strip-components 2 -export PATH="$BUILDDIR/coveritytool/bin:$PATH" - -echo "# cmake -DCMAKE_BUILD_TYPE=Debug $CMAKE_ARGS $SRCDIR" -cmake -DCMAKE_BUILD_TYPE=Debug $CMAKE_ARGS $SRCDIR || exit 1 -cov-build --dir cov-int make -j2 - -tar caf calamares-ci.tar.xz cov-int - -curl -k --form token=$COVERITY_SCAN_TOKEN \ - --form email=groot@kde.org \ - --form file=@calamares-ci.tar.xz \ - --form version="master-`date -u +%Y%m%d`" \ - --form description="master on `date -u`" \ - https://scan.coverity.com/builds?project=calamares%2Fcalamares diff --git a/ci/travis.sh b/ci/travis.sh deleted file mode 100755 index 737da95d4..000000000 --- a/ci/travis.sh +++ /dev/null @@ -1,21 +0,0 @@ -#! /bin/sh -# -# Travis build driver script: -# - the regular CI runs, triggered by commits, run a script that builds -# and installs calamares, and then runs the tests. -# - the cronjob CI runs, triggered weekly, run a script that uses the -# coverity tools to submit a build. This is slightly more resource- -# intensive than the coverity add-on, but works on master. -# -D=`dirname "$0"` -test -d "$D" || { echo "! No directory $D" ; exit 1 ; } -test -x "$D/travis-continuous.sh" || { echo "! Missing -continuous" ; exit 1 ; } -test -x "$D/travis-coverity.sh" || { echo "! Missing -coverity" ; exit 1 ; } - -test -f "$D/travis-config.sh" && . "$D/travis-config.sh" - -if test "$TRAVIS_EVENT_TYPE" = "cron" ; then - exec "$D/travis-coverity.sh" -else - exec "$D/travis-continuous.sh" -fi diff --git a/ci/txcheck.sh b/ci/txcheck.sh old mode 100644 new mode 100755 index 9ce8f0c30..cedae6682 --- a/ci/txcheck.sh +++ b/ci/txcheck.sh @@ -1,10 +1,10 @@ #! /bin/sh ### LICENSE -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# SPDX-License-Identifier: BSD-2-Clause # SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. @@ -29,7 +29,7 @@ ### END USAGE # The files that are translated; should match the contents of .tx/config -TX_FILE_LIST="lang/calamares_en.ts lang/python.pot src/modules/dummypythonqt/lang/dummypythonqt.pot calamares.desktop" +TX_FILE_LIST="lang/calamares_en.ts lang/python.pot calamares.desktop" ### COMMAND ARGUMENTS # @@ -125,7 +125,7 @@ tx_sum() # Remove linenumbers from .ts (XML) and .pot sed -i'' -e '/ === +# === This file is part of Calamares - === # -# SPDX-License-Identifier: BSD-2-Clause -# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. @@ -23,20 +23,15 @@ # ### END USAGE -### INITIAL SETUP +### SANITY CHECKING # -# This stuff needs to be done once; in a real CI environment where it -# runs regularly in a container, the setup needs to be done when -# creating the container. +# The script needs a .tx/config to talk to the Transifex server; +# it also checks that it is run from the top-level of a Calamares +# checkout. In order to use the system overall, you'll also need: +# - ~/.gitconfig (For the git commits this does) +# - ~/.transifexrc (Password token for Transifex) +# - ~/.ssh (For git commits) # -# -# cp ~/jenkins-master/.transifexrc ~ # Transifex user settings -# cp ~/jenkins-master/.gitconfig ~ # Git config, user settings -# cp -R ~/jenkins-master/.ssh ~ # SSH, presumably for github -# -# cd "$WORKSPACE" -# git config --global http.sslVerify false - test -f "CMakeLists.txt" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f ".tx/config" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f "calamares.desktop" || { echo "! Not at Calamares top-level" ; exit 1 ; } @@ -69,14 +64,11 @@ tx pull --force --source --all # so clean them up after pulling. # drop_language() { - rm -rf lang/python/"$1" src/modules/dummypythonqt/lang/"$1" lang/calamares_"$1".ts + rm -rf lang/python/"$1" lang/calamares_"$1".ts grep -v "\\[$1]" calamares.desktop > calamares.desktop.new mv calamares.desktop.new calamares.desktop } -drop_language es_ES -drop_language pl_PL - # Also fix the .desktop file, which has some fields removed by Transifex. # { cat calamares.desktop.in ; grep "\\[[a-zA-Z_@]*]=" calamares.desktop ; } > calamares.desktop.new @@ -113,6 +105,21 @@ awk ' skip=0; print $0; }}' < calamares.desktop > calamares.desktop.new mv calamares.desktop.new calamares.desktop +# Now group translated key-names (Name, Icon, Description, ..) by sorted +# language key rather than random-ish language-key order (which shuffles +# entries around). +# +# First, the non-translated lines +grep -v '\[.*\]=' calamares.desktop > calamares.desktop.new +# The translated lines: +# - replace (the first) [] by | so we have a consistent field separator +# - sort based on field 2, then 1 (language code, then reversed key-name) +# - replace the first | by [, the first (remaining) | by ] +# Effectively this puts the fields in this order: Name, Icon, Generic Name, +# Comment -- within each language key. This keeps churn down since the +# language codes and key-names are constant. +grep '\[.*\]=' calamares.desktop | sed -e 's/\[/|/' -e 's/\]/|/' | sort -t '|' -k 2,2 -k 1,1r | sed -e 's/|/\[/' | sed -e 's/|/\]/' >> calamares.desktop.new +mv calamares.desktop.new calamares.desktop git add --verbose calamares.desktop git commit "$AUTHOR" --message="i18n: [desktop] $BOILERPLATE" | true @@ -121,6 +128,19 @@ git commit "$AUTHOR" --message="i18n: [desktop] $BOILERPLATE" | true # PO-Created line). This applies only to modules which use po-files. git diff --numstat src/modules | awk '($1==1 && $2==1){print $3}' | xargs git checkout -- +# sed either wants -i'' (GNU sed) or -i '' (BSD sed) to +# replace in a file, with no backup extension. Define +# a `reinplace` command to deal with the difference. +if test FreeBSD = `uname` ; then + reinplace() { + sed -i '' "$@" + } +else + reinplace() { + sed -i'' "$@" + } +fi + # Go through the Python modules; those with a lang/ subdir have their # own complete gettext-based setup. for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do @@ -130,8 +150,8 @@ for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do if [ -d ${MODULE_DIR}/lang ]; then # Convert PO files to MO files for POFILE in $(find ${MODULE_DIR} -name "*.po") ; do - sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE - msgfmt -o ${POFILE%.po}.mo $POFILE + reinplace '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE + # msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose ${MODULE_DIR}/lang/* git commit "$AUTHOR" --message="i18n: [${MODULE_NAME}] $BOILERPLATE" | true @@ -140,10 +160,8 @@ for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do done for POFILE in $(find lang -name "python.po") ; do - sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE - msgfmt -o ${POFILE%.po}.mo $POFILE + reinplace '/^"Content-Type/s/CHARSET/UTF-8/' $POFILE + # msgfmt -o ${POFILE%.po}.mo $POFILE done git add --verbose lang/python* git commit "$AUTHOR" --message="i18n: [python] $BOILERPLATE" | true - -# git push --set-upstream origin master diff --git a/ci/txpush.sh b/ci/txpush.sh index 3195f42b4..ac806a2fa 100755 --- a/ci/txpush.sh +++ b/ci/txpush.sh @@ -1,11 +1,11 @@ #!/bin/sh ### LICENSE -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# SPDX-License-Identifier: BSD-2-Clause -# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot # SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # # This file is Free Software: you can redistribute it and/or modify # it under the terms of the 2-clause BSD License. @@ -29,20 +29,15 @@ # ### END USAGE -### INITIAL SETUP +### SANITY CHECKING # -# This stuff needs to be done once; in a real CI environment where it -# runs regularly in a container, the setup needs to be done when -# creating the container. +# The script needs a .tx/config to talk to the Transifex server; +# it also checks that it is run from the top-level of a Calamares +# checkout. In order to use the system overall, you'll also need: +# - ~/.gitconfig (For the git commits this does) +# - ~/.transifexrc (Password token for Transifex) +# - ~/.ssh (For git commits) # -# -# cp ~/jenkins-master/.transifexrc ~ # Transifex user settings -# cp ~/jenkins-master/.gitconfig ~ # Git config, user settings -# cp -R ~/jenkins-master/.ssh ~ # SSH, presumably for github -# -# cd "$WORKSPACE" -# git config --global http.sslVerify false - test -f "CMakeLists.txt" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f ".tx/config" || { echo "! Not at Calamares top-level" ; exit 1 ; } test -f "calamares.desktop" || { echo "! Not at Calamares top-level" ; exit 1 ; } @@ -97,16 +92,23 @@ done # those are done separately. _srcdirs="src/calamares src/libcalamares src/libcalamaresui src/modules src/qml" $LUPDATE -no-obsolete $_srcdirs -ts lang/calamares_en.ts -# Updating the TZ only needs to happen when the TZ themselves are updated, -# very-very-rarely. +# Non-Transifex special-cases +# +# - timezone names can be translated, but that's 700+ strings I don't want +# to inflict on translators normally +# - keyboard layouts can be translated, but that's 767 strings +# +# For both of these, the language / translation only needs to be updated +# when the source data is updated, which is very very rarely. # $LUPDATE -no-obsolete -extensions cxxtr src/libcalamares/locale -ts lang/tz_en.ts +# $LUPDATE -no-obsolete -extensions cxxtr src/modules/keyboard -ts lang/kb_en.ts if test -n "$XMLLINT" ; then TS_FILE="lang/calamares_en.ts" $XMLLINT --c14n11 "$TS_FILE" | { echo "" ; cat - ; } | $XMLLINT --format --encode utf-8 -o "$TS_FILE".new - && mv "$TS_FILE".new "$TS_FILE" fi -tx push --source --no-interactive -r calamares.calamares-master +tx push --source --no-interactive -r calamares.calamares tx push --source --no-interactive -r calamares.fdo diff --git a/ci/txreduce.py b/ci/txreduce.py new file mode 100755 index 000000000..a556d78fb --- /dev/null +++ b/ci/txreduce.py @@ -0,0 +1,47 @@ +#! /usr/bin/env python3 +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# Reduce a translation file -- generally, a Timezone translation -- by +# dropping untranslated strings. An untranslated string is one that +# has an empty translation **and** is marked unfinished. +# +# This is mostly useful to cut down the size of the source file: +# far and away most of the zones are not translated, and it's just a +# handful of places that get special treatment. + +from xml.dom.minidom import parse +import sys + +valid = True +dom = parse(sys.argv[1]) +for n in dom.getElementsByTagName("translation"): + attrs = n.attributes.keys() + + drop = True + if "type" not in attrs: + drop = False + elif "type" in attrs and n.attributes["type"].value != "unfinished": + # In the samples I've seen, only "unfinished" is a valid type; + # once something has been translated, the attribute vanishes (see + # the if branch, above). + print("WARNING ''{!s}'' unknown type".format(n.attributes["type"].value)) + drop = False + valid = False + else: + t = n.firstChild + if t is None: + # Unfinished and empty + drop = True + else: + drop = bool(t.data) + if drop: + message = n.parentNode + message.parentNode.removeChild(message) + message.unlink() + +if valid: + for line in dom.toxml().split("\n"): + if line.strip(): + print(line) diff --git a/ci/txstats.py b/ci/txstats.py index e78a8ad9c..69a34f89e 100755 --- a/ci/txstats.py +++ b/ci/txstats.py @@ -1,5 +1,8 @@ #! /usr/bin/env python3 # +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# # Uses the Transifex API to get a list of enabled languages, # and outputs CMake settings for inclusion into CMakeLists.txt. # @@ -8,25 +11,138 @@ # Run it with a -v command-line option to get extra output on # actual translation percentages. import sys +import os +import argparse -def get_tx_credentials(): +class TXError(Exception): + pass + + +class TransifexGetter(object): """ - Gets the API token out of the user's .transifexrc (this is supposed - to be secure). + Get language data from Transifex. + + The object does all the work in __init__, after that + the only relevant data is .languages, a dictionary + of language data. """ - import configparser - import os - txconfig_name = os.path.expanduser("~/.transifexrc") - try: - with open(txconfig_name, "r") as f: - parser = configparser.ConfigParser() - parser.read_file(f) + def __init__(self): + token = self.get_tx_credentials() + if token is None: + raise TXError("Could not get Transifex API token") - return parser.get("https://www.transifex.com", "password") - except IOError as e: - return None + import requests + r = requests.get("https://api.transifex.com/organizations/calamares/projects/calamares/resources/calamares/", auth=("api", token)) + if r.status_code != 200: + raise TXError("Could not get Transifex data from API") -def output_langs(all_langs, label, filterfunc): + j = r.json() + self.languages = j["stats"] + + + def get_tx_credentials(self): + """ + Gets the API token out of the user's .transifexrc (this is supposed + to be secure). + """ + import configparser + import os + txconfig_name = os.path.expanduser("~/.transifexrc") + try: + with open(txconfig_name, "r") as f: + parser = configparser.ConfigParser() + parser.read_file(f) + + return parser.get("https://www.transifex.com", "password") + except IOError as e: + return None + + +class BogusGetter(object): + """ + Fake language data. + + This object pretends to retrieve data, and returns fixed language lists and percentages, + for testing purposes without hitting Transifex servers all the time. + """ + def __init__(self): + self.languages = dict() + for lang, completion in ( ("sq", 100), ("ar", 44), ("as", 28), ("de", 15), ("da", 4), ("ts", 82) ): + self.languages[lang] = dict(translated=dict(stringcount=686, percentage=(completion/100.0))) + + +class PrintOutputter(object): + """ + Output via print-statements. + """ + def __init__(self): + pass + + def print(self, s): + print(s) + + def __enter__(self): + return self + + def __exit__(self, e, v, tb): + pass + + +class EditingOutputter(object): + """ + Edit CMakeLists in-place. + """ + def __init__(self): + with open("CMakeLists.txt", "r") as f: + lines = f.readlines() + + mark = None + for l in lines: + # Note that we didn't strip the lines, so need the \n here + if l.startswith("# Total ") and l.endswith(" languages\n"): + mark = lines.index(l) + break + if mark is None: + raise TXError("No CMakeLists.txt lines for TX stats found") + self.pre_lines = lines[:mark] + + nextmark = mark + 1 + for l in lines[mark+1:]: + if l.startswith("set( _tx_"): + nextmark += 1 + continue + if l.startswith(" "): + nextmark += 1 + continue + break + if nextmark > mark + 12 or nextmark > len(lines) - 4: + # Try to catch runaway nextmarks: we know there should + # be four set-lines, which are unlikely to be 3 lines each; + # similarly the CMakeLists.txt is supposed to end with + # some boilerplate. + raise TXError("Could not find end of TX settings in CMakeLists.txt") + self.post_lines = lines[nextmark:] + + self.mid_lines = [] + print("# Editing CMakeLists.txt in-place") + + def print(self, s): + # Add the implicit \n from print() + self.mid_lines.append(s + "\n") + if s.startswith("#"): + print(s) + + def __enter__(self): + return self + + def __exit__(self, e, v, tb): + if e is None: + with open("CMakeLists.txt", "w") as f: + f.write("".join(self.pre_lines + self.mid_lines + self.post_lines)) + print("# CMakeLists.txt updated") + + +def output_langs(all_langs, outputter, label, filterfunc): """ Output (via print) all of the languages in @p all_langs that satisfy the translation-percentage filter @p filterfunc. @@ -42,12 +158,13 @@ def output_langs(all_langs, label, filterfunc): while len(out) > width - len(prefix): chunk = out[:out[:width].rfind(" ")] - print("%s%s" % (prefix, chunk)) + outputter.print("%s%s" % (prefix, chunk)) out = out[len(chunk)+1:] prefix = " " - print("%s%s" % (prefix, out)) + outputter.print("%s%s" % (prefix, out)) -def get_tx_stats(token, verbose): + +def get_tx_stats(languages, outputter, verbose): """ Does an API request to Transifex with the given API @p token, getting the translation statistics for the main body of texts. Then prints @@ -56,13 +173,6 @@ def get_tx_stats(token, verbose): If @p verbose is True, prints out language stats as well. """ - import requests - - r = requests.get("https://api.transifex.com/organizations/calamares/projects/calamares/resources/calamares-master/", auth=("api", token)) - if r.status_code != 200: - return 1 - - suppressed_languages = ( "es_ES", ) # In Transifex, but not used # Some languages go into the "incomplete" list by definition, # regardless of their completion status: this can have various reasons. # @@ -71,16 +181,12 @@ def get_tx_stats(token, verbose): # and it's at-the-least ok. incomplete_languages = ( "eo", # Not supported by QLocale < 5.12.1 + "ie", # Not supported by Qt at least through 5.15.0 ) all_langs = [] - - j = r.json() - languages = j["stats"] - print("# Total %d languages" % len(languages)) + outputter.print("# Total %d languages" % len(languages)) for lang_name in languages: - if lang_name in suppressed_languages: - continue stats = languages[lang_name]["translated"]["percentage"] # Make the by-definition-incomplete languages have a percentage # lower than zero; this way they end up sorted (in -v output) @@ -91,23 +197,67 @@ def get_tx_stats(token, verbose): if verbose: for s, l in sorted(all_langs, reverse=True): - print("# %16s\t%6.2f" % (l, s * 100.0)) - output_langs(all_langs, "complete", lambda s : s == 1.0) - output_langs(all_langs, "good", lambda s : 1.0 > s >= 0.75) - output_langs(all_langs, "ok", lambda s : 0.75 > s >= 0.05) - output_langs(all_langs, "incomplete", lambda s : 0.05 > s) + outputter.print("# %16s\t%6.2f" % (l, s * 100.0)) + output_langs(all_langs, outputter, "complete", lambda s : s == 1.0) + output_langs(all_langs, outputter, "good", lambda s : 1.0 > s >= 0.75) + output_langs(all_langs, outputter, "ok", lambda s : 0.75 > s >= 0.05) + output_langs(all_langs, outputter, "incomplete", lambda s : 0.05 > s) + + # Audit the languages that are in TX, mapped to git + for lang_name in languages: + if not os.path.exists("lang/calamares_{}.ts".format(lang_name)): + print("# !! Missing translation file for {}".format(lang_name)) + if not os.path.isdir("lang/python/{}/LC_MESSAGES".format(lang_name)): + print("# !! Missing Python translation file for {}".format(lang_name)) + + # Audit the files that are in git, mapped to TX + special_cases = ("python.pot", "python", "CMakeLists.txt", "txload.cpp", "calamares_i18n.qrc.in") + for file_name in os.listdir("lang"): + if file_name in special_cases: + continue + elif file_name.startswith("calamares_") and file_name.endswith(".ts"): + key = file_name[10:-3] + if not key in languages and not key == "en": + print("# !! Translation file for {} not in TX".format(key)) + elif file_name.startswith("tz_") and file_name.endswith(".ts"): + key = file_name[3:-3] + if not key in languages and not key == "en": + print("# !! Translation file for TZ {} not in TX".format(key)) + elif file_name.startswith("kb_") and file_name.endswith(".ts"): + key = file_name[3:-3] + if not key in languages and not key == "en": + print("# !! Translation file for KB {} not in TX".format(key)) + else: + print("# !! Weird translation file {} not in TX".format(file_name)) + + # Audit the python translation files that are in git, mapped to TX + for file_name in os.listdir("lang/python"): + if file_name not in languages: + print("# !! Translation file for Python {} not in TX".format(file_name)) return 0 def main(): - verbose = (sys.argv[-1] == "-v") - cred = get_tx_credentials() - if cred: - return get_tx_stats(cred, verbose) - else: - print("! Could not find API token in ~/.transifexrc") - return 1 + parser = argparse.ArgumentParser(description="Update Transifex Statistics") + parser.add_argument("--verbose", "-v", help="Show statistics", action="store_true") + parser.add_argument("--bogus", "-n", help="Use bogus data (do not query Transifex)", action="store_true") + parser.add_argument("--edit", "-e", help="Edit CMakeLists.txt in-place", action="store_true") + args = parser.parse_args() + try: + if args.bogus: + getter = BogusGetter() + else: + getter = TransifexGetter() + if args.edit: + outputter = EditingOutputter() + else: + outputter = PrintOutputter() + with outputter: + return get_tx_stats(getter.languages, outputter, args.verbose) + except TXError as e: + print("! " + str(e)) + return 1; return 0 if __name__ == "__main__": diff --git a/ci/umount.sh b/ci/umount.sh new file mode 100755 index 000000000..a895e374f --- /dev/null +++ b/ci/umount.sh @@ -0,0 +1,29 @@ +#! /bin/sh + +### LICENSE +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2022 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# This file is Free Software: you can redistribute it and/or modify +# it under the terms of the 2-clause BSD License. +# +### END LICENSE + +# +# This is an "unmount" script that tries to unmount whatever +# filesystems Calamares might have left mounted (e.g. because of +# a crash, or ^C'ing the installer, or ..). +# + +# Swap may have become enabled on the disks just used; assume +# we're in a live session where we don't want any. +sudo swapoff -a +# In Arch-based systems, there may be a gpg-agent started by +# pacman during installation, which lives in the chroot. Kill +# them all; again assume we're in a live session where it doesn't matter. +sudo pkill gpg-agent +# Unmount the filesystems in *reverse* order, since we need to ditch +# e.g. /run/udev before /run before the root filesystem. +sudo umount $( LC_ALL=C mount | awk '/calamares-root/{print $3}' | LC_ALL=C sort -r ) diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in index df95fb9d8..d223136a9 100644 --- a/cmake_uninstall.cmake.in +++ b/cmake_uninstall.cmake.in @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-License-Identifier: BSD-2-Clause + IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") diff --git a/com.github.calamares.calamares.policy b/com.github.calamares.calamares.policy index 6bc250e3b..976ec0f1a 100644 --- a/com.github.calamares.calamares.policy +++ b/com.github.calamares.calamares.policy @@ -1,4 +1,7 @@ + @@ -19,4 +22,4 @@ /usr/bin/calamares true - \ No newline at end of file + diff --git a/data/completion/bash/calamares b/data/completion/bash/calamares new file mode 100644 index 000000000..a73ca38a9 --- /dev/null +++ b/data/completion/bash/calamares @@ -0,0 +1,27 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Gaël PORTAY +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Calamares is Free Software: see the License-Identifier above. +# + +_calamares() +{ + local cur prev words cword + _init_completion || return + + case "$prev" in + -D) + COMPREPLY=( $( compgen -W "$( seq 0 1 8 )" -- "$cur" ) ) + return + ;; + -c|--config) + _filedir + return + ;; + esac + + COMPREPLY=( $( compgen -W "-h --help -v --version -d --debug -D -c --config -X -xdg-config -T --debug-translation" -- "$cur" ) ) +} && +complete -F _calamares calamares diff --git a/data/config-appimage/branding/default/squid.png.license b/data/config-appimage/branding/default/squid.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/config-appimage/branding/default/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/config-appimage/modules/displaymanager.conf b/data/config-appimage/modules/displaymanager.conf index 8f8e9c704..5c9554602 100644 --- a/data/config-appimage/modules/displaymanager.conf +++ b/data/config-appimage/modules/displaymanager.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. --- diff --git a/data/config-appimage/modules/finished.conf b/data/config-appimage/modules/finished.conf index 48bbdc031..f0280ef58 100644 --- a/data/config-appimage/modules/finished.conf +++ b/data/config-appimage/modules/finished.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the "finished" page, which is usually shown only at # the end of the installation (successful or not). --- diff --git a/data/config-appimage/modules/keyboard.conf b/data/config-appimage/modules/keyboard.conf index ee97c3939..d122f30d7 100644 --- a/data/config-appimage/modules/keyboard.conf +++ b/data/config-appimage/modules/keyboard.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- diff --git a/data/config-appimage/modules/locale.conf b/data/config-appimage/modules/locale.conf index 8ae016279..5e8aa3ab5 100644 --- a/data/config-appimage/modules/locale.conf +++ b/data/config-appimage/modules/locale.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- # This settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and diff --git a/data/config-appimage/modules/users.conf b/data/config-appimage/modules/users.conf index bdf812878..4d9cc4394 100644 --- a/data/config-appimage/modules/users.conf +++ b/data/config-appimage/modules/users.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the one-user-system user module. # # Besides these settings, the user module also places the following diff --git a/data/config-appimage/modules/welcome.conf b/data/config-appimage/modules/welcome.conf index 0cfb59546..2978010b7 100644 --- a/data/config-appimage/modules/welcome.conf +++ b/data/config-appimage/modules/welcome.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through diff --git a/data/config-appimage/settings.conf b/data/config-appimage/settings.conf index 756710492..defef0b44 100644 --- a/data/config-appimage/settings.conf +++ b/data/config-appimage/settings.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration file for Calamares # Syntax is YAML 1.2 --- diff --git a/data/example-root/README.md b/data/example-root/README.md index 7173b3eaf..9d8987286 100644 --- a/data/example-root/README.md +++ b/data/example-root/README.md @@ -1,5 +1,9 @@ # Example Filesystem + + This is a filesystem that will be used as / in an example distro, *if* you build the `example-distro` target and use the default unpackfs configuration. It should hold files and configuration diff --git a/data/example-root/etc/bash.bashrc b/data/example-root/etc/bash.bashrc index 42bd3d007..7de2a283d 100644 --- a/data/example-root/etc/bash.bashrc +++ b/data/example-root/etc/bash.bashrc @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin diff --git a/data/example-root/etc/group b/data/example-root/etc/group index 1dbf9013e..3130ae3e8 100644 --- a/data/example-root/etc/group +++ b/data/example-root/etc/group @@ -1 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# root:x:0: diff --git a/data/example-root/etc/issue b/data/example-root/etc/issue index ce0ac58e3..22cce578e 100644 --- a/data/example-root/etc/issue +++ b/data/example-root/etc/issue @@ -1 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# This is an example /etc/issue file. diff --git a/data/example-root/etc/locale.gen b/data/example-root/etc/locale.gen index 5e729a18d..e2df1eaef 100644 --- a/data/example-root/etc/locale.gen +++ b/data/example-root/etc/locale.gen @@ -1,486 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add # user defined locales to /usr/local/share/i18n/SUPPORTED. If you change # this file, you need to rerun locale-gen. - -# aa_DJ ISO-8859-1 -# aa_DJ.UTF-8 UTF-8 -# aa_ER UTF-8 -# aa_ER@saaho UTF-8 -# aa_ET UTF-8 -# af_ZA ISO-8859-1 -# af_ZA.UTF-8 UTF-8 -# ak_GH UTF-8 -# am_ET UTF-8 -# an_ES ISO-8859-15 -# an_ES.UTF-8 UTF-8 -# anp_IN UTF-8 -# ar_AE ISO-8859-6 -# ar_AE.UTF-8 UTF-8 -# ar_BH ISO-8859-6 -# ar_BH.UTF-8 UTF-8 -# ar_DZ ISO-8859-6 -# ar_DZ.UTF-8 UTF-8 -# ar_EG ISO-8859-6 -# ar_EG.UTF-8 UTF-8 -# ar_IN UTF-8 -# ar_IQ ISO-8859-6 -# ar_IQ.UTF-8 UTF-8 -# ar_JO ISO-8859-6 -# ar_JO.UTF-8 UTF-8 -# ar_KW ISO-8859-6 -# ar_KW.UTF-8 UTF-8 -# ar_LB ISO-8859-6 -# ar_LB.UTF-8 UTF-8 -# ar_LY ISO-8859-6 -# ar_LY.UTF-8 UTF-8 -# ar_MA ISO-8859-6 -# ar_MA.UTF-8 UTF-8 -# ar_OM ISO-8859-6 -# ar_OM.UTF-8 UTF-8 -# ar_QA ISO-8859-6 -# ar_QA.UTF-8 UTF-8 -# ar_SA ISO-8859-6 -# ar_SA.UTF-8 UTF-8 -# ar_SD ISO-8859-6 -# ar_SD.UTF-8 UTF-8 -# ar_SS UTF-8 -# ar_SY ISO-8859-6 -# ar_SY.UTF-8 UTF-8 -# ar_TN ISO-8859-6 -# ar_TN.UTF-8 UTF-8 -# ar_YE ISO-8859-6 -# ar_YE.UTF-8 UTF-8 -# as_IN UTF-8 -# ast_ES ISO-8859-15 -# ast_ES.UTF-8 UTF-8 -# ayc_PE UTF-8 -# az_AZ UTF-8 -# be_BY CP1251 -# be_BY.UTF-8 UTF-8 -# be_BY@latin UTF-8 -# bem_ZM UTF-8 -# ber_DZ UTF-8 -# ber_MA UTF-8 -# bg_BG CP1251 -# bg_BG.UTF-8 UTF-8 -# bhb_IN.UTF-8 UTF-8 -# bho_IN UTF-8 -# bn_BD UTF-8 -# bn_IN UTF-8 -# bo_CN UTF-8 -# bo_IN UTF-8 -# br_FR ISO-8859-1 -# br_FR.UTF-8 UTF-8 -# br_FR@euro ISO-8859-15 -# brx_IN UTF-8 -# bs_BA ISO-8859-2 -# bs_BA.UTF-8 UTF-8 -# byn_ER UTF-8 -# ca_AD ISO-8859-15 -# ca_AD.UTF-8 UTF-8 -# ca_ES ISO-8859-1 -# ca_ES.UTF-8 UTF-8 -# ca_ES.UTF-8@valencia UTF-8 -# ca_ES@euro ISO-8859-15 -# ca_ES@valencia ISO-8859-15 -# ca_FR ISO-8859-15 -# ca_FR.UTF-8 UTF-8 -# ca_IT ISO-8859-15 -# ca_IT.UTF-8 UTF-8 -# ce_RU UTF-8 -# ckb_IQ UTF-8 -# cmn_TW UTF-8 -# crh_UA UTF-8 -# cs_CZ ISO-8859-2 -# cs_CZ.UTF-8 UTF-8 -# csb_PL UTF-8 -# cv_RU UTF-8 -# cy_GB ISO-8859-14 -# cy_GB.UTF-8 UTF-8 -# da_DK ISO-8859-1 -# da_DK.UTF-8 UTF-8 -# de_AT ISO-8859-1 -# de_AT.UTF-8 UTF-8 -# de_AT@euro ISO-8859-15 -# de_BE ISO-8859-1 -# de_BE.UTF-8 UTF-8 -# de_BE@euro ISO-8859-15 -# de_CH ISO-8859-1 -# de_CH.UTF-8 UTF-8 -# de_DE ISO-8859-1 -# de_DE.UTF-8 UTF-8 -# de_DE@euro ISO-8859-15 -# de_LI.UTF-8 UTF-8 -# de_LU ISO-8859-1 -# de_LU.UTF-8 UTF-8 -# de_LU@euro ISO-8859-15 -# doi_IN UTF-8 -# dv_MV UTF-8 -# dz_BT UTF-8 -# el_CY ISO-8859-7 -# el_CY.UTF-8 UTF-8 -# el_GR ISO-8859-7 -# el_GR.UTF-8 UTF-8 -# en_AG UTF-8 -# en_AU ISO-8859-1 -# en_AU.UTF-8 UTF-8 -# en_BW ISO-8859-1 -# en_BW.UTF-8 UTF-8 -# en_CA ISO-8859-1 en_CA.UTF-8 UTF-8 -# en_DK ISO-8859-1 -# en_DK.ISO-8859-15 ISO-8859-15 -# en_DK.UTF-8 UTF-8 -# en_GB ISO-8859-1 -# en_GB.ISO-8859-15 ISO-8859-15 -# en_GB.UTF-8 UTF-8 -# en_HK ISO-8859-1 -# en_HK.UTF-8 UTF-8 -# en_IE ISO-8859-1 -# en_IE.UTF-8 UTF-8 -# en_IE@euro ISO-8859-15 -# en_IN UTF-8 -# en_NG UTF-8 -# en_NZ ISO-8859-1 -# en_NZ.UTF-8 UTF-8 -# en_PH ISO-8859-1 -# en_PH.UTF-8 UTF-8 -# en_SG ISO-8859-1 -# en_SG.UTF-8 UTF-8 -# en_US ISO-8859-1 -# en_US.ISO-8859-15 ISO-8859-15 en_US.UTF-8 UTF-8 -# en_ZA ISO-8859-1 -# en_ZA.UTF-8 UTF-8 -# en_ZM UTF-8 -# en_ZW ISO-8859-1 -# en_ZW.UTF-8 UTF-8 -# eo ISO-8859-3 -# eo.UTF-8 UTF-8 -# eo_US.UTF-8 UTF-8 -# es_AR ISO-8859-1 -# es_AR.UTF-8 UTF-8 -# es_BO ISO-8859-1 -# es_BO.UTF-8 UTF-8 -# es_CL ISO-8859-1 -# es_CL.UTF-8 UTF-8 -# es_CO ISO-8859-1 -# es_CO.UTF-8 UTF-8 -# es_CR ISO-8859-1 -# es_CR.UTF-8 UTF-8 -# es_CU UTF-8 -# es_DO ISO-8859-1 -# es_DO.UTF-8 UTF-8 -# es_EC ISO-8859-1 -# es_EC.UTF-8 UTF-8 -# es_ES ISO-8859-1 -# es_ES.UTF-8 UTF-8 -# es_ES@euro ISO-8859-15 -# es_GT ISO-8859-1 -# es_GT.UTF-8 UTF-8 -# es_HN ISO-8859-1 -# es_HN.UTF-8 UTF-8 -# es_MX ISO-8859-1 -# es_MX.UTF-8 UTF-8 -# es_NI ISO-8859-1 -# es_NI.UTF-8 UTF-8 -# es_PA ISO-8859-1 -# es_PA.UTF-8 UTF-8 -# es_PE ISO-8859-1 -# es_PE.UTF-8 UTF-8 -# es_PR ISO-8859-1 -# es_PR.UTF-8 UTF-8 -# es_PY ISO-8859-1 -# es_PY.UTF-8 UTF-8 -# es_SV ISO-8859-1 -# es_SV.UTF-8 UTF-8 -# es_US ISO-8859-1 -# es_US.UTF-8 UTF-8 -# es_UY ISO-8859-1 -# es_UY.UTF-8 UTF-8 -# es_VE ISO-8859-1 -# es_VE.UTF-8 UTF-8 -# et_EE ISO-8859-1 -# et_EE.ISO-8859-15 ISO-8859-15 -# et_EE.UTF-8 UTF-8 -# eu_ES ISO-8859-1 -# eu_ES.UTF-8 UTF-8 -# eu_ES@euro ISO-8859-15 -# eu_FR ISO-8859-1 -# eu_FR.UTF-8 UTF-8 -# eu_FR@euro ISO-8859-15 -# fa_IR UTF-8 -# ff_SN UTF-8 -# fi_FI ISO-8859-1 -# fi_FI.UTF-8 UTF-8 -# fi_FI@euro ISO-8859-15 -# fil_PH UTF-8 -# fo_FO ISO-8859-1 -# fo_FO.UTF-8 UTF-8 -# fr_BE ISO-8859-1 -# fr_BE.UTF-8 UTF-8 -# fr_BE@euro ISO-8859-15 -# fr_CA ISO-8859-1 -# fr_CA.UTF-8 UTF-8 -# fr_CH ISO-8859-1 -# fr_CH.UTF-8 UTF-8 -# fr_FR ISO-8859-1 -# fr_FR.UTF-8 UTF-8 -# fr_FR@euro ISO-8859-15 -# fr_LU ISO-8859-1 -# fr_LU.UTF-8 UTF-8 -# fr_LU@euro ISO-8859-15 -# fur_IT UTF-8 -# fy_DE UTF-8 -# fy_NL UTF-8 -# ga_IE ISO-8859-1 -# ga_IE.UTF-8 UTF-8 -# ga_IE@euro ISO-8859-15 -# gd_GB ISO-8859-15 -# gd_GB.UTF-8 UTF-8 -# gez_ER UTF-8 -# gez_ER@abegede UTF-8 -# gez_ET UTF-8 -# gez_ET@abegede UTF-8 -# gl_ES ISO-8859-1 -# gl_ES.UTF-8 UTF-8 -# gl_ES@euro ISO-8859-15 -# gu_IN UTF-8 -# gv_GB ISO-8859-1 -# gv_GB.UTF-8 UTF-8 -# ha_NG UTF-8 -# hak_TW UTF-8 -# he_IL ISO-8859-8 -# he_IL.UTF-8 UTF-8 -# hi_IN UTF-8 -# hne_IN UTF-8 -# hr_HR ISO-8859-2 -# hr_HR.UTF-8 UTF-8 -# hsb_DE ISO-8859-2 -# hsb_DE.UTF-8 UTF-8 -# ht_HT UTF-8 -# hu_HU ISO-8859-2 -# hu_HU.UTF-8 UTF-8 -# hy_AM UTF-8 -# hy_AM.ARMSCII-8 ARMSCII-8 -# ia_FR UTF-8 -# id_ID ISO-8859-1 -# id_ID.UTF-8 UTF-8 -# ig_NG UTF-8 -# ik_CA UTF-8 -# is_IS ISO-8859-1 -# is_IS.UTF-8 UTF-8 -# it_CH ISO-8859-1 -# it_CH.UTF-8 UTF-8 -# it_IT ISO-8859-1 -# it_IT.UTF-8 UTF-8 -# it_IT@euro ISO-8859-15 -# iu_CA UTF-8 -# iw_IL ISO-8859-8 -# iw_IL.UTF-8 UTF-8 -# ja_JP.EUC-JP EUC-JP -# ja_JP.UTF-8 UTF-8 -# ka_GE GEORGIAN-PS -# ka_GE.UTF-8 UTF-8 -# kk_KZ PT154 -# kk_KZ RK1048 -# kk_KZ.UTF-8 UTF-8 -# kl_GL ISO-8859-1 -# kl_GL.UTF-8 UTF-8 -# km_KH UTF-8 -# kn_IN UTF-8 -# ko_KR.EUC-KR EUC-KR -# ko_KR.UTF-8 UTF-8 -# kok_IN UTF-8 -# ks_IN UTF-8 -# ks_IN@devanagari UTF-8 -# ku_TR ISO-8859-9 -# ku_TR.UTF-8 UTF-8 -# kw_GB ISO-8859-1 -# kw_GB.UTF-8 UTF-8 -# ky_KG UTF-8 -# lb_LU UTF-8 -# lg_UG ISO-8859-10 -# lg_UG.UTF-8 UTF-8 -# li_BE UTF-8 -# li_NL UTF-8 -# lij_IT UTF-8 -# ln_CD UTF-8 -# lo_LA UTF-8 -# lt_LT ISO-8859-13 -# lt_LT.UTF-8 UTF-8 -# lv_LV ISO-8859-13 -# lv_LV.UTF-8 UTF-8 -# lzh_TW UTF-8 -# mag_IN UTF-8 -# mai_IN UTF-8 -# mg_MG ISO-8859-15 -# mg_MG.UTF-8 UTF-8 -# mhr_RU UTF-8 -# mi_NZ ISO-8859-13 -# mi_NZ.UTF-8 UTF-8 -# mk_MK ISO-8859-5 -# mk_MK.UTF-8 UTF-8 -# ml_IN UTF-8 -# mn_MN UTF-8 -# mni_IN UTF-8 -# mr_IN UTF-8 -# ms_MY ISO-8859-1 -# ms_MY.UTF-8 UTF-8 -# mt_MT ISO-8859-3 -# mt_MT.UTF-8 UTF-8 -# my_MM UTF-8 -# nan_TW UTF-8 -# nan_TW@latin UTF-8 -# nb_NO ISO-8859-1 -# nb_NO.UTF-8 UTF-8 -# nds_DE UTF-8 -# nds_NL UTF-8 -# ne_NP UTF-8 -# nhn_MX UTF-8 -# niu_NU UTF-8 -# niu_NZ UTF-8 -# nl_AW UTF-8 -# nl_BE ISO-8859-1 -# nl_BE.UTF-8 UTF-8 -# nl_BE@euro ISO-8859-15 -# nl_NL ISO-8859-1 -# nl_NL.UTF-8 UTF-8 -# nl_NL@euro ISO-8859-15 -# nn_NO ISO-8859-1 -# nn_NO.UTF-8 UTF-8 -# nr_ZA UTF-8 -# nso_ZA UTF-8 -# oc_FR ISO-8859-1 -# oc_FR.UTF-8 UTF-8 -# om_ET UTF-8 -# om_KE ISO-8859-1 -# om_KE.UTF-8 UTF-8 -# or_IN UTF-8 -# os_RU UTF-8 -# pa_IN UTF-8 -# pa_PK UTF-8 -# pap_AN UTF-8 -# pap_AW UTF-8 -# pap_CW UTF-8 -# pl_PL ISO-8859-2 -# pl_PL.UTF-8 UTF-8 -# ps_AF UTF-8 -# pt_BR ISO-8859-1 -# pt_BR.UTF-8 UTF-8 -# pt_PT ISO-8859-1 -# pt_PT.UTF-8 UTF-8 -# pt_PT@euro ISO-8859-15 -# quz_PE UTF-8 -# raj_IN UTF-8 -# ro_RO ISO-8859-2 -# ro_RO.UTF-8 UTF-8 -# ru_RU ISO-8859-5 -# ru_RU.CP1251 CP1251 -# ru_RU.KOI8-R KOI8-R -# ru_RU.UTF-8 UTF-8 -# ru_UA KOI8-U -# ru_UA.UTF-8 UTF-8 -# rw_RW UTF-8 -# sa_IN UTF-8 -# sat_IN UTF-8 -# sc_IT UTF-8 -# sd_IN UTF-8 -# sd_IN@devanagari UTF-8 -# sd_PK UTF-8 -# se_NO UTF-8 -# shs_CA UTF-8 -# si_LK UTF-8 -# sid_ET UTF-8 -# sk_SK ISO-8859-2 -# sk_SK.UTF-8 UTF-8 -# sl_SI ISO-8859-2 -# sl_SI.UTF-8 UTF-8 -# so_DJ ISO-8859-1 -# so_DJ.UTF-8 UTF-8 -# so_ET UTF-8 -# so_KE ISO-8859-1 -# so_KE.UTF-8 UTF-8 -# so_SO ISO-8859-1 -# so_SO.UTF-8 UTF-8 -# sq_AL ISO-8859-1 -# sq_AL.UTF-8 UTF-8 -# sq_MK UTF-8 -# sr_ME UTF-8 -# sr_RS UTF-8 -# sr_RS@latin UTF-8 -# ss_ZA UTF-8 -# st_ZA ISO-8859-1 -# st_ZA.UTF-8 UTF-8 -# sv_FI ISO-8859-1 -# sv_FI.UTF-8 UTF-8 -# sv_FI@euro ISO-8859-15 -# sv_SE ISO-8859-1 -# sv_SE.ISO-8859-15 ISO-8859-15 -# sv_SE.UTF-8 UTF-8 -# sw_KE UTF-8 -# sw_TZ UTF-8 -# szl_PL UTF-8 -# ta_IN UTF-8 -# ta_LK UTF-8 -# tcy_IN.UTF-8 UTF-8 -# te_IN UTF-8 -# tg_TJ KOI8-T -# tg_TJ.UTF-8 UTF-8 -# th_TH TIS-620 -# th_TH.UTF-8 UTF-8 -# the_NP UTF-8 -# ti_ER UTF-8 -# ti_ET UTF-8 -# tig_ER UTF-8 -# tk_TM UTF-8 -# tl_PH ISO-8859-1 -# tl_PH.UTF-8 UTF-8 -# tn_ZA UTF-8 -# tr_CY ISO-8859-9 -# tr_CY.UTF-8 UTF-8 -# tr_TR ISO-8859-9 -# tr_TR.UTF-8 UTF-8 -# ts_ZA UTF-8 -# tt_RU UTF-8 -# tt_RU@iqtelif UTF-8 -# ug_CN UTF-8 -# ug_CN@latin UTF-8 -# uk_UA KOI8-U -# uk_UA.UTF-8 UTF-8 -# unm_US UTF-8 -# ur_IN UTF-8 -# ur_PK UTF-8 -# uz_UZ ISO-8859-1 -# uz_UZ.UTF-8 UTF-8 -# uz_UZ@cyrillic UTF-8 -# ve_ZA UTF-8 -# vi_VN UTF-8 -# wa_BE ISO-8859-1 -# wa_BE.UTF-8 UTF-8 -# wa_BE@euro ISO-8859-15 -# wae_CH UTF-8 -# wal_ET UTF-8 -# wo_SN UTF-8 -# xh_ZA ISO-8859-1 -# xh_ZA.UTF-8 UTF-8 -# yi_US CP1255 -# yi_US.UTF-8 UTF-8 -# yo_NG UTF-8 -# yue_HK UTF-8 -# zh_CN GB2312 -# zh_CN.GB18030 GB18030 -# zh_CN.GBK GBK -# zh_CN.UTF-8 UTF-8 -# zh_HK BIG5-HKSCS -# zh_HK.UTF-8 UTF-8 -# zh_SG GB2312 -# zh_SG.GBK GBK -# zh_SG.UTF-8 UTF-8 -# zh_TW BIG5 -# zh_TW.EUC-TW EUC-TW -# zh_TW.UTF-8 UTF-8 -# zu_ZA ISO-8859-1 -# zu_ZA.UTF-8 UTF-8 diff --git a/data/example-root/etc/profile b/data/example-root/etc/profile index 42bd3d007..7de2a283d 100644 --- a/data/example-root/etc/profile +++ b/data/example-root/etc/profile @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin diff --git a/data/example-root/xbin/linux-version b/data/example-root/xbin/linux-version index 3e91d5333..87b040d34 100755 --- a/data/example-root/xbin/linux-version +++ b/data/example-root/xbin/linux-version @@ -1 +1,5 @@ #! /bin/true +# +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# diff --git a/data/example-root/xbin/useradd b/data/example-root/xbin/useradd index 3e91d5333..87b040d34 100755 --- a/data/example-root/xbin/useradd +++ b/data/example-root/xbin/useradd @@ -1 +1,5 @@ #! /bin/true +# +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# diff --git a/data/images/boot-environment.svg.license b/data/images/boot-environment.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/boot-environment.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/bugs.svg.license b/data/images/bugs.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/bugs.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/fail.svgz.license b/data/images/fail.svgz.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/images/fail.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/help-donate.svg.license b/data/images/help-donate.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/data/images/help-donate.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/help.svg.license b/data/images/help.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/help.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/information.svgz.license b/data/images/information.svgz.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/images/information.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/no.svgz.license b/data/images/no.svgz.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/images/no.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-alongside.svg.license b/data/images/partition-alongside.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-alongside.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-disk.svg.license b/data/images/partition-disk.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-disk.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-erase-auto.svg.license b/data/images/partition-erase-auto.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-erase-auto.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-manual.svg.license b/data/images/partition-manual.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-manual.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-partition.svg.license b/data/images/partition-partition.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-partition.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-replace-os.svg.license b/data/images/partition-replace-os.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-replace-os.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/partition-table.svg.license b/data/images/partition-table.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/partition-table.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/release.svg.license b/data/images/release.svg.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/data/images/release.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/squid.png.license b/data/images/squid.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/images/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/squid.svg.license b/data/images/squid.svg.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/images/squid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/data/images/state-error.svg.license b/data/images/state-error.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/data/images/state-error.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/state-ok.svg.license b/data/images/state-ok.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/data/images/state-ok.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/state-warning.svg.license b/data/images/state-warning.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/data/images/state-warning.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/data/images/yes.svgz.license b/data/images/yes.svgz.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/data/images/yes.svgz.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/io.calamares.calamares.appdata.xml b/io.calamares.calamares.appdata.xml index 355f485c2..9b1f883bd 100644 --- a/io.calamares.calamares.appdata.xml +++ b/io.calamares.calamares.appdata.xml @@ -1,8 +1,11 @@ + io.calamares.calamares.desktop CC0-1.0 - GPL-3.0+ + GPL-3.0-or-later Calamares Calamares Calamares diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index 37ea8356c..72aae9588 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -1,25 +1,64 @@ -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -# -# SPDX-License-Identifier: GPL-3.0+ -# License-Filename: LICENSE +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # ### +# +# This CMakeList handles the following i18n / language targets: +# +# - creating a translation test-tool +# - building the Python (gettext-based) translations +# - compiling all the Qt translations into a C++ file calamares-i18n.cxx +# - defines an OBJECT LIBRARY calamares-i18n for linking the compiled +# translations into an executable. + +include( CalamaresAddTranslations ) find_package(Qt5 COMPONENTS Xml) if( Qt5Xml_FOUND ) add_executable(txload txload.cpp) target_link_libraries(txload Qt5::Xml) endif() + +install_calamares_gettext_translations( python + SOURCE_DIR ${CMAKE_SOURCE_DIR}/lang/python + FILENAME python.mo + RENAME calamares-python.mo +) + +### TRANSLATIONS +# +# +set( TS_FILES "" ) +set( calamares_i18n_qrc_content "" ) + +# calamares and qt language files +foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) + foreach( tlsource "calamares_${lang}" "tz_${lang}" "kb_${lang}" ) + if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) + string( APPEND calamares_i18n_qrc_content "${tlsource}.qm\n" ) + list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) + endif() + endforeach() +endforeach() + +set( trans_file calamares_i18n ) +set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) +set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/calamares-i18n.cxx ) +set( CALAMARES_TRANSLATIONS_SOURCE ${trans_outfile} ) + +configure_file( ${CMAKE_SOURCE_DIR}/lang/calamares_i18n.qrc.in ${trans_infile} @ONLY ) + +qt5_add_translation(QM_FILES ${TS_FILES}) + +# Run the resource compiler (rcc_options should already be set) +add_custom_command( + OUTPUT ${trans_outfile} + COMMAND "${Qt5Core_RCC_EXECUTABLE}" + ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile} + MAIN_DEPENDENCY ${trans_infile} + DEPENDS ${QM_FILES} +) + +add_library(calamares-i18n OBJECT ${trans_outfile}) diff --git a/lang/calamares_ar.ts b/lang/calamares_ar.ts index 5c11e9bc7..ddd52d74e 100644 --- a/lang/calamares_ar.ts +++ b/lang/calamares_ar.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. <strong>بيئة الإقلاع</strong> لهذا النّظام.<br><br> يدعم فقط أنظمة x86 القديمة <strong>BIOS</strong>.<br>غالبًا ما تستخدم الأنظمة الجديدة <strong>EFI</strong>، ولكن ما زال بإمكانك إظهاره ك‍ BIOS إن بدأته بوضع التّوافقيّة. - + 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. بدأ هذا النّظام ببيئة إقلاع <strong>EFI</strong>.<br><br>لضبط البدء من بيئة EFI، يجب على المثبّت وضع تطبيق محمّل إقلاع، مثل <strong>GRUB</strong> أو <strong>systemd-boot</strong> على <strong>قسم نظام EFI</strong>. هذا الأمر آليّ، إلّا إن اخترت التّقسيم يدويًّا، حيث عليك اخيتاره أو إنشاؤه بنفسك. - + 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. بدأ هذا النّظام ببيئة إقلاع <strong>BIOS</strong>.<br><br>لضبط البدء من بيئة BIOS، يجب على المثبّت وضع تطبيق محمّل إقلاع، مثل <strong>GRUB</strong>، إمّا في بداية قسم أو في <strong>قطاع الإقلاع الرّئيس</strong> قرب بداية جدول التّقسيم (محبّذ). هذا الأمر آليّ، إلّا إن اخترت التّقسيم يدويًّا، حيث عليك اخيتاره أو إنشاؤه بنفسك. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 قطاع الإقلاع الرئيسي ل %1 - + Boot Partition قسم الإقلاع - + System Partition قسم النظام - + Do not install a boot loader لا تثبّت محمّل إقلاع - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form نموذج - + GlobalStorage التّخزين العموميّ - + JobQueue صفّ المهامّ - + Modules الوحدات - + Type: النوع: - - + + none لاشيء - + Interface: الواجهة: - - Tools - الأدوات + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet إعادة تحميل ورقة الأنماط - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information معلومات التّنقيح @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install ثبت @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done انتهى @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 يشغّل الأمر %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. يشغّل عمليّة %1. - + Bad working directory path مسار سيء لمجلد العمل - + Working directory %1 for python job %2 is not readable. لا يمكن القراءة من مجلد العمل %1 الخاص بعملية بايثون %2. - + Bad main script file ملفّ السّكربت الرّئيس سيّء. - + Main script file %1 for python job %2 is not readable. ملفّ السّكربت الرّئيس %1 لمهمّة بايثون %2 لا يمكن قراءته. - + Boost.Python error in job "%1". خطأ Boost.Python في العمل "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -240,7 +273,7 @@ - + (%n second(s)) @@ -252,7 +285,7 @@ - + System-requirements checking is complete. @@ -260,246 +293,237 @@ Calamares::ViewManager - - &Back - &رجوع - - - - &Next - &التالي - - - - &Cancel - &إلغاء - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - الغاء الـ تثبيت من دون احداث تغيير في النظام - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + فشل التثبيت - + + Error + خطأ + + + + &Yes + &نعم + + + + &No + &لا + + + + &Close + &اغلاق + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + الإستمرار في التثبيت؟ + + + Continue with installation? - + 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> - + + 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> + مثبّت %1 على وشك بإجراء تعديلات على قرصك لتثبيت %2.<br/><strong>لن تستطيع التّراجع عن هذا.</strong> + + + &Set up now - + + &Install now + &ثبت الأن + + + + Go &back + &إرجع + + + &Set up - + &Install &ثبت - + Setup is complete. Close the setup program. اكتمل الإعداد. أغلق برنامج الإعداد. - + + The installation is complete. Close the installer. + اكتمل التثبيت , اغلق المثبِت + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + الغاء الـ تثبيت من دون احداث تغيير في النظام + + + + &Next + &التالي + + + + &Back + &رجوع + + + + &Done + + + + + &Cancel + &إلغاء + + + Cancel setup? إلغاء الإعداد؟ - + Cancel installation? إلغاء التثبيت؟ - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. هل تريد حقًا إلغاء عملية الإعداد الحالية؟ سيتم إنهاء برنامج الإعداد وسيتم فقد جميع التغييرات. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. أتريد إلغاء عمليّة التّثبيت الحاليّة؟ سيخرج المثبّت وتضيع كلّ التّغييرات. - - - - &Yes - &نعم - - - - - &No - &لا - - - - &Close - &اغلاق - - - - Continue with setup? - الإستمرار في التثبيت؟ - - - - 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> - مثبّت %1 على وشك بإجراء تعديلات على قرصك لتثبيت %2.<br/><strong>لن تستطيع التّراجع عن هذا.</strong> - - - - &Install now - &ثبت الأن - - - - Go &back - &إرجع - - - - &Done - - - - - The installation is complete. Close the installer. - اكتمل التثبيت , اغلق المثبِت - - - - Error - خطأ - - - - Installation Failed - فشل التثبيت - CalamaresPython::Helper - + Unknown exception type نوع الاستثناء غير معروف - + unparseable Python error خطأ بايثون لا يمكن تحليله - + unparseable Python traceback تتبّع بايثون خلفيّ لا يمكن تحليله - + Unfetchable Python error. خطأ لا يمكن الحصول علية في بايثون. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &رجوع - - - - &Next - &التالي - - - - &Cancel - &إلغاء - - - + %1 Setup Program - + %1 Installer %1 المثبت + + + ChangeFilesystemLabelJob - - Show debug information - أظهر معلومات التّنقيح + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + فشل المثبّت في تحديث جدول التّقسيم على القرص '%1'. CheckerContainer - + Gathering system information... يجمع معلومات النّظام... @@ -507,157 +531,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form نموذج - - After: - بعد: - - - - Boot loader location: - مكان محمّل الإقلاع: - - - + Select storage de&vice: اختر &جهاز التّخزين: - - - - + + + + Current: الحاليّ: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + بعد: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>تقسيم يدويّ</strong><br/>يمكنك إنشاء أو تغيير حجم الأقسام بنفسك. + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>اختر قسمًا لتقليصه، ثمّ اسحب الشّريط السّفليّ لتغيير حجمه </strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + مكان محمّل الإقلاع: + + + <strong>Select a partition to install on</strong> <strong>اختر القسم حيث سيكون التّثبيت عليه</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. تعذّر إيجاد قسم النّظام EFI في أيّ مكان. فضلًا ارجع واستخدم التّقسيم اليدويّ لإعداد %1. - + The EFI system partition at %1 will be used for starting %2. قسم النّظام EFI على %1 سيُستخدم لبدء %2. - + EFI system partition: قسم نظام EFI: - + 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. لا يبدو أن في جهاز التّخزين أيّ نظام تشغيل. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>مسح القرص</strong><br/>هذا س<font color="red">يمسح</font> كلّ البيانات الموجودة في جهاز التّخزين المحدّد. - - 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. - على جهاز التّخزين %1. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ثبّت جنبًا إلى جنب</strong><br/>سيقلّص المثبّت قسمًا لتفريغ مساحة لِ‍ %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>استبدل قسمًا</strong><br/>يستبدل قسمًا مع %1 . - + + 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. + على جهاز التّخزين %1. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. + + + 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. على جهاز التّخزين هذا نظام تشغيل ذأصلًا. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. - + 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. على جهاز التّخزين هذا عدّة أنظمة تشغيل. ما الذي تودّ فعله؟<br/>يمكنك مراجعة الاختيارات وتأكيدها قبل تطبيقها على جهاز التّخزين. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -665,22 +729,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -688,18 +747,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -707,100 +766,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - لا يستوفِ هذا الحاسوب أدنى متطلّبات تثبيت %1.<br/>لا يمكن متابعة التّثبيت. <a href="#details">التّفاصيل...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - لا يستوفِ هذا الحاسوب بعض المتطلّبات المستحسنة لتثبيت %1.<br/>يمكن للمثبّت المتابعة، ولكن قد تكون بعض الميزات معطّلة. - - - - This program will ask you some questions and set up %2 on your computer. - سيطرح البرنامج بعض الأسئلة عليك ويعدّ %2 على حاسوبك. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - <h1>مرحبًا بك في مثبّت %1.</h1> - - - + Set keyboard model to %1.<br/> اضبط طراز لوحة المفتاتيح ليكون %1.<br/> - + Set keyboard layout to %1/%2. اضبط تخطيط لوحة المفاتيح إلى %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - اضبط المنطقة الزّمنيّة إلى %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + لا يستوفِ هذا الحاسوب أدنى متطلّبات تثبيت %1.<br/>لا يمكن متابعة التّثبيت. <a href="#details">التّفاصيل...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + لا يستوفِ هذا الحاسوب بعض المتطلّبات المستحسنة لتثبيت %1.<br/>يمكن للمثبّت المتابعة، ولكن قد تكون بعض الميزات معطّلة. + + + + This program will ask you some questions and set up %2 on your computer. + سيطرح البرنامج بعض الأسئلة عليك ويعدّ %2 على حاسوبك. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + اسم المستخدم طويل جدًّا. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + اسم المضيف قصير جدًّا. + + + + Your hostname is too long. + اسم المضيف طويل جدًّا. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + لا يوجد تطابق في كلمات السر! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + فشل التثبيت + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + الخلاصة + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + هذه نظرة عامّة عمّا سيحصل ما إن تبدأ عمليّة التّثبيت. + ContextualProcessJob - + Contextual Processes Job @@ -808,100 +1002,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition أنشئ قسمًا - - MiB - - - - - Partition &Type: - &نوع القسم: - - - - &Primary - أ&ساسيّ - - - - E&xtended - ممت&دّ - - - - Fi&le System: - نظام المل&فّات: - - - - LVM LV name - - - - - Flags: - الشّارات: - - - - &Mount Point: - نقطة ال&ضّمّ: - - - + Si&ze: الح&جم: - + + MiB + + + + + Partition &Type: + &نوع القسم: + + + + Primar&y + + + + + E&xtended + ممت&دّ + + + + Fi&le System: + نظام المل&فّات: + + + + LVM LV name + + + + + &Mount Point: + نقطة ال&ضّمّ: + + + + Flags: + الشّارات: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt تشفير - + Logical منطقيّ - + Primary أساسيّ - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. ينشئ قسم %1 جديد على %2. - + The installer failed to create partition on disk '%1'. فشل المثبّت في إنشاء قسم على القرص '%1'. @@ -909,27 +1139,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table أنشئ جدول تقسيم - + Creating a new partition table will delete all existing data on the disk. إنشاء جدول تقسيم جددي سيحذف كلّ البيانات على القرص. - + What kind of partition table do you want to create? ما نوع جدول التّقسيم الذي تريد إنشاءه؟ - + Master Boot Record (MBR) قطاع إقلاع رئيس (MBR) - + GUID Partition Table (GPT) جدول أقسام GUID ‏(GPT) @@ -937,22 +1167,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. أنشئ جدول تقسيم %1 جديد على %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). أنشئ جدول تقسيم <strong>%1</strong> جديد على <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. ينشئ جدول التّقسيم %1 الجديد على %2. - + The installer failed to create a partition table on %1. فشل المثبّت في إنشاء جدول تقسيم على %1. @@ -960,45 +1190,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 أنشئ المستخدم %1 - + Create user <strong>%1</strong>. أنشئ المستخدم <strong>%1</strong>. - - Creating user %1. - ينشئ المستخدم %1. + + Preserving home directory + - - Sudoers dir is not writable. - دليل Sudoers لا يمكن الكتابة فيه. + + + Creating user %1 + - - Cannot create sudoers file for writing. - تعذّر إنشاء ملفّ sudoers للكتابة. + + Configuring user %1 + - - Cannot chmod sudoers file. - تعذّر تغيير صلاحيّات ملفّ sudores. - - - - Cannot open groups file for reading. - تعذّر فتح ملفّ groups للقراءة. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -1006,22 +1232,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1029,18 +1255,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1048,22 +1274,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. احذف القسم %1 - + Delete partition <strong>%1</strong>. احذف القسم <strong>%1</strong>. - + Deleting partition %1. يحذف القسم %1 . - + The installer failed to delete partition %1. فشل المثبّت في حذف القسم %1. @@ -1071,46 +1297,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - نوع <strong>جدول التّقسيم</strong> على جهاز التّخزين المحدّد.<br><br>الطّريقة الوحيدة لتغيير النّوع هو بحذفه وإعادة إنشاء جدول التّقسيم من الصّفر، ممّا سيؤدّي إلى تدمير كلّ البيانات في جهاز التّخزين.<br>سيبقي هذا المثبّت جدول التّقسيم الحاليّ كما هو إلّا إن لم ترد ذلك.<br>إن لم تكن متأكّدًا، ف‍ GPT مستحسن للأنظمة الحديثة. - - - + This device has a <strong>%1</strong> partition table. للجهاز جدول تقسيم <strong>%1</strong>. - + 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. - + 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. <strong>تعذّر اكتشاف جدول تقسيم</strong> على جهاز التّخزين المحدّد.<br><br>إمّا أن لا جدول تقسيم في الجهاز، أو أنه معطوب أو نوعه مجهول.<br>يمكن لهذا المثبّت إنشاء جدول تقسيم جديد، آليًّا أ, عبر صفحة التّقسيم اليدويّ. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>هذا هو نوع جدول التّقسيم المستحسن للأنظمة الحديثة والتي تبدأ ببيئة إقلاع <strong>EFI</strong>. - + <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. + + + 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. + نوع <strong>جدول التّقسيم</strong> على جهاز التّخزين المحدّد.<br><br>الطّريقة الوحيدة لتغيير النّوع هو بحذفه وإعادة إنشاء جدول التّقسيم من الصّفر، ممّا سيؤدّي إلى تدمير كلّ البيانات في جهاز التّخزين.<br>سيبقي هذا المثبّت جدول التّقسيم الحاليّ كما هو إلّا إن لم ترد ذلك.<br>إن لم تكن متأكّدًا، ف‍ GPT مستحسن للأنظمة الحديثة. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1119,17 +1345,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1137,7 +1363,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1145,123 +1371,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition حرّر قسمًا موجودًا - - Content: - المحتوى: + + Con&tent: + - + &Keep - + Format هيّئ - + Warning: Formatting the partition will erase all existing data. تحذير: تهيئة القسم ستمسح بياناته كلّها. - + &Mount Point: نقطة ال&ضّمّ: - + Si&ze: الح&جم: - + MiB - + Fi&le System: نظام المل&فّات: - + Flags: الشّارات: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form نموذج - + En&crypt system ع&مِّ النّظام - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase عبارة المرور - + Confirm passphrase أكّد عبارة المرور - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information اضبط معلومات القسم - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. ثبّت %1 على قسم نظام %2 <strong>جديد</strong>. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - اضطب قسم %2 <strong>جديد</strong> بنقطة الضّمّ <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. ثبّت %2 على قسم النّظام %3 ‏<strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - اضبط القسم %3 <strong>%1</strong> بنقطة الضّمّ <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. ثبّت محمّل الإقلاع على <strong>%1</strong>. - + Setting up mount points. يضبط نقاط الضّمّ. @@ -1269,93 +1539,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form نموذج - + &Restart now أ&عد التّشغيل الآن - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>انتهينا.</h1><br/>لقد ثُبّت %1 على حاسوبك.<br/>يمكنك إعادة التّشغيل وفتح النّظام الجديد، أو متابعة استخدام بيئة %2 الحيّة. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish أنهِ + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + + Finish + أنهِ FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. يهيّء القسم %1 بنظام الملفّات %2. - + The installer failed to format partition %1 on disk '%2'. فشل المثبّت في تهيئة القسم %1 على القرص '%2'. @@ -1363,72 +1621,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source موصول بمصدر للطّاقة - + The system is not plugged in to a power source. النّظام ليس متّصلًا بمصدر للطّاقة. - + is connected to the Internet موصول بالإنترنت - + The system is not connected to the Internet. النّظام ليس موصولًا بالإنترنت - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. المثبّت لا يعمل بصلاحيّات المدير. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1436,7 +1694,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1444,25 +1702,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1470,7 +1728,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1478,7 +1736,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1486,17 +1744,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed كونسول غير مثبّت - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> ينفّذ السّكربت: &nbsp;<code>%1</code> @@ -1504,28 +1762,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script سكربت - - KeyboardPage - - - Set keyboard model to %1.<br/> - اضبط طراز لوحة المفتاتيح ليكون %1.<br/> - - - - Set keyboard layout to %1/%2. - اضبط تخطيط لوحة المفاتيح إلى %1/%2. - - KeyboardQmlViewStep - + Keyboard لوحة المفاتيح @@ -1533,7 +1778,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard لوحة المفاتيح @@ -1541,65 +1786,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting إعداد محليّة النّظام - + 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>. إعداد محليّة النّظام يؤثّر على لغة بعض عناصر واجهة مستخدم سطر الأوامر وأطقم محارفها.<br/>الإعداد الحاليّ هو <strong>%1</strong>. - + &Cancel &إلغاء - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form نموذج - + <h1>License Agreement</h1> - + I accept the terms and conditions above. أقبل الشّروط والأحكام أعلاه. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1607,7 +1875,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License الرّخصة @@ -1615,109 +1883,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>مشغّل %1</strong><br/>من%2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>مشغّل %1 للرّسوميّات</strong><br/><font color="Grey">من %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>ملحقة %1 للمتصّفح</strong><br/><font color="Grey">من %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>مرماز %1</strong><br/><font color="Grey">من %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>حزمة %1</strong><br/><font color="Grey">من %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">من %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: المنطقة: - + Zone: المجال: - - + + &Change... &غيّر... - - - Set timezone to %1/%2.<br/> - اضبط المنطقة الزّمنيّة إلى %1/%2.<br/> - LocaleQmlViewStep - + Location الموقع + + LocaleTests + + + Quit + + + LocaleViewStep - + Location الموقع @@ -1725,35 +1986,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1761,116 +2022,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. توليد معرف الجهاز - + Configuration Error خطأ في الضبط - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1878,7 +2153,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1886,17 +2161,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1904,260 +2179,353 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + + + + The password is shorter than %n characters + + + + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2165,40 +2533,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form نموذج - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2206,12 +2582,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name الاسم - + Description الوصف @@ -2219,17 +2595,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form نموذج - + Keyboard Model: طراز لوحة المفاتيح: - + Type here to test your keyboard اكتب هنا لتجرّب لوحة المفاتيح @@ -2237,96 +2613,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form نموذج - + What is your name? ما اسمك؟ - - What name do you want to use to log in? - ما الاسم الذي تريده لتلج به؟ - - - - Choose a password to keep your account safe. - اختر كلمة مرور لإبقاء حسابك آمنًا. - - - - - <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> - <small>أدخل ذات كلمة المرور مرّتين، للتأكّد من عدم وجود أخطاء طباعيّة. تتكوّن كلمة المرور الجيّدة من خليط أحرف وأرقام وعلامات ترقيم، وطول لا يقلّ عن 8 محارف. كذلك يحبّذ تغييرها دوريًّا لزيادة الأمان.</small> - - - - What is the name of this computer? - ما اسم هذا الحاسوب؟ - - - + Your Full Name - + + What name do you want to use to log in? + ما الاسم الذي تريده لتلج به؟ + + + login - + + What is the name of this computer? + ما اسم هذا الحاسوب؟ + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>سيُستخدم الاسم لإظهار الحاسوب للآخرين عبر الشّبكة.</small> - + Computer Name - - + + Choose a password to keep your account safe. + اختر كلمة مرور لإبقاء حسابك آمنًا. + + + + + <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> + <small>أدخل ذات كلمة المرور مرّتين، للتأكّد من عدم وجود أخطاء طباعيّة. تتكوّن كلمة المرور الجيّدة من خليط أحرف وأرقام وعلامات ترقيم، وطول لا يقلّ عن 8 محارف. كذلك يحبّذ تغييرها دوريًّا لزيادة الأمان.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. لِج آليًّا بدون طلب كلمة مرور. - + Use the same password for the administrator account. استخدم نفس كلمة المرور لحساب المدير. - + Choose a password for the administrator account. اختر كلمة مرور لحساب المدير. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>أدخل ذات كلمة المرور مرّتين، للتّأكد من عدم وجود أخطاء طباعيّة.</small> @@ -2334,42 +2710,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root الجذر - + Home المنزل - + Boot الإقلاع - + EFI system نظام EFI - + Swap التّبديل - + New partition for %1 قسم جديد ل‍ %1 - + New partition قسم جديد - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2378,34 +2754,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space المساحة الحرّة - - + + New partition قسم جديد - + Name الاسم - + File System نظام الملفّات - + + File System Label + + + + Mount Point نقطة الضّمّ - + Size الحجم @@ -2413,77 +2794,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form نموذج - + Storage de&vice: ج&هاز التّخزين: - + &Revert All Changes ا&عكس كلّ التّغييرات - + New Partition &Table &جدول تقسيم جديد - + Cre&ate - + &Edit ح&رّر - + &Delete ا&حذف - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? أمتأكّد من إنشاء جدول تقسيم جديد على %1؟ - + Can not create new partition - + 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. @@ -2491,117 +2872,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... جاري جمع معلومات عن النظام... - + Partitions الأقسام - - Install %1 <strong>alongside</strong> another operating system. - ثبّت %1 <strong>جنبًا إلى جنب</strong> مع نظام تشغيل آخر. - - - - <strong>Erase</strong> disk and install %1. - <strong>امسح</strong> القرص وثبّت %1. - - - - <strong>Replace</strong> a partition with %1. - <strong>استبدل</strong> قسمًا ب‍ %1. - - - - <strong>Manual</strong> partitioning. - تقسيم <strong>يدويّ</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>امسح</strong> القرص <strong>%2</strong> (%3) وثبّت %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>استبدل</strong> قسمًا على القرص <strong>%2</strong> (%3) ب‍ %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). + + Partitioning is configured to <b>always</b> fail. - - Disk <strong>%1</strong> (%2) + + No partitions will be changed. - + Current: الحاليّ: - + After: بعد: - + No EFI system partition configured لم يُضبط أيّ قسم نظام EFI - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set - راية قسم نظام EFI غير مضبوطة - - - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2609,13 +2980,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2623,17 +2994,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form نموذج - + 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. - + 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. @@ -2641,7 +3012,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2649,17 +3020,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2667,65 +3038,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. معاملات نداء المهمة سيّئة. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2733,89 +3104,94 @@ Output: QObject - - Default Keyboard Model - نوع لوحة المفاتيح الافتراضي - - - - - Default - الافتراضي - - - - unknown - مجهول - - - - extended - ممتدّ - - - - unformatted - غير مهيّأ - - - - swap - - - - - Unpartitioned space or unknown partition table - مساحة غير مقسّمة أو جدول تقسيم مجهول - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown + مجهول + + + + extended + ممتدّ + + + + unformatted + غير مهيّأ + + + + swap - - No description provided. - + + + Default + الافتراضي - - - - + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + مساحة غير مقسّمة أو جدول تقسيم مجهول + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system إزالة المستخدم المباشر من النظام الهدف @@ -2823,18 +3199,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2842,143 +3218,158 @@ Output: ReplaceWidget - + Form نموذج - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. اختر مكان تثبيت %1.<br/><font color="red">تحذير: </font>سيحذف هذا كلّ الملفّات في القسم المحدّد. - + The selected item does not appear to be a valid partition. لا يبدو العنصر المحدّد قسمًا صالحًا. - + %1 cannot be installed on empty space. Please select an existing partition. لا يمكن تثبيت %1 في مساحة فارغة. فضلًا اختر قسمًا موجودًا. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. لا يمكن تثبيت %1 على قسم ممتدّ. فضلًا اختر قسمًا أساسيًّا أو ثانويًّا. - + %1 cannot be installed on this partition. لا يمكن تثبيت %1 على هذا القسم. - + Data partition (%1) قسم البيانات (%1) - + Unknown system partition (%1) قسم نظام مجهول (%1) - + %1 system partition (%2) قسم نظام %1 ‏(%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>القسم %1 صغير جدًّا ل‍ %2. فضلًا اختر قسمًا بحجم %3 غ.بايت على الأقلّ. - + <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. <strong>%2</strong><br/><br/>تعذّر إيجاد قسم النّظام EFI في أيّ مكان. فضلًا ارجع واستخدم التّقسيم اليدويّ لإعداد %1. - - - + + + <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. <strong>%3</strong><br/><br/>سيُثبّت %1 على %2.<br/><font color="red">تحذير: </font>ستفقد كلّ البيانات على القسم %2. - + The EFI system partition at %1 will be used for starting %2. سيُستخدم قسم نظام EFI على %1 لبدء %2. - + EFI system partition: قسم نظام EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2986,22 +3377,22 @@ Output: ResizePartitionJob - + Resize partition %1. غيّر حجم القسم %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. فشل المثبّت في تغيير حجم القسم %1 على القرص '%2'. @@ -3009,7 +3400,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3017,18 +3408,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3036,53 +3427,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: لأفضل النّتائج، تحقّق من أن الحاسوب: - + System requirements متطلّبات النّظام - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - لا يستوفِ هذا الحاسوب أدنى متطلّبات تثبيت %1.<br/>لا يمكن متابعة التّثبيت. <a href="#details">التّفاصيل...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - لا يستوفِ هذا الحاسوب بعض المتطلّبات المستحسنة لتثبيت %1.<br/>يمكن للمثبّت المتابعة، ولكن قد تكون بعض الميزات معطّلة. - - - - This program will ask you some questions and set up %2 on your computer. - سيطرح البرنامج بعض الأسئلة عليك ويعدّ %2 على حاسوبك. - - ScanningDialog - + Scanning storage devices... يفحص أجهزة التّخزين... - + Partitioning يقسّم @@ -3090,29 +3453,29 @@ Output: SetHostNameJob - + Set hostname %1 اضبط اسم المضيف %1 - + Set hostname <strong>%1</strong>. اضبط اسم المضيف <strong>%1</strong> . - + Setting hostname %1. يضبط اسم المضيف 1%. + - Internal Error خطأ داخلي - - + + Cannot write hostname to target system تعذّرت كتابة اسم المضيف إلى النّظام الهدف @@ -3120,29 +3483,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 اضبك طراز لوحة المفتايح إلى %1، والتّخطيط إلى %2-%3 - + Failed to write keyboard configuration for the virtual console. فشلت كتابة ضبط لوحة المفاتيح للطرفيّة الوهميّة. - - - + + + Failed to write to %1 فشلت الكتابة إلى %1 - + Failed to write keyboard configuration for X11. فشلت كتابة ضبط لوحة المفاتيح ل‍ X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3150,82 +3513,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. اضبط رايات القسم %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. يمحي رايات القسم <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. يمحي رايات القسم <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. يضبط رايات <strong>%2</strong> القسم<strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. فشل المثبّت في ضبط رايات القسم %1. @@ -3233,42 +3596,42 @@ Output: SetPasswordJob - + Set password for user %1 اضبط كلمة مرور للمستخدم %1 - + Setting password for user %1. يضبط كلمة مرور للمستخدم %1. - + Bad destination system path. مسار النّظام المقصد سيّء. - + rootMountPoint is %1 rootMountPoint هو %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. تعذّر ضبط كلمة مرور للمستخدم %1. - + usermod terminated with error code %1. أُنهي usermod برمز الخطأ %1. @@ -3276,45 +3639,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 اضبط المنطقة الزّمنيّة إلى %1/%2 - + Cannot access selected timezone path. لا يمكن الدخول إلى مسار المنطقة الزمنية المختارة. - + Bad path: %1 المسار سيّء: %1 - + Cannot set timezone. لا يمكن تعيين المنطقة الزمنية. - + Link creation failed, target: %1; link name: %2 فشل إنشاء الوصلة، الهدف: %1، اسم الوصلة: %2 - + Cannot set timezone, تعذّر ضبط المنطقة الزّمنيّة، - + Cannot open /etc/timezone for writing تعذّر فتح ‎/etc/timezone للكتابة + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + تعذّر تغيير صلاحيّات ملفّ sudores. + + + + Cannot create sudoers file for writing. + تعذّر إنشاء ملفّ sudoers للكتابة. + + ShellProcessJob - + Shell Processes Job @@ -3322,81 +3722,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. - هذه نظرة عامّة عمّا سيحصل ما إن تبدأ عمليّة التّثبيت. + + &Yes + &نعم - - - SummaryViewStep - - Summary - الخلاصة + + &No + &لا + + + + &Cancel + &إلغاء + + + + &Close + &اغلاق TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3404,106 +3840,97 @@ Output: TrackingPage - + Form نموذج - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + الغاء تحميل ملف النظام + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - اسم المستخدم طويل جدًّا. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - اسم المضيف قصير جدًّا. - - - - Your hostname is too long. - اسم المضيف طويل جدًّا. - - - - Your passwords do not match! - لا يوجد تطابق في كلمات السر! + + Users + المستخدمين UsersViewStep - + Users المستخدمين @@ -3511,65 +3938,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value القيمة VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3577,106 +4006,106 @@ Output: WelcomePage - + Form الصيغة - - + + Select application and system language + &About + &حول + + + Open donations website - + &Donate - + Open help and support website + &Support + &الدعم + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &ملاحظات الإصدار - - - &Known issues &مشاكل معروفة - - &Support - &الدعم - - - - &About - &حول - - - - <h1>Welcome to the %1 installer.</h1> - <h1>مرحبًا بك في مثبّت %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> + + Open release notes website - + + &Release notes + &ملاحظات الإصدار + + + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + <h1>مرحبًا بك في مثبّت %1.</h1> + + + + %1 support + %1 الدعم + + + About %1 setup - + About %1 installer حول 1% المثبت - + <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. - - - %1 support - %1 الدعم - WelcomeQmlViewStep - + Welcome مرحبا بك @@ -3684,31 +4113,157 @@ Output: WelcomeViewStep - + Welcome مرحبا بك + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + خطأ في الضبط + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + أظهر معلومات التّنقيح + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3716,86 +4271,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + طراز لوحة المفاتيح: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + اكتب هنا لتجرّب لوحة المفاتيح - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + ما اسمك؟ + + + + Your Full Name + + + + + What name do you want to use to log in? + ما الاسم الذي تريده لتلج به؟ + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + ما اسم هذا الحاسوب؟ + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + اختر كلمة مرور لإبقاء حسابك آمنًا. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + استخدم نفس كلمة المرور لحساب المدير. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_as.ts b/lang/calamares_as.ts index 637835e42..fad150096 100644 --- a/lang/calamares_as.ts +++ b/lang/calamares_as.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. এইটো চিছটেমৰ <strong>বুট পৰিবেশ</strong>।<br><br>পুৰণি x86 চিছটেমবোৰে কেৱল <strong>BIOSক</strong>সমৰ্থন কৰে।<br>আধুনিক চিছটেমে সাধাৰণতে<strong>EFI</strong> ব্যৱহাৰ কৰে, কিন্তু সামঞ্জস্যতা মোডত আৰম্ভ হ'লে BIOS দেখাব পাৰে। - + 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. চিছটেমটো <strong>EFI</strong> বুট পৰিবেশত আৰম্ভ হৈছিল।<br><br>EFI পৰিবেশৰ পৰা স্টাৰ্তআপ কন্ফিগাৰ কৰিবলৈ ইনস্তলাৰটোৱে <strong>GRUBৰ</strong> দৰে বুট লোডাৰ বা এখন <strong>EFI চিছ্টেম বিভাজনত</strong> <strong>systemd-boot</strong> প্ৰয়োগ কৰিব লাগিব। এইটো প্ৰক্ৰিযা স্বত: স্ফুৰ্ত ভাবে হ'ব যদিহে আপুনি নিজে মেনুৱেল বিভজন চয়ন নকৰে, য'ত আপুনি নিজে এখন EFI বিভাজন বনাব লাগিব। - + 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. চিছটেমটো <strong>BIOS</strong> বুট পৰিবেশত আৰম্ভ হৈছিল।<br><br>BIOS পৰিবেশ এটাৰ পৰা স্টাৰ্তআপ কন্ফিগাৰ কৰিবলৈ ইনস্তলাৰটোৱে <strong>GRUBৰ</strong> দৰে বুট লোডাৰ ইনস্তল​ কৰিব লাগিব বিভাজনৰ আৰম্ভনিতে বা বিভাজন তালিকাৰ আৰম্ভনিৰ কাষৰ <strong>প্ৰধান বুত্ নথিত</strong> (অগ্ৰাধিকাৰ ভিত্তিত)। এইটো প্ৰক্ৰিযা স্বত: স্ফুৰ্ত ভাবে হ'ব যদিহে আপুনি নিজে মেনুৱেল বিভজন চয়ন নকৰে, য'ত আপুনি নিজে বুত্ লোডাৰ চেত্ আপ কৰিব লাগিব। @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1ৰ প্ৰধান বুত্ নথি - + Boot Partition বুত্ বিভাজন - + System Partition চিছ্তেম বিভাজন - + Do not install a boot loader বুত্ লোডাৰ ইনস্তল কৰিব নালাগে - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page খালি পৃষ্ঠা @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form ৰূপ - + GlobalStorage গোলকীয় স্টোৰেজ - + JobQueue কার্য্য লানি - + Modules মডিউলবোৰ - + Type: প্ৰকাৰ: - - + + none একো নাই - + Interface: ইন্টাৰফেচ: - - Tools - সঁজুলি + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet স্টাইলছীট পুনৰ লোড্ কৰক - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree ৱিজেত্ ত্ৰি - + Debug information ডিবাগ তথ্য @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up চেত্ আপ - + Install ইনস্তল @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) কার্য্য বিফল হল (%1) - + Programmed job failure was explicitly requested. প্ৰগ্ৰেম কৰা কাৰ্য্যৰ বিফলতা স্পষ্টভাবে অনুৰোধ কৰা হৈছিল। @@ -143,7 +171,7 @@ Calamares::JobThread - + Done হৈ গ'ল @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) উদাহৰণ কার্য্য (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. গন্তব্য চিছটেমত '%1' কমাণ্ড চলাওক। - + Run command '%1'. '%1' কমাণ্ড চলাওক। - + Running command %1 %2 %1%2 কমাণ্ড চলি আছে @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 কাৰ্য চলি আছে। - + Bad working directory path বেয়া কৰ্মৰত ডাইৰেক্টৰী পথ - + Working directory %1 for python job %2 is not readable. %2 পাইথন কাৰ্য্যৰ %1 কৰ্মৰত ডাইৰেক্টৰী পঢ়িব নোৱাৰি।​ - + Bad main script file বেয়া মুখ্য লিপি ফাইল - + Main script file %1 for python job %2 is not readable. %2 পাইথন কাৰ্য্যৰ %1 মূখ্য লিপি ফাইল পঢ়িব নোৱাৰি। - + Boost.Python error in job "%1". "%1" কাৰ্য্যত Boost.Python ত্ৰুটি। @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + ভৰ্টিকৰন ... - + QML Step <i>%1</i>. - + QML Step <i>%1</i>. - + Loading failed. - + ভৰ্টিকৰন বিফল | Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <i>%1</i> মডিউল পৰীক্ষণৰ বাবে আৱশ্যকতাবোৰ সম্পূৰ্ণ হ'ল। + - + Waiting for %n module(s). Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. চিছ্তেমৰ বাবে প্রয়োজনীয় পৰীক্ষণ সম্পূর্ণ হ'ল। @@ -252,247 +285,237 @@ Calamares::ViewManager - - &Back - পাছলৈ (&B) - - - - &Next - পৰবর্তী (&N) - - - - &Cancel - বাতিল কৰক (&C) - - - - Cancel setup without changing the system. - চিছ্তেম সলনি নকৰাকৈ চেত্ আপ বাতিল কৰক। - - - - Cancel installation without changing the system. - চিছ্তেম সলনি নকৰাকৈ ইনস্তলেচন বাতিল কৰক। - - - + Setup Failed চেত্ আপ বিফল হ'ল - - Would you like to paste the install log to the web? - আপুনি ৱেবত ইণ্স্টল ল'গ পেস্ট কৰিব বিচাৰে নেকি? + + Installation Failed + ইনস্তলেচন বিফল হ'ল - + + Error + ত্ৰুটি + + + + &Yes + হয় (&Y) + + + + &No + নহয় (&N) + + + + &Close + বন্ধ (&C) + + + Install Log Paste URL ইনস্তল​ ল'গ পেস্ট URL - + The upload was unsuccessful. No web-paste was done. আপলোড বিফল হৈছিল। কোনো ৱেব-পেস্ট কৰা হোৱা নাছিল। - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed কেলামাৰেচৰ আৰম্ভণি বিফল হ'ল - + %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. %1 ইনস্তল কৰিব পৰা নগ'ল। কেলামাৰেচে সকলোবোৰ সংৰূপ দিয়া মডিউল লোড্ কৰাত সফল নহ'ল। এইটো এটা আপোনাৰ ডিষ্ট্ৰিবিউচনে কি ধৰণে কেলামাৰেচ ব্যৱহাৰ কৰিছে, সেই সম্বন্ধীয় সমস্যা। - + <br/>The following modules could not be loaded: <br/>নিম্নোক্ত মডিউলবোৰ লোড্ কৰিৱ পৰা নগ'ল: - + + Continue with setup? + চেত্ আপ অব্যাহত ৰাখিব? + + + Continue with installation? ইন্স্তলেচন অব্যাহত ৰাখিব? - + 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> %1 চেত্ আপ প্ৰগ্ৰেমটোৱে %2 চেত্ আপ কৰিবলৈ আপোনাৰ ডিস্কত সালসলনি কৰিব।<br/><strong>আপুনি এইবোৰ পিছত পূৰ্বলৈ সলনি কৰিব নোৱাৰিব।</strong> - + + 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> + %1 ইনস্তলাৰটোৱে %2 ইনস্তল কৰিবলৈ আপোনাৰ ডিস্কত সালসলনি কৰিব।<br/><strong>আপুনি এইবোৰ পিছত পূৰ্বলৈ সলনি কৰিব নোৱাৰিব।</strong> + + + &Set up now এতিয়া চেত্ আপ কৰক (&S) - + + &Install now + এতিয়া ইনস্তল কৰক (&I) + + + + Go &back + উভতি যাওক (&b) + + + &Set up চেত্ আপ কৰক (&S) - + &Install ইনস্তল (&I) - + Setup is complete. Close the setup program. চেত্ আপ সম্পূৰ্ণ হ'ল। প্ৰোগ্ৰেম বন্ধ কৰক। - + + The installation is complete. Close the installer. + ইনস্তলেচন সম্পূৰ্ণ হ'ল। ইন্স্তলাৰ বন্ধ কৰক। + + + + Cancel setup without changing the system. + চিছ্তেম সলনি নকৰাকৈ চেত্ আপ বাতিল কৰক। + + + + Cancel installation without changing the system. + চিছ্তেম সলনি নকৰাকৈ ইনস্তলেচন বাতিল কৰক। + + + + &Next + পৰবর্তী (&N) + + + + &Back + পাছলৈ (&B) + + + + &Done + হৈ গ'ল (&D) + + + + &Cancel + বাতিল কৰক (&C) + + + Cancel setup? চেত্ আপ বাতিল কৰিব? - + Cancel installation? ইনস্তলেছন বাতিল কৰিব? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. সচাকৈয়ে চলিত চেত্ আপ প্ৰক্ৰিয়া বাতিল কৰিব বিচাৰে নেকি? চেত্ আপ প্ৰোগ্ৰেম বন্ধ হ'ব আৰু গোটেই সলনিবোৰ নোহোৱা হৈ যাব। - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. সচাকৈয়ে চলিত ইনস্তল প্ৰক্ৰিয়া বাতিল কৰিব বিচাৰে নেকি? ইনস্তলাৰ বন্ধ হ'ব আৰু গোটেই সলনিবোৰ নোহোৱা হৈ যাব। - - - - &Yes - হয় (&Y) - - - - - &No - নহয় (&N) - - - - &Close - বন্ধ (&C) - - - - Continue with setup? - চেত্ আপ অব্যাহত ৰাখিব? - - - - 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> - %1 ইনস্তলাৰটোৱে %2 ইনস্তল কৰিবলৈ আপোনাৰ ডিস্কত সালসলনি কৰিব।<br/><strong>আপুনি এইবোৰ পিছত পূৰ্বলৈ সলনি কৰিব নোৱাৰিব।</strong> - - - - &Install now - এতিয়া ইনস্তল কৰক (&I) - - - - Go &back - উভতি যাওক (&b) - - - - &Done - হৈ গ'ল (&D) - - - - The installation is complete. Close the installer. - ইনস্তলেচন সম্পূৰ্ণ হ'ল। ইন্স্তলাৰ বন্ধ কৰক। - - - - Error - ত্ৰুটি - - - - Installation Failed - ইনস্তলেচন বিফল হ'ল - CalamaresPython::Helper - + Unknown exception type অপৰিচিত প্ৰকাৰৰ ব্যতিক্রম - + unparseable Python error অপ্ৰাপ্য পাইথন ত্ৰুটি - + unparseable Python traceback অপ্ৰাপ্য পাইথন ত্ৰেচবেক - + Unfetchable Python error. ঢুকি নোপোৱা পাইথন ক্ৰুটি। - - CalamaresUtils - - - Install log posted to: -%1 - ইনস্তল​​ ল'গ পোস্ট কৰা হৈছে: -%1 - - CalamaresWindow - - &Back - পাছলৈ (&B) - - - - &Next - পৰবর্তী (&N) - - - - &Cancel - বাতিল কৰক (&C) - - - + %1 Setup Program %1 চেত্ আপ প্ৰোগ্ৰেম - + %1 Installer %1 ইনস্তলাৰ + + + ChangeFilesystemLabelJob - - Show debug information - দিবাগ তথ্য দেখাওক + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + CheckerContainer - + Gathering system information... চিছ্তেম তথ্য সংগ্ৰহ কৰা হৈ আছে... @@ -500,157 +523,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form ৰূপ - - After: - পিছত: - - - - Boot loader location: - বুত্ লোডাৰৰ অৱস্থান: - - - + Select storage de&vice: স্তোৰেজ ডিভাইচ চয়ণ কৰক (&v): - - - - + + + + Current: বর্তমান: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + পিছত: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>মেনুৱেল বিভাজন</strong><br/>আপুনি নিজে বিভাজন বনাব বা বিভজনৰ আয়তন সলনি কৰিব পাৰে। + + + Reuse %1 as home partition for %2. %1ক %2ৰ গৃহ বিভাজন হিচাপে পুনৰ ব্যৱহাৰ কৰক। - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>আয়তন সলনি কৰিবলৈ বিভাজন বাচনি কৰক, তাৰ পিছত তলৰ "বাৰ্" ডালৰ সহায়ত আয়তন চেত্ কৰক</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 বিভজনক সৰু কৰি %2MiB কৰা হ'ব আৰু %4ৰ বাবে %3MiBৰ নতুন বিভজন বনোৱা হ'ব। - + + Boot loader location: + বুত্ লোডাৰৰ অৱস্থান: + + + <strong>Select a partition to install on</strong> <strong>ইনস্তল​ কৰিবলৈ এখন বিভাজন চয়ন কৰক</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. এই চিছটেমত এখনো EFI চিছটেম বিভাজন কতো পোৱা নগ'ল। অনুগ্ৰহ কৰি উভতি যাওক আৰু মেনুৱেল বিভাজন প্ৰক্ৰিয়া দ্বাৰা %1 চেত্ আপ কৰক। - + The EFI system partition at %1 will be used for starting %2. %1ত থকা EFI চিছটেম বিভাজনটো %2ক আৰম্ভ কৰাৰ বাবে ব্যৱহাৰ কৰা হ'ব। - + EFI system partition: EFI চিছটেম বিভাজন: - + 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. এইটো ষ্টোৰেজ ডিভাইচত কোনো অপাৰেটিং চিছটেম নাই যেন লাগে। আপুনি কি কৰিব বিচাৰে?<br/>আপুনি ষ্টোৰেজ ডিভাইচটোত কিবা সলনি কৰাৰ আগতে পুনৰীক্ষণ আৰু চয়ন নিশ্চিত কৰিব পাৰিব। - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ডিস্কত থকা গোটেই ডাটা আতৰাওক।</strong><br/> ইয়াৰ দ্ৱাৰা ষ্টোৰেজ ডিভাইছত বৰ্তমান থকা সকলো ডাটা <font color="red">বিলোপ</font> কৰা হ'ব। - - 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. - এইটো ষ্টোৰেজ ডিভাইচত %1 আছে। <br/> আপুনি কি কৰিব বিচাৰে? ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। - - - - No Swap - কোনো স্ৱেপ নাই - - - - Reuse Swap - স্ৱেপ পুনৰ ব্যৱহাৰ কৰক - - - - Swap (no Hibernate) - স্ৱেপ (হাইবাৰনেট নোহোৱাকৈ) - - - - Swap (with Hibernate) - স্ৱোআপ (হাইবাৰনেটৰ সৈতে) - - - - Swap to file - ফাইললৈ স্ৱোআপ কৰক। - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>সমান্তৰালভাৱে ইনস্তল কৰক</strong><br/> ইনস্তলাৰটোৱে %1ক ইনস্তল​ কৰাৰ বাবে এখন বিভাজন সৰু কৰি দিব। - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>বিভাজন সলনি কৰক</strong> <br/>এখন বিভাজনক % ৰ্ সৈতে সলনি কৰক। - + + 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. + এইটো ষ্টোৰেজ ডিভাইচত %1 আছে। <br/> আপুনি কি কৰিব বিচাৰে? ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। + + + 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. এইটো ষ্টোৰেজ ডিভাইচত ইতিমধ্যে এটা অপাৰেটিং চিছটেম আছে। আপুনি কি কৰিব বিচাৰে? <br/>ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। - + 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. এইটো ষ্টোৰেজ ডিভাইচত একাধিক এটা অপাৰেটিং চিছটেম আছে। আপুনি কি কৰিব বিচাৰে? 1ষ্টোৰেজ ডিভাইচটোত যিকোনো সলনি কৰাৰ আগত আপুনি পুনৰীক্ষণ আৰু সলনি কৰিব পাৰিব। + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + কোনো স্ৱেপ নাই + + + + Reuse Swap + স্ৱেপ পুনৰ ব্যৱহাৰ কৰক + + + + Swap (no Hibernate) + স্ৱেপ (হাইবাৰনেট নোহোৱাকৈ) + + + + Swap (with Hibernate) + স্ৱোআপ (হাইবাৰনেটৰ সৈতে) + + + + Swap to file + ফাইললৈ স্ৱোআপ কৰক। + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 %1ত বিভাজন কৰ্য্যৰ বাবে মাউণ্ট্ আতৰাওক - + Clearing mounts for partitioning operations on %1. %1ত বিভাজন কৰ্য্যৰ বাবে মাউণ্ট্ আতৰ কৰি আছে। - + Cleared all mounts for %1 %1ৰ গোটেই মাউন্ত আতৰোৱা হ'ল @@ -658,22 +721,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. গোটেই অস্থায়ী মাউন্ত আঁতৰাওক। - + Clearing all temporary mounts. গোটেই অস্থায়ী মাউন্ত আঁতৰোৱা হৈ আছে। - - Cannot get list of temporary mounts. - অস্থায়ী মাউন্তৰ সূচী পোৱা নগ'ল। - - - + Cleared all temporary mounts. গোটেই অস্থায়ী মাউন্ত আঁতৰোৱা হ'ল। @@ -681,18 +739,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. কমাণ্ড চলাব পৰা নগ'ল। - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. কমাণ্ডটো হ'স্ট পৰিৱেশত চলে আৰু তাৰ বাবে ৰুট পথ জানাটো আৱশ্যক, কিন্তু rootMountPointৰ বিষয়ে একো উল্লেখ নাই। - + The command needs to know the user's name, but no username is defined. কমাণ্ডটোৱে ব্যৱহাৰকাৰীৰ নাম জনাটো আৱশ্যক, কিন্তু কোনো ব্যৱহাৰকাৰীৰ নাম উল্লেখ নাই। @@ -700,100 +758,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - %1 চেত্ আপৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - %1 ইনস্তলচেন​ৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>ইনস্তলচেন​ প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - %1 চেত্ আপৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - %1 ইনস্তলচেন​ৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। ইনস্তলচেন​ অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। - - - - This program will ask you some questions and set up %2 on your computer. - এইটো প্ৰগ্ৰেমে অপোনাক কিছুমান প্ৰশ্ন সুধিব আৰু অপোনাৰ কম্পিউটাৰত %2 স্থাপন কৰিব। - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1ৰ কেলামাৰেচ চেত্ আপ প্ৰগ্ৰামলৈ আদৰণি জনাইছো।</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1> %1 চেত্ আপলৈ আদৰণি জনাইছো।</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1ৰ কেলামাৰেচ ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> - - - + Set keyboard model to %1.<br/> কিবোৰ্ডৰ মডেল %1ত চেট্ কৰক।<br/> - + Set keyboard layout to %1/%2. কিবোৰ্ডৰ লেআউট %1/%2 চেট্ কৰক। - + + Set timezone to %1/%2. + সময় অঞ্চলৰ সিদ্ধান্ত কৰক %`1%2 + + + The system language will be set to %1. চিছটেমৰ ভাষা %1লৈ সলনি কৰা হ'ব। - + The numbers and dates locale will be set to %1. সংখ্যা আৰু তাৰিখ স্থানীয় %1লৈ সলনি কৰা হ'ব। - - Set timezone to %1/%2.<br/> - সময় জ'ন  %1/%2লৈ সলনি কৰা হ'ল।<br/> - - - + Network Installation. (Disabled: Incorrect configuration) নেটৱৰ্ক ইনস্তলেচন। (নিস্ক্ৰিয়: ভুল কনফিগাৰেচন) - + Network Installation. (Disabled: Received invalid groups data) নেটৱৰ্ক্ ইনস্তলেচন। (নিস্ক্ৰিয়: অকার্যকৰ গোটৰ তথ্য পোৱা গ'ল) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + পেকেজ বাচনি + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) নেটৱৰ্ক্ ইনস্তলেচন। (নিস্ক্ৰিয়: পেকেজ সুচী বিচাৰি পোৱা নগ'ল, আপোনাৰ নেটৱৰ্ক্ সংযোগ পৰীক্ষা কৰক) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + %1 চেত্ আপৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + %1 ইনস্তলচেন​ৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>ইনস্তলচেন​ প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + %1 চেত্ আপৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + %1 ইনস্তলচেন​ৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। ইনস্তলচেন​ অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। + + + + This program will ask you some questions and set up %2 on your computer. + এইটো প্ৰগ্ৰেমে অপোনাক কিছুমান প্ৰশ্ন সুধিব আৰু অপোনাৰ কম্পিউটাৰত %2 স্থাপন কৰিব। + + + + <h1>Welcome to the Calamares setup program for %1</h1> + %1ৰ Calamares চেত্ আপ প্ৰগ্ৰামলৈ আদৰণি জনাইছো। + + + + <h1>Welcome to %1 setup</h1> + <h1> %1 চেত্ আপলৈ আদৰণি জনাইছো।</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>%1ৰ কেলামাৰেচ ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> + + + + Your username is too long. + আপোনাৰ ইউজাৰ নাম বহুত দীঘল। + + + + '%1' is not allowed as username. + '%1'ক ব্যৱহাৰকাৰীৰ নাম হিচাপে ব্যৱহাৰ কৰা অবধ্য | + + + + Your username must start with a lowercase letter or underscore. + আপোনাৰ ব্যৱহাৰকাৰী নাম lowercase বৰ্ণ বা underscoreৰে আৰম্ভ হ'ব লাগিব। + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + কেৱল lowercase বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। + + + + Your hostname is too short. + আপোনাৰ হ'স্ট্ নাম বহুত ছুটি। + + + + Your hostname is too long. + আপোনাৰ হ'স্ট্ নাম বহুত দীঘল। + + + + '%1' is not allowed as hostname. + '%1'ক আয়োজকৰ নাম হিচাপে ব্যৱহাৰ কৰা অবধ্য | + + + + Only letters, numbers, underscore and hyphen are allowed. + কেৱল বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। + + + + Your passwords do not match! + আপোনাৰ পাছৱৰ্ডকেইটাৰ মিল নাই! + + + + OK! + + + + + Setup Failed + চেত্ আপ বিফল হ'ল + + + + Installation Failed + ইনস্তলেচন বিফল হ'ল + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + চেত্ আপ সম্পুৰ্ণ হৈছে + + + + Installation Complete + ইনস্তলচেন সম্পুৰ্ণ হ'ল + + + + The setup of %1 is complete. + %1ৰ চেত্ আপ সম্পুৰ্ণ হৈছে। + + + + The installation of %1 is complete. + %1ৰ ইনস্তলচেন সম্পুৰ্ণ হ'ল। + + + + Package Selection + পেকেজ নিৰ্বাচন + + + + Please pick a product from the list. The selected product will be installed. + সুচীৰ পৰা পণ্য এটা বাচনি কৰক। বাচনি কৰা পণ্যটো ইনস্তল হ'ব। + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + সাৰাংশ + + + + This is an overview of what will happen once you start the setup procedure. + চেত্ আপ প্ৰক্ৰিয়া হ'লে কি হ'ব এয়া এটা অৱলোকন। + + + + This is an overview of what will happen once you start the install procedure. + ইনস্তল প্ৰক্ৰিয়া হ'লে কি হ'ব এয়া এটা অৱলোকন। + ContextualProcessJob - + Contextual Processes Job প্রাসঙ্গিক প্ৰক্ৰিয়াবোৰৰ কাৰ্য্য @@ -801,100 +994,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition এখন বিভাজন বনাওক - - MiB - MiB - - - - Partition &Type: - বিভাজনৰ প্ৰকাৰ (&T): - - - - &Primary - মুখ্য (&P) - - - - E&xtended - সম্প্ৰসাৰিত (&x) - - - - Fi&le System: - ফাইল চিছ্টেম (&l): - - - - LVM LV name - LVM LV নাম - - - - Flags: - ফ্লেগ সমূহ: - - - - &Mount Point: - মাউন্ট পইন্ট (&M): - - - + Si&ze: আয়তন (&z): - + + MiB + MiB + + + + Partition &Type: + বিভাজনৰ প্ৰকাৰ (&T): + + + + Primar&y + + + + + E&xtended + সম্প্ৰসাৰিত (&x) + + + + Fi&le System: + ফাইল চিছ্টেম (&l): + + + + LVM LV name + LVM LV নাম + + + + &Mount Point: + মাউন্ট পইন্ট (&M): + + + + Flags: + ফ্লেগ সমূহ: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt এনক্ৰিপ্ত্ (&c) - + Logical যুক্তিসম্মত - + Primary মূখ্য - + GPT GPT - + Mountpoint already in use. Please select another one. এইটো মাওন্ট্ পইন্ট্ ইতিমধ্যে ব্যৱহাৰ হৈ আছে। অনুগ্ৰহ কৰি বেলেগ এটা বাচনি কৰক। + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. %1 ফাইল চিছটেমৰ সৈতে %4 (%3) ত %2MiBৰ নতুন বিভাজন বনাওক। - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%4</strong>ত নতুন (%3) <strong>%1</strong> ফাইল চিছটেমৰ <strong>%2MiB</strong> বিভাজন কৰক। - + + Creating new %1 partition on %2. %2ত নতুন %1 বিভজন বনাই আছে। - + The installer failed to create partition on disk '%1'. '%1' ডিস্কত নতুন বিভাজন বনোৱাত ইনস্তলাৰটো বিফল হ'ল। @@ -902,27 +1131,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table বিভাজন তালিকা বনাওক - + Creating a new partition table will delete all existing data on the disk. নতুন বিভাজন তালিকা বনালে ডিস্কত জমা থকা গোটেই ডাটা বিলোপ হৈ যাব। - + What kind of partition table do you want to create? আপুনি কেনেকুৱা ধৰণৰ বিভাজন তালিকা বনাব বিচাৰিছে? - + Master Boot Record (MBR) প্ৰধান বুট্ নথি (MBR) - + GUID Partition Table (GPT) GUID বিভাজন তালিকা (GPT) @@ -930,22 +1159,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. %2ত নতুন %1 বিভাজন তালিকা বনাওক। - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3)ত নতুন <strong>%1</strong> বিভাজন তালিকা বনাওক। - + Creating new %1 partition table on %2. %2ত নতুন %1 বিভাজন তালিকা বনোৱা হৈ আছে। - + The installer failed to create a partition table on %1. ইন্স্তলাৰটো %1ত বিভাজন তালিকা বনোৱাত বিফল হ'ল। @@ -953,45 +1182,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 %1 ব্যৱহাৰকৰ্তা বনাওক - + Create user <strong>%1</strong>. <strong>%1</strong> ব্যৱহাৰকৰ্তা বনাওক। - - Creating user %1. - %1 ব্যৱহাৰকৰ্তা বনোৱা হৈ আছে। + + Preserving home directory + - - Sudoers dir is not writable. - Sudoers ডিৰেক্টৰি লিখনযোগ্য নহয়। + + + Creating user %1 + - - Cannot create sudoers file for writing. - লিখাৰ বাবে sudoers ফাইল বনাব পৰা নগ'ল। + + Configuring user %1 + - - Cannot chmod sudoers file. - sudoers ফাইলত chmod কৰিব পৰা নগ'ল। - - - - Cannot open groups file for reading. - পঢ়াৰ বাবে groups ফাইল খুলিব পৰা নগ'ল। + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group ভলিউম্ গোট বনাওক @@ -999,22 +1224,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. %1 নামৰ নতুন ভলিউম্ গোট বনাওক। - + Create new volume group named <strong>%1</strong>. <strong>%1</strong> নামৰ নতুন ভলিউম্ গোট বনাওক। - + Creating new volume group named %1. %1 নামৰ নতুন ভলিউম্ গোট বনোৱা হৈ আছে। - + The installer failed to create a volume group named '%1'. ইন্স্তলাৰটোৱে '%1' নামৰ নতুন ভলিউম্ গোট বনোৱাত বিফল হৈছে। @@ -1022,18 +1247,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. %1 নামৰ ভলিউম গোট নিস্ক্ৰিয় কৰক। - + Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> নামৰ ভলিউম গোট নিস্ক্ৰিয় কৰক। - + The installer failed to deactivate a volume group named %1. ইনস্তলাৰটো %1 নামৰ ভলিউম গোট নিস্ক্ৰিয় কৰাত বিফল হ'ল। @@ -1041,22 +1266,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. %1 বিভাজন বিলোপ কৰক। - + Delete partition <strong>%1</strong>. <strong>%1</strong> বিভাজন ডিলিট কৰক। - + Deleting partition %1. %1 বিভাজন বিলোপ কৰা হৈ আছে। - + The installer failed to delete partition %1. ইনস্তলাৰটো %1 বিভাজন বিলোপ কৰাত বিফল হ'ল। @@ -1064,46 +1289,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - বাচনি কৰা ডিভাইচৰ বিভাজন তালিকাৰ প্ৰকাৰ। বিভাজন তালিকা বিলোপ কৰি আকৌ আৰম্ভনিৰ পৰা বনাইহে বিভাজন তালিকাৰ প্ৰকাৰ সলনি কৰিব পাৰি, যিয়ে ষ্টোৰেজ ডিভাইচত থকা গোটেই ডাটা বিলোপ কৰিব। যদি আপুনি বেলেগ একো বাচনি নকৰে, ইনস্তলাৰটোৱে বৰ্তমানৰ বিভাজন তালিকা প্ৰয়োগ কৰিব। যদি আপুনি নিশ্চিত নহয়, আধুনিক চিছটেমত GPT বাচনি কৰক। - - - + This device has a <strong>%1</strong> partition table. এইটো ডিভাইচত এখন <strong>%1</strong> বিভাজন তালিকা আছে। - + 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. এইটো এটা <strong>লুপ</strong> ডিভাইচ। <br><br>এইটো স্য়ুড্' ডিভাইচত কোনো বিভাজন তালিকা নাই যিয়ে ফাইলক ব্লোক ডিভাইচ ৰূপে ব্যৱহাৰ কৰিব পাৰা কৰিব। এইধৰণৰ চেত্ আপত সাধাৰণতে একক ফাইল চিছটেম থাকে। - + 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. ইনস্তলাৰটোৱে বচনি কৰা ষ্টোৰেজ ডিভাইচত বিভাজন তালিকা বিচাৰি নাপলে। ডিভাইচটোত কোনো বিভাজন তালিকা নাই বা বিভাজন তালিকা বেয়া বা অগ্যাত প্ৰকাৰ। এই ইনস্তলাৰটোৱে আপোনাৰ বাবে নতুন বিভাজন তালিকা স্বত:ভাৱে বনাব পাৰে বা মেন্যুৱেল বিভাজন পেজৰ দ্বাৰা বনাব পাৰে। - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong> বুট পৰিবেশত আৰম্ভ হোৱা আধুনিক চিছটেমবোৰৰ কাৰণে এইটো পৰমৰ্শ কৰা বিভাজন তালিকা। - + <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. <br><br>এইটো বিভাজন তালিকা কেৱল <strong>BIOS</strong> বুট পৰিৱেশৰ পৰা আৰম্ভ হোৱা পুৰণি চিছটেমৰ বাবে গ্ৰহণ কৰা হয়। বাকী সকলোবোৰৰ বাবে GPT উপযুক্ত।<br><br><strong>সতৰ্কবাণী:</strong> MBR বিভাজন তালিকা পুৰণি MS-DOS ৰ যুগৰ পদ্ধতি। <br>ইয়াত কেৱল 4 <em>মূখ্য</em> বিভাজন বনাব পাৰি, ইয়াৰ পৰা এটা <em>প্ৰসাৰণ</em> কৰিব পাৰি আৰু ইযাৰ ভিতৰত <em>logical</em> বিভাজন ৰাখিব পাৰি। + + + 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. + বাচনি কৰা ডিভাইচৰ বিভাজন তালিকাৰ প্ৰকাৰ। বিভাজন তালিকা বিলোপ কৰি আকৌ আৰম্ভনিৰ পৰা বনাইহে বিভাজন তালিকাৰ প্ৰকাৰ সলনি কৰিব পাৰি, যিয়ে ষ্টোৰেজ ডিভাইচত থকা গোটেই ডাটা বিলোপ কৰিব। যদি আপুনি বেলেগ একো বাচনি নকৰে, ইনস্তলাৰটোৱে বৰ্তমানৰ বিভাজন তালিকা প্ৰয়োগ কৰিব। যদি আপুনি নিশ্চিত নহয়, আধুনিক চিছটেমত GPT বাচনি কৰক। + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1337,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Dracutৰ বাবে LUKS কনফিগাৰেচন %1ত লিখক - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracutৰ বাবে LUKS কনফিগাৰেচন লিখা বন্ধ কৰক: "/" বিভাজনত এনক্ৰিপছন নাই - + Failed to open %1 %1 খোলাত বিফল হ'ল @@ -1130,7 +1355,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job ডামী C++ কাৰ্য্য @@ -1138,123 +1363,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition উপলব্ধ বিভাজন সম্পাদন কৰক - - Content: - সামগ্ৰী: + + Con&tent: + - + &Keep ৰাখক (&K) - + Format ফৰ্মেট - + Warning: Formatting the partition will erase all existing data. সকিয়নি: বিভাজনটো ফৰমেট কৰিলে উপস্থিত থকা গোটেই ডাটা বিলোপ হ'ব। - + &Mount Point: মাউন্ট পইন্ট (&M): - + Si&ze: আয়তন (&z): - + MiB MiB - + Fi&le System: ফাইল চিছটেম: - + Flags: ফ্লেগ সমূহ: - - Mountpoint already in use. Please select another one. - এইটো মাওন্ট্ পইন্ট্ ইতিমধ্যে ব্যৱহাৰ হৈ আছে। অনুগ্ৰহ কৰি বেলেগ এটা বাচনি কৰক। + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form ৰূপ - + En&crypt system চিছটেম এনক্ৰিপ্ত্ কৰক (&c) - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase পাছফ্ৰেছ - + Confirm passphrase পাছফ্ৰেছ নিশ্ৱিত কৰক - + + Please enter the same passphrase in both boxes. অনুগ্ৰহ কৰি দুয়োটা বাকচত একে পাছফ্ৰেছ প্রবিষ্ট কৰক। + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + আপুনি ৱেবত ইণ্স্টল ল'গ পেস্ট কৰিব বিচাৰে নেকি? + + FillGlobalStorageJob - + Set partition information বিভাজন তথ্য চেত্ কৰক - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. <strong>নতুন</strong> %2 চিছটেম বিভাজনত %1 ইনস্তল কৰক। - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - <strong>%1</strong> মাউন্ট পইন্টৰ সৈতে <strong>নতুন</strong> %2 বিভজন স্থাপন কৰক। + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. %3 চিছটেম বিভাজনত <strong>%1</strong>ত %2 ইনস্তল কৰক। - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - %3 বিভাজন <strong>%1</strong> <strong>%2</strong>ৰ সৈতে স্থাপন কৰক। - - - + Install boot loader on <strong>%1</strong>. <strong>1%ত</strong> বুত্ লোডাৰ ইনস্তল কৰক। - + Setting up mount points. মাউন্ট পইন্ট চেত্ আপ হৈ আছে। @@ -1262,93 +1531,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form ৰূপ - + &Restart now পুনৰাৰম্ভ কৰক (&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>সকলো কৰা হ'ল।</h1> <br/>আপোনাৰ কম্পিউটাৰত %1 স্থাপন কৰা হ'ল। <br/>আপুনি এতিয়া নতুন চিছটেম ব্যৱহাৰ কৰা আৰম্ভ কৰিব পাৰিব। - + <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> <html><head/><body><p>এইটো বিকল্পত ক্লিক কৰাৰ লগে লগে আপোনাৰ চিছটেম পুনৰাৰম্ভ হ'ব যেতিয়া আপুনি <span style="font-style:italic;">হৈ গ'ল</span>ত ক্লিক কৰে বা চেত্ আপ প্ৰগ্ৰেম বন্ধ কৰে।</p></body></html> - + <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. <h1>সকলো কৰা হ'ল।</h1> আপোনাৰ কম্পিউটাৰত %1 ইনস্তল কৰা হ'ল। <br/>আপুনি এতিয়া নতুন চিছটেম পুনৰাৰম্ভ কৰিব পাৰিব অথবা %2 লাইভ বাতাৱৰণ ব্যৱহাৰ কৰা অবিৰত ৰাখিব পাৰে। - + <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> <html><head/><body><p>এইটো বিকল্পত ক্লিক কৰাৰ লগে লগে আপোনাৰ চিছটেম পুনৰাৰম্ভ হ'ব যেতিয়া আপুনি <span style="font-style:italic;">হৈ গ'ল</span>ত ক্লিক কৰে বা ইনস্তলাৰ বন্ধ কৰে।</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>স্থাপন প্ৰক্ৰিয়া বিফল হ'ল।</h1> <br/>আপোনাৰ কম্পিউটাৰত %1 স্থাপন নহ'ল্। <br/>ক্ৰুটি বাৰ্তা আছিল: %2। - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ইনস্তলচেন প্ৰক্ৰিয়া বিফল হ'ল।</h1> <br/>আপোনাৰ কম্পিউটাৰত %1 ইনস্তল নহ'ল্। <br/>ক্ৰুটি বাৰ্তা আছিল: %2। - FinishedViewStep + FinishedQmlViewStep - + Finish সমাপ্ত + + + FinishedViewStep - - Setup Complete - চেত্ আপ সম্পুৰ্ণ হৈছে - - - - Installation Complete - ইনস্তলচেন সম্পুৰ্ণ হ'ল - - - - The setup of %1 is complete. - %1ৰ চেত্ আপ সম্পুৰ্ণ হৈছে। - - - - The installation of %1 is complete. - %1ৰ ইনস্তলচেন সম্পুৰ্ণ হ'ল। + + Finish + সমাপ্ত FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. %4ত ফৰ্মেট বিভাজন %1 ( ফাইল চিছটেম: %2, আয়তন: %3 MiB) - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> ৰ <strong>%1 %</strong> বিভাজন <strong>%2</strong> ফাইল চিছটেমৰ সৈতে ফৰ্মেট কৰক। - + Formatting partition %1 with file system %2. %1 ফৰ্মেট বিভাজনৰ সৈতে %2 ফাইল চিছটেম। - + The installer failed to format partition %1 on disk '%2'. ইনস্তলাৰটো '%2' ডিস্কত %1 বিভাজন​ ফৰ্মেট কৰাত বিফল হ'ল। @@ -1356,72 +1613,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space অতি কমেও %1 GiB খালী ঠাই ড্ৰাইভত উপলব্ধ আছে - + There is not enough drive space. At least %1 GiB is required. ড্ৰাইভত পৰ্য্যাপ্ত খালী ঠাই নাই। অতি কমেও %1 GiB আৱশ্যক। - + has at least %1 GiB working memory অতি কমেও %1 GiB কাৰ্য্যকৰি মেম'ৰি আছে - + The system does not have enough working memory. At least %1 GiB is required. চিছটেমত পৰ্য্যাপ্ত কাৰ্য্যকৰি মেম'ৰী নাই। অতি কমেও %1 GiB আৱশ্যক। - + is plugged in to a power source পাৱাৰৰ উৎসৰ লগত সংযোগ হৈ আছে। - + The system is not plugged in to a power source. চিছটেম পাৱাৰৰ উৎসৰ লগত সংযোগ হৈ থকা নাই। - + is connected to the Internet ইন্টাৰনেটৰ সৈতে সংযোগ হৈছে - + The system is not connected to the Internet. চিছটেমটো ইন্টাৰনেটৰ সৈতে সংযোগ হৈ থকা নাই। - + is running the installer as an administrator (root) ইনস্তলাৰটো প্ৰসাশনক (ৰুট) হিছাবে চলি আছে নেকি - + The setup program is not running with administrator rights. চেত্ আপ প্ৰগ্ৰেমটো প্ৰসাশনীয় অধিকাৰৰ সৈতে চলি থকা নাই। - + The installer is not running with administrator rights. ইনস্তলাৰটো প্ৰসাশনীয় অধিকাৰৰ সৈতে চলি থকা নাই। - + has a screen large enough to show the whole installer সম্পূৰ্ণ ইনস্তলাৰটো দেখাবলৈ প্ৰয়োজনীয় ডাঙৰ স্ক্ৰীণ আছে নেকি? - + The screen is too small to display the setup program. চেত্ আপ প্ৰগ্ৰেমটো প্ৰদৰ্শন কৰিবলৈ স্ক্ৰিনখনৰ আয়তন যথেস্ট সৰু। - + The screen is too small to display the installer. ইনস্তলাৰটো প্ৰদৰ্শন কৰিবলৈ স্ক্ৰিনখনৰ আয়তন যথেস্ট সৰু। @@ -1429,7 +1686,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. আপোনাৰ মেছিনৰ বিষয়ে তথ্য সংগ্ৰহ কৰি আছে। @@ -1437,25 +1694,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier মূল উপকৰণ নিৰ্মাতা গোট চিনক্তকাৰী - + Could not create directories <code>%1</code>. <code>%1</code> ডিৰেক্টৰীবোৰ বনাব পৰা নাই। - + Could not open file <code>%1</code>. <code>%1</code> ফাইল খুলিব পৰা নাই। - + Could not write to file <code>%1</code>. <code>%1</code> ফাইলত লিখিব পৰা নাই। @@ -1463,7 +1720,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. mkinitcpioৰ দ্বাৰা initramfs বনাই থকা হৈছে। @@ -1471,7 +1728,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. initramfs বনাই থকা হৈছে। @@ -1479,17 +1736,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed কনচোল্ ইন্সটল কৰা নাই - + Please install KDE Konsole and try again! অনুগ্ৰহ কৰি কেডিই কনচোল্ ইন্সটল কৰক আৰু পুনৰ চেষ্টা কৰক! - + Executing script: &nbsp;<code>%1</code> নিস্পাদিত লিপি: &nbsp; <code>%1</code> @@ -1497,28 +1754,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script লিপি - - KeyboardPage - - - Set keyboard model to %1.<br/> - কিবোৰ্ডৰ মডেল %1ত চেট্ কৰক।<br/> - - - - Set keyboard layout to %1/%2. - কিবোৰ্ডৰ লেআউট %1/%2 চেট্ কৰক। - - KeyboardQmlViewStep - + Keyboard কিবোৰ্ড @@ -1526,7 +1770,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard কিবোৰ্ড @@ -1534,65 +1778,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting চিছটেম থলি ছেটিং - + 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>. চিছটেমৰ স্থানীয় ছেটিংস্ কমাণ্ডলাইনৰ কিছুমান উপভোক্তা ইন্টাৰফেছ উপাদানৰ ভাষা আৰু আখৰবোৰত প্ৰভাৱ পেলায়। বৰ্তমান ছেটিংস্ হ'ল: <strong>%1</strong>। - + &Cancel বাতিল কৰক (&C) - + &OK ঠিক আছে (&O) + + LOSHJob + + + Configuring encrypted swap. + এন্ক্ৰিপ্টেড স্ৱেপ কন্ফিগাৰ কৰি আছে। + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form ৰূপ - + <h1>License Agreement</h1> <h1>অনুজ্ঞা-পত্ৰ চুক্তি</h1> - + I accept the terms and conditions above. মই ওপৰোক্ত চৰ্তাৱলী গ্ৰহণ কৰিছোঁ। - + Please review the End User License Agreements (EULAs). অনুগ্ৰহ কৰি ব্যৱহাৰকৰ্তাৰ অনুজ্ঞা-পত্ৰ চুক্তি (EULA) সমূহ ভালদৰে নিৰীক্ষণ কৰক। - + This setup procedure will install proprietary software that is subject to licensing terms. এই চেচ্ আপ প্ৰক্ৰিয়াই মালিকানা চফটৱেৰ ইনস্তল কৰিব যিটো অনুজ্ঞা-পত্ৰৰ চৰ্তৰ অধীন বিষয় হ'ব। - + If you do not agree with the terms, the setup procedure cannot continue. যদি আপুনি চৰ্তাৱলী গ্ৰহণ নকৰে, চেত্ আপ প্ৰক্ৰিয়া চলাই যাব নোৱাৰিব। - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. এই চেত্ আপ প্ৰক্ৰিয়াই অতিৰিক্ত বৈশিষ্ট্য থকা সঁজুলি প্ৰদান কৰি ব্যৱহাৰকৰ্তাৰ অভিজ্ঞতা সংবৰ্দ্ধন কৰাৰ বাবে মালিকানা চফটৱেৰ ইনস্তল কৰিব যিটো অনুজ্ঞা-পত্ৰৰ চৰ্তৰ অধীন বিষয় হ'ব। - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. যাদি আপুনি চৰ্তাৱলী নামানে, মালিকিস্ৱত্ত থকা চফ্টৱেৰ ইনস্তল নহব আৰু মুকলি উৎস বিকল্প ব্যৱহাৰ হ'ব। @@ -1600,7 +1867,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License অনুজ্ঞা-পত্ৰ @@ -1608,109 +1875,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <br/>%2ৰ দ্ৱাৰা <strong>%1 ড্ৰাইভাৰ</strong> - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <br/><font color="Grey">%2ৰ দ্ৱাৰা</font> <strong>%1 গ্ৰাফিক্চ্ ড্ৰাইভাৰ</strong> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2ৰ দ্ৱাৰা</font> <strong>%1 ব্ৰাউজাৰ প্লাগ ইন</strong> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2ৰ দ্ৱাৰা</font> <strong>%1 কোডেক</strong> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2ৰ দ্ৱাৰা</font> <strong>%1 পেকেজ</strong> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <br/><font color="Grey">%2ৰ দ্ৱাৰা</font> <strong>%1</strong> - + File: %1 ফাইল: %1 - + + Hide license text + অনুজ্ঞা-পত্ৰৰ লেখনি লুকাওক + + + Show the license text অনুজ্ঞা-পত্ৰৰ লেখনি দেখাওক - + Open license agreement in browser. অনুজ্ঞা-পত্ৰ চুক্তি ব্ৰাউজাৰত দেখাওক। - - - Hide license text - অনুজ্ঞা-পত্ৰৰ লেখনি লুকাওক - LocalePage - - The system language will be set to %1. - চিছটেমৰ ভাষা %1লৈ সলনি কৰা হ'ব। - - - - The numbers and dates locale will be set to %1. - সংখ্যা আৰু তাৰিখ স্থানীয় %1লৈ সলনি কৰা হ'ব। - - - + Region: ক্ষেত্ৰ: - + Zone: মন্ডল: - - + + &Change... সলনি... (&C) - - - Set timezone to %1/%2.<br/> - সময় জ'ন  %1/%2লৈ সলনি কৰা হ'ল।<br/> - LocaleQmlViewStep - + Location অৱস্থান + + LocaleTests + + + Quit + + + LocaleViewStep - + Location অৱস্থান @@ -1718,178 +1978,194 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. LUKS কি ফাইল কনফিগাৰ কৰক। - - + + No partitions are defined. কোনো বিভাজনৰ বৰ্ণনা দিয়া নাই। - - - + + + Encrypted rootfs setup error এনক্ৰিপছন থকা rootfs চেত্ আপত ত্ৰুটি - + Root partition %1 is LUKS but no passphrase has been set. ৰুট বিভাজন %1 LUKS, কিন্তু পাসফ্রেজ ছেট কৰা হোৱা নাই। - + Could not create LUKS key file for root partition %1. %1 ৰুট বিভাজনৰ বাবে LUKS কি বনাৱ পৰা নগ'ল। - + Could not configure LUKS key file on partition %1. - + %1 বিভাজনত LUKS কি ফাইল কনফিগাৰ কৰিব পৰা নগ'ল। MachineIdJob - + Generate machine-id. মেচিন-আইডি সৃষ্টি কৰক। - + Configuration Error কনফিগাৰেচন ত্ৰুটি - + No root mount point is set for MachineId. এইটো মেচিন-আইডিৰ বাবে কোনো মাউন্ট্ পইণ্ট্ট্ট্ ছেট কৰা নাই। + + Map + + + Timezone: %1 + সময় অঞ্চল: %1 + + + + 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. + অনুগ্ৰহ কৰি নিজৰ প্রিয় স্থান নক্সাখ্নত বাছক জাতে ইস্নস্তালাৰটোৱে অপোনাক থলী + আৰু সময় অঞ্চলৰ ছেটিংছ আপোৰ বাবে মিলাই দায়ক | আপোনি পৰামৰ্শমূলক ছেটিংছবোৰক তলত অনুকূলিত কৰিব পাৰে | নক্সাখ্নত পৈন্তেৰদালক টানি অনুসন্ধান কৰিব | + আৰু +/- বুটামেৰে যোম in/out কৰক বা মাউছৰ সচৰোলৰও ব্যবহাৰ কৰিব পাৰে | + + NetInstallViewStep - - + Package selection পেকেজ বাচনি - + Office software - + কাৰ্যালয়ৰ ছফটৱেৰ + + + + Office package + কাৰ্যালয়ৰ পেকেজ + + + + Browser software + ব্ৰাউজাৰৰ ছফটৱেৰ + + + + Browser package + ব্ৰাউজাৰৰ পেকেজ + + + + Web browser + ৱেব ব্ৰাউজাৰ + + + + Kernel + কাৰ্ণেল + + + + Services + সেৰ্ৱিচেস + + + + Login + পৰীক্ষণ কৰক + + + + Desktop + দেস্কেতোপ + + + + Applications + এপ্লীকেছ্নচ + + + + Communication + যোগাযোগ + + + + Development + প্রবৃদ্ধি + + + + Office + কাৰ্যালয় + + + + Multimedia + মাল্টিমিডিয়া + + + + Internet + ইণ্টাৰনেট - Office package - + Theming + থিমীং - Browser software - + Gaming + খেলা - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + সঁজুলি NotesQmlViewStep - + Notes - + টোকা OEMPage - + Ba&tch: দল(&t): - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>দলৰ পৰিচয় লিখক। এইটো গন্তব্য চিছটেমত জমা থাকিব।</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>মূল উপকৰণ নিৰ্মাতা কনফিগাৰেচন।</h1> <p>গন্তব্য চিছটেম কনফিগাৰ কৰোতে কেলামাৰেচে মূল উপকৰণ নিৰ্মাতাৰ চেটিংস ব্যৱহাৰ কৰিব।</p></body></html> @@ -1897,260 +2173,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration মূল উপকৰণ নিৰ্মাতা কনফিগাৰেচন - + Set the OEM Batch Identifier to <code>%1</code>. <code>%1ত</code> মূল উপকৰণ নিৰ্মাতা গোট চিনক্তকাৰি চেত্ কৰক। + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + সময় অঞ্চল: %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short পাছৱৰ্ড বহুত ছুটি - + Password is too long পাছৱৰ্ড বহুত দীঘল - + Password is too weak পাছৱৰ্ড বহুত দুৰ্বল - + Memory allocation error when setting '%1' '%1' চেটিংস কৰোতে মেম'ৰী আৱন্টন ক্ৰুটি - + Memory allocation error মেম'ৰী আৱন্টন ক্ৰুটি - + The password is the same as the old one পাছৱৰ্ডটো পুৰণি পাছৱৰ্ডৰ লগত একে - + The password is a palindrome পাছৱৰ্ডটো পেলিন্ড্ৰোম - + The password differs with case changes only পাছৱৰ্ডকেইটাৰ মাজত কেৱল lower/upper caseৰ পাৰ্থক্য আছে - + The password is too similar to the old one পাছৱৰ্ডটো পুৰণি পাছৱৰ্ডৰ লগত যথেষ্ট একে - + The password contains the user name in some form পাছৱৰ্ডটোত কিবা প্ৰকাৰে ব্যৱহাৰকাৰীৰ নাম আছে - + The password contains words from the real name of the user in some form পাছৱৰ্ডটোত কিবা প্ৰকাৰে ব্যৱহাৰকাৰীৰ আচল নামৰ কিবা শব্দ আছে - + The password contains forbidden words in some form পাছৱৰ্ডটোত কিবা প্ৰকাৰে নিষিদ্ধ শব্দ আছে - - The password contains less than %1 digits - পাছৱৰ্ডটোত %1টাতকৈ কম সংখ্যা আছে - - - + The password contains too few digits পাছৱৰ্ডটোত বহুত কম সংখ্যাক সংখ্যা আছে - - The password contains less than %1 uppercase letters - পাছৱৰ্ডটোত %1টাতকৈ কম uppercaseৰ বৰ্ণ আছে - - - + The password contains too few uppercase letters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম uppercaseৰ বৰ্ণ আছে - - - The password contains less than %1 lowercase letters - পাছৱৰ্ডটোত %1টাতকৈ কম lowercaseৰ বৰ্ণ আছে + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম lowercaseৰ বৰ্ণ আছে - - The password contains less than %1 non-alphanumeric characters - পাছৱৰ্ডটোত %1টাতকৈ কম non-alphanumeric বৰ্ণ আছে - - - + The password contains too few non-alphanumeric characters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম non-alphanumeric বৰ্ণ আছে - - The password is shorter than %1 characters - পাছৱৰ্ডটোত %1টা বৰ্ণতকৈ ছুটি - - - + The password is too short পাছৱৰ্ডটো বহুত ছুটি - - The password is just rotated old one - পাছৱৰ্ডটো পুৰণি পাছৱৰ্ডৰ লগত সংশ্লিষ্ট - - - - The password contains less than %1 character classes - পাছৱৰ্ডটোত %1টাতকৈ কম বৰ্ণ শ্ৰেণী আছে - - - + The password does not contain enough character classes পাছৱৰ্ডটোত থকা বৰ্ণ শ্ৰেণী যথেষ্ট নহয় - - The password contains more than %1 same characters consecutively - পাছৱৰ্ডটোত %1বাৰতকৈ বেছি একে বৰ্ণ উপর্যুপৰি আছে - - - + The password contains too many same characters consecutively পাছৱৰ্ডটোত একে বৰ্ণ উপর্যুপৰি বহুতবাৰ আছে - - The password contains more than %1 characters of the same class consecutively - পাছৱৰ্ডটোত %1বাৰতকৈ একে বৰ্ণ শ্ৰেণীৰ বৰ্ণ উপর্যুপৰি বহুতবাৰ আছে - - - + The password contains too many characters of the same class consecutively পাছৱৰ্ডটোত একে বৰ্ণ শ্ৰেণীৰ বৰ্ণ উপর্যুপৰি বহুতো আছে - - - The password contains monotonic sequence longer than %1 characters - পাছৱৰ্ডটোত %1তকৈ বেছি ম'ন'টনিক চিকুৱেন্স্ আছে + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence পাছৱৰ্ডটোত বহুত দীঘল ম'ন'টনিক চিকুৱেন্স্ বৰ্ণ আছে - + No password supplied কোনো পাছৱৰ্ড্ দিয়া নাই - + Cannot obtain random numbers from the RNG device RNG ডেভাইচৰ পৰা কোনো ৰেণ্ডম সংখ্যা পোৱা নগ'ল - + Password generation failed - required entropy too low for settings পাছৱৰ্ড্ বনোৱা কাৰ্য্য বিফল হ'ল - চেটিংসৰ বাবে আৱশ্যক এন্ট্ৰ'পী বহুত কম আছে - + The password fails the dictionary check - %1 পাছৱৰ্ডটো অভিধানৰ পৰীক্ষণত বিফল হ'ল - %1 - + The password fails the dictionary check পাছৱৰ্ডটো অভিধানৰ পৰীক্ষণত বিফল হ'ল - + Unknown setting - %1 অজ্ঞাত ছেটিংস - %1 - + Unknown setting অজ্ঞাত ছেটিংস - + Bad integer value of setting - %1 ছেটিংসৰ বেয়া পুৰ্ণ সংখ্যা মান - %1 - + Bad integer value বেয়া পুৰ্ণ সংখ্যা মান - + Setting %1 is not of integer type চেটিংস্ %1 পূৰ্ণাংক নহয় - + Setting is not of integer type চেটিংস্ পূৰ্ণাংক নহয় - + Setting %1 is not of string type চেটিংস্ %1 স্ট্ৰিং নহয় - + Setting is not of string type চেটিংস্ স্ট্ৰিং নহয় - + Opening the configuration file failed কনফিগাৰেচন ফাইল খোলাত বিফল হ'ল - + The configuration file is malformed কনফিগাৰেচন ফাইলটো বেয়া - + Fatal failure গভীৰ বিফলতা - + Unknown error অজ্ঞাত ক্ৰুটি - + Password is empty খালী পাছৱৰ্ড @@ -2158,40 +2491,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form ৰূপ - + Product Name পণ্যৰ নাম - + TextLabel TextLabel - + Long Product Description পণ্যৰ দীঘল বিৱৰণ - + Package Selection পেকেজ নিৰ্বাচন - + Please pick a product from the list. The selected product will be installed. সুচীৰ পৰা পণ্য এটা বাচনি কৰক। বাচনি কৰা পণ্যটো ইনস্তল হ'ব। + + PackageChooserQmlViewStep + + + Packages + পেকেজ + + PackageChooserViewStep - + Packages পেকেজ @@ -2199,12 +2540,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name নাম - + Description বিৱৰণ @@ -2212,17 +2553,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form ৰূপ - + Keyboard Model: কিবোৰ্ড মডেল: - + Type here to test your keyboard আপোনাৰ কিবোৰ্ড পৰীক্ষা কৰিবলৈ ইয়াত টাইপ কৰক @@ -2230,96 +2571,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form ৰূপ - + What is your name? আপোনাৰ নাম কি? - - What name do you want to use to log in? - লগইনত আপোনি কি নাম ব্যৱহাৰ কৰিব বিচাৰে? - - - - Choose a password to keep your account safe. - আপোনাৰ একাউণ্ট সুৰক্ষিত ৰাখিবলৈ পাছৱৰ্ড এটা বাছনি কৰক। - - - - - <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> - <small>একে পাছৱৰ্ড দুবাৰ লিখক, যাতে লিখন ক্ৰুটিৰ পৰীক্ষণ কৰিব পৰা যায়। এটা ভাল পাছৱৰ্ডত বৰ্ণ, সংখ্যা আৰু punctuationৰ মিশ্ৰণ থাকে, অতি কমেও আঠটা বৰ্ণ থাকিব লাগে আৰু নিয়মিত সমযৰ ব্যৱধানত সলনি কৰি থাকিব লাগে।</small> - - - - What is the name of this computer? - এইটো কম্পিউটাৰৰ নাম কি? - - - + Your Full Name আপোনাৰ সম্পূৰ্ণ নাম - + + What name do you want to use to log in? + লগইনত আপোনি কি নাম ব্যৱহাৰ কৰিব বিচাৰে? + + + login লগইন - + + What is the name of this computer? + এইটো কম্পিউটাৰৰ নাম কি? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>যদি আপুনি আপোনাৰ কম্পিউটাৰটো বেলেগে নেটৱৰ্কত প্ৰদৰ্শন কৰে এই নামটো ব্যৱহাৰ হ'ব।</small> - + Computer Name কম্পিউটাৰৰ নাম - - + + Choose a password to keep your account safe. + আপোনাৰ একাউণ্ট সুৰক্ষিত ৰাখিবলৈ পাছৱৰ্ড এটা বাছনি কৰক। + + + + + <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> + <small>একে পাছৱৰ্ড দুবাৰ লিখক, যাতে লিখন ক্ৰুটিৰ পৰীক্ষণ কৰিব পৰা যায়। এটা ভাল পাছৱৰ্ডত বৰ্ণ, সংখ্যা আৰু punctuationৰ মিশ্ৰণ থাকে, অতি কমেও আঠটা বৰ্ণ থাকিব লাগে আৰু নিয়মিত সমযৰ ব্যৱধানত সলনি কৰি থাকিব লাগে।</small> + + + + Password পাছৱৰ্ড - - + + Repeat Password পাছৱৰ্ড পুনৰ লিখক। - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. এই বাকচটো চিহ্নিত কৰিলে পাছ্ৱৰ্ডৰ প্ৰৱলতা কৰা হ'ব আৰু আপুনি দুৰ্বল পাছৱৰ্ড ব্যৱহাৰ কৰিব নোৱাৰিব। - + Require strong passwords. শক্তিশালী পাছৱৰ্ডৰ আৱশ্যক। - + Log in automatically without asking for the password. কোনো পাছৱৰ্ড নোসোধাকৈ স্ৱত:পূৰ্ণ লগ্ইন কৰক। - + Use the same password for the administrator account. প্ৰশাসনীয় একাউন্টৰ বাবে একে পাছৱৰ্ড্ ব্যৱহাৰ কৰক। - + Choose a password for the administrator account. প্ৰশাসনীয় একাউন্টৰ বাবে পাছৱৰ্ড এটা বাছনি কৰক। - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>একে পাছৱৰ্ড দুবাৰ লিখক, যাতে লিখাত ক্ৰুটি আছে নেকি পৰীক্ষা কৰিব পাৰে।</small> @@ -2327,42 +2668,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root মূল - + Home ঘৰ - + Boot বুত্ - + EFI system ই এফ আই (EFI) চিছটেম - + Swap স্ৱেপ - + New partition for %1 %1 ৰ বাবে নতুন বিভাজন - + New partition নতুন বিভাজন - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2712,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space খালী ঠাই - - + + New partition নতুন বিভাজন - + Name নাম - + File System ফাইল চিছটেম - + + File System Label + + + + Mount Point মাউন্ট পইন্ট - + Size আয়তন @@ -2406,77 +2752,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form ৰূপ - + Storage de&vice: ষ্টোৰেজ ডিভাইচ (&v): - + &Revert All Changes সকলো সলনি আগৰ দৰে কৰক (&R) - + New Partition &Table নতুন বিভাজন তালিকা (&T) - + Cre&ate বনাওক (&a) - + &Edit সম্পাদনা কৰক (&E) - + &Delete বিলোপ কৰক (&D) - + New Volume Group নতুন ভলিউম্ গোট - + Resize Volume Group ভলিউম্ গোটৰ আয়তন সলনি কৰক - + Deactivate Volume Group ভলিউম্ গোট নিস্ক্ৰিয় কৰক - + Remove Volume Group ভলিউম্ গোট বিলোপ কৰক - + I&nstall boot loader on: বুট লোডাৰ ইনস্তল কৰক (&I): - + Are you sure you want to create a new partition table on %1? আপুনি নিশ্চিতভাৱে %1ত নতুন তালিকা বনাব বিচাৰে নেকি? - + Can not create new partition নতুন বিভাজন বনাব নোৱৰি - + 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. %1ত থকা বিভাজন তালিকাত ইতিমধ্যে %2 মূখ্য বিভাজন আছে, আৰু একো যোগ কৰিব নোৱাৰিব। তাৰ সলনি এখন মূখ্য বিভাজন বিলোপ কৰক আৰু এখন প্ৰসাৰিত বিভাজন যোগ কৰক। @@ -2484,131 +2830,121 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... চিছটেম তথ্য সংগ্ৰহ কৰা হৈ আছে। - + Partitions বিভাজনসমুহ - - Install %1 <strong>alongside</strong> another operating system. - %1ক বেলেগ এটা অপাৰেটিং চিছটেমৰ <strong>লগত </strong>ইনস্তল কৰক। + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - ডিস্কত থকা সকলো ডাটা <strong>আতৰাওক</strong> আৰু %1 ইনস্তল কৰক। + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - এখন বিভাজন %1ৰ লগত <strong>সলনি</strong> কৰক। + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>মেনুৱেল</strong> বিভাজন। - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - %1ক <strong>%2</strong>(%3)ত ডিস্কত থকা বেলেগ অপাৰেটিং চিছটেমৰ <strong>লগত</strong> ইনস্তল কৰক। - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>%2</strong> (%3)ডিস্কত থকা সকলো ডাটা <strong>আতৰাওক</strong> আৰু %1 ইনস্তল কৰক। - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>%2</strong> (%3) ডিস্কত এখন বিভাজন %1ৰ লগত <strong>সলনি</strong> কৰক। - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>%1</strong> (%2) ডিস্কত <strong>মেনুৱেল</strong> বিভাজন। - - - - Disk <strong>%1</strong> (%2) - ডিস্ক্ <strong>%1</strong> (%2) - - - + Current: বর্তমান: - + After: পিছত: - + No EFI system partition configured কোনো EFI চিছটেম বিভাজন কনফিগাৰ কৰা হোৱা নাই - - 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>esp</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. - %1 আৰম্ভ কৰিবলৈ এটা EFI চিছটেম থকাটো আৱশ্যক। <br/><br/>এটা EFI চিছটেম কন্ফিগাৰ কৰিবলৈ উভতি যাওক আৰু FAT32 ফাইল চিছটেম এটা বাচনি কৰক যিটোত <strong>esp</strong> ফ্লেগ সক্ষম হৈ আছে আৰু <strong>%2</strong> মাউন্ট্ পইণ্ট্ আছে।<br/><br/>আপুনি EFI চিছটেমবিভাজন কন্ফিগাৰ নকৰাকৈ অগ্ৰসৰ হ'ব পাৰে কিন্তু ইয়াৰ ফলত চিছটেম বিফল হ'ব পাৰে। + + EFI system partition configured incorrectly + - - EFI system partition flag not set - EFI চিছটেম বিভাজনত ফ্লেগ চেট কৰা নাই + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1 আৰম্ভ কৰিবলৈ এটা EFI চিছটেম থকাটো আৱশ্যক। %2 মাউন্ট্ পইন্ট্ নোহোৱকৈ কন্ফিগাৰ কৰা হৈছিল, কিন্তু ইয়াৰ esp ফ্লেগ ছেট কৰা হোৱা নাই। ফ্লেগ্ ছেট কৰিবলৈ উভতি যাওক আৰু বিভাজন সলনি কৰক। আপুনি ফ্লেগ ছেট নকৰাকৈ অগ্ৰসৰ হ'ব পাৰে কিন্তু ইয়াৰ ফলত চিছটেম বিফল হ'ব পাৰে। + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + GPTৰ BIOSত ব্যৱহাৰৰ বাবে বিকল্প + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted বুত্ বিভাজন এনক্ৰিপ্ত্ নহয় - + 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. এনক্ৰিপ্তেড ৰুট বিভাজনৰ সৈতে এটা বেলেগ বুট বিভাজন চেত্ আপ কৰা হৈছিল, কিন্তু বুট বিভাজন এনক্ৰিপ্তেড কৰা হোৱা নাই। <br/><br/>এইধৰণৰ চেত্ আপ সুৰক্ষিত নহয় কাৰণ গুৰুত্ব্পুৰ্ণ চিছটেম ফাইল আন্এনক্ৰিপ্তেড বিভাজনত ৰখা হয়। <br/>আপুনি বিচাৰিলে চলাই থাকিব পাৰে কিন্তু পিছ্ত চিছটেম আৰম্ভৰ সময়ত ফাইল চিছটেম খোলা যাব। <br/>বুট বিভাজন এনক্ৰিপ্ত্ কৰিবলৈ উভতি যাওক আৰু বিভাজন বনোৱা windowত <strong>Encrypt</strong> বাচনি কৰি আকৌ বনাওক। - + has at least one disk device available. অতি কমেও এখন ডিস্ক্ উপলব্ধ আছে। - + There are no partitions to install on. - + ইনস্তল কৰিবলৈ কোনো বিভাজন নাই। PlasmaLnfJob - + Plasma Look-and-Feel Job প্লজমা Look-and-Feel কাৰ্য্য - - + + Could not select KDE Plasma Look-and-Feel package কেডিই প্লাজ্মা Look-and-Feel পেকেজ বাচনি কৰিব পৰা নগ'ল @@ -2616,17 +2952,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form ৰূপ - + 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. অনুগ্ৰহ কৰি কেডিই প্লজ্মা ডেক্সটপৰ বাবে এটা look-and-feel বাচনি কৰে। আপুনি এতিয়াৰ বাবে এইটো পদক্ষেপ এৰি থব পাৰে আৰু চিছটেম স্থাপন কৰাৰ পিছতো look-and-feel কন্ফিগাৰ কৰিব পাৰে। look-and-feel বাচনি এটাত ক্লিক্ কৰিলে ই আপোনাক live preview দেখুৱাব। - + 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. অনুগ্ৰহ কৰি কেডিই প্লজ্মা ডেক্সটপৰ বাবে এটা look-and-feel বাচনি কৰে। আপুনি এতিয়াৰ বাবে এইটো পদক্ষেপ এৰি থব পাৰে আৰু চিছটেম ইনস্তল কৰাৰ পিছতো look-and-feel কন্ফিগাৰ কৰিব পাৰে। look-and-feel বাচনি এটাত ক্লিক্ কৰিলে ই আপোনাক live preview দেখুৱাব। @@ -2634,7 +2970,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2642,17 +2978,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... ফাইল পিছৰ বাবে জমা কৰি আছে ... - + No files configured to save for later. পিছলৈ জমা ৰাখিব কোনো ফাইল কন্ফিগাৰ কৰা হোৱা নাই। - + Not all of the configured files could be preserved. কন্ফিগাৰ কৰা গোটেই ফাইল জমা ৰাখিব নোৱৰি। @@ -2660,14 +2996,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. কমাণ্ডৰ পৰা কোনো আউটপুট পোৱা নগ'ল। - + Output: @@ -2676,52 +3012,52 @@ Output: - + External command crashed. বাহ্যিক কমাণ্ড ক্ৰেছ্ কৰিলে। - + Command <i>%1</i> crashed. <i>%1</i> কমাণ্ড ক্ৰেছ্ কৰিলে। - + External command failed to start. বাহ্যিক কমাণ্ড আৰম্ভ হোৱাত বিফল হ'ল। - + Command <i>%1</i> failed to start. <i>%1</i> কমাণ্ড আৰম্ভ হোৱাত বিফল হ'ল। - + Internal error when starting command. কমাণ্ড আৰম্ভ কৰাৰ সময়ত আভ্যন্তৰীণ ক্ৰুটি। - + Bad parameters for process job call. প্ৰক্ৰিয়া কাৰ্য্যৰ বাবে বেয়া মান। - + External command failed to finish. বাহ্যিক কমাণ্ড সমাপ্ত কৰাত বিফল হ'ল। - + Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> কমাণ্ড সমাপ্ত কৰাত %2 ছেকেণ্ডত বিফল হ'ল। - + External command finished with errors. বাহ্যিক কমাণ্ড ক্ৰটিৰ সৈতে সমাপ্ত হ'ল। - + Command <i>%1</i> finished with exit code %2. <i>%1</i> কমাণ্ড %2 এক্সিড্ কোডৰ সৈতে সমাপ্ত হ'ল। @@ -2729,89 +3065,94 @@ Output: QObject - - Default Keyboard Model - ডিফল্ট্ কিবোৰ্ড মডেল - - - - - Default - ডিফল্ট্ - - - - unknown - অজ্ঞাত - - - - extended - প্ৰসাৰিত - - - - unformatted - ফৰ্মেট কৰা হোৱা নাই - - - - swap - স্ৱেপ - - - - Unpartitioned space or unknown partition table - বিভাজন নকৰা খালী ঠাই অথবা অজ্ঞাত বিভজন তালিকা - - - - (no mount point) - (কোনো মাউন্ট পইন্ট নাই) - - - - Requirements checking for module <i>%1</i> is complete. - <i>%1</i> মডিউল পৰীক্ষণৰ বাবে আৱশ্যকতাবোৰ সম্পূৰ্ণ হ'ল। - - - + %1 (%2) %1 (%2) - - No product - কোনো পণ্য নাই + + unknown + অজ্ঞাত - - No description provided. - একো বিৱৰণি দিয়া হোৱা নাই। + + extended + প্ৰসাৰিত - - - - + + unformatted + ফৰ্মেট কৰা হোৱা নাই + + + + swap + স্ৱেপ + + + + + Default + ডিফল্ট্ + + + + + + File not found ফাইল বিচাৰি পোৱা নাই - + Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> পথটো পূৰ্ণ পথ নহয়। - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. <pre>%1</pre> ৰেন্ডম ফাইল বনাব পৰা নগ'ল। + + + No product + কোনো পণ্য নাই + + + + No description provided. + একো বিৱৰণি দিয়া হোৱা নাই। + + + + (no mount point) + (কোনো মাউন্ট পইন্ট নাই) + + + + Unpartitioned space or unknown partition table + বিভাজন নকৰা খালী ঠাই অথবা অজ্ঞাত বিভজন তালিকা + + + + Recommended + + + <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> + %1 চেত্ আপৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। + RemoveUserJob - + Remove live user from target system গন্তব্য চিছটেমৰ পৰা লাইভ ব্যৱহাৰকাৰি আতৰাওক @@ -2819,18 +3160,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. %1 নামৰ ভলিউম্ গোট বিলোপ কৰক। - + Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> নামৰ ভলিউম্ গোট বিলোপ কৰক। - + The installer failed to remove a volume group named '%1'. ইনস্তলটো %1 নামৰ নতুন ভলিউম্ গোট বিলোপ কৰাত বিফল হ'ল। @@ -2838,143 +3179,159 @@ Output: ReplaceWidget - + Form ৰূপ - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 ক'ত ইনস্তল লাগে বাচনি কৰক।<br/> <font color="red">সকীয়নি: ইয়ে বাচনি কৰা বিভাজনৰ সকলো ফাইল বিলোপ কৰিব। - + The selected item does not appear to be a valid partition. বাচনি কৰা বস্তুটো এটা বৈধ বিভাজন নহয়। - + %1 cannot be installed on empty space. Please select an existing partition. %1 খালী ঠাইত ইনস্তল কৰিব নোৱাৰি। উপস্থিতি থকা বিভাজন বাচনি কৰক। - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 প্ৰসাৰিত ঠাইত ইনস্তল কৰিব নোৱাৰি। উপস্থিতি থকা মূখ্য বা লজিকেল বিভাজন বাচনি কৰক। - + %1 cannot be installed on this partition. এইখন বিভাজনত %1 ইনস্তল কৰিব নোৱাৰি। - + Data partition (%1) ডাটা বিভাজন (%1) - + Unknown system partition (%1) অজ্ঞাত চিছটেম বিভাজন (%1) - + %1 system partition (%2) %1 চিছটেম বিভাজন (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/> %1 বিভাজনটো %2ৰ বাবে যথেষ্ট সৰু। অনুগ্ৰহ কৰি অতি কমেও %3 GiB সক্ষমতা থকা বিভাজন বাচনি কৰক। - + <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. <strong>%2</strong><br/><br/>এইটো চিছটেমৰ ক'তো এটা EFI চিছটেম বিভাজন বিচাৰি পোৱা নগ'ল। অনুগ্ৰহ কৰি উভতি যাওক আৰু %1 চেত্ আপ কৰিব মেনুৱেল বিভাজন ব্যৱহাৰ কৰক। - - - + + + <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. <strong>%3</strong><br/><br/> %1 %2ত ইনস্তল হ'ব। <br/><font color="red">সকীয়নি​: </font>%2 বিভাজনত থকা গোটেই ডাটা বিলোপ হৈ যাব। - + The EFI system partition at %1 will be used for starting %2. %1 ত থকা EFI চিছটেম বিভাজনটো %2 আৰম্ভ কৰাৰ বাবে ব্যৱহাৰ কৰা হ'ব। - + EFI system partition: EFI চিছটেম বিভাজন: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + %1 ইনস্তলচেন​ৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। + <br/>ইনস্তলচেন​ প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। + + + + <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> + %1 চেত্ আপৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। + + ResizeFSJob - + Resize Filesystem Job ফাইল চিছটেম কাৰ্য্যৰ আয়তন পৰিৱৰ্তন কৰক - + Invalid configuration অকার্যকৰ কনফিগাৰেচন - + The file-system resize job has an invalid configuration and will not run. ফাইল চিছটেমটোৰ আয়তন পৰিৱৰ্তন কাৰ্য্যৰ এটা অকার্যকৰ কনফিগাৰেচন আছে আৰু সেইটো নচলিব। - + KPMCore not Available KPMCore ঊপলব্ধ নহয় - + Calamares cannot start KPMCore for the file-system resize job. ফাইল চিছটেমৰ আয়তন সলনি কৰিবলৈ কেলামাৰেচে KPMCore আৰম্ভ নোৱাৰিলে। - - - - - + + + + + Resize Failed আয়তন পৰিৱৰ্তন কাৰ্য্য বিফল হ'ল - + The filesystem %1 could not be found in this system, and cannot be resized. এইটো চিছটেমত %1 ফাইল চিছটেম বিছাৰি পোৱা নগ'ল আৰু সেইটোৰ আয়তন সলনি কৰিব নোৱাৰি। - + The device %1 could not be found in this system, and cannot be resized. এইটো চিছটেমত %1 ডিভাইচ বিছাৰি পোৱা নগ'ল আৰু সেইটোৰ আয়তন সলনি কৰিব নোৱাৰি। - - + + The filesystem %1 cannot be resized. %1 ফাইল চিছটেমটোৰ আয়তন সলনি কৰিব নোৱাৰি। - - + + The device %1 cannot be resized. %1 ডিভাইচটোৰ আয়তন সলনি কৰিব নোৱাৰি। - + The filesystem %1 must be resized, but cannot. %1 ফাইল চিছটেমটোৰ আয়তন সলনি কৰিব লাগে, কিন্তু কৰিব নোৱাৰি। - + The device %1 must be resized, but cannot %1 ডিভাইচটোৰ আয়তন সলনি কৰিব লাগে, কিন্তু কৰিব নোৱাৰি। @@ -2982,22 +3339,22 @@ Output: ResizePartitionJob - + Resize partition %1. %1 বিভাজনৰ আয়তন সলনি কৰক। - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> আয়তনৰ <strong>%1</strong> বিভাজনৰ আয়তন সলনি কৰি <strong>%3MiB</strong> কৰক। - + Resizing %2MiB partition %1 to %3MiB. %2MiB ৰ %1 বিভাজনৰ আয়তন সলনি কৰি %3 কৰি আছে। - + The installer failed to resize partition %1 on disk '%2'. ইনস্তলাৰটো '%2' ডিস্কত %1 বিভাজনৰ​ আয়তন সলনি কৰাত বিফল হ'ল। @@ -3005,7 +3362,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group ভলিউম্ গোটৰ আয়তন সলনি কৰক @@ -3013,18 +3370,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. %1 নামৰ ভলিউম্ গোটটোৰ আয়তন %2ৰ পৰা %3লৈ সলনি কৰক। - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> নামৰ ভলিউম্ গোটটোৰ আয়তন <strong>%2</strong>ৰ পৰা <strong>%3</strong>লৈ সলনি কৰক। - + The installer failed to resize a volume group named '%1'. ইনস্তলাৰটো %1 নামৰ ভলিউম্ গোটটোৰ আয়তন সলনি কৰাত বিফল হ'ল। @@ -3032,53 +3389,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: উত্কৃষ্ট ফলাফলৰ বাবে অনুগ্ৰহ কৰি নিশ্চিত কৰক যে এইটো কম্পিউটাৰ হয়: - + System requirements চিছটেমৰ আৱশ্যকতাবোৰ - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - %1 চেত্ আপৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - %1 ইনস্তলচেন​ৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>ইনস্তলচেন​ প্ৰক্ৰিয়া অবিৰত ৰাখিব নোৱাৰিব। <a href="#details">বিৱৰণ...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - %1 চেত্ আপৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - %1 ইনস্তলচেন​ৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। ইনস্তলচেন​ অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। - - - - This program will ask you some questions and set up %2 on your computer. - এইটো প্ৰগ্ৰেমে অপোনাক কিছুমান প্ৰশ্ন সুধিব আৰু অপোনাৰ কম্পিউটাৰত %2 স্থাপন কৰিব। - - ScanningDialog - + Scanning storage devices... ষ্টোৰেজ ডিভাইচ স্কেন কৰি আছে... - + Partitioning বিভাজন কৰি আছে @@ -3086,29 +3415,29 @@ Output: SetHostNameJob - + Set hostname %1 %1 হোস্ট্ নাম চেত্ কৰক - + Set hostname <strong>%1</strong>. <strong>%1</strong> হোস্ট্ নাম চেত্ কৰক। - + Setting hostname %1. %1 হোস্ট্ নাম চেত্ কৰি আছে। + - Internal Error আভ্যন্তৰিণ ক্ৰুটি - - + + Cannot write hostname to target system গন্তব্য চিছটেমত হোষ্ট নাম লিখিব নোৱাৰিলে @@ -3116,29 +3445,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 কিবোৰ্ডৰ মডেল %1 চেত্ কৰক, বিন্যাস %2-%3 - + Failed to write keyboard configuration for the virtual console. ভাৰচুৱেল কনচ'লৰ বাবে কিবোৰ্ড কনফিগাৰেচন লিখাত বিফল হ'ল। - - - + + + Failed to write to %1 %1 ত লিখাত বিফল হ'ল - + Failed to write keyboard configuration for X11. X11ৰ বাবে কিবোৰ্ড কনফিগাৰেচন লিখাত বিফল হ'ল। - + Failed to write keyboard configuration to existing /etc/default directory. উপস্থিত থকা /etc/default ডিৰেক্টৰিত কিবোৰ্ড কনফিগাৰেচন লিখাত বিফল হ'ল। @@ -3146,82 +3475,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. %1 বিভাজনত ফ্লেগ চেত্ কৰক। - + Set flags on %1MiB %2 partition. %1MiB ৰ %2 বিভাজনত ফ্লেগ চেত্ কৰক। - + Set flags on new partition. নতুন বিভাজনত ফ্লেগ চেত্ কৰক। - + Clear flags on partition <strong>%1</strong>. <strong>%1</strong> বিভাজনত ফ্লেগ আতৰাওক। - + Clear flags on %1MiB <strong>%2</strong> partition. %1MiB ৰ <strong>%2</strong> বিভাজনৰ ফ্লেগবোৰ আতৰাওক। - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - %1MiBৰ <strong>%2</strong> বিভাজনত <strong>%3</strong> ফ্লেগ লগাওক। - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - %1MiB ৰ <strong>%2</strong> বিভাজনৰ ফ্লেগবোৰ আতৰ কৰি আছে। - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - %1MiBৰ <strong>%2</strong> বিভাজনত <strong>%3</strong> ফ্লেগ লগাই আছে। - - - + Clear flags on new partition. নতুন বিভাজনৰ ফ্লেগ আতৰাওক। - + Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> বিভাজনত <strong>%2</strong>ৰ ফ্লেগ লগাওক। - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MiBৰ <strong>%2</strong> বিভাজনত <strong>%3</strong> ফ্লেগ লগাওক। + + + Flag new partition as <strong>%1</strong>. নতুন বিভাজনত <strong>%1</strong>ৰ ফ্লেগ লগাওক। - + Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> বিভাজনৰ ফ্লেগ আতৰাই আছে। - + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MiB ৰ <strong>%2</strong> বিভাজনৰ ফ্লেগবোৰ আতৰ কৰি আছে। + + + Clearing flags on new partition. নতুন বিভাজনৰ ফ্লেগ আতৰাই আছে। - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%1</strong> বিভাজনত <strong>%2</strong> ফ্লেগ লগাই আছে। - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + %1MiBৰ <strong>%2</strong> বিভাজনত <strong>%3</strong> ফ্লেগ লগাই আছে। + + + Setting flags <strong>%1</strong> on new partition. নতুন বিভাজনত <strong>%1</strong> ফ্লেগ লগাই আছে। - + The installer failed to set flags on partition %1. ইনস্তলাৰটো​ %1 বিভাজনত ফ্লেগ লগোৱাত বিফল হ'ল। @@ -3229,42 +3558,42 @@ Output: SetPasswordJob - + Set password for user %1 %1 ব্যৱহাৰকাৰীৰ বাবে পাছ্ৱৰ্ড চেত্ কৰক - + Setting password for user %1. %1 ব্যৱহাৰকাৰীৰ বাবে পাছ্ৱৰ্ড চেত্ কৰি আছে। - + Bad destination system path. গন্তব্যস্থানৰ চিছটেমৰ পথ বেয়া। - + rootMountPoint is %1 ৰূট মাঊন্ট পইন্ট্ %1 - + Cannot disable root account. ৰূট একাঊন্ট নিস্ক্ৰিয় কৰিব নোৱাৰি। - + passwd terminated with error code %1. %1 ক্ৰুটি কোডৰ সৈতে পাছৱৰ্ড সমাপ্তি হ'ল। - + Cannot set password for user %1. %1 ব্যৱহাৰকাৰীৰ পাছ্ৱৰ্ড চেত্ কৰিব নোৱাৰি। - + usermod terminated with error code %1. %1 ক্ৰুটি চিহ্নৰ সৈতে ইউজাৰম'ড সমাপ্ত হ'ল। @@ -3272,45 +3601,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 %1/%2 টাইমজ'ন চেত্ কৰক - + Cannot access selected timezone path. বাচনি কৰা টাইমজ'ন পথত যাব নোৱাৰি। - + Bad path: %1 বেয়া পথ: %1 - + Cannot set timezone. টাইমজ'ন চেত্ কৰিব নোৱাৰি। - + Link creation failed, target: %1; link name: %2 লিংক বনোৱাত বিফল হ'ল, গন্তব্য স্থান: %1; লিংকৰ নাম: %2 - + Cannot set timezone, টাইমজ'ন চেত্ কৰিব নোৱাৰি, - + Cannot open /etc/timezone for writing /etc/timezone ত লিখিব খুলিব নোৱাৰি + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + sudoers ফাইলত chmod কৰিব পৰা নগ'ল। + + + + Cannot create sudoers file for writing. + লিখাৰ বাবে sudoers ফাইল বনাব পৰা নগ'ল। + + ShellProcessJob - + Shell Processes Job ছেল প্ৰক্ৰিয়াবোৰৰ কাৰ্য্য @@ -3318,81 +3684,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - চেত্ আপ প্ৰক্ৰিয়া হ'লে কি হ'ব এয়া এটা অৱলোকন। + + &OK + ঠিক আছে (&O) - - This is an overview of what will happen once you start the install procedure. - ইনস্তল প্ৰক্ৰিয়া হ'লে কি হ'ব এয়া এটা অৱলোকন। + + &Yes + হয় (&Y) - - - SummaryViewStep - - Summary - সাৰাংশ + + &No + নহয় (&N) + + + + &Cancel + বাতিল কৰক (&C) + + + + &Close + বন্ধ (&C) TrackingInstallJob - + Installation feedback ইনস্তল সম্বন্ধীয় প্ৰতিক্ৰিয়া - + Sending installation feedback. ইন্স্তল সম্বন্ধীয় প্ৰতিক্ৰিয়া পঠাই আছে। - + Internal error in install-tracking. ইন্স্তল-ক্ৰুটিৰ আভ্যন্তৰীণ ক্ৰুটি। - + HTTP request timed out. HTTP ৰিকুৱেস্টৰ সময় উকলি গ'ল। - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE ব্যৱহাৰকৰ্তাৰ সম্বন্ধীয় প্ৰতিক্ৰীয়া + + + + Configuring KDE user feedback. + কনফিগাৰত KDE ব্যৱহাৰকৰ্তাৰ সম্বন্ধীয় প্ৰতিক্ৰীয়া + + + + + Error in KDE user feedback configuration. + KDE ব্যৱহাৰকৰ্তাৰ ফিডবেক কনফিগাৰেচনৰ ক্ৰুটি। + + + + Could not configure KDE user feedback correctly, script error %1. + KDE ব্যৱহাৰকৰ্তাৰ প্ৰতিক্ৰিয়া ঠাকভাৱে কন্ফিগাৰ কৰিব পৰা নগ'ল, লিপি ক্ৰুটি %1। + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE ব্যৱহাৰকৰ্তাৰ প্ৰতিক্ৰিয়া ঠাকভাৱে কন্ফিগাৰ কৰিব পৰা নগ'ল, কেলামাৰেচ ক্ৰুটি %1। + + + + TrackingMachineUpdateManagerJob + + Machine feedback মেচিন সম্বন্ধীয় প্ৰতিক্ৰীয়া - + Configuring machine feedback. মেচিন সম্বন্ধীয় প্ৰতিক্ৰীয়া কনফিগাৰ কৰি আছে‌। - - + + Error in machine feedback configuration. মেচিনত ফিডবেক কনফিগাৰেচনৰ ক্ৰুটি। - + Could not configure machine feedback correctly, script error %1. মেচিনৰ প্ৰতিক্ৰিয়া ঠাকভাৱে কন্ফিগাৰ কৰিব পৰা নগ'ল, লিপি ক্ৰুটি %1। - + Could not configure machine feedback correctly, Calamares error %1. মেচিনৰ প্ৰতিক্ৰিয়া ঠাকভাৱে কন্ফিগাৰ কৰিব পৰা নগ'ল, কেলামাৰেচ ক্ৰুটি %1। @@ -3400,106 +3802,97 @@ Output: TrackingPage - + Form ৰূপ - + Placeholder প্লেচহোল্ডাৰ - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> <html><head/><body><p>এইটো বাচনি কৰি, ইনস্তলচেন​ৰ বিষয়ে <span style=" font-weight:600;">মুঠতে একো তথ্য</span> আপুনি নপঠায়।</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ব্যৱহাৰকাৰীৰ অধিক তথ্য পাবলৈ ইয়াত ক্লিক কৰক</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - ইনস্তলচেন​ ট্ৰেকিংয়ে %1 কিমান ব্যৱহাৰকাৰী আছে, তেওলোকে কি কি হাৰ্ডৱেৰত %1 ইনস্তল কৰিছে আৰু (তলৰ দুটা বিকল্পৰ লগত), পছন্দৰ এপ্লিকেচনৰ তথ্য নিৰন্তৰভাৱে পোৱাত সহায় কৰে। কি পঠাব জানিবলৈ অনুগ্ৰহ কৰি প্ৰত্যেক ক্ষেত্ৰৰ পিছৰ HELP আইকণত ক্লিক্ কৰক। + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. এইটো বাচনি কৰি আপুনি ইনস্তলচেন​ আৰু হাৰ্ডৱেৰৰ বিষয়ে তথ্য পঠাব। ইনস্তলচেন​ৰ পিছত <b>এই তথ্য এবাৰ পঠোৱা হ'ব</b>। - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - এইটো বাচনি কৰি আপুনি ইনস্তলচেন​, হাৰ্ডৱেৰ আৰু এপ্লিকেচনৰ বিষয়ে <b>সময়ে সময়ে</b> %1লৈ তথ্য পঠাব। + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + এইটো বাচনি কৰি আপুনি ইনস্তলচেন​, হাৰ্ডৱেৰ আৰু এপ্লিকেচনৰ বিষয়ে <b>মেচিন</b> %1লৈ তথ্য পঠাব। - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - এইটো বাচনি কৰি আপুনি ইনস্তলচেন​, হাৰ্ডৱেৰ, এপ্লিকেচন আৰু ব্যৱহাৰ পেটাৰ্ণৰ বিষয়ে <b>নিয়মিতভাৱে</b> %1লৈ তথ্য পঠাব। + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + এইটো বাচনি কৰি আপুনি ইনস্তলচেন​, হাৰ্ডৱেৰ আৰু এপ্লিকেচনৰ বিষয়ে <b>ব্যৱহাৰকৰ্তা</b> %1লৈ তথ্য পঠাব। TrackingViewStep - + Feedback প্ৰতিক্ৰিয়া + + UmountJob + + + Unmount file systems. + ফাইল চিছটেম​বোৰ মাউণ্টৰ পৰা আতৰাওক। + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>যদি এটাতকৈ বেছি ব্যক্তিয়ে এইটো কম্পিউটাৰ ব্যৱহাৰ কৰে, আপুনি চেত্ আপৰ পিছত বহুতো একাউন্ট বনাব পাৰে।</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>যদি এটাতকৈ বেছি ব্যক্তিয়ে এইটো কম্পিউটাৰ ব্যৱহাৰ কৰে, আপুনি ইনস্তলচেন​ৰ পিছত বহুতো একাউন্ট বনাব পাৰে।</small> + + + UsersQmlViewStep - - Your username is too long. - আপোনাৰ ইউজাৰ নাম বহুত দীঘল। - - - - Your username must start with a lowercase letter or underscore. - আপোনাৰ ব্যৱহাৰকাৰী নাম lowercase বৰ্ণ বা underscoreৰে আৰম্ভ হ'ব লাগিব। - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - কেৱল lowercase বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। - - - - Only letters, numbers, underscore and hyphen are allowed. - কেৱল বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। - - - - Your hostname is too short. - আপোনাৰ হ'স্ট্ নাম বহুত ছুটি। - - - - Your hostname is too long. - আপোনাৰ হ'স্ট্ নাম বহুত দীঘল। - - - - Your passwords do not match! - আপোনাৰ পাছৱৰ্ডকেইটাৰ মিল নাই! + + Users + ব্যৱহাৰকাৰীসকল UsersViewStep - + Users ব্যৱহাৰকাৰীসকল @@ -3507,65 +3900,67 @@ Output: VariantModel - + Key + Column header for key/value কি - + Value + Column header for key/value মান VolumeGroupBaseDialog - + Create Volume Group ভলিউম্ গোট - + List of Physical Volumes ফিজিকেল ভলিউমবোৰৰ সুচী - + Volume Group Name: ভলিউম্ গোটৰ নাম: - + Volume Group Type: ভলিউম্ গোটৰ প্ৰকাৰ: - + Physical Extent Size: ফিজিকেল ডিস্কৰ আয়তন সীমা: - + MiB MiB - + Total Size: মুঠ আয়তন: - + Used Size: ব্যৱহাৰ কৰা আয়তন: - + Total Sectors: মুঠ চেক্টৰবোৰ: - + Quantity of LVs: LVবোৰৰ সংখ্যা: @@ -3573,106 +3968,106 @@ Output: WelcomePage - + Form ৰূপ - - + + Select application and system language এপ্লিকেচন আৰু চিছটেম ভাষা বাচনি কৰক + &About + সম্পর্কে (&A) + + + Open donations website দান কৰা ৱেবচাইট খোলক - + &Donate দান কৰক (&D) - + Open help and support website সহায়ক ৱেবচাইট খোলক + &Support + সহায় (&S) + + + Open issues and bug-tracking website সমস্যা আৰু ক্ৰুটি অনুসৰণৰ ৱেবচাইট খোলক - Open release notes website - মুক্তি টোকাৰ ৱেবচাইট খোলক - - - - &Release notes - মুক্তি টোকা (&R) - - - &Known issues জ্ঞাত সমস্যা (&K) - - &Support - সহায় (&S) + + Open release notes website + মুক্তি টোকাৰ ৱেবচাইট খোলক - - &About - সম্পর্কে (&A) + + &Release notes + মুক্তি টোকা (&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1ৰ কেলামাৰেচ ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1ৰ কেলামাৰেচ চেত্ আপ প্ৰগ্ৰামলৈ আদৰণি জনাইছো।</h1> - + <h1>Welcome to %1 setup.</h1> <h1> %1 চেত্ আপলৈ আদৰণি জনাইছো।</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1ৰ কেলামাৰেচ ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 ইনস্তলাৰলৈ আদৰণি জনাইছো।</h1> + + + + %1 support + %1 সহায় + + + About %1 setup %1 চেত্ আপ প্ৰগ্ৰামৰ বিষয়ে - + About %1 installer %1 ইনস্তলাৰৰ বিষয়ে - + <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. - - - - - %1 support - %1 সহায় + <h1>%1</h1><br/><strong>%2<br/>ৰ বাবে %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/">কেলামাৰেচ অনুবাদক দল</a>ক ধন্যবাদ জনাইছো।<br/><br/><a href="https://calamares.io/">Calamares</a>ৰ বিকাশ<br/><a href="http://www.blue-systems.com/">Blue Systems</a>- Liberating Softwareৰ দ্বাৰা প্ৰযোজিত। WelcomeQmlViewStep - + Welcome আদৰণি @@ -3680,120 +4075,447 @@ Output: WelcomeViewStep - + Welcome আদৰণি + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + কনফিগাৰেচন ত্ৰুটি + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + পাছলৈ + + + + calamares-sidebar + + + Show debug information + দিবাগ তথ্য দেখাওক + + + + finishedq + + + Installation Completed + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <h1>ভাষা</h1> </br> + চিছটেমৰ স্থানীয় ছেটিংস্ কমাণ্ডলাইনৰ কিছুমান উপভোক্তা ইন্টাৰফেছ উপাদানৰ ভাষা আৰু আখৰবোৰত প্ৰভাৱ পেলায়। বৰ্তমান ছেটিংস্ হ'ল: <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>স্থানীয়</h1> </br> + চিছটেমৰ স্থানীয় ছেটিংসে উপাদানৰ নম্বৰ আৰু তাৰিখ সজ্জা প্ৰভাৱ পেলায়। বৰ্তমান ছেটিংস্ হ'ল: <strong>%1</strong>. + + + + Back + পাছলৈ + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + কিবোৰ্ড মডেল: - - Refresh - - - - - + Layouts - + লেআউট - - - Keyboard Layout - + + Type here to test your keyboard + আপোনাৰ কিবোৰ্ড পৰীক্ষা কৰিবলৈ ইয়াত টাইপ কৰক - - Models - - - - + Variants - + ভিন্ন ৰুপ + + + localeq - - Test your keyboard - + + Change + সলনি notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + <h3>%1</h3> + <p>এই খিনি ৰিলিজ নোতৰ উদাহৰণ </p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + পাছলৈ + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + আপোনাৰ নাম কি? + + + + Your Full Name + আপোনাৰ সম্পূৰ্ণ নাম + + + + What name do you want to use to log in? + লগইনত আপোনি কি নাম ব্যৱহাৰ কৰিব বিচাৰে? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + কেৱল lowercase বৰ্ণ, সংখ্যা, underscore আৰু hyphenৰ হে মাত্ৰ অনুমতি আছে। + + + + root is not allowed as username. + + + + + What is the name of this computer? + এইটো কম্পিউটাৰৰ নাম কি? + + + + Computer Name + কম্পিউটাৰৰ নাম + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + আপোনাৰ একাউণ্ট সুৰক্ষিত ৰাখিবলৈ পাছৱৰ্ড এটা বাছনি কৰক। + + + + Password + পাছৱৰ্ড + + + + Repeat Password + পাছৱৰ্ড পুনৰ লিখক। + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + এই বাকচটো চিহ্নিত কৰিলে পাছ্ৱৰ্ডৰ প্ৰৱলতা কৰা হ'ব আৰু আপুনি দুৰ্বল পাছৱৰ্ড ব্যৱহাৰ কৰিব নোৱাৰিব। + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + প্ৰশাসনীয় একাউন্টৰ বাবে একে পাছৱৰ্ড্ ব্যৱহাৰ কৰক। + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>স্বাগতম আপোনাক %1 <quote>%2</quote> ইন্সালাৰটোত</h3> + <p>এই প্ৰোগ্ৰেমটোএয়ে অপোনাক কিৱছোমান প্ৰশ্ন সুধিব আৰু আপোনাৰ কোম্পিউটাৰত %1 স্থাপনকৰণ কৰিব |</p> - + About - + সম্পর্কে - + Support - + সহায় - + Known issues - + জ্ঞাত সমস্যা - + Release notes - + মুক্তি টোকা - + Donate - + দান কৰক diff --git a/lang/calamares_ast.ts b/lang/calamares_ast.ts index 047b25af3..cef63bb3e 100644 --- a/lang/calamares_ast.ts +++ b/lang/calamares_ast.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. L'<strong>entornu d'arrinque</strong> d'esti sistema.<br><br>Los sistemes x86 namás sofiten <strong>BIOS</strong>.<br>Los sistemes modernos usen <strong>EFI</strong> pero tamién podríen apaecer dalcuando como BIOS si s'anicien nel mou de compatibilidá. - + 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. Esti sistema anició nun entornu d'arrinque <strong>EFI</strong>.<br><br>Pa configurar l'arrinque nun entornu EFI, esti instalador ha instalar un cargador d'arrinque como <strong>GRUB</strong> or <strong>systemd-boot</strong> nuna <strong>partición del sistema EFI</strong>. Esto ye automático a nun ser qu'escueyas el particionáu manual, nesi casu has escoyer o crear tu esa partición. - + 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. Esti sistema anició nun entornu d'arrinque <strong>BIOS</strong>.<br><br>Pa configurar l'arrinque nun entornu BIOS, esti instalador ha instalar un cargador d'arrinque como <strong>GRUB</strong>, quier nel empiezu d'una partición, quier nel <strong>Master Boot Record</strong> cierca del empiezu de la tabla de particiones (ye lo preferible). Esto ye automático a nun ser qu'escueyas el particionáu manual, nesi casu has configuralo tu too. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record de %1 - + Boot Partition Partición d'arrinque - + System Partition Partición del sistema - + Do not install a boot loader Nenyures - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Páxina balera @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulariu - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Módulos - + Type: Triba: - - + + none nada - + Interface: Interfaz: - - Tools - Ferramientes + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Información de la depuración @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Configuración - + Install Instalación @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Falló'l trabayu (%1) - + Programmed job failure was explicitly requested. El fallu del trabayu programáu solicitóse esplicitamente. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Fecho @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Trabayu d'exemplu (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Executando'l comandu %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Executando la operación %1. - + Bad working directory path El camín del direutoriu de trabayu ye incorreutu - + Working directory %1 for python job %2 is not readable. El direutoriu de trabayu %1 pal trabayu en Python %2 nun ye lleibe. - + Bad main script file El ficheru del script principal ye incorreutu - + Main script file %1 for python job %2 is not readable. El ficheru del script principal %1 pal trabayu en Python %2 nun ye lleibe. - + Boost.Python error in job "%1". Fallu de Boost.Python nel trabayu «%1». @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Cargando... - + QML Step <i>%1</i>. - + Loading failed. Falló la carga. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Completóse la comprobación de requirimientos del módulu <i>%1</i> + - + Waiting for %n module(s). Esperando por %n módulu @@ -236,7 +269,7 @@ - + (%n second(s)) (%n segundu) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. Completóse la comprobación de los requirimientos del sistema. @@ -252,246 +285,237 @@ Calamares::ViewManager - - &Back - &Atrás - - - - &Next - &Siguiente - - - - &Cancel - &Encaboxar - - - - Cancel setup without changing the system. - Encaboxa la configuración ensin camudar el sistema. - - - - Cancel installation without changing the system. - Encaboxa la instalación ensin camudar el sistema. - - - + Setup Failed Falló la configuración - - Would you like to paste the install log to the web? - + + Installation Failed + Falló la instalación - + + Error + Fallu + + + + &Yes + &Sí + + + + &No + &Non + + + + &Close + &Zarrar + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Falló l'aniciu de Calamares - + %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. %1 nun pue instalase. Calamares nun foi a cargar tolos módulos configuraos. Esto ye un problema col mou nel que la distribución usa Calamares. - + <br/>The following modules could not be loaded: <br/>Nun pudieron cargase los módulos de darréu: - + + Continue with setup? + ¿Siguir cola instalación? + + + Continue with installation? ¿Siguir cola instalación? - + 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> El programa d'instalación de %1 ta a piques de facer cambeos nel discu pa configurar %2.<br/><strong>Nun vas ser a desfacer estos cambeos.<strong> - + + 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> + L'instalador de %1 ta a piques de facer cambeos nel discu pa instalar %2.<br/><strong>Nun vas ser a desfacer esos cambeos.</strong> + + + &Set up now &Configurar agora - + + &Install now + &Instalar agora + + + + Go &back + Dir p'&atrás + + + &Set up &Configurar - + &Install &Instalar - + Setup is complete. Close the setup program. Completóse la configuración. Zarra'l programa de configuración. - + + The installation is complete. Close the installer. + Completóse la instalación. Zarra l'instalador. + + + + Cancel setup without changing the system. + Encaboxa la configuración ensin camudar el sistema. + + + + Cancel installation without changing the system. + Encaboxa la instalación ensin camudar el sistema. + + + + &Next + &Siguiente + + + + &Back + &Atrás + + + + &Done + &Fecho + + + + &Cancel + &Encaboxar + + + Cancel setup? ¿Encaboxar la configuración? - + Cancel installation? ¿Encaboxar la instalación? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. ¿De xuru que quies encaboxar el procesu actual de configuración? El programa de configuración va colar y van perdese tolos cambeos. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ¿De xuru que quies encaboxar el procesu actual d'instalación? L'instalador va colar y van perdese tolos cambeos. - - - - &Yes - &Sí - - - - - &No - &Non - - - - &Close - &Zarrar - - - - Continue with setup? - ¿Siguir cola instalación? - - - - 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> - L'instalador de %1 ta a piques de facer cambeos nel discu pa instalar %2.<br/><strong>Nun vas ser a desfacer esos cambeos.</strong> - - - - &Install now - &Instalar agora - - - - Go &back - Dir p'&atrás - - - - &Done - &Fecho - - - - The installation is complete. Close the installer. - Completóse la instalación. Zarra l'instalador. - - - - Error - Fallu - - - - Installation Failed - Falló la instalación - CalamaresPython::Helper - + Unknown exception type Desconozse la triba de la esceición - + unparseable Python error Fallu de Python que nun pue analizase - + unparseable Python traceback Traza inversa de Python que nun pue analizase - + Unfetchable Python error. Fallu de Python al que nun pue dise en cata. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Atrás - - - - &Next - &Siguiente - - - - &Cancel - &Encaboxar - - - + %1 Setup Program Programa de configuración de %1 - + %1 Installer Instalador de %1 + + + ChangeFilesystemLabelJob - - Show debug information - Amosar la depuración + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + L'instalador falló al anovar la tabla particiones nel discu «%1». CheckerContainer - + Gathering system information... Recoyendo la información del sistema... @@ -499,157 +523,197 @@ L'instalador va colar y van perdese tolos cambeos. ChoicePage - + Form Formulariu - - After: - Dempués: - - - - Boot loader location: - Allugamientu del xestor d'arrinque: - - - + Select storage de&vice: Esbilla un preséu d'al&macenamientu: - - - - + + + + Current: Anguaño: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Dempués: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particionáu manual</strong><br/>Vas poder crear o redimensionar particiones. + + + Reuse %1 as home partition for %2. Reusu de %s como partición d'aniciu pa %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Esbilla una partición a redimensionar, dempués arrastra la barra baxera pa facelo</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 va redimensionase a %2MB y va crease una partición de %3MB pa %4. - + + Boot loader location: + Allugamientu del xestor d'arrinque: + + + <strong>Select a partition to install on</strong> <strong>Esbilla una partición na qu'instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nun pudo alcontrase per nenyures una partición del sistema EFI. Volvi p'atrás y usa'l particionáu manual pa configurar %1, por favor. - + The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 va usase p'aniciar %2. - + EFI system partition: Partición del sistema EFI: - + 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. Esti preséu d'almacenamientu nun paez que tenga un sistema operativu nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Desaniciu d'un discu</strong><br/>Esto va <font color="red">desaniciar</font> tolos datos presentes nel preséu d'almacenamientu esbilláu. - - 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. - Esti preséu d'almacenamientu tien %1 nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - - - - No Swap - Ensin intercambéu - - - - Reuse Swap - Reusar un intercambéu - - - - Swap (no Hibernate) - Intercambéu (ensin ivernación) - - - - Swap (with Hibernate) - Intercambéu (con ivernación) - - - - Swap to file - Intercambéu nun ficheru - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalación anexa</strong><br/>L'instalador va redimensionar una partición pa dexar sitiu a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Troquéu d'una partición</strong><br/>Troca una parción con %1. - + + 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. + Esti preséu d'almacenamientu tien %1 nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. + + + 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. Esti preséu d'almacenamientu yá tien un sistema operativu nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. - + 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. Esti preséu d'almacenamientu tien varios sistemes operativos nelli. ¿Qué te prestaría facer?<br/>Vas ser a revisar y confirmar lo qu'escueyas enantes de que se faiga cualesquier cambéu nel preséu d'almacenamientu. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + Ensin intercambéu + + + + Reuse Swap + Reusar un intercambéu + + + + Swap (no Hibernate) + Intercambéu (ensin ivernación) + + + + Swap (with Hibernate) + Intercambéu (con ivernación) + + + + Swap to file + Intercambéu nun ficheru + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Llimpieza de los montaxes pa les operaciones de particionáu en %1. - + Clearing mounts for partitioning operations on %1. Llimpiando los montaxes pa les operaciones de particionáu en %1. - + Cleared all mounts for %1 Llimpiáronse tolos montaxes de %1 @@ -657,22 +721,17 @@ L'instalador va colar y van perdese tolos cambeos. ClearTempMountsJob - + Clear all temporary mounts. Llimpieza de tolos montaxes temporales. - + Clearing all temporary mounts. Llimpiando tolos montaxes temporales. - - Cannot get list of temporary mounts. - Nun pue consiguise la llista de montaxes temporales. - - - + Cleared all temporary mounts. Llimpiáronse tolos puntos de montaxe. @@ -680,18 +739,18 @@ L'instalador va colar y van perdese tolos cambeos. CommandList - - + + Could not run command. Nun pudo executase'l comandu. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. El comandu execútase nel entornu del agospiu y precisa saber el camín raigañu pero nun se definió en rootMountPoint. - + The command needs to know the user's name, but no username is defined. El comandu precisa saber el nome del usuariu, pero nun se definió nengún. @@ -699,100 +758,235 @@ L'instalador va colar y van perdese tolos cambeos. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Esti ordenador nun satisfaz dalgún de los requirimientos mínimos pa configurar %1.<br/>La configuración nun pue siguir. <a href="#details">Detalles...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Esti ordenador nun satisfaz los requirimientos mínimos pa instalar %1.<br/>La instalación nun pue siguir. <a href="#details">Detalles...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Esti ordenador nun satisfaz dalgún de los requirimientos aconseyaos pa configurar %1.<br/>La configuración pue siguir pero dalgunes carauterístiques podríen desactivase. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Esti ordenador nun satisfaz dalgún requirimientu aconseyáu pa instalar %1.<br/>La instalación pue siguir pero podríen desactivase dalgunes carauterístiques. - - - - This program will ask you some questions and set up %2 on your computer. - Esti programa va facete dalgunes entrugues y va configurar %2 nel ordenador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Afáyate nel programa de configuración de Calamares pa %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Afáyate na configuración de %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Afáyate nel instalador Calamares de %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Afáyate nel instalador de %1.</h1> - - - + Set keyboard model to %1.<br/> Va afitase'l modelu del tecláu a %1.<br/> - + Set keyboard layout to %1/%2. Va afitase la distrubución del tecláu a %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. La llingua del sistema va afitase a %1. - + The numbers and dates locale will be set to %1. La númberación y data van afitase en %1. - - Set timezone to %1/%2.<br/> - Va afitase'l fusu horariu a %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Instalación per rede. (Desactivada: Recibiéronse datos non válidos de grupos) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Esbilla de paquetes + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalación per rede. (Desactivada: Nun pue dise en cata de les llistes de paquetes, comprueba la conexón a internet) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Esti ordenador nun satisfaz dalgún de los requirimientos mínimos pa configurar %1.<br/>La configuración nun pue siguir. <a href="#details">Detalles...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Esti ordenador nun satisfaz los requirimientos mínimos pa instalar %1.<br/>La instalación nun pue siguir. <a href="#details">Detalles...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Esti ordenador nun satisfaz dalgún de los requirimientos aconseyaos pa configurar %1.<br/>La configuración pue siguir pero dalgunes carauterístiques podríen desactivase. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Esti ordenador nun satisfaz dalgún requirimientu aconseyáu pa instalar %1.<br/>La instalación pue siguir pero podríen desactivase dalgunes carauterístiques. + + + + This program will ask you some questions and set up %2 on your computer. + Esti programa va facete dalgunes entrugues y va configurar %2 nel ordenador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Afáyate nel programa de configuración de Calamares pa %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Afáyate na configuración de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Afáyate nel instalador Calamares pa %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Afáyate nel instalador de %1</h1> + + + + Your username is too long. + El nome d'usuariu ye perllargu. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + El nome d'agospiu ye percurtiu. + + + + Your hostname is too long. + El nome d'agospiu ye perllargu. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + ¡Les contraseñes nun concasen! + + + + OK! + + + + + Setup Failed + Falló la configuración + + + + Installation Failed + Falló la instalación + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Configuración completada + + + + Installation Complete + Instalación completada + + + + The setup of %1 is complete. + La configuración de %1 ta completada. + + + + The installation of %1 is complete. + Completóse la instalación de %1. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Sumariu + + + + This is an overview of what will happen once you start the setup procedure. + Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu de configuración. + + + + This is an overview of what will happen once you start the install procedure. + Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu d'instalación. + ContextualProcessJob - + Contextual Processes Job Trabayu de procesos contestuales @@ -800,100 +994,136 @@ L'instalador va colar y van perdese tolos cambeos. CreatePartitionDialog - + Create a Partition Creación d'una partición - - MiB - MiB - - - - Partition &Type: - &Triba de la partición: - - - - &Primary - &Primaria - - - - E&xtended - E&stendida - - - - Fi&le System: - Sistema de &ficheros: - - - - LVM LV name - Nome del volume llóxicu de LVM - - - - Flags: - Banderes: - - - - &Mount Point: - Puntu de &montaxe: - - - + Si&ze: Tama&ñu: - + + MiB + MiB + + + + Partition &Type: + &Triba de la partición: + + + + Primar&y + + + + + E&xtended + E&stendida + + + + Fi&le System: + Sistema de &ficheros: + + + + LVM LV name + Nome del volume llóxicu de LVM + + + + &Mount Point: + Puntu de &montaxe: + + + + Flags: + Banderes: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt &Cifrar - + Logical Llóxica - + Primary Primaria - + GPT GPT - + Mountpoint already in use. Please select another one. El puntu de montaxe yá ta n'usu. Esbilla otru, por favor. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Creando una partición %1 en %2. - + The installer failed to create partition on disk '%1'. L'instalador falló al crear la partición nel discu «%1». @@ -901,27 +1131,27 @@ L'instalador va colar y van perdese tolos cambeos. CreatePartitionTableDialog - + Create Partition Table Creación d'una tabla de particiones - + Creating a new partition table will delete all existing data on the disk. Crear una tabla de particiones va desaniciar tolos datos esistentes nel discu. - + What kind of partition table do you want to create? ¿Qué triba de tabla de particiones quies crear? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -929,22 +1159,22 @@ L'instalador va colar y van perdese tolos cambeos. CreatePartitionTableJob - + Create new %1 partition table on %2. Creación d'una tabla de particiones %1 en %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Va crease una tabla de particiones <strong>%1</strong> en <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Creando una tabla de particiones %1 en %2. - + The installer failed to create a partition table on %1. L'instalador falló al crear la tabla de particiones en %1. @@ -952,45 +1182,41 @@ L'instalador va colar y van perdese tolos cambeos. CreateUserJob - + Create user %1 Creación del usuariu %1 - + Create user <strong>%1</strong>. Va crease l'usuariu <strong>%1</strong>. - - Creating user %1. - Creando l'usuariu %1. + + Preserving home directory + - - Sudoers dir is not writable. - El direutoriu de sudoers nun ye escribible. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Nun pue crease'l ficheru sudoers pa la escritura. + + Configuring user %1 + - - Cannot chmod sudoers file. - Nun pue facese chmod al ficheru sudoers. - - - - Cannot open groups file for reading. - Nun pue abrise pa la llectura'l ficheru de grupos. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -998,22 +1224,22 @@ L'instalador va colar y van perdese tolos cambeos. CreateVolumeGroupJob - + Create new volume group named %1. Creación d'un grupu de volúmenes col nome %1. - + Create new volume group named <strong>%1</strong>. Va crease un grupu de volúmenes col nome <strong>%1</strong>. - + Creating new volume group named %1. Creando un grupu de volúmenes col nome %1. - + The installer failed to create a volume group named '%1'. L'instalador falló al crear un grupu de volúmenes col nome %1. @@ -1021,18 +1247,18 @@ L'instalador va colar y van perdese tolos cambeos. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Desactivación del grupu de volúmenes col nome %1. - + Deactivate volume group named <strong>%1</strong>. Va desactivase'l grupu de volúmenes col nome <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. L'instalador falló al desactivar un grupu de volúmenes col nome %1. @@ -1040,22 +1266,22 @@ L'instalador va colar y van perdese tolos cambeos. DeletePartitionJob - + Delete partition %1. Desaniciu de la partición %1. - + Delete partition <strong>%1</strong>. Va desaniciase la partición <strong>%1</strong>. - + Deleting partition %1. Desaniciando la partición %1. - + The installer failed to delete partition %1. L'instalador falló al desaniciar la partición %1. @@ -1063,46 +1289,46 @@ L'instalador va colar y van perdese tolos cambeos. DeviceInfoWidget - - 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. - La triba de la <strong>tabla de particiones</strong> nel preséu d'almacenamientu esbilláu.<br><br>L'únicu mou de camudalo ye desaniciala y recreala dende l'empiezu, lo que va destruyir tolos datos nel preséu d'almacenamientu.<br>Esti instalador va caltener la tabla de particiones actual a nun ser qu'escueyas otra cosa esplícitamente.<br>Si nun tas seguru, en sistemes modernos prefierse GPT. - - - + This device has a <strong>%1</strong> partition table. Esti preséu tien una tabla de particiones <strong>%1</strong>. - + 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. Esto ye un preséu <strong>loop</strong>.<br><br>Ye un pseudopreséu ensin una tabla de particiones que fai qu'un ficheru seya accesible como preséu de bloques. A vegaes, esta triba de configuración namás contién un sistema de ficheros. - + 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. Esti instalador <strong>nun pue deteutar una tabla de particiones</strong> nel preséu d'almacenamientu esbilláu.<br><br>El preséu nun tien una tabla de particiones porque ta toyida o ye d'una triba desconocida.<br>Esti instalador pue crear una tabla de particiones nueva por ti, automáticamente o pente la páxina de particionáu manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Esta ye la tabla de particiones aconseyada pa sistemes modernos qu'anicien dende un entornu d'arrinque <strong>EFI</strong>. - + <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. <br><br>Esta triba de tabla de particiones namás s'aconseya en sistemes vieyos qu'anicien dende un entornu d'arrinque <strong>BIOS</strong>. GPT aconséyase na mayoría de los demás casos.<br><br><strong>Alvertencia:</strong> la tabla de particiones MBR ye un estándar obsoletu de la dómina de MS-DOS.<br>Namás van poder crease cuatro particiones <em>primaries</em>, y una d'eses cuatro, namás vas poder ser una partición <em>estendida</em> que va contener munches particiones <em>llóxiques</em>. + + + 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. + La triba de la <strong>tabla de particiones</strong> nel preséu d'almacenamientu esbilláu.<br><br>L'únicu mou de camudalo ye desaniciala y recreala dende l'empiezu, lo que va destruyir tolos datos nel preséu d'almacenamientu.<br>Esti instalador va caltener la tabla de particiones actual a nun ser qu'escueyas otra cosa esplícitamente.<br>Si nun tas seguru, en sistemes modernos prefierse GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1111,17 +1337,17 @@ L'instalador va colar y van perdese tolos cambeos. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escritura de la configuración LUKS pa Dracut en %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omisión de la escritura de la configuración LUKS pa Dracut: La partición «/» nun ta cifrada - + Failed to open %1 Fallu al abrir %1 @@ -1129,7 +1355,7 @@ L'instalador va colar y van perdese tolos cambeos. DummyCppJob - + Dummy C++ Job Trabayu maniquín en C++ @@ -1137,123 +1363,167 @@ L'instalador va colar y van perdese tolos cambeos. EditExistingPartitionDialog - + Edit Existing Partition Edición d'una partición esistente - - Content: - Conteníu: + + Con&tent: + - + &Keep &Caltener - + Format Formatiar - + Warning: Formatting the partition will erase all existing data. Alvertencia: Formatiar la partición va desaniciar tolos datos esistentes. - + &Mount Point: Puntu de &montaxe: - + Si&ze: Tama&ñu: - + MiB MiB - + Fi&le System: Sistema de &ficheros: - + Flags: Banderes: - - Mountpoint already in use. Please select another one. - El puntu de montaxe yá ta n'usu. Esbilla otru, por favor. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formulariu - + En&crypt system &Cifrar el sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Fras de pasu - + Confirm passphrase Confirmación de la fras de pasu - + + Please enter the same passphrase in both boxes. Introduz la mesma fras de pasu en dambes caxes, por favor. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Afitamientu de la información de les particiones - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Va instalase %1 na partición %2 <strong>nueva</strong> del sistema. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Va configurase una partición %2 <strong>nueva</strong> col puntu de montaxe <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Va instalase %2 na partición %3 del sistema de <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Va configurase la partición %3 de <strong>%1</strong> col puntu de montaxe <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Va instalase'l xestor d'arrinque en <strong>%1</strong>. - + Setting up mount points. Configurando los puntos de montaxe. @@ -1261,93 +1531,81 @@ L'instalador va colar y van perdese tolos cambeos. FinishedPage - + Form Formulariu - + &Restart now &Reaniciar agora - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Too fecho.</h1><br/>%1 configuróse nel ordenador.<br/>Agora pues usar el sistema nuevu. - + <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> <html><head/><body><p>Cuando se conseña esti caxellu, el sistema va reaniciase nel intre cuando calques en <span style="font-style:italic;">Fecho</span> o zarres el programa de configuración.</p></body></html> - + <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. <h1>Too fecho.</h1><br/>%1 instalóse nel ordenador.<br/>Agora pues renaiciar nel sistema nuevu o siguir usando l'entornu live de %2. - + <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> <html><head/><body><p>Cuando se conseña esti caxellu, el sistema va reaniciase nel intre cuando calques en <span style="font-style:italic;">Fecho</span> o zarres l'instalador.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Falló la configuración</h1><br/>%1 nun se configuró nel ordenador.<br/>El mensaxe de fallu foi: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Falló la instalación</h1><br/>%1 nun s'instaló nel ordenador.<br/>El mensaxe de fallu foi: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Fin + + + FinishedViewStep - - Setup Complete - Configuración completada - - - - Installation Complete - Instalación completada - - - - The setup of %1 is complete. - La configuración de %1 ta completada. - - - - The installation of %1 is complete. - Completóse la instalación de %1. + + Finish + Fin FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatiando la partición %1 col sistema de ficheros %2. - + The installer failed to format partition %1 on disk '%2'. L'instalador falló al formatiar la partición %1 nel discu «%2». @@ -1355,72 +1613,72 @@ L'instalador va colar y van perdese tolos cambeos. GeneralRequirements - + has at least %1 GiB available drive space tien polo menos %1 GiB d'espaciu disponible nel discu - + There is not enough drive space. At least %1 GiB is required. Nun hai espaciu abondu nel discu. Ríquense polo menos %1 GiB. - + has at least %1 GiB working memory tien polo menos %1 GiB memoria de trabayu - + The system does not have enough working memory. At least %1 GiB is required. El sistema nun tien abonda memoria de trabayu. Ríquense polo menos %1 GiB. - + is plugged in to a power source ta enchufáu a una fonte d'enerxía - + The system is not plugged in to a power source. El sistema nun ta enchufáu a una fonte d'enerxía. - + is connected to the Internet ta coneutáu a internet - + The system is not connected to the Internet. El sistema nun ta coneutáu a internet. - + is running the installer as an administrator (root) - + ta executando l'instalador como alministrador (root) - + The setup program is not running with administrator rights. El programa de configuración nun ta executándose con drechos alministrativos. - + The installer is not running with administrator rights. L'instalador nun ta executándose con drechos alministrativos. - + has a screen large enough to show the whole installer - + tien una pantalla abondo grande como p'amosar tol instalador - + The screen is too small to display the setup program. La pantalla ye mui pequeña como p'amosar el programa de configuración. - + The screen is too small to display the installer. La pantalla ye mui pequeña como p'amosar l'instalador. @@ -1428,7 +1686,7 @@ L'instalador va colar y van perdese tolos cambeos. HostInfoJob - + Collecting information about your machine. @@ -1436,25 +1694,25 @@ L'instalador va colar y van perdese tolos cambeos. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. Nun pudieron crease los direutorios <code>%1</code>. - + Could not open file <code>%1</code>. Nun pudo abrise'l ficheru <code>%1</code>. - + Could not write to file <code>%1</code>. Nun pudo escribise nel ficheru <code>%1</code>. @@ -1462,7 +1720,7 @@ L'instalador va colar y van perdese tolos cambeos. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1470,7 +1728,7 @@ L'instalador va colar y van perdese tolos cambeos. InitramfsJob - + Creating initramfs. @@ -1478,17 +1736,17 @@ L'instalador va colar y van perdese tolos cambeos. InteractiveTerminalPage - + Konsole not installed Konsole nun s'instaló - + Please install KDE Konsole and try again! ¡Instala Konsole y volvi tentalo! - + Executing script: &nbsp;<code>%1</code> Executando'l script: &nbsp;<code>%1</code> @@ -1496,28 +1754,15 @@ L'instalador va colar y van perdese tolos cambeos. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Va afitase'l modelu del tecláu a %1.<br/> - - - - Set keyboard layout to %1/%2. - Va afitase la distrubución del tecláu a %1/%2. - - KeyboardQmlViewStep - + Keyboard Tecláu @@ -1525,7 +1770,7 @@ L'instalador va colar y van perdese tolos cambeos. KeyboardViewStep - + Keyboard Tecláu @@ -1533,65 +1778,88 @@ L'instalador va colar y van perdese tolos cambeos. LCLocaleDialog - + System locale setting Axuste de la locale del sistema - + 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>. L'axuste de la locale del sistema afeuta a la llingua y al conxuntu de caráuteres de dalgunos elementos de la interfaz d'usuariu en llinia de comandos. <br/>L'axuste actual ye <strong>%1</strong>. - + &Cancel &Encaboxar - + &OK &Aceutar + + LOSHJob + + + Configuring encrypted swap. + Configurando l'intercambéu cifráu. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulariu - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Aceuto los términos y condiciones d'enriba. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. Esti procedimientu va instalar software privativu que ta suxetu a términos de llicencia. - + If you do not agree with the terms, the setup procedure cannot continue. Si nun aceutes los términos, el procedimientu de configuración nun pue siguir. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Esti procedimientu de configuración pue instalar software privativu que ta suxetu a términos de llicencia pa fornir carauterístiques adicionales y ameyorar la esperiencia d'usuariu. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si nun aceutes los términos, el software privativu nun va instalase y van usase les alternatives de códigu abiertu. @@ -1599,7 +1867,7 @@ L'instalador va colar y van perdese tolos cambeos. LicenseViewStep - + License Llicencia @@ -1607,109 +1875,102 @@ L'instalador va colar y van perdese tolos cambeos. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Controlador %1</strong><br/>por %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Controlador gráficu %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Plugin de restolador %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Códec %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquete %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> - + File: %1 Ficheru: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - La llingua del sistema va afitase a %1. - - - - The numbers and dates locale will be set to %1. - La númberación y data van afitase en %1. - - - + Region: Rexón: - + Zone: Zona: - - + + &Change... &Camudar... - - - Set timezone to %1/%2.<br/> - Va afitase'l fusu horariu a %1/%2.<br/> - LocaleQmlViewStep - + Location Allugamientu + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Allugamientu @@ -1717,35 +1978,35 @@ L'instalador va colar y van perdese tolos cambeos. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1753,124 +2014,138 @@ L'instalador va colar y van perdese tolos cambeos. MachineIdJob - + Generate machine-id. Xeneración de machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Esbilla de paquetes - + Office software Software ofimáticu - + Office package Paquete ofimáticu - + Browser software - + Browser package - + Web browser Restolador web - + Kernel Kernel - + Services Servicios - + Login - + Desktop Escritoriu - + Applications Aplicaciones - + Communication - + Comunicación - + Development - + Desendolcu - + Office - + Oficina - + Multimedia - + Multimedia - + Internet - + Internet - + Theming - + Estilu - + Gaming - + Utilities - + Utilidaes NotesQmlViewStep - + Notes Notes @@ -1878,17 +2153,17 @@ L'instalador va colar y van perdese tolos cambeos. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1896,260 +2171,317 @@ L'instalador va colar y van perdese tolos cambeos. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short La contraseña ye percurtia - + Password is too long La contraseña ye perllarga - + Password is too weak La contraseña ye perfeble - + Memory allocation error when setting '%1' Fallu d'asignación de memoria al afitar «%1» - + Memory allocation error Fallu d'asignación de memoria - + The password is the same as the old one La contraseña ye la mesma que la vieya - + The password is a palindrome La contraseña ye un palíndromu - + The password differs with case changes only La contraseña namás s'estrema polos cambeos de mayúscules y minúscules - + The password is too similar to the old one La contraseña aseméyase muncho a la vieya - + The password contains the user name in some form La contraseña contién de dalgún mou'l nome d'usuariu - + The password contains words from the real name of the user in some form La contraseña contién de dalgún mou pallabres del nome real del usuariu - + The password contains forbidden words in some form La contraseña contién de dalgún mou pallabres prohibíes - - The password contains less than %1 digits - La contraseña contién menos de %1 díxitos - - - + The password contains too few digits La contraseña contién prepocos díxitos - - The password contains less than %1 uppercase letters - La contraseña contién menos de %1 lletres mayúscules - - - + The password contains too few uppercase letters La contraseña contién perpoques lletres mayúscules - - - The password contains less than %1 lowercase letters - La contraseña contién menos de %1 lletres minúscules + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters La contraseña contién perpoques lletres minúscules - - The password contains less than %1 non-alphanumeric characters - La contraseña contién menos de %1 caráuteres que nun son alfanumbéricos - - - + The password contains too few non-alphanumeric characters La contraseña contién perpocos caráuteres que nun son alfanumbéricos - - The password is shorter than %1 characters - La contraseña tien menos de %1 caráuteres - - - + The password is too short La contraseña ye percurtia - - The password is just rotated old one - La contraseña ye l'anterior pero al aviesu - - - - The password contains less than %1 character classes - La contraseña contién menos de %1 clases de caráuteres - - - + The password does not contain enough character classes La contraseña nun contién abondes clases de caráuteres - - The password contains more than %1 same characters consecutively - La contraseña contién más de %1 caráuteres iguales consecutivamente - - - + The password contains too many same characters consecutively La contraseña contién milenta caráuteres iguales consecutivamente - - The password contains more than %1 characters of the same class consecutively - La contraseña contién más de %1 caráuteres de la mesma clas consecutivamente - - - + The password contains too many characters of the same class consecutively La contraseña contién milenta caráuteres de la mesma clas consecutivamente - - - The password contains monotonic sequence longer than %1 characters - La contraseña tien una secuencia monotónica de más de %1 caráuteres + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence La contraseña contién una secuencia perllarga de caráuteres monotónicos - + No password supplied Nun s'apurrió nenguna contraseña - + Cannot obtain random numbers from the RNG device Nun puen consiguise los númberos al debalu del preséu RNG - + Password generation failed - required entropy too low for settings Falló la xeneración de la contraseña - ríquese una entropía perbaxa pa los axustes - + The password fails the dictionary check - %1 La contraseña falla la comprobación del diccionariu - %1 - + The password fails the dictionary check La contraseña falla la comprobación del diccionariu - + Unknown setting - %1 Desconozse l'axuste - %1 - + Unknown setting Desconozse l'axuste - + Bad integer value of setting - %1 El valor enteru del axuste ye incorreutu - %1 - + Bad integer value El valor enteru ye incorreutu - + Setting %1 is not of integer type L'axuste %1 nun ye de la triba enteru - + Setting is not of integer type L'axuste nun ye de la triba enteru - + Setting %1 is not of string type L'axuste %1 nun ye de la triba cadena - + Setting is not of string type L'axuste nun ye de la triba cadena - + Opening the configuration file failed Falló l'apertura del ficheru de configuración - + The configuration file is malformed El ficheru de configuración ta malformáu - + Fatal failure Fallu fatal - + Unknown error Desconozse'l fallu - + Password is empty La contraseña ta balera @@ -2157,40 +2489,48 @@ L'instalador va colar y van perdese tolos cambeos. PackageChooserPage - + Form Formulariu - + Product Name - + TextLabel Etiqueta de testu - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + Paquetes + + PackageChooserViewStep - + Packages Paquetes @@ -2198,12 +2538,12 @@ L'instalador va colar y van perdese tolos cambeos. PackageModel - + Name Nome - + Description Descripción @@ -2211,17 +2551,17 @@ L'instalador va colar y van perdese tolos cambeos. Page_Keyboard - + Form Formulariu - + Keyboard Model: Modelu del tecláu: - + Type here to test your keyboard Teclexa equí pa probar el tecláu @@ -2229,96 +2569,96 @@ L'instalador va colar y van perdese tolos cambeos. Page_UserSetup - + Form Formulariu - + What is your name? ¿Cómo te llames? - - What name do you want to use to log in? - ¿Qué nome quies usar p'aniciar sesión? - - - - Choose a password to keep your account safe. - Escueyi una contraseña pa caltener segura la cuenta. - - - - - <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> - <small>Introduz la mesma contraseña dos vegaes pa que pueas comprobar los fallos d'escritura. Una contraseña bona contién un mestu de lletres, númberos y signos de puntuación, debería ser de polo menos ocho caráuteres de llargor y debería camudase davezu.</small> - - - - What is the name of this computer? - ¿Cómo va llamase esti ordenador? - - - + Your Full Name - + + What name do you want to use to log in? + ¿Qué nome quies usar p'aniciar sesión? + + + login - + + What is the name of this computer? + ¿Cómo va llamase esti ordenador? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Esti nome va usase si quies facer qu'esti ordenador seya visible a otres máquines nuna rede.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Escueyi una contraseña pa caltener segura la cuenta. + + + + + <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> + <small>Introduz la mesma contraseña dos vegaes pa que pueas comprobar los fallos d'escritura. Una contraseña bona contién un mestu de lletres, númberos y signos de puntuación, debería ser de polo menos ocho caráuteres de llargor y debería camudase davezu.</small> + + + + Password Contraseña - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Aniciar sesión automáticamente ensin pidir la contraseña. - + Use the same password for the administrator account. Usar la mesma contraseña pa la cuenta d'alministrador. - + Choose a password for the administrator account. Escueyi una contraseña pa la cuenta alministrativa. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduz la mesma contraseña dos vegaes pa que pueas comprobar los fallos d'escritura.</small> @@ -2326,42 +2666,42 @@ L'instalador va colar y van perdese tolos cambeos. PartitionLabelsView - + Root Raigañu - + Home Aniciu - + Boot Arrinque - + EFI system Sistema EFI - + Swap Intercambéu - + New partition for %1 Partición nueva pa %1 - + New partition Partición nueva - + %1 %2 size[number] filesystem[name] %1 de %2 @@ -2370,34 +2710,39 @@ L'instalador va colar y van perdese tolos cambeos. PartitionModel - - + + Free Space Espaciu llibre - - + + New partition Partición nueva - + Name Nome - + File System Sistema de ficheros - + + File System Label + + + + Mount Point Puntu de montaxe - + Size Tamañu @@ -2405,77 +2750,77 @@ L'instalador va colar y van perdese tolos cambeos. PartitionPage - + Form Formulariu - + Storage de&vice: Preséu d'al&macenamientu: - + &Revert All Changes &Desfacer tolos cambeos - + New Partition &Table &Tabla de particiones nueva - + Cre&ate Cre&ar - + &Edit &Editar - + &Delete &Desaniciar - + New Volume Group Grupu nuevu - + Resize Volume Group Redimensionar el grupu - + Deactivate Volume Group Desactivar el grupu - + Remove Volume Group Desaniciar el grupu - + I&nstall boot loader on: I&nstalar el xestor d'arrinque en: - + Are you sure you want to create a new partition table on %1? ¿De xuru que quies crear una tabla de particiones nueva en %1? - + Can not create new partition Nun pue crease la partición nueva - + 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. La tabla de particiones en %1 yá tien %2 particiones primaries y nun puen amestase más. Desanicia una partición primaria y amiesta otra estendida. @@ -2483,117 +2828,107 @@ L'instalador va colar y van perdese tolos cambeos. PartitionViewStep - + Gathering system information... Recoyendo la información del sistema... - + Partitions Particiones - - Install %1 <strong>alongside</strong> another operating system. - Va instalase %1 <strong>xunto a</strong> otru sistema operativu. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Va desaniciase</strong>'l discu y va instalase %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Va trocase</strong> una partición con %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Particionáu <strong>manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Va instalase %1 <strong>xunto a</strong> otru sistema operativu nel discu <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Va desaniciase</strong>'l discu <strong>%2</strong> (%3) y va instalase %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Va trocase</strong> una partición nel discu <strong>%2</strong> (%3) con %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particionáu <strong>manual</strong> nel discu <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Discu <strong>%1</strong> (%2) - - - + Current: Anguaño: - + After: Dempués: - + No EFI system partition configured Nun se configuró nenguna partición del sistema EFI - - 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>esp</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. - Precísase una partición del sistema EFI p'aniciar %1. <br/><br/>Pa configurar una, volvi atrás y esbilla o crea un sistema de ficheros en FAT32 cola bandera <strong>esp</strong> activada y el puntu de montaxe <strong>%2</strong>.<br/><br/>Pues siguir ensin configurar una partición del sistema EFI pero el sistema fallaría al aniciase. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Nun s'afitó la bandera del sistema EFI + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Precísase una partición del sistema EFI p'aniciar %1.<br/><br/>Configuróse una partición col puntu de montaxe <strong>%2</strong> pero nun s'afitó la bandera <strong>esp</strong>. Pa facelo, volvi p'atrás y edita la partición.<br/><br/>Pues siguir ensin afitar esa bandera pero'l sistema fallaría al aniciar. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted La partición d'arrinque nun ta cifrada - + 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. Configuróse una partición d'arrinque xunto con una partición raigañu cifrada pero la partición d'arrinque nun ta cifrada.<br/><br/>Hai problemes de seguranza con esta triba de configuración porque los ficheros importantes del sistema caltiénense nuna partición ensin cifrar.<br/>Podríes siguir si quixeres pero'l desbloquéu del sistema de ficheros va asoceder más sero nel aniciu del sistema.<br/>Pa cifrar la partición raigañu, volvi p'atrás y recreala esbillando <strong>Cifrar</strong> na ventana de creación de particiones. - + has at least one disk device available. tien polo menos un preséu disponible d'almacenamientu - + There are no partitions to install on. Nun hai particiones nes qu'instalar. @@ -2601,13 +2936,13 @@ L'instalador va colar y van perdese tolos cambeos. PlasmaLnfJob - + Plasma Look-and-Feel Job Trabayu Look-and-Feel de Plasma - - + + Could not select KDE Plasma Look-and-Feel package Nun pudo esbillase'l paquete Look-and-Feel de KDE Plasma @@ -2615,17 +2950,17 @@ L'instalador va colar y van perdese tolos cambeos. PlasmaLnfPage - + Form Formulariu - + 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. - + 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. Escueyi un aspeutu pal escritoriu de KDE Plasma, por favor. Tamién pues saltar esti pasu y configurar l'aspeutu nel momentu que s'instale'l sistema. Calcando nun aspeutu, esti va date una previsualización en direuto de cómo se ve. @@ -2633,7 +2968,7 @@ L'instalador va colar y van perdese tolos cambeos. PlasmaLnfViewStep - + Look-and-Feel Aspeutu @@ -2641,17 +2976,17 @@ L'instalador va colar y van perdese tolos cambeos. PreserveFiles - + Saving files for later ... Guardando ficheros pa dempués... - + No files configured to save for later. Nun se configuraron ficheros pa guardar dempués. - + Not all of the configured files could be preserved. Nun pudieron caltenese tolos ficheros configuraos. @@ -2659,14 +2994,14 @@ L'instalador va colar y van perdese tolos cambeos. ProcessResult - + There was no output from the command. El comandu nun produxo nenguna salida. - + Output: @@ -2675,52 +3010,52 @@ Salida: - + External command crashed. El comandu esternu cascó. - + Command <i>%1</i> crashed. El comandu <i>%1</i> cascó. - + External command failed to start. El comandu esternu falló al aniciar. - + Command <i>%1</i> failed to start. El comandu <i>%1</i> falló al aniciar. - + Internal error when starting command. Fallu internu al aniciar el comandu. - + Bad parameters for process job call. Los parámetros son incorreutos pa la llamada del trabayu de procesos. - + External command failed to finish. El comandu esternu finó al finar. - + Command <i>%1</i> failed to finish in %2 seconds. El comandu <i>%1</i> falló al finar en %2 segundos. - + External command finished with errors. El comandu esternu finó con fallos. - + Command <i>%1</i> finished with exit code %2. El comandu <i>%1</i> finó col códigu de salida %2. @@ -2728,89 +3063,95 @@ Salida: QObject - - Default Keyboard Model - Modelu predetermináu del telcáu - - - - - Default - Por defeutu - - - - unknown - desconozse - - - - extended - estendida - - - - unformatted - ensin formatiar - - - - swap - intercambéu - - - - Unpartitioned space or unknown partition table - L'espaciu nun ta particionáu o nun se conoz la tabla de particiones - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - Completóse la comprobación de requirimientos del módulu <i>%1</i> - - - + %1 (%2) %1 (%2) - - No product - + + unknown + desconozse - - No description provided. - + + extended + estendida - - - - + + unformatted + ensin formatiar + + + + swap + intercambéu + + + + + Default + Por defeutu + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. El camín <pre>%1</pre> ha ser absolutu. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + L'espaciu nun ta particionáu o nun se conoz la tabla de particiones + + + + Recommended + + + <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> + <p>Esti ordenador nun satisfaz nengún de los requirimientos aconseyaos pa configurar %1.<br/> + La configuración pue siguir pero quiciabes se desactiven dalgunes carauterístiques.</p> + RemoveUserJob - + Remove live user from target system @@ -2818,18 +3159,18 @@ Salida: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Desaniciu del grupu de volúmenes %1. - + Remove Volume Group named <strong>%1</strong>. Va desaniciase'l grupu de volúmenes col nome <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. L'instalador falló al desaniciar un grupu de volúmenes col nome %1. @@ -2837,143 +3178,160 @@ Salida: ReplaceWidget - + Form Formulariu - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Esbilla ónde instalar %1.<br/><font color="red">Alvertencia:</font> esto va desaniciar tolos ficheros de la partición esbillada. - + The selected item does not appear to be a valid partition. L'elementu esbilláu nun paez ser una partición válida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 nun pue instalase nel espaciu baleru. Esbilla una partición esistente, por favor. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nun pue instalase nuna partición estendida. Esbilla una partición primaria o llóxica esistente, por favor. - + %1 cannot be installed on this partition. %1 nun pue instalase nesta partición. - + Data partition (%1) Partición de datos (%1) - + Unknown system partition (%1) Desconozse la partición del sistema (%1) - + %1 system partition (%2) Partición %1 del sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 ye perpequeña pa %2. Esbilla una con una capacidá de polo menos %3GB. - + <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. <strong>%2</strong><br/><br/>Nun pudo alcontrase per nenyures una partición del sistema EFI. Volvi p'atrás y usa'l particionáu manual pa configurar %1, por favor. - - - + + + <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. <strong>%3</strong><br/><br/>%1 va instalase en %2.<br/><font color="red">Alvertencia: </font>van perdese tolos datos de la partición %2. - + The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 va usase p'aniciar %2. - + EFI system partition: Partición del sistema EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Esti ordenador nun satisfaz los requirimientos mínimos pa instalar %1.<br/> + La instalación nun pue siguir.</p> + + + + <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> + <p>Esti ordenador nun satisfaz nengún de los requirimientos aconseyaos pa configurar %1.<br/> + La configuración pue siguir pero quiciabes se desactiven dalgunes carauterístiques.</p> + + ResizeFSJob - + Resize Filesystem Job Trabayu de redimensionáu de sistemes de ficheros - + Invalid configuration La configuración nun ye válida - + The file-system resize job has an invalid configuration and will not run. El trabayu de redimensionáu de sistemes de ficheros tien una configuración non válida y nun va executase. - + KPMCore not Available KPMCore nun ta disponible - + Calamares cannot start KPMCore for the file-system resize job. Calamares nun pue aniciar KPMCore pal trabayu de redimensionáu de sistemes de ficheros. - - - - - + + + + + Resize Failed Falló'l redimensionáu - + The filesystem %1 could not be found in this system, and cannot be resized. Nun pudo alcontrase nel sistema'l sistema de ficheros %1 y nun pue redimensionase. - + The device %1 could not be found in this system, and cannot be resized. Nun pudo alcontrase nel sistema'l preséu %1 y nun pue redimensionase. - - + + The filesystem %1 cannot be resized. El sistema de ficheros %1 nun pue redimensionase. - - + + The device %1 cannot be resized. El preséu %1 nun pue redimensionase. - + The filesystem %1 must be resized, but cannot. El sistema de ficheros %1 ha redimensionase, pero nun se pue. - + The device %1 must be resized, but cannot El preséu %1 ha redimensionase, pero nun se pue @@ -2981,22 +3339,22 @@ Salida: ResizePartitionJob - + Resize partition %1. Redimensión de la partición %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. L'instalador falló al redimensionar la partición %1 nel discu «%2». @@ -3004,7 +3362,7 @@ Salida: ResizeVolumeGroupDialog - + Resize Volume Group Redimensionar el grupu @@ -3012,18 +3370,18 @@ Salida: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Redimensionáu del grupu de volúmenes col nome %1 de %2 a %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Va redimensionase'l grupu de volúmenes col nome <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. L'instalador falló al redimensionar un grupu de volúmenes col nome «%1». @@ -3031,53 +3389,25 @@ Salida: ResultsListDialog - + For best results, please ensure that this computer: Pa los meyores resultaos, asegúrate qu'esti ordenador: - + System requirements Requirimientos del sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Esti ordenador nun satisfaz dalgún de los requirimientos mínimos pa configurar %1.<br/>La configuración nun pue siguir. <a href="#details">Detalles...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Esti ordenador nun satisfaz los requirimientos mínimos pa instalar %1.<br/>La instalación nun pue siguir. <a href="#details">Detalles...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Esti ordenador nun satisfaz dalgún de los requirimientos aconseyaos pa configurar %1.<br/>La configuración pue siguir pero dalgunes carauterístiques podríen desactivase. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Esti ordenador nun satisfaz dalgún requirimientu aconseyáu pa instalar %1.<br/>La instalación pue siguir pero podríen desactivase dalgunes carauterístiques. - - - - This program will ask you some questions and set up %2 on your computer. - Esti programa va facete dalgunes entrugues y va configurar %2 nel ordenador. - - ScanningDialog - + Scanning storage devices... Escaniando preseos d'almacenamientu... - + Partitioning Particionáu @@ -3085,29 +3415,29 @@ Salida: SetHostNameJob - + Set hostname %1 Afitamientu del nome d'agospiu a %1 - + Set hostname <strong>%1</strong>. Va afitase'l nome d'agospiu <strong>%1</strong>. - + Setting hostname %1. Afitando'l nome d'agospiu %1. + - Internal Error Fallu internu - - + + Cannot write hostname to target system Nun pue escribise'l nome d'agospiu nel sistema de destín @@ -3115,29 +3445,29 @@ Salida: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Afitamientu del modelu del tecláu a %1, distribución %2-%3 - + Failed to write keyboard configuration for the virtual console. Fallu al escribir la configuración del tecláu pa la consola virtual. - - - + + + Failed to write to %1 Fallu al escribir en %1 - + Failed to write keyboard configuration for X11. Fallu al escribir la configuración del tecláu pa X11. - + Failed to write keyboard configuration to existing /etc/default directory. Fallu al escribir la configuración del tecláu nel direutoriu esistente de /etc/default . @@ -3145,82 +3475,82 @@ Salida: SetPartFlagsJob - + Set flags on partition %1. Afitamientu de banderes na partición %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Afitamientu de banderes na partición nueva. - + Clear flags on partition <strong>%1</strong>. Van llimpiase les banderes de la partición <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Llimpieza de les banderes de la partición nueva. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Va afitase la bandera <strong>%2</strong> na partición <strong>%1</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Va afitase la bandera <strong>%1</strong> na partición nueva. - + Clearing flags on partition <strong>%1</strong>. Llimpiando les banderes de la partición <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Llimpiando les banderes de la partición nueva. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Afitando les banderes <strong>%2</strong> na partición <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Afitando les banderes <strong>%1</strong> na partición nueva. - + The installer failed to set flags on partition %1. L'instalador falló al afitar les banderes na partición %1. @@ -3228,42 +3558,42 @@ Salida: SetPasswordJob - + Set password for user %1 Afitamientu de la contraseña del usuariu %1 - + Setting password for user %1. Afitando la contraseña del usuariu %1. - + Bad destination system path. El camín del sistema de destín ye incorreutu. - + rootMountPoint is %1 rootMountPoint ye %1 - + Cannot disable root account. Nun pue desactivase la cuenta root. - + passwd terminated with error code %1. passwd terminó col códigu de fallu %1. - + Cannot set password for user %1. Nun pue afitase la contraseña del usuariu %1. - + usermod terminated with error code %1. usermod terminó col códigu de fallu %1. @@ -3271,45 +3601,82 @@ Salida: SetTimezoneJob - + Set timezone to %1/%2 Afitamientu del fusu horariu a %1/%2 - + Cannot access selected timezone path. Nun pue accedese al camín del fusu horariu esbilláu. - + Bad path: %1 Camín incorreutu: %1 - + Cannot set timezone. Nun pue afitase'l fusu horariu. - + Link creation failed, target: %1; link name: %2 Falló la creación del enllaz, destín: %1 ; nome del enllaz: %2 - + Cannot set timezone, Nun pue afitase'l fusu horariu, - + Cannot open /etc/timezone for writing Nun pue abrise /etc/timezone pa la escritura + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Nun pue facese chmod al ficheru sudoers. + + + + Cannot create sudoers file for writing. + Nun pue crease'l ficheru sudoers pa la escritura. + + ShellProcessJob - + Shell Processes Job Trabayu de procesos de la shell @@ -3317,81 +3684,117 @@ Salida: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu de configuración. + + &OK + &Aceutar - - This is an overview of what will happen once you start the install procedure. - Esto ye una previsualización de lo que va asoceder nel momentu qu'anicies el procesu d'instalación. + + &Yes + &Sí - - - SummaryViewStep - - Summary - Sumariu + + &No + &Non + + + + &Cancel + &Encaboxar + + + + &Close + &Zarrar TrackingInstallJob - + Installation feedback Instalación del siguimientu - + Sending installation feedback. Unviando'l siguimientu de la instalación. - + Internal error in install-tracking. Fallu internu n'install-tracking. - + HTTP request timed out. Escosó'l tiempu d'espera de la solicitú HTTP. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Siguimientu de la máquina - + Configuring machine feedback. Configurando'l siguimientu de la máquina. - - + + Error in machine feedback configuration. Fallu na configuración del siguimientu de la máquina. - + Could not configure machine feedback correctly, script error %1. Nun pudo configurase afayadizamente'l siguimientu de la máquina, fallu del script %1. - + Could not configure machine feedback correctly, Calamares error %1. Nun pudo configurase afayadizamente'l siguimientu de la máquina, fallu de Calamares %1. @@ -3399,106 +3802,97 @@ Salida: TrackingPage - + Form Formulariu - + Placeholder Espaciu acutáu - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Esbillando esto, <span style=" font-weight:600;">nun vas unviar nenguna información</span> tocante a la instalación.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Calca equí pa más información tocante al siguimientu d'usuarios</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Instalar el rastrexu ayuda a %1 a saber cuantos usuarios tien, el hardware qu'usen pa instalar %1 y (coles dos opciones d'embaxo), consiguir información continua tocante a les aplicaciones preferíes. Pa ver lo que va unviase, calca l'iconu d'ayuda al llau de cada área. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Esbillando esto vas unviar la información tocante a la instalación y el hardware. Esta información <b>namás va unviase una vegada</b> tres finar la instalación. + + 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. + Al esbillar esto vas unviar información tocante a la instalación y el hardware. Esta información va unviase namás <b>una vegada</b> dempués de finar la instalación. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Esbillando esto vas unviar <b>dacuando</b> la información tocante a la instalación, el hardware y les aplicaciones a %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Esbillando esto vas unviar <b>davezu</b> la información tocante a la instalación, el hardware, les aplicaciones y los patrones d'usu a %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Siguimientu + + UmountJob + + + Unmount file systems. + Desmontaxe de sistemes de ficheros. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la configuración.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si va usar l'ordenador más d'una persona, pues crear más cuentes tres la instalación.</small> + + + UsersQmlViewStep - - Your username is too long. - El nome d'usuariu ye perllargu. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - El nome d'agospiu ye percurtiu. - - - - Your hostname is too long. - El nome d'agospiu ye perllargu. - - - - Your passwords do not match! - ¡Les contraseñes nun concasen! + + Users + Usuarios UsersViewStep - + Users Usuarios @@ -3506,65 +3900,67 @@ Salida: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Valor VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes Llista de volúmenes físicos - + Volume Group Name: Nome del grupu de volúmenes: - + Volume Group Type: Triba del grupu de volúmenes: - + Physical Extent Size: Tamañu físicu d'estensión: - + MiB MiB - + Total Size: Tamañu total: - + Used Size: Tamañu usáu: - + Total Sectors: Seutores totales: - + Quantity of LVs: Cantidá de volúmenes llóxicos: @@ -3572,106 +3968,106 @@ Salida: WelcomePage - + Form Formulariu - - + + Select application and system language + &About + &Tocante a + + + Open donations website - + &Donate - + Open help and support website + &Support + &Sofitu + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - Notes de &llanzamientu - - - &Known issues &Problemes conocíos - - &Support - &Sofitu + + Open release notes website + - - &About - &Tocante a + + &Release notes + Notes de &llanzamientu - - <h1>Welcome to the %1 installer.</h1> - <h1>Afáyate nel instalador de %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Afáyate nel instalador Calamares de %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Afáyate nel programa de configuración de Calamares pa %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Afáyate na configuración de %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Afáyate nel instalador Calamares de %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Afáyate nel instalador de %1.</h1> + + + + %1 support + Sofitu de %1 + + + About %1 setup Tocante a la configuración de %1 - + About %1 installer Tocante al instalador de %1 - + <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. - - - %1 support - Sofitu de %1 - WelcomeQmlViewStep - + Welcome Acoyida @@ -3679,31 +4075,157 @@ Salida: WelcomeViewStep - + Welcome Acoyida + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Amosar la depuración + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3711,86 +4233,283 @@ Salida: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelu del tecláu: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Teclexa equí pa probar el tecláu - - Models - - - - + Variants - + Variantes + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + ¿Cómo te llames? + + + + Your Full Name + + + + + What name do you want to use to log in? + ¿Qué nome quies usar p'aniciar sesión? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + ¿Cómo va llamase esti ordenador? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Escueyi una contraseña pa caltener segura la cuenta. + + + + Password + Contraseña + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Usar la mesma contraseña pa la cuenta d'alministrador. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues Problemes conocíos - + Release notes Notes del llanzamientu - + Donate diff --git a/lang/calamares_az.ts b/lang/calamares_az.ts new file mode 100644 index 000000000..15e4532a6 --- /dev/null +++ b/lang/calamares_az.ts @@ -0,0 +1,4561 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + Avtomatik qoşulma ayarlarını idarə edin + + + + BootInfoWidget + + + 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. + Sistemin <strong>açılış mühiti</strong>.<br><br>Köhnə x86 sistemlər yalnız <strong>BIOS</strong> dəstəkləyir.<br>Müasir sistemlər isə adətən <strong>EFI</strong> istifadə edir, lakin açılış mühiti əgər uyğun rejimdə başladılmışsa, həmçinin BİOS istiafadə edə bilər. + + + + 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. + Bu sistem <strong>EFI</strong> açılış mühiti ilə başladılıb.<br><br>EFİ ilə başlamanı ayarlamaq üçün quraşdırıcı <strong>EFI Sistemi Bölməsi</strong> üzərində <strong>GRUB</strong> və ya <strong>systemd-boot</strong> kimi yükləyici istifadə etməlidir. Bunlar avtomatik olaraq seçilə bilir, lakin istədiyiniz halda diskdə bu bölmələri özünüz əl ilə seçərək bölə bilərsiniz. + + + + 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. + Bu sistem <strong>BIOS</strong> önyükləyici mühiti ilə işə salındı. <br> <br> BIOS mühitindən başlatmanı tənzimləmək üçün, bu quraşdırıcı, ya bölmənin əvvəlində ya da bölmələr cədvəlinin yanında <strong>Əsas Önyükləyici Qeydi</strong> bölməsində <strong>GRUB</strong> kimi bir önyükləyici quraşdırmalıdır (buna üstünlük verilir). Bu, siz əl ilə bölmə yaratmadığınız halda öz-özünə quraşdırılır. Əgər cədvəli siz bölsəniz hər bir bölməni ayrıca ayarlamalısınız. + + + + BootLoaderModel + + + Master Boot Record of %1 + %1 ƏsasÖnyükləyici Qeydi + + + + Boot Partition + Önyükləyici bölməsi + + + + System Partition + Sistem bölməsi + + + + Do not install a boot loader + Önyükləyici quraşdırmayın + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Boş Səhifə + + + + Calamares::DebugWindow + + + Form + Format + + + + GlobalStorage + ÜmumiYaddaş + + + + JobQueue + TapşırıqSırası + + + + Modules + Modullar + + + + Type: + Növ: + + + + + none + heç biri + + + + Interface: + İnterfeys: + + + + Crashes Calamares, so that Dr. Konqui can look at it. + Calamares çökür, belə ki, Dr. Konqui onu görə bilir. + + + + Reloads the stylesheet from the branding directory. + Üslub cədvəlini marka kataloqundan yenidən yükləyir. + + + + Uploads the session log to the configured pastebin. + Sessiya jurnalını konfiqurasiya edilmiş pastebin'ə yükləyir. + + + + Send Session Log + Sessiya jurnalını göndərin + + + + Reload Stylesheet + Üslub cədvəlini yenidən yükləmək + + + + Displays the tree of widget names in the log (for stylesheet debugging). + (Üslub cədvəli sazlamaları üçün) Jurnalda vidjet adları ağacını göstərir. + + + + Widget Tree + Vidjetlər ağacı + + + + Debug information + Sazlama məlumatları + + + + Calamares::ExecutionViewStep + + + Set up + Ayarlamaq + + + + Install + Quraşdırmaq + + + + Calamares::FailJob + + + Job failed (%1) + (%1) Tapşırığı yerinə yetirmək mümkün olmadı + + + + Programmed job failure was explicitly requested. + Proqramın işi, istifadəçi tərəfindən dayandırıldı. + + + + Calamares::JobThread + + + Done + Quraşdırılma başa çatdı + + + + Calamares::NamedJob + + + Example job (%1) + Tapşırıq nümunəsi (%1) + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + '%1' əmrini hədəf sistemdə başlatmaq. + + + + Run command '%1'. + '%1' əmrini başlatmaq. + + + + Running command %1 %2 + %1 əmri icra olunur %2 + + + + Calamares::PythonJob + + + Running %1 operation. + %1 əməliyyatı icra olunur. + + + + Bad working directory path + İş qovluğuna səhv yol + + + + Working directory %1 for python job %2 is not readable. + %1 qovluğu %2 python işləri üçün açıla bilmir. + + + + Bad main script file + Korlanmış əsas əmrlər faylı + + + + Main script file %1 for python job %2 is not readable. + %1 əsas əmrlər faylı %2 python işləri üçün açıla bilmir. + + + + Boost.Python error in job "%1". + Boost.Python iş xətası "%1". + + + + Calamares::QmlViewStep + + + Loading ... + Yüklənir... + + + + QML Step <i>%1</i>. + QML addımı <i>%1</i>. + + + + Loading failed. + Yüklənmə alınmadı. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <i>%1</i>üçün tələblərin yoxlanılması başa çatdı. + + + + Waiting for %n module(s). + + %n modul üçün gözləmə. + %n modul(lar) üçün gözləmə. + + + + + (%n second(s)) + + (%n saniyə(lər)) + (%n saniyə(lər)) + + + + + System-requirements checking is complete. + Sistem uyğunluqları yoxlaması başa çatdı. + + + + Calamares::ViewManager + + + Setup Failed + Quraşdırılma xətası + + + + Installation Failed + Quraşdırılma alınmadı + + + + Error + Xəta + + + + &Yes + &Bəli + + + + &No + &Xeyr + + + + &Close + &Bağlamaq + + + + Install Log Paste URL + Jurnal yerləşdirmə URL-nu daxil etmək + + + + The upload was unsuccessful. No web-paste was done. + Yükləmə uğursuz oldu. Heç nə vebdə daxil edilmədi. + + + + Install log posted to + +%1 + +Link copied to clipboard + Quraşdırma jurnalını burada yazın + +%1 + +Keçid mübadilə yaddaşına kopyalandı + + + + Calamares Initialization Failed + Calamares işə salına bilmədi + + + + %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. + %1 quraşdırılmadı. Calamares konfiqurasiya edilmiş modulların hamısını yükləyə bilmədi. Bu Calamares'i, sizin distribütör tərəfindən necə istifadə edilməsindən asılı olan bir problemdir. + + + + <br/>The following modules could not be loaded: + <br/>Yüklənə bilməyən modullar aşağıdakılardır: + + + + Continue with setup? + Quraşdırılma davam etdirilsin? + + + + Continue with installation? + Quraşdırılma davam etdirilsin? + + + + 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> + %1 quraşdırıcı proqramı %2 quraşdırmaq üçün Sizin diskdə dəyişiklik etməyə hazırdır.<br/><strong>Bu dəyişikliyi ləğv etmək mümkün olmayacaq.</strong> + + + + 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> + %1 quraşdırıcı proqramı %2 quraşdırmaq üçün Sizin diskdə dəyişiklik etməyə hazırdır.<br/><strong>Bu dəyişikliyi ləğv etmək mümkün olmayacaq.</strong> + + + + &Set up now + &İndi ayarlamaq + + + + &Install now + Q&uraşdırmağa başlamaq + + + + Go &back + &Geriyə + + + + &Set up + A&yarlamaq + + + + &Install + Qu&raşdırmaq + + + + Setup is complete. Close the setup program. + Quraşdırma başa çatdı. Quraşdırma proqramını bağlayın. + + + + The installation is complete. Close the installer. + Quraşdırma başa çatdı. Quraşdırıcını bağlayın. + + + + Cancel setup without changing the system. + Sistemi dəyişdirmədən quraşdırmanı ləğv etmək. + + + + Cancel installation without changing the system. + Sistemə dəyişiklik etmədən quraşdırmadan imtina etmək. + + + + &Next + İ&rəli + + + + &Back + &Geriyə + + + + &Done + &Hazır + + + + &Cancel + İm&tina etmək + + + + Cancel setup? + Quraşdırılmadan imtina edilsin? + + + + Cancel installation? + Yüklənmədən imtina edilsin? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + Siz doğrudanmı hazırkı quraşdırmadan imtina etmək istəyirsiniz? +Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + Siz doğrudanmı hazırkı yüklənmədən imtina etmək istəyirsiniz? +Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. + + + + CalamaresPython::Helper + + + Unknown exception type + Naməlum istisna hal + + + + unparseable Python error + görünməmiş Python xətası + + + + unparseable Python traceback + görünməmiş Python izi + + + + Unfetchable Python error. + Oxunmayan Python xətası. + + + + CalamaresWindow + + + %1 Setup Program + %1 Quraşdırıcı proqram + + + + %1 Installer + %1 Quraşdırıcı + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + Fayl sistemi yarlığını %1 üzərində qurun. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + <strong>%1</strong> fayl sistemi yarlığını <strong>%2</strong> bölməsinə qurun. + + + + The installer failed to update partition table on disk '%1'. + Quraşdırıcının '%1' diskindəki bölməni yeniləməsi baş tutmadı. + + + + CheckerContainer + + + Gathering system information... + Sistem məlumatları toplanır ... + + + + ChoicePage + + + Form + Format + + + + Select storage de&vice: + Yaddaş ci&hazını seçmək: + + + + + + + Current: + Cari: + + + + After: + Sonra: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Əl ilə bölmək</strong><br/>Siz bölməni özünüz yarada və ölçüsünü dəyişə bilərsiniz. + + + + Reuse %1 as home partition for %2. + %1 Ev bölməsi olaraq %2 üçün istifadə edilsin. + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>Kiçiltmək üçün bir bölmə seçərək altdakı çübüğü sürüşdürərək ölçüsünü verin</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 %2MB-a qədər azalacaq və %4 üçün yeni bölmə %3MB disk bölməsi yaradılacaq. + + + + Boot loader location: + Ön yükləyici (boot) yeri: + + + + <strong>Select a partition to install on</strong> + <strong>Quraşdırılacaq disk bölməsini seçin</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + EFI sistem bölməsi tapılmadı. Geriyə qayıdın və %1 bölməsini əllə yaradın. + + + + The EFI system partition at %1 will be used for starting %2. + %1 EFI sistemi %2 başlatmaq üçün istifadə olunacaqdır. + + + + EFI system partition: + EFI sistem bölməsi: + + + + 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. + Bu cihazıda əməliyyat sistemi görünmür. Nə etmək istəyərdiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <strong>Diski təmizləmək</strong><br/> <font color="red">Silmək</font>seçimi hal-hazırda, seçilmiş diskdəki bütün verilənləri siləcəkdir. + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <strong>Yanına quraşdırın</strong><br/>Quraşdırıcı, bölməni kiçildərək %1 üçün boş disk sahəsi yaradacaqdır. + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong>Bölməni başqası ilə əvəzləmək</strong><br/>Bölməni %1 ilə əvəzləyir. + + + + 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. + Bu cihazda %1 var. Nə etmək istəyirsiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + 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. + Bu cihazda artıq bir əməliyyat sistemi var. Nə etmək istərdiniz?.<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + 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. + Bu cihazda bir neçə əməliyyat sistemi mövcuddur. Nə etmək istərdiniz? Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + 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/> + Bu yaddaş qurğusunda artıq əməliyyat sistemi var, lakin, bölmə cədvəli <strong>%1</strong>, lazım olan <strong>%2</strong> ilə fərqlidir.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Bu yaddaş qurğusunda bölmələrdən biri <strong>quraşdırılmışdır</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Bu yaddaş qurğusu <strong>qeyri-aktiv RAİD</strong> qurğusunun bir hissəsidir. + + + + No Swap + Mübadilə bölməsi olmadan + + + + Reuse Swap + Mövcud mübadilə bölməsini istifadə etmək + + + + Swap (no Hibernate) + Mübadilə bölməsi (yuxu rejimi olmadan) + + + + Swap (with Hibernate) + Mübadilə bölməsi (yuxu rejimi ilə) + + + + Swap to file + Mübadilə faylı + + + + ClearMountsJob + + + Successfully unmounted %1. + %1 uğurla ayrıldı. + + + + Successfully disabled swap %1. + %1 mübadilə bölməsi uğurla söndürüldü. + + + + Successfully cleared swap %1. + %1 mübadilə bölməsi uğurla təmizləndi + + + + Successfully closed mapper device %1. + Yerləşdirmə cihazı %1 uğurla bağlandı + + + + Successfully disabled volume group %1. + Tutum qrupu %1, uğurla söndürüldü + + + + Clear mounts for partitioning operations on %1 + %1-də bölmə əməliyyatı üçün qoşulma nöqtələrini silmək + + + + Clearing mounts for partitioning operations on %1. + %1-də bölmə əməliyyatı üçün qoşulma nöqtələrini silinir. + + + + Cleared all mounts for %1 + %1 üçün bütün qoşulma nöqtələri silindi + + + + ClearTempMountsJob + + + Clear all temporary mounts. + Bütün müvəqqəti qoşulma nöqtələrini ləğv etmək. + + + + Clearing all temporary mounts. + Bütün müvəqqəti qoşulma nöqtələri ləğv edilir. + + + + Cleared all temporary mounts. + Bütün müvəqqəti qoşulma nöqtələri ləğv edildi. + + + + CommandList + + + + Could not run command. + Əmri ictra etmək mümkün olmadı. + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + Əmr, quraşdırı mühitində icra olunur və kök qovluğa yolu bilinməlidir, lakin rootMountPoint - KökQoşulmaNöqtəsi - aşkar edilmədi. + + + + The command needs to know the user's name, but no username is defined. + Əmr üçün istifadəçi adı vacibdir., lakin istifadəçi adı müəyyən edilmədi. + + + + Config + + + Set keyboard model to %1.<br/> + Klaviatura modelini %1 olaraq təyin etmək.<br/> + + + + Set keyboard layout to %1/%2. + Klaviatura qatını %1/%2 olaraq təyin etmək. + + + + Set timezone to %1/%2. + Saat quraşağını təyin etmək %1/%2 + + + + The system language will be set to %1. + Sistem dili %1 təyin ediləcək. + + + + The numbers and dates locale will be set to %1. + Yerli say və tarix formatı %1 təyin olunacaq. + + + + Network Installation. (Disabled: Incorrect configuration) + Şəbəkə üzərindən quraşdırmaq (Söndürüldü: Səhv tənzimlənmə) + + + + Network Installation. (Disabled: Received invalid groups data) + Şəbəkə üzərindən quraşdırmaq (Söndürüldü: qruplar haqqında səhv məlumatlar alındı) + + + + Network Installation. (Disabled: Internal error) + Şəbəkənin quraşdırılması. (Söndürüldü: daxili xəta) + + + + Network Installation. (Disabled: No package list) + Şəbəkənin quraşdırılması. (Söndürüldü: Paket siyahısı yoxdur) + + + + Package selection + Paket seçimi + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Şəbəkə üzərindən quraşdırmaq (Söndürüldü: paket siyahıları qəbul edilmir, şəbəkə bağlantınızı yoxlayın) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilməz. <a href="#details">Ətraflı məlumatlar...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilməz. <a href="#details">Ətraflı məlumatlar...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər. + + + + This program will ask you some questions and set up %2 on your computer. + Bu proqram sizə bəzi suallar verəcək və %2 əməliyyat sistemini sizin komputerinizə qurmağa kömək edəcək. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>%1 üçün Calamares quraşdırma proqramına xoş gəldiniz!</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>%1 quraşdırmaq üçün xoş gəldiniz</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>%1 üçün Calamares quraşdırıcısına xoş gəldiniz!</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 quraşdırıcısına xoş gəldiniz</h1> + + + + Your username is too long. + İstifadəçi adınız çox uzundur. + + + + '%1' is not allowed as username. + İstifadəçi adı '%1' ola bilməz + + + + Your username must start with a lowercase letter or underscore. + İstifadəçi adınız yalnız kiçik və ya alt cizgili hərflərdən ibarət olmalıdır. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Yalnız kiçik hərflərdən, simvollardan, alt cizgidən və defisdən istifadə oluna bilər. + + + + Your hostname is too short. + Host adınız çox qısadır. + + + + Your hostname is too long. + Host adınız çox uzundur. + + + + '%1' is not allowed as hostname. + Host_adı '%1' ola bilməz + + + + Only letters, numbers, underscore and hyphen are allowed. + Yalnız kiçik hərflərdən, saylardan, alt cizgidən və defisdən istifadə oluna bilər. + + + + Your passwords do not match! + Şifrənizin təkrarı eyni deyil! + + + + OK! + OLDU! + + + + Setup Failed + Quraşdırılma xətası + + + + Installation Failed + Quraşdırılma alınmadı + + + + The setup of %1 did not complete successfully. + %1 qurulması uğurla çaşa çatmadı. + + + + The installation of %1 did not complete successfully. + %1 quraşdırılması uğurla tamamlanmadı. + + + + Setup Complete + Quraşdırma tamamlandı + + + + Installation Complete + Quraşdırma tamamlandı + + + + The setup of %1 is complete. + %1 quraşdırmaq başa çatdı. + + + + The installation of %1 is complete. + %1-n quraşdırılması başa çatdı. + + + + Package Selection + Paket seçimi + + + + Please pick a product from the list. The selected product will be installed. + Lütfən məhsulu siyahıdan seçin. Seçilmiş məhsul quraşdırılacaqdır. + + + + Install option: <strong>%1</strong> + Quraşdırma seçimi: <strong>%1</strong> + + + + None + Heç biri + + + + Summary + Nəticə + + + + This is an overview of what will happen once you start the setup procedure. + Bu quraşdırma proseduruna başladıqdan sonra nələrin baş verəcəyinə ümumi baxışdır. + + + + This is an overview of what will happen once you start the install procedure. + Bu quraşdırma proseduruna başladıqdan sonra nələrin baş verəcəyinə ümumi baxışdır. + + + + ContextualProcessJob + + + Contextual Processes Job + Şəraitə bağlı proseslərlə iş + + + + CreatePartitionDialog + + + Create a Partition + Bölmə yaratmaq + + + + Si&ze: + Ö&lçüsü: + + + + MiB + MB + + + + Partition &Type: + Bölmənin &növləri: + + + + Primar&y + &İlkin + + + + E&xtended + &Genişləndirilmiş + + + + Fi&le System: + Fay&l Sistemi: + + + + LVM LV name + LVM LV adı + + + + &Mount Point: + Qoşul&ma Nöqtəsi: + + + + Flags: + Bayraqlar: + + + + Label for the filesystem + Fayl sitemi üçün yarlıq + + + + FS Label: + FS yarlığı: + + + + En&crypt + &Şifrələmək + + + + Logical + Məntiqi + + + + Primary + Əsas + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + Qoşulma nöqtəsi artıq istifadə olunur. Lütfən başqasını seçin. + + + + Mountpoint must start with a <tt>/</tt>. + Qoşulma nöqtəsi <tt>/</tt> ilə başlamalıdır. + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + Yeni %1MiB bölməsini %3 (%2) üzərində %4 girişləri ilə yaradın. + + + + Create new %1MiB partition on %3 (%2). + Yeni %1MiB bölməsini %3 (%2) üzərində yaradın. + + + + Create new %2MiB partition on %4 (%3) with file system %1. + %1 fayl sistemi ilə %4 (%3)-də yeni %2MB bölmə yaratmaq. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Yeni <strong>%1MiB</strong> bölməsini <strong>%3</strong> (%2) üzərində <em>%4</em> girişlərində yaradın. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Yeni <strong>%1MiB</strong> bölməsini <strong>%3</strong> (%2) üzərində yaradın. + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + <strong>%1</strong> fayl sistemi ilə <strong>%4</strong> (%3)-də yeni <strong>%2MB</strong> bölmə yaratmaq. + + + + + Creating new %1 partition on %2. + %2-də yeni %1 bölmə yaratmaq. + + + + The installer failed to create partition on disk '%1'. + Quraşdırıcı '%1' diskində bölmə yarada bilmədi. + + + + CreatePartitionTableDialog + + + Create Partition Table + Bölmələr Cədvəli yaratmaq + + + + Creating a new partition table will delete all existing data on the disk. + Bölmələr Cədvəli yaratmaq, bütün diskdə olan məlumatların hamısını siləcək. + + + + What kind of partition table do you want to create? + Hansı Bölmə Cədvəli yaratmaq istəyirsiniz? + + + + Master Boot Record (MBR) + Ön yükləmə Bölməsi (MBR) + + + + GUID Partition Table (GPT) + GUID bölmələr cədvəli (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + %2-də yeni %1 bölmələr cədvəli yaratmaq. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + <strong>%2</strong> (%3)`də yeni <strong>%1</strong> bölmələr cədvəli yaratmaq. + + + + Creating new %1 partition table on %2. + %2-də yeni %1 bölməsi yaratmaq. + + + + The installer failed to create a partition table on %1. + Quraşdırıcı %1-də bölmələr cədvəli yarada bilmədi. + + + + CreateUserJob + + + Create user %1 + %1 İstifadəçi hesabı yaratmaq + + + + Create user <strong>%1</strong>. + <strong>%1</strong> istifadəçi hesabı yaratmaq. + + + + Preserving home directory + Ev qovluğunun saxlanılması + + + + + Creating user %1 + İsitfadəçi %1 yaradılır + + + + Configuring user %1 + %1 istifadəçisinin tənzimlənməsi + + + + Setting file permissions + Fayl icazələrinin quruaşdırılması + + + + CreateVolumeGroupDialog + + + Create Volume Group + Tutumlar qrupu yaratmaq + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + %1 adlı yeni tutumlar qrupu yaratmaq. + + + + Create new volume group named <strong>%1</strong>. + <strong>%1</strong> adlı yeni tutumlar qrupu yaratmaq. + + + + Creating new volume group named %1. + %1 adlı yeni tutumlar qrupu yaradılır. + + + + The installer failed to create a volume group named '%1'. + Quraşdırıcı '%1' adlı tutumlar qrupu yarada bilmədi. + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + %1 adlı tutumlar qrupu qeyri-aktiv edildi. + + + + Deactivate volume group named <strong>%1</strong>. + <strong>%1</strong> adlı tutumlar qrupunu qeyri-aktiv etmək. + + + + The installer failed to deactivate a volume group named %1. + Quraşdırıcı %1 adlı tutumlar qrupunu qeyri-aktiv edə bilmədi. + + + + DeletePartitionJob + + + Delete partition %1. + %1 bölməsini silmək. + + + + Delete partition <strong>%1</strong>. + <strong>%1</strong> bölməsini silmək. + + + + Deleting partition %1. + %1 bölməsinin silinməsi. + + + + The installer failed to delete partition %1. + Quraşdırıcı %1 bölməsini silə bilmədi. + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + Bu cihazda <strong>%1</strong> bölmələr cədvəli var. + + + + 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. + Bu <strong>loop</strong> cihazıdır.<br><br> Bu bölmələr cədvəli olmayan saxta cihaz olub, adi faylları blok cihazı kimi istifadə etməyə imkan yaradır. Bu cür qoşulma adətən yalnız tək fayl sisteminə malik olur. + + + + 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. + Bu quraşdırıcı seçilmiş qurğuda <strong>bölmələr cədvəli aşkar edə bilmədi</strong>.<br><br>Bu cihazda ya bölmələr cədvəli yoxdur, ya bölmələr cədvəli korlanıb, ya da növü naməlumdur.<br>Bu quraşdırıcı bölmələr cədvəlini avtomatik, ya da əllə bölmək səhifəsi vasitəsi ilə yarada bilər. + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <br><br>Bu <strong>EFI</strong> ön yükləyici mühiti istifadə edən müasir sistemlər üçün məsləhət görülən bölmələr cədvəli növüdür. + + + + <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. + <br><br>Bu, <strong>BIOS</strong> ön yükləyici mühiti istifadə edən köhnə sistemlər üçün bölmələr cədvəlidir. Əksər hallarda bunun əvəzinə GPT istifadə etmək daha yaxşıdır. Diqqət:</strong>MBR, köhnəlmiş MS-DOS standartında bölmələr cədvəlidir. <br>Sadəcə 4 <em>ilkin</em> bölüm yaratmağa imkan verir və 4-dən çox bölmədən yalnız biri <em>extended</em> genişləndirilmiş ola bilər, və beləliklə daha çox <em>məntiqi</em> bölmələr yaradıla bilər. + + + + 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. + Seçilmiş cihazda<strong>bölmələr cədvəli</strong> növü.<br><br>Bölmələr cədvəli növünü dəyişdirməyin yeganə yolu, bölmələr cədvəlini sıfırdan silmək və yenidən qurmaqdır, bu da saxlama cihazındakı bütün məlumatları məhv edir.<br>Quraşdırıcı siz başqa bir seçim edənədək bölmələr cədvəlinin cari vəziyyətini saxlayacaqdır.<br>Müasir sistemlər standart olaraq GPT bölümünü istifadə edir. + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + %1 -də Dracut üçün LUKS tənzimləməlirini yazmaq + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + Dracut üçün LUKS tənzimləmələrini yazmağı ötürmək: "/" bölməsi şifrələnmədi + + + + Failed to open %1 + %1 açılmadı + + + + DummyCppJob + + + Dummy C++ Job + Dummy C++ Job + + + + EditExistingPartitionDialog + + + Edit Existing Partition + Mövcud bölməyə düzəliş etmək + + + + Con&tent: + &Tərkibi: + + + + &Keep + &Saxlamaq + + + + Format + Formatlamaq + + + + Warning: Formatting the partition will erase all existing data. + Diqqət: Bölmənin formatlanması ondakı bütün mövcud məlumatları silir. + + + + &Mount Point: + Qoşil&ma nöqtəsi: + + + + Si&ze: + Ol&çü: + + + + MiB + MB + + + + Fi&le System: + Fay&l sistemi: + + + + Flags: + Bayraqlar: + + + + Label for the filesystem + Fayl sitemi üçün yarlıq + + + + FS Label: + FS yarlığı: + + + + EncryptWidget + + + Form + Format + + + + En&crypt system + &Şifrələmə sistemi + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Sisteminiz göründüyü kimi bütün sistemin şifrələnməsini lazım olduğu qədər dəstəkləmir. Siz şifrələməni aktiv edə bilərsiniz, lakin bu sistemin işini zəiflədə bilər. + + + + Passphrase + Şifrə + + + + Confirm passphrase + Şifrəni təsdiq edin + + + + + Please enter the same passphrase in both boxes. + Lütfən, hər iki sahəyə eyni şifrəni daxil edin. + + + + ErrorDialog + + + Details: + Təfərrüatlar: + + + + Would you like to paste the install log to the web? + Quraşdırma jurnalını vebdə yerləşdirmək istəyirsinizmi? + + + + FillGlobalStorageJob + + + Set partition information + Bölmə məlumatlarını ayarlamaq + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <strong>Yeni</strong> %2 sistem bölməsində <em>%3</em> xüsusiyyətləri ilə %1 quraşdırın + + + + Install %1 on <strong>new</strong> %2 system partition. + %2 <strong>yeni</strong> sistem diskinə %1 quraşdırmaq. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>Yeni</strong> %2 bölməsini <strong>%1</strong> qoşulma nöqtəsi və <em>%3</em> xüsusiyyətləri ilə qurun. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + <strong>yeni</strong> %2 bölməsini <strong>%1</strong>%3 qoşulma nöqtəsi ilə qurun. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + %3 <strong>%1</strong> sistem bölməsində <em>%4</em> xüsusiyyətləri ilə %2 quraşdırın. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + <strong>%1</strong> %3 bölməsini <strong>%2</strong> qoşulma nöqtəsi və <em>%4</em> xüsusiyyətləri ilə qurun. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + %3 bölməsinə <strong>%1</strong> ilə <strong>%2</strong>%4 qoşulma nöqtəsi ayarlamaq. + + + + Install %2 on %3 system partition <strong>%1</strong>. + %3 <strong>%1</strong> sistem bölməsində %2 quraşdırın. + + + + Install boot loader on <strong>%1</strong>. + Ön yükləyicini <strong>%1</strong> üzərində quraşdırın. + + + + Setting up mount points. + Qoşulma nöqtəsini ayarlamaq. + + + + FinishedPage + + + Form + Formatlamaq + + + + &Restart now + &Yenidən başlatmaq + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + <h1>Hər şey hazırdır.</h1><br/>%1 kompyuterinizə qurulub.<br/>Siz indi yeni sisteminizi başlada bilərsiniz. + + + + <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> + <html><head/><body><p>Bu çərçivə işarələnərsə siz <span style="font-style:italic;">Hazır</span> düyməsinə vurduğunuz və ya quraşdırıcı proqramı bağlatdığınız zaman sisteminiz dərhal yenidən başladılacaqdır.</p></body></html> + + + + <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. + <h1>Hər şey hazırdır.</h1><br/>%1 kompyuterinizə quraşdırıldı.<br/>Siz yenidən başladaraq yeni sisteminizə daxil ola və ya %2 Canlı mühitini istifadə etməyə davam edə bilərsiniz. + + + + <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> + <html><head/><body><p>Bu çərçivə işarələnərsə siz <span style="font-style:italic;">Hazır</span> düyməsinə vurduğunuz və ya quraşdırıcınıı bağladığınız zaman sisteminiz dərhal yenidən başladılacaqdır.</p></body></html> + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + <h1>Quraşdırılma alınmadı</h1><br/>%1 kompyuterinizə quraşdırıla bilmədi.<br/>Baş vermiş xəta: %2. + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + <h1>Quraşdırılma alınmadı</h1><br/>%1 kompyuterinizə quraşdırıla bilmədi.<br/>Baş vermiş xəta: %2. + + + + FinishedQmlViewStep + + + Finish + Son + + + + FinishedViewStep + + + Finish + Son + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + %4 üzərində %1 bölməsini format etmək (fayl sistemi: %2, ölçüsü: %3 MB). + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + <strong>%3MB</strong> bölməsini <strong>%2</strong> fayl sistemi ilə <strong>%1</strong> formatlamaq. + + + + Formatting partition %1 with file system %2. + %1 bölməsini %2 fayl sistemi ilə formatlamaq. + + + + The installer failed to format partition %1 on disk '%2'. + Quraşdırıcı '%2' diskində %1 bölməsini formatlaya bilmədi. + + + + GeneralRequirements + + + has at least %1 GiB available drive space + ən az %1 QB disk boş sahəsi var + + + + There is not enough drive space. At least %1 GiB is required. + Kifayət qədər disk sahəsi yoxdur. Ən azı %1 QB tələb olunur. + + + + has at least %1 GiB working memory + ən azı %1 QB iş yaddaşı var + + + + The system does not have enough working memory. At least %1 GiB is required. + Sistemdə kifayət qədər iş yaddaşı yoxdur. Ən azı %1 GiB tələb olunur. + + + + is plugged in to a power source + enerji mənbəyi qoşuludur + + + + The system is not plugged in to a power source. + enerji mənbəyi qoşulmayıb. + + + + is connected to the Internet + internetə qoşuludur + + + + The system is not connected to the Internet. + Sistem internetə qoşulmayıb. + + + + is running the installer as an administrator (root) + quraşdırıcını adminstrator (root) imtiyazları ilə başladılması + + + + The setup program is not running with administrator rights. + Quraşdırıcı adminstrator imtiyazları ilə başladılmayıb. + + + + The installer is not running with administrator rights. + Quraşdırıcı adminstrator imtiyazları ilə başladılmayıb. + + + + has a screen large enough to show the whole installer + quraşdırıcını tam göstərmək üçün ekran kifayət qədər genişdir + + + + The screen is too small to display the setup program. + Quraşdırıcı proqramı göstərmək üçün ekran çox kiçikdir. + + + + The screen is too small to display the installer. + Bu quarşdırıcını göstərmək üçün ekran çox kiçikdir. + + + + HostInfoJob + + + Collecting information about your machine. + Komputeriniz haqqında məlumat toplanması. + + + + IDJob + + + + + + OEM Batch Identifier + OEM toplama identifikatoru + + + + Could not create directories <code>%1</code>. + <code>%1</code> qovluğu yaradılmadı. + + + + Could not open file <code>%1</code>. + <code>%1</code> faylı açılmadı. + + + + Could not write to file <code>%1</code>. + <code>%1</code> faylına yazılmadı. + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + mkinitcpio köməyi ilə initramfs yaradılması. + + + + InitramfsJob + + + Creating initramfs. + initramfs yaradılması. + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole quraşdırılmayıb + + + + Please install KDE Konsole and try again! + Lütfən KDE Konsole tətbiqini quraşdırın və yenidən cəhd edin! + + + + Executing script: &nbsp;<code>%1</code> + Ssenari icra olunur. &nbsp;<code>%1</code> + + + + InteractiveTerminalViewStep + + + Script + Ssenari + + + + KeyboardQmlViewStep + + + Keyboard + Klaviatura + + + + KeyboardViewStep + + + Keyboard + Klaviatura + + + + LCLocaleDialog + + + System locale setting + Ümumi məkan ayarları + + + + 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>. + Ümumi məkan ayarları, əmrlər sətiri interfeysinin ayrıca elementləri üçün dil və kodlaşmaya təsir edir. <br/>Hazırkı seçim <strong>%1</strong>. + + + + &Cancel + İm&tina etmək + + + + &OK + &OK + + + + LOSHJob + + + Configuring encrypted swap. + Çifrələnmiş mübadilə sahəsi - swap tənzimlənir. + + + + No target system available. + Hədəf sistemi əlçatan deyil. + + + + No rootMountPoint is set. + Kök qoşulma nöztəsi (rootMountPoint) təyin olunmayıb. + + + + No configFilePath is set. + Tənzimləmə faylı yolu (configFilePath) təyin olunmayıb. + + + + LicensePage + + + Form + Format + + + + <h1>License Agreement</h1> + <h1>Lisenziya razılaşması</h1> + + + + I accept the terms and conditions above. + Mən yuxarıda göstərilən şərtləri qəbul edirəm. + + + + Please review the End User License Agreements (EULAs). + Lütfən lisenziya razılaşması (EULA) ilə tanış olun. + + + + This setup procedure will install proprietary software that is subject to licensing terms. + Bu quraşdırma proseduru lisenziya şərtlərinə tabe olan xüsusi proqram təminatını quraşdıracaqdır. + + + + If you do not agree with the terms, the setup procedure cannot continue. + Lisenziya razılaşmalarını qəbul etməsəniz quraşdırılma davam etdirilə bilməz. + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + Bu quraşdırma proseduru, əlavə xüsusiyyətlər təmin etmək və istifadəçi təcrübəsini artırmaq üçün lisenziyalaşdırma şərtlərinə tabe olan xüsusi proqram təminatını quraşdıra bilər. + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + Şərtlərlə razılaşmasanız, xüsusi proqram quraşdırılmayacaq və bunun əvəzinə açıq mənbə kodu ilə alternativlər istifadə ediləcəkdir. + + + + LicenseViewStep + + + License + Lisenziya + + + + LicenseWidget + + + URL: %1 + URL: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>%1 sürücü</strong>%2 tərəfindən + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>%1 grafik sürücü</strong><br/><font color="Grey">%2 tərəfindən</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>%1 brauzer əlavəsi</strong><br/><font color="Grey">%2 tərəfindən</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>%1 kodek</strong><br/><font color="Grey">%2 tərəfindən</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>%1 paket</strong><br/><font color="Grey">%2 ərəfindən</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">%2 ərəfindən</font> + + + + File: %1 + %1 faylı + + + + Hide license text + Lisenziya mətnini gizlətmək + + + + Show the license text + Lisenziya mətnini göstərmək + + + + Open license agreement in browser. + Lisenziya razılaşmasını brauzerdə açmaq. + + + + LocalePage + + + Region: + Məkan: + + + + Zone: + Saat qurşağı: + + + + + &Change... + &Dəyişmək... + + + + LocaleQmlViewStep + + + Location + Məkan + + + + LocaleTests + + + Quit + Çıxış + + + + LocaleViewStep + + + Location + Məkan + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + LUKS düymə faylını ayarlamaq. + + + + + No partitions are defined. + Heç bir bölmə müəyyən edilməyib. + + + + + + Encrypted rootfs setup error + Kök fayl sisteminin şifrələnməsi xətası + + + + Root partition %1 is LUKS but no passphrase has been set. + %1 Kök bölməsi LUKS-dur lakin, şifrə təyin olunmayıb. + + + + Could not create LUKS key file for root partition %1. + %1 kök bölməsi üçün LUKS düymə faylı yaradılmadı. + + + + Could not configure LUKS key file on partition %1. + %1 bölməsində LUKS düymə faylı tənzimlənə bilmədi. + + + + MachineIdJob + + + Generate machine-id. + Komputerin İD-ni yaratmaq. + + + + Configuration Error + Tənzimləmə xətası + + + + No root mount point is set for MachineId. + Komputer İD-si üçün kök qoşulma nöqtəsi təyin edilməyib. + + + + Map + + + Timezone: %1 + Saat qurşağı: %1 + + + + 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. + Lütfən, xəritədə üstünlük verdiyiniz yeri seçin, belə ki, quraşdırıcı sizin üçün yerli + və saat qurşağı parametrlərini təklif edə bilər. Aşağıda təklif olunan parametrləri dəqiq tənzimləyə bilərsiniz. Xəritəni sürüşdürərək axtarın. + miqyası dəyişmək üçün +/- düymələrindən və ya siçanla sürüşdürmə çubuğundan istifadə etmək. + + + + NetInstallViewStep + + + Package selection + Paket seçimi + + + + Office software + Ofis proqramı + + + + Office package + Ofis paketi + + + + Browser software + Veb bələdçi proqramı + + + + Browser package + Veb bələdçi paketi + + + + Web browser + Veb bələdçi + + + + Kernel + Nüvə + + + + Services + Xidmətlər + + + + Login + Giriş + + + + Desktop + İş Masası + + + + Applications + Tətbiqlər + + + + Communication + Rabitə + + + + Development + Tərtibat + + + + Office + Ofis + + + + Multimedia + Multimediya + + + + Internet + Internet + + + + Theming + Mövzular, Temalar + + + + Gaming + Oyun + + + + Utilities + Vasitələr, Alətlər + + + + NotesQmlViewStep + + + Notes + Qeydlər + + + + OEMPage + + + Ba&tch: + Dəs&tə: + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + <html><head/><body><p>Dəstənin isentifikatorunu bura daxil edin. Bu hədəf sistemində saxlanılacaq.</p></body></html> + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + <html><head/><body><h1>OEM tənzimləmələri</h1><p>Calamares hədəf sistemini tənzimləyərkən OEM ayarlarını istifadə edəcək.</p></body></html> + + + + OEMViewStep + + + OEM Configuration + OEM tənzimləmələri + + + + Set the OEM Batch Identifier to <code>%1</code>. + OEM Dəstəsi identifikatorunu <code>%1</code>-ə ayarlamaq. + + + + Offline + + + Select your preferred Region, or use the default settings. + Üstünlük verdiyiniz Bölgənizi seçin və ilkin ayarlardan istifadə edin. + + + + + + Timezone: %1 + Saat qurşağı: %1 + + + + Select your preferred Zone within your Region. + Bölgənizlə birlikdə üstünlük verdiyiniz zonanı seçin. + + + + Zones + Zonalar + + + + You can fine-tune Language and Locale settings below. + Dil və Yer ayarlarını aşağıda dəqiq tənzimləyə bilərsiniz. + + + + PWQ + + + Password is too short + Şifrə çox qısadır + + + + Password is too long + Şifrə çox uzundur + + + + Password is too weak + Şifrə çox zəifdir + + + + Memory allocation error when setting '%1' + '%1' ayarlanarkən yaddaş bölgüsü xətası + + + + Memory allocation error + Yaddaş bölgüsü xətası + + + + The password is the same as the old one + Şifrə köhnə şifrə ilə eynidir + + + + The password is a palindrome + Şifrə tərsinə oxunuşu ilə eynidir + + + + The password differs with case changes only + Şifrə yalnız hal dəyişiklikləri ilə fərqlənir + + + + The password is too similar to the old one + Şifrə köhnə şifrə ilə çox oxşardır + + + + The password contains the user name in some form + Şifrənin tərkibində istifadəçi adı var + + + + The password contains words from the real name of the user in some form + Şifrə istifadəçinin əsl adına oxşar sözlərdən ibarətdir + + + + The password contains forbidden words in some form + Şifrə qadağan edilmiş sözlərdən ibarətdir + + + + The password contains too few digits + Şifrə çox az rəqəmdən ibarətdir + + + + The password contains too few uppercase letters + Şifrə çox az böyük hərflərdən ibarətdir + + + + The password contains fewer than %n lowercase letters + + Şifrə %n-dən(dan) az kiçik hərflərdən ibarətdir + Şifrə %n hərfdən az kiçik hərflərdən ibarətdir + + + + + The password contains too few lowercase letters + Şifrə çox az kiçik hərflərdən ibarətdir + + + + The password contains too few non-alphanumeric characters + Şifrə çox az alfasayısal olmayan simvollardan ibarətdir + + + + The password is too short + Şifrə çox qısadır + + + + The password does not contain enough character classes + Şifrənin tərkibində kifayət qədər simvol sinifi yoxdur + + + + The password contains too many same characters consecutively + Şifrə ardıcıl olaraq çox oxşar simvollardan ibarətdir + + + + The password contains too many characters of the same class consecutively + Şifrə ardıcıl olaraq eyni sinifin çox simvolundan ibarətdir + + + + The password contains fewer than %n digits + + Şifrə %1-dən az rəqəmdən ibarətdir + Şifrə %n -dən(dan) az rəqəmdən ibarətdir + + + + + The password contains fewer than %n uppercase letters + + Şifrə %n -dən/dan az böyük hərflərdən ibarətdir + Şifrə %n -dən/dan az böyük hərfdən ibarətdir + + + + + The password contains fewer than %n non-alphanumeric characters + + Şifrə %n -dən/dan az hərf-rəqəm olmayan simvollardan ibarətdir + Şifrə %n -dən/dan az hərf-rəqəm olmayan simvollardan ibarətdir + + + + + The password is shorter than %n characters + + Şifrə %n simvoldan qısadır + Şifrə %n simvoldan qısadır + + + + + The password is a rotated version of the previous one + Şifrə bundan əvvəlkinin tərs formasıdır + + + + The password contains fewer than %n character classes + + Şifrə %n simvol sinifindən azdır + Şifrə %n simvol sinifindən azdır + + + + + The password contains more than %n same characters consecutively + + Şifrə ardıcıl olaraq %n eyni simvollardan ibarətdir + Şifrə ardıcıl olaraq %n eyni simvollardan ibarətdir + + + + + The password contains more than %n characters of the same class consecutively + + Şifrə ardıcıl eyni sinifin %n-dən/dan çox simvolundan ibarətdir + Şifrə ardıcıl eyni sinifin %n-dən/dan çox simvolundan ibarətdir + + + + + The password contains monotonic sequence longer than %n characters + + Şifrə l%n simvoldan uzun monotonik ardıcıllıqdan ibarətdir + Şifrə l%n simvoldan uzun monotonik ardıcıllıqdan ibarətdir + + + + + The password contains too long of a monotonic character sequence + Şifrə çox uzun monoton simvollar ardıcıllığından ibarətdir + + + + No password supplied + Şifrə verilməyib + + + + Cannot obtain random numbers from the RNG device + RNG cihazından təsadüfi nömrələr əldə etmək olmur + + + + Password generation failed - required entropy too low for settings + Şifrə yaratma uğursuz oldu - ayarlar üçün tələb olunan entropiya çox aşağıdır + + + + The password fails the dictionary check - %1 + Şifrənin lüğət yoxlaması alınmadı - %1 + + + + The password fails the dictionary check + Şifrənin lüğət yoxlaması alınmadı + + + + Unknown setting - %1 + Naməlum ayarlar - %1 + + + + Unknown setting + Naməlum ayarlar + + + + Bad integer value of setting - %1 + Ayarın pozulmuş tam dəyəri - %1 + + + + Bad integer value + Pozulmuş tam dəyər + + + + Setting %1 is not of integer type + %1 -i ayarı tam say deyil + + + + Setting is not of integer type + Ayar tam say deyil + + + + Setting %1 is not of string type + %1 ayarı sətir deyil + + + + Setting is not of string type + Ayar sətir deyil + + + + Opening the configuration file failed + Tənzəmləmə faylının açılması uğursuz oldu + + + + The configuration file is malformed + Tənzimləmə faylı qüsurludur + + + + Fatal failure + Ciddi qəza + + + + Unknown error + Naməlum xəta + + + + Password is empty + Şifrə böşdur + + + + PackageChooserPage + + + Form + Format + + + + Product Name + Məhsulun adı + + + + TextLabel + Mətn nişanı + + + + Long Product Description + Məhsulun uzun təsviri + + + + Package Selection + Paket seçimi + + + + Please pick a product from the list. The selected product will be installed. + Lütfən məhsulu siyahıdan seçin. Seçilmiş məhsul quraşdırılacaqdır. + + + + PackageChooserQmlViewStep + + + Packages + Paketlər + + + + PackageChooserViewStep + + + Packages + Paketlər + + + + PackageModel + + + Name + Adı + + + + Description + Təsviri + + + + Page_Keyboard + + + Form + Format + + + + Keyboard Model: + Klaviatura modeli: + + + + Type here to test your keyboard + Buraya yazaraq klaviaturanı yoxlayın + + + + Page_UserSetup + + + Form + Format + + + + What is your name? + Adınız nədir? + + + + Your Full Name + Tam adınız + + + + What name do you want to use to log in? + Giriş üçün hansı adı istifadə etmək istəyirsiniz? + + + + login + giriş + + + + What is the name of this computer? + Bu kompyuterin adı nədir? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>Əgər kompyuterinizi şəbəkə üzərindən görünən etsəniz, bu ad istifadə olunacaq.</small> + + + + Computer Name + Kompyuterin adı + + + + Choose a password to keep your account safe. + Hesabınızın təhlükəsizliyi üçün şifrə seçin. + + + + + <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> + <small>Səhvsiz yazmaq üçün eyni şifrəni iki dəfə daxil edin. Yaxşı bir şifrə, hərflərin, nömrələrin və durğu işarələrinin qarışığından və ən azı səkkiz simvoldan ibarət olmalıdır, həmçinin müntəzəm olaraq dəyişdirilməlidir.</small> + + + + + Password + Şifrə + + + + + Repeat Password + Şifrənin təkararı + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Bu qutu işarələndikdə, şifrənin etibarlıq səviyyəsi yoxlanılır və siz zəif şifrədən istifadə edə bilməyəcəksiniz. + + + + Require strong passwords. + Güclü şifrələr tələb edilir. + + + + Log in automatically without asking for the password. + Şifrə soruşmadan sistemə avtomatik daxil olmaq. + + + + Use the same password for the administrator account. + İdarəçi hesabı üçün eyni şifrədən istifadə etmək. + + + + Choose a password for the administrator account. + İdarəçi hesabı üçün şifrəni seçmək. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>Səhvsiz yazmaq üçün eyni şifrəni iki dəfə daxil edin</small> + + + + PartitionLabelsView + + + Root + Root + + + + Home + Home + + + + Boot + Boot + + + + EFI system + EFI sistemi + + + + Swap + Swap - Mübadilə + + + + New partition for %1 + %1 üçün yeni bölmə + + + + New partition + Yeni bölmə + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + Boş disk sahəsi + + + + + New partition + Yeni bölmə + + + + Name + Adı + + + + File System + Fayl sistemi + + + + File System Label + Fayl sistemi yarlığı + + + + Mount Point + Qoşulma nöqtəsi + + + + Size + Ölçüsü + + + + PartitionPage + + + Form + Format + + + + Storage de&vice: + Yaddaş qurğu&su: + + + + &Revert All Changes + Bütün dəyişiklikləri &geri qaytarmaq + + + + New Partition &Table + Yeni bölmələr &cədvəli + + + + Cre&ate + Yar&atmaq + + + + &Edit + Düzəliş &etmək + + + + &Delete + &Silmək + + + + New Volume Group + Yeni tutum qrupu + + + + Resize Volume Group + Tutum qrupunun ölçüsünü dəyişmək + + + + Deactivate Volume Group + Tutum qrupunu deaktiv etmək + + + + Remove Volume Group + Tutum qrupunu silmək + + + + I&nstall boot loader on: + Ön yükləy&icinin quraşdırılma yeri: + + + + Are you sure you want to create a new partition table on %1? + %1-də yeni bölmə yaratmaq istədiyinizə əminsiniz? + + + + Can not create new partition + Yeni bölmə yaradıla bilmir + + + + 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. + %1 üzərindəki bölmə cədvəlində %2 birinci disk bölümü var və artıq əlavə edilə bilməz. +Lütfən bir birinci disk bölümünü çıxarın və əvəzinə genişləndirilmiş bölmə əlavə edin. + + + + PartitionViewStep + + + Gathering system information... + Sistem məlumatları toplanır ... + + + + Partitions + Bölmələr + + + + Unsafe partition actions are enabled. + Bölmələrlə qeyri-təhlükəsiz əməllər ativ edilib. + + + + Partitioning is configured to <b>always</b> fail. + Bölmələrə bölünmə elə ayarlanıb ki, <b>həmişə</b> xəta ilə başa çatır. + + + + No partitions will be changed. + Dəyişiklik ediləcək heç bir bölmə yoxdur. + + + + Current: + Cari: + + + + After: + Sonra: + + + + No EFI system partition configured + EFI sistemi bölməsi tənzimlənməyib + + + + EFI system partition configured incorrectly + EFİ sistem bölməsi səhv yaradıldı + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + EFİ fayl sistemi %1 başladılması üçün lazımdır.<br/> <br/> EFİ fayl sistemini quraşdırmaq üçün geri qayıdın və uyğun fayl sistemini seçin və ya yaradın. + + + + The filesystem must be mounted on <strong>%1</strong>. + Fayl sistemi burada qoşulmalıdır: <strong>%1</strong>. + + + + The filesystem must have type FAT32. + Fayl sistemi FAT32 olmalıdır. + + + + The filesystem must be at least %1 MiB in size. + Fayl sisteminin ölçüsü ən az %1 MiB olmalıdır. + + + + The filesystem must have flag <strong>%1</strong> set. + Fayl sisteminə <strong>%1</strong> bayrağı təyin olunmalıdır. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Siz, EFİ sistem bölməsini ayarlamadan davam edə bilərsiniz, lakin bu sisteminizin işə düşə bilməməsinə səbəb ola bilər. + + + + Option to use GPT on BIOS + BIOS-da GPT istifadəsi seçimi + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT bölmə cədvəli bütün sistemlər üçün yaxşıdır. Bu quraşdırıcı BIOS sistemləri üçün də belə bir quruluşu dəstəkləyir.<br/><br/>BİOS-da GPT bölmələr cədvəlini ayarlamaq üçün (əgər bu edilməyibsə) geriyə qayıdın və bölmələr cədvəlini GPT-yə qurun, sonra isə <strong>%2</strong> bayrağı seçilmiş 8 MB-lıq formatlanmamış bölmə yaradın.<br/><br/>8 MB-lıq formatlanmamış bölmə GPT ilə BİOS sistemində %1 başlatmaq üçün lazımdır. + + + + Boot partition not encrypted + Ön yükləyici bölməsi çifrələnməyib + + + + 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. + Şifrəli bir kök bölməsi ilə birlikdə ayrı bir ön yükləyici bölməsi qurulub, ancaq ön yükləyici bölməsi şifrələnməyib.<br/><br/>Bu cür quraşdırma ilə bağlı təhlükəsizlik problemləri olur, çünki vacib sistem sənədləri şifrəsiz bölmədə saxlanılır.<br/>İstəyirsinizsə davam edə bilərsiniz, lakin, fayl sisteminin kilidi, sistem başladıldıqdan daha sonra açılacaqdır.<br/>Yükləmə hissəsini şifrələmək üçün geri qayıdın və bölmə yaratma pəncərəsində <strong>Şifrələmə</strong> menyusunu seçərək onu yenidən yaradın. + + + + has at least one disk device available. + ən az bir disk qurğusu mövcuddur. + + + + There are no partitions to install on. + Quraşdırmaq üçün bölmə yoxdur. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + Plasma Xarici Görünüş Mövzusu İşləri + + + + + Could not select KDE Plasma Look-and-Feel package + KDE Plasma Xarici Görünüş paketinin seçilməsi + + + + PlasmaLnfPage + + + Form + Format + + + + 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. + Lütfən, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz həmçinin bu mərhələni ötürə və sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilərsiniz. Xarici Görünüşə klikləməniz onun canlı görüntüsünü sizə göstərəcəkdir. + + + + 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. + Lütfən, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz həmçinin bu mərhələni ötürə və sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilərsiniz. Xarici Görünüşə klikləməniz onun canlı görüntüsünü sizə göstərəcəkdir. + + + + PlasmaLnfViewStep + + + Look-and-Feel + Xarici Görünüş + + + + PreserveFiles + + + Saving files for later ... + Fayllar daha sonra saxlanılır... + + + + No files configured to save for later. + Sonra saxlamaq üçün heç bir ayarlanan fayl yoxdur. + + + + Not all of the configured files could be preserved. + Ayarlanan faylların hamısı saxlanıla bilməz. + + + + ProcessResult + + + +There was no output from the command. + +Əmrlərdən çıxarış alınmadı. + + + + +Output: + + +Çıxarış: + + + + + External command crashed. + Xarici əmr qəzası baş verdi. + + + + Command <i>%1</i> crashed. + <i>%1</i> əmrində qəza baş verdi. + + + + External command failed to start. + Xarici əmr başladıla bilmədi. + + + + Command <i>%1</i> failed to start. + <i>%1</i> əmri əmri başladıla bilmədi. + + + + Internal error when starting command. + Əmr başlayarkən daxili xəta. + + + + Bad parameters for process job call. + İş prosesini çağırmaq üçün xətalı parametr. + + + + External command failed to finish. + Xarici əmr başa çatdırıla bilmədi. + + + + Command <i>%1</i> failed to finish in %2 seconds. + <i>%1</i> əmrini %2 saniyədə başa çatdırmaq mümkün olmadı. + + + + External command finished with errors. + Xarici əmr xəta ilə başa çatdı. + + + + Command <i>%1</i> finished with exit code %2. + <i>%1</i> əmri %2 xəta kodu ilə başa çatdı. + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + naməlum + + + + extended + genişləndirilmiş + + + + unformatted + format olunmamış + + + + swap + mübadilə + + + + + Default + Standart + + + + + + + File not found + Fayl tapılmadı + + + + Path <pre>%1</pre> must be an absolute path. + <pre>%1</pre> yolu mütləq bir yol olmalıdır. + + + + Directory not found + Qovluq tapılmadı + + + + + Could not create new random file <pre>%1</pre>. + Yeni təsadüfi<pre>%1</pre> faylı yaradıla bilmir. + + + + No product + Məhsul yoxdur + + + + No description provided. + Təsviri verilməyib. + + + + (no mount point) + (qoşulma nöqtəsi yoxdur) + + + + Unpartitioned space or unknown partition table + Bölünməmiş disk sahəsi və ya naməlum bölmələr cədvəli + + + + Recommended + + + <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> + Bu kompüter %1 qurulması üçün minimum tələblərə cavab vermir. + <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər.</p> + + + + RemoveUserJob + + + Remove live user from target system + Canlı istifadəçini hədəf sistemindən silmək + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + %1 adlı Tutum Qrupunu silmək. + + + + Remove Volume Group named <strong>%1</strong>. + <strong>%1</strong> adlı Tutum Qrupunu silmək. + + + + The installer failed to remove a volume group named '%1'. + Quraşdırıcı "%1" adlı tutum qrupunu silə bilmədi. + + + + ReplaceWidget + + + Form + Format + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + %1 quraşdırmaq yerini seşmək.<br/><font color="red">Diqqət!</font>bu seçilmiş bölmədəki bütün faylları siləcək. + + + + The selected item does not appear to be a valid partition. + Seçilmiş element etibarlı bir bölüm kimi görünmür. + + + + %1 cannot be installed on empty space. Please select an existing partition. + %1 böş disk sahəsinə quraşdırıla bilməz. Lütfən mövcüd bölməni seçin. + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %1 genişləndirilmiş bölməyə quraşdırıla bilməz. Lütfən, mövcud birinci və ya məntiqi bölməni seçin. + + + + %1 cannot be installed on this partition. + %1 bu bölməyə quraşdırıla bilməz. + + + + Data partition (%1) + Verilənlər bölməsi (%1) + + + + Unknown system partition (%1) + Naməlum sistem bölməsi (%1) + + + + %1 system partition (%2) + %1 sistem bölməsi (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <strong>%4</strong><br/><br/>%1 Bölməsi %2 üçün çox kiçikdir. Lütfən, ən azı %3 QB həcmində olan bölməni seçin. + + + + <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. + <strong>%2</strong><br/><br/>EFI sistem bölməsi bu sistemin heç bir yerində tapılmadı. Lütfən, geri qayıdın və %1 təyin etmək üçün əl ilə bu bölməni yaradın. + + + + + + <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. + <strong>%3</strong><br/><br/>%1, %2.bölməsində quraşdırılacaq.<br/><font color="red">Diqqət: </font>%2 bölməsindəki bütün məlumatlar itiriləcək. + + + + The EFI system partition at %1 will be used for starting %2. + %1 EFI sistemi %2 başlatmaq üçün istifadə olunacaqdır. + + + + EFI system partition: + EFI sistem bölməsi: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + Bu kompüter %1 qurulması üçün minimum tələblərə cavab vermir. <br/> + Quraşdırılma davam etdirilə bilməz. </p> + + + + <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> + Bu kompüter %1 qurulması üçün minimum tələblərə cavab vermir. + <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər.</p> + + + + ResizeFSJob + + + Resize Filesystem Job + Fayl sisteminin ölçüsünü dəyişmək + + + + Invalid configuration + Etibarsız Tənzimləmə + + + + The file-system resize job has an invalid configuration and will not run. + Fayl sisteminin ölçüsünü dəyişmək işinin tənzimlənməsi etibarsızdır və baçladıla bilməz. + + + + KPMCore not Available + KPMCore mövcud deyil + + + + Calamares cannot start KPMCore for the file-system resize job. + Calamares bu fayl sisteminin ölçüsünü dəyişmək üçün KPMCore proqramını işə sala bilmir. + + + + + + + + Resize Failed + Ölçüsünü dəyişmə alınmadı + + + + The filesystem %1 could not be found in this system, and cannot be resized. + %1 fayl sistemi bu sistemdə tapılmadı və ölçüsü dəyişdirilə bilmədi. + + + + The device %1 could not be found in this system, and cannot be resized. + %1 qurğusu bu sistemdə tapılmadı və ölçüsü dəyişdirilə bilməz. + + + + + The filesystem %1 cannot be resized. + %1 fayl sisteminin ölçüsü dəyişdirilə bilmədi. + + + + + The device %1 cannot be resized. + %1 qurğusunun ölçüsü dəyişdirilə bilmədi. + + + + The filesystem %1 must be resized, but cannot. + %1 fayl sisteminin ölçüsü dəyişdirilməlidir, lakin bu mümkün deyil. + + + + The device %1 must be resized, but cannot + %1 qurğusunun ölçüsü dəyişdirilməlidir, lakin, bu mümkün deyil + + + + ResizePartitionJob + + + Resize partition %1. + %1 bölməsinin ölçüsünü dəyişmək. + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + <strong>%2MB</strong> <strong>%1</strong> bölməsinin ölçüsünü <strong>%3MB</strong>-a dəyişmək. + + + + Resizing %2MiB partition %1 to %3MiB. + %2 MB %1 bölməsinin ölçüsünü %3MB-a dəyişmək. + + + + The installer failed to resize partition %1 on disk '%2'. + Quraşdırıcı %1 bölməsinin ölçüsünü "%2" diskində dəyişə bilmədi. + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + Tutum qrupunun ölçüsünü dəyişmək + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + %1 adlı tutum qrupunun ölçüsünü %2-dən %3-ə dəyişmək. + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + <strong>%1</strong> adlı tutum qrupunun ölçüsünü <strong>%2</strong>-dən strong>%3</strong>-ə dəyişmək. + + + + The installer failed to resize a volume group named '%1'. + Quraşdırıcı "%1" adlı tutum qrupunun ölçüsünü dəyişə bilmədi. + + + + ResultsListDialog + + + For best results, please ensure that this computer: + Ən yaşxı nəticə üçün lütfən, əmin olun ki, bu kompyuter: + + + + System requirements + Sistem tələbləri + + + + ScanningDialog + + + Scanning storage devices... + Yaddaş qurğusu axtarılır... + + + + Partitioning + Bölüşdürmə + + + + SetHostNameJob + + + Set hostname %1 + %1 host adı təyin etmək + + + + Set hostname <strong>%1</strong>. + <strong>%1</strong> host adı təyin etmək. + + + + Setting hostname %1. + %1 host adının ayarlanması. + + + + + Internal Error + Daxili Xəta + + + + + Cannot write hostname to target system + Host adı hədəf sistemə yazıla bilmədi + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + Klaviatura modeliini %1, qatını isə %2-%3 təyin etmək + + + + Failed to write keyboard configuration for the virtual console. + Virtual konsol üçün klaviatura tənzimləmələrini yazmaq mümkün olmadı. + + + + + + Failed to write to %1 + %1-ə yazmaq mümkün olmadı + + + + Failed to write keyboard configuration for X11. + X11 üçün klaviatura tənzimləmələrini yazmaq mümükün olmadı. + + + + Failed to write keyboard configuration to existing /etc/default directory. + Klaviatura tənzimləmələri möcvcud /etc/default qovluğuna yazıla bilmədi. + + + + SetPartFlagsJob + + + Set flags on partition %1. + %1 bölməsində bayraqlar qoymaq. + + + + Set flags on %1MiB %2 partition. + %1 MB %2 bölməsində bayraqlar qoymaq. + + + + Set flags on new partition. + Yeni bölmədə bayraq qoymaq. + + + + Clear flags on partition <strong>%1</strong>. + <strong>%1</strong> bölməsindəki bayraqları ləğv etmək. + + + + Clear flags on %1MiB <strong>%2</strong> partition. + %1MB <strong>%2</strong> bölməsindəki bayraqları ləğv etmək. + + + + Clear flags on new partition. + Yeni bölmədəki bayraqları ləğv etmək. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + <strong>%1</strong> bölməsini <strong>%2</strong> kimi bayraqlamaq. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MB <strong>%2</strong> bölməsini <strong>%3</strong> kimi bayraqlamaq. + + + + Flag new partition as <strong>%1</strong>. + Yeni bölməni <strong>%1</strong> kimi bayraqlamaq. + + + + Clearing flags on partition <strong>%1</strong>. + <strong>%1</strong> bölməsindəki bayraqları ləöv etmək. + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MB <strong>%2</strong> bölməsindəki bayraqların ləğv edilməsi. + + + + Clearing flags on new partition. + Yeni bölmədəki bayraqların ləğv edilməsi. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + <strong>%2</strong> bayraqlarının <strong>%1</strong> bölməsində ayarlanması. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + <strong>%3</strong> bayraqlarının %1MB <strong>%2</strong> bölməsində ayarlanması. + + + + Setting flags <strong>%1</strong> on new partition. + <strong>%1</strong> bayraqlarının yeni bölmədə ayarlanması. + + + + The installer failed to set flags on partition %1. + Quraşdırıcı %1 bölməsinə bayraqlar qoya bilmədi. + + + + SetPasswordJob + + + Set password for user %1 + %1 istifadəçisi üçün şifrə daxil etmək + + + + Setting password for user %1. + %1 istifadəçisi üçün şifrə ayarlamaq. + + + + Bad destination system path. + Səhv sistem yolu təyinatı. + + + + rootMountPoint is %1 + rootMountPoint %1-dir + + + + Cannot disable root account. + Kök hesabını qeyri-aktiv etmək olmur. + + + + passwd terminated with error code %1. + %1 xəta kodu ilə sonlanan şifrə. + + + + Cannot set password for user %1. + %1 istifadəçisi üçün şifrə yaradıla bilmədi. + + + + usermod terminated with error code %1. + usermod %1 xəta kodu ilə sonlandı. + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Saat qurşağını %1/%2 olaraq ayarlamaq + + + + Cannot access selected timezone path. + Seçilmiş saat qurşağı yoluna daxil olmaq mümkün deyil. + + + + Bad path: %1 + Etibarsız yol: %1 + + + + Cannot set timezone. + Saat qurşağını qurmaq mümkün deyil. + + + + Link creation failed, target: %1; link name: %2 + Keçid yaradılması alınmadı, hədəf: %1; keçed adı: %2 + + + + Cannot set timezone, + Saat qurşağı qurulmadı, + + + + Cannot open /etc/timezone for writing + /etc/timezone qovluğu yazılmaq üçün açılmadı + + + + SetupGroupsJob + + + Preparing groups. + Qruplar hazırlanır. + + + + + Could not create groups in target system + Hədəf sistemdə qruplar yaratmaq mümkün olmadı + + + + These groups are missing in the target system: %1 + Hədəf sistemdə çatışmayan qruplar: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <pre>sudo</pre> istifadəçilərinin tənzimlənməsi. + + + + Cannot chmod sudoers file. + Sudoers faylına chmod tətbiq etmək mümkün olmadı. + + + + Cannot create sudoers file for writing. + Sudoers faylını yazmaq mümkün olmadı. + + + + ShellProcessJob + + + Shell Processes Job + Shell prosesləri ilə iş + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &OK + + + + &Yes + &Bəli + + + + &No + &Xeyr + + + + &Cancel + &İmtina etmək + + + + &Close + &Bağlamaq + + + + TrackingInstallJob + + + Installation feedback + Quraşdırılma hesabatı + + + + Sending installation feedback. + Quraşdırılma hesabatının göndərməsi. + + + + Internal error in install-tracking. + install-tracking daxili xətası. + + + + HTTP request timed out. + HTTP sorğusunun vaxtı keçdi. + + + + TrackingKUserFeedbackJob + + + KDE user feedback + KDE istifadəçi hesabatı + + + + Configuring KDE user feedback. + KDE istifadəçi hesabatının tənzimlənməsi. + + + + + Error in KDE user feedback configuration. + KDE istifadəçi hesabatının tənzimlənməsində xəta. + + + + Could not configure KDE user feedback correctly, script error %1. + KDE istifadəçi hesabatı düzgün tənzimlənmədi, əmr xətası %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE istifadəçi hesabatı düzgün tənzimlənmədi, Calamares xətası %1. + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + Kompyuter hesabatı + + + + Configuring machine feedback. + kompyuter hesabatının tənzimlənməsi. + + + + + Error in machine feedback configuration. + Kompyuter hesabatının tənzimlənməsində xəta. + + + + Could not configure machine feedback correctly, script error %1. + Kompyuter hesabatı düzgün tənzimlənmədi, əmr xətası %1. + + + + Could not configure machine feedback correctly, Calamares error %1. + Kompyuter hesabatı düzgün tənzimlənmədi, Calamares xətası %1. + + + + TrackingPage + + + Form + Format + + + + Placeholder + Əvəzləyici + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Göndərmək üçün buraya klikləyin <span style=" font-weight:600;">quraşdırıcınız haqqında heç bir məlumat yoxdur</span>.</p></body></html> + + + + <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> + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">İstifadəçi hesabatı haqqında daha çox məlumat üçün buraya klikləyin</span></a></p></body></html> + + + + 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. + İzləmə %1ə, cihazın neçə dəfə quraşdırıldığını, hansı cihazda quraşdırıldığını və hansı tətbiqlərdən istifadə olunduğunu görməyə kömək edir. Göndərilənləri görmək üçün hər sahənin yanındakı yardım işarəsini vurun. + + + + 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. + Bunu seçərək quraşdırma və kompyuteriniz haqqında məlumat göndərəcəksiniz. Quraşdırma başa çatdıqdan sonra, bu məlumat yalnız <b>bir dəfə</b> göndəriləcəkdir. + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Bu seçimdə siz vaxtaşırı <b>kompyuter</b> qurğularınız, avadanlıq və tətbiqləriniz haqqında %1-ə məlumat göndərəcəksiniz. + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Bu seçimdə siz vaxtaşırı <b>istifadəçi</b> qurğularınız, avadanlıq və tətbiqləriniz haqqında %1-ə məlumat göndərəcəksiniz. + + + + TrackingViewStep + + + Feedback + Hesabat + + + + UmountJob + + + Unmount file systems. + Fayl sistemini ayırmaq. + + + + No target system available. + Hədəf sistemi əlçatan deyil. + + + + No rootMountPoint is set. + Kök qoşulma nöztəsi (rootMountPoint) təyin olunmayıb. + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman ayarlandıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman quraşdırıldıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> + + + + UsersQmlViewStep + + + Users + İstifadəçilər + + + + UsersViewStep + + + Users + İstifadəçilər + + + + VariantModel + + + Key + Column header for key/value + Açar + + + + Value + Column header for key/value + Dəyər + + + + VolumeGroupBaseDialog + + + Create Volume Group + Tutumlar qrupu yaratmaq + + + + List of Physical Volumes + Fiziki Tutumların siyahısı + + + + Volume Group Name: + Tutum Qrupunun adı: + + + + Volume Group Type: + Tutum Qrupunun Növü: + + + + Physical Extent Size: + Fiziki boy ölçüsü: + + + + MiB + MB + + + + Total Size: + Ümumi Ölçü: + + + + Used Size: + İstifadə olunanın ölçüsü: + + + + Total Sectors: + Ümumi Bölmələr: + + + + Quantity of LVs: + LVlərin sayı: + + + + WelcomePage + + + Form + Format + + + + + Select application and system language + Sistem və tətbiq dilini seçmək + + + + &About + H&aqqında + + + + Open donations website + Maddi dəstək üçün veb səhifəsi + + + + &Donate + Ma&ddi dəstək + + + + Open help and support website + Kömək və dəstək veb səhifəsi + + + + &Support + Də&stək + + + + Open issues and bug-tracking website + Problemlər və xəta izləmə veb səhifəsi + + + + &Known issues + &Məlum problemlər + + + + Open release notes website + Buraxılış haqqında qeydlər veb səhifəsi + + + + &Release notes + Bu&raxılış haqqında qeydlər + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>%1 üçün Calamares quraşdırma proqramına Xoş Gəldiniz.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>%1 quraşdırmaq üçün Xoş Gəldiniz.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1> %1 üçün Calamares quraşdırıcısına Xoş Gəldiniz.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 quraşdırıcısına Xoş Gəldiniz.</h1> + + + + %1 support + %1 dəstəyi + + + + About %1 setup + %1 quraşdırması haqqında + + + + About %1 installer + %1 quraşdırıcısı haqqında + + + + <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. + <h1>%1</h1><br/><strong>%2<br/>%3 üçün</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/>Təşəkkür edirik, <a href="https://calamares.io/team/">Calamares komandasına</a> və <a href="https://www.transifex.com/calamares/calamares/">Calamares tərcüməçilər komandasına</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> tərtibatçılarının sponsoru: <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. + + + + WelcomeQmlViewStep + + + Welcome + Xoş Gəldiniz + + + + WelcomeViewStep + + + Welcome + Xoş Gəldiniz + + + + ZfsJob + + + Create ZFS pools and datasets + ZFS mənbələri - zpool və verilənlər dəsti yaratmaq + + + + Failed to create zpool on + Zpool yaradıla bilmədi + + + + Configuration Error + Tənzimləmə xətası + + + + No partitions are available for ZFS. + ZFS üçün əlçatan bölmələr yoxdur. + + + + Internal data missing + Daxili məlumatlar çatışmır + + + + + Failed to create zpool + Zpool yaradıla bilmədi + + + + Failed to create dataset + Verilənlər dəsti yaradıla bilmədi + + + + The output was: + Çıxışda: + + + + about + + + <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. + <h1>%1</h1><br/> + <strong>%2<br/> + %3 üçün</strong><br/><br/> + Müəliff hüquqları 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt; + Müəliff hüquqları 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;8<br/> + <a href='https://calamares.io/team/'>Calamares komandasına</a> və + <a href='https://www.transifex.com/calamares/calamares/'>Calamares tərcümə komandasına</a> təşəkkürlər.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> tərtibatı <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software + tərəfindən dəstəklənir. + + + + Back + Geriyə + + + + calamares-sidebar + + + Show debug information + Sazlama məlumatlarını göstərmək + + + + finishedq + + + Installation Completed + Quraşdırma başa çatdı + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 komputerinizə quraşdırıldı.<br/> + Siz indi yeni quraşdırılmış sistemə daxil ola bilərsiniz, və ya Canlı mühitdən istifadə etməyə davam edə bilərsiniz. + + + + Close Installer + Quraşdırıcını bağlayın + + + + Restart System + Sistemi yenidən başladın + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Quraşdırmanın tam jurnalı, Canlı mühit istifadəçisinin ev qovluğunda installation.log kimi mövcuddur.<br/> + Bu jurnal, hədəf sistemin /var/log/installation.log qovluğuna kopyalandı.</p> + + + + finishedq@mobile + + + Installation Completed + Quraşdırma başa çatdı + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 kompyuterinizə quraşdırıldı.<br/> + Cihazınızı indi yenidən başlada bilərsiniz. + + + + Close + Bağlayın + + + + Restart + Yenidən başladın + + + + i18n + + + <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>. + <h1>Dillər</h1> </br> + Sistemin yer ayarları bəzi istifadəçi interfeysi elementləri əmrlər sətri üçün dil və simvolların ayarlanmasına təsir edir. Cari ayar: <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Yerlər</h1></br> + Sistemin məkan ayarları say və tarix formatlarəna təsir edir. Cari ayar <strong>%1</strong>-dir + + + + Back + Geriyə + + + + keyboardq + + + To activate keyboard preview, select a layout. + Klaviatura önbaxışını aktiv etmək üçün bir qat seçin. + + + + Keyboard Model: + Klaviatura modeli: + + + + Layouts + Qatlar + + + + Type here to test your keyboard + Buraya yazaraq klaviaturanı yoxlayın + + + + Variants + Variantlar + + + + localeq + + + Change + Dəyişdirmək + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + <h3>%1</h3> + <p>Bunlar buraxılış qeydləri nümunəsidir.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice bütün dünyada milyonlarla insanın istifadə etdiyi güclü və pulsuz ofis proqramları dəstidir. Buraya, onu bazarda hərtərəfli Pulsuz və Açıq mənbəli ofis proqramları dəsti halına gətirən bir neçə tətbiqlər daxildir. <br/> + İlkin seçimlər. + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Əgər ofis proqramları quraşdırmaq istəməsəniz, sadəcə "Ofis dəsti olmadan' seçin. Sİz daha sonra quraşdırılmış sistemə istədiyiniz tətbiqi (həmçinin ofis üçün) quraşdıra bilərsiniz. + + + + No Office Suite + Ofis dəsti olmadan + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Minimum İş masası quraşdırması yaradın, bütün əlavə tətbiqləri silin və sonra sisteminizə nə əlavə etmək istədiyinizə qərar verin. Məsələn belə bir quraşdırmada Office Suite, media oynadıcı, şəkillərə baxış və ya printer dəstəyi üçün tətbiqləri quraşdırmaq istəməyə bilərsiniz. Bu, yalnızca fayl bələdçisi, paket idarəedicisi, mətn redaktoru və sadə veb bələdçidən ibarət sadə İş masası olacaq. + + + + Minimal Install + Minimum quraşdırma + + + + Please select an option for your install, or use the default: LibreOffice included. + Lütfən quraşdırmanız üçün bir seçim edin və ya ilkin variandan istifadə edin: LibreOffice daxildir. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Bu Flickable tərkibləri ilə RichText seçimlərində göstərilən QML faylı nümunəsidir</p> + + <p>QML RichText ilə HTML yarlığı istifadə edə bilər, Flickable daha çox toxunaqlı ekranlar üçün istifadə olunur.</p> + + <p><b>Bu qalın şriftli mətndir</b></p> + <p><i>Bu kursif şriftli mətndir</i></p> + <p><u>Bu al cizgili şriftli mətndir</u></p> + <p><center>Bu mətn mərkəzdə yerləşəcək.</center></p> + <p><s>Bu üzəri cizgilidir</s></p> + + <p>Kod nümunəsi: + <code>ls -l /home</code></p> + + <p><b>Siyahı:</b></p> + <ul> + <li>Intel CPU sistemləri</li> + <li>AMD CPU sistemləri</li> + </ul> + + <p>Şaquli sürüşmə çubuğu tənzimlənir, cari eni 10-a qurulur.</p> + + + + Back + Geriyə + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + İnzibatçı tapşırıqlarını yerinə yetirmək və sistemə giriş üçün istifadəçi adını və istifadəçi hesabı məlumatlarını daxil edin + + + + What is your name? + Adınız nədir? + + + + Your Full Name + Tam adınız + + + + What name do you want to use to log in? + Giriş üçün hansı adı istifadə etmək istəyirsiniz? + + + + Login Name + Giriş Adı + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Əgər bu komputeri bir neçə şəxs istifadə ediləcəksə o zaman quraşdırmadan sonra birdən çox hesab yarada bilərsiniz. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Yalnız kiçik hərflərdən, simvollardan, alt cizgidən və defisdən istifadə oluna bilər. + + + + root is not allowed as username. + kökə istifadəçi_adı kimi icazə verilmir. + + + + What is the name of this computer? + Bu kompyuterin adı nədir? + + + + Computer Name + Kompyuterin adı + + + + This name will be used if you make the computer visible to others on a network. + Əgər gizlədilməzsə komputer şəbəkədə bu adla görünəcək. + + + + localhost is not allowed as hostname. + yerli hosta host_adı kimi icazə verilmir. + + + + Choose a password to keep your account safe. + Hesabınızın təhlükəsizliyi üçün şifrə seçin. + + + + Password + Şifrə + + + + Repeat Password + Şifrənin təkararı + + + + 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. + Düzgün yazılmasını yoxlamaq üçün eyni şifrəni iki dəfə daxil edin. Güclü şifrə üçün rəqəm, hərf və durğu işarələrinin qarışıöğından istifadə edin. Şifrə ən azı səkkiz simvoldan uzun olmalı və müntəzəm olaraq dəyişdirilməlidir. + + + + Validate passwords quality + Şifrənin keyfiyyətini yoxlamaq + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Bu qutu işarələndikdə, şifrənin etibarlıq səviyyəsi yoxlanılır və siz zəif şifrədən istifadə edə bilməyəcəksiniz. + + + + Log in automatically without asking for the password + Şifrə soruşmadan sistemə daxil olmaq + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Yalnız hərflərə, saylara, alt cizgisinə və tire işarəsinə icazə verilir, ən az iki simvol. + + + + Reuse user password as root password + İstifadəçi şifrəsini kök şifrəsi kimi istifadə etmək + + + + Use the same password for the administrator account. + İdarəçi hesabı üçün eyni şifrədən istifadə etmək. + + + + Choose a root password to keep your account safe. + Hesabınızı qorumaq üçün kök şifrəsini seçin. + + + + Root Password + Kök Şifrəsi + + + + Repeat Root Password + Kök Şifrəsini təkrar yazın + + + + Enter the same password twice, so that it can be checked for typing errors. + Düzgün yazılmasını yoxlamaq üçün eyni şifrəni iki dəfə daxil edin. + + + + welcomeq + + + <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> + <h3>%1quraşdırıcısına <quote>%2</quote> Xoş Gəldiniz</h3> + <p>Bu proqram sizə bəzi suallar verəcək və %1 komputerinizə quraşdıracaq.</p> + + + + About + Haqqında + + + + Support + Dəstək + + + + Known issues + Məlum problemlər + + + + Release notes + Buraxılış qeydləri + + + + Donate + Maddi dəstək + + + diff --git a/lang/calamares_az_AZ.ts b/lang/calamares_az_AZ.ts new file mode 100644 index 000000000..9187001eb --- /dev/null +++ b/lang/calamares_az_AZ.ts @@ -0,0 +1,4561 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + Avtomatik qoşulma ayarlarını idarə edin + + + + BootInfoWidget + + + 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. + Sistemin <strong>açılış mühiti</strong>.<br><br>Köhnə x86 sistemlər yalnız <strong>BIOS</strong> dəstəkləyir.<br>Müasir sistemlər isə adətən <strong>EFI</strong> istifadə edir, lakin açılış mühiti əgər uyğun rejimdə başladılmışsa, həmçinin BİOS istiafadə edə bilər. + + + + 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. + Bu sistem <strong>EFI</strong> açılış mühiti ilə başladılıb.<br><br>EFİ ilə başlamanı ayarlamaq üçün quraşdırıcı <strong>EFI Sistemi Bölməsi</strong> üzərində <strong>GRUB</strong> və ya <strong>systemd-boot</strong> kimi yükləyici istifadə etməlidir. Bunlar avtomatik olaraq seçilə bilir, lakin istədiyiniz halda diskdə bu bölmələri özünüz əl ilə seçərək bölə bilərsiniz. + + + + 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. + Bu sistem <strong>BIOS</strong> önyükləyici mühiti ilə işə salındı. <br> <br> BIOS mühitindən başlatmanı tənzimləmək üçün, bu quraşdırıcı, ya bölmənin əvvəlində ya da bölmələr cədvəlinin yanında <strong>Əsas Önyükləyici Qeydi</strong> bölməsində <strong>GRUB</strong> kimi bir önyükləyici quraşdırmalıdır (buna üstünlük verilir). Bu, siz əl ilə bölmə yaratmadığınız halda öz-özünə quraşdırılır. Əgər cədvəli siz bölsəniz hər bir bölməni ayrıca ayarlamalısınız. + + + + BootLoaderModel + + + Master Boot Record of %1 + %1 ƏsasÖnyükləyici Qeydi + + + + Boot Partition + Önyükləyici bölməsi + + + + System Partition + Sistem bölməsi + + + + Do not install a boot loader + Önyükləyici quraşdırmayın + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Boş Səhifə + + + + Calamares::DebugWindow + + + Form + Format + + + + GlobalStorage + ÜmumiYaddaş + + + + JobQueue + TapşırıqSırası + + + + Modules + Modullar + + + + Type: + Növ: + + + + + none + heç biri + + + + Interface: + İnterfeys: + + + + Crashes Calamares, so that Dr. Konqui can look at it. + Calamares çökür, belə ki, Dr. Konqui onu görə bilir. + + + + Reloads the stylesheet from the branding directory. + Üslub cədvəlini marka kataloqundan yenidən yükləyir. + + + + Uploads the session log to the configured pastebin. + Sessiya jurnalını konfiqurasiya edilmiş pastebin'ə yükləyir. + + + + Send Session Log + Sessiya jurnalını göndərin + + + + Reload Stylesheet + Üslub cədvəlini yenidən yükləmək + + + + Displays the tree of widget names in the log (for stylesheet debugging). + (Üslub cədvəli sazlamaları üçün) Jurnalda vidjet adları ağacını göstərir. + + + + Widget Tree + Vidjetlər ağacı + + + + Debug information + Sazlama məlumatları + + + + Calamares::ExecutionViewStep + + + Set up + Ayarlamaq + + + + Install + Quraşdırmaq + + + + Calamares::FailJob + + + Job failed (%1) + (%1) Tapşırığı yerinə yetirmək mümkün olmadı + + + + Programmed job failure was explicitly requested. + Proqramın işi, istifadəçi tərəfindən dayandırıldı. + + + + Calamares::JobThread + + + Done + Quraşdırılma başa çatdı + + + + Calamares::NamedJob + + + Example job (%1) + Tapşırıq nümunəsi (%1) + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + '%1' əmrini hədəf sistemdə başlatmaq. + + + + Run command '%1'. + '%1' əmrini başlatmaq. + + + + Running command %1 %2 + %1 əmri icra olunur %2 + + + + Calamares::PythonJob + + + Running %1 operation. + %1 əməliyyatı icra olunur. + + + + Bad working directory path + İş qovluğuna səhv yol + + + + Working directory %1 for python job %2 is not readable. + %1 qovluğu %2 python işləri üçün açıla bilmir. + + + + Bad main script file + Korlanmış əsas əmrlər faylı + + + + Main script file %1 for python job %2 is not readable. + %1 əsas əmrlər faylı %2 python işləri üçün açıla bilmir. + + + + Boost.Python error in job "%1". + Boost.Python iş xətası "%1". + + + + Calamares::QmlViewStep + + + Loading ... + Yüklənir... + + + + QML Step <i>%1</i>. + QML addımı <i>%1</i>. + + + + Loading failed. + Yüklənmə alınmadı. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <i>%1</i>üçün tələblərin yoxlanılması başa çatdı. + + + + Waiting for %n module(s). + + %n modul üçün gözləmə. + %n modul(lar) üçün gözləmə. + + + + + (%n second(s)) + + (%n saniyə(lər)) + (%n saniyə(lər)) + + + + + System-requirements checking is complete. + Sistem uyğunluqları yoxlaması başa çatdı. + + + + Calamares::ViewManager + + + Setup Failed + Quraşdırılma xətası + + + + Installation Failed + Quraşdırılma alınmadı + + + + Error + Xəta + + + + &Yes + &Bəli + + + + &No + &Xeyr + + + + &Close + &Bağlamaq + + + + Install Log Paste URL + Jurnal yerləşdirmə URL-nu daxil etmək + + + + The upload was unsuccessful. No web-paste was done. + Yükləmə uğursuz oldu. Heç nə vebdə daxil edilmədi. + + + + Install log posted to + +%1 + +Link copied to clipboard + Quraşdırma jurnalını burada yazın + +%1 + +Keçid mübadilə yaddaşına kopyalandı + + + + Calamares Initialization Failed + Calamares işə salına bilmədi + + + + %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. + %1 quraşdırılmadı. Calamares konfiqurasiya edilmiş modulların hamısını yükləyə bilmədi. Bu Calamares'i, sizin distribütör tərəfindən necə istifadə edilməsindən asılı olan bir problemdir. + + + + <br/>The following modules could not be loaded: + <br/>Yüklənə bilməyən modullar aşağıdakılardır: + + + + Continue with setup? + Quraşdırılma davam etdirilsin? + + + + Continue with installation? + Quraşdırılma davam etdirilsin? + + + + 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> + %1 quraşdırıcı proqramı %2 quraşdırmaq üçün Sizin diskdə dəyişiklik etməyə hazırdır.<br/><strong>Bu dəyişikliyi ləğv etmək mümkün olmayacaq.</strong> + + + + 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> + %1 quraşdırıcı proqramı %2 quraşdırmaq üçün Sizin diskdə dəyişiklik etməyə hazırdır.<br/><strong>Bu dəyişikliyi ləğv etmək mümkün olmayacaq.</strong> + + + + &Set up now + &İndi ayarlamaq + + + + &Install now + Q&uraşdırmağa başlamaq + + + + Go &back + &Geriyə + + + + &Set up + A&yarlamaq + + + + &Install + Qu&raşdırmaq + + + + Setup is complete. Close the setup program. + Quraşdırma başa çatdı. Quraşdırma proqramını bağlayın. + + + + The installation is complete. Close the installer. + Quraşdırma başa çatdı. Quraşdırıcını bağlayın. + + + + Cancel setup without changing the system. + Sistemi dəyişdirmədən quraşdırmanı ləğv etmək. + + + + Cancel installation without changing the system. + Sistemə dəyişiklik etmədən quraşdırmadan imtina etmək. + + + + &Next + İ&rəli + + + + &Back + &Geriyə + + + + &Done + &Hazır + + + + &Cancel + İm&tina etmək + + + + Cancel setup? + Quraşdırılmadan imtina edilsin? + + + + Cancel installation? + Yüklənmədən imtina edilsin? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + Siz doğrudanmı hazırkı quraşdırmadan imtina etmək istəyirsiniz? +Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + Siz doğrudanmı hazırkı yüklənmədən imtina etmək istəyirsiniz? +Bu proqramdan çıxılacaq və bütün dəyişikliklər itiriləcəkdir. + + + + CalamaresPython::Helper + + + Unknown exception type + Naməlum istisna hal + + + + unparseable Python error + görünməmiş Python xətası + + + + unparseable Python traceback + görünməmiş Python izi + + + + Unfetchable Python error. + Oxunmayan Python xətası. + + + + CalamaresWindow + + + %1 Setup Program + %1 Quraşdırıcı proqram + + + + %1 Installer + %1 Quraşdırıcı + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + Fayl sistemi yarlığını %1 üzərində qurun. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + <strong>%1</strong> fayl sistemi yarlığını <strong>%2</strong> bölməsinə qurun. + + + + The installer failed to update partition table on disk '%1'. + Quraşdırıcının '%1' diskindəki bölməni yeniləməsi baş tutmadı. + + + + CheckerContainer + + + Gathering system information... + Sistem məlumatları toplanır ... + + + + ChoicePage + + + Form + Format + + + + Select storage de&vice: + Yaddaş ci&hazını seçmək: + + + + + + + Current: + Cari: + + + + After: + Sonra: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Əl ilə bölmək</strong><br/>Siz bölməni özünüz yarada və ölçüsünü dəyişə bilərsiniz. + + + + Reuse %1 as home partition for %2. + %1 Ev bölməsi olaraq %2 üçün istifadə edilsin. + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>Kiçiltmək üçün bir bölmə seçərək altdakı çübüğü sürüşdürərək ölçüsünü verin</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 %2MB-a qədər azalacaq və %4 üçün yeni bölmə %3MB disk bölməsi yaradılacaq. + + + + Boot loader location: + Ön yükləyici (boot) yeri: + + + + <strong>Select a partition to install on</strong> + <strong>Quraşdırılacaq disk bölməsini seçin</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + EFI sistem bölməsi tapılmadı. Geriyə qayıdın və %1 bölməsini əllə yaradın. + + + + The EFI system partition at %1 will be used for starting %2. + %1 EFI sistemi %2 başlatmaq üçün istifadə olunacaqdır. + + + + EFI system partition: + EFI sistem bölməsi: + + + + 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. + Bu cihazıda əməliyyat sistemi görünmür. Nə etmək istəyərdiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <strong>Diski təmizləmək</strong><br/> <font color="red">Silmək</font>seçimi hal-hazırda, seçilmiş diskdəki bütün verilənləri siləcəkdir. + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <strong>Yanına quraşdırın</strong><br/>Quraşdırıcı, bölməni kiçildərək %1 üçün boş disk sahəsi yaradacaqdır. + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong>Bölməni başqası ilə əvəzləmək</strong><br/>Bölməni %1 ilə əvəzləyir. + + + + 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. + Bu cihazda %1 var. Nə etmək istəyirsiniz?<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + 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. + Bu cihazda artıq bir əməliyyat sistemi var. Nə etmək istərdiniz?.<br/>Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + 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. + Bu cihazda bir neçə əməliyyat sistemi mövcuddur. Nə etmək istərdiniz? Bu cihazda dəyişiklik etmədən öncə siz seçiminizi dəqiqləşdirə, dəyişə və təsdiq edə bilərsiniz. + + + + 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/> + Bu yaddaş qurğusunda artıq əməliyyat sistemi var, lakin, bölmə cədvəli <strong>%1</strong>, lazım olan <strong>%2</strong> ilə fərqlidir.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Bu yaddaş qurğusunda bölmələrdən biri <strong>quraşdırılmışdır</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Bu yaddaş qurğusu <strong>qeyri-aktiv RAİD</strong> qurğusunun bir hissəsidir. + + + + No Swap + Mübadilə bölməsi olmadan + + + + Reuse Swap + Mövcud mübadilə bölməsini istifadə etmək + + + + Swap (no Hibernate) + Mübadilə bölməsi (yuxu rejimi olmadan) + + + + Swap (with Hibernate) + Mübadilə bölməsi (yuxu rejimi ilə) + + + + Swap to file + Mübadilə faylı + + + + ClearMountsJob + + + Successfully unmounted %1. + %1 uğurla ayrıldı. + + + + Successfully disabled swap %1. + %1 mübadilə bölməsi uğurla söndürüldü. + + + + Successfully cleared swap %1. + %1 mübadilə bölməsi uğurla təmizləndi + + + + Successfully closed mapper device %1. + Yerləşdirmə cihazı %1 uğurla bağlandı + + + + Successfully disabled volume group %1. + Tutum qrupu %1, uğurla söndürüldü + + + + Clear mounts for partitioning operations on %1 + %1-də bölmə əməliyyatı üçün qoşulma nöqtələrini silmək + + + + Clearing mounts for partitioning operations on %1. + %1-də bölmə əməliyyatı üçün qoşulma nöqtələrini silinir. + + + + Cleared all mounts for %1 + %1 üçün bütün qoşulma nöqtələri silindi + + + + ClearTempMountsJob + + + Clear all temporary mounts. + Bütün müvəqqəti qoşulma nöqtələrini ləğv etmək. + + + + Clearing all temporary mounts. + Bütün müvəqqəti qoşulma nöqtələri ləğv edilir. + + + + Cleared all temporary mounts. + Bütün müvəqqəti qoşulma nöqtələri ləğv edildi. + + + + CommandList + + + + Could not run command. + Əmri ictra etmək mümkün olmadı. + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + Əmr, quraşdırı mühitində icra olunur və kök qovluğa yolu bilinməlidir, lakin rootMountPoint - KökQoşulmaNöqtəsi - aşkar edilmədi. + + + + The command needs to know the user's name, but no username is defined. + Əmr üçün istifadəçi adı vacibdir., lakin istifadəçi adı müəyyən edilmədi. + + + + Config + + + Set keyboard model to %1.<br/> + Klaviatura modelini %1 olaraq təyin etmək.<br/> + + + + Set keyboard layout to %1/%2. + Klaviatura qatını %1/%2 olaraq təyin etmək. + + + + Set timezone to %1/%2. + Saat quraşağını təyin etmək %1/%2 + + + + The system language will be set to %1. + Sistem dili %1 təyin ediləcək. + + + + The numbers and dates locale will be set to %1. + Yerli say və tarix formatı %1 təyin olunacaq. + + + + Network Installation. (Disabled: Incorrect configuration) + Şəbəkə üzərindən quraşdırmaq (Söndürüldü: Səhv tənzimlənmə) + + + + Network Installation. (Disabled: Received invalid groups data) + Şəbəkə üzərindən quraşdırmaq (Söndürüldü: qruplar haqqında səhv məlumatlar alındı) + + + + Network Installation. (Disabled: Internal error) + Şəbəkənin quraşdırılması. (Söndürüldü: daxili xəta) + + + + Network Installation. (Disabled: No package list) + Şəbəkənin quraşdırılması. (Söndürüldü: Paket siyahısı yoxdur) + + + + Package selection + Paket seçimi + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Şəbəkə üzərindən quraşdırmaq (Söndürüldü: paket siyahıları qəbul edilmir, şəbəkə bağlantınızı yoxlayın) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilməz. <a href="#details">Ətraflı məlumatlar...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilməz. <a href="#details">Ətraflı məlumatlar...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Bu kompüter, %1 quraşdırılması üçün minimum tələblərə cavab vermir. <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər. + + + + This program will ask you some questions and set up %2 on your computer. + Bu proqram sizə bəzi suallar verəcək və %2 əməliyyat sistemini sizin komputerinizə qurmağa kömək edəcək. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>%1 üçün Calamares quraşdırma proqramına xoş gəldiniz!</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>%1 quraşdırmaq üçün xoş gəldiniz</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>%1 üçün Calamares quraşdırıcısına xoş gəldiniz!</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 quraşdırıcısına xoş gəldiniz</h1> + + + + Your username is too long. + İstifadəçi adınız çox uzundur. + + + + '%1' is not allowed as username. + İstifadəçi adı '%1' ola bilməz + + + + Your username must start with a lowercase letter or underscore. + İstifadəçi adınız yalnız kiçik və ya alt cizgili hərflərdən ibarət olmalıdır. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Yalnız kiçik hərflərdən, simvollardan, alt cizgidən və defisdən istifadə oluna bilər. + + + + Your hostname is too short. + Host adınız çox qısadır. + + + + Your hostname is too long. + Host adınız çox uzundur. + + + + '%1' is not allowed as hostname. + Host_adı '%1' ola bilməz + + + + Only letters, numbers, underscore and hyphen are allowed. + Yalnız kiçik hərflərdən, saylardan, alt cizgidən və defisdən istifadə oluna bilər. + + + + Your passwords do not match! + Şifrənizin təkrarı eyni deyil! + + + + OK! + OLDU! + + + + Setup Failed + Quraşdırılma xətası + + + + Installation Failed + Quraşdırılma alınmadı + + + + The setup of %1 did not complete successfully. + %1 qurulması uğurla çaşa çatmadı. + + + + The installation of %1 did not complete successfully. + %1 quraşdırılması uğurla tamamlanmadı. + + + + Setup Complete + Quraşdırma tamamlandı + + + + Installation Complete + Quraşdırma tamamlandı + + + + The setup of %1 is complete. + %1 quraşdırmaq başa çatdı. + + + + The installation of %1 is complete. + %1-n quraşdırılması başa çatdı. + + + + Package Selection + Paket seçimi + + + + Please pick a product from the list. The selected product will be installed. + Lütfən məhsulu siyahıdan seçin. Seçilmiş məhsul quraşdırılacaqdır. + + + + Install option: <strong>%1</strong> + Quraşdırma seçimi: <strong>%1</strong> + + + + None + Heç biri + + + + Summary + Nəticə + + + + This is an overview of what will happen once you start the setup procedure. + Bu quraşdırma proseduruna başladıqdan sonra nələrin baş verəcəyinə ümumi baxışdır. + + + + This is an overview of what will happen once you start the install procedure. + Bu quraşdırma proseduruna başladıqdan sonra nələrin baş verəcəyinə ümumi baxışdır. + + + + ContextualProcessJob + + + Contextual Processes Job + Şəraitə bağlı proseslərlə iş + + + + CreatePartitionDialog + + + Create a Partition + Bölmə yaratmaq + + + + Si&ze: + Ö&lçüsü: + + + + MiB + MB + + + + Partition &Type: + Bölmənin &növləri: + + + + Primar&y + &İlkin + + + + E&xtended + &Genişləndirilmiş + + + + Fi&le System: + Fay&l Sistemi: + + + + LVM LV name + LVM LV adı + + + + &Mount Point: + Qoşul&ma Nöqtəsi: + + + + Flags: + Bayraqlar: + + + + Label for the filesystem + Fayl sitemi üçün yarlıq + + + + FS Label: + FS yarlığı: + + + + En&crypt + &Şifrələmək + + + + Logical + Məntiqi + + + + Primary + Əsas + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + Qoşulma nöqtəsi artıq istifadə olunur. Lütfən başqasını seçin. + + + + Mountpoint must start with a <tt>/</tt>. + Qoşulma nöqtəsi <tt>/</tt> ilə başlamalıdır. + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + Yeni %1MiB bölməsini %3 (%2) üzərində %4 girişləri ilə yaradın. + + + + Create new %1MiB partition on %3 (%2). + Yeni %1MiB bölməsini %3 (%2) üzərində yaradın. + + + + Create new %2MiB partition on %4 (%3) with file system %1. + %1 fayl sistemi ilə %4 (%3)-də yeni %2MB bölmə yaratmaq. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Yeni <strong>%1MiB</strong> bölməsini <strong>%3</strong> (%2) üzərində <em>%4</em> girişlərində yaradın. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Yeni <strong>%1MiB</strong> bölməsini <strong>%3</strong> (%2) üzərində yaradın. + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + <strong>%1</strong> fayl sistemi ilə <strong>%4</strong> (%3)-də yeni <strong>%2MB</strong> bölmə yaratmaq. + + + + + Creating new %1 partition on %2. + %2-də yeni %1 bölmə yaratmaq. + + + + The installer failed to create partition on disk '%1'. + Quraşdırıcı '%1' diskində bölmə yarada bilmədi. + + + + CreatePartitionTableDialog + + + Create Partition Table + Bölmələr Cədvəli yaratmaq + + + + Creating a new partition table will delete all existing data on the disk. + Bölmələr Cədvəli yaratmaq, bütün diskdə olan məlumatların hamısını siləcək. + + + + What kind of partition table do you want to create? + Hansı Bölmə Cədvəli yaratmaq istəyirsiniz? + + + + Master Boot Record (MBR) + Ön yükləmə Bölməsi (MBR) + + + + GUID Partition Table (GPT) + GUID bölmələr cədvəli (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + %2-də yeni %1 bölmələr cədvəli yaratmaq. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + <strong>%2</strong> (%3)`də yeni <strong>%1</strong> bölmələr cədvəli yaratmaq. + + + + Creating new %1 partition table on %2. + %2-də yeni %1 bölməsi yaratmaq. + + + + The installer failed to create a partition table on %1. + Quraşdırıcı %1-də bölmələr cədvəli yarada bilmədi. + + + + CreateUserJob + + + Create user %1 + %1 İstifadəçi hesabı yaratmaq + + + + Create user <strong>%1</strong>. + <strong>%1</strong> istifadəçi hesabı yaratmaq. + + + + Preserving home directory + Ev qovluğunun saxlanılması + + + + + Creating user %1 + İsitfadəçi %1 yaradılır + + + + Configuring user %1 + %1 istifadəçisinin tənzimlənməsi + + + + Setting file permissions + Fayl icazələrinin quruaşdırılması + + + + CreateVolumeGroupDialog + + + Create Volume Group + Tutumlar qrupu yaratmaq + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + %1 adlı yeni tutumlar qrupu yaratmaq. + + + + Create new volume group named <strong>%1</strong>. + <strong>%1</strong> adlı yeni tutumlar qrupu yaratmaq. + + + + Creating new volume group named %1. + %1 adlı yeni tutumlar qrupu yaradılır. + + + + The installer failed to create a volume group named '%1'. + Quraşdırıcı '%1' adlı tutumlar qrupu yarada bilmədi. + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + %1 adlı tutumlar qrupu qeyri-aktiv edildi. + + + + Deactivate volume group named <strong>%1</strong>. + <strong>%1</strong> adlı tutumlar qrupunu qeyri-aktiv etmək. + + + + The installer failed to deactivate a volume group named %1. + Quraşdırıcı %1 adlı tutumlar qrupunu qeyri-aktiv edə bilmədi. + + + + DeletePartitionJob + + + Delete partition %1. + %1 bölməsini silmək. + + + + Delete partition <strong>%1</strong>. + <strong>%1</strong> bölməsini silmək. + + + + Deleting partition %1. + %1 bölməsinin silinməsi. + + + + The installer failed to delete partition %1. + Quraşdırıcı %1 bölməsini silə bilmədi. + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + Bu cihazda <strong>%1</strong> bölmələr cədvəli var. + + + + 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. + Bu <strong>loop</strong> cihazıdır.<br><br> Bu bölmələr cədvəli olmayan saxta cihaz olub, adi faylları blok cihazı kimi istifadə etməyə imkan yaradır. Bu cür qoşulma adətən yalnız tək fayl sisteminə malik olur. + + + + 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. + Bu quraşdırıcı seçilmiş qurğuda <strong>bölmələr cədvəli aşkar edə bilmədi</strong>.<br><br>Bu cihazda ya bölmələr cədvəli yoxdur, ya bölmələr cədvəli korlanıb, ya da növü naməlumdur.<br>Bu quraşdırıcı bölmələr cədvəlini avtomatik, ya da əllə bölmək səhifəsi vasitəsi ilə yarada bilər. + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <br><br>Bu <strong>EFI</strong> ön yükləyici mühiti istifadə edən müasir sistemlər üçün məsləhət görülən bölmələr cədvəli növüdür. + + + + <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. + <br><br>Bu, <strong>BIOS</strong> ön yükləyici mühiti istifadə edən köhnə sistemlər üçün bölmələr cədvəlidir. Əksər hallarda bunun əvəzinə GPT istifadə etmək daha yaxşıdır. Diqqət:</strong>MBR, köhnəlmiş MS-DOS standartında bölmələr cədvəlidir. <br>Sadəcə 4 <em>ilkin</em> bölüm yaratmağa imkan verir və 4-dən çox bölmədən yalnız biri <em>extended</em> genişləndirilmiş ola bilər, və beləliklə daha çox <em>məntiqi</em> bölmələr yaradıla bilər. + + + + 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. + Seçilmiş cihazda<strong>bölmələr cədvəli</strong> növü.<br><br>Bölmələr cədvəli növünü dəyişdirməyin yeganə yolu, bölmələr cədvəlini sıfırdan silmək və yenidən qurmaqdır, bu da saxlama cihazındakı bütün məlumatları məhv edir.<br>Quraşdırıcı siz başqa bir seçim edənədək bölmələr cədvəlinin cari vəziyyətini saxlayacaqdır.<br>Müasir sistemlər standart olaraq GPT bölümünü istifadə edir. + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + %1 -də Dracut üçün LUKS tənzimləməlirini yazmaq + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + Dracut üçün LUKS tənzimləmələrini yazmağı ötürmək: "/" bölməsi şifrələnmədi + + + + Failed to open %1 + %1 açılmadı + + + + DummyCppJob + + + Dummy C++ Job + Dummy C++ Job + + + + EditExistingPartitionDialog + + + Edit Existing Partition + Mövcud bölməyə düzəliş etmək + + + + Con&tent: + &Tərkibi: + + + + &Keep + &Saxlamaq + + + + Format + Formatlamaq + + + + Warning: Formatting the partition will erase all existing data. + Diqqət: Bölmənin formatlanması ondakı bütün mövcud məlumatları silir. + + + + &Mount Point: + Qoşil&ma nöqtəsi: + + + + Si&ze: + Ol&çü: + + + + MiB + MB + + + + Fi&le System: + Fay&l sistemi: + + + + Flags: + Bayraqlar: + + + + Label for the filesystem + Fayl sitemi üçün yarlıq + + + + FS Label: + FS yarlığı: + + + + EncryptWidget + + + Form + Format + + + + En&crypt system + &Şifrələmə sistemi + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Sisteminiz göründüyü kimi bütün sistemin şifrələnməsini lazım olduğu qədər dəstəkləmir. Siz şifrələməni aktiv edə bilərsiniz, lakin bu sistemin işini zəiflədə bilər. + + + + Passphrase + Şifrə + + + + Confirm passphrase + Şifrəni təsdiq edin + + + + + Please enter the same passphrase in both boxes. + Lütfən, hər iki sahəyə eyni şifrəni daxil edin. + + + + ErrorDialog + + + Details: + Təfərrüatlar: + + + + Would you like to paste the install log to the web? + Quraşdırma jurnalını vebdə yerləşdirmək istəyirsinizmi? + + + + FillGlobalStorageJob + + + Set partition information + Bölmə məlumatlarını ayarlamaq + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <strong>Yeni</strong> %2 sistem bölməsində <em>%3</em> xüsusiyyətləri ilə %1 quraşdırın + + + + Install %1 on <strong>new</strong> %2 system partition. + %2 <strong>yeni</strong> sistem diskinə %1 quraşdırmaq. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>Yeni</strong> %2 bölməsini <strong>%1</strong> qoşulma nöqtəsi və <em>%3</em> xüsusiyyətləri ilə qurun. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + <strong>yeni</strong> %2 bölməsini <strong>%1</strong>%3 qoşulma nöqtəsi ilə qurun. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + %3 <strong>%1</strong> sistem bölməsində <em>%4</em> xüsusiyyətləri ilə %2 quraşdırın. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + <strong>%1</strong> %3 bölməsini <strong>%2</strong> qoşulma nöqtəsi və <em>%4</em> xüsusiyyətləri ilə qurun. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + %3 bölməsinə <strong>%1</strong> ilə <strong>%2</strong>%4 qoşulma nöqtəsi ayarlamaq. + + + + Install %2 on %3 system partition <strong>%1</strong>. + %3 <strong>%1</strong> sistem bölməsində %2 quraşdırın. + + + + Install boot loader on <strong>%1</strong>. + Ön yükləyicini <strong>%1</strong> üzərində quraşdırın. + + + + Setting up mount points. + Qoşulma nöqtəsini ayarlamaq. + + + + FinishedPage + + + Form + Formatlamaq + + + + &Restart now + &Yenidən başlatmaq + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + <h1>Hər şey hazırdır.</h1><br/>%1 kompyuterinizə qurulub.<br/>Siz indi yeni sisteminizi başlada bilərsiniz. + + + + <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> + <html><head/><body><p>Bu çərçivə işarələnərsə siz <span style="font-style:italic;">Hazır</span> düyməsinə vurduğunuz və ya quraşdırıcı proqramı bağlatdığınız zaman sisteminiz dərhal yenidən başladılacaqdır.</p></body></html> + + + + <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. + <h1>Hər şey hazırdır.</h1><br/>%1 kompyuterinizə quraşdırıldı.<br/>Siz yenidən başladaraq yeni sisteminizə daxil ola və ya %2 Canlı mühitini istifadə etməyə davam edə bilərsiniz. + + + + <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> + <html><head/><body><p>Bu çərçivə işarələnərsə siz <span style="font-style:italic;">Hazır</span> düyməsinə vurduğunuz və ya quraşdırıcınıı bağladığınız zaman sisteminiz dərhal yenidən başladılacaqdır.</p></body></html> + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + <h1>Quraşdırılma alınmadı</h1><br/>%1 kompyuterinizə quraşdırıla bilmədi.<br/>Baş vermiş xəta: %2. + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + <h1>Quraşdırılma alınmadı</h1><br/>%1 kompyuterinizə quraşdırıla bilmədi.<br/>Baş vermiş xəta: %2. + + + + FinishedQmlViewStep + + + Finish + Son + + + + FinishedViewStep + + + Finish + Son + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + %4 üzərində %1 bölməsini format etmək (fayl sistemi: %2, ölçüsü: %3 MB). + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + <strong>%3MB</strong> bölməsini <strong>%2</strong> fayl sistemi ilə <strong>%1</strong> formatlamaq. + + + + Formatting partition %1 with file system %2. + %1 bölməsini %2 fayl sistemi ilə formatlamaq. + + + + The installer failed to format partition %1 on disk '%2'. + Quraşdırıcı '%2' diskində %1 bölməsini formatlaya bilmədi. + + + + GeneralRequirements + + + has at least %1 GiB available drive space + ən az %1 QB disk boş sahəsi var + + + + There is not enough drive space. At least %1 GiB is required. + Kifayət qədər disk sahəsi yoxdur. Ən azı %1 QB tələb olunur. + + + + has at least %1 GiB working memory + ən azı %1 QB iş yaddaşı var + + + + The system does not have enough working memory. At least %1 GiB is required. + Sistemdə kifayət qədər iş yaddaşı yoxdur. Ən azı %1 GiB tələb olunur. + + + + is plugged in to a power source + enerji mənbəyi qoşuludur + + + + The system is not plugged in to a power source. + enerji mənbəyi qoşulmayıb. + + + + is connected to the Internet + internetə qoşuludur + + + + The system is not connected to the Internet. + Sistem internetə qoşulmayıb. + + + + is running the installer as an administrator (root) + quraşdırıcını adminstrator (root) imtiyazları ilə başladılması + + + + The setup program is not running with administrator rights. + Quraşdırıcı adminstrator imtiyazları ilə başladılmayıb. + + + + The installer is not running with administrator rights. + Quraşdırıcı adminstrator imtiyazları ilə başladılmayıb. + + + + has a screen large enough to show the whole installer + quraşdırıcını tam göstərmək üçün ekran kifayət qədər genişdir + + + + The screen is too small to display the setup program. + Quraşdırıcı proqramı göstərmək üçün ekran çox kiçikdir. + + + + The screen is too small to display the installer. + Bu quarşdırıcını göstərmək üçün ekran çox kiçikdir. + + + + HostInfoJob + + + Collecting information about your machine. + Komputeriniz haqqında məlumat toplanması. + + + + IDJob + + + + + + OEM Batch Identifier + OEM toplama identifikatoru + + + + Could not create directories <code>%1</code>. + <code>%1</code> qovluğu yaradılmadı. + + + + Could not open file <code>%1</code>. + <code>%1</code> faylı açılmadı. + + + + Could not write to file <code>%1</code>. + <code>%1</code> faylına yazılmadı. + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + mkinitcpio köməyi ilə initramfs yaradılması. + + + + InitramfsJob + + + Creating initramfs. + initramfs yaradılması. + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole quraşdırılmayıb + + + + Please install KDE Konsole and try again! + Lütfən KDE Konsole tətbiqini quraşdırın və yenidən cəhd edin! + + + + Executing script: &nbsp;<code>%1</code> + Ssenari icra olunur. &nbsp;<code>%1</code> + + + + InteractiveTerminalViewStep + + + Script + Ssenari + + + + KeyboardQmlViewStep + + + Keyboard + Klaviatura + + + + KeyboardViewStep + + + Keyboard + Klaviatura + + + + LCLocaleDialog + + + System locale setting + Ümumi məkan ayarları + + + + 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>. + Ümumi məkan ayarları, əmrlər sətiri interfeysinin ayrıca elementləri üçün dil və kodlaşmaya təsir edir. <br/>Hazırkı seçim <strong>%1</strong>. + + + + &Cancel + İm&tina etmək + + + + &OK + &OK + + + + LOSHJob + + + Configuring encrypted swap. + Çifrələnmiş mübadilə sahəsi - swap tənzimlənir. + + + + No target system available. + Hədəf sistemi əlçatan deyil. + + + + No rootMountPoint is set. + Kök qoşulma nöztəsi (rootMountPoint) təyin olunmayıb. + + + + No configFilePath is set. + Tənzimləmə faylı yolu (configFilePath) təyin olunmayıb. + + + + LicensePage + + + Form + Format + + + + <h1>License Agreement</h1> + <h1>Lisenziya razılaşması</h1> + + + + I accept the terms and conditions above. + Mən yuxarıda göstərilən şərtləri qəbul edirəm. + + + + Please review the End User License Agreements (EULAs). + Lütfən lisenziya razılaşması (EULA) ilə tanış olun. + + + + This setup procedure will install proprietary software that is subject to licensing terms. + Bu quraşdırma proseduru lisenziya şərtlərinə tabe olan xüsusi proqram təminatını quraşdıracaqdır. + + + + If you do not agree with the terms, the setup procedure cannot continue. + Lisenziya razılaşmalarını qəbul etməsəniz quraşdırılma davam etdirilə bilməz. + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + Bu quraşdırma proseduru, əlavə xüsusiyyətlər təmin etmək və istifadəçi təcrübəsini artırmaq üçün lisenziyalaşdırma şərtlərinə tabe olan xüsusi proqram təminatını quraşdıra bilər. + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + Şərtlərlə razılaşmasanız, xüsusi proqram quraşdırılmayacaq və bunun əvəzinə açıq mənbə kodu ilə alternativlər istifadə ediləcəkdir. + + + + LicenseViewStep + + + License + Lisenziya + + + + LicenseWidget + + + URL: %1 + URL: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>%1 sürücü</strong>%2 tərəfindən + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>%1 grafik sürücü</strong><br/><font color="Grey">%2 tərəfindən</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>%1 brauzer əlavəsi</strong><br/><font color="Grey">%2 tərəfindən</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>%1 kodek</strong><br/><font color="Grey">%2 tərəfindən</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>%1 paket</strong><br/><font color="Grey">%2 ərəfindən</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">%2 ərəfindən</font> + + + + File: %1 + %1 faylı + + + + Hide license text + Lisenziya mətnini gizlətmək + + + + Show the license text + Lisenziya mətnini göstərmək + + + + Open license agreement in browser. + Lisenziya razılaşmasını brauzerdə açmaq. + + + + LocalePage + + + Region: + Məkan: + + + + Zone: + Saat qurşağı: + + + + + &Change... + &Dəyişmək... + + + + LocaleQmlViewStep + + + Location + Məkan + + + + LocaleTests + + + Quit + Çıxış + + + + LocaleViewStep + + + Location + Məkan + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + LUKS düymə faylını ayarlamaq. + + + + + No partitions are defined. + Heç bir bölmə müəyyən edilməyib. + + + + + + Encrypted rootfs setup error + Kök fayl sisteminin şifrələnməsi xətası + + + + Root partition %1 is LUKS but no passphrase has been set. + %1 Kök bölməsi LUKS-dur lakin, şifrə təyin olunmayıb. + + + + Could not create LUKS key file for root partition %1. + %1 kök bölməsi üçün LUKS düymə faylı yaradılmadı. + + + + Could not configure LUKS key file on partition %1. + %1 bölməsində LUKS düymə faylı tənzimlənə bilmədi. + + + + MachineIdJob + + + Generate machine-id. + Komputerin İD-ni yaratmaq. + + + + Configuration Error + Tənzimləmə xətası + + + + No root mount point is set for MachineId. + Komputer İD-si üçün kök qoşulma nöqtəsi təyin edilməyib. + + + + Map + + + Timezone: %1 + Saat qurşağı: %1 + + + + 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. + Lütfən, xəritədə üstünlük verdiyiniz yeri seçin, belə ki, quraşdırıcı sizin üçün yerli + və saat qurşağı parametrlərini təklif edə bilər. Aşağıda təklif olunan parametrləri dəqiq tənzimləyə bilərsiniz. Xəritəni sürüşdürərək axtarın. + miqyası dəyişmək üçün +/- düymələrindən və ya siçanla sürüşdürmə çubuğundan istifadə etmək. + + + + NetInstallViewStep + + + Package selection + Paket seçimi + + + + Office software + Ofis proqramı + + + + Office package + Ofis paketi + + + + Browser software + Veb bələdçi proqramı + + + + Browser package + Veb bələdçi paketi + + + + Web browser + Veb bələdçi + + + + Kernel + Nüvə + + + + Services + Xidmətlər + + + + Login + Giriş + + + + Desktop + İş Masası + + + + Applications + Tətbiqlər + + + + Communication + Rabitə + + + + Development + Tərtibat + + + + Office + Ofis + + + + Multimedia + Multimediya + + + + Internet + Internet + + + + Theming + Mövzular, Temalar + + + + Gaming + Oyun + + + + Utilities + Vasitələr, Alətlər + + + + NotesQmlViewStep + + + Notes + Qeydlər + + + + OEMPage + + + Ba&tch: + Dəs&tə: + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + <html><head/><body><p>Dəstənin isentifikatorunu bura daxil edin. Bu hədəf sistemində saxlanılacaq.</p></body></html> + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + <html><head/><body><h1>OEM tənzimləmələri</h1><p>Calamares hədəf sistemini tənzimləyərkən OEM ayarlarını istifadə edəcək.</p></body></html> + + + + OEMViewStep + + + OEM Configuration + OEM tənzimləmələri + + + + Set the OEM Batch Identifier to <code>%1</code>. + OEM Dəstəsi identifikatorunu <code>%1</code>-ə ayarlamaq. + + + + Offline + + + Select your preferred Region, or use the default settings. + Üstünlük verdiyiniz Bölgənizi seçin və ilkin ayarlardan istifadə edin. + + + + + + Timezone: %1 + Saat qurşağı: %1 + + + + Select your preferred Zone within your Region. + Bölgənizlə birlikdə üstünlük verdiyiniz zonanı seçin. + + + + Zones + Zonalar + + + + You can fine-tune Language and Locale settings below. + Dil və Yer ayarlarını aşağıda dəqiq tənzimləyə bilərsiniz. + + + + PWQ + + + Password is too short + Şifrə çox qısadır + + + + Password is too long + Şifrə çox uzundur + + + + Password is too weak + Şifrə çox zəifdir + + + + Memory allocation error when setting '%1' + '%1' ayarlanarkən yaddaş bölgüsü xətası + + + + Memory allocation error + Yaddaş bölgüsü xətası + + + + The password is the same as the old one + Şifrə köhnə şifrə ilə eynidir + + + + The password is a palindrome + Şifrə tərsinə oxunuşu ilə eynidir + + + + The password differs with case changes only + Şifrə yalnız hal dəyişiklikləri ilə fərqlənir + + + + The password is too similar to the old one + Şifrə köhnə şifrə ilə çox oxşardır + + + + The password contains the user name in some form + Şifrənin tərkibində istifadəçi adı var + + + + The password contains words from the real name of the user in some form + Şifrə istifadəçinin əsl adına oxşar sözlərdən ibarətdir + + + + The password contains forbidden words in some form + Şifrə qadağan edilmiş sözlərdən ibarətdir + + + + The password contains too few digits + Şifrə çox az rəqəmdən ibarətdir + + + + The password contains too few uppercase letters + Şifrə çox az böyük hərflərdən ibarətdir + + + + The password contains fewer than %n lowercase letters + + Şifrə %n-dən(dan) az kiçik hərflərdən ibarətdir + Şifrə %n hərfdən az kiçik hərflərdən ibarətdir + + + + + The password contains too few lowercase letters + Şifrə çox az kiçik hərflərdən ibarətdir + + + + The password contains too few non-alphanumeric characters + Şifrə çox az alfasayısal olmayan simvollardan ibarətdir + + + + The password is too short + Şifrə çox qısadır + + + + The password does not contain enough character classes + Şifrənin tərkibində kifayət qədər simvol sinifi yoxdur + + + + The password contains too many same characters consecutively + Şifrə ardıcıl olaraq çox oxşar simvollardan ibarətdir + + + + The password contains too many characters of the same class consecutively + Şifrə ardıcıl olaraq eyni sinifin çox simvolundan ibarətdir + + + + The password contains fewer than %n digits + + Şifrə %1-dən az rəqəmdən ibarətdir + Şifrə %n -dən(dan) az rəqəmdən ibarətdir + + + + + The password contains fewer than %n uppercase letters + + Şifrə %n -dən/dan az böyük hərflərdən ibarətdir + Şifrə %n -dən/dan az böyük hərfdən ibarətdir + + + + + The password contains fewer than %n non-alphanumeric characters + + Şifrə %n -dən/dan az hərf-rəqəm olmayan simvollardan ibarətdir + Şifrə %n -dən/dan az hərf-rəqəm olmayan simvollardan ibarətdir + + + + + The password is shorter than %n characters + + Şifrə %n simvoldan qısadır + Şifrə %n simvoldan qısadır + + + + + The password is a rotated version of the previous one + Şifrə bundan əvvəlkinin tərs formasıdır + + + + The password contains fewer than %n character classes + + Şifrə %n simvol sinifindən azdır + Şifrə %n simvol sinifindən azdır + + + + + The password contains more than %n same characters consecutively + + Şifrə ardıcıl olaraq %n eyni simvollardan ibarətdir + Şifrə ardıcıl olaraq %n eyni simvollardan ibarətdir + + + + + The password contains more than %n characters of the same class consecutively + + Şifrə ardıcıl eyni sinifin %n-dən/dan çox simvolundan ibarətdir + Şifrə ardıcıl eyni sinifin %n-dən/dan çox simvolundan ibarətdir + + + + + The password contains monotonic sequence longer than %n characters + + Şifrə l%n simvoldan uzun monotonik ardıcıllıqdan ibarətdir + Şifrə l%n simvoldan uzun monotonik ardıcıllıqdan ibarətdir + + + + + The password contains too long of a monotonic character sequence + Şifrə çox uzun monoton simvollar ardıcıllığından ibarətdir + + + + No password supplied + Şifrə verilməyib + + + + Cannot obtain random numbers from the RNG device + RNG cihazından təsadüfi nömrələr əldə etmək olmur + + + + Password generation failed - required entropy too low for settings + Şifrə yaratma uğursuz oldu - ayarlar üçün tələb olunan entropiya çox aşağıdır + + + + The password fails the dictionary check - %1 + Şifrənin lüğət yoxlaması alınmadı - %1 + + + + The password fails the dictionary check + Şifrənin lüğət yoxlaması alınmadı + + + + Unknown setting - %1 + Naməlum ayarlar - %1 + + + + Unknown setting + Naməlum ayarlar + + + + Bad integer value of setting - %1 + Ayarın pozulmuş tam dəyəri - %1 + + + + Bad integer value + Pozulmuş tam dəyər + + + + Setting %1 is not of integer type + %1 -i ayarı tam say deyil + + + + Setting is not of integer type + Ayar tam say deyil + + + + Setting %1 is not of string type + %1 ayarı sətir deyil + + + + Setting is not of string type + Ayar sətir deyil + + + + Opening the configuration file failed + Tənzəmləmə faylının açılması uğursuz oldu + + + + The configuration file is malformed + Tənzimləmə faylı qüsurludur + + + + Fatal failure + Ciddi qəza + + + + Unknown error + Naməlum xəta + + + + Password is empty + Şifrə böşdur + + + + PackageChooserPage + + + Form + Format + + + + Product Name + Məhsulun adı + + + + TextLabel + Mətn nişanı + + + + Long Product Description + Məhsulun uzun təsviri + + + + Package Selection + Paket seçimi + + + + Please pick a product from the list. The selected product will be installed. + Lütfən məhsulu siyahıdan seçin. Seçilmiş məhsul quraşdırılacaqdır. + + + + PackageChooserQmlViewStep + + + Packages + Paketlər + + + + PackageChooserViewStep + + + Packages + Paketlər + + + + PackageModel + + + Name + Adı + + + + Description + Təsviri + + + + Page_Keyboard + + + Form + Format + + + + Keyboard Model: + Klaviatura modeli: + + + + Type here to test your keyboard + Buraya yazaraq klaviaturanı yoxlayın + + + + Page_UserSetup + + + Form + Format + + + + What is your name? + Adınız nədir? + + + + Your Full Name + Tam adınız + + + + What name do you want to use to log in? + Giriş üçün hansı adı istifadə etmək istəyirsiniz? + + + + login + giriş + + + + What is the name of this computer? + Bu kompyuterin adı nədir? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>Əgər kompyuterinizi şəbəkə üzərindən görünən etsəniz, bu ad istifadə olunacaq.</small> + + + + Computer Name + Kompyuterin adı + + + + Choose a password to keep your account safe. + Hesabınızın təhlükəsizliyi üçün şifrə seçin. + + + + + <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> + <small>Səhvsiz yazmaq üçün eyni şifrəni iki dəfə daxil edin. Yaxşı bir şifrə, hərflərin, nömrələrin və durğu işarələrinin qarışığından və ən azı səkkiz simvoldan ibarət olmalıdır, həmçinin müntəzəm olaraq dəyişdirilməlidir.</small> + + + + + Password + Şifrə + + + + + Repeat Password + Şifrənin təkararı + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Bu qutu işarələndikdə, şifrənin etibarlıq səviyyəsi yoxlanılır və siz zəif şifrədən istifadə edə bilməyəcəksiniz. + + + + Require strong passwords. + Güclü şifrələr tələb edilir. + + + + Log in automatically without asking for the password. + Şifrə soruşmadan sistemə avtomatik daxil olmaq. + + + + Use the same password for the administrator account. + İdarəçi hesabı üçün eyni şifrədən istifadə etmək. + + + + Choose a password for the administrator account. + İdarəçi hesabı üçün şifrəni seçmək. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>Səhvsiz yazmaq üçün eyni şifrəni iki dəfə daxil edin</small> + + + + PartitionLabelsView + + + Root + Root + + + + Home + Home + + + + Boot + Boot + + + + EFI system + EFI sistemi + + + + Swap + Swap - Mübadilə + + + + New partition for %1 + %1 üçün yeni bölmə + + + + New partition + Yeni bölmə + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + Boş disk sahəsi + + + + + New partition + Yeni bölmə + + + + Name + Adı + + + + File System + Fayl sistemi + + + + File System Label + Fayl sistemi yarlığı + + + + Mount Point + Qoşulma nöqtəsi + + + + Size + Ölçüsü + + + + PartitionPage + + + Form + Format + + + + Storage de&vice: + Yaddaş qurğu&su: + + + + &Revert All Changes + Bütün dəyişiklikləri &geri qaytarmaq + + + + New Partition &Table + Yeni bölmələr &cədvəli + + + + Cre&ate + Yar&atmaq + + + + &Edit + Düzəliş &etmək + + + + &Delete + &Silmək + + + + New Volume Group + Yeni tutum qrupu + + + + Resize Volume Group + Tutum qrupunun ölçüsünü dəyişmək + + + + Deactivate Volume Group + Tutum qrupunu deaktiv etmək + + + + Remove Volume Group + Tutum qrupunu silmək + + + + I&nstall boot loader on: + Ön yükləy&icinin quraşdırılma yeri: + + + + Are you sure you want to create a new partition table on %1? + %1-də yeni bölmə yaratmaq istədiyinizə əminsiniz? + + + + Can not create new partition + Yeni bölmə yaradıla bilmir + + + + 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. + %1 üzərindəki bölmə cədvəlində %2 birinci disk bölümü var və artıq əlavə edilə bilməz. +Lütfən bir birinci disk bölümünü çıxarın və əvəzinə genişləndirilmiş bölmə əlavə edin. + + + + PartitionViewStep + + + Gathering system information... + Sistem məlumatları toplanır ... + + + + Partitions + Bölmələr + + + + Unsafe partition actions are enabled. + Bölmələrlə qeyri-təhlükəsiz əməllər ativ edilib. + + + + Partitioning is configured to <b>always</b> fail. + Bölmələrə bölünmə elə ayarlanıb ki, <b>həmişə</b> xəta ilə başa çatır. + + + + No partitions will be changed. + Dəyişiklik ediləcək heç bir bölmə yoxdur. + + + + Current: + Cari: + + + + After: + Sonra: + + + + No EFI system partition configured + EFI sistemi bölməsi tənzimlənməyib + + + + EFI system partition configured incorrectly + EFİ sistem bölməsi səhv yaradıldı + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + EFİ fayl sistemi %1 başladılması üçün lazımdır.<br/> <br/> EFİ fayl sistemini quraşdırmaq üçün geri qayıdın və uyğun fayl sistemini seçin və ya yaradın. + + + + The filesystem must be mounted on <strong>%1</strong>. + Fayl sistemi burada qoşulmalıdır: <strong>%1</strong>. + + + + The filesystem must have type FAT32. + Fayl sistemi FAT32 olmalıdır. + + + + The filesystem must be at least %1 MiB in size. + Fayl sisteminin ölçüsü ən az %1 MiB olmalıdır. + + + + The filesystem must have flag <strong>%1</strong> set. + Fayl sisteminə <strong>%1</strong> bayrağı təyin olunmalıdır. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Siz, EFİ sistem bölməsini ayarlamadan davam edə bilərsiniz, lakin bu sisteminizin işə düşə bilməməsinə səbəb ola bilər. + + + + Option to use GPT on BIOS + BIOS-da GPT istifadəsi seçimi + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT bölmə cədvəli bütün sistemlər üçün yaxşıdır. Bu quraşdırıcı BIOS sistemləri üçün də belə bir quruluşu dəstəkləyir.<br/><br/>BİOS-da GPT bölmələr cədvəlini ayarlamaq üçün (əgər bu edilməyibsə) geriyə qayıdın və bölmələr cədvəlini GPT-yə qurun, sonra isə <strong>%2</strong> bayrağı seçilmiş 8 MB-lıq formatlanmamış bölmə yaradın.<br/><br/>8 MB-lıq formatlanmamış bölmə GPT ilə BİOS sistemində %1 başlatmaq üçün lazımdır. + + + + Boot partition not encrypted + Ön yükləyici bölməsi çifrələnməyib + + + + 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. + Şifrəli bir kök bölməsi ilə birlikdə ayrı bir ön yükləyici bölməsi qurulub, ancaq ön yükləyici bölməsi şifrələnməyib.<br/><br/>Bu cür quraşdırma ilə bağlı təhlükəsizlik problemləri olur, çünki vacib sistem sənədləri şifrəsiz bölmədə saxlanılır.<br/>İstəyirsinizsə davam edə bilərsiniz, lakin, fayl sisteminin kilidi, sistem başladıldıqdan daha sonra açılacaqdır.<br/>Yükləmə hissəsini şifrələmək üçün geri qayıdın və bölmə yaratma pəncərəsində <strong>Şifrələmə</strong> menyusunu seçərək onu yenidən yaradın. + + + + has at least one disk device available. + ən az bir disk qurğusu mövcuddur. + + + + There are no partitions to install on. + Quraşdırmaq üçün bölmə yoxdur. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + Plasma Xarici Görünüş Mövzusu İşləri + + + + + Could not select KDE Plasma Look-and-Feel package + KDE Plasma Xarici Görünüş paketinin seçilməsi + + + + PlasmaLnfPage + + + Form + Format + + + + 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. + Lütfən, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz həmçinin bu mərhələni ötürə və sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilərsiniz. Xarici Görünüşə klikləməniz onun canlı görüntüsünü sizə göstərəcəkdir. + + + + 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. + Lütfən, KDE Plasma İş Masası üçün Xarici Görünüşü seçin. Siz həmçinin bu mərhələni ötürə və sistem qurulduqdan sonra Plasma xarici görünüşünü ayarlaya bilərsiniz. Xarici Görünüşə klikləməniz onun canlı görüntüsünü sizə göstərəcəkdir. + + + + PlasmaLnfViewStep + + + Look-and-Feel + Xarici Görünüş + + + + PreserveFiles + + + Saving files for later ... + Fayllar daha sonra saxlanılır... + + + + No files configured to save for later. + Sonra saxlamaq üçün heç bir ayarlanan fayl yoxdur. + + + + Not all of the configured files could be preserved. + Ayarlanan faylların hamısı saxlanıla bilməz. + + + + ProcessResult + + + +There was no output from the command. + +Əmrlərdən çıxarış alınmadı. + + + + +Output: + + +Çıxarış: + + + + + External command crashed. + Xarici əmr qəzası baş verdi. + + + + Command <i>%1</i> crashed. + <i>%1</i> əmrində qəza baş verdi. + + + + External command failed to start. + Xarici əmr başladıla bilmədi. + + + + Command <i>%1</i> failed to start. + <i>%1</i> əmri əmri başladıla bilmədi. + + + + Internal error when starting command. + Əmr başlayarkən daxili xəta. + + + + Bad parameters for process job call. + İş prosesini çağırmaq üçün xətalı parametr. + + + + External command failed to finish. + Xarici əmr başa çatdırıla bilmədi. + + + + Command <i>%1</i> failed to finish in %2 seconds. + <i>%1</i> əmrini %2 saniyədə başa çatdırmaq mümkün olmadı. + + + + External command finished with errors. + Xarici əmr xəta ilə başa çatdı. + + + + Command <i>%1</i> finished with exit code %2. + <i>%1</i> əmri %2 xəta kodu ilə başa çatdı. + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + naməlum + + + + extended + genişləndirilmiş + + + + unformatted + format olunmamış + + + + swap + mübadilə + + + + + Default + Standart + + + + + + + File not found + Fayl tapılmadı + + + + Path <pre>%1</pre> must be an absolute path. + <pre>%1</pre> yolu mütləq bir yol olmalıdır. + + + + Directory not found + Qovluq tapılmadı + + + + + Could not create new random file <pre>%1</pre>. + Yeni təsadüfi<pre>%1</pre> faylı yaradıla bilmir. + + + + No product + Məhsul yoxdur + + + + No description provided. + Təsviri verilməyib. + + + + (no mount point) + (qoşulma nöqtəsi yoxdur) + + + + Unpartitioned space or unknown partition table + Bölünməmiş disk sahəsi və ya naməlum bölmələr cədvəli + + + + Recommended + + + <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> + Bu kompüter %1 qurulması üçün minimum tələblərə cavab vermir. + <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər.</p> + + + + RemoveUserJob + + + Remove live user from target system + Canlı istifadəçini hədəf sistemindən silmək + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + %1 adlı Tutum Qrupunu silmək. + + + + Remove Volume Group named <strong>%1</strong>. + <strong>%1</strong> adlı Tutum Qrupunu silmək. + + + + The installer failed to remove a volume group named '%1'. + Quraşdırıcı "%1" adlı tutum qrupunu silə bilmədi. + + + + ReplaceWidget + + + Form + Format + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + %1 quraşdırmaq yerini seşmək.<br/><font color="red">Diqqət!</font>bu seçilmiş bölmədəki bütün faylları siləcək. + + + + The selected item does not appear to be a valid partition. + Seçilmiş element etibarlı bir bölüm kimi görünmür. + + + + %1 cannot be installed on empty space. Please select an existing partition. + %1 böş disk sahəsinə quraşdırıla bilməz. Lütfən mövcüd bölməni seçin. + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %1 genişləndirilmiş bölməyə quraşdırıla bilməz. Lütfən, mövcud birinci və ya məntiqi bölməni seçin. + + + + %1 cannot be installed on this partition. + %1 bu bölməyə quraşdırıla bilməz. + + + + Data partition (%1) + Verilənlər bölməsi (%1) + + + + Unknown system partition (%1) + Naməlum sistem bölməsi (%1) + + + + %1 system partition (%2) + %1 sistem bölməsi (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <strong>%4</strong><br/><br/>%1 Bölməsi %2 üçün çox kiçikdir. Lütfən, ən azı %3 QB həcmində olan bölməni seçin. + + + + <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. + <strong>%2</strong><br/><br/>EFI sistem bölməsi bu sistemin heç bir yerində tapılmadı. Lütfən, geri qayıdın və %1 təyin etmək üçün əl ilə bu bölməni yaradın. + + + + + + <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. + <strong>%3</strong><br/><br/>%1, %2.bölməsində quraşdırılacaq.<br/><font color="red">Diqqət: </font>%2 bölməsindəki bütün məlumatlar itiriləcək. + + + + The EFI system partition at %1 will be used for starting %2. + %1 EFI sistemi %2 başlatmaq üçün istifadə olunacaqdır. + + + + EFI system partition: + EFI sistem bölməsi: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + Bu kompüter %1 qurulması üçün minimum tələblərə cavab vermir. <br/> + Quraşdırılma davam etdirilə bilməz. </p> + + + + <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> + Bu kompüter %1 qurulması üçün minimum tələblərə cavab vermir. + <br/>Quraşdırılma davam etdirilə bilər, lakin bəzi imkanları əlçatmaz ola bilər.</p> + + + + ResizeFSJob + + + Resize Filesystem Job + Fayl sisteminin ölçüsünü dəyişmək + + + + Invalid configuration + Etibarsız Tənzimləmə + + + + The file-system resize job has an invalid configuration and will not run. + Fayl sisteminin ölçüsünü dəyişmək işinin tənzimlənməsi etibarsızdır və baçladıla bilməz. + + + + KPMCore not Available + KPMCore mövcud deyil + + + + Calamares cannot start KPMCore for the file-system resize job. + Calamares bu fayl sisteminin ölçüsünü dəyişmək üçün KPMCore proqramını işə sala bilmir. + + + + + + + + Resize Failed + Ölçüsünü dəyişmə alınmadı + + + + The filesystem %1 could not be found in this system, and cannot be resized. + %1 fayl sistemi bu sistemdə tapılmadı və ölçüsü dəyişdirilə bilmədi. + + + + The device %1 could not be found in this system, and cannot be resized. + %1 qurğusu bu sistemdə tapılmadı və ölçüsü dəyişdirilə bilməz. + + + + + The filesystem %1 cannot be resized. + %1 fayl sisteminin ölçüsü dəyişdirilə bilmədi. + + + + + The device %1 cannot be resized. + %1 qurğusunun ölçüsü dəyişdirilə bilmədi. + + + + The filesystem %1 must be resized, but cannot. + %1 fayl sisteminin ölçüsü dəyişdirilməlidir, lakin bu mümkün deyil. + + + + The device %1 must be resized, but cannot + %1 qurğusunun ölçüsü dəyişdirilməlidir, lakin, bu mümkün deyil + + + + ResizePartitionJob + + + Resize partition %1. + %1 bölməsinin ölçüsünü dəyişmək. + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + <strong>%2MB</strong> <strong>%1</strong> bölməsinin ölçüsünü <strong>%3MB</strong>-a dəyişmək. + + + + Resizing %2MiB partition %1 to %3MiB. + %2 MB %1 bölməsinin ölçüsünü %3MB-a dəyişmək. + + + + The installer failed to resize partition %1 on disk '%2'. + Quraşdırıcı %1 bölməsinin ölçüsünü "%2" diskində dəyişə bilmədi. + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + Tutum qrupunun ölçüsünü dəyişmək + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + %1 adlı tutum qrupunun ölçüsünü %2-dən %3-ə dəyişmək. + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + <strong>%1</strong> adlı tutum qrupunun ölçüsünü <strong>%2</strong>-dən strong>%3</strong>-ə dəyişmək. + + + + The installer failed to resize a volume group named '%1'. + Quraşdırıcı "%1" adlı tutum qrupunun ölçüsünü dəyişə bilmədi. + + + + ResultsListDialog + + + For best results, please ensure that this computer: + Ən yaşxı nəticə üçün lütfən, əmin olun ki, bu kompyuter: + + + + System requirements + Sistem tələbləri + + + + ScanningDialog + + + Scanning storage devices... + Yaddaş qurğusu axtarılır... + + + + Partitioning + Bölüşdürmə + + + + SetHostNameJob + + + Set hostname %1 + %1 host adı təyin etmək + + + + Set hostname <strong>%1</strong>. + <strong>%1</strong> host adı təyin etmək. + + + + Setting hostname %1. + %1 host adının ayarlanması. + + + + + Internal Error + Daxili Xəta + + + + + Cannot write hostname to target system + Host adı hədəf sistemə yazıla bilmədi + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + Klaviatura modeliini %1, qatını isə %2-%3 təyin etmək + + + + Failed to write keyboard configuration for the virtual console. + Virtual konsol üçün klaviatura tənzimləmələrini yazmaq mümkün olmadı. + + + + + + Failed to write to %1 + %1-ə yazmaq mümkün olmadı + + + + Failed to write keyboard configuration for X11. + X11 üçün klaviatura tənzimləmələrini yazmaq mümükün olmadı. + + + + Failed to write keyboard configuration to existing /etc/default directory. + Klaviatura tənzimləmələri möcvcud /etc/default qovluğuna yazıla bilmədi. + + + + SetPartFlagsJob + + + Set flags on partition %1. + %1 bölməsində bayraqlar qoymaq. + + + + Set flags on %1MiB %2 partition. + %1 MB %2 bölməsində bayraqlar qoymaq. + + + + Set flags on new partition. + Yeni bölmədə bayraq qoymaq. + + + + Clear flags on partition <strong>%1</strong>. + <strong>%1</strong> bölməsindəki bayraqları ləğv etmək. + + + + Clear flags on %1MiB <strong>%2</strong> partition. + %1MB <strong>%2</strong> bölməsindəki bayraqları ləğv etmək. + + + + Clear flags on new partition. + Yeni bölmədəki bayraqları ləğv etmək. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + <strong>%1</strong> bölməsini <strong>%2</strong> kimi bayraqlamaq. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MB <strong>%2</strong> bölməsini <strong>%3</strong> kimi bayraqlamaq. + + + + Flag new partition as <strong>%1</strong>. + Yeni bölməni <strong>%1</strong> kimi bayraqlamaq. + + + + Clearing flags on partition <strong>%1</strong>. + <strong>%1</strong> bölməsindəki bayraqları ləöv etmək. + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MB <strong>%2</strong> bölməsindəki bayraqların ləğv edilməsi. + + + + Clearing flags on new partition. + Yeni bölmədəki bayraqların ləğv edilməsi. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + <strong>%2</strong> bayraqlarının <strong>%1</strong> bölməsində ayarlanması. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + <strong>%3</strong> bayraqlarının %1MB <strong>%2</strong> bölməsində ayarlanması. + + + + Setting flags <strong>%1</strong> on new partition. + <strong>%1</strong> bayraqlarının yeni bölmədə ayarlanması. + + + + The installer failed to set flags on partition %1. + Quraşdırıcı %1 bölməsinə bayraqlar qoya bilmədi. + + + + SetPasswordJob + + + Set password for user %1 + %1 istifadəçisi üçün şifrə daxil etmək + + + + Setting password for user %1. + %1 istifadəçisi üçün şifrə ayarlamaq. + + + + Bad destination system path. + Səhv sistem yolu təyinatı. + + + + rootMountPoint is %1 + rootMountPoint %1-dir + + + + Cannot disable root account. + Kök hesabını qeyri-aktiv etmək olmur. + + + + passwd terminated with error code %1. + %1 xəta kodu ilə sonlanan şifrə. + + + + Cannot set password for user %1. + %1 istifadəçisi üçün şifrə yaradıla bilmədi. + + + + usermod terminated with error code %1. + usermod %1 xəta kodu ilə sonlandı. + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Saat qurşağını %1/%2 olaraq ayarlamaq + + + + Cannot access selected timezone path. + Seçilmiş saat qurşağı yoluna daxil olmaq mümkün deyil. + + + + Bad path: %1 + Etibarsız yol: %1 + + + + Cannot set timezone. + Saat qurşağını qurmaq mümkün deyil. + + + + Link creation failed, target: %1; link name: %2 + Keçid yaradılması alınmadı, hədəf: %1; keçed adı: %2 + + + + Cannot set timezone, + Saat qurşağı qurulmadı, + + + + Cannot open /etc/timezone for writing + /etc/timezone qovluğu yazılmaq üçün açılmadı + + + + SetupGroupsJob + + + Preparing groups. + Qruplar hazırlanır. + + + + + Could not create groups in target system + Hədəf sistemdə qruplar yaratmaq mümkün olmadı + + + + These groups are missing in the target system: %1 + Hədəf sistemdə çatışmayan qruplar: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <pre>sudo</pre> istifadəçilərinin tənzimlənməsi. + + + + Cannot chmod sudoers file. + Sudoers faylına chmod tətbiq etmək mümkün olmadı. + + + + Cannot create sudoers file for writing. + Sudoers faylını yazmaq mümkün olmadı. + + + + ShellProcessJob + + + Shell Processes Job + Shell prosesləri ilə iş + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &OK + + + + &Yes + &Bəli + + + + &No + &Xeyr + + + + &Cancel + &İmtina etmək + + + + &Close + &Bağlamaq + + + + TrackingInstallJob + + + Installation feedback + Quraşdırılma hesabatı + + + + Sending installation feedback. + Quraşdırılma hesabatının göndərməsi. + + + + Internal error in install-tracking. + install-tracking daxili xətası. + + + + HTTP request timed out. + HTTP sorğusunun vaxtı keçdi. + + + + TrackingKUserFeedbackJob + + + KDE user feedback + KDE istifadəçi hesabatı + + + + Configuring KDE user feedback. + KDE istifadəçi hesabatının tənzimlənməsi. + + + + + Error in KDE user feedback configuration. + KDE istifadəçi hesabatının tənzimlənməsində xəta. + + + + Could not configure KDE user feedback correctly, script error %1. + KDE istifadəçi hesabatı düzgün tənzimlənmədi, əmr xətası %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE istifadəçi hesabatı düzgün tənzimlənmədi, Calamares xətası %1. + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + Kompyuter hesabatı + + + + Configuring machine feedback. + kompyuter hesabatının tənzimlənməsi. + + + + + Error in machine feedback configuration. + Kompyuter hesabatının tənzimlənməsində xəta. + + + + Could not configure machine feedback correctly, script error %1. + Kompyuter hesabatı düzgün tənzimlənmədi, əmr xətası %1. + + + + Could not configure machine feedback correctly, Calamares error %1. + Kompyuter hesabatı düzgün tənzimlənmədi, Calamares xətası %1. + + + + TrackingPage + + + Form + Format + + + + Placeholder + Əvəzləyici + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Göndərmək üçün buraya klikləyin <span style=" font-weight:600;">quraşdırıcınız haqqında heç bir məlumat yoxdur</span>.</p></body></html> + + + + <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> + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">İstifadəçi hesabatı haqqında daha çox məlumat üçün buraya klikləyin</span></a></p></body></html> + + + + 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. + İzləmə %1ə, cihazın neçə dəfə quraşdırıldığını, hansı cihazda quraşdırıldığını və hansı tətbiqlərdən istifadə olunduğunu görməyə kömək edir. Göndərilənləri görmək üçün hər sahənin yanındakı yardım işarəsini vurun. + + + + 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. + Bunu seçərək quraşdırma və kompyuteriniz haqqında məlumat göndərəcəksiniz. Quraşdırma başa çatdıqdan sonra, bu məlumat yalnız <b>bir dəfə</b> göndəriləcəkdir. + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Bu seçimdə siz vaxtaşırı <b>kompyuter</b> qurğularınız, avadanlıq və tətbiqləriniz haqqında %1-ə məlumat göndərəcəksiniz. + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Bu seçimdə siz vaxtaşırı <b>istifadəçi</b> qurğularınız, avadanlıq və tətbiqləriniz haqqında %1-ə məlumat göndərəcəksiniz. + + + + TrackingViewStep + + + Feedback + Hesabat + + + + UmountJob + + + Unmount file systems. + Fayl sistemini ayırmaq. + + + + No target system available. + Hədəf sistemi əlçatan deyil. + + + + No rootMountPoint is set. + Kök qoşulma nöztəsi (rootMountPoint) təyin olunmayıb. + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman ayarlandıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + <small>Əgər bu kompyuteri sizdən başqa şəxs istifadə edəcəkdirsə o zaman quraşdırıldıqdan sonra bir neçə istifadəçi hesabı yarada bilərsiniz.</small> + + + + UsersQmlViewStep + + + Users + İstifadəçilər + + + + UsersViewStep + + + Users + İstifadəçilər + + + + VariantModel + + + Key + Column header for key/value + Açar + + + + Value + Column header for key/value + Dəyər + + + + VolumeGroupBaseDialog + + + Create Volume Group + Tutumlar qrupu yaratmaq + + + + List of Physical Volumes + Fiziki Tutumların siyahısı + + + + Volume Group Name: + Tutum Qrupunun adı: + + + + Volume Group Type: + Tutum Qrupunun Növü: + + + + Physical Extent Size: + Fiziki boy ölçüsü: + + + + MiB + MB + + + + Total Size: + Ümumi Ölçü: + + + + Used Size: + İstifadə olunanın ölçüsü: + + + + Total Sectors: + Ümumi Bölmələr: + + + + Quantity of LVs: + LVlərin sayı: + + + + WelcomePage + + + Form + Format + + + + + Select application and system language + Sistem və tətbiq dilini seçmək + + + + &About + H&aqqında + + + + Open donations website + Maddi dəstək üçün veb səhifəsi + + + + &Donate + Ma&ddi dəstək + + + + Open help and support website + Kömək və dəstək veb səhifəsi + + + + &Support + Də&stək + + + + Open issues and bug-tracking website + Problemlər və xəta izləmə veb səhifəsi + + + + &Known issues + &Məlum problemlər + + + + Open release notes website + Buraxılış haqqında qeydlər veb səhifəsi + + + + &Release notes + Bu&raxılış haqqında qeydlər + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>%1 üçün Calamares quraşdırma proqramına Xoş Gəldiniz.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>%1 quraşdırmaq üçün Xoş Gəldiniz.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1> %1 üçün Calamares quraşdırıcısına Xoş Gəldiniz.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 quraşdırıcısına Xoş Gəldiniz.</h1> + + + + %1 support + %1 dəstəyi + + + + About %1 setup + %1 quraşdırması haqqında + + + + About %1 installer + %1 quraşdırıcısı haqqında + + + + <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. + <h1>%1</h1><br/><strong>%2<br/>%3 üçün</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/>Təşəkkür edirik, <a href="https://calamares.io/team/">Calamares komandasına</a> və <a href="https://www.transifex.com/calamares/calamares/">Calamares tərcüməçilər komandasına</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> tərtibatçılarının sponsoru: <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. + + + + WelcomeQmlViewStep + + + Welcome + Xoş Gəldiniz + + + + WelcomeViewStep + + + Welcome + Xoş Gəldiniz + + + + ZfsJob + + + Create ZFS pools and datasets + ZFS mənbələri - zpool və verilənlər dəsti yaratmaq + + + + Failed to create zpool on + Zpool yaradıla bilmədi + + + + Configuration Error + Tənzimləmə xətası + + + + No partitions are available for ZFS. + ZFS üçün əlçatan bölmələr yoxdur. + + + + Internal data missing + Daxili məlumatlar çatışmır + + + + + Failed to create zpool + Zpool yaradıla bilmədi + + + + Failed to create dataset + Verilənlər dəsti yaradıla bilmədi + + + + The output was: + Çıxışda: + + + + about + + + <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. + <h1>%1</h1><br/> + <strong>%2<br/> + %3 üçün</strong><br/><br/> + Müəliff hüquqları 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt; + Müəliff hüquqları 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;8<br/> + <a href='https://calamares.io/team/'>Calamares komandasına</a> və + <a href='https://www.transifex.com/calamares/calamares/'>Calamares tərcümə komandasına</a> təşəkkürlər.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> tərtibatı <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software + tərəfindən dəstəklənir. + + + + Back + Geriyə + + + + calamares-sidebar + + + Show debug information + Sazlama məlumatlarını göstərmək + + + + finishedq + + + Installation Completed + Quraşdırma başa çatdı + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 komputerinizə quraşdırıldı.<br/> + Siz indi yeni quraşdırılmış sistemə daxil ola bilərsiniz, və ya Canlı mühitdən istifadə etməyə davam edə bilərsiniz. + + + + Close Installer + Quraşdırıcını bağlayın + + + + Restart System + Sistemi yenidən başladın + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Quraşdırmanın tam jurnalı, Canlı mühit istifadəçisinin ev qovluğunda installation.log kimi mövcuddur.<br/> + Bu jurnal, hədəf sistemin /var/log/installation.log qovluğuna kopyalandı.</p> + + + + finishedq@mobile + + + Installation Completed + Quraşdırma başa çatdı + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 kompyuterinizə quraşdırıldı.<br/> + Cihazınızı indi yenidən başlada bilərsiniz. + + + + Close + Bağlayın + + + + Restart + Yenidən başladın + + + + i18n + + + <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>. + <h1>Dillər</h1> </br> + Sistemin yer ayarları bəzi istifadəçi interfeysi elementləri əmrlər sətri üçün dil və simvolların ayarlanmasına təsir edir. Cari ayar: <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Yerlər</h1></br> + Sistemin məkan ayarları say və tarix formatlarəna təsir edir. Cari ayar <strong>%1</strong>-dir + + + + Back + Geriyə + + + + keyboardq + + + To activate keyboard preview, select a layout. + Klaviatura önbaxışını aktiv etmək üçün bir qat seçin. + + + + Keyboard Model: + Klaviatura modeli: + + + + Layouts + Qatlar + + + + Type here to test your keyboard + Buraya yazaraq klaviaturanı yoxlayın + + + + Variants + Variantlar + + + + localeq + + + Change + Dəyişdirmək + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + <h3>%1</h3> + <p>Bunlar buraxılış qeydləri nümunəsidir.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice bütün dünyada milyonlarla insanın istifadə etdiyi güclü və pulsuz ofis proqramları dəstidir. Buraya, onu bazarda hərtərəfli Pulsuz və Açıq mənbəli ofis proqramları dəsti halına gətirən bir neçə tətbiqlər daxildir. <br/> + İlkin seçimlər. + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Əgər ofis proqramları quraşdırmaq istəməsəniz, sadəcə "Ofis dəsti olmadan' seçin. Sİz daha sonra quraşdırılmış sistemə istədiyiniz tətbiqi (həmçinin ofis üçün) quraşdıra bilərsiniz. + + + + No Office Suite + Ofis dəsti olmadan + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Minimum İş masası quraşdırması yaradın, bütün əlavə tətbiqləri silin və sonra sisteminizə nə əlavə etmək istədiyinizə qərar verin. Məsələn belə bir quraşdırmada Office Suite, media oynadıcı, şəkillərə baxış və ya printer dəstəyi üçün tətbiqləri quraşdırmaq istəməyə bilərsiniz. Bu, yalnızca fayl bələdçisi, paket idarəedicisi, mətn redaktoru və sadə veb bələdçidən ibarət sadə İş masası olacaq. + + + + Minimal Install + Minimum quraşdırma + + + + Please select an option for your install, or use the default: LibreOffice included. + Lütfən quraşdırmanız üçün bir seçim edin və ya ilkin variandan istifadə edin: LibreOffice daxildir. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Bu Flickable tərkibləri ilə RichText seçimlərində göstərilən QML faylı nümunəsidir</p> + + <p>QML RichText ilə HTML yarlığı istifadə edə bilər, Flickable daha çox toxunaqlı ekranlar üçün istifadə olunur.</p> + + <p><b>Bu qalın şriftli mətndir</b></p> + <p><i>Bu kursif şriftli mətndir</i></p> + <p><u>Bu al cizgili şriftli mətndir</u></p> + <p><center>Bu mətn mərkəzdə yerləşəcək.</center></p> + <p><s>Bu üzəri cizgilidir</s></p> + + <p>Kod nümunəsi: + <code>ls -l /home</code></p> + + <p><b>Siyahı:</b></p> + <ul> + <li>Intel CPU sistemləri</li> + <li>AMD CPU sistemləri</li> + </ul> + + <p>Şaquli sürüşmə çubuğu tənzimlənir, cari eni 10-a qurulur.</p> + + + + Back + Geriyə + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + İnzibatçı tapşırıqlarını yerinə yetirmək və sistemə giriş üçün istifadəçi adını və istifadəçi hesabı məlumatlarını daxil edin + + + + What is your name? + Adınız nədir? + + + + Your Full Name + Tam adınız + + + + What name do you want to use to log in? + Giriş üçün hansı adı istifadə etmək istəyirsiniz? + + + + Login Name + Giriş Adı + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Əgər bu komputeri bir neçə şəxs istifadə ediləcəksə o zaman quraşdırmadan sonra birdən çox hesab yarada bilərsiniz. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Yalnız kiçik hərflərdən, simvollardan, alt cizgidən və defisdən istifadə oluna bilər. + + + + root is not allowed as username. + kökə istifadəçi_adı kimi icazə verilmir. + + + + What is the name of this computer? + Bu kompyuterin adı nədir? + + + + Computer Name + Kompyuterin adı + + + + This name will be used if you make the computer visible to others on a network. + Əgər gizlədilməzsə komputer şəbəkədə bu adla görünəcək. + + + + localhost is not allowed as hostname. + yerli hosta host_adı kimi icazə verilmir. + + + + Choose a password to keep your account safe. + Hesabınızın təhlükəsizliyi üçün şifrə seçin. + + + + Password + Şifrə + + + + Repeat Password + Şifrənin təkararı + + + + 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. + Düzgün yazılmasını yoxlamaq üçün eyni şifrəni iki dəfə daxil edin. Güclü şifrə üçün rəqəm, hərf və durğu işarələrinin qarışıöğından istifadə edin. Şifrə ən azı səkkiz simvoldan uzun olmalı və müntəzəm olaraq dəyişdirilməlidir. + + + + Validate passwords quality + Şifrənin keyfiyyətini yoxlamaq + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Bu qutu işarələndikdə, şifrənin etibarlıq səviyyəsi yoxlanılır və siz zəif şifrədən istifadə edə bilməyəcəksiniz. + + + + Log in automatically without asking for the password + Şifrə soruşmadan sistemə daxil olmaq + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Yalnız hərflərə, saylara, alt cizgisinə və tire işarəsinə icazə verilir, ən az iki simvol. + + + + Reuse user password as root password + İstifadəçi şifrəsini kök şifrəsi kimi istifadə etmək + + + + Use the same password for the administrator account. + İdarəçi hesabı üçün eyni şifrədən istifadə etmək. + + + + Choose a root password to keep your account safe. + Hesabınızı qorumaq üçün kök şifrəsini seçin. + + + + Root Password + Kök Şifrəsi + + + + Repeat Root Password + Kök Şifrəsini təkrar yazın + + + + Enter the same password twice, so that it can be checked for typing errors. + Düzgün yazılmasını yoxlamaq üçün eyni şifrəni iki dəfə daxil edin. + + + + welcomeq + + + <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> + <h3>%1quraşdırıcısına <quote>%2</quote> Xoş Gəldiniz</h3> + <p>Bu proqram sizə bəzi suallar verəcək və %1 komputerinizə quraşdıracaq.</p> + + + + About + Haqqında + + + + Support + Dəstək + + + + Known issues + Məlum problemlər + + + + Release notes + Buraxılış qeydləri + + + + Donate + Maddi dəstək + + + diff --git a/lang/calamares_be.ts b/lang/calamares_be.ts index 16154ce29..3aef95876 100644 --- a/lang/calamares_be.ts +++ b/lang/calamares_be.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + <strong>Асяроддзе загрузкі</strong> дадзенай сістэмы.<br><br>Старыя сістэмы x86 падтрымліваюць толькі <strong>BIOS</strong>. <br>Сучасныя сістэмы звычайна падтрымліваюць толькі <strong>EFI</strong>, але таксама могуць імітаваць BIOS, калі асяроддзе загрузкі запушчана ў рэжыме сумяшчальнасці. - + 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. - + Гэтая сістэма выкарыстоўвае асяроддзе загрузкі <strong>EFI</strong>.<br><br>Каб наладзіць запуск з EFI, сродак усталёўкі выкарыстоўвае праграму <strong>GRUB</strong> альбо <strong>systemd-boot</strong> на <strong>Сістэмным раздзеле EFI</strong>. Працэс аўтаматызаваны, але вы можаце абраць ручны рэжым, у якім зможаце абраць ці стварыць раздзел. - + 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. - + Сістэма запушчаная ў працоўным асяроддзі <strong>BIOS</strong>.<br><br>Каб наладзіць запуск з BIOS, сродку ўсталёўкі неабходна ўсталяваць загрузчык <strong>GRUB</strong>, альбо ў пачатку раздзела, альбо ў <strong>Галоўны загрузачны запіс. (MBR)</strong>, які прадвызначана знаходзіцца ў пачатку табліцы раздзелаў. Працэс аўтаматычны, але вы можаце перайсці ў ручны рэжым, дзе зможаце наладзіць гэта ўласнаручна. BootLoaderModel - + Master Boot Record of %1 - Галоўны загрузачны запіс %1 + Галоўны загрузачны запіс (MBR) %1 - + Boot Partition Загрузачны раздзел - + System Partition Сістэмны раздзел - + Do not install a boot loader Не ўсталёўваць загрузчык - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Пустая старонка @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Форма - + GlobalStorage Глабальнае сховішча - + JobQueue Чарга задач - + Modules Модулі - + Type: Тып: - - + + none няма - + Interface: Інтэрфейс: - - Tools - Інструменты + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet Перазагрузіць табліцу стыляў - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree Дрэва віджэтаў - + Debug information Адладачная інфармацыя @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Наладзіць - + Install Усталяваць @@ -130,2686 +158,3022 @@ Calamares::FailJob - + Job failed (%1) Задача схібіла (%1) - + Programmed job failure was explicitly requested. - + Запраграмаваная памылка задачы была па запыту. Calamares::JobThread - + Done - + Завершана Calamares::NamedJob - + Example job (%1) - + Прыклад задачы (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Запусціць загад '%1' у мэтавай сістэме. - + Run command '%1'. - + Запусціць загад '%1'. - + Running command %1 %2 - + Выкананне загада %1 %2 Calamares::PythonJob - + Running %1 operation. - + Выкананне аперацыі %1. - + Bad working directory path - + Няправільны шлях да працоўнага каталога - + Working directory %1 for python job %2 is not readable. - + Працоўны каталог %1 для задачы python %2 недаступны для чытання. - + Bad main script file - + Хібны галоўны файл скрыпта - + Main script file %1 for python job %2 is not readable. - + Галоўны файл скрыпта %1 для задачы python %2 недаступны для чытання. - + Boost.Python error in job "%1". - + Boost.Python памылка ў задачы "%1". Calamares::QmlViewStep - + Loading ... - + Загрузка... - + QML Step <i>%1</i>. - + Крок QML <i>%1</i>. - + Loading failed. - + Не атрымалася загрузіць. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Праверка патрабаванняў да модуля <i>%1</i> выкананая. + - + Waiting for %n module(s). - - - - - + + Чакаецца %n модуль. + Чакаюцца %n модулі. + Чакаецца %n модуляў. + Чакаецца %n модуляў. - + (%n second(s)) - - - - - + + (%n секунда) + (%n секунды) + (%n секунд) + (%n секунд) - + System-requirements checking is complete. - + Праверка адпаведнасці сістэмным патрабаванням завершаная. Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed + Усталёўка схібіла + + + + Installation Failed + Не атрымалася ўсталяваць + + + + Error + Памылка + + + + &Yes + &Так + + + + &No + &Не + + + + &Close + &Закрыць + + + + Install Log Paste URL + Уставіць журнал усталёўкі па URL + + + + The upload was unsuccessful. No web-paste was done. + Запампаваць не атрымалася. + + + + Install log posted to + +%1 + +Link copied to clipboard - - Would you like to paste the install log to the web? - + + Calamares Initialization Failed + Не атрымалася ініцыялізаваць Calamares - Install Log Paste URL - - - - - The upload was unsuccessful. No web-paste was done. - - - - - Calamares Initialization Failed - - - - %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. - + Не атрымалася ўсталяваць %1. У Calamares не атрымалася загрузіць усе падрыхтаваныя модулі. Гэтая праблема ўзнікла праз асаблівасці выкарыстання Calamares вашым дыстрыбутывам. - + <br/>The following modules could not be loaded: - + <br/>Не атрымалася загрузіць наступныя модулі: + + + + Continue with setup? + Працягнуць усталёўку? + + + + Continue with installation? + Працягнуць усталёўку? + + + + 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> + Праграма ўсталёўкі %1 гатовая ўнесці змены на ваш дыск, каб усталяваць %2.<br/><strong>Скасаваць змены будзе немагчыма.</strong> + + + + 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> + Праграма ўсталёўкі %1 гатовая ўнесці змены на ваш дыск, каб усталяваць %2.<br/><strong>Адрабіць змены будзе немагчыма.</strong> + + + + &Set up now + &Усталяваць + + + + &Install now + &Усталяваць - Continue with installation? - + Go &back + &Назад - - 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> - - - - - &Set up now - - - - + &Set up - + &Усталяваць - + &Install - + &Усталяваць + + + + Setup is complete. Close the setup program. + Усталёўка завершаная. Закрыйце праграму ўсталёўкі. + + + + The installation is complete. Close the installer. + Усталёўка завершаная. Закрыйце праграму. + + + + Cancel setup without changing the system. + Скасаваць усталёўку без змены сістэмы. + + + + Cancel installation without changing the system. + Скасаваць усталёўку без змены сістэмы. - Setup is complete. Close the setup program. - + &Next + &Далей - + + &Back + &Назад + + + + &Done + &Завершана + + + + &Cancel + &Скасаваць + + + Cancel setup? - + Скасаваць усталёўку? - + Cancel installation? - + Скасаваць усталёўку? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Сапраўды хочаце скасаваць працэс усталёўкі? Праграма спыніць працу, а ўсе змены страцяцца. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - + Сапраўды хочаце скасаваць працэс усталёўкі? Праграма спыніць працу, а ўсе змены страцяцца. CalamaresPython::Helper - + Unknown exception type - + Невядомы тып выключэння - + unparseable Python error - + памылка Python, якую немагчыма разабраць - + unparseable Python traceback - + python traceback, што немагчыма разабраць - + Unfetchable Python error. - - - - - CalamaresUtils - - - Install log posted to: -%1 - + Невядомая памылка Python. CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + Праграма ўсталёўкі %1 - + %1 Installer + Праграма ўсталёўкі %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. - - Show debug information + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... - + Збор інфармацыі пра сістэму... ChoicePage - + Form Форма - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - + Абраць &прыладу захоўвання: - - - - + + + + Current: - + Бягучы: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Пасля: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Уласнаручная разметка</strong><br/>Вы можаце самастойна ствараць раздзелы або змяняць іх памеры. + + + Reuse %1 as home partition for %2. - + Выкарыстаць %1 як хатні раздзел для %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + <strong>Абярыце раздзел для памяншэння і цягніце паўзунок, каб змяніць памер</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + %1 будзе паменшаны да %2MiB і новы раздзел %3MiB будзе створаны для %4. - + + Boot loader location: + Размяшчэнне загрузчыка: + + + <strong>Select a partition to install on</strong> - + <strong>Абярыце раздзел для ўсталёўкі </strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + Не выяўлена сістэмнага раздзела EFI. Калі ласка, вярніцеся назад і зрабіце разметку %1. - + The EFI system partition at %1 will be used for starting %2. - + Сістэмны раздзел EFI на %1 будзе выкарыстаны для запуску %2. - + EFI system partition: - + Сістэмны раздзел EFI: - + 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. - + Здаецца, на гэтай прыладзе няма аперацыйнай сістэмы. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - + <strong>Сцерці дыск</strong><br/>Гэта <font color="red">выдаліць</font> усе даныя на абранай прыладзе. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - + <strong>Усталяваць побач</strong><br/>Праграма ўсталёўкі паменшыць раздзел, каб вызваліць месца для %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + <strong>Замяніць раздзел </strong><br/>Заменіць раздзел на %1. - + + 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. + На гэтай прыладзе ёсць %1. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. + + + 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. - + На гэтай прыладзе ўжо ёсць аперацыйная сістэма. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. - + 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. - + На гэтай прыладзе ўжо ёсць некалькі аперацыйных сістэм. Што будзеце рабіць?<br/>Вы зможаце змяніць альбо пацвердзіць свой выбар да таго як на прыладзе ўжывуцца змены. + + + + 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/> + На гэтай прыладзе ўжо ўсталяваная аперацыйная сістэма, але табліца раздзелаў <strong>%1</strong> не такая, як патрэбна <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Адзін з раздзелаў гэтай назапашвальнай прылады<strong>прымантаваны</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Гэтая назапашвальная прылада ёсць часткай<strong>неактыўнага RAID</strong>. + + + + No Swap + Без раздзела падпампоўкі + + + + Reuse Swap + Выкарыстаць існы раздзел падпампоўкі + + + + Swap (no Hibernate) + Раздзел падпампоўкі (без усыплення) + + + + Swap (with Hibernate) + Раздзел падпампоўкі (з усыпленнем) + + + + Swap to file + Раздзел падпампоўкі ў файле ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Ачысціць пункты мантавання для выканання разметкі на %1 - + Clearing mounts for partitioning operations on %1. - + Ачыстка пунктаў мантавання для выканання разметкі на %1. - + Cleared all mounts for %1 - + Усе пункты мантавання ачышчаныя для %1 ClearTempMountsJob - + Clear all temporary mounts. - + Ачысціць усе часовыя пункты мантавання. - + Clearing all temporary mounts. - + Ачышчаюцца ўсе часовыя пункты мантавання. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. - + Усе часовыя пункты мантавання ачышчаныя. CommandList - - + + Could not run command. - + Не атрымалася запусціць загад. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + Загад выконваецца ў асяроддзі праграмы для ўсталёўкі. Яму неабходна ведаць шлях да каранёвага раздзела, але rootMountPoint не вызначаны. - + The command needs to know the user's name, but no username is defined. - + Загаду неабходна ведаць імя карыстальніка, але яно не вызначана. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Вызначыць мадэль клавіятуры %1.<br/> - + Set keyboard layout to %1/%2. - + Вызначыць раскладку клавіятуры %1/%2. - + + Set timezone to %1/%2. + Вызначыць часавы пояс %1/%2. + + + The system language will be set to %1. - + Сістэмнай мовай будзе зроблена %1. - + The numbers and dates locale will be set to %1. - - - - - Set timezone to %1/%2.<br/> - - - - - Network Installation. (Disabled: Incorrect configuration) - - - - - Network Installation. (Disabled: Received invalid groups data) - - - - - Network Installation. (Disabled: internal error) - + Рэгіянальным фарматам лічбаў і датаў будзе %1. - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Network Installation. (Disabled: Incorrect configuration) + Сеткавая ўсталёўка. (Адключана: хібная канфігурацыя) + + + + Network Installation. (Disabled: Received invalid groups data) + Сеткавая ўсталёўка. (Адключана: атрыманы хібныя звесткі пра групы) + + + + Network Installation. (Disabled: Internal error) + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Выбар пакункаў + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Сеткавая ўсталёўка. (Адключана: немагчыма атрымаць спіс пакункаў, праверце ваша сеткавае злучэнне) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Гэты камп’ютар не адпавядае мінімальным патрэбам для ўсталёўкі %1.<br/>Немагчыма працягнуць. <a href="#details">Падрабязней...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Гэты камп’ютар не адпавядае мінімальным патрэбам для ўсталёўкі %1.<br/>Немагчыма працягнуць. <a href="#details">Падрабязней...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.<br/>Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.<br/>Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі. + + + + This program will ask you some questions and set up %2 on your computer. + Гэтая праграма задасць вам некалькі пытанняў і дапаможа ўсталяваць %2 на ваш камп’ютар. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Вітаем у праграме ўсталёўкі Calamares для %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Вітаем у праграме ўсталёўкі %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Вітаем у праграме ўсталёўкі Calamares для %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Вітаем у праграме ўсталёўкі %1</h1> + + + + Your username is too long. + Імя карыстальніка занадта доўгае. + + + + '%1' is not allowed as username. + '%1' немагчыма выкарыстаць як імя карыстальніка. + + + + Your username must start with a lowercase letter or underscore. + Імя карыстальніка павінна пачынацца з малой літары альбо сімвала падкрэслівання. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Дазваляюцца толькі літары, лічбы, знакі падкрэслівання, працяжнікі. + + + + Your hostname is too short. + Назва вашага камп’ютара занадта кароткая. + + + + Your hostname is too long. + Назва вашага камп’ютара занадта доўгая. + + + + '%1' is not allowed as hostname. + '%1' немагчыма выкарыстаць як назву хоста. + + + + Only letters, numbers, underscore and hyphen are allowed. + Толькі літары, лічбы, знакі падкрэслівання, працяжнікі. + + + + Your passwords do not match! + Вашыя паролі не супадаюць! + + + + OK! + + + + + Setup Failed + Усталёўка схібіла + + + + Installation Failed + Не атрымалася ўсталяваць + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Усталёўка завершаная + + + + Installation Complete + Усталёўка завершаная + + + + The setup of %1 is complete. + Усталёўка %1 завершаная. + + + + The installation of %1 is complete. + Усталёўка %1 завершаная. + + + + Package Selection + Выбар пакункаў + + + + Please pick a product from the list. The selected product will be installed. + Калі ласка, абярыце прадукт са спіса. Абраны прадукт будзе ўсталяваны. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Агулам + + + + This is an overview of what will happen once you start the setup procedure. + Гэта агляд дзеянняў, якія здейсняцца падчас запуску працэдуры ўсталёўкі. + + + + This is an overview of what will happen once you start the install procedure. + Гэта агляд дзеянняў, якія здейсняцца падчас запуску працэдуры ўсталёўкі. + ContextualProcessJob - + Contextual Processes Job - + Кантэкстуальныя працэсы CreatePartitionDialog - + Create a Partition - + Стварыць раздзел - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: + Па&мер: + + + + MiB + Міб + + + + Partition &Type: + &Тып раздзела: + + + + Primar&y - + + E&xtended + &Пашыраны + + + + Fi&le System: + &Файлавая сістэма: + + + + LVM LV name + Назва LVM LV + + + + &Mount Point: + &Пункт мантавання: + + + + Flags: + Сцягі: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + &Шыфраваць - + Logical - + Лагічны - + Primary - + Асноўны - + GPT - + GPT - + Mountpoint already in use. Please select another one. + Пункт мантавання ўжо выкарыстоўваецца. Калі ласка, абярыце іншы. + + + + Mountpoint must start with a <tt>/</tt>. CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. + Стварыць новы раздзел %2MБ на %4 (%3) з файлавай сістэмай %1. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + Стварыць новы раздзел <strong>%2MiB</strong> на <strong>%4</strong> (%3) з файлавай сістэмай <strong>%1</strong>. - + + Creating new %1 partition on %2. - + Стварэнне новага раздзела %1 на %2. - + The installer failed to create partition on disk '%1'. - + У праграмы ўсталёўкі не атрымалася стварыць новы раздзел на дыску '%1'. CreatePartitionTableDialog - + Create Partition Table - + Стварыць табліцу раздзелаў - + Creating a new partition table will delete all existing data on the disk. - + Падчас стварэння новай табліцы раздзелаў усе даныя на дыску выдаляцца. - + What kind of partition table do you want to create? - + Табліцу раздзелаў якога тыпу вы хочаце стварыць? - + Master Boot Record (MBR) - + Галоўны загрузачны запіс (MBR) - + GUID Partition Table (GPT) - + Табліца раздзелаў GUID (GPT) CreatePartitionTableJob - + Create new %1 partition table on %2. - + Стварыць новую табліцу раздзелаў %1 на %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Стварыць новую табліцу раздзелаў <strong>%1</strong> на <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + Стварэнне новай табліцы раздзелаў %1 на %2. - + The installer failed to create a partition table on %1. - + У праграмы ўсталёўкі не атрымалася стварыць табліцу раздзелаў на дыску %1. CreateUserJob - + Create user %1 - + Стварыць карыстальніка %1 - + Create user <strong>%1</strong>. - + Стварыць карыстальніка <strong>%1</strong>. - - Creating user %1. - + + Preserving home directory + Захаванне хатняга каталога - - Sudoers dir is not writable. - + + + Creating user %1 + Стварэнне карыстальніка %1 - - Cannot create sudoers file for writing. - + + Configuring user %1 + Наладка карыстальніка %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. - + + Setting file permissions + Наладка правоў доступу да файлаў CreateVolumeGroupDialog - + Create Volume Group - + Стварыць групу тамоў CreateVolumeGroupJob - + Create new volume group named %1. - + Стварыць новую групу тамоў на дыску %1. - + Create new volume group named <strong>%1</strong>. - + Стварыць новую групу тамоў на дыску <strong>%1</strong>. - + Creating new volume group named %1. - + Стварэнне новай групы тамоў на дыску %1. - + The installer failed to create a volume group named '%1'. - + У праграмы ўсталёўкі не атрымалася стварыць групу тамоў на дыску '%1'. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Выключыць групу тамоў на дыску %1. - + Deactivate volume group named <strong>%1</strong>. - + Выключыць групу тамоў на дыску <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. - + У праграмы ўсталёўкі не атрымалася выключыць групу тамоў на дыску %1. DeletePartitionJob - + Delete partition %1. - + Выдаліць раздзел %1. - + Delete partition <strong>%1</strong>. - + Выдаліць раздзел <strong>%1</strong>. - + Deleting partition %1. - + Выдаленне раздзела %1. - + The installer failed to delete partition %1. - + У праграмы ўсталёўкі не атрымалася выдаліць раздзел %1. DeviceInfoWidget - - 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. - + + This device has a <strong>%1</strong> partition table. + На гэтай прыладзе ёсць <strong>%1</strong> табліца раздзелаў. + + + + 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. + Гэта <strong>петлявая</strong> прылада.<br><br>Гэтая псеўда-прылада без табліцы раздзелаў дазваляе выкарыстоўваць звычайны файл у якасці блочнай прылады. Пры такім спосабе звычайна даступная толькі адна файлавая сістэма. - This device has a <strong>%1</strong> partition table. - - - - - 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. - - - - 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. - + Праграма ўсталёўкі <strong>не выявіла табліцу раздзелаў </strong> на абранай прыладзе.<br><br>На гэтай прыладзе альбо няма табліцы раздзелаў, альбо яна пашкоджаная, альбо невядомага тыпу.<br>Праграма ўсталёўкі можа аўтаматычна стварыць новую, альбо вы можаце стварыць яе ўласнаручна. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <br><br>Гэта рэкамендаваны тып табліцы раздзелаў для сучасных сістэм, якія выкарыстоўваюць <strong>EFI</strong> у якасці асяроддзя загрузкі. - + <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. - + <br><br>Гэты тып табліцы раздзелаў рэкамендуецца толькі для старых сістэм, якія выкарыстоўваюць <strong>BIOS</strong>. У большасці выпадкаў лепш выкарыстоўваць GPT.<br><br><strong>Увага:</strong> стандарт табліцы раздзелаў MBR з’яўляецца састарэлым.<br>Яго максімумам з’яўляюцца 4 <em>першасныя</em> раздзелы, і толькі адзін з іх можа быць <em>пашыраным</em> і змяшчаць шмат <em>лагічных</em> раздзелаў. + + + + 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. + Тып <strong>табліцы раздзелаў</strong> на абранай прыладзе.<br><br>Змяніць тып раздзела магчыма толькі выдаліўшы табліцу раздзелаў і стварыўшы новую. Пры гэтым усе даныя страцяцца.<br>Праграма ўсталёўкі не кране бягучую табліцу раздзелаў, калі вы не вырашыце інакш.<br>Прадвызначана сучасныя сістэмы выкарыстоўваюць GPT. DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) - + %1 - (%2) DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Запісаць канфігурацыю LUKS для Dracut у %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Прамінуць запіс канфігурацыі LUKS для Dracut: "/" раздзел не зашыфраваны - + Failed to open %1 - + Не атрымалася адкрыць %1 DummyCppJob - + Dummy C++ Job - + Задача Dummy C++ EditExistingPartitionDialog - + Edit Existing Partition + Рэдагаваць існы раздзел + + + + Con&tent: - - Content: - - - - + &Keep - + &Пакінуць - + Format - + Фарматаваць - + Warning: Formatting the partition will erase all existing data. - + Увага: падчас фарматавання раздзела страцяцца ўсе даныя. - + &Mount Point: - - - - - Si&ze: - + &Пункт мантавання: + Si&ze: + Па&мер: + + + MiB - + Міб - + Fi&le System: - + &Файлавая сістэма: - + Flags: + Сцягі: + + + + Label for the filesystem - - Mountpoint already in use. Please select another one. + + FS Label: EncryptWidget - + Form Форма - + En&crypt system + Сістэма &шыфравання + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. - + Passphrase - + Пароль - + Confirm passphrase + Пацвердзіце парольную фразу + + + + + Please enter the same passphrase in both boxes. + Калі ласка, увядзіце адную і тую парольную фразу ў абодва радкі. + + + + ErrorDialog + + + Details: - - Please enter the same passphrase in both boxes. - + + Would you like to paste the install log to the web? + Сапраўды хочаце ўставіць журнал усталёўкі па сеціўным адрасе? FillGlobalStorageJob - + Set partition information - - - - - Install %1 on <strong>new</strong> %2 system partition. - - - - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - - - - - Install %2 on %3 system partition <strong>%1</strong>. - - - - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - + Вызначыць звесткі пра раздзел - Install boot loader on <strong>%1</strong>. + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> - - Setting up mount points. + + Install %1 on <strong>new</strong> %2 system partition. + Усталяваць %1 на <strong>новы</strong> %2 сістэмны раздзел. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + Усталяваць %2 на %3 сістэмны раздзел <strong>%1</strong>. + + + + Install boot loader on <strong>%1</strong>. + Усталяваць загрузчык на <strong>%1</strong>. + + + + Setting up mount points. + Наладка пунктаў мантавання. + FinishedPage - + Form Форма - + &Restart now - + &Перазапусціць - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <h1>Гатова.</h1><br/>Сістэма %1 усталяваная на ваш камп’ютар.<br/> Вы ўжо можаце пачаць выкарыстоўваць вашу новую сістэму. - + <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> - + <html><head/><body><p>Калі адзначана, то сістэма перазапусціцца адразу пасля націскання кнопкі <span style="font-style:italic;">Завершана</span> альбо закрыцця праграмы ўсталёўкі.</p></body></html> - + <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. - + <h1>Завершана.</h1><br/>Сістэма %1 усталяваная на ваш камп’ютар.<br/>Вы можаце перазапусціць камп’ютар і ўвайсці ў яе, альбо працягнуць працу ў Live-асяроддзі %2. - + <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> - + <html><head/><body><p>Калі адзначана, то сістэма перазапусціцца адразу пасля націскання кнопкі <span style="font-style:italic;">Завершана</span> альбо закрыцця праграмы ўсталёўкі.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Адбыўся збой</h1><br/>Сістэму %1 не атрымалася ўсталяваць на ваш камп’ютар.<br/>Паведамленне памылкі: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - + <h1>Адбыўся збой</h1><br/>Сістэму %1 не атрымалася ўсталяваць на ваш камп’ютар.<br/>Паведамленне памылкі: %2. + + + + FinishedQmlViewStep + + + Finish + Завяршыць FinishedViewStep - + Finish - - - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + Завяршыць FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Фарматаваць раздзел %1 (файлавая сістэма: %2, памер: %3 Mб) на %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Фарматаваць раздзел <strong>%3MiB</strong> <strong>%1</strong> у файлавую сістэму <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + Фарматаванне раздзела %1 ў файлавую сістэму %2. - + The installer failed to format partition %1 on disk '%2'. - + У праграмы ўсталёўкі не атрымалася адфарматаваць раздзел %1 на дыску '%2'. GeneralRequirements - + has at least %1 GiB available drive space - - - - - There is not enough drive space. At least %1 GiB is required. - - - - - has at least %1 GiB working memory - - - - - The system does not have enough working memory. At least %1 GiB is required. - - - - - is plugged in to a power source - - - - - The system is not plugged in to a power source. - - - - - is connected to the Internet - + даступна прынамсі %1 Гб вольнага месца - The system is not connected to the Internet. - + There is not enough drive space. At least %1 GiB is required. + Недастаткова месца. Неабходна прынамсі %1 Гб. - - is running the installer as an administrator (root) - - - - - The setup program is not running with administrator rights. - + + has at least %1 GiB working memory + даступна прынамсі %1 Гб аператыўнай памяці + The system does not have enough working memory. At least %1 GiB is required. + Недастаткова аператыўнай памяці. Патрэбна прынамсі %1 Гб. + + + + is plugged in to a power source + падключана да крыніцы сілкавання + + + + The system is not plugged in to a power source. + Не падключана да крыніцы сілкавання. + + + + is connected to the Internet + ёсць злучэнне з інтэрнэтам + + + + The system is not connected to the Internet. + Злучэнне з інтэрнэтам адсутнічае. + + + + is running the installer as an administrator (root) + праграма ўсталёўкі запушчаная ад імя адміністратара (root) + + + + The setup program is not running with administrator rights. + Праграма ўсталёўкі запушчаная без правоў адміністратара. + + + The installer is not running with administrator rights. - + Праграма ўсталёўкі запушчаная без правоў адміністратара. - + has a screen large enough to show the whole installer - + ёсць экран, памераў якога дастаткова, каб адлюстраваць акно праграмы ўсталёўкі - + The screen is too small to display the setup program. - + Экран занадта малы для таго, каб адлюстраваць акно праграмы ўсталёўкі. - + The screen is too small to display the installer. - + Экран занадта малы для таго, каб адлюстраваць акно праграмы ўсталёўкі. HostInfoJob - + Collecting information about your machine. - + Збор інфармацыі пра ваш камп’ютар. IDJob - - + + + - OEM Batch Identifier - + Масавы ідэнтыфікатар OEM - + Could not create directories <code>%1</code>. - + Не атрымалася стварыць каталогі <code>%1</code>. + + + + Could not open file <code>%1</code>. + Не атрымалася адкрыць файл <code>%1</code>. - Could not open file <code>%1</code>. - - - - Could not write to file <code>%1</code>. - + Не атрымалася запісаць у файл <code>%1</code>. InitcpioJob - + Creating initramfs with mkinitcpio. - + Стварэнне initramfs праз mkinitcpio. InitramfsJob - + Creating initramfs. - + Стварэнне initramfs. InteractiveTerminalPage - + Konsole not installed - + Konsole не ўсталяваная - + Please install KDE Konsole and try again! - + Калі ласка, ўсталюйце KDE Konsole і паўтарыце зноў! - + Executing script: &nbsp;<code>%1</code> - + Выкананне скрыпта: &nbsp;<code>%1</code> InteractiveTerminalViewStep - + Script - - - - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - + Скрыпт KeyboardQmlViewStep - + Keyboard - + Клавіятура KeyboardViewStep - + Keyboard - + Клавіятура LCLocaleDialog - + System locale setting - + Рэгіянальныя налады сістэмы - + 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>. - + Сістэмныя рэгіянальныя налады вызначаюць мову і кадаванне для пэўных элементаў інтэрфейсу загаднага радка.<br/>Бягучыя налады <strong>%1</strong>. - + &Cancel + &Скасаваць + + + + &OK + &Добра + + + + LOSHJob + + + Configuring encrypted swap. + Наладка зашыфраванага swap. + + + + No target system available. - - &OK + + No rootMountPoint is set. + + + + + No configFilePath is set. LicensePage - + Form Форма - + <h1>License Agreement</h1> - + <h1>Ліцэнзійнае пагадненне</h1> - + I accept the terms and conditions above. - + Я пагаджаюся з пададзенымі вышэй умовамі. - + Please review the End User License Agreements (EULAs). - + Калі ласка, паглядзіце ліцэнзійную дамову з канчатковым карыстальнікам (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. - + Падчас гэтай працэдуры ўсталюецца прапрыетарнае праграмнае забеспячэнне, на якое распаўсюджваюцца ўмовы ліцэнзавання. - + If you do not agree with the terms, the setup procedure cannot continue. - + Калі вы не згодныя з умовамі, то працягнуць усталёўку не атрымаецца. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Падчас гэтай працэдуры ўсталюецца прапрыетарнае праграмнае забеспячэнне, на якое распаўсюджваюцца ўмовы ліцэнзавання. Гэтае апраграмаванне патрабуецца для забеспячэння дадатковых функцый і паляпшэння ўзаемадзеяння з карыстальнікам. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Калі вы не згодныя з умовамі, то прапрыетарнае апраграмаванне не будзе ўсталявана. Замест яго будуць выкарыстоўвацца свабодныя альтэрнатывы. LicenseViewStep - + License - + Ліцэнзія LicenseWidget - + URL: %1 - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 драйвер</strong><br/>ад %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>відэадрайвер %1 </strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>убудова браўзера %1</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>кодэк %1 </strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>пакунак %1 </strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">ад %2</font> - + File: %1 - + Файл: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text - + Схаваць тэкст ліцэнзіі + + + + Show the license text + Паказаць тэкст ліцэнзіі + + + + Open license agreement in browser. + Адкрыць ліцэнзійнае пагадненне ў браўзеры. LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Рэгіён: - + Zone: - + Зона: - - + + &Change... - - - - - Set timezone to %1/%2.<br/> - + &Змяніць... LocaleQmlViewStep - + Location + Размяшчэнне + + + + LocaleTests + + + Quit LocaleViewStep - + Location - + Месцазнаходжанне LuksBootKeyFileJob - + Configuring LUKS key file. - + Наладка файла ключа LUKS. - - + + No partitions are defined. - + Раздзелаў не вызначана. - - - + + + Encrypted rootfs setup error - + Не атрымалася зашыфраваць rootfs - + Root partition %1 is LUKS but no passphrase has been set. - + Каранёвы раздзел %1 зашыфраваны як LUKS, але парольная фраза не была вызначаная. - + Could not create LUKS key file for root partition %1. - + Не атрымалася стварыць файл ключа LUKS для каранёвага раздзела %1. - + Could not configure LUKS key file on partition %1. - + Не атрымалася наладзіць файл ключа LUKS на каранёвым раздзеле %1. MachineIdJob - + Generate machine-id. Стварыць machine-id. - + Configuration Error Памылка канфігурацыі - + No root mount point is set for MachineId. - + Для MachineId не вызначана каранёвага пункта мантавання. + + + + Map + + + Timezone: %1 + Часавы пояс: %1 + + + + 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. + Калі ласка, абярыце неабходнае месца на мапе, каб праграма прапанавала мову + і налады часавога пояса. Вы можаце дакладна наладзіць прапанаваныя параметры ніжэй. Месца на мапе можна абраць перацягваючы + яе пры дапамозе мышы. Для павелічэння і памяншэння выкарыстоўвайце кнопкі +/- і кола мышы. NetInstallViewStep - - + Package selection - + Выбар пакункаў + + + + Office software + Офіс + + + + Office package + Офісны пакунак + + + + Browser software + Браўзер + + + + Browser package + Пакунак браўзера + + + + Web browser + Вэб-браўзер + + + + Kernel + Ядро + + + + Services + Службы + + + + Login + Лагін + + + + Desktop + Працоўнае асяроддзе + + + + Applications + Праграмы + + + + Communication + Стасункі + + + + Development + Распрацоўка + + + + Office + Офіс + + + + Multimedia + Медыя - Office software - + Internet + Інтэрнэт - Office package - + Theming + Афармленне - Browser software - + Gaming + Гульні - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + Утыліты NotesQmlViewStep - + Notes - + Нататкі OEMPage - + Ba&tch: - + &Масава: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Увядзіце сюды масавы ідэнтыфікатар. Ён захаваецца ў мэтавай сістэме.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - + <html><head/><body><h1>Наладка OEM</h1><p>Calamares будзе выкарыстоўваць налады OEM падчас наладкі мэтавай сістэмы.</p></body></html> OEMViewStep - + OEM Configuration + Канфігурацыя OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + Вызначыць масавы ідэнтыфікатар OEM для <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. - - Set the OEM Batch Identifier to <code>%1</code>. - + + + + Timezone: %1 + Часавы пояс: %1 + + + + Select your preferred Zone within your Region. + Абярыце часавы пояс для вашага рэгіёна. + + + + Zones + Часавыя паясы + + + + You can fine-tune Language and Locale settings below. + Ніжэй вы можаце наладзіць мову і мясцовасць. PWQ - + Password is too short - + Пароль занадта кароткі - + Password is too long - - - - - Password is too weak - - - - - Memory allocation error when setting '%1' - - - - - Memory allocation error - - - - - The password is the same as the old one - - - - - The password is a palindrome - - - - - The password differs with case changes only - - - - - The password is too similar to the old one - - - - - The password contains the user name in some form - - - - - The password contains words from the real name of the user in some form - - - - - The password contains forbidden words in some form - - - - - The password contains less than %1 digits - - - - - The password contains too few digits - + Пароль занадта доўгі - The password contains less than %1 uppercase letters - + Password is too weak + Пароль занадта ненадзейны - + + Memory allocation error when setting '%1' + Не атрымалася адвесці памяць падчас усталёўкі '%1' + + + + Memory allocation error + Не атрымалася адвесці памяць + + + + The password is the same as the old one + Пароль не адрозніваецца ад старога + + + + The password is a palindrome + Пароль з’яўляецца паліндромам + + + + The password differs with case changes only + Пароль адрозніваецца толькі рэгістрам знакаў + + + + The password is too similar to the old one + Пароль вельмі падобны да старога + + + + The password contains the user name in some form + Пароль змяшчае імя карыстальніка + + + + The password contains words from the real name of the user in some form + Пароль змяшчае часткі сапраўднага імя карыстальніка + + + + The password contains forbidden words in some form + Пароль змяшчае забароненыя сімвалы + + + + The password contains too few digits + У паролі занадта мала лічбаў + + + The password contains too few uppercase letters - + У паролі занадта мала вялікіх літар + + + + The password contains fewer than %n lowercase letters + + У паролі менш %n малой літары + У паролі менш %n малых літар + У паролі менш %n малых літар + У паролі менш %n малых літар + - - The password contains less than %1 lowercase letters - - - - + The password contains too few lowercase letters - + У паролі занадта мала малых літар - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - + У паролі занадта мала адмысловых знакаў - - The password is shorter than %1 characters - - - - + The password is too short - + Пароль занадта кароткі - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - + Пароль змяшчае недастаткова класаў сімвалаў - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - - - - The password contains more than %1 characters of the same class consecutively - - - - - The password contains too many characters of the same class consecutively - - - - - The password contains monotonic sequence longer than %1 characters - - - - - The password contains too long of a monotonic character sequence - - - - - No password supplied - - - - - Cannot obtain random numbers from the RNG device - - - - - Password generation failed - required entropy too low for settings - - - - - The password fails the dictionary check - %1 - - - - - The password fails the dictionary check - - - - - Unknown setting - %1 - - - - - Unknown setting - + Пароль змяшчае занадта шмат аднолькавых паслядоўных знакаў - Bad integer value of setting - %1 - + The password contains too many characters of the same class consecutively + Пароль змяшчае занадта шмат паслядоўных знакаў аднаго класа + + + + The password contains fewer than %n digits + + Пароль змяшчае менш %n лічбы + Пароль змяшчае менш %n лічбаў + Пароль змяшчае менш %n лічбаў + Пароль змяшчае менш %n лічбаў + + + + + The password contains fewer than %n uppercase letters + + У паролі менш %n вялікай літары + У паролі менш %n вялікіх літар + У паролі менш %n вялікіх літар + У паролі менш %n вялікіх літар + + + + + The password contains fewer than %n non-alphanumeric characters + + У паролі менш %n адмысловага знака + У паролі менш %n адмысловых знакаў + У паролі менш %n адмысловых знакаў + У паролі менш %n адмысловых знакаў + + + + + The password is shorter than %n characters + + Пароль карацейшы за %n знак + Пароль карацейшы за %n знакі + Пароль карацейшы за %n знакаў + Пароль карацейшы за %n знакаў + + + The password is a rotated version of the previous one + Пароль ёсць адваротнай версіяй мінулага + + + + The password contains fewer than %n character classes + + Пароль змяшчае менш %n класа сімвалаў + Пароль змяшчае менш %n класаў сімвалаў + Пароль змяшчае менш %n класаў сімвалаў + Пароль змяшчае менш %n класаў сімвалаў + + + + + The password contains more than %n same characters consecutively + + Пароль змяшчае больш за %n аднолькавы паслядоўны знак + Пароль змяшчае больш за %n аднолькавыя паслядоўныя знакі + Пароль змяшчае больш за %n аднолькавых паслядоўных знакаў + Пароль змяшчае больш за %n аднолькавых паслядоўных знакаў + + + + + The password contains more than %n characters of the same class consecutively + + Пароль змяшчае больш за %n паслядоўны знак таго ж класа + Пароль змяшчае больш за %n паслядоўныя знакі таго ж класа + Пароль змяшчае больш за %n паслядоўных знакаў таго ж класа + Пароль змяшчае больш за %n паслядоўных знакаў таго ж класа + + + - Bad integer value - + The password contains monotonic sequence longer than %n characters + + Пароль змяшчае аднастайную паслядоўнасць, даўжэйшую за %n знак + Пароль змяшчае аднастайную паслядоўнасць, даўжэйшую за %n знакі + Пароль змяшчае аднастайную паслядоўнасць, даўжэйшую за %n знакаў + Пароль змяшчае аднастайную паслядоўнасць, даўжэйшую за %n знакаў + - - Setting %1 is not of integer type - + + The password contains too long of a monotonic character sequence + Пароль змяшчае занадта доўгую аднастайную паслядоўнасць знакаў - Setting is not of integer type - + No password supplied + Пароль не прызначаны + + + + Cannot obtain random numbers from the RNG device + Не ўдалося атрымаць выпадковыя лікі з прылады RNG - Setting %1 is not of string type - + Password generation failed - required entropy too low for settings + Не атрымалася згенераваць пароль - занадта нізкая энтрапія для налад + The password fails the dictionary check - %1 + Пароль не прайшоў праверку слоўнікам - %1 + + + + The password fails the dictionary check + Пароль не прайшоў праверку слоўнікам + + + + Unknown setting - %1 + Невядомы параметр - %1 + + + + Unknown setting + Невядомы параметр + + + + Bad integer value of setting - %1 + Хібнае цэлае значэнне параметра - %1 + + + + Bad integer value + Хібнае цэлае значэнне + + + + Setting %1 is not of integer type + Параметр %1 не з’яўляецца цэлым лікам + + + + Setting is not of integer type + Параметр не з’яўляецца цэлым лікам + + + + Setting %1 is not of string type + Параметр %1 не з’яўляецца радком + + + Setting is not of string type - + Параметр не з’яўляецца радком - + Opening the configuration file failed - + Не атрымалася адкрыць файл канфігурацыі - + The configuration file is malformed - + Файл канфігурацыі пашкоджаны - + Fatal failure - + Фатальны збой - + Unknown error - + Невядомая памылка - + Password is empty - + Пароль пусты PackageChooserPage - + Form Форма - + Product Name - + Назва - + TextLabel - + Тэкст - + Long Product Description - + Занадта доўгае апісанне - + Package Selection - + Выбар пакункаў - + Please pick a product from the list. The selected product will be installed. - + Калі ласка, абярыце прадукт са спіса. Абраны прадукт будзе ўсталяваны. + + + + PackageChooserQmlViewStep + + + Packages + Пакункі PackageChooserViewStep - + Packages - + Пакункі PackageModel - + Name - + Назва - + Description - + Апісанне Page_Keyboard - + Form Форма - + Keyboard Model: - + Мадэль клавіятуры: - + Type here to test your keyboard - + Радок уводу для праверкі вашай клавіятуры Page_UserSetup - + Form Форма - + What is your name? - + Як ваша імя? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + Ваша поўнае імя - + + What name do you want to use to log in? + Якое імя вы хочаце выкарыстоўваць для ўваходу? + + + login - + лагін - + + What is the name of this computer? + Якая назва гэтага камп’ютара? + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + <small>Назва будзе выкарыстоўвацца для пазначэння камп’ютара ў сетцы.</small> - + Computer Name - + Назва камп’ютара - - + + Choose a password to keep your account safe. + Абярыце пароль для абароны вашага акаўнта. + + + + + <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> + <small>Увядзіце двойчы аднолькавы пароль. Гэта неабходна для таго, каб пазбегнуць памылак. Надзейны пароль павінен складацца з літар, лічбаў, знакаў пунктуацыі. Ён павінен змяшчаць прынамсі 8 знакаў, яго перыядычна трэба змяняць.</small> + + + + Password - + Пароль - - + + Repeat Password - + Паўтарыце пароль - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Калі адзначана, будзе выконвацца праверка надзейнасці пароля, таму вы не зможаце выкарыстаць слабы пароль. - + Require strong passwords. - + Патрабаваць надзейныя паролі. - + Log in automatically without asking for the password. - + Аўтаматычна ўваходзіць без уводу пароля. - + Use the same password for the administrator account. - + Выкарыстоўваць той жа пароль для акаўнта адміністратара. - + Choose a password for the administrator account. - + Абярыце пароль адміністратара. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>Увядзіце пароль двойчы, каб пазбегнуць памылак уводу.</small> PartitionLabelsView - + Root - + Root - + Home - + Home + + + + Boot + Boot - Boot - - - - EFI system - + Сістэма EFI - + Swap - + Swap - + New partition for %1 - + Новы раздзел для %1 - + New partition - + Новы раздзел - + %1 %2 size[number] filesystem[name] - + %1 %2 PartitionModel - - + + Free Space - + Вольная прастора - - + + New partition - + Новы раздзел - + Name - + Назва - + File System + Файлавая сістэма + + + + File System Label - + Mount Point - + Пункт мантавання - + Size - + Памер PartitionPage - + Form Форма - + Storage de&vice: - + &Прылада: - + &Revert All Changes - + &Адхіліць усе змены - + New Partition &Table - + Новая &табліца раздзелаў - + Cre&ate - + &Стварыць - + &Edit - + &Рэдагаваць - + &Delete - + &Выдаліць - + New Volume Group - + Новая група тамоў - + Resize Volume Group - + Змяніць памер групы тамоў - + Deactivate Volume Group - + Выключыць групу тамоў - + Remove Volume Group - + Выдаліць групу тамоў - + I&nstall boot loader on: - + &Усталяваць загрузчык на: - + Are you sure you want to create a new partition table on %1? - + Сапраўды хочаце стварыць новую табліцу раздзелаў на %1? - + Can not create new partition - + Не атрымалася стварыць новы раздзел - + 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. - + У табліцы раздзелаў на %1 ужо %2 першасных раздзелаў, больш дадаць немагчыма. Выдаліце адзін з першасных і дадайце пашыраны раздзел. PartitionViewStep - + Gathering system information... - + Збор інфармацыі пра сістэму... - + Partitions + Раздзелы + + + + Unsafe partition actions are enabled. - - Install %1 <strong>alongside</strong> another operating system. + + Partitioning is configured to <b>always</b> fail. - - <strong>Erase</strong> disk and install %1. + + No partitions will be changed. - - <strong>Replace</strong> a partition with %1. - - - - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + Бягучы: - + After: - + Пасля: - + No EFI system partition configured + Няма наладжанага сістэмнага раздзела EFI + + + + EFI system partition configured incorrectly - - 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>esp</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. + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - EFI system partition flag not set + + The filesystem must be mounted on <strong>%1</strong>. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must have type FAT32. - + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + Параметр для выкарыстання GPT у BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted - + Загрузачны раздзел не зашыфраваны - + 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. - + Уключана шыфраванне каранёвага раздзела, але выкарыстаны асобны загрузачны раздзел без шыфравання.<br/><br/>Пры такой канфігурацыі могуць узнікнуць праблемы з бяспекай, бо важныя сістэмныя даныя будуць захоўвацца на раздзеле без шыфравання.<br/>Вы можаце працягнуць, але файлавая сістэма разблакуецца падчас запуску сістэмы.<br/>Каб уключыць шыфраванне загрузачнага раздзела, вярніцеся назад і стварыце яго нанова, адзначыўшы <strong>Шыфраваць</strong> у акне стварэння раздзела. - + has at least one disk device available. - + ёсць прынамсі адна даступная дыскавая прылада. - + There are no partitions to install on. - + Няма раздзелаў для ўсталёўкі. PlasmaLnfJob - + Plasma Look-and-Feel Job - + Plasma Look-and-Feel - - + + Could not select KDE Plasma Look-and-Feel package - + Не атрымалася абраць пакунак KDE Plasma Look-and-Feel PlasmaLnfPage - + Form Форма - + 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. - + Калі ласка, абярыце "look-and-feel" для працоўнага асяроддзя KDE Plasma. Вы можаце мінуць гэты крок і наладзіць выгляд і паводзіны пасля завяршэння ўсталёўкі сістэмы. Калі пстрыкнуць па "look-and-feel", то можна паглядзець як выглядае гэты стыль. - + 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. - + Калі ласка, абярыце "look-and-feel" для працоўнага асяроддзя KDE Plasma. Вы можаце мінуць гэты крок і наладзіць выгляд і паводзіны пасля завяршэння ўсталёўкі сістэмы. Калі пстрыкнуць па "look-and-feel", то можна паглядзець як выглядае гэты стыль. PlasmaLnfViewStep - + Look-and-Feel - + Выгляд PreserveFiles - + Saving files for later ... - + Захаванне файлаў на будучыню... - + No files configured to save for later. - + Няма файлаў канфігурацыі, каб захаваць іх на будучыню. - + Not all of the configured files could be preserved. - + Не ўсе наладжаныя файлы можна захаваць. ProcessResult - + There was no output from the command. - + +Вываду ад загада няма. - + Output: - + +Вывад: + - + External command crashed. - + Вонкавы загад схібіў. - + Command <i>%1</i> crashed. - + Загад <i>%1</i> схібіў. - + External command failed to start. - + Не атрымалася запусціць вонкавы загад. - + Command <i>%1</i> failed to start. - + Не атрымалася запусціць загад <i>%1</i>. - + Internal error when starting command. - + Падчас запуску загада адбылася ўнутраная памылка. - + Bad parameters for process job call. - + Хібныя параметры выкліку працэсу. - + External command failed to finish. - + Не атрымалася завяршыць вонкавы загад. - + Command <i>%1</i> failed to finish in %2 seconds. - + Загад <i>%1</i> не атрымалася завяршыць за %2 секунд. - + External command finished with errors. - + Вонкавы загад завяршыўся з памылкамі. - + Command <i>%1</i> finished with exit code %2. - + Загад <i>%1</i> завяршыўся з кодам %2. QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + невядома - - No description provided. - + + extended + пашыраны - - - - + + unformatted + нефарматавана + + + + swap + swap + + + + + Default + Прадвызначана + + + + + + File not found - + Файл не знойдзены - + Path <pre>%1</pre> must be an absolute path. - + Шлях <pre>%1</pre> мусіць быць абсалютным шляхам. - + + Directory not found + Каталог не знойдзены + + + + Could not create new random file <pre>%1</pre>. - + Не атрымалася стварыць новы выпадковы файл <pre>%1</pre>. + + + + No product + Няма + + + + No description provided. + Апісанне адсутнічае. + + + + (no mount point) + (без пункта мантавання) + + + + Unpartitioned space or unknown partition table + Прастора без раздзелаў, альбо невядомая табліца раздзелаў + + + + Recommended + + + <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> + <p>Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.<br/> + Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі.</p> RemoveUserJob - + Remove live user from target system Выдаліць часовага карыстальніка з мэтавай сістэмы @@ -2817,981 +3181,1394 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Выдаліць групу тамоў на дыску %1. - + Remove Volume Group named <strong>%1</strong>. - + Выдаліць групу тамоў на дыску <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. - + У праграмы ўсталёўкі не атрымалася выдаліць групу тамоў на дыску '%1'. ReplaceWidget - + Form Форма - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + Абярыце куды ўсталяваць %1.<br/><font color="red">Увага: </font>усе файлы на абраным раздзеле выдаляцца. - + The selected item does not appear to be a valid partition. - + Абраны элемент не з’яўляецца прыдатным раздзелам. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 немагчыма ўсталяваць па-за межамі раздзела. Калі ласка, абярыце існы раздзел. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 немагчыма ўсталяваць на пашыраны раздзел. Калі ласка, абярыце існы асноўны альбо лагічны раздзел. - + %1 cannot be installed on this partition. - + %1 немагчыма ўсталяваць на гэты раздзел. - + Data partition (%1) - + Раздзел даных (%1) - + Unknown system partition (%1) - + Невядомы сістэмны раздзел (%1) - + %1 system partition (%2) - + %1 сістэмны раздзел (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <strong>%4</strong><br/><br/>Раздзел %1 занадта малы для %2. Калі ласка, абярыце раздзел памерам прынамсі %3 Гб. - + <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. - + <strong>%2</strong><br/><br/>Не выяўлена сістэмнага раздзела EFI. Калі ласка, вярніцеся назад і ўласнаручна выканайце разметку для ўсталёўкі %1. - - - + + + <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. - + <strong>%3</strong><br/><br/>%1 будзе ўсталяваны на %2.<br/><font color="red">Увага: </font>усе даныя на раздзеле %2 страцяцца. - + The EFI system partition at %1 will be used for starting %2. - + Сістэмны раздзел EFI на %1 будзе выкарыстаны для запуску %2. - + EFI system partition: - + Сістэмны раздзел EFI: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Гэты камп’ютар не адпавядае мінімальным патрэбам для ўсталёўкі %1.<p> + Немагчыма працягнуць. <br/> + + + + <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> + <p>Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.<br/> + Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі.</p> ResizeFSJob - + Resize Filesystem Job - + Змяніць памер файлавай сістэмы - + Invalid configuration - + Хібная канфігурацыя - + The file-system resize job has an invalid configuration and will not run. - + У задачы па змене памеру файлавай сістэмы хібная канфігурацыя, таму яна не будзе выконвацца. - + KPMCore not Available - + KPMCore недаступны - + Calamares cannot start KPMCore for the file-system resize job. - + У Calamares не атрымалася запусціць KPMCore для задачы па змене памеру файлавай сістэмы. + + + + + + + + Resize Failed + Не атрымалася змяніць памер + + + + The filesystem %1 could not be found in this system, and cannot be resized. + У гэтай сістэме не знойдзена файлавай сістэмы %1, таму змяніць яе памер немагчыма. - - - - - Resize Failed - - - - - The filesystem %1 could not be found in this system, and cannot be resized. - - - - The device %1 could not be found in this system, and cannot be resized. - + У гэтай сістэме не знойдзена прылады %1, таму змяніць яе памер немагчыма. - - + + The filesystem %1 cannot be resized. - + Немагчыма змяніць памер файлавай сістэмы %1. - - + + The device %1 cannot be resized. - + Немагчыма змяніць памер прылады %1. - + The filesystem %1 must be resized, but cannot. - + Неабходна змяніць памер файлавай сістэмы %1, але гэта не атрымліваецца зрабіць. - + The device %1 must be resized, but cannot - + Неабходна змяніць памер прылады %1, але гэта не атрымліваецца зрабіць ResizePartitionJob - + Resize partition %1. - + Змяніць памер раздзела %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Змяніць памер <strong>%2Мб</strong> раздзела <strong>%1</strong> to <strong>%3Мб</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + Змена памеру раздзела %1 з %2Мб на %3Мб. - + The installer failed to resize partition %1 on disk '%2'. - + У праграмы ўсталёўкі не атрымалася змяніць памер раздзела %1 на дыску '%2'. ResizeVolumeGroupDialog - + Resize Volume Group - + Змяніць памер групы тамоў ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Змяніць памер групы тамоў %1 з %2 на %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + Змяніць памер групы тамоў <strong>%1</strong> з <strong>%2</strong> на <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. - + У праграмы ўсталёўкі не атрымалася змяніць памер групы тамоў '%1'. ResultsListDialog - + For best results, please ensure that this computer: - + Для дасягнення найлепшых вынікаў пераканайцеся, што гэты камп’ютар: - + System requirements - - - - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - + Сістэмныя патрабаванні ScanningDialog - + Scanning storage devices... - + Сканаванне назапашвальных прылад... - + Partitioning - + Падзел SetHostNameJob - + Set hostname %1 - + Вызначыць назву камп’ютара ў сетцы %1 - + Set hostname <strong>%1</strong>. - + Вызначыць назву камп’ютара ў сетцы <strong>%1</strong>. - + Setting hostname %1. - + Вызначэнне назвы камп’ютара ў сетцы %1. + - Internal Error - + Унутраная памылка - - + + Cannot write hostname to target system - + Немагчыма запісаць назву камп’ютара ў мэтавую сістэму SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Прызначыць мадэль клавіятуры %1, раскладку %2-%3 - + Failed to write keyboard configuration for the virtual console. - + Не атрымалася запісаць канфігурацыю клавіятуры для віртуальнай кансолі. - - - + + + Failed to write to %1 - + Не атрымалася запісаць у %1 - + Failed to write keyboard configuration for X11. - + Не атрымалася запісаць канфігурацыю клавіятуры для X11. - + Failed to write keyboard configuration to existing /etc/default directory. - + Не атрымалася запісаць параметры клавіятуры ў існы каталог /etc/default. SetPartFlagsJob - + Set flags on partition %1. - + Вызначыць сцягі на раздзеле %1. - + Set flags on %1MiB %2 partition. - + Вызначыць сцягі %1MБ раздзела %2. - + Set flags on new partition. - + Вызначыць сцягі новага раздзела. - + Clear flags on partition <strong>%1</strong>. - + Ачысціць сцягі раздзела <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - + Ачысціць сцягі %1MБ раздзела <strong>%2</strong>. + + + + Clear flags on new partition. + Ачысціць сцягі новага раздзела. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + Адзначыць раздзел сцягам <strong>%1</strong> як <strong>%2</strong>. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Адзначыць %1MБ <strong>%2</strong> раздзел як <strong>%3</strong>. - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - + Flag new partition as <strong>%1</strong>. + Адзначыць новы раздзел сцягам як <strong>%1</strong>. - + + Clearing flags on partition <strong>%1</strong>. + Ачыстка сцягоў раздзела <strong>%1</strong>. + + + Clearing flags on %1MiB <strong>%2</strong> partition. - + Ачыстка сцягоў %1MБ раздзела <strong>%2</strong>. + + + + Clearing flags on new partition. + Ачыстка сцягоў новага раздзела. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + Вызначэнне сцягоў <strong>%2</strong> раздзела <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Вызначэнне сцягоў <strong>%3</strong> раздзела %1MБ <strong>%2</strong>. - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - - Clear flags on new partition. - - - - - Flag partition <strong>%1</strong> as <strong>%2</strong>. - - - - - Flag new partition as <strong>%1</strong>. - - - - - Clearing flags on partition <strong>%1</strong>. - - - - - Clearing flags on new partition. - - - - - Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - - - - Setting flags <strong>%1</strong> on new partition. - + Вызначэнне сцягоў <strong>%1</strong> новага раздзела. - + The installer failed to set flags on partition %1. - + У праграмы ўсталёўкі не атрымалася адзначыць раздзел %1. SetPasswordJob - + Set password for user %1 - + Прызначыць пароль для карыстальніка %1 - + Setting password for user %1. - + Прызначэнне пароля для карыстальніка %1. - + Bad destination system path. - + Няправільны мэтавы шлях сістэмы. - + rootMountPoint is %1 - + Пункт мантавання каранёвага раздзела %1 + + + + Cannot disable root account. + Немагчыма адключыць акаўнт адміністратара. + + + + passwd terminated with error code %1. + Загад "passwd" завяршыўся з кодам памылкі %1. - Cannot disable root account. - + Cannot set password for user %1. + Не атрымалася прызначыць пароль для карыстальніка %1. - passwd terminated with error code %1. - - - - - Cannot set password for user %1. - - - - usermod terminated with error code %1. - + Загад "usermod" завяршыўся з кодам памылкі %1. SetTimezoneJob - + Set timezone to %1/%2 - + Вызначыць часавы пояс %1/%2 + + + + Cannot access selected timezone path. + Доступ да абранага часавога пояса адсутнічае. + + + + Bad path: %1 + Хібны шлях: %1 - Cannot access selected timezone path. - + Cannot set timezone. + Немагчыма вызначыць часавы пояс. - Bad path: %1 - - - - - Cannot set timezone. - - - - Link creation failed, target: %1; link name: %2 - + Не атрымалася стварыць спасылку, мэта: %1; назва спасылкі: %2 - + Cannot set timezone, - + Часавы пояс не вызначаны, - + Cannot open /etc/timezone for writing - + Немагчыма адкрыць /etc/timezone для запісу + + + + SetupGroupsJob + + + Preparing groups. + Падрыхтоўка групаў. + + + + + Could not create groups in target system + Не атрымалася стварыць групы ў мэтавай сістэме + + + + These groups are missing in the target system: %1 + Наступныя групы адсутнічаюць у мэтавай сістэме: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Наладка <pre>суперкарыстальнікаў</pre>. + + + + Cannot chmod sudoers file. + Не атрымалася ўжыць chmod да файла sudoers. + + + + Cannot create sudoers file for writing. + Не атрымалася запісаць файл sudoers. ShellProcessJob - + Shell Processes Job - + Працэсы абалонкі SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - + %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Добра - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &Так - - - SummaryViewStep - - Summary - + + &No + &Не + + + + &Cancel + &Скасаваць + + + + &Close + &Закрыць TrackingInstallJob - + Installation feedback - + Справаздача па ўсталёўцы - + Sending installation feedback. - + Адпраўленне справаздачы па ўсталёўцы. - + Internal error in install-tracking. - + Унутраная памылка адсочвання ўсталёўкі. - + HTTP request timed out. - + Час чакання адказу ад HTTP сышоў. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Зваротная сувязь KDE + + + + Configuring KDE user feedback. + Наладка зваротнай сувязі KDE. + + + + + Error in KDE user feedback configuration. + Падчас наладкі зваротнай сувязі KDE адбылася памылка. + + + + Could not configure KDE user feedback correctly, script error %1. + Не атрымалася наладзіць зваротную сувязь KDE, памылка скрыпта %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Не атрымалася наладзіць зваротную сувязь KDE, памылка Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Сістэма зваротнай сувязі - + Configuring machine feedback. - + Наладка сістэмы зваротнай сувязі. - - + + Error in machine feedback configuration. - + Памылка ў канфігурацыі сістэмы зваротнай сувязі. - + Could not configure machine feedback correctly, script error %1. - + Не атрымалася наладзіць сістэму зваротнай сувязі, памылка скрыпта %1. - + Could not configure machine feedback correctly, Calamares error %1. - + Не атрымалася наладзіць сістэму зваротнай сувязі, памылка Calamares %1. TrackingPage - + Form Форма - + Placeholder - + Замена - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Пстрыкніце сюды, каб не адпраўляць <span style=" font-weight:600;">ніякіх звестак</span> пра вашу ўсталёўку.</p></body></html> - + <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> - + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Пстрыкніце сюды, каб праглядзець больш звестак зваротнай сувязі ад карыстальнікаў</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - + + 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. + Адсочванне дапамагае праекту %1 бачыць, як часта ён усталёўваецца, на якім абсталяванні ён усталёўваецца, якія праграмы выкарыстоўваюцца. Каб убачыць, што будзе адпраўлена, пстрыкніце па значку ля кожнай вобласці. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - + + 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. + Абраўшы гэты пункт вы адправіце звесткі пра сваю канфігурацыю ўсталёўкі і ваша абсталяванне. Звесткі адправяцца <b>адзін раз</b> пасля завяршэння ўсталёўкі. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Абраўшы гэты пункт вы будзеце перыядычна адпраўляць звесткі пра усталёўку, абсталяванне і праграмы вашага <b>камп'ютара</b> на %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Абраўшы гэты пункт вы будзеце перыядычна адпраўляць звесткі пра усталёўку, абсталяванне, праграмы <b>карыстальніка</b> і вобласці іх выкарыстання на %1. TrackingViewStep - + Feedback + Зваротная сувязь + + + + UmountJob + + + Unmount file systems. + Адмантаваць файлавыя сістэмы. + + + + No target system available. + + + + + No rootMountPoint is set. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + <small>Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! - + + Users + Карыстальнікі UsersViewStep - + Users - + Карыстальнікі VariantModel - + Key - + Column header for key/value + Ключ - + Value - + Column header for key/value + Значэнне VolumeGroupBaseDialog - + Create Volume Group - + Стварыць групу тамоў - + List of Physical Volumes - + Спіс фізічных тамоў - + Volume Group Name: - + Назва групы тамоў: - + Volume Group Type: - + Тып групы тамоў: - + Physical Extent Size: - + Фізічны памер: - + MiB - + Міб - + Total Size: - + Агульны памер: - + Used Size: - + Выкарыстана: - + Total Sectors: - + Сектараў агулам: - + Quantity of LVs: - + Колькасць LVs: WelcomePage - + Form Форма - - + + Select application and system language - + Абраць мову сістэмы і праграм - Open donations website - + &About + &Пра праграму - - &Donate - + + Open donations website + Адкрыць старонку ахвяраванняў + &Donate + &Ахвяраваць + + + Open help and support website - + Адкрыць старонку з даведкай + &Support + &Падтрымка + + + Open issues and bug-tracking website - + Адкрыць старонку трэкера хібаў - Open release notes website - - - - - &Release notes - - - - &Known issues - + &Вядомыя праблемы - - &Support - + + Open release notes website + Адкрыць старонку нататак да выпуску - - &About - + + &Release notes + &Нататкі да выпуску - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Вітаем у праграме ўсталёўкі Calamares для %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + <h1>Вітаем у праграме ўсталёўкі %1.</h1> - - About %1 setup - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Вітаем у Calamares для %1.</h1> - - About %1 installer - + + <h1>Welcome to the %1 installer.</h1> + <h1>Вітаем у праграме ўсталёўкі %1.</h1> - - <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. - - - - + %1 support - + падтрымка %1 + + + + About %1 setup + Пра ўсталёўку %1 + + + + About %1 installer + Пра %1 + + + + <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. + <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. WelcomeQmlViewStep - + Welcome - + Вітаем WelcomeViewStep - + Welcome + Вітаем + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Памылка канфігурацыі + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. + <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. + + + + Back + Назад + + + + calamares-sidebar + + + Show debug information + Паказаць адладачную інфармацыю + + + + finishedq + + + Installation Completed - - Back + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <h1>Мовы</h1></br> + Сістэмныя рэгіянальныя налады вызначаюць мову і кадаванне для пэўных элементаў інтэрфейсу загаднага радка. Бягучыя налады <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Рэгіянальныя налады</h1></br> + Сістэмныя рэгіянальныя налады вызначаюць фармат нумароў і датаў. Бягучыя налады <strong>%1</strong>. + + + + Back + Назад + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Мадэль клавіятуры: - - Refresh - - - - - + Layouts - + Раскладкі - - - Keyboard Layout - + + Type here to test your keyboard + Радок уводу для праверкі вашай клавіятуры - - Models - - - - + Variants - + Варыянты + + + localeq - - Test your keyboard - + + Change + Змяніць notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + <h3>%1</h3> + <p>Гэта прыклад нататак да выпуску.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <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> + + + + Back + Назад + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Абярыце свае імя карыстальніка і ўліковыя даныя для ўваходу і выканання задач адміністратара + + + + What is your name? + Як ваша імя? + + + + Your Full Name + Ваша поўнае імя + + + + What name do you want to use to log in? + Якое імя вы хочаце выкарыстоўваць для ўваходу? + + + + Login Name + Лагін + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Дазваляюцца толькі літары, лічбы, знакі падкрэслівання, працяжнікі. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Якая назва гэтага камп’ютара? + + + + Computer Name + Назва камп’ютара + + + + This name will be used if you make the computer visible to others on a network. + Назва будзе выкарыстоўвацца для пазначэння камп’ютара ў сетцы. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Абярыце пароль для абароны вашага акаўнта. + + + + Password + Пароль + + + + Repeat Password + Паўтарыце пароль + + + + 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. + Увядзіце двойчы аднолькавы пароль. Гэта неабходна для таго, каб пазбегнуць памылак. Надзейны пароль павінен складацца з літар, лічбаў, знакаў пунктуацыі. Ён павінен змяшчаць прынамсі 8 знакаў, яго перыядычна трэба змяняць. + + + + Validate passwords quality + Праверка якасці пароляў + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Калі адзначана, будзе выконвацца праверка надзейнасці пароля, таму вы не зможаце выкарыстаць слабы пароль. + + + + Log in automatically without asking for the password + Аўтаматычна ўваходзіць без уводу пароля + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Выкарыстоўваць пароль карыстальніка як пароль адміністратара + + + + Use the same password for the administrator account. + Выкарыстоўваць той жа пароль для акаўнта адміністратара. + + + + Choose a root password to keep your account safe. + Абярыце пароль адміністратара для абароны вашага акаўнта. + + + + Root Password + Пароль адміністратара + + + + Repeat Root Password + Паўтарыце пароль адміністратара + + + + Enter the same password twice, so that it can be checked for typing errors. + Увядзіце пароль двойчы, каб пазбегнуць памылак уводу. + welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Вітаем у %1, праграме ўсталёўкі<quote>%2</quote> </h3> + <p>Гэтая праграма дапаможа вам усталяваць %1 на ваш камп'ютар.</p> - + About - + Пра праграму - + Support - + Падтрымка - + Known issues - + Вядомыя праблемы - + Release notes - + Нататкі да выпуску - + Donate - + Ахвяраваць diff --git a/lang/calamares_bg.ts b/lang/calamares_bg.ts index 66eff72fa..dee1642f5 100644 --- a/lang/calamares_bg.ts +++ b/lang/calamares_bg.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - <strong>Среда за начално зареждане</strong> на тази система.<br><br>Старите x86 системи поддържат само <strong>BIOS</strong>.<br>Модерните системи обикновено използват <strong>EFI</strong>, но може също така да използват BIOS, ако са стартирани в режим на съвместимост. + <strong>Средата за начално зареждане</strong> на тази система.<br><br>Старите x86 системи поддържат само <strong>BIOS</strong>.<br>Модерните системи обикновено използват <strong>EFI</strong>, но може също така да използват BIOS, ако са стартирани в режим на съвместимост. - + 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. Тази система беше стартирана с <strong>EFI</strong> среда за начално зареждане.<br><br>За да се настрои стартирането от EFI, инсталаторът трябва да разположи програма за начално зареждане като <strong>GRUB</strong> или <strong>systemd-boot</strong> на <strong>EFI Системен Дял</strong>. Това се прави автоматично, освен ако не се избере ръчно поделяне, в такъв случай вие трябва да свършите тази работа. - + 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. Тази система беше стартирана с <strong>BIOS</strong> среда за начално зареждане.<br><br>За да се настрои стартирането от BIOS, инсталаторът трябва да разположи програма за начално зареждане като <strong>GRUB</strong> в началото на дяла или на <strong>Сектора за Начално Зареждане</strong> близо до началото на таблицата на дяловете (предпочитано). Това се прави автоматично, освен ако не се избере ръчно поделяне, в такъв случай вие трябва да свършите тази работа. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Сектор за начално зареждане на %1 - + Boot Partition Дял за начално зареждане - + System Partition Системен дял - + Do not install a boot loader Не инсталирай програма за начално зареждане - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Празна страница @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Форма - + GlobalStorage Глобално съхранение - + JobQueue Опашка от задачи - + Modules Модули - + Type: Вид: - - + + none няма - + Interface: Интерфейс: - - Tools - Инструменти + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Информация за отстраняване на грешки @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Инсталирай @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Задачата се провали (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Готово @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - + Примерна задача (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Изпълняване на команда %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Изпълнение на %1 операция. - + Bad working directory path Невалиден път на работната директория - + Working directory %1 for python job %2 is not readable. Работна директория %1 за python задача %2 не се чете. - + Bad main script file Невалиден файл на главен скрипт - + Main script file %1 for python job %2 is not readable. - Файлът на главен скрипт %1 за python задача %2 не се чете. + Файла на главен скрипт %1 за python задача %2 не се чете. - + Boost.Python error in job "%1". Boost.Python грешка в задача "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Назад - - - - &Next - &Напред - - - - &Cancel - &Отказ - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Отказ от инсталацията без промяна на системата. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Неуспешна инсталация - + + Error + Грешка + + + + &Yes + &Да + + + + &No + &Не + + + + &Close + &Затвори + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Инициализацията на Calamares се провали - + %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. %1 не може да се инсталира. Calamares не можа да зареди всичките конфигурирани модули. Това е проблем с начина, по който Calamares е използван от дистрибуцията. - + <br/>The following modules could not be loaded: <br/>Следните модули не могат да се заредят: - + + Continue with setup? + Продължаване? + + + Continue with installation? - + 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> - + + 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> + Инсталатора на %1 ще направи промени по вашия диск за да инсталира %2. <br><strong>Промените ще бъдат окончателни.</strong> + + + &Set up now - + + &Install now + &Инсталирай сега + + + + Go &back + В&ръщане + + + &Set up - + &Install &Инсталирай - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Инсталацията е завършена. Затворете инсталаторa. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Отказ от инсталацията без промяна на системата. + + + + &Next + &Напред + + + + &Back + &Назад + + + + &Done + &Готово + + + + &Cancel + &Отказ + + + Cancel setup? - + Cancel installation? Отмяна на инсталацията? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Наистина ли искате да отмените текущият процес на инсталиране? Инсталатора ще прекъсне и всичките промени ще бъдат загубени. - - - - &Yes - &Да - - - - - &No - &Не - - - - &Close - &Затвори - - - - Continue with setup? - Продължаване? - - - - 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> - Инсталатора на %1 ще направи промени по вашия диск за да инсталира %2. <br><strong>Промените ще бъдат окончателни.</strong> - - - - &Install now - &Инсталирай сега - - - - Go &back - В&ръщане - - - - &Done - &Готово - - - - The installation is complete. Close the installer. - Инсталацията е завършена. Затворете инсталаторa. - - - - Error - Грешка - - - - Installation Failed - Неуспешна инсталация - CalamaresPython::Helper - + Unknown exception type Неизвестен тип изключение - + unparseable Python error неанализируема грешка на Python - + unparseable Python traceback неанализируемо проследяване на Python - + Unfetchable Python error. Недостъпна грешка на Python. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Назад - - - - &Next - &Напред - - - - &Cancel - &Отказ - - - + %1 Setup Program - + %1 Installer %1 Инсталатор + + + ChangeFilesystemLabelJob - - Show debug information - Покажи информация за отстраняване на грешки + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Инсталатора не успя да актуализира таблица на дяловете на диск '%1'. CheckerContainer - + Gathering system information... Събиране на системна информация... @@ -498,157 +522,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Форма - - After: - След: - - - - Boot loader location: - Локация на програмата за начално зареждане: - - - + Select storage de&vice: Изберете ус&тройство за съхранение: - - - - + + + + Current: Сегашен: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + След: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Самостоятелно поделяне</strong><br/>Можете да създадете или преоразмерите дяловете сами. + + + Reuse %1 as home partition for %2. Използване на %1 като домашен дял за %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Изберете дял за смаляване, после влачете долната лента за преоразмеряване</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Локация на програмата за начално зареждане: + + + <strong>Select a partition to install on</strong> <strong>Изберете дял за инсталацията</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI системен дял не е намерен. Моля, опитайте пак като използвате ръчно поделяне за %1. - + The EFI system partition at %1 will be used for starting %2. EFI системен дял в %1 ще бъде използван за стартиране на %2. - + EFI system partition: EFI системен дял: - + 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. Това устройство за съхранение няма инсталирана операционна система. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Изтриване на диска</strong><br/>Това ще <font color="red">изтрие</font> всички данни върху устройството за съхранение. - - 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. - Това устройство за съхранение има инсталиран %1. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Инсталирайте покрай</strong><br/>Инсталатора ще раздроби дяла за да направи място за %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замени дял</strong><br/>Заменя този дял с %1. - + + 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. + Това устройство за съхранение има инсталиран %1. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. + + + 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. Това устройство за съхранение има инсталирана операционна система. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. - + 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. Това устройство за съхранение има инсталирани операционни системи. Какво ще правите?<br/>Ще може да прегледате и потвърдите избора си, преди да се направят промени по устройството за съхранение. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Разчисти монтиранията за операциите на подялбата на %1 - + Clearing mounts for partitioning operations on %1. Разчистване на монтиранията за операциите на подялбата на %1 - + Cleared all mounts for %1 Разчистени всички монтирания за %1 @@ -656,22 +720,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. Разчисти всички временни монтирания. - + Clearing all temporary mounts. Разчистване на всички временни монтирания. - - Cannot get list of temporary mounts. - Не може да се вземе лист от временни монтирания. - - - + Cleared all temporary mounts. Разчистени всички временни монтирания. @@ -679,18 +738,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. Командата не може да се изпълни. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Командата се изпълнява в средата на хоста и трябва да установи местоположението на основния дял, но rootMountPoint не е определен. - + The command needs to know the user's name, but no username is defined. Командата трябва да установи потребителското име на профила, но такова не е определено. @@ -698,101 +757,236 @@ The installer will quit and all changes will be lost. Config - + + Set keyboard model to %1.<br/> + Постави модел на клавиатурата на %1.<br/> + + + + Set keyboard layout to %1/%2. + Постави оформлението на клавиатурата на %1/%2. + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + Системният език ще бъде %1. + + + + The numbers and dates locale will be set to %1. + Форматът на цифрите и датата ще бъде %1. + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + Мрежова инсталация. (Изключена: Получени са данни за невалидни групи) + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Избор на пакети + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Мрежова инсталация. (Изключена: Списъкът с пакети не може да бъде извлечен, проверете Вашата Интернет връзка) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Този компютър не отговаря на минималните изисквания за инсталиране %1.<br/>Инсталацията не може да продължи. <a href="#details">Детайли...</a> - + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Този компютър не отговаря на някои от препоръчителните изисквания за инсталиране %1.<br/>Инсталацията може да продължи, но някои свойства могат да бъдат недостъпни. - + This program will ask you some questions and set up %2 on your computer. Тази програма ще ви зададе няколко въпроса и ще конфигурира %2 на вашия компютър. - - <h1>Welcome to the Calamares setup program for %1.</h1> + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> - <h1>Welcome to %1 setup.</h1> + <h1>Welcome to the Calamares installer for %1</h1> - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Добре дошли при инсталатора Calamares на %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Добре дошли при инсталатора на %1.</h1> - - - - Set keyboard model to %1.<br/> - Постави модел на клавиатурата на %1.<br/> - - - - Set keyboard layout to %1/%2. - Постави оформлението на клавиатурата на %1/%2. - - - - The system language will be set to %1. - Системният език ще бъде %1. - - - - The numbers and dates locale will be set to %1. - Форматът на цифрите и датата ще бъде %1. - - - - Set timezone to %1/%2.<br/> - Постави часовата зона на %1/%2.<br/> - - - - Network Installation. (Disabled: Incorrect configuration) + + <h1>Welcome to the %1 installer</h1> - - Network Installation. (Disabled: Received invalid groups data) - Мрежова инсталация. (Изключена: Получени са данни за невалидни групи) + + Your username is too long. + Вашето потребителско име е твърде дълго. - - Network Installation. (Disabled: internal error) + + '%1' is not allowed as username. - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Мрежова инсталация. (Изключена: Списъкът с пакети не може да бъде извлечен, проверете Вашата Интернет връзка) + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Вашето име на хоста е твърде кратко. + + + + Your hostname is too long. + Вашето име на хоста е твърде дълго. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Паролите Ви не съвпадат! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Неуспешна инсталация + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Инсталацията е завършена + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + Инсталацията на %1 е завършена. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Обобщение + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + Това е преглед на промените, които ще се извършат, след като започнете процедурата по инсталиране. ContextualProcessJob - + Contextual Processes Job Задача с контекстуални процеси @@ -800,100 +994,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition Създай дял - - MiB - MiB - - - - Partition &Type: - &Тип на дяла: - - - - &Primary - &Основен - - - - E&xtended - Р&азширен - - - - Fi&le System: - Фа&йлова система: - - - - LVM LV name - LVM LV име - - - - Flags: - Флагове: - - - - &Mount Point: - Точка на &монтиране: - - - + Si&ze: Раз&мер: - + + MiB + MiB + + + + Partition &Type: + &Тип на дяла: + + + + Primar&y + + + + + E&xtended + Р&азширен + + + + Fi&le System: + Фа&йлова система: + + + + LVM LV name + LVM LV име + + + + &Mount Point: + Точка на &монтиране: + + + + Flags: + Флагове: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt Ши&фриране - + Logical Логическа - + Primary Главна - + GPT GPT - + Mountpoint already in use. Please select another one. Точката за монтиране вече се използва. Моля изберете друга. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Създаване на нов %1 дял върху %2. - + The installer failed to create partition on disk '%1'. Инсталатора не успя да създаде дял върху диск '%1'. @@ -901,27 +1131,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Създай таблица на дяловете - + Creating a new partition table will delete all existing data on the disk. Създаването на нова таблица на дяловете ще изтрие всички съществуващи данни на диска. - + What kind of partition table do you want to create? Какъв тип таблица на дяловете искате да създадете? - + Master Boot Record (MBR) Сектор за начално зареждане (MBR) - + GUID Partition Table (GPT) GUID Таблица на дяловете (GPT) @@ -929,22 +1159,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. Създай нова %1 таблица на дяловете върху %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Създай нова <strong>%1</strong> таблица на дяловете върху <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Създаване на нова %1 таблица на дяловете върху %2. - + The installer failed to create a partition table on %1. Инсталатора не можа да създаде таблица на дяловете върху %1. @@ -952,45 +1182,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Създай потребител %1 - + Create user <strong>%1</strong>. Създай потребител <strong>%1</strong>. - - Creating user %1. - Създаване на потребител %1. + + Preserving home directory + - - Sudoers dir is not writable. - Директорията sudoers е незаписваема. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Не може да се създаде sudoers файл за записване. + + Configuring user %1 + - - Cannot chmod sudoers file. - Не може да се изпълни chmod върху sudoers файла. - - - - Cannot open groups file for reading. - Не може да се отвори файла на групите за четене. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -998,22 +1224,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1021,18 +1247,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1040,22 +1266,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. Изтрий дял %1. - + Delete partition <strong>%1</strong>. Изтриване на дял <strong>%1</strong>. - + Deleting partition %1. Изтриване на дял %1. - + The installer failed to delete partition %1. Инсталатора не успя да изтрие дял %1. @@ -1063,46 +1289,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - Типа на <strong>таблицата на дяловете</strong> на избраното устройство за съхранение.<br><br>Единствения начин да се промени е като се изчисти и пресъздаде таблицата на дяловете, като по този начин всички данни върху устройството ще бъдат унищожени.<br>Инсталатора ще запази сегашната таблица на дяловете, освен ако не изберете обратното.<br>Ако не сте сигурни - за модерни системи се препоръчва GPT. - - - + This device has a <strong>%1</strong> partition table. Устройството има <strong>%1</strong> таблица на дяловете. - + 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. Това е <strong>loop</strong> устройство.<br><br>Представлява псевдо-устройство, без таблица на дяловете, което прави файловете достъпни като блок устройства. Обикновено съдържа само една файлова система. - + 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. Инсталатора <strong>не може да открие таблица на дяловете</strong> на избраното устройство за съхранение.<br><br>Таблицата на дяловете липсва, повредена е или е от неизвестен тип.<br>Инсталатора може да създаде нова таблица на дяловете автоматично или ръчно, чрез програмата за подялба. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Това е препоръчаният тип на таблицата на дяловете за модерни системи, които стартират от <strong>EFI</strong> среда за начално зареждане. - + <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. <br><br>Тази таблица на дяловете е препоръчителна само за стари системи, които стартират с <strong>BIOS</strong> среда за начално зареждане. GPT е препоръчителна в повечето случаи.<br><br><strong>Внимание:</strong> MBR таблица на дяловете е остарял стандарт от времето на MS-DOS.<br>Само 4 <em>главни</em> дяла могат да бъдат създадени и от тях само един може да е <em>разширен</em> дял, който може да съдържа много <em>логически</em> дялове. + + + 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. + Типа на <strong>таблицата на дяловете</strong> на избраното устройство за съхранение.<br><br>Единствения начин да се промени е като се изчисти и пресъздаде таблицата на дяловете, като по този начин всички данни върху устройството ще бъдат унищожени.<br>Инсталатора ще запази сегашната таблица на дяловете, освен ако не изберете обратното.<br>Ако не сте сигурни - за модерни системи се препоръчва GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1111,17 +1337,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Запиши LUKS конфигурация за Dracut на %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Пропусни записването на LUKS конфигурация за Dracut: "/" дял не е шифриран - + Failed to open %1 Неуспешно отваряне на %1 @@ -1129,7 +1355,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Фиктивна С++ задача @@ -1137,123 +1363,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition Редактирай съществуващ дял - - Content: - Съдържание: + + Con&tent: + - + &Keep &Запази - + Format Форматирай - + Warning: Formatting the partition will erase all existing data. Предупреждение: Форматирането на дялът ще изтрие всички съществуващи данни. - + &Mount Point: &Точка на монтиране: - + Si&ze: Раз&мер: - + MiB MiB - + Fi&le System: Фа&йлова система: - + Flags: Флагове: - - Mountpoint already in use. Please select another one. - Точката за монтиране вече се използва. Моля изберете друга. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Форма - + En&crypt system Крип&тиране на системата - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Парола - + Confirm passphrase Потвърди паролата - + + Please enter the same passphrase in both boxes. Моля, въведете еднаква парола в двете полета. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Постави информация за дял - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Инсталирай %1 на <strong>нов</strong> %2 системен дял. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Създай <strong>нов</strong> %2 дял със точка на монтиране <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Инсталирай %2 на %3 системен дял <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Създай %3 дял <strong>%1</strong> с точка на монтиране <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Инсталиране на зареждач върху <strong>%1</strong>. - + Setting up mount points. Настройка на точките за монтиране. @@ -1261,93 +1531,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Форма - + &Restart now &Рестартирай сега - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Завършено.</h1><br/>%1 беше инсталирана на вашият компютър.<br/>Вече можете да рестартирате в новата си система или да продължите да използвате %2 Живата среда. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Инсталацията е неуспешна</h1><br/>%1 не е инсталиран на Вашия компютър.<br/>Съобщението с грешката е: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Завърши + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Инсталацията е завършена - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - Инсталацията на %1 е завършена. + + Finish + Завърши FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Форматирай дял %1 с файлова система %2. - + The installer failed to format partition %1 on disk '%2'. Инсталатора не успя да форматира дял %1 на диск '%2'. @@ -1355,72 +1613,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source е включен към източник на захранване - + The system is not plugged in to a power source. Системата не е включена към източник на захранване. - + is connected to the Internet е свързан към интернет - + The system is not connected to the Internet. Системата не е свързана с интернет. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Инсталаторът не е стартиран с права на администратор. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Екранът е твърде малък за инсталатора. @@ -1428,7 +1686,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1436,25 +1694,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1462,7 +1720,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1470,7 +1728,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1478,17 +1736,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole не е инсталиран - + Please install KDE Konsole and try again! Моля, инсталирайте KDE Konsole и опитайте отново! - + Executing script: &nbsp;<code>%1</code> Изпълняване на скрипт: &nbsp;<code>%1</code> @@ -1496,28 +1754,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Скрипт - - KeyboardPage - - - Set keyboard model to %1.<br/> - Постави модел на клавиатурата на %1.<br/> - - - - Set keyboard layout to %1/%2. - Постави оформлението на клавиатурата на %1/%2. - - KeyboardQmlViewStep - + Keyboard Клавиатура @@ -1525,7 +1770,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Клавиатура @@ -1533,65 +1778,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting Настройка на локацията на системата - + 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>. Локацията на системата засяга езика и символите зададени за някои елементи на командния ред.<br/>Текущата настройка е <strong>%1</strong>. - + &Cancel &Отказ - + &OK &ОК + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Форма - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Приемам лицензионните условия. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1599,7 +1867,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License Лиценз @@ -1607,109 +1875,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 драйвър</strong><br/>от %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 графичен драйвър</strong><br/><font color="Grey">от %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 плъгин за браузър</strong><br/><font color="Grey">от %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 кодек</strong><br/><font color="Grey">от %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 пакет</strong><br/><font color="Grey">от %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">от %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Системният език ще бъде %1. - - - - The numbers and dates locale will be set to %1. - Форматът на цифрите и датата ще бъде %1. - - - + Region: Регион: - + Zone: Зона: - - + + &Change... &Промени... - - - Set timezone to %1/%2.<br/> - Постави часовата зона на %1/%2.<br/> - LocaleQmlViewStep - + Location Местоположение + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Местоположение @@ -1717,35 +1978,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1753,116 +2014,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. Генерирай machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Избор на пакети - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1870,7 +2145,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1878,17 +2153,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1896,260 +2171,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Паролата е твърде кратка - + Password is too long Паролата е твърде дълга - + Password is too weak Паролата е твърде слаба - + Memory allocation error when setting '%1' Грешка при разпределяне на паметта по време на настройването на '%1' - + Memory allocation error Грешка при разпределяне на паметта - + The password is the same as the old one Паролата съвпада с предишната - + The password is a palindrome Паролата е палиндром - + The password differs with case changes only Паролата се различава само със смяна на главни и малки букви - + The password is too similar to the old one Паролата е твърде сходна с предишната - + The password contains the user name in some form Паролата съдържа потребителското име под някаква форма - + The password contains words from the real name of the user in some form Паролата съдържа думи от истинското име на потребителя под някаква форма - + The password contains forbidden words in some form Паролата съдържа забранени думи под някаква форма - - The password contains less than %1 digits - Паролата съдържа по-малко от %1 цифри - - - + The password contains too few digits Паролата съдържа твърде малко цифри - - The password contains less than %1 uppercase letters - Паролата съдържа по-малко от %1 главни букви - - - + The password contains too few uppercase letters Паролата съдържа твърде малко главни букви - - - The password contains less than %1 lowercase letters - Паролата съдържа по-малко от %1 малки букви + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters Паролата съдържа твърде малко малки букви - - The password contains less than %1 non-alphanumeric characters - Паролата съдържа по-малко от %1 знаци, които не са букви или цифри - - - + The password contains too few non-alphanumeric characters Паролата съдържа твърде малко знаци, които не са букви или цифри - - The password is shorter than %1 characters - Паролата е по-малка от %1 знаци - - - + The password is too short Паролата е твърде кратка - - The password is just rotated old one - Паролата е обърнат вариант на старата - - - - The password contains less than %1 character classes - Паролата съдържа по-малко от %1 видове знаци - - - + The password does not contain enough character classes Паролата не съдържа достатъчно видове знаци - - The password contains more than %1 same characters consecutively - Паролата съдържа повече от %1 еднакви знаци последователно - - - + The password contains too many same characters consecutively Паролата съдържа твърде много еднакви знаци последователно - - The password contains more than %1 characters of the same class consecutively - Паролата съдържа повече от %1 еднакви видове знаци последователно - - - + The password contains too many characters of the same class consecutively Паролата съдържа твърде много еднакви видове знаци последователно - - - The password contains monotonic sequence longer than %1 characters - Паролата съдържа монотонна последователност, по-дълга от %1 знаци + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence Паролата съдържа твърде дълга монотонна последователност от знаци - + No password supplied Липсва парола - + Cannot obtain random numbers from the RNG device Получаването на произволни числа от RNG устройството е неуспешно - + Password generation failed - required entropy too low for settings Генерирането на парола е неуспешно - необходимата ентропия е твърде ниска за настройки - + The password fails the dictionary check - %1 Паролата не издържа проверката на речника - %1 - + The password fails the dictionary check Паролата не издържа проверката на речника - + Unknown setting - %1 Неизвестна настройка - %1 - + Unknown setting Неизвестна настройка - + Bad integer value of setting - %1 Невалидна числена стойност на настройката - %1 - + Bad integer value Невалидна числена стойност на настройката - + Setting %1 is not of integer type Настройката %1 не е от числов вид - + Setting is not of integer type Настройката не е от числов вид - + Setting %1 is not of string type Настройката %1 не е от текстов вид - + Setting is not of string type Настройката не е от текстов вид - + Opening the configuration file failed Отварянето на файла с конфигурацията е неуспешно - + The configuration file is malformed Файлът с конфигурацията е деформиран - + Fatal failure Фатална повреда - + Unknown error Неизвестна грешка - + Password is empty @@ -2157,40 +2489,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Форма - + Product Name - + TextLabel TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2198,12 +2538,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name Име - + Description Описание @@ -2211,17 +2551,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Форма - + Keyboard Model: Модел на клавиатура: - + Type here to test your keyboard Пишете тук за да тествате вашата клавиатура @@ -2229,96 +2569,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Форма - + What is your name? Какво е вашето име? - - What name do you want to use to log in? - Какво име искате да използвате за влизане? - - - - Choose a password to keep your account safe. - Изберете парола за да държите вашият акаунт в безопасност. - - - - - <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> - <small>Внесете същата парола два пъти, за да може да бъде проверена за правописни грешки. Добра парола ще съдържа смесица от букви, цифри и пунктуационни знаци, трябва да бъде поне с осем знака и да бъде променяна често.</small> - - - - What is the name of this computer? - Какво е името на този компютър? - - - + Your Full Name - + + What name do you want to use to log in? + Какво име искате да използвате за влизане? + + + login - + + What is the name of this computer? + Какво е името на този компютър? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Това име ще бъде използвано ако направите компютъра видим за други при мрежа.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Изберете парола за да държите вашият акаунт в безопасност. + + + + + <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> + <small>Внесете същата парола два пъти, за да може да бъде проверена за правописни грешки. Добра парола ще съдържа смесица от букви, цифри и пунктуационни знаци, трябва да бъде поне с осем знака и да бъде променяна често.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Влизайте автоматично, без питане за паролата. - + Use the same password for the administrator account. Използвайте същата парола за администраторския акаунт. - + Choose a password for the administrator account. Изберете парола за администраторския акаунт. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Внесете същата парола два пъти, за да може да бъде проверена за правописни грешки.</small> @@ -2326,42 +2666,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Основен - + Home Домашен - + Boot Зареждане - + EFI system EFI система - + Swap Swap - + New partition for %1 Нов дял за %1 - + New partition Нов дял - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2710,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Свободно пространство - - + + New partition Нов дял - + Name Име - + File System Файлова система - + + File System Label + + + + Mount Point Точка на монтиране - + Size Размер @@ -2405,77 +2750,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Форма - + Storage de&vice: Ус&тройство за съхранение" - + &Revert All Changes &Възвърни всички промени - + New Partition &Table Нова &таблица на дяловете - + Cre&ate Съз&дай - + &Edit &Редактирай - + &Delete &Изтрий - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Сигурни ли сте че искате да създадете нова таблица на дяловете върху %1? - + Can not create new partition Не може да се създаде нов дял - + 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. Таблицата на дяловете на %1 вече има %2 главни дялове, повече не може да се добавят. Моля, премахнете един главен дял и добавете разширен дял, на негово място. @@ -2483,117 +2828,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Събиране на системна информация... - + Partitions Дялове - - Install %1 <strong>alongside</strong> another operating system. - Инсталирай %1 <strong>заедно</strong> с друга операционна система. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Изтрий</strong> диска и инсталирай %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Замени</strong> дял с %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Ръчно</strong> поделяне. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Инсталирай %1 <strong>заедно</strong> с друга операционна система на диск <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Изтрий</strong> диск <strong>%2</strong> (%3) и инсталирай %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Замени</strong> дял на диск <strong>%2</strong> (%3) с %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Ръчно</strong> поделяне на диск <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Диск <strong>%1</strong> (%2) - - - + Current: Сегашен: - + After: След: - + No EFI system partition configured Няма конфигуриран EFI системен дял - - 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>esp</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. - EFI системен дял е нужен за стартиране на %1.<br/><br/>За настройка на EFI системен дял се върнете назад и изберете или създайте FAT32 файлова система с включен <strong>esp</strong> флаг и точка на монтиране <strong>%2</strong>.<br/><br/>Може да продължите без EFI системен дял, но системата може да не успее да стартира. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Не е зададен флаг на EFI системен дял + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - EFI системен дял е нужен за стартиране на %1.<br/><br/>Дялът беше конфигуриран с точка на монтиране <strong>%2</strong>, но неговия <strong>esp</strong> флаг не е включен.<br/>За да включите флага се върнете назад и редактирайте дяла.<br/><br/>Може да продължите без флага, но системата може да не успее да стартира. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Липсва криптиране на дял за начално зареждане - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2601,13 +2936,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2615,17 +2950,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Форма - + 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. - + 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. @@ -2633,7 +2968,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2641,17 +2976,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2659,13 +2994,13 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: @@ -2674,52 +3009,52 @@ Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Невалидни параметри за извикване на задача за процес. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2727,89 +3062,94 @@ Output: QObject - - Default Keyboard Model - Модел на клавиатура по подразбиране - - - - - Default - По подразбиране - - - - unknown - неизвестна - - - - extended - разширена - - - - unformatted - неформатирана - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Неразделено пространство или неизвестна таблица на дяловете - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + неизвестна - - No description provided. - + + extended + разширена - - - - + + unformatted + неформатирана + + + + swap + swap + + + + + Default + По подразбиране + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Неразделено пространство или неизвестна таблица на дяловете + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2817,18 +3157,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2836,143 +3176,158 @@ Output: ReplaceWidget - + Form Форма - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Изберете къде да инсталирате %1.<br/><font color="red">Предупреждение: </font>това ще изтрие всички файлове върху избраният дял. - + The selected item does not appear to be a valid partition. Избраният предмет не изглежда да е валиден дял. - + %1 cannot be installed on empty space. Please select an existing partition. %1 не може да бъде инсталиран на празно пространство. Моля изберете съществуващ дял. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 не може да бъде инсталиран върху разширен дял. Моля изберете съществуващ основен или логически дял. - + %1 cannot be installed on this partition. %1 не може да бъде инсталиран върху този дял. - + Data partition (%1) Дял на данните (%1) - + Unknown system partition (%1) Непознат системен дял (%1) - + %1 system partition (%2) %1 системен дял (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Дялът %1 е твърде малък за %2. Моля изберете дял с капацитет поне %3 ГБ. - + <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. <strong>%2</strong><br/><br/>EFI системен дял не е намерен. Моля, опитайте пак като използвате ръчно поделяне за %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 ще бъде инсталиран върху %2.<br/><font color="red">Предупреждение: </font>всички данни на дял %2 ще бъдат изгубени. - + The EFI system partition at %1 will be used for starting %2. EFI системен дял в %1 ще бъде използван за стартиране на %2. - + EFI system partition: EFI системен дял: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2980,22 +3335,22 @@ Output: ResizePartitionJob - + Resize partition %1. Преоразмери дял %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Инсталатора не успя да преоразмери дял %1 върху диск '%2'. @@ -3003,7 +3358,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3011,18 +3366,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3030,54 +3385,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: За най-добри резултати, моля бъдете сигурни че този компютър: - + System requirements Системни изисквания - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Този компютър не отговаря на минималните изисквания за инсталиране %1.<br/>Инсталацията не може да продължи. -<a href="#details">Детайли...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Този компютър не отговаря на някои от препоръчителните изисквания за инсталиране %1.<br/>Инсталацията може да продължи, но някои свойства могат да бъдат недостъпни. - - - - This program will ask you some questions and set up %2 on your computer. - Тази програма ще ви зададе няколко въпроса и ще конфигурира %2 на вашия компютър. - - ScanningDialog - + Scanning storage devices... Сканиране на устройствата за съхранение - + Partitioning Разделяне @@ -3085,29 +3411,29 @@ Output: SetHostNameJob - + Set hostname %1 Поставете име на хоста %1 - + Set hostname <strong>%1</strong>. Поставете име на хост <strong>%1</strong>. - + Setting hostname %1. Задаване името на хоста %1 + - Internal Error Вътрешна грешка - - + + Cannot write hostname to target system Не може да се запише името на хоста на целевата система @@ -3115,29 +3441,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Постави модела на клавиатурата на %1, оформлението на %2-%3 - + Failed to write keyboard configuration for the virtual console. Неуспешно записването на клавиатурна конфигурация за виртуалната конзола. - - - + + + Failed to write to %1 Неуспешно записване върху %1 - + Failed to write keyboard configuration for X11. Неуспешно записване на клавиатурна конфигурация за X11. - + Failed to write keyboard configuration to existing /etc/default directory. Неуспешно записване на клавиатурна конфигурация в съществуващата директория /etc/default. @@ -3145,82 +3471,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. Задай флагове на дял %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Задай флагове на нов дял. - + Clear flags on partition <strong>%1</strong>. Изчисти флаговете на дял <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Изчисти флагове на нов дял. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Сложи флаг на дял <strong>%1</strong> като <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Сложи флаг на новия дял като <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Изчистване на флаговете на дял <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Изчистване на флаговете на новия дял. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Задаване на флагове <strong>%2</strong> на дял <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Задаване на флагове <strong>%1</strong> на новия дял. - + The installer failed to set flags on partition %1. Инсталатора не успя да зададе флагове на дял %1. @@ -3228,42 +3554,42 @@ Output: SetPasswordJob - + Set password for user %1 Задай парола за потребител %1 - + Setting password for user %1. Задаване на парола за потребител %1 - + Bad destination system path. Лоша дестинация за системен път. - + rootMountPoint is %1 rootMountPoint е %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. Не може да се постави парола за потребител %1. - + usermod terminated with error code %1. usermod е прекратен с грешка %1. @@ -3271,45 +3597,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Постави часовата зона на %1/%2 - + Cannot access selected timezone path. Няма достъп до избрания път за часова зона. - + Bad path: %1 Невалиден път: %1 - + Cannot set timezone. Не може да се зададе часова зона. - + Link creation failed, target: %1; link name: %2 Неуспешно създаване на връзка: %1; име на връзка: %2 - + Cannot set timezone, Не може да се зададе часова зона, - + Cannot open /etc/timezone for writing Не може да се отвори /etc/timezone за записване + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Не може да се изпълни chmod върху sudoers файла. + + + + Cannot create sudoers file for writing. + Не може да се създаде sudoers файл за записване. + + ShellProcessJob - + Shell Processes Job @@ -3317,81 +3680,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &ОК - - This is an overview of what will happen once you start the install procedure. - Това е преглед на промените, които ще се извършат, след като започнете процедурата по инсталиране. + + &Yes + &Да - - - SummaryViewStep - - Summary - Обобщение + + &No + &Не + + + + &Cancel + &Отказ + + + + &Close + &Затвори TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3399,106 +3798,97 @@ Output: TrackingPage - + Form Форма - + Placeholder Заместител - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback Обратна връзка + + UmountJob + + + Unmount file systems. + Демонтирай файловите системи. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Вашето потребителско име е твърде дълго. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Вашето име на хоста е твърде кратко. - - - - Your hostname is too long. - Вашето име на хоста е твърде дълго. - - - - Your passwords do not match! - Паролите Ви не съвпадат! + + Users + Потребители UsersViewStep - + Users Потребители @@ -3506,65 +3896,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Стойност VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB MiB - + Total Size: - + Used Size: - + Total Sectors: Общо сектори: - + Quantity of LVs: @@ -3572,106 +3964,106 @@ Output: WelcomePage - + Form Форма - - + + Select application and system language + &About + &Относно + + + Open donations website - + &Donate - + Open help and support website + &Support + &Поддръжка + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Бележки по изданието - - - &Known issues &Съществуващи проблеми - - &Support - &Поддръжка + + Open release notes website + - - &About - &Относно + + &Release notes + &Бележки по изданието - - <h1>Welcome to the %1 installer.</h1> - <h1>Добре дошли при инсталатора на %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Добре дошли при инсталатора Calamares на %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Добре дошли в инсталатора Calamares за %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Добре дошли в инсталатора на %1.</h1> + + + + %1 support + %1 поддръжка + + + About %1 setup - + About %1 installer Относно инсталатор %1 - + <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. - - - %1 support - %1 поддръжка - WelcomeQmlViewStep - + Welcome Добре дошли @@ -3679,31 +4071,157 @@ Output: WelcomeViewStep - + Welcome Добре дошли + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Покажи информация за отстраняване на грешки + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3711,86 +4229,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Модел на клавиатура: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Пишете тук за да тествате вашата клавиатура - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Какво е вашето име? + + + + Your Full Name + + + + + What name do you want to use to log in? + Какво име искате да използвате за влизане? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Какво е името на този компютър? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Изберете парола за да държите вашият акаунт в безопасност. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Използвайте същата парола за администраторския акаунт. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_bn.ts b/lang/calamares_bn.ts new file mode 100644 index 000000000..8a814f659 --- /dev/null +++ b/lang/calamares_bn.ts @@ -0,0 +1,4510 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + এই সিস্টেমের <strong>বুট পরিবেশ</strong>।<br><br> পুরাতন x86 সিস্টেম শুধুমাত্র <strong>BIOS</strong> সমর্থন কর<br> আধুনিক সিস্টেম সাধারণত <strong>EFI</strong> ব্যবহার করে, কিন্তু যদি সামঞ্জস্যতা মোডে শুরু হয় তাহলে BIOS হিসেবেও প্রদর্শিত হতে পারে। + + + + 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. + এই সিস্টেম একটি <strong>EFI</strong> বুট পরিবেশ দিয়ে শুরু হয়েছিল।<br><br> একটি EFI পরিবেশ থেকে স্টার্টআপ কনফিগার করতে, এই ইনস্টলার অবশ্যই একটি <strong>EFI সিস্টেম পার্টিশনে</strong> <strong>GRUB</strong> বা <strong>systemd-boot </strong> এর মত একটি বুট লোডার অ্যাপ্লিকেশন প্রয়োগ করতে হবে। এটি স্বয়ংক্রিয়, যদি না আপনি ম্যানুয়াল পার্টিশনিং নির্বাচন করেন, সেক্ষেত্রে আপনাকে অবশ্যই এটি বেছে নিতে হবে অথবা এটি নিজে তৈরি করতে হবে। + + + + 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. + এই সিস্টেম একটি <strong>BIOS</strong> বুট পরিবেশ দিয়ে শুরু হয়েছিল।<br><br>একটি BIOS পরিবেশ থেকে স্টার্টআপ কনফিগার করতে, এই ইনস্টলার অবশ্যই GRUB এর মত একটি পার্টিশনের শুরুতে অথবা পার্টিশন টেবিলের শুরুতে মাস্টার বুট রেকর্ডে (পছন্দনীয়) মত একটি বুট লোডার ইনস্টল করতে হবে। এটি স্বয়ংক্রিয়, যদি না আপনি ম্যানুয়াল পার্টিশনিং নির্বাচন করেন, সেক্ষেত্রে আপনাকে অবশ্যই এটি নিজেই সেট আপ করতে হবে। + + + + BootLoaderModel + + + Master Boot Record of %1 + %1 মাস্টার বুট রেকর্ড + + + + Boot Partition + বুট পার্টিশন + + + + System Partition + সিস্টেম পার্টিশন + + + + Do not install a boot loader + একটি বুট লোডার ইনস্টল করবেন না + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + + + + + Calamares::DebugWindow + + + Form + ফর্ম + + + + GlobalStorage + গ্লোবাল স্টোরেজ + + + + JobQueue + জব লাইন + + + + Modules + মডিউলগুলো + + + + Type: + + + + + + none + + + + + Interface: + + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + + + + + Debug information + তথ্য ডিবাগ করুন + + + + Calamares::ExecutionViewStep + + + Set up + + + + + Install + ইনস্টল করুন + + + + Calamares::FailJob + + + Job failed (%1) + + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + সম্পন্ন + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + কমান্ড %1 %2 চলছে + + + + Calamares::PythonJob + + + Running %1 operation. + %1 ক্রিয়াকলাপ চলছে। + + + + Bad working directory path + ওয়ার্কিং ডিরেক্টরি পাথ ভালো নয় + + + + Working directory %1 for python job %2 is not readable. + ওয়ার্কিং ডিরেক্টরি %1 পাইথন কাজের জন্য %2 পাঠযোগ্য নয়। + + + + Bad main script file + প্রধান স্ক্রিপ্ট ফাইল ভালো নয় + + + + Main script file %1 for python job %2 is not readable. + মূল স্ক্রিপ্ট ফাইল %1 পাইথন কাজের জন্য %2 পাঠযোগ্য নয়। + + + + Boost.Python error in job "%1". + বুস্ট.পাইথন কাজে %1 ত্রুটি + + + + Calamares::QmlViewStep + + + Loading ... + + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + (%n second(s)) + + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + + + + + Installation Failed + ইনস্টলেশন ব্যর্থ হলো + + + + Error + ত্রুটি + + + + &Yes + + + + + &No + + + + + &Close + + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + সেটআপ চালিয়ে যেতে চান? + + + + Continue with installation? + + + + + 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> + + + + + 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> + %1 ইনস্টলার %2 সংস্থাপন করতে আপনার ডিস্কে পরিবর্তন করতে যাচ্ছে। + + + + &Set up now + + + + + &Install now + এবংএখনই ইনস্টল করুন + + + + Go &back + এবংফিরে যান + + + + &Set up + + + + + &Install + + + + + Setup is complete. Close the setup program. + + + + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + এবং পরবর্তী + + + + &Back + এবং পেছনে + + + + &Done + + + + + &Cancel + এবংবাতিল করুন + + + + Cancel setup? + + + + + Cancel installation? + ইনস্টলেশন বাতিল করবেন? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + আপনি কি সত্যিই বর্তমান সংস্থাপন প্রক্রিয়া বাতিল করতে চান? +ইনস্টলার টি বন্ধ হয়ে যাবে এবং সকল পরিবর্তন হারিয়ে যাবে। + + + + CalamaresPython::Helper + + + Unknown exception type + অজানা ধরনের ব্যতিক্রম + + + + unparseable Python error + অতুলনীয় পাইথন ত্রুটি + + + + unparseable Python traceback + অতুলনীয় পাইথন ট্রেসব্যাক + + + + Unfetchable Python error. + অতুলনীয় পাইথন ত্রুটি। + + + + CalamaresWindow + + + %1 Setup Program + + + + + %1 Installer + %1 ইনস্টল + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + সিস্টেম তথ্য সংগ্রহ করা হচ্ছে... + + + + ChoicePage + + + Form + ফর্ম + + + + Select storage de&vice: + স্টোরেজ ডিএবংভাইস নির্বাচন করুন: + + + + + + + Current: + বর্তমান: + + + + After: + পরে: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>সংকুচিত করার জন্য একটি পার্টিশন নির্বাচন করুন, তারপর নিচের বারটি পুনঃআকারের জন্য টেনে আনুন</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + বুট লোডার অবস্থান: + + + + <strong>Select a partition to install on</strong> + <strong>ইনস্টল করতে একটি পার্টিশন নির্বাচন করুন</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + %1 এ EFI সিস্টেম পার্টিশন %2 শুরু করার জন্য ব্যবহার করা হবে। + + + + EFI system partition: + EFI সিস্টেম পার্টিশন: + + + + 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. + এই স্টোরেজ ডিভাইসে কোন অপারেটিং সিস্টেম আছে বলে মনে হয় না। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন। + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <strong>ডিস্ক মুছে ফেলুন</strong> <br/>এটি বর্তমানে নির্বাচিত স্টোরেজ ডিভাইসে উপস্থিত সকল উপাত্ত <font color="red">মুছে ফেলবে</font>। + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <strong>ইনস্টল করুন পাশাপাশি</strong> <br/>ইনস্টলার %1 এর জন্য জায়গা তৈরি করতে একটি পার্টিশন সংকুচিত করবে। + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong>একটি পার্টিশন প্রতিস্থাপন করুন</strong><br/>%1-এর সাথে একটি পার্টিশন প্রতিস্থাপন করে। + + + + 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. + এই সঞ্চয় যন্ত্রটিতে %1 আছে। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন। + + + + 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. + এই স্টোরেজ ডিভাইসে ইতোমধ্যে একটি অপারেটিং সিস্টেম আছে। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন. + + + + 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. + এই স্টোরেজ ডিভাইসে একাধিক অপারেটিং সিস্টেম আছে। তুমি কি করতে চাও? <br/>স্টোরেজ ডিভাইসে কোন পরিবর্তন করার আগে আপনি আপনার পছন্দপর্যালোচনা এবং নিশ্চিত করতে সক্ষম হবেন. + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + %1 এ পার্টিশনিং অপারেশনের জন্য মাউন্ট গুলি মুছে ফেলুন + + + + Clearing mounts for partitioning operations on %1. + %1-এ পার্টিশনিং অপারেশনের জন্য মাউন্ট মুছে ফেলা হচ্ছে। + + + + Cleared all mounts for %1 + %1-এর জন্য সকল মাউন্ট মুছে ফেলা হয়েছে + + + + ClearTempMountsJob + + + Clear all temporary mounts. + সব অস্থায়ী মাউন্ট পরিষ্কার করুন। + + + + Clearing all temporary mounts. + সব অস্থায়ী মাউন্ট পরিষ্কার করা হচ্ছে। + + + + Cleared all temporary mounts. + সব অস্থায়ী মাউন্ট পরিষ্কার করা হয়েছে. + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + %1-এ কীবোর্ড নকশা নির্ধারণ করুন। + + + + Set keyboard layout to %1/%2. + %1/%2 এ কীবোর্ড বিন্যাস নির্ধারণ করুন। + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + আপনার পাসওয়ার্ড মেলে না! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + ইনস্টলেশন ব্যর্থ হলো + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + সারাংশ + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + আপনি ইনস্টল প্রক্রিয়া শুরু করার পর কি হবে তার একটি পর্যালোচনা। + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + একটি পার্টিশন তৈরি করুন + + + + Si&ze: + আএবংকার + + + + MiB + + + + + Partition &Type: + পার্টিশন এবংধরন: + + + + Primar&y + + + + + E&xtended + বএবংর্ধিত + + + + Fi&le System: + ফাএবংইল সিস্টেম: + + + + LVM LV name + + + + + &Mount Point: + এবংমাউন্ট পয়েন্ট: + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + + + + + Logical + যৌক্তিক + + + + Primary + প্রাথমিক + + + + GPT + জিপিটি + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + %2-এ নতুন %1 পার্টিশন তৈরি করা হচ্ছে। + + + + The installer failed to create partition on disk '%1'. + ইনস্টলার '%1' ডিস্কে পার্টিশন তৈরি করতে ব্যর্থ হয়েছে। + + + + CreatePartitionTableDialog + + + Create Partition Table + পার্টিশন টেবিল তৈরি করুন + + + + Creating a new partition table will delete all existing data on the disk. + একটি নতুন পার্টিশন টেবিল তৈরি করলে ডিস্কের সকল বিদ্যমান উপাত্ত মুছে যাবে। + + + + What kind of partition table do you want to create? + আপনি কি ধরনের পার্টিশন টেবিল তৈরি করতে চান? + + + + Master Boot Record (MBR) + মাস্টার বুট রেকর্ড (এমবিআর) + + + + GUID Partition Table (GPT) + জিইউআইডি পার্টিশন টেবিল (জিপিটি) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + %2-এ নতুন %1 পার্টিশন টেবিল তৈরি করুন। + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + <strong>%2</strong> (%3) এ নতুন <strong>%1</strong> পার্টিশন টেবিল তৈরি করুন। + + + + Creating new %1 partition table on %2. + %2 এ নতুন %1 পার্টিশন টেবিল তৈরি করা হচ্ছে। + + + + The installer failed to create a partition table on %1. + ইনস্টলার %1 এ একটি পার্টিশন টেবিল তৈরি করতে ব্যর্থ হয়েছে। + + + + CreateUserJob + + + Create user %1 + %1 ব্যবহারকারী তৈরি করুন + + + + Create user <strong>%1</strong>. + ব্যবহারকারী %1 তৈরি করুন। + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + পার্টিশন %1 মুছে ফেলুন। + + + + Delete partition <strong>%1</strong>. + পার্টিশন <strong>%1</strong> মুছে ফেলুন। + + + + Deleting partition %1. + পার্টিশন %1 মুছে ফেলা হচ্ছে। + + + + The installer failed to delete partition %1. + ইনস্টলার %1 পার্টিশন মুছে ফেলতে ব্যর্থ হয়েছে। + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + এই যন্ত্রটির একটি <strong>%1</strong> পার্টিশন টেবিল আছে। + + + + 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. + এটি একটি <strong>লুপ</strong> ডিভাইস।<br><br>এটি একটি ছদ্ম-ডিভাইস যার কোন পার্টিশন টেবিল নেই যা একটি ফাইলকে ব্লক ডিভাইস হিসেবে অ্যাক্সেসযোগ্য করে তোলে। এই ধরনের উপস্থাপনা সাধারণত শুধুমাত্র একটি একক ফাইলসিস্টেম ধারণ করে। + + + + 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. + এই ইনস্টলার নির্বাচিত সঞ্চয় ডিভাইসে <strong>একটি পার্টিশন টেবিল শনাক্ত করতে পারে না</strong>।<br> <br>ডিভাইসটির কোন পার্টিশন টেবিল নেই, অথবা পার্টিশন টেবিলটি দূষিত অথবা একটি অজানা ধরনের।<br> এই ইনস্টলার আপনার জন্য একটি নতুন পার্টিশন টেবিল তৈরি করতে পারে, হয় স্বয়ংক্রিয়ভাবে, অথবা ম্যানুয়াল পার্টিশনিং পৃষ্ঠার মাধ্যমে। + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <br><br>এটি আধুনিক সিস্টেমের জন্য প্রস্তাবিত পার্টিশন টেবিলের ধরন যা একটি <strong>EFI</strong> বুট পরিবেশ থেকে শুরু হয়। + + + + <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. + + + + + 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. + নির্বাচিত স্টোরেজ ডিভাইসে <strong>পার্টিশন টেবিলে</strong>র ধরন। <br><br>পার্টিশন টেবিলের ধরন পরিবর্তনের একমাত্র উপায় হল স্ক্র্যাচ থেকে পার্টিশন টেবিল মুছে ফেলা এবং পুনরায় তৈরি করা, যা স্টোরেজ ডিভাইসের সমস্ত ডাটা ধ্বংস করে।<br> এই ইনস্টলার বর্তমান পার্টিশন টেবিল রাখবে যদি না আপনি স্পষ্টভাবে অন্যভাবে নির্বাচন করেন. যদি অনিশ্চিত থাকেন, আধুনিক সিস্টেমে জিপিটি অগ্রাধিকার দেওয়া হয়। + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + বিদ্যমান পার্টিশন সম্পাদনা করুন + + + + Con&tent: + + + + + &Keep + এবংরাখুন + + + + Format + বিন্যাস + + + + Warning: Formatting the partition will erase all existing data. + সতর্কীকরণ: পার্টিশন ফরম্যাট করলে সমস্ত বিদ্যমান উপাত্ত মুছে ফেলবে। + + + + &Mount Point: + এবং মাউন্ট পয়েন্ট: + + + + Si&ze: + আএবংকার + + + + MiB + + + + + Fi&le System: + ফাএবংইল সিস্টেম: + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + ফর্ম + + + + En&crypt system + + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + পার্টিশন তথ্য নির্ধারণ করুন + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + <strong>নতুন</strong> %2 সিস্টেম পার্টিশনে %1 সংস্থাপন করুন। + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + %3 সিস্টেম পার্টিশন <strong>%1</strong> এ %2 ইনস্টল করুন। + + + + Install boot loader on <strong>%1</strong>. + <strong>%1</strong> এ বুট লোডার ইনস্টল করুন। + + + + Setting up mount points. + মাউন্ট পয়েন্ট সেট আপ করা হচ্ছে। + + + + FinishedPage + + + Form + ফর্ম + + + + &Restart now + এবংএখন আবার চালু করুন + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + <h1>সব শেষ।</h1><br/>%1 আপনার কম্পিউটারে সংস্থাপন করা হয়েছে।<br/>আপনি এখন আপনার নতুন সিস্টেমে পুনর্সূচনা করতে পারেন, অথবা %2 লাইভ পরিবেশ ব্যবহার চালিয়ে যেতে পারেন। + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + শেষ করুন + + + + FinishedViewStep + + + Finish + শেষ করুন + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + ফাইল সিস্টেম %2 দিয়ে পার্টিশন %1 বিন্যাস করা হচ্ছে। + + + + The installer failed to format partition %1 on disk '%2'. + ইনস্টলার '%2' ডিস্কে %1 পার্টিশন বিন্যাস করতে ব্যর্থ হয়েছে। + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + স্ক্রিপ্ট কার্যকর করা হচ্ছে: &nbsp;<code>%1</code> + + + + InteractiveTerminalViewStep + + + Script + স্ক্রিপ্ট + + + + KeyboardQmlViewStep + + + Keyboard + কীবোর্ড + + + + KeyboardViewStep + + + Keyboard + কীবোর্ড + + + + LCLocaleDialog + + + System locale setting + সিস্টেম লোকেল সেটিং + + + + 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>. + সিস্টেম স্থানীয় বিন্যাসন কিছু কমান্ড লাইন ব্যবহারকারী ইন্টারফেস উপাদানের জন্য ভাষা এবং অক্ষর সেট কে প্রভাবিত করে. <br/>বর্তমান বিন্যাসন <strong>%1</strong>। + + + + &Cancel + এবংবাতিল করুন + + + + &OK + + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + ফর্ম + + + + <h1>License Agreement</h1> + + + + + I accept the terms and conditions above. + আমি উপরের শর্তাবলী মেনে নিচ্ছি। + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + লাইসেন্স + + + + LicenseWidget + + + URL: %1 + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + অঞ্চল: + + + + Zone: + বলয়: + + + + + &Change... + এবংপরিবর্তন করুন... + + + + LocaleQmlViewStep + + + Location + অবস্থান + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + অবস্থান + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + কনফিগারেশন ত্রুটি + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + + + + + 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. + + + + + NetInstallViewStep + + + Package selection + + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + + + + + Services + + + + + Login + + + + + Desktop + + + + + Applications + + + + + Communication + + + + + Development + + + + + Office + + + + + Multimedia + + + + + Internet + + + + + Theming + + + + + Gaming + + + + + Utilities + + + + + NotesQmlViewStep + + + Notes + + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Password is empty + + + + + PackageChooserPage + + + Form + ফর্ম + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + + + + + PackageChooserViewStep + + + Packages + + + + + PackageModel + + + Name + নাম + + + + Description + + + + + Page_Keyboard + + + Form + ফর্ম + + + + Keyboard Model: + কীবোর্ড নকশা: + + + + Type here to test your keyboard + আপনার কীবোর্ড পরীক্ষা করতে এখানে টাইপ করুন + + + + Page_UserSetup + + + Form + ফর্ম + + + + What is your name? + আপনার নাম কি? + + + + Your Full Name + + + + + What name do you want to use to log in? + লগ-ইন করতে আপনি কোন নাম ব্যবহার করতে চান? + + + + login + + + + + What is the name of this computer? + এই কম্পিউটারের নাম কি? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>আপনি যদি কম্পিউটারটিকে অন্যদের কাছে একটি নেটওয়ার্কে দৃশ্যমান করেন তাহলে এই নামটি ব্যবহার করা হবে।</small> + + + + Computer Name + + + + + Choose a password to keep your account safe. + আপনার অ্যাকাউন্ট সুরক্ষিত রাখতে একটি পাসওয়ার্ড নির্বাচন করুন। + + + + + <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> + <small>একই পাসওয়ার্ড দুইবার প্রবেশ করান, যাতে এটি টাইপিং ত্রুটির জন্য পরীক্ষা করা যেতে পারে। একটি ভাল পাসওয়ার্ড অক্ষর, সংখ্যা এবং বিরামচিহ্নের একটি মিশ্রণ ধারণ করবে, অন্তত আট অক্ষর দীর্ঘ হওয়া উচিত, এবং নিয়মিত বিরতিতে পরিবর্তন করা উচিত।</small> + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + পাসওয়ার্ড না চাইলে স্বয়ংক্রিয়ভাবে লগ ইন করুন। + + + + Use the same password for the administrator account. + প্রশাসক হিসাবের জন্য একই গুপ্ত-সংকেত ব্যবহার করুন। + + + + Choose a password for the administrator account. + প্রশাসক হিসাবের জন্য একটি পাসওয়ার্ড নির্বাচন করুন। + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>একই পাসওয়ার্ড দুইবার প্রবেশ করান, যাতে এটি টাইপিং ত্রুটির জন্য পরীক্ষা করা যেতে পারে।</small> + + + + PartitionLabelsView + + + Root + রুট + + + + Home + বাড়ি + + + + Boot + বুট + + + + EFI system + ইএফআই সিস্টেম + + + + Swap + অদলবদল + + + + New partition for %1 + %1 এর জন্য নতুন পার্টিশন + + + + New partition + নতুন পার্টিশন + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + খালি জায়গা + + + + + New partition + নতুন পার্টিশন + + + + Name + নাম + + + + File System + নথি ব্যবস্থা + + + + File System Label + + + + + Mount Point + মাউন্ট পয়েন্ট + + + + Size + আকার + + + + PartitionPage + + + Form + ফর্ম + + + + Storage de&vice: + স্টোরেজ ডিএবংভাইস + + + + &Revert All Changes + এবংসকল পরিবর্তন ফিরিয়ে দিন + + + + New Partition &Table + নতুন পার্টিশন এবংটেবিল + + + + Cre&ate + + + + + &Edit + এবংসম্পাদনা করুন + + + + &Delete + এবংমুছে ফেলুন + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + আপনি কি নিশ্চিত যে আপনি %1 এ একটি নতুন পার্টিশন টেবিল তৈরি করতে চান? + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + সিস্টেম তথ্য সংগ্রহ করা হচ্ছে... + + + + Partitions + পার্টিশনগুলো + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + বর্তমান: + + + + After: + পরে: + + + + No EFI system partition configured + + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + ফর্ম + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + অজানা + + + + extended + বর্ধিত + + + + unformatted + অবিন্যাসিত + + + + swap + + + + + + Default + পূর্বনির্ধারিত + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + অবিভাজনকৃত স্থান বা অজানা পার্টিশন টেবিল + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + ফর্ম + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + %1 কোথায় সংস্থাপন করতে হবে তা নির্বাচন করুন।<br/><font color="red"> সতর্কীকরণ: </font>এটি নির্বাচিত পার্টিশনের সকল ফাইল মুছে ফেলবে। + + + + The selected item does not appear to be a valid partition. + নির্বাচিত বিষয়োপকরণটি একটি বৈধ পার্টিশন বলে মনে হচ্ছে না। + + + + %1 cannot be installed on empty space. Please select an existing partition. + %1 ফাঁকা স্থানে সংস্থাপন করা যাবে না। অনুগ্রহ করে একটি বিদ্যমান পার্টিশন নির্বাচন করুন। + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %1 একটি বর্ধিত পার্টিশনে সংস্থাপন করা যাবে না। অনুগ্রহ করে একটি বিদ্যমান প্রাথমিক বা যৌক্তিক বিভাজন নির্বাচন করুন। + + + + %1 cannot be installed on this partition. + %1 এই পার্টিশনে সংস্থাপন করা যাবে না। + + + + Data partition (%1) + ডাটা পার্টিশন (%1) + + + + Unknown system partition (%1) + অজানা সিস্টেম পার্টিশন (%1) + + + + %1 system partition (%2) + %1 সিস্টেম পার্টিশন (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <strong>%4</strong><br/><br/>%1 পার্টিশন %2 এর জন্য খুবই ছোট। অনুগ্রহ করে কমপক্ষে %3 GiB ধারণ ক্ষমতা সম্পন্ন একটি পার্টিশন নির্বাচন করুন। + + + + <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. + <strong>%2</strong><br/><br/> একটি EFI সিস্টেম পার্টিশন এই সিস্টেমের কোথাও খুঁজে পাওয়া যাবে না। অনুগ্রহ করে ফিরে যান এবং %1 সেট আপ করতে ম্যানুয়াল পার্টিশনিং ব্যবহার করুন। + + + + + + <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. + <strong>%3</strong><br/><br/>%1 %2-এ ইনস্টল করা হবে।<br/><font color="red"> সতর্কীকরণ: </font>%2 পার্টিশনের সকল উপাত্ত হারিয়ে যাবে। + + + + The EFI system partition at %1 will be used for starting %2. + %1 এ EFI সিস্টেম পার্টিশন %2 শুরু করার জন্য ব্যবহার করা হবে। + + + + EFI system partition: + EFI সিস্টেম পার্টিশন: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + পার্টিশন %1 পুনঃআকার করুন। + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + ইনস্টলার '%2' ডিস্কে %1 পার্টিশন পুনঃআকার করতে ব্যর্থ হয়েছে। + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + স্টোরেজ ডিভাইস স্ক্যান করা হচ্ছে... + + + + Partitioning + পার্টিশন করা হচ্ছে + + + + SetHostNameJob + + + Set hostname %1 + হোস্টের নাম %1 নির্ধারণ করুন + + + + Set hostname <strong>%1</strong>. + হোস্টনাম <strong>%1</strong> নির্ধারণ করুন। + + + + Setting hostname %1. + হোস্টনাম %1 নির্ধারণ করা হচ্ছে। + + + + + Internal Error + অভ্যন্তরীণ ত্রুটি + + + + + Cannot write hostname to target system + লক্ষ্য ব্যবস্থায় হোস্টের নাম লেখা যাচ্ছে না + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + কীবোর্ড মডেলটিকে %1, লেআউটটিকে %2-%3 এ সেট করুন + + + + Failed to write keyboard configuration for the virtual console. + ভার্চুয়াল কনসোলের জন্য কীবোর্ড কনফিগারেশন লিখতে ব্যর্থ হয়েছে। + + + + + + Failed to write to %1 + %1 এ লিখতে ব্যর্থ + + + + Failed to write keyboard configuration for X11. + X11 এর জন্য কীবোর্ড কনফিগারেশন লিখতে ব্যর্থ হয়েছে। + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + ব্যবহারকারীর জন্য গুপ্ত-সংকেত নির্ধারণ করুন %1 + + + + Setting password for user %1. + ব্যবহারকারীর %1-এর জন্য গুপ্ত-সংকেত নির্ধারণ করা হচ্ছে। + + + + Bad destination system path. + খারাপ গন্তব্য সিস্টেম পথ। + + + + rootMountPoint is %1 + রুটমাউন্টপয়েন্টটি %1 + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + %1 ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করা যাচ্ছে না। + + + + usermod terminated with error code %1. + %1 ত্রুটি কোড দিয়ে ব্যবহারকারীমোড সমাপ্ত করা হয়েছে। + + + + SetTimezoneJob + + + Set timezone to %1/%2 + %1/%2 এ সময়অঞ্চল নির্ধারণ করুন + + + + Cannot access selected timezone path. + নির্বাচিত সময়অঞ্চল পথে প্রবেশ করতে পারে না। + + + + Bad path: %1 + খারাপ পথ: %1 + + + + Cannot set timezone. + সময়অঞ্চল নির্ধারণ করা যাচ্ছে না। + + + + Link creation failed, target: %1; link name: %2 + লিংক তৈরি ব্যর্থ হয়েছে, লক্ষ্য: %1; লিংকের নাম: %2 + + + + Cannot set timezone, + সময়অঞ্চল নির্ধারণ করা যাচ্ছে না, + + + + Cannot open /etc/timezone for writing + লেখার জন্য /ইত্যাদি/সময়অঞ্চল খোলা যাচ্ছে না + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Sudoers ফাইল chmod করা যাবে না। + + + + Cannot create sudoers file for writing. + লেখার জন্য sudoers ফাইল তৈরি করা যাবে না। + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + StandardButtons + + + &OK + + + + + &Yes + + + + + &No + + + + + &Cancel + এবংবাতিল করুন + + + + &Close + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + ফর্ম + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UmountJob + + + Unmount file systems. + আনমাউন্ট ফাইল সিস্টেমগুলি করুন। + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + ব্যবহারকারীরা + + + + UsersViewStep + + + Users + ব্যবহারকারীরা + + + + VariantModel + + + Key + Column header for key/value + + + + + Value + Column header for key/value + + + + + VolumeGroupBaseDialog + + + Create Volume Group + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + ফর্ম + + + + + Select application and system language + + + + + &About + এবংসম্পর্কে + + + + Open donations website + + + + + &Donate + + + + + Open help and support website + + + + + &Support + এবংসহায়তা + + + + Open issues and bug-tracking website + + + + + &Known issues + এবংপরিচিত বিষয়গুলো + + + + Open release notes website + + + + + &Release notes + এবংনোট প্রকাশ করুন + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + + + + + <h1>Welcome to %1 setup.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 ইনস্টলারে স্বাগতম।</h1> + + + + %1 support + %1 সহায়তা + + + + About %1 setup + + + + + About %1 installer + %1 ইনস্টলার সম্পর্কে + + + + <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. + + + + + WelcomeQmlViewStep + + + Welcome + স্বাগতম + + + + WelcomeViewStep + + + Welcome + স্বাগতম + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + কনফিগারেশন ত্রুটি + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + + + + + calamares-sidebar + + + Show debug information + ডিবাগ তথ্য দেখান + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + কীবোর্ড নকশা: + + + + Layouts + + + + + Type here to test your keyboard + আপনার কীবোর্ড পরীক্ষা করতে এখানে টাইপ করুন + + + + Variants + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + আপনার নাম কি? + + + + Your Full Name + + + + + What name do you want to use to log in? + লগ-ইন করতে আপনি কোন নাম ব্যবহার করতে চান? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + এই কম্পিউটারের নাম কি? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + আপনার অ্যাকাউন্ট সুরক্ষিত রাখতে একটি পাসওয়ার্ড নির্বাচন করুন। + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + প্রশাসক হিসাবের জন্য একই গুপ্ত-সংকেত ব্যবহার করুন। + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + + + + + Support + + + + + Known issues + + + + + Release notes + + + + + Donate + + + + diff --git a/lang/calamares_ca.ts b/lang/calamares_ca.ts index c5c302f97..af0a900f7 100644 --- a/lang/calamares_ca.ts +++ b/lang/calamares_ca.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Gestió dels paràmetres dels muntatges automàtics + + BootInfoWidget - + 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. L'<strong>entorn d'arrencada</strong> d'aquest sistema.<br><br>Els sistemes antics x86 només tenen suport per a <strong>BIOS</strong>.<br>Els moderns normalment usen <strong>EFI</strong>, però també poden mostrar-se com a BIOS si l'entorn d'arrencada s'executa en mode de compatibilitat. - + 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. Aquest sistema s'ha iniciat amb un entorn d'arrencada <strong>EFI</strong>. <br><br> Per configurar una arrencada des d'un entorn EFI, aquest instal·lador ha de desplegar l'aplicació d'un gestor d'arrencada, com ara el <strong>GRUB</strong> o el <strong>systemd-boot</strong> en una <strong>partició EFI del sistema</strong>. Això és automàtic, llevat que trieu fer les particions manualment, en què caldrà que ho configureu vosaltres mateixos. - + 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. Aquest sistema s'ha iniciat amb un entorn d'arrencada <strong>BIOS </strong>.<br><br>Per configurar una arrencada des d'un entorn BIOS, aquest instal·lador ha d'instal·lar un gestor d'arrencada, com ara el <strong>GRUB</strong>, ja sigui al començament d'una partició o al <strong>MBR</strong>, a prop del començament de la taula de particions (millor). Això és automàtic, llevat que trieu fer les particions manualment, en què caldrà que ho configureu pel vostre compte. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Registre d'inici mestre (MBR) de %1 - + Boot Partition Partició d'arrencada - + System Partition Partició del sistema - + Do not install a boot loader No instal·lis cap gestor d'arrencada - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Pàgina en blanc @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulari - + GlobalStorage Emmagatzematge global - + JobQueue Cua de tasques - + Modules Mòduls - + Type: Tipus: - - + + none cap - + Interface: Interfície: - - Tools - Eines + + Crashes Calamares, so that Dr. Konqui can look at it. + Falla el Calamares, perquè el Dr. Konqui pugui mirar-s'ho. - + + Reloads the stylesheet from the branding directory. + Torna a carregar el full d'estil del directori de marques. + + + + Uploads the session log to the configured pastebin. + Puja el registre de la sessió a la carpeta d'enganxar configurada. + + + + Send Session Log + Envia el registre de la sessió + + + Reload Stylesheet Torna a carregar el full d’estil - + + Displays the tree of widget names in the log (for stylesheet debugging). + Mostra l'arbre dels noms dels ginys al registre (per a la depuració del full d'estil). + + + Widget Tree Arbre de ginys - + Debug information Informació de depuració @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Configuració - + Install Instal·la @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Ha fallat la tasca (%1) - + Programmed job failure was explicitly requested. S'ha demanat explícitament la fallada de la tasca programada. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Fet @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Tasca d'exemple (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Executa l'ordre "%1" al sistema de destinació. - + Run command '%1'. Executa l'ordre "%1". - + Running command %1 %2 S'executa l'ordre %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. S'executa l'operació %1. - + Bad working directory path Camí incorrecte al directori de treball - + Working directory %1 for python job %2 is not readable. El directori de treball %1 per a la tasca python %2 no és llegible. - + Bad main script file Fitxer erroni d'script principal - + Main script file %1 for python job %2 is not readable. El fitxer de script principal %1 per a la tasca de python %2 no és llegible. - + Boost.Python error in job "%1". Error de Boost.Python a la tasca "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Es carrega... - + QML Step <i>%1</i>. Pas QML <i>%1</i>. - + Loading failed. Ha fallat la càrrega. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + S'ha completat la comprovació dels requeriments per al mòdul <i>%1</i>. + - + Waiting for %n module(s). S'espera %n mòdul. @@ -236,7 +269,7 @@ - + (%n second(s)) (%n segon) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. S'ha completat la comprovació dels requeriments del sistema. @@ -252,247 +285,241 @@ Calamares::ViewManager - - &Back - &Enrere - - - - &Next - &Següent - - - - &Cancel - &Cancel·la - - - - Cancel setup without changing the system. - Cancel·la la configuració sense canviar el sistema. - - - - Cancel installation without changing the system. - Cancel·leu la instal·lació sense canviar el sistema. - - - + Setup Failed Ha fallat la configuració. - - Would you like to paste the install log to the web? - Voleu enganxar el registre d'instal·lació a la xarxa? + + Installation Failed + La instal·lació ha fallat. - + + Error + Error + + + + &Yes + &Sí + + + + &No + &No + + + + &Close + Tan&ca + + + Install Log Paste URL URL de publicació del registre d'instal·lació - + The upload was unsuccessful. No web-paste was done. La càrrega no s'ha fet correctament. No s'ha enganxat res a la xarxa. - + + Install log posted to + +%1 + +Link copied to clipboard + El registre d'instal·lació s'ha penjat a + +%1 + +L'enllaç s'ha copiat al porta-retalls. + + + Calamares Initialization Failed Ha fallat la inicialització de Calamares - + %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. No es pot instal·lar %1. El Calamares no ha pogut carregar tots els mòduls configurats. Aquest és un problema amb la manera com el Calamares és utilitzat per la distribució. - + <br/>The following modules could not be loaded: <br/>No s'han pogut carregar els mòduls següents: - + + Continue with setup? + Voleu continuar la configuració? + + + Continue with installation? Voleu continuar la instal·lació? - + 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> El programa de configuració %1 està a punt de fer canvis al disc per tal de configurar %2.<br/><strong>No podreu desfer aquests canvis.</strong> - + + 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> + L'instal·lador per a %1 està a punt de fer canvis al disc per tal d'instal·lar-hi %2.<br/><strong>No podreu desfer aquests canvis.</strong> + + + &Set up now Con&figura-ho ara - + + &Install now + &Instal·la'l ara + + + + Go &back + Ves &enrere + + + &Set up Con&figura-ho - + &Install &Instal·la - + Setup is complete. Close the setup program. La configuració s'ha acabat. Tanqueu el programa de configuració. - + + The installation is complete. Close the installer. + La instal·lació s'ha acabat. Tanqueu l'instal·lador. + + + + Cancel setup without changing the system. + Cancel·la la configuració sense canviar el sistema. + + + + Cancel installation without changing the system. + Cancel·leu la instal·lació sense canviar el sistema. + + + + &Next + &Següent + + + + &Back + &Enrere + + + + &Done + &Fet + + + + &Cancel + &Cancel·la + + + Cancel setup? Voleu cancel·lar la configuració? - + Cancel installation? Voleu cancel·lar la instal·lació? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Realment voleu cancel·lar el procés de configuració actual? El programa de configuració es tancarà i es perdran tots els canvis. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Voleu cancel·lar el procés d'instal·lació actual? L'instal·lador es tancarà i tots els canvis es perdran. - - - - &Yes - &Sí - - - - - &No - &No - - - - &Close - Tan&ca - - - - Continue with setup? - Voleu continuar la configuració? - - - - 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> - L'instal·lador per a %1 està a punt de fer canvis al disc per tal d'instal·lar-hi %2.<br/><strong>No podreu desfer aquests canvis.</strong> - - - - &Install now - &Instal·la'l ara - - - - Go &back - Ves &enrere - - - - &Done - &Fet - - - - The installation is complete. Close the installer. - La instal·lació s'ha acabat. Tanqueu l'instal·lador. - - - - Error - Error - - - - Installation Failed - La instal·lació ha fallat. - CalamaresPython::Helper - + Unknown exception type Tipus d'excepció desconeguda - + unparseable Python error Error de Python no analitzable - + unparseable Python traceback Traceback de Python no analitzable - + Unfetchable Python error. Error de Python irrecuperable. - - CalamaresUtils - - - Install log posted to: -%1 - Registre d'instal·lació penjat a -%1 - - CalamaresWindow - - &Back - &Enrere - - - - &Next - &Següent - - - - &Cancel - &Cancel·la - - - + %1 Setup Program Programa de configuració %1 - + %1 Installer Instal·lador de %1 + + + ChangeFilesystemLabelJob - - Show debug information - Informació de depuració + + Set filesystem label on %1. + Estableix l'etiqueta del sistema de fitxers a %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Estableix l'etiqueta del sistema de fitxers <strong>%1</strong> a la partició <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + L'instal·lador no ha pogut actualitzar la taula de particions del disc '%1'. CheckerContainer - + Gathering system information... Es recopila informació del sistema... @@ -500,157 +527,197 @@ L'instal·lador es tancarà i tots els canvis es perdran. ChoicePage - + Form Formulari - - After: - Després: - - - - Boot loader location: - Ubicació del gestor d'arrencada: - - - + Select storage de&vice: Seleccioneu un dispositiu d'e&mmagatzematge: - - - - + + + + Current: Actual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Particons manuals</strong><br/>Podeu crear o canviar de mida les particions manualment. Cal tenir una taula de particions GPT i <strong>una partició /boot de fat32 i 512 Mb per a instal·lacions amb UEFI</strong>. O bé n'useu una d'existent sense formatar-la o bé en creeu una. + + After: + Després: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particions manuals</strong><br/>Podeu crear o canviar la mida de les particions vosaltres mateixos. + + + Reuse %1 as home partition for %2. Reutilitza %1 com a partició de l'usuari per a %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccioneu una partició per encongir i arrossegueu-la per redimensinar-la</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 s'encongirà a %2 MiB i es crearà una partició nova de %3 MB per a %4. - + + Boot loader location: + Ubicació del gestor d'arrencada: + + + <strong>Select a partition to install on</strong> <strong>Seleccioneu una partició per fer-hi la instal·lació.</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No s'ha pogut trobar enlloc una partició EFI en aquest sistema. Si us plau, torneu enrere i use les particions manuals per configurar %1. - + The EFI system partition at %1 will be used for starting %2. La partició EFI de sistema a %1 s'usarà per iniciar %2. - + EFI system partition: Partició EFI del sistema: - + 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. Aquest dispositiu d'emmagatzematge no sembla que tingui un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Esborra el disc</strong><br/>Això <font color="red">suprimirà</font> totes les dades del dispositiu seleccionat. - - 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. - Aquest dispositiu d'emmagatzematge té %1. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - - - - No Swap - Sense intercanvi - - - - Reuse Swap - Reutilitza l'intercanvi - - - - Swap (no Hibernate) - Intercanvi (sense hibernació) - - - - Swap (with Hibernate) - Intercanvi (amb hibernació) - - - - Swap to file - Intercanvi en fitxer - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instal·la'l al costat</strong><br/>L'instal·lador reduirà una partició per fer espai per a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplaça una partició</strong><br/>Reemplaça una partició per %1. - + + 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. + Aquest dispositiu d'emmagatzematge té %1. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. + + + 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. Aquest dispositiu d'emmagatzematge ja té un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. - + 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. Aquest dispositiu d'emmagatzematge ja múltiples sistemes operatius. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faci cap canvi al dispositiu. + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Aquest dispositiu d'emmagatzematge té una de les particions <strong>muntada</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Aquest sistema d'emmagatzematge forma part d'un dispositiu de <strong>RAID inactiu</strong>. + + + + No Swap + Sense intercanvi + + + + Reuse Swap + Reutilitza l'intercanvi + + + + Swap (no Hibernate) + Intercanvi (sense hibernació) + + + + Swap (with Hibernate) + Intercanvi (amb hibernació) + + + + Swap to file + Intercanvi en fitxer + ClearMountsJob - + + Successfully unmounted %1. + S'ha desmuntat correctament %1. + + + + Successfully disabled swap %1. + S'ha inhabilitat correctament l'intercanvi %1. + + + + Successfully cleared swap %1. + S'ha netejat correctament l'intercanvi %1. + + + + Successfully closed mapper device %1. + El dispositiu de mapatge %1 s'ha tancat correctament. + + + + Successfully disabled volume group %1. + El grup de volums %1 s'ha inhabilitat correctament. + + + Clear mounts for partitioning operations on %1 Neteja els muntatges per les operacions de partició a %1 - + Clearing mounts for partitioning operations on %1. Es netegen els muntatges per a les operacions de les particions a %1. - + Cleared all mounts for %1 S'han netejat tots els muntatges de %1 @@ -658,22 +725,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. ClearTempMountsJob - + Clear all temporary mounts. Neteja tots els muntatges temporals. - + Clearing all temporary mounts. Es netegen tots els muntatges temporals. - - Cannot get list of temporary mounts. - No es pot obtenir la llista dels muntatges temporals. - - - + Cleared all temporary mounts. S'han netejat tots els muntatges temporals. @@ -681,18 +743,18 @@ L'instal·lador es tancarà i tots els canvis es perdran. CommandList - - + + Could not run command. No s'ha pogut executar l'ordre. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. L'odre s'executa a l'entorn de l'amfitrió i necessita saber el camí de l'arrel, però no hi ha definit el punt de muntatge de l'arrel. - + The command needs to know the user's name, but no username is defined. L'ordre necessita saber el nom de l'usuari, però no s'ha definit cap nom d'usuari. @@ -700,100 +762,235 @@ L'instal·lador es tancarà i tots els canvis es perdran. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Aquest ordinador no satisfà els requisits mínims per configurar-hi %1.<br/> La configuració no pot continuar. <a href="#details">Detalls...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Aquest ordinador no satisfà els requisits mínims per instal·lar-hi %1.<br/> La instal·lació no pot continuar. <a href="#details">Detalls...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.<br/>La configuració pot continuar, però algunes característiques podrien estar inhabilitades. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Aquest ordinador no satisfà alguns dels requisits recomanats per instal·lar-hi %1.<br/>La instal·lació pot continuar, però algunes característiques podrien estar inhabilitades. - - - - This program will ask you some questions and set up %2 on your computer. - Aquest programa us farà unes preguntes i instal·larà %2 a l'ordinador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Benvingut/da al programa de configuració del Calamares per a %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Benvingut/da a la configuració per a %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Benvingut/da a l'instal·lador Calamares per a %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Benvingut/da a l'instal·lador per a %1.</h1> - - - + Set keyboard model to %1.<br/> Establirà el model del teclat a %1.<br/> - + Set keyboard layout to %1/%2. Establirà la distribució del teclat a %1/%2. - + + Set timezone to %1/%2. + Estableix la zona horària a %1/%2. + + + The system language will be set to %1. La llengua del sistema s'establirà a %1. - + The numbers and dates locale will be set to %1. Els números i les dates de la configuració local s'establiran a %1. - - Set timezone to %1/%2.<br/> - Establirà la zona horària a %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Instal·lació per xarxa. (Inhabilitada: configuració incorrecta) - + Network Installation. (Disabled: Received invalid groups data) Instal·lació per xarxa. (Inhabilitada: dades de grups rebudes no vàlides) - - Network Installation. (Disabled: internal error) - Instal·lació per xarxa. (Inhabilitada: error intern) + + Network Installation. (Disabled: Internal error) + Instal·lació de xarxa. (Inhabilitat: error intern) - + + Network Installation. (Disabled: No package list) + Instal·lació de xarxa. (Inhabilitat: no hi ha llista de paquets) + + + + Package selection + Selecció de paquets + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instal·lació per xarxa. (Inhabilitada: no es poden obtenir les llistes de paquets, comproveu la connexió.) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Aquest ordinador no satisfà els requisits mínims per configurar-hi %1.<br/> La configuració no pot continuar. <a href="#details">Detalls...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Aquest ordinador no satisfà els requisits mínims per instal·lar-hi %1.<br/> La instal·lació no pot continuar. <a href="#details">Detalls...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.<br/>La configuració pot continuar, però algunes característiques podrien estar inhabilitades. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Aquest ordinador no satisfà alguns dels requisits recomanats per instal·lar-hi %1.<br/>La instal·lació pot continuar, però algunes característiques podrien estar inhabilitades. + + + + This program will ask you some questions and set up %2 on your computer. + Aquest programa us farà unes preguntes i instal·larà %2 a l'ordinador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Benvingut/da al programa de configuració del Calamares per a %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Benvingut/da a la configuració per a %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Benvingut/da a l'instal·lador Calamares per a %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Benvingut/da a l'instal·lador per a %1</h1> + + + + Your username is too long. + El nom d'usuari és massa llarg. + + + + '%1' is not allowed as username. + No es permet %1 com a nom d'usuari. + + + + Your username must start with a lowercase letter or underscore. + El nom d'usuari ha de començar amb una lletra en minúscula o una ratlla baixa. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Només es permeten lletres en minúscula, números, ratlles baixes i guions. + + + + Your hostname is too short. + El nom d'amfitrió és massa curt. + + + + Your hostname is too long. + El nom d'amfitrió és massa llarg. + + + + '%1' is not allowed as hostname. + No es permet %1 com a nom d'amfitrió. + + + + Only letters, numbers, underscore and hyphen are allowed. + Només es permeten lletres, números, ratlles baixes i guions. + + + + Your passwords do not match! + Les contrasenyes no coincideixen! + + + + OK! + D'acord! + + + + Setup Failed + Ha fallat la configuració. + + + + Installation Failed + La instal·lació ha fallat. + + + + The setup of %1 did not complete successfully. + La configuració de %1 no s'ha completat correctament. + + + + The installation of %1 did not complete successfully. + La instal·lació de %1 no s'ha completat correctament. + + + + Setup Complete + Configuració completa + + + + Installation Complete + Instal·lació acabada + + + + The setup of %1 is complete. + La configuració de %1 ha acabat. + + + + The installation of %1 is complete. + La instal·lació de %1 ha acabat. + + + + Package Selection + Selecció de paquets + + + + Please pick a product from the list. The selected product will be installed. + Si us plau, trieu un producte de la llista. S'instal·larà el producte seleccionat. + + + + Install option: <strong>%1</strong> + Opció d'instal·lació: <strong>%1</strong> + + + + None + Cap + + + + Summary + Resum + + + + This is an overview of what will happen once you start the setup procedure. + Això és un resum del que passarà quan s'iniciï el procés de configuració. + + + + This is an overview of what will happen once you start the install procedure. + Això és un resum del que passarà quan s'iniciï el procés d'instal·lació. + ContextualProcessJob - + Contextual Processes Job Tasca de procés contextual @@ -801,100 +998,136 @@ L'instal·lador es tancarà i tots els canvis es perdran. CreatePartitionDialog - + Create a Partition Crea una partició - - MiB - MB - - - - Partition &Type: - &Tipus de partició: - - - - &Primary - &Primària - - - - E&xtended - &Ampliada - - - - Fi&le System: - S&istema de fitxers: - - - - LVM LV name - Nom del volum lògic LVM - - - - Flags: - Indicadors: - - - - &Mount Point: - Punt de &muntatge: - - - + Si&ze: Mi&da: - + + MiB + MB + + + + Partition &Type: + &Tipus de partició: + + + + Primar&y + Primar&i + + + + E&xtended + &Ampliada + + + + Fi&le System: + S&istema de fitxers: + + + + LVM LV name + Nom del volum lògic LVM + + + + &Mount Point: + Punt de &muntatge: + + + + Flags: + Indicadors: + + + + Label for the filesystem + Etiqueta per al sistema de fitxers + + + + FS Label: + Etiqueta del sistema de fitxers: + + + En&crypt En&cripta - + Logical Lògica - + Primary Primària - + GPT GPT - + Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Si us plau, seleccioneu-ne un altre. + + + Mountpoint must start with a <tt>/</tt>. + El punt de muntatge ha de començar amb <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Crea una partició nova de %1 MiB a %3 (%2) amb entrades %4. + + + + Create new %1MiB partition on %3 (%2). + Crea una partició nova de %1 MiB a %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Crea una partició nova de %2 MiB a %4 (%3) amb el sistema de fitxers %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Crea una partició nova de <strong>%1 MiB</strong> a <strong>%3</strong> (%2) amb entrades <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Crea una partició nova de <strong>%1 MiB</strong> a <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crea una partició nova de <strong>%2 MiB</strong> a <strong>%4</strong> (%3) amb el sistema de fitxers <strong>%1</strong>. - + + Creating new %1 partition on %2. Es crea la partició nova %1 a %2. - + The installer failed to create partition on disk '%1'. L'instal·lador no ha pogut crear la partició al disc '%1'. @@ -902,27 +1135,27 @@ L'instal·lador es tancarà i tots els canvis es perdran. CreatePartitionTableDialog - + Create Partition Table Crea la taula de particions - + Creating a new partition table will delete all existing data on the disk. La creació d'una nova taula de particions suprimirà totes les dades existents al disc. - + What kind of partition table do you want to create? Quin tipus de taula de particions voleu crear? - + Master Boot Record (MBR) Registre d'inici mestre (MBR) - + GUID Partition Table (GPT) Taula de particions GUID (GPT) @@ -930,22 +1163,22 @@ L'instal·lador es tancarà i tots els canvis es perdran. CreatePartitionTableJob - + Create new %1 partition table on %2. Crea una taula de particions nova %1 a %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crea una taula de particions nova <strong>%1</strong> a <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Es crea la taula de particions nova %1 a %2. - + The installer failed to create a partition table on %1. L'instal·lador no ha pogut crear la taula de particions a %1. @@ -953,45 +1186,41 @@ L'instal·lador es tancarà i tots els canvis es perdran. CreateUserJob - + Create user %1 Crea l'usuari %1 - + Create user <strong>%1</strong>. Crea l'usuari <strong>%1</strong>. - - Creating user %1. + + Preserving home directory + Es preserva el directori personal + + + + + Creating user %1 Es crea l'usuari %1. - - Sudoers dir is not writable. - El directori de sudoers no té permisos d'escriptura. + + Configuring user %1 + Es configura l'usuari %1 - - Cannot create sudoers file for writing. - No es pot crear el fitxer sudoers a escriure. - - - - Cannot chmod sudoers file. - No es pot fer chmod al fitxer sudoers. - - - - Cannot open groups file for reading. - No es pot obrir el fitxer groups per ser llegit. + + Setting file permissions + S'estableixen els permisos del fitxer. CreateVolumeGroupDialog - + Create Volume Group Crea un grup de volums @@ -999,22 +1228,22 @@ L'instal·lador es tancarà i tots els canvis es perdran. CreateVolumeGroupJob - + Create new volume group named %1. Crea un grup de volums nou anomenat %1. - + Create new volume group named <strong>%1</strong>. Crea un grup de volums nou anomenat <strong>%1</strong>. - + Creating new volume group named %1. Es crea el grup de volums nou anomenat %1. - + The installer failed to create a volume group named '%1'. L'instal·lador ha fallat crear un grup de volums anomenat "%1". @@ -1022,18 +1251,18 @@ L'instal·lador es tancarà i tots els canvis es perdran. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Desactiva el grup de volums anomenat %1. - + Deactivate volume group named <strong>%1</strong>. Desactiva el grup de volums anomenat <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. L'instal·lador ha fallat desactivar un grup de volums anomenat %1. @@ -1041,22 +1270,22 @@ L'instal·lador es tancarà i tots els canvis es perdran. DeletePartitionJob - + Delete partition %1. Suprimeix la partició %1. - + Delete partition <strong>%1</strong>. Suprimeix la partició <strong>%1</strong>. - + Deleting partition %1. Se suprimeix la partició %1. - + The installer failed to delete partition %1. L'instal·lador no ha pogut suprimir la partició %1. @@ -1064,46 +1293,46 @@ L'instal·lador es tancarà i tots els canvis es perdran. DeviceInfoWidget - - 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. - El tipus de <strong>taula de particions</strong> actualment present al dispositiu d'emmagatzematge seleccionat. L'única manera de canviar el tipus de taula de particions és esborrar i tornar a crear la taula de particions des de zero, fet que destrueix totes les dades del dispositiu d'emmagatzematge. <br> Aquest instal·lador mantindrà la taula de particions actual llevat que decidiu expressament el contrari. <br>Si no n'esteu segur, als sistemes moderns es prefereix GPT. - - - + This device has a <strong>%1</strong> partition table. Aquest dispositiu té una taula de particions <strong>%1</strong>. - + 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. Aquest dispositiu és un dispositu <strong>de bucle</strong>.<br><br>Això és un pseudodispositiu sense taula de particions que fa que un fitxer sigui accessible com un dispositiu de bloc. Aquest tipus de configuració normalment només conté un sol sistema de fitxers. - + 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. Aquest instal·lador <strong>no pot detectar una taula de particions</strong> al dispositiu d'emmagatzematge seleccionat.<br><br>O bé el dispositiu no té taula de particions o la taula de particions és corrupta o d'un tipus desconegut.<br>Aquest instal·lador pot crear una nova taula de particions, o bé automàticament o a través de la pàgina del partidor manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Aquest és el tipus de taula de particions recomanat per als sistemes moderns que s'inicien des d'un entorn d'arrencada <strong>EFI</strong>. - + <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. <br><br>Aquest tipus de taula de particions és només recomanable en sistemes més antics que s'iniciïn des d'un entorn d'arrencada <strong>BIOS</strong>. Per a la majoria d'altres usos, es recomana fer servir GPT.<br><strong>Avís:</strong> la taula de particions MBR és un estàndard obsolet de l'era MSDOS. <br>Només es poden crear 4 particions <em>primàries</em> i d'aquestes 4, una pot ser una partició <em>ampliada</em>, que pot contenir algunes particions <em>lògiques</em>.<br> + + + 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. + El tipus de <strong>taula de particions</strong> actualment present al dispositiu d'emmagatzematge seleccionat. L'única manera de canviar el tipus de taula de particions és esborrar i tornar a crear la taula de particions des de zero, fet que destrueix totes les dades del dispositiu d'emmagatzematge. <br> Aquest instal·lador mantindrà la taula de particions actual llevat que decidiu expressament el contrari. <br>Si no n'esteu segur, als sistemes moderns es prefereix GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1341,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escriu la configuració de LUKS per a Dracut a %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omet l'escriptura de la configuració de LUKS per a Dracut: la partició "/" no està encriptada - + Failed to open %1 No s'ha pogut obrir %1 @@ -1130,7 +1359,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. DummyCppJob - + Dummy C++ Job Tasca C++ fictícia @@ -1138,123 +1367,167 @@ L'instal·lador es tancarà i tots els canvis es perdran. EditExistingPartitionDialog - + Edit Existing Partition Edita la partició existent - - Content: - Contingut: + + Con&tent: + Con&tingut: - + &Keep &Mantén - + Format Formata - + Warning: Formatting the partition will erase all existing data. Advertència: formatar la partició esborrarà totes les dades existents. - + &Mount Point: &Punt de muntatge: - + Si&ze: Mi&da: - + MiB MB - + Fi&le System: S&istema de fitxers: - + Flags: Indicadors: - - Mountpoint already in use. Please select another one. - El punt de muntatge ja està en ús. Si us plau, seleccioneu-ne un altre. + + Label for the filesystem + Etiqueta per al sistema de fitxers + + + + FS Label: + Etiqueta del sistema de fitxers: EncryptWidget - + Form Formulari - + En&crypt system En&cripta el sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Sembla que el vostre sistema no admet prou bé l'encriptació per encriptar tot el sistema. Podeu activar-la, però el rendiment se'n pot ressentir. + + + Passphrase Contrasenya: - + Confirm passphrase Confirmeu la contrasenya - + + Please enter the same passphrase in both boxes. Si us plau, escriviu la mateixa contrasenya a les dues caselles. + + ErrorDialog + + + Details: + Detalls: + + + + Would you like to paste the install log to the web? + Voleu enganxar el registre d'instal·lació a la xarxa? + + FillGlobalStorageJob - + Set partition information Estableix la informació de la partició - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Instal·la %1 a la partició de sistema <strong>nova</strong> %2 amb funcions <em>%3</em>. + + + Install %1 on <strong>new</strong> %2 system partition. Instal·la %1 a la partició de sistema <strong>nova</strong> %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Estableix la partició <strong>nova</strong> %2 amb el punt de muntatge <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Estableix la partició <strong>nova</strong> %2 amb el punt de muntatge <strong>%1</strong> i funcions <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Estableix la partició <strong>nova</strong> %2 amb el punt de muntatge <strong>%1</strong> %3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Instal·la %2 a la partició de sistema %3 <strong>%1</strong> amb funcions <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Estableix la partició %3 <strong>%1</strong> amb el punt de muntatge <strong>%2</strong> i funcions <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Estableix la partició %3 <strong>%1</strong> amb el punt de muntatge <strong>%2</strong> %4. + + + Install %2 on %3 system partition <strong>%1</strong>. Instal·la %2 a la partició de sistema %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Estableix la partició %3 <strong>%1</strong> amb el punt de muntatge <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instal·la el gestor d'arrencada a <strong>%1</strong>. - + Setting up mount points. S'estableixen els punts de muntatge. @@ -1262,93 +1535,81 @@ L'instal·lador es tancarà i tots els canvis es perdran. FinishedPage - + Form Formulari - + &Restart now &Reinicia ara - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Tot fet.</h1><br/>%1 s'ha configurat a l'ordinador.<br/>Ara podeu començar a usar el nou sistema. - + <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> <html><head/><body><p>Quan aquesta casella està marcada, el sistema es reiniciarà immediatament quan cliqueu a <span style="font-style:italic;">Fet</span> o tanqueu el programa de configuració.</p></body></html> - + <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. - <h1>Tot fet.</h1><br/>%1 s'ha instal·lat a l'ordinador.<br/>Ara podeu reiniciar-lo per tal d'accedir al sistema operatiu nou o bé continuar usant l'entorn autònom de %2. + <h1>Tot fet.</h1><br/>%1 s'ha instal·lat a l'ordinador.<br/>Ara podeu reiniciar-lo per tal d'accedir al sistema operatiu nou o bé continuar usant l'entorn autònom per a %2. - + <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> <html><head/><body><p>Quan aquesta casella està marcada, el sistema es reiniciarà immediatament quan cliqueu a <span style=" font-style:italic;">Fet</span> o tanqueu l'instal·lador.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>La configuració ha fallat.</h1><br/>No s'ha configurat %1 a l'ordinador.<br/>El missatge d'error ha estat el següent: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>La instal·lació ha fallat</h1><br/>No s'ha instal·lat %1 a l'ordinador.<br/>El missatge d'error ha estat el següent: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Acaba + + + FinishedViewStep - - Setup Complete - Configuració completa - - - - Installation Complete - Instal·lació acabada - - - - The setup of %1 is complete. - La configuració de %1 ha acabat. - - - - The installation of %1 is complete. - La instal·lació de %1 ha acabat. + + Finish + Acaba FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formata la partició %1 (sistema de fitxers: %2, mida: %3 MiB) de %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formata la partició de <strong>%3 MiB</strong> <strong>%1</strong> amb el sistema de fitxers <strong>%2</strong>. - + Formatting partition %1 with file system %2. Es formata la partició %1 amb el sistema de fitxers %2. - + The installer failed to format partition %1 on disk '%2'. L'instal·lador no ha pogut formatar la partició %1 del disc '%2'. @@ -1356,72 +1617,72 @@ L'instal·lador es tancarà i tots els canvis es perdran. GeneralRequirements - + has at least %1 GiB available drive space tingui com a mínim %1 GiB d'espai de disc disponible. - + There is not enough drive space. At least %1 GiB is required. No hi ha prou espai de disc disponible. Com a mínim hi ha d'haver %1 GiB. - + has at least %1 GiB working memory tingui com a mínim %1 GiB de memòria de treball. - + The system does not have enough working memory. At least %1 GiB is required. El sistema no té prou memòria de treball. Com a mínim hi ha d'haver %1 GiB. - + is plugged in to a power source estigui connectat a una presa de corrent. - + The system is not plugged in to a power source. El sistema no està connectat a una presa de corrent. - + is connected to the Internet estigui connectat a Internet. - + The system is not connected to the Internet. El sistema no està connectat a Internet. - + is running the installer as an administrator (root) executi l'instal·lador com a administrador (arrel). - + The setup program is not running with administrator rights. El programa de configuració no s'executa amb privilegis d'administrador. - + The installer is not running with administrator rights. L'instal·lador no s'executa amb privilegis d'administrador. - + has a screen large enough to show the whole installer tingui una pantalla prou grossa per mostrar completament l'instal·lador. - + The screen is too small to display the setup program. La pantalla és massa petita per mostrar el programa de configuració. - + The screen is too small to display the installer. La pantalla és massa petita per mostrar l'instal·lador. @@ -1429,7 +1690,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. HostInfoJob - + Collecting information about your machine. Es recopila informació sobre la màquina. @@ -1437,25 +1698,25 @@ L'instal·lador es tancarà i tots els canvis es perdran. IDJob - - + + + - OEM Batch Identifier Identificador de lots d'OEM - + Could not create directories <code>%1</code>. No s'han pogut crear els directoris <code>%1</code>. - + Could not open file <code>%1</code>. No s'ha pogut obrir el fitxer <code>%1</code>. - + Could not write to file <code>%1</code>. No s'ha pogut escriure al fitxer <code>%1</code>. @@ -1463,7 +1724,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. InitcpioJob - + Creating initramfs with mkinitcpio. Es creen initramfs amb mkinitcpio. @@ -1471,7 +1732,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. InitramfsJob - + Creating initramfs. Es creen initramfs. @@ -1479,17 +1740,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. InteractiveTerminalPage - + Konsole not installed El Konsole no està instal·lat. - + Please install KDE Konsole and try again! Si us plau, instal·leu el Konsole de KDE i torneu-ho a intentar! - + Executing script: &nbsp;<code>%1</code> S'executa l'script &nbsp;<code>%1</code> @@ -1497,28 +1758,15 @@ L'instal·lador es tancarà i tots els canvis es perdran. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Establirà el model del teclat a %1.<br/> - - - - Set keyboard layout to %1/%2. - Establirà la distribució del teclat a %1/%2. - - KeyboardQmlViewStep - + Keyboard Teclat @@ -1526,7 +1774,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. KeyboardViewStep - + Keyboard Teclat @@ -1534,65 +1782,88 @@ L'instal·lador es tancarà i tots els canvis es perdran. LCLocaleDialog - + System locale setting Configuració de la llengua del sistema - + 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>. La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interície de línia d'ordres. <br/>La configuració actual és <strong>%1</strong>. - + &Cancel &Cancel·la - + &OK D'ac&ord + + LOSHJob + + + Configuring encrypted swap. + Es configura l'intercanvi encriptat. + + + + No target system available. + No hi ha cap sistema de destinació disponible. + + + + No rootMountPoint is set. + No s'ha establert cap punt de muntatge d'arrel. + + + + No configFilePath is set. + No s'ha establert cap camí de fitxer de configuració. + + LicensePage - + Form Formulari - + <h1>License Agreement</h1> <h1>Acord de llicència</h1> - + I accept the terms and conditions above. Accepto els termes i les condicions anteriors. - + Please review the End User License Agreements (EULAs). Si us plau, consulteu els acords de llicència d'usuari final (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. Aquest procediment de configuració instal·larà programari de propietat subjecte a termes de llicència. - + If you do not agree with the terms, the setup procedure cannot continue. Si no esteu d’acord en els termes, el procediment de configuració no pot continuar. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Aquest procediment de configuració instal·larà programari de propietat subjecte a termes de llicència per tal de proporcionar característiques addicionals i millorar l'experiència de l'usuari. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si no esteu d'acord en els termes, no s'instal·larà el programari de propietat i es faran servir les alternatives de codi lliure. @@ -1600,7 +1871,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. LicenseViewStep - + License Llicència @@ -1608,109 +1879,102 @@ L'instal·lador es tancarà i tots els canvis es perdran. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Controlador %1</strong><br/>de %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Controlador gràfic %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Connector del navegador %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Còdec %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquet %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> - + File: %1 Fitxer: %1 - + + Hide license text + Amaga el text de la llicència + + + Show the license text Mostra el text de la llicència - + Open license agreement in browser. Obre l'acord de llicència al navegador. - - - Hide license text - Amaga el text de la llicència - LocalePage - - The system language will be set to %1. - La llengua del sistema s'establirà a %1. - - - - The numbers and dates locale will be set to %1. - Els números i les dates de la configuració local s'establiran a %1. - - - + Region: Regió: - + Zone: Zona: - - + + &Change... &Canvia... - - - Set timezone to %1/%2.<br/> - Establirà la zona horària a %1/%2.<br/> - LocaleQmlViewStep - + Location Ubicació + + LocaleTests + + + Quit + Surt + + LocaleViewStep - + Location Ubicació @@ -1718,35 +1982,35 @@ L'instal·lador es tancarà i tots els canvis es perdran. LuksBootKeyFileJob - + Configuring LUKS key file. Es configura el fitxer de clau LUKS. - - + + No partitions are defined. No s'ha definit cap partició. - - - + + + Encrypted rootfs setup error Error de configuració de rootfs encriptat. - + Root partition %1 is LUKS but no passphrase has been set. La partició d'arrel %1 és LUKS però no se n'ha establert cap contrasenya. - + Could not create LUKS key file for root partition %1. No s'ha pogut crear el fitxer de clau de LUKS per a la partició d'arrel %1. - + Could not configure LUKS key file on partition %1. No s'ha pogut configurar el fitxer de clau de LUKS a la partició %1. @@ -1754,116 +2018,132 @@ L'instal·lador es tancarà i tots els canvis es perdran. MachineIdJob - + Generate machine-id. Generació de l'id. de la màquina. - + Configuration Error Error de configuració - + No root mount point is set for MachineId. No hi ha punt de muntatge d'arrel establert per a MachineId. + + Map + + + Timezone: %1 + Zona horària: %1 + + + + 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. + Si us plau, seleccioneu la ubicació preferida al mapa perquè l'instal·lador pugui suggerir la configuració +de la llengua i la zona horària. Podeu afinar la configuració suggerida a continuació. Busqueu pel mapa arrossegant-lo +per desplaçar-s'hi i useu els botons +/- per fer ampliar-lo o reduir-lo, o bé useu la rodeta del ratolí. + + NetInstallViewStep - - + Package selection Selecció de paquets - + Office software Programari d'oficina - + Office package Paquet d'oficina - + Browser software Programari de navegador - + Browser package Paquet de navegador - + Web browser Navegador web - + Kernel Nucli - + Services Serveis - + Login Entrada - + Desktop Escriptori - + Applications Aplicacions - + Communication Comunicació - + Development Desenvolupament - + Office Oficina - + Multimedia Multimèdia - + Internet Internet - + Theming Tema - + Gaming Jocs - + Utilities Utilitats @@ -1871,7 +2151,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. NotesQmlViewStep - + Notes Notes @@ -1879,17 +2159,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. OEMPage - + Ba&tch: &Lot:: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Introduïu aquí l'identificador de lots. Això es desarà al sistema de destinació.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configuració d'OEM</h1><p>El Calamares usarà els paràmetres d'OEM durant la configuració del sistema de destinació.</p></body></html> @@ -1897,260 +2177,317 @@ L'instal·lador es tancarà i tots els canvis es perdran. OEMViewStep - + OEM Configuration Configuració d'OEM - + Set the OEM Batch Identifier to <code>%1</code>. Estableix l'identificador de lots d'OEM a<code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Seleccioneu la regió preferida o useu els paràmetres per defecte. + + + + + + Timezone: %1 + Zona horària: %1 + + + + Select your preferred Zone within your Region. + Trieu la zona preferida dins de la regió. + + + + Zones + Zones + + + + You can fine-tune Language and Locale settings below. + Podeu acabar d'ajustar els paràmetres locals i de llengua a continuació. + + PWQ - + Password is too short La contrasenya és massa curta. - + Password is too long La contrasenya és massa llarga. - + Password is too weak La contrasenya és massa dèbil. - + Memory allocation error when setting '%1' Error d'assignació de memòria en establir "%1" - + Memory allocation error Error d'assignació de memòria - + The password is the same as the old one La contrasenya és la mateixa que l'anterior. - + The password is a palindrome La contrasenya és un palíndrom. - + The password differs with case changes only La contrasenya només és diferent per les majúscules o minúscules. - + The password is too similar to the old one La contrasenya és massa semblant a l'anterior. - + The password contains the user name in some form La contrasenya conté el nom d'usuari d'alguna manera. - + The password contains words from the real name of the user in some form La contrasenya conté paraules del nom real de l'usuari d'alguna manera. - + The password contains forbidden words in some form La contrasenya conté paraules prohibides d'alguna manera. - - The password contains less than %1 digits - La contrasenya és inferior a %1 dígits. - - - + The password contains too few digits La contrasenya conté massa pocs dígits. - - The password contains less than %1 uppercase letters - La contrasenya conté menys de %1 lletres majúscules. - - - + The password contains too few uppercase letters La contrasenya conté massa poques lletres majúscules. - - - The password contains less than %1 lowercase letters - La contrasenya conté menys de %1 lletres minúscules. + + + The password contains fewer than %n lowercase letters + + La contrasenya conté menys d'%1 lletra minúscula. + La contrasenya conté menys de %1 lletres minúscules. + - + The password contains too few lowercase letters La contrasenya conté massa poques lletres minúscules. - - The password contains less than %1 non-alphanumeric characters - La contrasenya conté menys de %1 caràcters no alfanumèrics. - - - + The password contains too few non-alphanumeric characters La contrasenya conté massa pocs caràcters no alfanumèrics. - - The password is shorter than %1 characters - La contrasenya és més curta de %1 caràcters. - - - + The password is too short La contrasenya és massa curta. - - The password is just rotated old one - La contrasenya és només l'anterior capgirada. - - - - The password contains less than %1 character classes - La contrasenya conté menys de %1 classes de caràcters. - - - + The password does not contain enough character classes La contrasenya no conté prou classes de caràcters. - - The password contains more than %1 same characters consecutively - La contrasenya conté més de %1 caràcters iguals consecutius. - - - + The password contains too many same characters consecutively La contrasenya conté massa caràcters iguals consecutius. - - The password contains more than %1 characters of the same class consecutively - La contrasenya conté més de %1 caràcters consecutius de la mateixa classe. - - - + The password contains too many characters of the same class consecutively La contrasenya conté massa caràcters consecutius de la mateixa classe. - - - The password contains monotonic sequence longer than %1 characters - La contrasenya conté una seqüència monòtona més llarga de %1 caràcters. + + + The password contains fewer than %n digits + + La contrasenya és inferior a %n dígit. + La contrasenya és inferior a %n dígits. + + + + + The password contains fewer than %n uppercase letters + + La contrasenya conté menys d'%n lletra majúscula. + La contrasenya conté menys de %n lletres majúscules. + + + + + The password contains fewer than %n non-alphanumeric characters + + La contrasenya conté menys d'%n caràcter no alfanumèric. + La contrasenya conté menys de %n caràcters no alfanumèrics. + + + + + The password is shorter than %n characters + + La contrasenya és inferior a %n caràcter. + La contrasenya és inferior a %n caràcters. + - + + The password is a rotated version of the previous one + La contrasenya és una versió capgirada de l'anterior. + + + + The password contains fewer than %n character classes + + La contrasenya conté menys d'%n classe de caràcters. + La contrasenya conté menys de %n classes de caràcters. + + + + + The password contains more than %n same characters consecutively + + La contrasenya conté més d'%n caràcter igual consecutiu. + La contrasenya conté més de %n caràcters iguals consecutius. + + + + + The password contains more than %n characters of the same class consecutively + + La contrasenya conté més d'%n caràcter consecutiu de la mateixa classe. + La contrasenya conté més de %n caràcters consecutius de la mateixa classe. + + + + + The password contains monotonic sequence longer than %n characters + + La contrasenya conté una seqüència monòtona més llarga d'%n caràcter. + La contrasenya conté una seqüència monòtona més llarga de %n caràcters. + + + + The password contains too long of a monotonic character sequence La contrasenya conté una seqüència monòtona de caràcters massa llarga. - + No password supplied No s'ha proporcionat cap contrasenya. - + Cannot obtain random numbers from the RNG device No es poden obtenir nombres aleatoris del dispositiu RNG. - + Password generation failed - required entropy too low for settings Ha fallat la generació de la contrasenya. Entropia necessària massa baixa per als paràmetres. - + The password fails the dictionary check - %1 La contrasenya no aprova la comprovació del diccionari: %1 - + The password fails the dictionary check La contrasenya no aprova la comprovació del diccionari. - + Unknown setting - %1 Paràmetre desconegut: %1 - + Unknown setting Paràmetre desconegut - + Bad integer value of setting - %1 Valor enter del paràmetre incorrecte: %1 - + Bad integer value Valor enter incorrecte - + Setting %1 is not of integer type El paràmetre %1 no és del tipus enter. - + Setting is not of integer type El paràmetre no és del tipus enter. - + Setting %1 is not of string type El paràmetre %1 no és del tipus cadena. - + Setting is not of string type El paràmetre no és del tipus cadena. - + Opening the configuration file failed Ha fallat obrir el fitxer de configuració. - + The configuration file is malformed El fitxer de configuració té una forma incorrecta. - + Fatal failure Fallada fatal - + Unknown error Error desconegut - + Password is empty La contrasenya és buida. @@ -2158,40 +2495,48 @@ L'instal·lador es tancarà i tots els canvis es perdran. PackageChooserPage - + Form Formulari - + Product Name Nom del producte - + TextLabel Etiqueta de text - + Long Product Description Descripció llarga del producte - + Package Selection Selecció de paquets - + Please pick a product from the list. The selected product will be installed. Si us plau, trieu un producte de la llista. S'instal·larà el producte seleccionat. + + PackageChooserQmlViewStep + + + Packages + Paquets + + PackageChooserViewStep - + Packages Paquets @@ -2199,12 +2544,12 @@ L'instal·lador es tancarà i tots els canvis es perdran. PackageModel - + Name Nom - + Description Descripció @@ -2212,17 +2557,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. Page_Keyboard - + Form Formulari - + Keyboard Model: Model del teclat: - + Type here to test your keyboard Escriviu aquí per comprovar el teclat @@ -2230,139 +2575,139 @@ L'instal·lador es tancarà i tots els canvis es perdran. Page_UserSetup - + Form Formulari - + What is your name? Com us dieu? - - What name do you want to use to log in? - Quin nom voleu usar per iniciar la sessió d'usuari? - - - - Choose a password to keep your account safe. - Trieu una contrasenya per tal de mantenir el compte d'usuari segur. - - - - - <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> - <small>Escriviu la mateixa contrasenya dues vegades, de manera que se'n puguin comprovar els errors de mecanografia. Una bona contrasenya contindrà una barreja de lletres, números i signes de puntuació, hauria de tenir un mínim de 8 caràcters i s'hauria de modificar a intervals regulars de temps.</small> - - - - What is the name of this computer? - Com es diu aquest ordinador? - - - + Your Full Name El nom complet - + + What name do you want to use to log in? + Quin nom voleu usar per iniciar la sessió? + + + login entrada - + + What is the name of this computer? + Com es diu aquest ordinador? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa.</small> - + Computer Name Nom de l'ordinador - - + + Choose a password to keep your account safe. + Trieu una contrasenya per tal de mantenir el compte segur. + + + + + <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> + <small>Escriviu la mateixa contrasenya dos cops per poder-ne comprovar els errors de mecanografia. Una bona contrasenya contindrà una barreja de lletres, números i signes de puntuació, hauria de tenir un mínim de 8 caràcters i s'hauria de modificar a intervals regulars.</small> + + + + Password Contrasenya - - + + Repeat Password Repetiu la contrasenya. - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no en podreu fer una de dèbil. - + Require strong passwords. Requereix contrasenyes fortes. - + Log in automatically without asking for the password. Entra automàticament sense demanar la contrasenya. - + Use the same password for the administrator account. Usa la mateixa contrasenya per al compte d'administració. - + Choose a password for the administrator account. Trieu una contrasenya per al compte d'administració. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - <small>Escriviu la mateixa contrasenya dues vegades, per tal de poder-ne comprovar els errors de mecanografia.</small> + <small>Escriviu la mateixa contrasenya dos cops per poder-ne comprovar els errors de mecanografia.</small> PartitionLabelsView - + Root Arrel - + Home Inici - + Boot Arrencada - + EFI system Sistema EFI - + Swap Intercanvi - + New partition for %1 Partició nova per a %1 - + New partition Partició nova - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2716,39 @@ L'instal·lador es tancarà i tots els canvis es perdran. PartitionModel - - + + Free Space Espai lliure - - + + New partition Partició nova - + Name Nom - + File System Sistema de fitxers - + + File System Label + Etiqueta del sistema de fitxers + + + Mount Point Punt de muntatge - + Size Mida @@ -2406,77 +2756,77 @@ L'instal·lador es tancarà i tots els canvis es perdran. PartitionPage - + Form Formulari - + Storage de&vice: Dispositiu d'e&mmagatzematge: - + &Revert All Changes &Desfés tots els canvis - + New Partition &Table Nova &taula de particions - + Cre&ate Cre&a - + &Edit &Edita - + &Delete Su&primeix - + New Volume Group Grup de volums nou - + Resize Volume Group Canvia la mida del grup de volums - + Deactivate Volume Group Desactiva el grup de volums - + Remove Volume Group Suprimeix el grup de volums - + I&nstall boot loader on: I&nstal·la el gestor d'arrencada a: - + Are you sure you want to create a new partition table on %1? Esteu segurs que voleu crear una nova taula de particions a %1? - + Can not create new partition No es pot crear la partició nova - + 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. La taula de particions de %1 ja té %2 particions primàries i no se n'hi poden afegir més. Si us plau, suprimiu una partició primària i afegiu-hi una partició ampliada. @@ -2484,117 +2834,107 @@ L'instal·lador es tancarà i tots els canvis es perdran. PartitionViewStep - + Gathering system information... Es recopila informació del sistema... - + Partitions Particions - - Install %1 <strong>alongside</strong> another operating system. - Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu. + + Unsafe partition actions are enabled. + Les accions de partició no segures estan habilitades. - - <strong>Erase</strong> disk and install %1. - <strong>Esborra</strong> el disc i instal·la-hi %1. + + Partitioning is configured to <b>always</b> fail. + Les particions estan configurades per fallar <b>sempre</b>. - - <strong>Replace</strong> a partition with %1. - <strong>Reemplaça</strong> una partició amb %1. + + No partitions will be changed. + No es canviarà cap partició. - - <strong>Manual</strong> partitioning. - Particions <strong>manuals</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu al disc <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Esborra</strong> el disc <strong>%2</strong> (%3) i instal·la-hi %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Reemplaça</strong> una partició del disc <strong>%2</strong> (%3) amb %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particions <strong>manuals</strong> del disc <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disc <strong>%1</strong> (%2) - - - + Current: Actual: - + After: Després: - + No EFI system partition configured No hi ha cap partició EFI de sistema configurada - - 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>esp</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. - Cal una partició EFI de sistema per iniciar %1. <br/><br/>Per configurar una partició EFI de sistema, torneu enrere i seleccioneu o creeu un sistema de fitxers FAT32 amb la bandera <strong>esp</strong> habilitada i el punt de muntatge <strong>%2</strong>. <br/><br/>Podeu continuar sense la creació d'una partició EFI de sistema, però el sistema podria no iniciar-se. + + EFI system partition configured incorrectly + Partició de sistema EFI configurada incorrectament - - EFI system partition flag not set - No s'ha establert la bandera de la partició EFI del sistema + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Cal una partició de sistema EFI per iniciar %1. <br/><br/>Per configurar-ne una, torneu enrere i seleccioneu o creeu un sistema de fitxers adequat. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Cal una partició EFI de sistema per iniciar %1. <br/><br/> Ja s'ha configurat una partició amb el punt de muntatge <strong>%2</strong> però no se n'ha establert la bandera <strong>esp</strong>. Per establir-la-hi, torneu enrere i editeu la partició. <br/><br/>Podeu continuar sense establir la bandera, però el sistema podria no iniciar-se. + + The filesystem must be mounted on <strong>%1</strong>. + El sistema de fitxers ha d'estar muntat a <strong>%1</strong>. - + + The filesystem must have type FAT32. + El sistema de fitxers ha de ser del tipus FAT32. + + + + The filesystem must be at least %1 MiB in size. + El sistema de fitxers ha de tenir un mínim de %1 MiB. + + + + The filesystem must have flag <strong>%1</strong> set. + El sistema de fitxers ha de tenir la bandera <strong>%1</strong> establerta. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Podeu continuar sense configurar una partició del sistema EFI, però és possible que el sistema no s'iniciï. + + + Option to use GPT on BIOS Opció per usar GPT amb BIOS - - 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. - La millor opció per a tots els sistemes és una taula de particions GPT. Aquest instal·lador també admet aquesta configuració per a sistemes BIOS.<br/><br/>Per configurar una taula de particions GPT en un sistema BIOS, (si no s'ha fet ja) torneu enrere i establiu la taula de particions a GPT, després creeu una partició sense formatar de 8 MB amb la bandera <strong>bios_grub</strong> habilitada.<br/><br/>Cal una partició sense format de 8 MB per iniciar %1 en un sistema BIOS amb GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + La millor opció per a tots els sistemes és una taula de particions GPT. Aquest instal·lador també admet aquesta configuració per a sistemes BIOS.<br/><br/>Per configurar una taula de particions GPT en un sistema BIOS, (si no s'ha fet ja) torneu enrere i establiu la taula de particions a GPT, després creeu una partició sense formatar de 8 MB amb la bandera <strong>%2</strong> habilitada.<br/><br/>Cal una partició sense format de 8 MB per iniciar %1 en un sistema BIOS amb GPT. - + Boot partition not encrypted Partició d'arrencada sense encriptar - + 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. S'ha establert una partició d'arrencada separada conjuntament amb una partició d'arrel encriptada, però la partició d'arrencada no està encriptada.<br/><br/>Hi ha assumptes de seguretat amb aquest tipus de configuració, perquè hi ha fitxers del sistema importants en una partició no encriptada.<br/>Podeu continuar, si així ho desitgeu, però el desbloqueig del sistema de fitxers succeirà després, durant l'inici del sistema.<br/>Per encriptar la partició d'arrencada, torneu enrere i torneu-la a crear seleccionant <strong>Encripta</strong> a la finestra de creació de la partició. - + has at least one disk device available. tingui com a mínim un dispositiu de disc disponible. - + There are no partitions to install on. No hi ha particions per fer-hi una instal·lació. @@ -2602,13 +2942,13 @@ L'instal·lador es tancarà i tots els canvis es perdran. PlasmaLnfJob - + Plasma Look-and-Feel Job Tasca d'aspecte i comportament del Plasma - - + + Could not select KDE Plasma Look-and-Feel package No s'ha pogut seleccionar el paquet de l'aspecte i comportament del Plasma de KDE. @@ -2616,17 +2956,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. PlasmaLnfPage - + Form Formulari - + 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. Si us plau, trieu un aspecte i comportament per a l'escriptori Plasma de KDE. També podeu ometre aquest pas i establir-ho un cop configurat el sistema. Quan cliqueu en una selecció d'aspecte i comportament podreu veure'n una previsualització. - + 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. Si us plau, trieu un aspecte i comportament per a l'escriptori Plasma de KDE. També podeu saltar aquest pas i configurar-ho un cop instal·lat el sistema. Quan cliqueu en una selecció d'aspecte i comportament podreu veure'n una previsualització. @@ -2634,7 +2974,7 @@ L'instal·lador es tancarà i tots els canvis es perdran. PlasmaLnfViewStep - + Look-and-Feel Aspecte i comportament @@ -2642,17 +2982,17 @@ L'instal·lador es tancarà i tots els canvis es perdran. PreserveFiles - + Saving files for later ... Es desen fitxers per a més tard... - + No files configured to save for later. No s'ha configurat cap fitxer per desar per a més tard. - + Not all of the configured files could be preserved. No s'han pogut conservar tots els fitxers configurats. @@ -2660,14 +3000,14 @@ L'instal·lador es tancarà i tots els canvis es perdran. ProcessResult - + There was no output from the command. No hi ha hagut sortida de l'ordre. - + Output: @@ -2676,52 +3016,52 @@ Sortida: - + External command crashed. L'ordre externa ha fallat. - + Command <i>%1</i> crashed. L'ordre <i>%1</i> ha fallat. - + External command failed to start. L'ordre externa no s'ha pogut iniciar. - + Command <i>%1</i> failed to start. L'ordre <i>%1</i> no s'ha pogut iniciar. - + Internal error when starting command. Error intern en iniciar l'ordre. - + Bad parameters for process job call. Paràmetres incorrectes per a la crida de la tasca del procés. - + External command failed to finish. L'ordre externa no ha acabat correctament. - + Command <i>%1</i> failed to finish in %2 seconds. L'ordre <i>%1</i> no ha pogut acabar en %2 segons. - + External command finished with errors. L'ordre externa ha acabat amb errors. - + Command <i>%1</i> finished with exit code %2. L'ordre <i>%1</i> ha acabat amb el codi de sortida %2. @@ -2729,89 +3069,95 @@ Sortida: QObject - - Default Keyboard Model - Model de teclat per defecte - - - - - Default - Per defecte - - - - unknown - desconeguda - - - - extended - ampliada - - - - unformatted - sense format - - - - swap - Intercanvi - - - - Unpartitioned space or unknown partition table - Espai sense partir o taula de particions desconeguda - - - - (no mount point) - (sense punt de muntatge) - - - - Requirements checking for module <i>%1</i> is complete. - S'ha completat la comprovació dels requeriments per al mòdul <i>%1</i>. - - - + %1 (%2) %1 (%2) - - No product - Cap producte + + unknown + desconeguda - - No description provided. - No se n'ha proporcionat cap descripció. + + extended + ampliada - - - - + + unformatted + sense format + + + + swap + Intercanvi + + + + + Default + Per defecte + + + + + + File not found No s'ha trobat el fitxer. - + Path <pre>%1</pre> must be an absolute path. El camí <pre>%1</pre> ha de ser un camí absolut. - + + Directory not found + No s'ha trobat el directori. + + + + Could not create new random file <pre>%1</pre>. No s'ha pogut crear el fitxer aleatori nou <pre>%1</pre>. + + + No product + Cap producte + + + + No description provided. + No se n'ha proporcionat cap descripció. + + + + (no mount point) + (sense punt de muntatge) + + + + Unpartitioned space or unknown partition table + Espai sense partir o taula de particions desconeguda + + + + Recommended + + + <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> + <p>Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.<br/> +La configuració pot continuar, però algunes característiques podrien estar inhabilitades.</p> + RemoveUserJob - + Remove live user from target system Suprimeix l'usuari de la sessió autònoma del sistema de destinació @@ -2819,18 +3165,18 @@ Sortida: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Suprimeix el grup de volums anomenat %1. - + Remove Volume Group named <strong>%1</strong>. Suprimeix el grup de volums anomenat <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. L'instal·lador ha fallat suprimir un grup de volums anomenat "%1". @@ -2838,143 +3184,160 @@ Sortida: ReplaceWidget - + Form Formulari - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccioneu on instal·lar %1.<br/><font color="red">Atenció: </font>això suprimirà tots els fitxers de la partició seleccionada. - + The selected item does not appear to be a valid partition. L'element seleccionat no sembla que sigui una partició vàlida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 no es pot instal·lar en un espai buit. Si us plau, seleccioneu una partició existent. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no es pot instal·lar en un partició ampliada. Si us plau, seleccioneu una partició existent primària o lògica. - + %1 cannot be installed on this partition. %1 no es pot instal·lar en aquesta partició. - + Data partition (%1) Partició de dades (%1) - + Unknown system partition (%1) Partició de sistema desconeguda (%1) - + %1 system partition (%2) %1 partició de sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partició %1 és massa petita per a %2. Si us plau, seleccioneu una partició amb capacitat d'almenys %3 GB. - + <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. <strong>%2</strong><br/><br/>No es pot trobar cap partició EFI enlloc del sistema. Si us plau, torneu enrere i useu les particions manuals per establir %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 s'instal·larà a %2.<br/><font color="red">Atenció: </font>totes les dades de la partició %2 es perdran. - + The EFI system partition at %1 will be used for starting %2. La partició EFI de sistema a %1 s'usarà per iniciar %2. - + EFI system partition: Partició EFI del sistema: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Aquest ordinador no satisfà els requisits mínims per instal·lar-hi %1.<br/> +La instal·lació no pot continuar.</p> + + + + <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> + <p>Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.<br/> +La configuració pot continuar, però algunes característiques podrien estar inhabilitades.</p> + + ResizeFSJob - + Resize Filesystem Job Tasca de canviar de mida un sistema de fitxers - + Invalid configuration Configuració no vàlida - + The file-system resize job has an invalid configuration and will not run. La tasca de canviar de mida un sistema de fitxers té una configuració no vàlida i no s'executarà. - + KPMCore not Available KPMCore no disponible - + Calamares cannot start KPMCore for the file-system resize job. El Calamares no pot iniciar KPMCore per a la tasca de canviar de mida un sistema de fitxers. - - - - - + + + + + Resize Failed Ha fallat el canvi de mida. - + The filesystem %1 could not be found in this system, and cannot be resized. El sistema de fitxers %1 no s'ha pogut trobar en aquest sistema i, per tant, no se'n pot canviar la mida. - + The device %1 could not be found in this system, and cannot be resized. El dispositiu &1 no s'ha pogut trobar en aquest sistema i, per tant, no se'n pot canviar la mida. - - + + The filesystem %1 cannot be resized. No es pot canviar la mida del sistema de fitxers %1. - - + + The device %1 cannot be resized. No es pot canviar la mida del dispositiu %1. - + The filesystem %1 must be resized, but cannot. Cal canviar la mida del sistema de fitxers %1, però no es pot. - + The device %1 must be resized, but cannot Cal canviar la mida del dispositiu %1, però no es pot. @@ -2982,22 +3345,22 @@ Sortida: ResizePartitionJob - + Resize partition %1. Canvia la mida de la partició %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Canvia la mida de la partició de <strong>%2 MiB</strong>, <strong>%1</strong>, a <strong>%3 MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Es canvia la mida de la partició %1 de %2 MiB a %3 MiB. - + The installer failed to resize partition %1 on disk '%2'. L'instal·lador no ha pogut canviar la mida de la partició %1 del disc %2. @@ -3005,7 +3368,7 @@ Sortida: ResizeVolumeGroupDialog - + Resize Volume Group Canvia la mida del grup de volums @@ -3013,18 +3376,18 @@ Sortida: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Canvia la mida del grup de volums anomenat %1 de %2 a %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Canvia la mida del grup de volums anomenat <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. L'instal·lador no ha pogut canviar la mida del grup de volums anomenat "%1". @@ -3032,53 +3395,25 @@ Sortida: ResultsListDialog - + For best results, please ensure that this computer: Per obtenir els millors resultats, assegureu-vos, si us plau, que aquest ordinador... - + System requirements Requisits del sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Aquest ordinador no satisfà els requisits mínims per configurar-hi %1.<br/> La configuració no pot continuar. <a href="#details">Detalls...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Aquest ordinador no satisfà els requisits mínims per instal·lar-hi %1.<br/> La instal·lació no pot continuar. <a href="#details">Detalls...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.<br/>La configuració pot continuar, però algunes característiques podrien estar inhabilitades. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Aquest ordinador no satisfà alguns dels requisits recomanats per instal·lar-hi %1.<br/>La instal·lació pot continuar, però algunes característiques podrien estar inhabilitades. - - - - This program will ask you some questions and set up %2 on your computer. - Aquest programa us farà unes preguntes i instal·larà %2 a l'ordinador. - - ScanningDialog - + Scanning storage devices... S'escanegen els dispositius d'emmagatzematge... - + Partitioning Particions @@ -3086,29 +3421,29 @@ Sortida: SetHostNameJob - + Set hostname %1 Estableix el nom d'amfitrió %1 - + Set hostname <strong>%1</strong>. Estableix el nom d'amfitrió <strong>%1</strong>. - + Setting hostname %1. S'estableix el nom d'amfitrió %1. + - Internal Error Error intern - - + + Cannot write hostname to target system No es pot escriure el nom d'amfitrió al sistema de destinació @@ -3116,29 +3451,29 @@ Sortida: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Canvia el model de teclat a %1, la disposició de teclat a %2-%3 - + Failed to write keyboard configuration for the virtual console. No s'ha pogut escriure la configuració del teclat per a la consola virtual. - - - + + + Failed to write to %1 No s'ha pogut escriure a %1 - + Failed to write keyboard configuration for X11. No s'ha pogut escriure la configuració del teclat per X11. - + Failed to write keyboard configuration to existing /etc/default directory. Ha fallat escriure la configuració del teclat al directori existent /etc/default. @@ -3146,82 +3481,82 @@ Sortida: SetPartFlagsJob - + Set flags on partition %1. Estableix les banderes a la partició %1. - + Set flags on %1MiB %2 partition. Estableix les banderes a la partició %2 de %1 MiB. - + Set flags on new partition. Estableix les banderes a la partició nova. - + Clear flags on partition <strong>%1</strong>. Neteja les banderes de la partició <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Neteja les banderes de la partició <strong>%2</strong> de %1 MiB. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Estableix la bandera de la partició <strong>%2</strong> de %1 MiB com a <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Es netegen les banderes de la partició <strong>%2</strong>de %1 MiB. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - S'estableixen les banderes <strong>%3</strong> a la partició <strong>%2</strong> de %1 MiB. - - - + Clear flags on new partition. Neteja les banderes de la partició nova. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Estableix la bandera <strong>%2</strong> a la partició <strong>%1</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Estableix la bandera de la partició <strong>%2</strong> de %1 MiB com a <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Estableix la bandera de la partició nova com a <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Es netegen les banderes de la partició <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Es netegen les banderes de la partició <strong>%2</strong>de %1 MiB. + + + Clearing flags on new partition. Es netegen les banderes de la partició nova. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Establint les banderes <strong>%2</strong> a la partició <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + S'estableixen les banderes <strong>%3</strong> a la partició <strong>%2</strong> de %1 MiB. + + + Setting flags <strong>%1</strong> on new partition. S'estableixen les banderes <strong>%1</strong> a la partició nova. - + The installer failed to set flags on partition %1. L'instal·lador ha fallat en establir les banderes a la partició %1. @@ -3229,42 +3564,42 @@ Sortida: SetPasswordJob - + Set password for user %1 Establiu una contrasenya per a l'usuari %1 - + Setting password for user %1. S'estableix la contrasenya per a l'usuari %1. - + Bad destination system path. Destinació errònia de la ruta del sistema. - + rootMountPoint is %1 El punt de muntatge de l'arrel és %1 - + Cannot disable root account. No es pot inhabilitar el compte d'arrel. - + passwd terminated with error code %1. El procés passwd ha acabat amb el codi d'error %1. - + Cannot set password for user %1. No es pot establir la contrasenya per a l'usuari %1. - + usermod terminated with error code %1. usermod ha terminat amb el codi d'error %1. @@ -3272,45 +3607,82 @@ Sortida: SetTimezoneJob - + Set timezone to %1/%2 Estableix la zona horària a %1/%2 - + Cannot access selected timezone path. No es pot accedir al camí a la zona horària seleccionada. - + Bad path: %1 Camí incorrecte: %1 - + Cannot set timezone. No es pot establir la zona horària. - + Link creation failed, target: %1; link name: %2 Ha fallat la creació del vincle; destinació: %1, nom del vincle: %2 - + Cannot set timezone, No es pot establir la zona horària, - + Cannot open /etc/timezone for writing No es pot obrir /etc/timezone per escriure-hi + + SetupGroupsJob + + + Preparing groups. + Es preparen els grups. + + + + + Could not create groups in target system + No s'han pogut crear grups al sistema de destinació. + + + + These groups are missing in the target system: %1 + Aquests grups falten al sistema de destinació: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configuració d'usuaris de <pre>sudo</pre> + + + + Cannot chmod sudoers file. + No es pot fer chmod al fitxer d'usuaris de sudo. + + + + Cannot create sudoers file for writing. + No es pot crear el fitxer d'usuaris de sudo per escriure-hi. + + ShellProcessJob - + Shell Processes Job Tasca de processos de l'intèrpret d'ordres @@ -3318,81 +3690,117 @@ Sortida: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Això és un resum del que passarà quan s'iniciï el procés de configuració. + + &OK + D'ac&ord - - This is an overview of what will happen once you start the install procedure. - Això és un resum del que passarà quan s'iniciï el procés d'instal·lació. + + &Yes + &Sí - - - SummaryViewStep - - Summary - Resum + + &No + &No + + + + &Cancel + &Cancel·la + + + + &Close + Tan&ca TrackingInstallJob - + Installation feedback Informació de retorn de la instal·lació - + Sending installation feedback. S'envia la informació de retorn de la instal·lació. - + Internal error in install-tracking. Error intern a install-tracking. - + HTTP request timed out. La petició HTTP ha esgotat el temps d'espera. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Informació de retorn d'usuaris de KDE + + + + Configuring KDE user feedback. + Es configura la informació de retorn dels usuaris de KDE. + + + + + Error in KDE user feedback configuration. + Error de configuració de la informació de retorn dels usuaris de KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + No s'ha pogut configurar la informació de retorn dels usuaris de KDE correctament. Error d'script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + No s'ha pogut configurar la informació de retorn dels usuaris de KDE correctament. Error del Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Informació de retorn de la màquina - + Configuring machine feedback. Es configura la informació de retorn de la màquina. - - + + Error in machine feedback configuration. Error a la configuració de la informació de retorn de la màquina. - + Could not configure machine feedback correctly, script error %1. No s'ha pogut configurar la informació de retorn de la màquina correctament. Error d'script %1. - + Could not configure machine feedback correctly, Calamares error %1. No s'ha pogut configurar la informació de retorn de la màquina correctament. Error del Calamares %1. @@ -3400,106 +3808,97 @@ Sortida: TrackingPage - + Form Formulari - + Placeholder Marcador de posició - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Si seleccioneu això, no enviareu <span style=" font-weight:600;">cap mena d'informació</span> sobre la vostra instal·lació.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Cliqueu aquí per no enviar <span style=" font-weight:600;">cap mena d'informació</span> de la vostra instal·lació.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Cliqueu aquí per a més informació sobre la informació de retorn dels usuaris.</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - El seguiment de la instal·lació ajuda %1 a veure quants usuaris tenen, en quin maquinari s'instal·la %1 i (amb les últimes dues opcions de baix), a obtenir informació contínua d'aplicacions preferides. Per veure el que s'enviarà, cliqueu a la icona d'ajuda contigua a cada àrea. + + 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. + El seguiment ajuda els desenvolupadors de %1 a veure amb quina freqüència, en quin maquinari s’instal·la i quines aplicacions s’usen. Per veure què s’enviarà, cliqueu a la icona d’ajuda que hi ha al costat de cada àrea. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Si seleccioneu això, enviareu informació sobre la vostra instal·lació i el vostre maquinari. Aquesta informació <b>només s'enviarà un cop</b> després d'acabar la instal·lació. + + 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. + Si seleccioneu això, enviareu informació de la vostra instal·lació i el vostre maquinari. Aquesta informació només s'enviarà <b>un cop</b> després d'acabar la instal·lació. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Si seleccioneu això, enviareu informació <b>periòdicament</b>sobre la instal·lació, el maquinari i les aplicacions a %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Si seleccioneu això, enviareu informació periòdicament de la instal·lació a la vostra <b>màquina</b>, el maquinari i les aplicacions a %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Si seleccioneu això, enviareu informació <b>regularment</b>sobre la instal·lació, el maquinari, les aplicacions i els patrons d'ús a %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Si seleccioneu això, enviareu informació regularment de la instal·lació del vostre <b>usuari</b>, el maquinari, les aplicacions i els patrons d'ús a %1. TrackingViewStep - + Feedback Informació de retorn + + UmountJob + + + Unmount file systems. + Desmunta els sistemes de fitxers. + + + + No target system available. + No hi ha cap sistema de destinació disponible. + + + + No rootMountPoint is set. + No s'ha establert cap punt de muntatge d'arrel. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la configuració.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si més d'una persona usarà aquest ordinador, podeu crear diversos comptes després de la instal·lació.</small> + + + UsersQmlViewStep - - Your username is too long. - El nom d'usuari és massa llarg. - - - - Your username must start with a lowercase letter or underscore. - El nom d'usuari ha de començar amb una lletra en minúscula o una ratlla baixa. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Només es permeten lletres en minúscula, números, ratlles baixes i guions. - - - - Only letters, numbers, underscore and hyphen are allowed. - Només es permeten lletres, números, ratlles baixes i guions. - - - - Your hostname is too short. - El nom d'amfitrió és massa curt. - - - - Your hostname is too long. - El nom d'amfitrió és massa llarg. - - - - Your passwords do not match! - Les contrasenyes no coincideixen! + + Users + Usuaris UsersViewStep - + Users Usuaris @@ -3507,65 +3906,67 @@ Sortida: VariantModel - + Key + Column header for key/value Clau - + Value + Column header for key/value Valor VolumeGroupBaseDialog - + Create Volume Group Crea un grup de volums - + List of Physical Volumes Llista de volums físics - + Volume Group Name: Nom del grup de volums: - + Volume Group Type: Tipus del grup de volums: - + Physical Extent Size: Mida de l'extensió física: - + MiB MB - + Total Size: Mida total: - + Used Size: Mida usada: - + Total Sectors: Sectors totals: - + Quantity of LVs: Quantitat de volums lògics: @@ -3573,133 +3974,177 @@ Sortida: WelcomePage - + Form Formulari - - + + Select application and system language Seleccioneu una aplicació i la llengua del sistema + &About + &Quant a + + + Open donations website Obre el lloc web per a les donacions - + &Donate Feu una &donació - + Open help and support website Obre el lloc web per a l'ajuda i el suport + &Support + &Suport + + + Open issues and bug-tracking website Obre el lloc web de problemes i de seguiment d'errors - Open release notes website - Obre el lloc web de les notes de la versió - - - - &Release notes - &Notes de la versió - - - &Known issues &Problemes coneguts - - &Support - &Suport + + Open release notes website + Obre el lloc web de les notes de la versió - - &About - &Quant a + + &Release notes + &Notes de la versió - - <h1>Welcome to the %1 installer.</h1> - <h1>Benvingut/da a l'instal·lador per a %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Benvingut/da a l'instal·lador Calamares per a %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Benvingut/da al programa de configuració del Calamares per a %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Benvingut/da a la configuració per a %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Benvingut/da a l'instal·lador Calamares per a %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Benvingut/da a l'instal·lador per a %1.</h1> + + + + %1 support + %1 suport + + + About %1 setup Quant a la configuració de %1 - + About %1 installer Quant a l'instal·lador %1 - + <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. - <h1>%1</h1><br/><strong>%2<br/>per a %3</strong><br/><br/>Copyright 2014-2017, Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019, Adriaan de Groot &lt;groot@kde.org&gt;<br/>Moltes gràcies a l'<a href="https://calamares.io/team/">equip del Calamares</a> i a l'<a href="https://www.transifex.com/calamares/calamares/">equip de traductors del Calamares</a>.<br/><br/>El desenvolupament del <a href="https://calamares.io/">Calamares</a> està patrocinat per <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 suport + <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/>Agraïments per a <a href="https://calamares.io/team/">l'equip del Calamares</a> i per a <a href="https://www.transifex.com/calamares/calamares/">l'equip de traductors del Calamares</a>.<br/><br/>El desenvolupament del<a href="https://calamares.io/">Calamares</a> està patrocinat per <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome - Benvinguda + Benvingut/da WelcomeViewStep - + Welcome - Benvinguda + Benvingut/da + + + + ZfsJob + + + Create ZFS pools and datasets + Crea agrupacions i conjunts de dades ZFS + + + + Failed to create zpool on + No s'ha pogut crear la zpool a + + + + Configuration Error + Error de configuració + + + + No partitions are available for ZFS. + No hi ha particions disponibles per a ZFS. + + + + Internal data missing + Falten dades internes. + + + + + Failed to create zpool + No s'ha pogut crear la zpool. + + + + Failed to create dataset + No s'ha pogut crear el conjunt de dades. + + + + The output was: + La sortida ha estat la següent: about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <h1>%1</h1><br/> <strong>%2<br/> @@ -3715,7 +4160,94 @@ Sortida: Liberating Software. - + + Back + Enrere + + + + calamares-sidebar + + + Show debug information + Informació de depuració + + + + finishedq + + + Installation Completed + Instal·lació acabada + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 s'ha instal·lat a l'ordinador. <br/> + Ara podeu reiniciar-lo per tal d'accedir al sistema operatiu nou o bé continuar usant l'entorn autònom. + + + + Close Installer + Tanca l'instal·lador + + + + Restart System + Reinicia el sistema + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Hi ha disponible un registre complet de la instal·lació com a installation.log al directori de l’usuari autònom.<br/> + Aquest registre es copia a /var/log/installation.log del sistema de destinació.</p> + + + + finishedq@mobile + + + Installation Completed + Instal·lació acabada + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 s'ha instal·lat a l'ordinador.<br/> + Ara podeu reiniciar el dispositiu. + + + + Close + Tanca + + + + Restart + Reinicia + + + + i18n + + + <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>. + <h1>Llengües</h1> </br> + La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interfície de línia d'ordres. La configuració actual és <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Configuració local</h1> </br> + La configuració local del sistema afecta el format de números i dates. La configuració actual és <strong>%1</strong>. + + + Back Enrere @@ -3723,52 +4255,43 @@ Sortida: keyboardq - - Keyboard Model - Model del teclat + + To activate keyboard preview, select a layout. + Per activar la previsualització del teclat, seleccioneu-ne una disposició. - - Pick your preferred keyboard model or use the default one based on the detected hardware - Trieu el model de teclat preferit o useu el predeterminat basat en el maquinari detectat. + + Keyboard Model: + Model del teclat: - - Refresh - Actualitza-ho - - - - + Layouts Disposicions - - - Keyboard Layout - Disposició del teclat + + Type here to test your keyboard + Escriviu aquí per comprovar el teclat - - Models - Models - - - + Variants Variants + + + localeq - - Test your keyboard - Proveu el teclat. + + Change + Canvia-ho notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3776,34 +4299,262 @@ Sortida: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Benvingut/da a l'instal·lador per a %1 <quote>%2</quote></h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + El LibreOffice és un conjunt de programari d'ofimàtica potent i gratuït, usat per milions de persones a tot el món. Inclou diverses aplicacions que el converteixen en el paquet ofimàtic de codi obert i lliure més versàtil del mercat.<br/> +Opció predeterminada. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Si no voleu instal·lar cap programari d'ofimàtica, només cal que seleccioneu Sense paquet d'ofimàtica. Sempre podeu afegir-ne un (o més) més endavant al sistema instal·lat quan arribi la necessitat. + + + + No Office Suite + Sense paquet d'ofimàtica + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Creeu una instal·lació mínima d'escriptori, suprimiu totes les aplicacions addicionals i decidiu més tard què voleu afegir al vostre sistema. Exemples del que no hi haurà en aquesta instal·lació: no hi haurà paquet d'ofimàtica, ni reproductors multimèdia, ni visualitzador d'imatges ni suport d'impressió. Hi haruà només un escriptori, un navegador de fitxers, un gestor de paquets, un editor de text i un navegador web senzill. + + + + Minimal Install + Instal·lació mínima + + + + Please select an option for your install, or use the default: LibreOffice included. + Seleccioneu una opció per a la instal·lació o useu el valor predeterminat: LibreOffice inclòs. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Aquest és un fitxer QML d'exemple. Es mostren les opcions en text ric amb contingut parpellejant.</p> + + <p>El QML amb text ric pot crear etiquetes d'HTML, el contingut parpellejant és útil per a pantalles tàctils.</p> + + <p><b>Això és text en negreta.</b></p> + <p><i>Això és text en cursiva.</i></p> + <p><u>Això és text subratllat.</u></p> + <p><center>Aquest text estarà alineat al centre.</center></p> + <p><s>Aquest text és ratllat.</s></p> + + <p>Codi d'exemple: + <code>ls -l /home</code></p> + + <p><b>Llistes:</b></p> + <ul> + <li>Sistemes amb CPU d'Intel</li> + <li>Sistemes amb CPU AMD</li> + </ul> + + <p>La barra de desplaçament vertical és ajustable, amplada actual a 10.</p> + + + + Back + Enrere + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Trieu el nom d'usuari i les credencials per iniciar la sessió i fer tasques d'administració. + + + + What is your name? + Com us dieu? + + + + Your Full Name + El nom complet + + + + What name do you want to use to log in? + Quin nom voleu usar per iniciar la sessió? + + + + Login Name + Nom d'entrada + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Si aquest ordinador l'usarà més d'una persona, podreu crear diversos comptes després de la instal·lació. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Només es permeten lletres en minúscula, números, ratlles baixes i guions. + + + + root is not allowed as username. + No es permet root com a nom d'usuari. + + + + What is the name of this computer? + Com es diu aquest ordinador? + + + + Computer Name + Nom de l'ordinador + + + + This name will be used if you make the computer visible to others on a network. + Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa. + + + + localhost is not allowed as hostname. + No es permet localhost com a nom d'amfitrió. + + + + Choose a password to keep your account safe. + Trieu una contrasenya per tal de mantenir el compte segur. + + + + Password + Contrasenya + + + + Repeat Password + Repetiu la contrasenya. + + + + 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. + Escriviu la mateixa contrasenya dos cops per poder-ne comprovar els errors de mecanografia. Una bona contrasenya ha de contenir una barreja de lletres, números i signes de puntuació, hauria de tenir un mínim de 8 caràcters i s'hauria de modificar a intervals regulars. + + + + Validate passwords quality + Valida la qualitat de les contrasenyes. + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no en podreu fer una de dèbil. + + + + Log in automatically without asking for the password + Entra automàticament sense demanar la contrasenya. + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Només es permeten lletres, números, guionets, guionets baixos i un mínim de dos caràcters. + + + + Reuse user password as root password + Reutilitza la contrasenya d'usuari com a contrasenya d'arrel. + + + + Use the same password for the administrator account. + Usa la mateixa contrasenya per al compte d'administració. + + + + Choose a root password to keep your account safe. + Trieu una contrasenya d'arrel per mantenir el compte segur. + + + + Root Password + Contrasenya d'arrel + + + + Repeat Root Password + Repetiu la contrasenya d'arrel. + + + + Enter the same password twice, so that it can be checked for typing errors. + Escriviu la mateixa contrasenya dos cops per poder-ne comprovar els errors de mecanografia. + + + + welcomeq + + + <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> + <h3>Benvingut/da a l'instal·lador <quote>%2</quote>per a %1</h3> + <p>Aquest programa us preguntarà unes quantes coses i instal·larà el %1 a l'ordinador. </p> + + + About Quant a - + Support Suport - + Known issues Problemes coneguts - + Release notes Notes de la versió - + Donate Feu una donació diff --git a/lang/calamares_ca@valencia.ts b/lang/calamares_ca@valencia.ts index 0c4f3e832..fffb0d892 100644 --- a/lang/calamares_ca@valencia.ts +++ b/lang/calamares_ca@valencia.ts @@ -1,234 +1,267 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + L'<strong>entorn d'arrancada</strong> d'aquest sistema.<br><br>Els sistemes antics x86 només tenen suport per a <strong>BIOS</strong>.<br>Els moderns normalment usen <strong>EFI</strong>, però també poden mostrar-se com a BIOS si l'entorn d'arrancada s'executa en mode de compatibilitat. - + 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. - + Aquest sistema s'ha iniciat amb un entorn d'arrancada <strong>EFI</strong>. <br><br> Per a configurar una arrancada des d'un entorn EFI, aquest instal·lador ha de desplegar l'aplicació d'un gestor d'arrancada, com ara el <strong>GRUB</strong> o el <strong>systemd-boot</strong> en una <strong>partició EFI del sistema</strong>. Això és automàtic, llevat que trieu fer les particions manualment. En aquest cas, ho haureu de configurar pel vostre compte. - + 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. - + Aquest sistema s'ha iniciat amb un entorn d'arrancada <strong>BIOS </strong>.<br><br>Per a configurar una arrancada des d'un entorn BIOS, aquest instal·lador ha d'instal·lar un gestor d'arrancada, com ara el <strong>GRUB</strong>, ja siga al començament d'una partició o al <strong>MBR</strong>, a prop del començament de la taula de particions (millor). Això és automàtic, llevat que trieu fer les particions manualment. En aquest cas, ho haureu de configurar pel vostre compte. BootLoaderModel - + Master Boot Record of %1 - + Registre d'arrancada mestre (MBR) de %1 - + Boot Partition - + Partició d'arrancada - + System Partition - + Partició del sistema - + Do not install a boot loader - + No instal·les cap gestor d'arrancada - + %1 (%2) - + %1 (%2) Calamares::BlankViewStep - + Blank Page - + Pàgina en blanc Calamares::DebugWindow - + Form - + Formulari - + GlobalStorage - + Emmagatzematge global - + JobQueue - + Cua de tasques - + Modules - + Mòduls - + Type: - + Tipus: - - + + none - + cap - + Interface: + Interfície: + + + + Crashes Calamares, so that Dr. Konqui can look at it. - - Tools + + Reloads the stylesheet from the branding directory. - + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet + Torna a carregar el full d'estil + + + + Displays the tree of widget names in the log (for stylesheet debugging). - + Widget Tree - + Arbre d'elements - + Debug information - + Informació de depuració Calamares::ExecutionViewStep - + Set up - + Configuració - + Install - + Instal·la Calamares::FailJob - + Job failed (%1) - + S'ha produït un error en la tasca (%1) - + Programmed job failure was explicitly requested. - + S'ha sol·licitat explícitament la fallada de la tasca programada. Calamares::JobThread - + Done - + Fet Calamares::NamedJob - + Example job (%1) - + Tasca d'exemple (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Executa l'ordre "%1" en el sistema de destinació. - + Run command '%1'. - + Executa l'ordre "%1". - + Running command %1 %2 - + S'està executant l'ordre %1 %2 Calamares::PythonJob - + Running %1 operation. - + S'està executant l'operació %1. - + Bad working directory path - + Hi ha un error en el camí del directori de treball - + Working directory %1 for python job %2 is not readable. - + El directori de treball %1 per a la tasca python %2 no és llegible. - + Bad main script file - + El fitxer d'script principal és incorrecte. - + Main script file %1 for python job %2 is not readable. - + El fitxer d'script principal %1 per a la tasca de python %2 no és llegible. - + Boost.Python error in job "%1". - + S'ha produït un error de Boost.Python en la tasca "%1". Calamares::QmlViewStep - + Loading ... - + S'està carregant... - + QML Step <i>%1</i>. - + Pas QML <i>%1</i>. - + Loading failed. - + S'ha produït un error en la càrrega. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Ha acabat la verificació dels requeriments per al mòdul <i>%1</i>. + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,3429 +277,3799 @@ - + System-requirements checking is complete. - + Ha acabat la verificació dels requeriments del sistema. Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed + S'ha produït un error en la configuració. + + + + Installation Failed + La instal·lació ha fallat. + + + + Error + S'ha produït un error. + + + + &Yes + &Sí + + + + &No + &No + + + + &Close + Tan&ca + + + + Install Log Paste URL + URL de publicació del registre d'instal·lació + + + + The upload was unsuccessful. No web-paste was done. + La càrrega no s'ha fet correctament. No s'ha enganxat res a la xarxa. + + + + Install log posted to + +%1 + +Link copied to clipboard - - Would you like to paste the install log to the web? - + + Calamares Initialization Failed + La inicialització del Calamares ha fallat. - Install Log Paste URL - - - - - The upload was unsuccessful. No web-paste was done. - - - - - Calamares Initialization Failed - - - - %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. - + No es pot instal·lar %1. El Calamares no ha pogut carregar tots els mòduls configurats. El problema es troba en com utilitza el Calamares la distribució. - + <br/>The following modules could not be loaded: - + <br/>No s'han pogut carregar els mòduls següents: + + + + Continue with setup? + Voleu continuar la configuració? + + + + Continue with installation? + Voleu continuar la instal·lació? + + + + 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> + El programa de configuració %1 està a punt de fer canvis en el disc per a configurar %2.<br/><strong>No podreu desfer aquests canvis.</strong> + + + + 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> + L'instal·lador per a %1 està a punt de fer canvis en el disc per tal d'instal·lar-hi %2.<br/><strong>No podreu desfer aquests canvis.</strong> + + + + &Set up now + Con&figura-ho ara + + + + &Install now + &Instal·la'l ara - Continue with installation? - + Go &back + &Arrere - - 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> - - - - - &Set up now - - - - + &Set up - + Con&figuració - + &Install - + &Instal·la + + + + Setup is complete. Close the setup program. + La configuració s'ha completat. Tanqueu el programa de configuració. + + + + The installation is complete. Close the installer. + La instal·lació s'ha completat. Tanqueu l'instal·lador. + + + + Cancel setup without changing the system. + Cancel·la la configuració sense canviar el sistema. + + + + Cancel installation without changing the system. + Cancel·la la instal·lació sense canviar el sistema. - Setup is complete. Close the setup program. - + &Next + &Següent - + + &Back + A&rrere + + + + &Done + &Fet + + + + &Cancel + &Cancel·la + + + Cancel setup? - + Voleu cancel·lar la configuració? - + Cancel installation? - + Voleu cancel·lar la instal·lació? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Voleu cancel·lar el procés de configuració actual? +El programa de configuració es tancarà i es perdran tots els canvis. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - + Voleu cancel·lar el procés d'instal·lació actual? +L'instal·lador es tancarà i tots els canvis es perdran. CalamaresPython::Helper - + Unknown exception type - + Tipus d'excepció desconeguda - + unparseable Python error - + S'ha produït un error de Python no analitzable. - + unparseable Python traceback - + La traça de Python no es pot analitzar. - + Unfetchable Python error. - - - - - CalamaresUtils - - - Install log posted to: -%1 - + S'ha produït un error de Python irrecuperable. CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + Programa de configuració %1 - + %1 Installer + Instal·lador de %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. - - Show debug information + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... - + S'està obtenint la informació del sistema... ChoicePage - + Form - + Formulari - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - + Seleccioneu un dispositiu d'e&mmagatzematge: - - - - + + + + Current: - + Actual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Després: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particions manuals</strong><br/>Podeu crear particions o canviar-ne la mida pel vostre compte. + + + Reuse %1 as home partition for %2. - + Reutilitza %1 com a partició de l'usuari per a %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + <strong>Seleccioneu una partició per a reduir-la i arrossegueu-la per a redimensionar-la</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + %1 es reduirà a %2 MiB i es crearà una partició nova de %3 MiB per a %4. - + + Boot loader location: + Ubicació del gestor d'arrancada: + + + <strong>Select a partition to install on</strong> - + <strong>Seleccioneu una partició per a fer-hi la instal·lació.</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + No s'ha pogut trobar una partició EFI en cap lloc d'aquest sistema. Torneu arrere i useu les particions manuals per a configurar %1. - + The EFI system partition at %1 will be used for starting %2. - + La partició EFI de sistema en %1 s'usarà per a iniciar %2. - + EFI system partition: - + Partició del sistema EFI: - + 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. - + Pareix que aquest dispositiu d'emmagatzematge no té cap sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faça cap canvi en el dispositiu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - + <strong>Esborra el disc</strong><br/>Això <font color="red">suprimirà</font> totes les dades del dispositiu seleccionat. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - + <strong>Instal·la'l al costat</strong><br/>L'instal·lador reduirà una partició per a fer espai per a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + <strong>Reemplaça una partició</strong><br/>Reemplaça una partició per %1. - + + 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. + Aquest dispositiu d'emmagatzematge té %1. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faça cap canvi en el dispositiu. + + + 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. - + Aquest dispositiu d'emmagatzematge ja té un sistema operatiu. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faça cap canvi en el dispositiu. - + 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. - + Aquest dispositiu d'emmagatzematge ja té múltiples sistemes operatius. Què voleu fer?<br/>Podreu revisar i confirmar la tria abans que es faça cap canvi en el dispositiu. + + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Aquest dispositiu d'emmagatzematge té una de les particions <strong>muntada</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Aquest dispositiu d'emmagatzematge forma part d'un dispositiu de <strong>RAID inactiu</strong>. + + + + No Swap + Sense intercanvi + + + + Reuse Swap + Reutilitza l'intercanvi + + + + Swap (no Hibernate) + Intercanvi (sense hibernació) + + + + Swap (with Hibernate) + Intercanvi (amb hibernació) + + + + Swap to file + Intercanvi en fitxer ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Neteja els muntatges per a les operacions de partició en %1 - + Clearing mounts for partitioning operations on %1. - + S'estan netejant els muntatges per a les operacions de les particions en %1. - + Cleared all mounts for %1 - + S'han netejat tots els muntatges de %1. ClearTempMountsJob - + Clear all temporary mounts. - + Neteja tots els muntatges temporals. - + Clearing all temporary mounts. - + S'estan netejant tots els muntatges temporals. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. - + S'han netejat tots els muntatges temporals. CommandList - - + + Could not run command. - + No s'ha pogut executar l'ordre. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + L'odre s'executa en l'entorn de l'amfitrió i necessita saber el camí de l'arrel, però el punt de muntatge de l'arrel no està definit. - + The command needs to know the user's name, but no username is defined. - + L'ordre necessita saber el nom de l'usuari, però no hi ha cap nom d'usuari definit. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Estableix el model de teclat en %1.<br/> - + Set keyboard layout to %1/%2. - + Estableix la distribució del teclat a %1/%2. - + + Set timezone to %1/%2. + Estableix el fus horari a %1/%2. + + + The system language will be set to %1. - + La llengua del sistema s'establirà en %1. - + The numbers and dates locale will be set to %1. - - - - - Set timezone to %1/%2.<br/> - - - - - Network Installation. (Disabled: Incorrect configuration) - - - - - Network Installation. (Disabled: Received invalid groups data) - - - - - Network Installation. (Disabled: internal error) - + Els números i les dates de la configuració local s'establiran en %1. - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Network Installation. (Disabled: Incorrect configuration) + Instal·lació per xarxa. (Inhabilitada: configuració incorrecta) + + + + Network Installation. (Disabled: Received invalid groups data) + Instal·lació per xarxa. (Inhabilitada: dades de grups rebudes no vàlides) + + + + Network Installation. (Disabled: Internal error) + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Selecció de paquets + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Instal·lació per xarxa. (Inhabilitada: no es poden obtindre les llistes de paquets, comproveu la connexió.) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Aquest ordinador no satisfà els requisits mínims per a configurar-hi %1.<br/> La configuració no pot continuar. <a href="#details">Detalls...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Aquest ordinador no satisfà els requisits mínims per a instal·lar-hi %1.<br/> La instal·lació no pot continuar. <a href="#details">Detalls...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Aquest ordinador no satisfà alguns dels requisits recomanats per a configurar-hi %1.<br/>La configuració pot continuar, però és possible que algunes característiques no estiguen habilitades. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Aquest ordinador no satisfà alguns dels requisits recomanats per a instal·lar-hi %1.<br/>La instal·lació pot continuar, però és possible que algunes característiques no estiguen habilitades. + + + + This program will ask you some questions and set up %2 on your computer. + Aquest programa us farà unes preguntes i instal·larà %2 en l'ordinador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Us donen la benvinguda al programa de configuració del Calamares per a %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Us donen la benvinguda a la configuració per a %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Us donen la benvinguda a l'instal·lador del Calamares per a %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Us donen la benvinguda a l'instal·lador per a %1</h1> + + + + Your username is too long. + El nom d'usuari és massa llarg. + + + + '%1' is not allowed as username. + No es permet %1 com a nom d'usuari. + + + + Your username must start with a lowercase letter or underscore. + El nom d'usuari ha de començar amb una lletra en minúscula o una ratlla baixa. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Només es permeten lletres en minúscula, números, ratlles baixes i guions. + + + + Your hostname is too short. + El nom d'amfitrió és massa curt. + + + + Your hostname is too long. + El nom d'amfitrió és massa llarg. + + + + '%1' is not allowed as hostname. + No es permet %1 com a nom d'amfitrió. + + + + Only letters, numbers, underscore and hyphen are allowed. + Només es permeten lletres, números, ratlles baixes i guions. + + + + Your passwords do not match! + Les contrasenyes no coincideixen. + + + + OK! + + + + + Setup Failed + S'ha produït un error en la configuració. + + + + Installation Failed + La instal·lació ha fallat. + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + S'ha completat la configuració. + + + + Installation Complete + Ha acabat la instal·lació. + + + + The setup of %1 is complete. + La configuració de %1 ha acabat. + + + + The installation of %1 is complete. + La instal·lació de %1 ha acabat. + + + + Package Selection + Selecció de paquets + + + + Please pick a product from the list. The selected product will be installed. + Trieu un producte de la llista. S'instal·larà el producte seleccionat. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Resum + + + + This is an overview of what will happen once you start the setup procedure. + Això és un resum de què passarà quan s'inicie el procés de configuració. + + + + This is an overview of what will happen once you start the install procedure. + Això és un resum de què passarà quan s'inicie el procés d'instal·lació. + ContextualProcessJob - + Contextual Processes Job - + Tasca de procés contextual CreatePartitionDialog - + Create a Partition - + Creació d'una partició - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: + Mi&da: + + + + MiB + MiB + + + + Partition &Type: + &Tipus de partició: + + + + Primar&y - + + E&xtended + &Ampliada + + + + Fi&le System: + S&istema de fitxers: + + + + LVM LV name + Nom del volum lògic LVM + + + + &Mount Point: + Punt de &muntatge: + + + + Flags: + Marcadors: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + En&cripta - + Logical - + Lògica - + Primary - + Primària - + GPT - + GPT - + Mountpoint already in use. Please select another one. + El punt de muntatge ja està en ús. Seleccioneu-ne un altre. + + + + Mountpoint must start with a <tt>/</tt>. CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. + Crea una partició nova de %2 MiB a %4 (%3) amb el sistema de fitxers %1. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + Crea una partició nova de <strong>%2 MiB</strong> a <strong>%4</strong> (%3) amb el sistema de fitxers <strong>%1</strong>. - + + Creating new %1 partition on %2. - + S'està creant la partició nova %1 en %2. - + The installer failed to create partition on disk '%1'. - + L'instal·lador no ha pogut crear la partició en el disc '%1'. CreatePartitionTableDialog - + Create Partition Table - + Creació de la taula de particions - + Creating a new partition table will delete all existing data on the disk. - + La creació d'una nova taula de particions suprimirà totes les dades existents en el disc. - + What kind of partition table do you want to create? - + Quin tipus de taula de particions voleu crear? - + Master Boot Record (MBR) - + Registre d'arrancada mestre (MBR) - + GUID Partition Table (GPT) - + Taula de particions GUID (GPT) CreatePartitionTableJob - + Create new %1 partition table on %2. - + Creació d'una taula de particions nova %1 en %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creació d'una taula de particions nova <strong>%1</strong> en <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + S'està creant la taula de particions nova %1 en %2. - + The installer failed to create a partition table on %1. - + L'instal·lador no ha pogut crear la taula de particions en %1. CreateUserJob - + Create user %1 - + Crea l'usuari %1 - + Create user <strong>%1</strong>. - + Crea l'usuari <strong>%1</strong>. - - Creating user %1. - + + Preserving home directory + S'està preservant el directori personal - - Sudoers dir is not writable. - + + + Creating user %1 + S'està creant l'usuari %1. - - Cannot create sudoers file for writing. - + + Configuring user %1 + S'està configurant l'usuari %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. - + + Setting file permissions + S'estan establint els permisos del fitxer CreateVolumeGroupDialog - + Create Volume Group - + Crea un grup de volums CreateVolumeGroupJob - + Create new volume group named %1. - + Crea un grup de volums nou anomenat %1. - + Create new volume group named <strong>%1</strong>. - + Crea un grup de volums nou anomenat <strong>%1</strong>. - + Creating new volume group named %1. - + S'està creant el grup de volums nou anomenat %1. - + The installer failed to create a volume group named '%1'. - + L'instal·lador no ha pogut crear un grup de volums anomenat "%1". DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Desactiva el grup de volums anomenat %1. - + Deactivate volume group named <strong>%1</strong>. - + Desactiva el grup de volums anomenat <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. - + L'instal·lador no ha pogut desactivar un grup de volums anomenat %1. DeletePartitionJob - + Delete partition %1. - + Suprimeix la partició %1. - + Delete partition <strong>%1</strong>. - + Suprimeix la partició <strong>%1</strong>. - + Deleting partition %1. - + S'està suprimint la partició %1. - + The installer failed to delete partition %1. - + L'instal·lador no ha pogut suprimir la partició %1. DeviceInfoWidget - - 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. - + + This device has a <strong>%1</strong> partition table. + Aquest dispositiu té una taula de particions <strong>%1</strong>. + + + + 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. + Aquest dispositiu és un dispositiu <strong>de bucle</strong>.<br><br>Això és un pseudodispositiu sense taula de particions que fa que un fitxer siga accessible com un dispositiu de bloc. Aquest tipus de configuració normalment només conté un sol sistema de fitxers. - This device has a <strong>%1</strong> partition table. - - - - - 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. - - - - 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. - + Aquest instal·lador <strong>no pot detectar una taula de particions</strong> en el dispositiu d'emmagatzematge seleccionat.<br><br>O bé el dispositiu no té taula de particions o la taula de particions és corrupta o d'un tipus desconegut.<br>Aquest instal·lador pot crear una nova taula de particions, o bé automàticament o a través de la pàgina del partidor manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <br><br>Aquest és el tipus de taula de particions recomanat per als sistemes moderns que s'inicien des d'un entorn d'arrancada <strong>EFI</strong>. - + <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. - + <br><br>Aquest tipus de taula de particions és només recomanable en sistemes més antics que s'inicien des d'un entorn d'arrancada <strong>BIOS</strong>. Per a la majoria de la resta d'usos, es recomana fer servir GPT.<br><br><strong>Avís:</strong> la taula de particions MBR és un estàndard obsolet de l'era MSDOS. Es poden crear <br>només 4 <em>particions primàries</em> i d'aquestes 4, una pot ser una partició <em>ampliada</em> que pot contindre algunes particions <em>lògiques</em>. + + + + 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. + El tipus de <strong>taula de particions</strong> actualment present en el dispositiu d'emmagatzematge seleccionat.<br><br> L'única manera de canviar el tipus de taula de particions és esborrar i tornar a crear la taula de particions des de zero, fet que destrueix totes les dades del dispositiu d'emmagatzematge. <br>Aquest instal·lador mantindrà la taula de particions actual llevat que decidiu expressament el contrari. <br>Si no n'esteu segur, en els sistemes moderns es prefereix GPT. DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) - + %1 - (%2) DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Escriu la configuració de LUKS per a Dracut en %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Omet l'escriptura de la configuració de LUKS per a Dracut: la partició "/" no està encriptada - + Failed to open %1 - + No s'ha pogut obrir %1 DummyCppJob - + Dummy C++ Job - + Tasca C++ de proves EditExistingPartitionDialog - + Edit Existing Partition + Edita la partició existent + + + + Con&tent: - - Content: - - - - + &Keep - + &Conserva - + Format - + Formata - + Warning: Formatting the partition will erase all existing data. - + Advertència: formatar la partició esborrarà totes les dades existents. - + &Mount Point: - - - - - Si&ze: - + Punt de &muntatge: + Si&ze: + Mi&da: + + + MiB - + MiB - + Fi&le System: - + S&istema de fitxers: - + Flags: + Marcadors: + + + + Label for the filesystem - - Mountpoint already in use. Please select another one. + + FS Label: EncryptWidget - + Form - + Formulari - + En&crypt system + En&cripta el sistema + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. - + Passphrase - + Contrasenya - + Confirm passphrase + Confirmeu la contrasenya + + + + + Please enter the same passphrase in both boxes. + Escriviu la mateixa contrasenya en les dues caselles. + + + + ErrorDialog + + + Details: - - Please enter the same passphrase in both boxes. - + + Would you like to paste the install log to the web? + Voleu enganxar el registre d'instal·lació a la xarxa? FillGlobalStorageJob - + Set partition information - - - - - Install %1 on <strong>new</strong> %2 system partition. - - - - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - - - - - Install %2 on %3 system partition <strong>%1</strong>. - - - - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - + Estableix la informació de la partició - Install boot loader on <strong>%1</strong>. + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> - - Setting up mount points. + + Install %1 on <strong>new</strong> %2 system partition. + Instal·la %1 en la partició de sistema <strong>nova</strong> %2. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + Instal·la %2 en la partició de sistema %3 <strong>%1</strong>. + + + + Install boot loader on <strong>%1</strong>. + Instal·la el gestor d'arrancada en <strong>%1</strong>. + + + + Setting up mount points. + S'estableixen els punts de muntatge. + FinishedPage - + Form - + Formulari - + &Restart now - + &Reinicia ara - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <h1>Tot fet.</h1><br/>%1 s'ha configurat a l'ordinador.<br/>Ara podeu començar a usar el nou sistema. - + <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> - + <html><head/><body><p>Quan aquesta casella està marcada, el sistema es reinicia immediatament en clicar en <span style="font-style:italic;">Fet</span> o tancar el programa de configuració.</p></body></html> - + <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. - + <h1>Tot fet.</h1><br/>%1 s'ha instal·lat a l'ordinador.<br/>Ara podeu reiniciar-lo per tal d'accedir al sistema operatiu nou o bé continuar usant l'entorn autònom de %2. - + <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> - + <html><head/><body><p>Quan aquesta casella està marcada, el sistema es reiniciarà immediatament quan cliqueu en <span style="font-style:italic;">Fet</span> o tanqueu l'instal·lador.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>La configuració ha fallat.</h1><br/>No s'ha configurat %1 en l'ordinador.<br/>El missatge d'error ha estat el següent: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - + <h1>La instal·lació ha fallat</h1><br/>No s'ha instal·lat %1 en l'ordinador.<br/>El missatge d'error ha estat el següent: %2. + + + + FinishedQmlViewStep + + + Finish + Acaba FinishedViewStep - + Finish - - - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + Acaba FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Formata la partició %1 (sistema de fitxers: %2, mida: %3 MiB) de %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formata la partició de <strong>%3 MiB</strong> <strong>%1</strong> amb el sistema de fitxers <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + S'està formatant la partició %1 amb el sistema de fitxers %2. - + The installer failed to format partition %1 on disk '%2'. - + L'instal·lador no ha pogut formatar la partició %1 del disc '%2'. GeneralRequirements - + has at least %1 GiB available drive space - - - - - There is not enough drive space. At least %1 GiB is required. - - - - - has at least %1 GiB working memory - - - - - The system does not have enough working memory. At least %1 GiB is required. - - - - - is plugged in to a power source - - - - - The system is not plugged in to a power source. - - - - - is connected to the Internet - + té com a mínim %1 GiB d'espai de disc disponible. - The system is not connected to the Internet. - + There is not enough drive space. At least %1 GiB is required. + No hi ha prou espai de disc disponible. Com a mínim hi ha d'haver %1 GiB. - - is running the installer as an administrator (root) - - - - - The setup program is not running with administrator rights. - + + has at least %1 GiB working memory + té com a mínim %1 GiB de memòria de treball. + The system does not have enough working memory. At least %1 GiB is required. + El sistema no té prou memòria de treball. Com a mínim cal que hi haja %1 GiB. + + + + is plugged in to a power source + està connectat a la xarxa elèctrica + + + + The system is not plugged in to a power source. + El sistema no està connectat a una xarxa elèctrica. + + + + is connected to the Internet + està connectat a Internet + + + + The system is not connected to the Internet. + El sistema no està connectat a Internet. + + + + is running the installer as an administrator (root) + està executant l'instal·lador com a administrador (arrel). + + + + The setup program is not running with administrator rights. + El programa de configuració no s'està executant amb privilegis d'administració. + + + The installer is not running with administrator rights. - + L'instal·lador no s'està executant amb privilegis d'administració. - + has a screen large enough to show the whole installer - + té una pantalla suficientment gran per a mostrar completament l'instal·lador. - + The screen is too small to display the setup program. - + La pantalla és massa menuda per a mostrar el programa de configuració. - + The screen is too small to display the installer. - + La pantalla és massa menuda per a mostrar l'instal·lador. HostInfoJob - + Collecting information about your machine. - + S'està recopilant informació sobre la màquina. IDJob - - + + + - OEM Batch Identifier - + Identificador de lots d'OEM - + Could not create directories <code>%1</code>. - + No s'han pogut crear els directoris <code>%1</code>. + + + + Could not open file <code>%1</code>. + No s'ha pogut obrir el fitxer <code>%1</code>. - Could not open file <code>%1</code>. - - - - Could not write to file <code>%1</code>. - + No s'ha pogut escriure en el fitxer <code>%1</code>. InitcpioJob - + Creating initramfs with mkinitcpio. - + Creació d'initramfs amb mkinitcpio. InitramfsJob - + Creating initramfs. - + Creació d'initramfs. InteractiveTerminalPage - + Konsole not installed - + El Konsole no està instal·lat. - + Please install KDE Konsole and try again! - + Instal·leu el Konsole de KDE i torneu a intentar-ho. - + Executing script: &nbsp;<code>%1</code> - + S'està executant l'script &nbsp;<code>%1</code> InteractiveTerminalViewStep - + Script - - - - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - + Script KeyboardQmlViewStep - + Keyboard - + Teclat KeyboardViewStep - + Keyboard - + Teclat LCLocaleDialog - + System locale setting - + Configuració local del sistema - + 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>. - + La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interfície de línia d'ordres. <br/>La configuració actual és <strong>%1</strong>. - + &Cancel + &Cancel·la + + + + &OK + D'ac&ord + + + + LOSHJob + + + Configuring encrypted swap. + S’està configurant l'intercanvi encriptat. + + + + No target system available. - - &OK + + No rootMountPoint is set. + + + + + No configFilePath is set. LicensePage - + Form - + Formulari - + <h1>License Agreement</h1> - + <h1>Acord de llicència</h1> - + I accept the terms and conditions above. - + Accepte els termes i les condicions anteriors. - + Please review the End User License Agreements (EULAs). - + Consulteu els acords de llicència d'usuari final (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. - + Aquest procediment de configuració instal·larà programari propietari subjecte a termes de llicència. - + If you do not agree with the terms, the setup procedure cannot continue. - + Si no esteu d'acord amb els termes, el procediment de configuració no pot continuar. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Aquest procediment de configuració instal·larà propietari subjecte a termes de llicència per tal de proporcionar característiques addicionals i millorar l'experiència de l'usuari. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Si no esteu d'acord en els termes, no s'instal·larà el programari propietari i es faran servir les alternatives de codi lliure. LicenseViewStep - + License - + Llicència LicenseWidget - + URL: %1 - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong> controlador %1</strong><br/>de %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong> controlador gràfic %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong> connector del navegador %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong> còdec %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong> paquet %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">de %2</font> - + File: %1 - + Fitxer: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text - + Amaga el text de la llicència + + + + Show the license text + Mostra el text de la llicència + + + + Open license agreement in browser. + Obri l'acord de llicència en el navegador. LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Regió: - + Zone: - + Zona: - - + + &Change... - - - - - Set timezone to %1/%2.<br/> - + &Canvia... LocaleQmlViewStep - + Location + Ubicació + + + + LocaleTests + + + Quit LocaleViewStep - + Location - + Ubicació LuksBootKeyFileJob - + Configuring LUKS key file. - + S'està configurant el fitxer de clau LUKS. - - + + No partitions are defined. - + No s'ha definit cap partició. - - - + + + Encrypted rootfs setup error - + S'ha produït un error de configuració del rootfs encriptat. - + Root partition %1 is LUKS but no passphrase has been set. - + La partició d'arrel %1 és LUKS, però no se n'ha establit cap contrasenya. - + Could not create LUKS key file for root partition %1. - + No s'ha pogut crear el fitxer de clau de LUKS per a la partició d'arrel %1. - + Could not configure LUKS key file on partition %1. - + No s'ha pogut configurar el fitxer de clau de LUKS en la partició %1. MachineIdJob - + Generate machine-id. - + Generació de l'id. de la màquina - + Configuration Error - + S'ha produït un error en la configuració. - + No root mount point is set for MachineId. - + No s'ha proporcionat el punt de muntatge d'arrel establit per a MachineId. + + + + Map + + + Timezone: %1 + Fus horari: %1 + + + + 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. + Seleccioneu la ubicació preferida en el mapa perquè l'instal·lador puga suggerir-vos la configuració +de la llengua i la zona horària. Podeu afinar la configuració suggerida a continuació. Busqueu en el mapa arrossegant-lo +per a desplaçar-s'hi i useu els botons +/- per a ampliar-lo o reduir-lo, o bé useu la rodeta del ratolí. NetInstallViewStep - - + Package selection - + Selecció de paquets + + + + Office software + Programari d'oficina + + + + Office package + Paquet d'oficina + + + + Browser software + Programari de navegador + + + + Browser package + Paquet de navegador + + + + Web browser + Navegador web + + + + Kernel + Nucli + + + + Services + Serveis + + + + Login + Entrada + + + + Desktop + Escriptori + + + + Applications + Aplicacions + + + + Communication + Comunicació + + + + Development + Desenvolupament + + + + Office + Oficina + + + + Multimedia + Multimèdia - Office software - + Internet + Internet - Office package - + Theming + Tema - Browser software - + Gaming + Jugant - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + Utilitats NotesQmlViewStep - + Notes - + Notes OEMPage - + Ba&tch: - + &Lot: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Introduïu ací l'identificador de lots. Això es guardarà en el sistema de destinació.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - + <html><head/><body><h1>Configuració d'OEM</h1><p>El Calamares usarà els paràmetres d'OEM durant la configuració del sistema de destinació.</p></body></html> OEMViewStep - + OEM Configuration + Configuració d'OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + Estableix l'identificador de lots d'OEM en <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. - - Set the OEM Batch Identifier to <code>%1</code>. - + + + + Timezone: %1 + Fus horari: %1 + + + + Select your preferred Zone within your Region. + Trieu la zona preferida dins de la regió. + + + + Zones + Zones + + + + You can fine-tune Language and Locale settings below. + Podeu acabar d'ajustar els paràmetres locals i de llengua a continuació. PWQ - + Password is too short - + La contrasenya és massa curta. - + Password is too long - - - - - Password is too weak - - - - - Memory allocation error when setting '%1' - - - - - Memory allocation error - - - - - The password is the same as the old one - - - - - The password is a palindrome - - - - - The password differs with case changes only - - - - - The password is too similar to the old one - - - - - The password contains the user name in some form - - - - - The password contains words from the real name of the user in some form - - - - - The password contains forbidden words in some form - - - - - The password contains less than %1 digits - - - - - The password contains too few digits - + La contrasenya és massa llarga. - The password contains less than %1 uppercase letters - + Password is too weak + La contrasenya és massa feble. - + + Memory allocation error when setting '%1' + S'ha produït un error d'assignació de memòria en establir "%1" + + + + Memory allocation error + S'ha produït un error en reservar memòria. + + + + The password is the same as the old one + La contrasenya és la mateixa que l'anterior. + + + + The password is a palindrome + La contrasenya és un palíndrom. + + + + The password differs with case changes only + La contrasenya es diferencia tan sols amb canvis de majúscules a minúscules. + + + + The password is too similar to the old one + La contrasenya és massa semblant a l'anterior. + + + + The password contains the user name in some form + La contrasenya conté el nom d'usuari d'alguna manera. + + + + The password contains words from the real name of the user in some form + La contrasenya d'alguna manera conté paraules del nom real de l'usuari. + + + + The password contains forbidden words in some form + La contrasenya d'alguna manera conté paraules prohibides. + + + + The password contains too few digits + La contrasenya no conté prou dígits. + + + The password contains too few uppercase letters - + La contrasenya no conté prou lletres en majúscula. + + + + The password contains fewer than %n lowercase letters + + + + - - The password contains less than %1 lowercase letters - - - - + The password contains too few lowercase letters - + La contrasenya no conté prou lletres en minúscula. - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - + La contrasenya no conté prou caràcters no alfanumèrics. - - The password is shorter than %1 characters - - - - + The password is too short - + La contrasenya és massa curta. - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - + La contrasenya no conté prou tipus de caràcters. - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - - - - The password contains more than %1 characters of the same class consecutively - - - - - The password contains too many characters of the same class consecutively - - - - - The password contains monotonic sequence longer than %1 characters - - - - - The password contains too long of a monotonic character sequence - - - - - No password supplied - - - - - Cannot obtain random numbers from the RNG device - - - - - Password generation failed - required entropy too low for settings - - - - - The password fails the dictionary check - %1 - - - - - The password fails the dictionary check - - - - - Unknown setting - %1 - - - - - Unknown setting - + La contrasenya conté consecutivament massa caràcters idèntics. - Bad integer value of setting - %1 - + The password contains too many characters of the same class consecutively + La contrasenya conté consecutivament massa caràcters de la mateixa classe. + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + The password is a rotated version of the previous one + La contrasenya és només l'anterior capgirada. + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + - Bad integer value - + The password contains monotonic sequence longer than %n characters + + + + - - Setting %1 is not of integer type - + + The password contains too long of a monotonic character sequence + La contrasenya conté una seqüència monòtona de caràcters massa gran. - Setting is not of integer type - + No password supplied + No s'ha proporcionat cap contrasenya. + + + + Cannot obtain random numbers from the RNG device + No es poden obtindre nombres aleatoris del dispositiu RNG. - Setting %1 is not of string type - + Password generation failed - required entropy too low for settings + Ha fallat la generació de la contrasenya. L'entropia necessària és massa baixa per als paràmetres. + The password fails the dictionary check - %1 + La contrasenya no aprova la comprovació del diccionari: %1 + + + + The password fails the dictionary check + La contrasenya no supera la comprovació del diccionari. + + + + Unknown setting - %1 + Paràmetre desconegut: %1 + + + + Unknown setting + Ajust desconegut + + + + Bad integer value of setting - %1 + El valor de l'ajust de l'enter no és correcte %1 + + + + Bad integer value + El valor de l'enter no és correcte. + + + + Setting %1 is not of integer type + El paràmetre %1 no és del tipus enter. + + + + Setting is not of integer type + El paràmetre no és del tipus enter. + + + + Setting %1 is not of string type + El paràmetre %1 no és del tipus cadena. + + + Setting is not of string type - + El paràmetre no és del tipus cadena. - + Opening the configuration file failed - + L'obertura del fitxer de configuració ha fallat. - + The configuration file is malformed - + El fitxer de configuració té un format incorrecte. - + Fatal failure - + S'ha produït un error fatal. - + Unknown error - + S'ha produït un error desconegut - + Password is empty - + La contrasenya està buida. PackageChooserPage - + Form - + Formulari - + Product Name - + Nom del producte - + TextLabel - + Etiqueta de text - + Long Product Description - + Descripció llarga del producte - + Package Selection - + Selecció de paquets - + Please pick a product from the list. The selected product will be installed. - + Trieu un producte de la llista. S'instal·larà el producte seleccionat. + + + + PackageChooserQmlViewStep + + + Packages + Paquets PackageChooserViewStep - + Packages - + Paquets PackageModel - + Name - + Nom - + Description - + Descripció Page_Keyboard - + Form - + Formulari - + Keyboard Model: - + Model de teclat: - + Type here to test your keyboard - + Escriviu ací per a provar el teclat Page_UserSetup - + Form - + Formulari - + What is your name? - + Quin és el vostre nom? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + Nom complet - + + What name do you want to use to log in? + Quin nom voleu utilitzar per a entrar al sistema? + + + login - + Entrada - + + What is the name of this computer? + Quin és el nom d'aquest ordinador? + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + <small>Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa.</small> - + Computer Name - + Nom de l'ordinador - - + + Choose a password to keep your account safe. + Seleccioneu una contrasenya per a mantindre el vostre compte segur. + + + + + <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> + <small>Escriviu la mateixa contrasenya dues vegades per a poder comprovar-ne els errors de mecanografia. Una bona contrasenya contindrà una barreja de lletres, números i signes de puntuació. Hauria de tindre un mínim de huit caràcters i s'hauria de canviar sovint.</small> + + + + Password - + Contrasenya - - + + Repeat Password - + Repetiu la contrasenya - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no podreu indicar-ne una de dèbil. - + Require strong passwords. - + Requereix contrasenyes fortes. - + Log in automatically without asking for the password. - + Entra automàticament sense demanar la contrasenya. - + Use the same password for the administrator account. - + Usa la mateixa contrasenya per al compte d'administració. - + Choose a password for the administrator account. - + Trieu una contrasenya per al compte d'administració. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>Escriviu la mateixa contrasenya dues vegades per a poder comprovar-ne els errors de mecanografia.</small> PartitionLabelsView - + Root - + Arrel - + Home - + Inici + + + + Boot + Arrancada - Boot - - - - EFI system - + Sistema EFI - + Swap - + Intercanvi - + New partition for %1 - + Partició nova per a %1 - + New partition - + Partició nova - + %1 %2 size[number] filesystem[name] - + %1 %2 PartitionModel - - + + Free Space - + Espai lliure - - + + New partition - + Partició nova - + Name - + Nom - + File System + Sistema de fitxers + + + + File System Label - + Mount Point - + Punt de muntatge - + Size - + Mida PartitionPage - + Form - + Formulari - + Storage de&vice: - + Dispositiu d'e&mmagatzematge: - + &Revert All Changes - + &Desfés tots els canvis - + New Partition &Table - + Nova &taula de particions - + Cre&ate - + Cre&a - + &Edit - + &Edita - + &Delete - + Su&primeix - + New Volume Group - + Grup de volums nou - + Resize Volume Group - + Canvia la mida del grup de volums - + Deactivate Volume Group - + Desactiva el grup de volums - + Remove Volume Group - + Suprimeix el grup de volums - + I&nstall boot loader on: - + I&nstal·la el gestor d'arrancada en: - + Are you sure you want to create a new partition table on %1? - + Segur que voleu crear una nova taula de particions en %1? - + Can not create new partition - + No es pot crear la partició nova - + 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. - + La taula de particions de %1 ja té %2 particions primàries i no se n'hi poden afegir més. Suprimiu una partició primària i afegiu-hi una partició ampliada. PartitionViewStep - + Gathering system information... - + S'està obtenint la informació del sistema... - + Partitions + Particions + + + + Unsafe partition actions are enabled. - - Install %1 <strong>alongside</strong> another operating system. + + Partitioning is configured to <b>always</b> fail. - - <strong>Erase</strong> disk and install %1. + + No partitions will be changed. - - <strong>Replace</strong> a partition with %1. - - - - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + Actual: - + After: - + Després: - + No EFI system partition configured + No hi ha cap partició EFI de sistema configurada + + + + EFI system partition configured incorrectly - - 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>esp</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. + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - EFI system partition flag not set + + The filesystem must be mounted on <strong>%1</strong>. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must have type FAT32. - + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + Opció per a usar GPT amb BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted - + Partició d'arrancada sense encriptar - + 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. - + S'ha establit una partició d'arrancada separada conjuntament amb una partició d'arrel encriptada, però la partició d'arrancada no està encriptada.<br/><br/>Hi ha qüestions de seguretat amb aquest tipus de configuració, perquè hi ha fitxers del sistema importants en una partició no encriptada.<br/>Podeu continuar, si així ho desitgeu, però el desbloqueig del sistema de fitxers tindrà lloc després, durant l'inici del sistema.<br/>Per a encriptar la partició d'arrancada, torneu arrere i torneu-la a crear seleccionant <strong>Encripta</strong> en la finestra de creació de la partició. - + has at least one disk device available. - + té com a mínim un dispositiu de disc disponible. - + There are no partitions to install on. - + No hi ha particions per a fer-hi una instal·lació. PlasmaLnfJob - + Plasma Look-and-Feel Job - + Tasca d'aspecte i comportament del Plasma - - + + Could not select KDE Plasma Look-and-Feel package - + No s'ha pogut seleccionar el paquet de l'aspecte i comportament del Plasma de KDE. PlasmaLnfPage - + Form - + Formulari - + 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. - + Trieu un aspecte i comportament per a l'escriptori Plasma de KDE. També podeu ometre aquest pas i establir-ho una vegada configurat el sistema. Quan cliqueu en una selecció d'aspecte i comportament, podreu veure'n una previsualització. - + 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. - + Trieu un aspecte i comportament per a l'escriptori Plasma de KDE. També podeu ometre aquest pas i configurar-ho una vegada instal·lat el sistema. Quan cliqueu en una selecció d'aspecte i comportament, podreu veure'n una previsualització. PlasmaLnfViewStep - + Look-and-Feel - + Aspecte i comportament PreserveFiles - + Saving files for later ... - + S'estan guardant fitxers per a més tard... - + No files configured to save for later. - + No s'ha configurat cap fitxer per a guardar per a més tard. - + Not all of the configured files could be preserved. - + No s'han pogut conservar tots els fitxers configurats. ProcessResult - + There was no output from the command. - + +No hi ha hagut eixida de l'ordre. - + Output: - + +Eixida: + - + External command crashed. - + L'ordre externa ha fallat. - + Command <i>%1</i> crashed. - + L'ordre <i>%1</i> ha fallat. - + External command failed to start. - + L'ordre externa no s'ha pogut iniciar. - + Command <i>%1</i> failed to start. - + L'ordre <i>%1</i> no s'ha pogut iniciar. - + Internal error when starting command. - + S'ha produït un error intern en iniciar l'ordre. - + Bad parameters for process job call. - + Hi ha paràmetres incorrectes per a la crida de la tasca del procés. - + External command failed to finish. - + L'ordre externa no ha acabat correctament. - + Command <i>%1</i> failed to finish in %2 seconds. - + L'ordre <i>%1</i> no ha pogut acabar en %2 segons. - + External command finished with errors. - + L'ordre externa ha acabat amb errors. - + Command <i>%1</i> finished with exit code %2. - + L'ordre <i>%1</i> ha acabat amb el codi d'eixida %2. QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - + %1 (%2) - - No product - + + unknown + desconegut - - No description provided. - + + extended + ampliada - - - - + + unformatted + sense format + + + + swap + intercanvi + + + + + Default + Per defecte + + + + + + File not found - + No s'ha pogut trobar el fitxer. - + Path <pre>%1</pre> must be an absolute path. - + El camí <pre>%1</pre> ha de ser un camí absolut. - + + Directory not found + No s'ha trobat el directori + + + + Could not create new random file <pre>%1</pre>. - + No s'ha pogut crear el fitxer aleatori nou <pre>%1</pre>. + + + + No product + Cap producte + + + + No description provided. + No s'ha proporcionat cap descripció. + + + + (no mount point) + (sense punt de muntatge) + + + + Unpartitioned space or unknown partition table + L'espai està sense partir o es desconeix la taula de particions + + + + Recommended + + + <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> + <p>Aquest ordinador no compleix alguns dels requisits recomanats per a configurar-hi %1.<br/> +La configuració pot continuar, però és possible que algunes característiques no estiguen habilitades.</p> RemoveUserJob - + Remove live user from target system - + Suprimeix l'usuari de la sessió autònoma del sistema de destinació RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Suprimeix el grup de volums anomenat %1. - + Remove Volume Group named <strong>%1</strong>. - + Suprimeix el grup de volums anomenat <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. - + L'instal·lador no ha pogut eliminar un grup de volums anomenat "%1". ReplaceWidget - + Form - + Formulari - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + Seleccioneu on instal·lar %1.<br/><font color="red">Atenció: </font>això suprimirà tots els fitxers de la partició seleccionada. - + The selected item does not appear to be a valid partition. - + L'element seleccionat no sembla que siga una partició vàlida. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 no es pot instal·lar en un espai buit. Seleccioneu una partició existent. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 no es pot instal·lar en una partició ampliada. Seleccioneu una partició existent primària o lògica. - + %1 cannot be installed on this partition. - + %1 no es pot instal·lar en aquesta partició. - + Data partition (%1) - + Partició de dades (%1) - + Unknown system partition (%1) - + Partició de sistema desconeguda (%1) - + %1 system partition (%2) - + %1 partició de sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <strong>%4</strong><br/><br/>La partició %1 és massa menuda per a %2. Seleccioneu una partició amb capacitat d'almenys %3 GB. - + <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. - + <strong>%2</strong><br/><br/>No es pot trobar cap partició EFI en cap lloc del sistema. Torneu arrere i useu les particions manuals per a establir %1. - - - + + + <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. - + <strong>%3</strong><br/><br/>%1 s'instal·larà en %2.<br/><font color="red">Atenció: </font>totes les dades de la partició %2 es perdran. - + The EFI system partition at %1 will be used for starting %2. - + La partició EFI de sistema en %1 s'usarà per a iniciar %2. - + EFI system partition: - + Partició del sistema EFI: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Aquest ordinador no satisfà els requisits mínims per a instal·lar-hi %1.<br/> +La instal·lació no pot continuar.</p> + + + + <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> + <p>Aquest ordinador no compleix alguns dels requisits recomanats per a configurar-hi %1.<br/> +La configuració pot continuar, però és possible que algunes característiques no estiguen habilitades.</p> ResizeFSJob - + Resize Filesystem Job - + Tasca de canviar de mida un sistema de fitxers - + Invalid configuration - + La configuració no és vàlida - + The file-system resize job has an invalid configuration and will not run. - + La tasca de canviar de mida un sistema de fitxers té una configuració no vàlida i no s'executarà. - + KPMCore not Available - + KPMCore no disponible - + Calamares cannot start KPMCore for the file-system resize job. - + El Calamares no pot iniciar KPMCore per a la tasca de canviar de mida un sistema de fitxers. + + + + + + + + Resize Failed + Ha fallat el canvi de mida. + + + + The filesystem %1 could not be found in this system, and cannot be resized. + El sistema de fitxers %1 no s'ha pogut trobar en aquest sistema i, per tant, no se'n pot canviar la mida. - - - - - Resize Failed - - - - - The filesystem %1 could not be found in this system, and cannot be resized. - - - - The device %1 could not be found in this system, and cannot be resized. - + El dispositiu%1 no s'ha pogut trobar en aquest sistema i, per tant, no se'n pot canviar la mida. - - + + The filesystem %1 cannot be resized. - + No es pot canviar la mida del sistema de fitxers %1. - - + + The device %1 cannot be resized. - + No es pot canviar la mida del dispositiu %1. - + The filesystem %1 must be resized, but cannot. - + Cal canviar la mida del sistema de fitxers %1, però no es pot. - + The device %1 must be resized, but cannot - + Cal canviar la mida del dispositiu %1, però no es pot. ResizePartitionJob - + Resize partition %1. - + Canvia la mida de la partició %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Canvia la mida de la partició de <strong>%2 MiB</strong>, <strong>%1</strong>, a <strong>%3 MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + Es canvia la mida de la partició %1 de %2 MiB a %3 MiB. - + The installer failed to resize partition %1 on disk '%2'. - + L'instal·lador no ha pogut canviar la mida de la partició %1 del disc %2. ResizeVolumeGroupDialog - + Resize Volume Group - + Canvia la mida del grup de volums ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Canvia la mida del grup de volums anomenat %1 de %2 a %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + Canvia la mida del grup de volums anomenat <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. - + L'instal·lador no ha pogut canviar la mida del grup de volums anomenat "%1". ResultsListDialog - + For best results, please ensure that this computer: - + Per a obtindre els millors resultats, assegureu-vos que aquest ordinador... - + System requirements - - - - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - + Requisits de sistema ScanningDialog - + Scanning storage devices... - + S'estan escanejant els dispositius d'emmagatzematge... - + Partitioning - + S'estan fent les particions SetHostNameJob - + Set hostname %1 - + Estableix el nom d'amfitrió %1 - + Set hostname <strong>%1</strong>. - + Estableix el nom d'amfitrió <strong>%1</strong>. - + Setting hostname %1. - + S'estableix el nom d'amfitrió %1. + - Internal Error - + S'ha produït un error intern. - - + + Cannot write hostname to target system - + No es pot escriure el nom d'amfitrió en el sistema de destinació SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Canvia el model de teclat en %1, la disposició de teclat en %2-%3 - + Failed to write keyboard configuration for the virtual console. - + No s'ha pogut escriure la configuració del teclat per a la consola virtual. - - - + + + Failed to write to %1 - + No s'ha pogut escriure en %1 - + Failed to write keyboard configuration for X11. - + No s'ha pogut escriure la configuració del teclat per a X11. - + Failed to write keyboard configuration to existing /etc/default directory. - + No s'ha pogut escriure la configuració del teclat en el directori existent /etc/default. SetPartFlagsJob - + Set flags on partition %1. - + Estableix els marcadors en la partició %1. - + Set flags on %1MiB %2 partition. - + Estableix els marcadors en la partició %2 de %1 MiB. - + Set flags on new partition. - + Estableix els marcadors en la partició nova. - + Clear flags on partition <strong>%1</strong>. - + Neteja els marcadors de la partició <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - + Neteja els marcadors de la partició <strong>%2</strong> de %1 MiB. + + + + Clear flags on new partition. + Neteja els marcadors de la partició nova. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + Estableix el marcador <strong>%2</strong> en la partició <strong>%1</strong>. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Estableix el marcador de la partició <strong>%2</strong> de %1 MiB com a <strong>%3</strong>. - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - + Flag new partition as <strong>%1</strong>. + Estableix el marcador de la partició nova com a <strong>%1</strong>. - + + Clearing flags on partition <strong>%1</strong>. + S'estan netejant els marcadors de la partició <strong>%1</strong>. + + + Clearing flags on %1MiB <strong>%2</strong> partition. - + S'estan netejant els marcadors de la partició <strong>%2</strong>de %1 MiB. + + + + Clearing flags on new partition. + S'estan netejant els marcadors de la partició nova. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + S'estan establint els marcadors <strong>%2</strong> en la partició <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + S'estan establint els marcadors <strong>%3</strong> en la partició <strong>%2</strong> de %1 MiB. - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - - Clear flags on new partition. - - - - - Flag partition <strong>%1</strong> as <strong>%2</strong>. - - - - - Flag new partition as <strong>%1</strong>. - - - - - Clearing flags on partition <strong>%1</strong>. - - - - - Clearing flags on new partition. - - - - - Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - - - - Setting flags <strong>%1</strong> on new partition. - + S'estan establint els marcadors <strong>%1</strong> en la partició nova. - + The installer failed to set flags on partition %1. - + L'instal·lador no ha pogut establir els marcadors en la partició %1. SetPasswordJob - + Set password for user %1 - + Establiu una contrasenya per a l'usuari %1 - + Setting password for user %1. - + S'està establint la contrasenya per a l'usuari %1. - + Bad destination system path. - + La destinació de la ruta del sistema és errònia. - + rootMountPoint is %1 - + El punt de muntatge de l'arrel és %1 + + + + Cannot disable root account. + No es pot desactivar el compte d'arrel. + + + + passwd terminated with error code %1. + El procés passwd ha acabat amb el codi d'error %1. - Cannot disable root account. - + Cannot set password for user %1. + No es pot establir la contrasenya per a l'usuari %1. - passwd terminated with error code %1. - - - - - Cannot set password for user %1. - - - - usermod terminated with error code %1. - + usermod ha terminat amb el codi d'error %1. SetTimezoneJob - + Set timezone to %1/%2 - + Estableix el fus horari en %1/%2 + + + + Cannot access selected timezone path. + No es pot accedir al camí del fus horari seleccionat. + + + + Bad path: %1 + Camí incorrecte: %1 - Cannot access selected timezone path. - + Cannot set timezone. + No es pot establir el fus horari. - Bad path: %1 - - - - - Cannot set timezone. - - - - Link creation failed, target: %1; link name: %2 - + No s'ha pogut crear el vincle; destinació: %1, nom del vincle: %2 - + Cannot set timezone, - + No es pot establir el fus horari, - + Cannot open /etc/timezone for writing - + No es pot obrir /etc/timezone per a escriure-hi + + + + SetupGroupsJob + + + Preparing groups. + S'estan preparant els grups. + + + + + Could not create groups in target system + No s'han pogut crear grups en el sistema de destinació. + + + + These groups are missing in the target system: %1 + Aquests grups falten en el sistema de destinació: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configuració d'usuaris de <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + No es pot fer chmod al fitxer sudoers. + + + + Cannot create sudoers file for writing. + No es pot crear el fitxer sudoers per a escriure-hi. ShellProcessJob - + Shell Processes Job - + Tasca de processos de l'intèrpret d'ordres SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - + %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + D'ac&ord - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &Sí - - - SummaryViewStep - - Summary - + + &No + &No + + + + &Cancel + &Cancel·la + + + + &Close + Tan&ca TrackingInstallJob - + Installation feedback - + Informació de retorn de la instal·lació - + Sending installation feedback. - + S'envia la informació de retorn de la instal·lació. - + Internal error in install-tracking. - + S'ha produït un error intern en install-tracking. - + HTTP request timed out. - + La petició HTTP ha esgotat el temps d'espera. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Informació de retorn d'usuaris de KDE. + + + + Configuring KDE user feedback. + S'està configurant la informació de retorn dels usuaris de KDE. + + + + + Error in KDE user feedback configuration. + S'ha produït un error en la configuració de la informació de retorn dels usuaris KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + No s'ha pogut configurar la informació de retorn dels usuaris de KDE correctament. S'ha produït un error en l'script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + No s'ha pogut configurar la informació de retorn dels usuaris de KDE correctament. S'ha produït un error del Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Informació de retorn de la màquina - + Configuring machine feedback. - + Es configura la informació de retorn de la màquina. - - + + Error in machine feedback configuration. - + S'ha produït un error en la configuració de la informació de retorn de la màquina. - + Could not configure machine feedback correctly, script error %1. - + No s'ha pogut configurar la informació de retorn de la màquina correctament. S'ha produït un error d'script %1. - + Could not configure machine feedback correctly, Calamares error %1. - + No s'ha pogut configurar la informació de retorn de la màquina correctament. S'ha produït un error del Calamares %1. TrackingPage - + Form - + Formulari - + Placeholder - + Marcador de posició - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Cliqueu ací per a no enviar <span style=" font-weight:600;">cap mena d'informació</span> de la vostra instal·lació.</p></body></html> - + <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> - + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Cliqueu ací per a obtindre més informació sobre la informació de retorn dels usuaris.</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - + + 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. + El seguiment ajuda l'equip de desenvolupament de %1 a veure amb quina freqüència, en quin maquinari s'instal·la i quines aplicacions s'usen. Per a veure què s'enviarà, cliqueu en la icona d'ajuda que hi ha al costat de cada àrea. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - + + 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. + Si seleccioneu això, enviareu informació de la vostra instal·lació i el vostre maquinari. Aquesta informació només s'enviarà <b>una vegada</b> després d'acabar la instal·lació. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Si seleccioneu això, enviareu informació periòdicament de la instal·lació a la vostra <b>màquina</b>, el maquinari i les aplicacions en %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Si seleccioneu això, enviareu informació regularment de la vostra instal·lació d'<b>usuari</b>, del maquinari i de les aplicacions i dels patrons d'ús d'aplicacions en %1. TrackingViewStep - + Feedback + Realimentació + + + + UmountJob + + + Unmount file systems. + Desmunta els sistemes de fitxers. + + + + No target system available. + + + + + No rootMountPoint is set. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>Si hi ha més d'una persona que ha d'usar aquest ordinador, podeu crear diversos comptes després de la configuració.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + <small>Si hi ha més d'una persona que ha d'usar aquest ordinador, podeu crear diversos comptes després de la instal·lació.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! - + + Users + Usuaris UsersViewStep - + Users - + Usuaris VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + Crea un grup de volums - + List of Physical Volumes - + Llista de volums físics - + Volume Group Name: - + Nom del grup de volums: - + Volume Group Type: - + Tipus del grup de volums: - + Physical Extent Size: - + Mida de l'extensió física: - + MiB - + MiB - + Total Size: - + Mida total: - + Used Size: - + Mida usada: - + Total Sectors: - + Sectors totals: - + Quantity of LVs: - + Quantitat de volums lògics: WelcomePage - + Form - + Formulari - - + + Select application and system language - + Seleccioneu una aplicació i la llengua del sistema - Open donations website - + &About + &Quant a - - &Donate - + + Open donations website + Obri el lloc web per als donatius + &Donate + Feu un &donatiu + + + Open help and support website - + Obri el lloc web per a l'ajuda i el suport + &Support + &Suport + + + Open issues and bug-tracking website - + Obri el lloc web de problemes i de seguiment d'errors - Open release notes website - - - - - &Release notes - - - - &Known issues - + &Incidències conegudes - - &Support - + + Open release notes website + Obri el lloc web de les notes de la versió - - &About - + + &Release notes + &Notes de la versió - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Us donen la benvinguda al programa de configuració del Calamares per a %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + <h1>Us donem la benvinguda a la configuració per a %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Us donem la benvinguda a l'instal·lador Calamares per a %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Us donem la benvinguda a l'instal·lador per a %1.</h1> + + + + %1 support + %1 soport + + + About %1 setup - + Quant a la configuració de %1 - + About %1 installer Sobre %1 instal·lador - + <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. - - - - - %1 support - %1 soport + <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/>Agraïments per a <a href="https://calamares.io/team/">l'equip del Calamares</a> i per a <a href="https://www.transifex.com/calamares/calamares/">l'equip de traducció del Calamares</a>.<br/><br/>El desenvolupament del<a href="https://calamares.io/">Calamares</a> està patrocinat per <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Benvingut @@ -3674,120 +4077,478 @@ Output: WelcomeViewStep - + Welcome Benvingut + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + S'ha produït un error en la configuració. + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. + <h1>%1</h1><br/> + <strong>%2<br/> + per a %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/> + Moltes gràcies a <a href='https://calamares.io/team/'>l'equip del Calamares</a> + i a <a href='https://www.transifex.com/calamares/calamares/'>l'equip de traducció + del Calamares</a>.<br/><br/> + El desenvolupament del<a href='https://calamares.io/'>Calamares</a> + està patrocinat per <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. + + + + Back + Arrere + + + + calamares-sidebar + + + Show debug information + Mostra la informació de depuració + + + + finishedq + + + Installation Completed - - Back + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <h1>Llengües</h1> </br> + La configuració local del sistema afecta la llengua i el joc de caràcters d'alguns elements de la interfície de línia d'ordres. La configuració actual és <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Configuració local</h1> </br> + La configuració local del sistema afecta el format de números i dates. La configuració actual és <strong>%1</strong>. + + + + Back + Arrere + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Model de teclat: - - Refresh - - - - - + Layouts - + Disposicions - - - Keyboard Layout - + + Type here to test your keyboard + Escriviu ací per a provar el teclat - - Models - - - - + Variants - + Variants + + + localeq - - Test your keyboard - + + Change + Canvia notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + <h3>%1</h3> + <p>Aquestes són exemples de notes de la versió.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Aquest és un fitxer QML d'exemple. Es mostren les opcions en text enriquit amb contingut parpellejant.</p> + + <p>El QML amb text enriquit pot crear etiquetes d'HTML, el contingut parpellejant és útil per a pantalles tàctils.</p> + + <p><b>Això és text en negreta.</b></p> + <p><i>Això és text en cursiva.</i></p> + <p><u>Això és text subratllat.</u></p> + <p><center>Aquest text estarà alineat al centre.</center></p> + <p><s>Aquest text és ratllat.</s></p> + + <p>Codi d'exemple: + <code>ls -l /home</code></p> + + <p><b>Llistes:</b></p> + <ul> + <li>Sistemes amb CPU d'Intel</li> + <li>Sistemes amb CPU AMD</li> + </ul> + + <p>La barra de desplaçament vertical és ajustable, amplària actual a 10.</p> + + + + Back + Arrere + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Trieu el nom d'usuari i les credencials per a iniciar la sessió i fer tasques d'administració. + + + + What is your name? + Quin és el vostre nom? + + + + Your Full Name + Nom complet + + + + What name do you want to use to log in? + Quin nom voleu utilitzar per a entrar al sistema? + + + + Login Name + Nom d'entrada + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Si hi ha més d'una persona que ha d'usar aquest ordinador, podeu crear diversos comptes després de la instal·lació. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Només es permeten lletres en minúscula, números, ratlles baixes i guions. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Quin és el nom d'aquest ordinador? + + + + Computer Name + Nom de l'ordinador + + + + This name will be used if you make the computer visible to others on a network. + Aquest nom s'usarà si feu visible aquest ordinador per a altres en una xarxa. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Seleccioneu una contrasenya per a mantindre el vostre compte segur. + + + + Password + Contrasenya + + + + Repeat Password + Repetiu la contrasenya + + + + 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. + Escriviu la mateixa contrasenya dues vegades per a poder comprovar-ne els errors de mecanografia. Una bona contrasenya contindrà una barreja de lletres, números i signes de puntuació. Hauria de tindre un mínim de huit caràcters i s'hauria de canviar sovint. + + + + Validate passwords quality + Valida la qualitat de les contrasenyes. + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Quan aquesta casella està marcada, es comprova la fortalesa de la contrasenya i no podreu indicar-ne una de dèbil. + + + + Log in automatically without asking for the password + Entra automàticament sense demanar la contrasenya. + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Reutilitza la contrasenya d'usuari com a contrasenya d'arrel. + + + + Use the same password for the administrator account. + Usa la mateixa contrasenya per al compte d'administració. + + + + Choose a root password to keep your account safe. + Trieu una contrasenya d'arrel per mantindre el compte segur. + + + + Root Password + Contrasenya d'arrel + + + + Repeat Root Password + Repetiu la contrasenya d'arrel. + + + + Enter the same password twice, so that it can be checked for typing errors. + Escriviu la mateixa contrasenya dues vegades per a poder comprovar-ne els errors de mecanografia. + welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Us donem la benvinguda a l'instal·lador <quote>%2</quote>per a %1</h3> + <p>Aquest programa us farà algunes preguntes i instal·larà el %1 a l'ordinador. </p> - + About - + Quant a - + Support - + Suport - + Known issues - + Incidències conegudes - + Release notes - + Notes de la versió - + Donate - + Feu un donatiu diff --git a/lang/calamares_cs_CZ.ts b/lang/calamares_cs_CZ.ts index 386013821..9d9f839f6 100644 --- a/lang/calamares_cs_CZ.ts +++ b/lang/calamares_cs_CZ.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Spravovat nastavení automatického připojování (mount) + + BootInfoWidget - + 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. <strong>Zaváděcí prostředí</strong> tohoto systému.<br><br>Starší x86 systémy podporují pouze <strong>BIOS</strong>.<br>Moderní systémy obvykle používají <strong>UEFI</strong>, ale pokud jsou spuštěné v režimu kompatibility, mohou se zobrazovat jako BIOS. - + 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. Systém byl spuštěn se zaváděcím prostředím <strong>EFI</strong>.<br><br>Aby byl systém zaváděn prostředím EFI je třeba, aby instalátor nasadil na <strong> EFI systémový oddíl</strong>aplikaci pro zavádění systému, jako <strong>GRUB</strong> nebo <strong>systemd-boot</strong>. To proběhne automaticky, tedy pokud si nezvolíte ruční dělení datového úložiště – v takovém případě si EFI systémový oddíl volíte nebo vytváříte sami. - + 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. Systém byl spuštěn se zaváděcím prostředím <strong>BIOS</strong>.<br><br>Aby byl systém zaváděn prostředím BIOS je třeba, aby instalátor vpravil zavaděč systému, jako <strong>GRUB</strong>, buď na začátek oddílu nebo (lépe) do <strong>hlavního zaváděcího záznamu (MBR)</strong> na začátku tabulky oddílů. To proběhne automaticky, tedy pokud si nezvolíte ruční dělení datového úložiště – v takovém případě si zavádění nastavujete sami. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Hlavní zaváděcí záznam (MBR) na %1 - + Boot Partition Zaváděcí oddíl - + System Partition Systémový oddíl - + Do not install a boot loader Neinstalovat zavaděč systému - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Prázdná stránka @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulář - + GlobalStorage Globální úložiště - + JobQueue Zpracovává se - + Modules Moduly - + Type: Typ: - - + + none žádný - + Interface: Rozhraní: - - Tools - Nástroje + + Crashes Calamares, so that Dr. Konqui can look at it. + Zhavaruje Calamares, takže se bude možné podívat v nástroji pro analýzu pádů (Dr. Konqui) - + + Reloads the stylesheet from the branding directory. + Znovu načíst tabulky stylů ze složky s přizpůsobením vzhledu. + + + + Uploads the session log to the configured pastebin. + Nahraje záznam událostí z relace do nastavené instance pastebin. + + + + Send Session Log + Odeslat záznamu událostí z relace + + + Reload Stylesheet Znovunačíst sešit se styly - - Widget Tree - Strom widgetu + + Displays the tree of widget names in the log (for stylesheet debugging). + Zobrazí v záznamu událostí strom ovládacích prvků (určeno pro ladění tabulek se styly). - + + Widget Tree + Strom ovládacích prvků + + + Debug information Ladící informace @@ -117,25 +145,25 @@ Calamares::ExecutionViewStep - + Set up Nastavit - + Install - Instalovat + Nainstalovat Calamares::FailJob - + Job failed (%1) Úloha se nezdařila (%1) - + Programmed job failure was explicitly requested. Byl výslovně vyžádán nezdar naprogramované úlohy. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Hotovo @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Úloha pro ukázku (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Spustit v cílovém systému příkaz „%1“. - + Run command '%1'. Spustit příkaz „%1“ - + Running command %1 %2 Spouštění příkazu %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Spouštění %1 operace. - + Bad working directory path Chybný popis umístění pracovní složky - + Working directory %1 for python job %2 is not readable. - Pracovní složku %1 pro Python skript %2 se nedaří otevřít pro čtení. + Pracovní složka %1 pro Python skript %2 není přístupná pro čtení. - + Bad main script file Nesprávný soubor s hlavním skriptem - + Main script file %1 for python job %2 is not readable. - Hlavní soubor s python skriptem %1 pro úlohu %2 se nedaří otevřít pro čtení.. + Hlavní soubor Python skriptu %1 pro úlohu %2 není přístupný pro čtení. - + Boost.Python error in job "%1". Boost.Python chyba ve skriptu „%1“. @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Načítání… - + QML Step <i>%1</i>. QML Step <i>%1</i>. - + Loading failed. Načítání se nezdařilo. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Kontrola požadavků pro modul <i>%1</i> dokončena. + - + Waiting for %n module(s). Čeká se na %n modul @@ -238,7 +271,7 @@ - + (%n second(s)) (%n sekundu) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. Kontrola požadavků na systém dokončena. @@ -256,247 +289,241 @@ Calamares::ViewManager - - &Back - &Zpět - - - - &Next - &Další - - - - &Cancel - &Storno - - - - Cancel setup without changing the system. - Zrušit nastavení bez změny v systému. - - - - Cancel installation without changing the system. - Zrušení instalace bez provedení změn systému. - - - + Setup Failed Nastavení se nezdařilo - - Would you like to paste the install log to the web? - Chcete vyvěsit záznam událostí při instalaci na web? + + Installation Failed + Instalace se nezdařila - + + Error + Chyba + + + + &Yes + &Ano + + + + &No + &Ne + + + + &Close + &Zavřít + + + Install Log Paste URL URL pro vložení záznamu událostí při instalaci - + The upload was unsuccessful. No web-paste was done. Nahrání se nezdařilo. Na web nebylo nic vloženo. - + + Install log posted to + +%1 + +Link copied to clipboard + Záznam událostí z instalace poskytnut na + +%1 + +Odkaz na něj zkopírován do schránky + + + Calamares Initialization Failed Inicializace Calamares se nezdařila - + %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. %1 nemůže být nainstalováno. Calamares se nepodařilo načíst všechny nastavené moduly. Toto je problém způsobu použití Calamares ve vámi používané distribuci. - + <br/>The following modules could not be loaded: <br/> Následující moduly se nepodařilo načíst: - + + Continue with setup? + Pokračovat s instalací? + + + Continue with installation? Pokračovat v instalaci? - + 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> Instalátor %1 provede změny na datovém úložišti, aby bylo nainstalováno %2.<br/><strong>Změny nebude možné vrátit zpět.</strong> - + + 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> + Instalátor %1 provede změny na datovém úložišti, aby bylo nainstalováno %2.<br/><strong>Změny nebude možné vrátit zpět.</strong> + + + &Set up now Na&stavit nyní - + + &Install now + &Spustit instalaci + + + + Go &back + Jít &zpět + + + &Set up Na&stavit - + &Install Na&instalovat - + Setup is complete. Close the setup program. Nastavení je dokončeno. Ukončete nastavovací program. - + + The installation is complete. Close the installer. + Instalace je dokončena. Ukončete instalátor. + + + + Cancel setup without changing the system. + Zrušit nastavení bez změny v systému. + + + + Cancel installation without changing the system. + Zrušení instalace bez provedení změn systému. + + + + &Next + &Další + + + + &Back + &Zpět + + + + &Done + &Hotovo + + + + &Cancel + &Storno + + + Cancel setup? Zrušit nastavování? - + Cancel installation? Přerušit instalaci? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Opravdu chcete přerušit instalaci? Instalační program bude ukončen a všechny změny ztraceny. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Opravdu chcete instalaci přerušit? Instalační program bude ukončen a všechny změny ztraceny. - - - - &Yes - &Ano - - - - - &No - &Ne - - - - &Close - &Zavřít - - - - Continue with setup? - Pokračovat s instalací? - - - - 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> - Instalátor %1 provede změny na datovém úložišti, aby bylo nainstalováno %2.<br/><strong>Změny nebude možné vrátit zpět.</strong> - - - - &Install now - &Spustit instalaci - - - - Go &back - Jít &zpět - - - - &Done - &Hotovo - - - - The installation is complete. Close the installer. - Instalace je dokončena. Ukončete instalátor. - - - - Error - Chyba - - - - Installation Failed - Instalace se nezdařila - CalamaresPython::Helper - + Unknown exception type Neznámý typ výjimky - + unparseable Python error Chyba při zpracovávání (parse) Python skriptu. - + unparseable Python traceback Chyba při zpracovávání (parse) Python záznamu volání funkcí (traceback). - + Unfetchable Python error. Chyba při načítání Python skriptu. - - CalamaresUtils - - - Install log posted to: -%1 - Záznam událostí instalace vyvěšen na: -%1 - - CalamaresWindow - - &Back - &Zpět - - - - &Next - &Další - - - - &Cancel - &Storno - - - + %1 Setup Program Instalátor %1 - + %1 Installer - %1 instalátor + Instalátor %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + Nastavit jmenovku souborového systému na %1. - - Show debug information - Zobrazit ladící informace + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Nastavit jmenovku souborového systému <strong>%1</strong> oddílu <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Instalátoru se nezdařilo aktualizovat tabulku oddílů na jednotce „%1“. CheckerContainer - + Gathering system information... Shromažďování informací o systému… @@ -504,157 +531,197 @@ Instalační program bude ukončen a všechny změny ztraceny. ChoicePage - + Form Formulář - - After: - Po: - - - - Boot loader location: - Umístění zavaděče: - - - + Select storage de&vice: &Vyberte úložné zařízení: - - - - + + + + Current: Stávající: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Ruční rozdělení</strong><br/>Můžete si sami vytvořit nebo změnit velikost oddílů. Pro UEFI instalace je zapotřebí mít GPT tabulku oddílů a <strong>512 MB oddíl /boot se souborovým systémem FAT32</strong> – buď nevytvářejte znovu a použijte existující, nebo takovou vytvořte. + + After: + Po: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Ruční rozdělení datového úložiště</strong><br/>Sami si můžete vytvořit vytvořit nebo zvětšit/zmenšit oddíly. + + + Reuse %1 as home partition for %2. Zrecyklovat %1 na oddíl pro domovské složky %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vyberte oddíl, který chcete zmenšit, poté posouváním na spodní liště změňte jeho velikost.</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 bude zmenšen na %2MiB a nový %3MiB oddíl pro %4 bude vytvořen. - + + Boot loader location: + Umístění zavaděče: + + + <strong>Select a partition to install on</strong> <strong>Vyberte oddíl na který nainstalovat</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nebyl nalezen žádný EFI systémový oddíl. Vraťte se zpět a nastavte %1 pomocí ručního rozdělení. - + The EFI system partition at %1 will be used for starting %2. Pro zavedení %2 se využije EFI systémový oddíl %1. - + EFI system partition: EFI systémový oddíl: - + 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. Zdá se, že na tomto úložném zařízení není žádný operační systém. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Vymazat datové úložiště</strong><br/>Touto volbou budou <font color="red">smazána</font> všechna data, která se na něm nyní nacházejí. - - 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. - Na tomto úložném zařízení bylo nalezeno %1. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. - - - - No Swap - Žádný odkládací prostor (swap) - - - - Reuse Swap - Použít existující odkládací prostor - - - - Swap (no Hibernate) - Odkládací prostor (bez uspávání na disk) - - - - Swap (with Hibernate) - Odkládací prostor (s uspáváním na disk) - - - - Swap to file - Odkládat do souboru - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Nainstalovat vedle</strong><br/>Instalátor zmenší oddíl a vytvoří místo pro %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Nahradit oddíl</strong><br/>Původní oddíl bude nahrazen %1. - + + 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. + Na tomto úložném zařízení bylo nalezeno %1. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. + + + 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. Na tomto úložném zařízení se už nachází operační systém. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled a budete požádáni o jejich potvrzení. - + 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. Na tomto úložném zařízení se už nachází několik operačních systémů. Jak chcete postupovat?<br/>Než budou provedeny jakékoli změny na úložných zařízeních, bude zobrazen jejich přehled změn a budete požádáni o jejich potvrzení. + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Některé z oddílů tohoto úložného zařízení jsou <strong>připojené</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Toto úložné zařízení je součástí <strong>neaktivního RAID</strong> zařízení. + + + + No Swap + Žádný odkládací prostor (swap) + + + + Reuse Swap + Použít existující odkládací prostor + + + + Swap (no Hibernate) + Odkládací prostor (bez uspávání na disk) + + + + Swap (with Hibernate) + Odkládací prostor (s uspáváním na disk) + + + + Swap to file + Odkládat do souboru + ClearMountsJob - + + Successfully unmounted %1. + Úspěšně odpojeno %1. + + + + Successfully disabled swap %1. + Úspěšně vypnut swap %1. + + + + Successfully cleared swap %1. + Úspěšně vyčištěn swap %1. + + + + Successfully closed mapper device %1. + Úspěšně zavřeno mapper zařízení %1. + + + + Successfully disabled volume group %1. + Úspěšně vypnuta skupina svazků %1. + + + Clear mounts for partitioning operations on %1 Odpojit souborové systémy před zahájením dělení %1 na oddíly - + Clearing mounts for partitioning operations on %1. Odpojují se souborové systémy před zahájením dělení %1 na oddíly - + Cleared all mounts for %1 Všechny souborové systémy na %1 odpojeny @@ -662,22 +729,17 @@ Instalační program bude ukončen a všechny změny ztraceny. ClearTempMountsJob - + Clear all temporary mounts. Odpojit všechny dočasné přípojné body. - + Clearing all temporary mounts. Odpojují se všechny dočasné přípojné body. - - Cannot get list of temporary mounts. - Nepodařilo získat seznam dočasných přípojných bodů. - - - + Cleared all temporary mounts. Všechny přípojné body odpojeny. @@ -685,18 +747,18 @@ Instalační program bude ukončen a všechny změny ztraceny. CommandList - - + + Could not run command. Nedaří se spustit příkaz. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Příkaz bude spuštěn v prostředí hostitele a potřebuje znát popis umístění kořene souborového systému. rootMountPoint ale není zadaný. - + The command needs to know the user's name, but no username is defined. Příkaz potřebuje znát uživatelské jméno, to ale zadáno nebylo. @@ -704,100 +766,235 @@ Instalační program bude ukončen a všechny změny ztraceny. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Počítač nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokračovat <a href="#details">Podrobnosti…</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Počítač nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokračovat <a href="#details">Podrobnosti…</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/>Instalace může pokračovat, ale některé funkce mohou být vypnuty. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/>Instalace může pokračovat, ale některé funkce mohou být vypnuty. - - - - This program will ask you some questions and set up %2 on your computer. - Tento program vám položí několik dotazů, aby na základě odpovědí příslušně nainstaloval %2 na váš počítač. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Vítejte v Calamares, instalačním programu (nejen) pro %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Vítejte v instalátoru pro %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Vítejte v Calamares, instalačním programu (nejen) pro %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Vítejte v instalátoru %1.</h1> - - - + Set keyboard model to %1.<br/> Nastavit model klávesnice na %1.<br/> - + Set keyboard layout to %1/%2. - Nastavit rozložení klávesnice na %1/%2. + Nastavit rozvržení klávesnice na %1/%2. - + + Set timezone to %1/%2. + Nastavit časové pásmo na %1/%2. + + + The system language will be set to %1. Jazyk systému bude nastaven na %1. - + The numbers and dates locale will be set to %1. Formát zobrazení čísel, data a času bude nastaven dle národního prostředí %1. - - Set timezone to %1/%2.<br/> - Nastavit časové pásmo na %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Síťová instalace. (vypnuto: nesprávné nastavení) - + Network Installation. (Disabled: Received invalid groups data) Síťová instalace. (Vypnuto: Obdrženy neplatné údaje skupin) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) Instalace ze sítě. (Vypnuto: vnitřní chyba) - + + Network Installation. (Disabled: No package list) + Instalace ze sítě. (Vypnuto: Není seznam balíčků) + + + + Package selection + Výběr balíčků + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Síťová instalace. (Vypnuto: Nedaří se stáhnout seznamy balíčků – zkontrolujte připojení k síti) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Počítač nesplňuje minimální požadavky pro instalaci %1.<br/>Nastavování nemůže pokračovat <a href="#details">Podrobnosti…</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Počítač nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokračovat <a href="#details">Podrobnosti…</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/>Instalace může pokračovat, ale některé funkce mohou být vypnuty. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/>Instalace může pokračovat, ale některé funkce mohou být vypnuty. + + + + This program will ask you some questions and set up %2 on your computer. + Tento program vám položí několik dotazů, aby na základě odpovědí příslušně nainstaloval %2 na váš počítač. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Vítejte v Calamares – instalačním programu pro %1.</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Vítejte v instalátoru %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Vítejte v Calamares, instalačním programu pro %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Vítejte v instalátoru %1.</h1> + + + + Your username is too long. + Vaše uživatelské jméno je příliš dlouhé. + + + + '%1' is not allowed as username. + „%1“ není možné použít jako uživatelské jméno. + + + + Your username must start with a lowercase letter or underscore. + Je třeba, aby uživatelské jméno začínalo na malé písmeno nebo podtržítko. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Je možné použít pouze malá písmena, číslice, podtržítko a spojovník. + + + + Your hostname is too short. + Název stroje je příliš krátký. + + + + Your hostname is too long. + Název stroje je příliš dlouhý. + + + + '%1' is not allowed as hostname. + „%1“ není možné použít jako název počítače. + + + + Only letters, numbers, underscore and hyphen are allowed. + Je možné použít pouze písmena, číslice, podtržítko a spojovník. + + + + Your passwords do not match! + Zadání hesla se neshodují! + + + + OK! + OK! + + + + Setup Failed + Nastavení se nezdařilo + + + + Installation Failed + Instalace se nezdařila + + + + The setup of %1 did not complete successfully. + Nastavení %1 nebylo úspěšně dokončeno. + + + + The installation of %1 did not complete successfully. + Instalace %1 nebyla úspěšně dokončena. + + + + Setup Complete + Nastavení dokončeno + + + + Installation Complete + Instalace dokončena + + + + The setup of %1 is complete. + Nastavení %1 je dokončeno. + + + + The installation of %1 is complete. + Instalace %1 je dokončena. + + + + Package Selection + Výběr balíčků + + + + Please pick a product from the list. The selected product will be installed. + Vyberte produkt ze seznamu. Ten vybraný bude nainstalován. + + + + Install option: <strong>%1</strong> + Volba instalace: <strong>%1</strong> + + + + None + Žádné + + + + Summary + Souhrn + + + + This is an overview of what will happen once you start the setup procedure. + Toto je přehled událostí které nastanou po spuštění instalačního procesu. + + + + This is an overview of what will happen once you start the install procedure. + Toto je přehled událostí které nastanou po spuštění instalačního procesu. + ContextualProcessJob - + Contextual Processes Job Úloha kontextuálních procesů @@ -805,100 +1002,136 @@ Instalační program bude ukončen a všechny změny ztraceny. CreatePartitionDialog - + Create a Partition Vytvořit oddíl - - MiB - MiB - - - - Partition &Type: - &Typ oddílu: - - - - &Primary - &Primární - - - - E&xtended - &Rozšířený - - - - Fi&le System: - &Souborový systém: - - - - LVM LV name - Název LVM logického svazku - - - - Flags: - Příznaky: - - - - &Mount Point: - &Přípojný bod: - - - + Si&ze: &Velikost: - + + MiB + MiB + + + + Partition &Type: + &Typ oddílu: + + + + Primar&y + Pr&imární + + + + E&xtended + &Rozšířený + + + + Fi&le System: + &Souborový systém: + + + + LVM LV name + Název LVM logického svazku + + + + &Mount Point: + &Přípojný bod: + + + + Flags: + Příznaky: + + + + Label for the filesystem + Jmenovka pro souborový systém + + + + FS Label: + Jmenovka soubor. systému: + + + En&crypt Š&ifrovat - + Logical Logický - + Primary Primární - + GPT GPT - + Mountpoint already in use. Please select another one. Tento přípojný bod už je používán – vyberte jiný. + + + Mountpoint must start with a <tt>/</tt>. + Je třeba, aby přípojný bod začínal na <tt>/</tt> (dopředné lomítko). + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Vytvořit nový %1MiB oddíl na %3 (%2) s položkami %4. + + + + Create new %1MiB partition on %3 (%2). + Vytvořit nový %1MiB oddíl na %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Vytvořit nový %2MiB oddíl na %4 (%3) se souborovým systémem %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Vytvořit nový <strong>%1MiB</strong> oddíl na <strong>%3</strong> (%2) s položkami <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Vytvořit nový <strong>%1MIB</strong> oddíl na <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Vytvořit nový <strong>%2MiB</strong> oddíl na <strong>%4</strong> (%3) se souborovým systémem <strong>%1</strong>. - + + Creating new %1 partition on %2. Vytváří se nový %1 oddíl na %2. - + The installer failed to create partition on disk '%1'. Instalátoru se nepodařilo vytvořit oddíl na datovém úložišti „%1“. @@ -906,27 +1139,27 @@ Instalační program bude ukončen a všechny změny ztraceny. CreatePartitionTableDialog - + Create Partition Table Vytvořit tabulku oddílů - + Creating a new partition table will delete all existing data on the disk. Vytvoření nové tabulky oddílů vymaže všechna stávající data na jednotce. - + What kind of partition table do you want to create? Jaký typ tabulky oddílů si přejete vytvořit? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -934,22 +1167,22 @@ Instalační program bude ukončen a všechny změny ztraceny. CreatePartitionTableJob - + Create new %1 partition table on %2. Vytvořit novou %1 tabulku oddílů na %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Vytvořit novou <strong>%1</strong> tabulku oddílů na <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Vytváří se nová %1 tabulka oddílů na %2. - + The installer failed to create a partition table on %1. Instalátoru se nepodařilo vytvořit tabulku oddílů na %1. @@ -957,45 +1190,41 @@ Instalační program bude ukončen a všechny změny ztraceny. CreateUserJob - + Create user %1 Vytvořit uživatele %1 - + Create user <strong>%1</strong>. Vytvořit uživatele <strong>%1</strong>. - - Creating user %1. - Vytváří se účet pro uživatele %1. + + Preserving home directory + Zachovává se domovská složka - - Sudoers dir is not writable. - Nedaří se zapsat do složky sudoers.d. + + + Creating user %1 + Vytváření uživatele %1 - - Cannot create sudoers file for writing. - Nepodařilo se vytvořit soubor pro sudoers tak, aby do něj šlo zapsat. + + Configuring user %1 + Nastavuje se uživatel %1 - - Cannot chmod sudoers file. - Nepodařilo se změnit přístupová práva (chmod) na souboru se sudoers. - - - - Cannot open groups file for reading. - Nepodařilo se otevřít soubor groups pro čtení. + + Setting file permissions + Nastavují se přístupová práva k souboru CreateVolumeGroupDialog - + Create Volume Group Vytvořit skupinu svazků @@ -1003,22 +1232,22 @@ Instalační program bude ukončen a všechny změny ztraceny. CreateVolumeGroupJob - + Create new volume group named %1. Vytvořit novou skupinu svazků nazvanou %1. - + Create new volume group named <strong>%1</strong>. Vytvořit novou skupinu svazků nazvanou <strong>%1</strong>. - + Creating new volume group named %1. Vytváří se nová skupina svazků nazvaná %1. - + The installer failed to create a volume group named '%1'. Instalátoru se nepodařilo vytvořit skupinu svazků nazvanou „%1“. @@ -1026,18 +1255,18 @@ Instalační program bude ukončen a všechny změny ztraceny. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deaktivovat skupinu svazků nazvanou %1. - + Deactivate volume group named <strong>%1</strong>. Deaktivovat skupinu svazků nazvanou <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Instalátoru se nepodařilo deaktivovat skupinu svazků nazvanou %1. @@ -1045,22 +1274,22 @@ Instalační program bude ukončen a všechny změny ztraceny. DeletePartitionJob - + Delete partition %1. Smazat oddíl %1. - + Delete partition <strong>%1</strong>. Smazat oddíl <strong>%1</strong>. - + Deleting partition %1. Odstraňuje se oddíl %1. - + The installer failed to delete partition %1. Instalátoru se nepodařilo odstranit oddíl %1. @@ -1068,46 +1297,46 @@ Instalační program bude ukončen a všechny změny ztraceny. DeviceInfoWidget - - 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. - Typ <strong>tabulky oddílů</strong>, který je na vybraném úložném zařízení.<br><br>Jedinou možností jak změnit typ tabulky oddílů je smazání a opětovné vytvoření nové tabulky oddílů, tím se smažou všechna data na daném úložném zařízení.<br>Tento instalátor ponechá stávající typ tabulky oddílů, pokud si sami nenavolíte jeho změnu.<br>Pokud si nejste jisti, na moderních systémech se upřednostňuje GPT. - - - + This device has a <strong>%1</strong> partition table. Na tomto zařízení je tabulka oddílů <strong>%1</strong>. - + 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. - Vybrané úložné zařízení je <strong>loop</strong> zařízení.<br><br> Nejedná se o vlastní tabulku oddílů, je to pseudo zařízení, které zpřístupňuje soubory blokově. Tento typ nastavení většinou obsahuje jediný systém souborů. + Vybrané úložné zařízení je <strong>loop</strong> zařízení.<br><br> Nejedná se o vlastní tabulku oddílů, je to pseudo zařízení, které zpřístupňuje soubory blokově. Tento typ uspořádání většinou obsahuje jediný souborový systém. - + 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. Instalační program na zvoleném zařízení <strong>nezjistil žádnou tabulku oddílů</strong>.<br><br>Toto zařízení buď žádnou tabulku nemá nebo je porušená nebo neznámého typu.<br> Instalátor může vytvořit novou tabulku oddílů – buď automaticky nebo přes ruční rozdělení jednotky. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Toto je doporučený typ tabulky oddílů pro moderní systémy, které se spouští pomocí <strong>UEFI</strong> zaváděcího prostředí. - + <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. <br><br>Tento typ tabulky oddílů je vhodný pro starší systémy, které jsou spouštěny z prostředí <strong>BIOS</strong>. Více se dnes využívá GPT.<br><strong>Upozornění:</strong> Tabulka oddílů MBR je zastaralý standard z dob MS-DOS.<br>Lze vytvořit pouze 4 <em>primární</em> oddíly, a z těchto 4, jeden může být <em>rozšířeným</em> oddílem, který potom může obsahovat více <em>logických</em> oddílů. + + + 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. + Typ <strong>tabulky oddílů</strong>, který je na vybraném úložném zařízení.<br><br>Jedinou možností jak změnit typ tabulky oddílů je smazání a opětovné vytvoření nové tabulky oddílů, tím se smažou všechna data na daném úložném zařízení.<br>Tento instalátor ponechá stávající typ tabulky oddílů, pokud si sami nenavolíte jeho změnu.<br>Pokud si nejste jisti, na moderních systémech se upřednostňuje GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 – %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 – (%2) @@ -1116,17 +1345,17 @@ Instalační program bude ukončen a všechny změny ztraceny. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Zapsat nastavení LUKS pro Dracut do %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Přeskočit zápis nastavení LUKS pro Dracut: oddíl „/“ není šifrovaný - + Failed to open %1 Nepodařilo se otevřít %1 @@ -1134,7 +1363,7 @@ Instalační program bude ukončen a všechny změny ztraceny. DummyCppJob - + Dummy C++ Job Výplňová úloha C++ @@ -1142,123 +1371,167 @@ Instalační program bude ukončen a všechny změny ztraceny. EditExistingPartitionDialog - + Edit Existing Partition Upravit existující oddíl - - Content: - Obsah: + + Con&tent: + Ob&sah: - + &Keep &Zachovat - + Format Formátovat - + Warning: Formatting the partition will erase all existing data. Varování: Formátování oddílu vymaže všechna data. - + &Mount Point: &Přípojný bod: - + Si&ze: &Velikost: - + MiB MiB - + Fi&le System: &Souborový systém: - + Flags: Příznaky: - - Mountpoint already in use. Please select another one. - Tento přípojný bod je už používán – vyberte jiný. + + Label for the filesystem + Jmenovka pro souborový systém + + + + FS Label: + Jmenovka soubor. systému: EncryptWidget - + Form Formulář - + En&crypt system Z&ašifrovat systém - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Zdá se, že tento počítač nezvládá šifrování natolik rychle (postrádá příslušné rozšíření instrukční sady procesoru či doplňkový čip), aby bylo možné šifrovat celý systém. Šifrování můžete zapnout i tak, ale může to způsobovat zpomalení. + + + Passphrase Heslová fráze - + Confirm passphrase Potvrzení heslové fráze - + + Please enter the same passphrase in both boxes. Zadejte stejnou heslovou frázi do obou kolonek. + + ErrorDialog + + + Details: + Podrobnosti: + + + + Would you like to paste the install log to the web? + Chcete vyvěsit záznam událostí při instalaci na web? + + FillGlobalStorageJob - + Set partition information Nastavit informace o oddílu - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Nainstalovat %1 na <strong>nový</strong> systémový oddíl %2 s funkcemi <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Nainstalovat %1 na <strong>nový</strong> %2 systémový oddíl. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Nastavit <strong>nový</strong> %2 oddíl s přípojným bodem <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Nastavit <strong>nový</strong> %2 oddíl s přípojným bodem <strong>%1</strong>a funkcemi <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Nastavit <strong>nový</strong> %2 oddíl s přípojným bodem <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Nainstalovat %2 na systémový oddíl %3 <strong>%1</strong> s funkcemi <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Nastavit %3 oddíl <strong>%1</strong> s přípojným bodem <strong>%2</strong> a funkcemi <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Nastavit %3 oddíl <strong>%1</strong> s přípojným bodem <strong>%2</strong> %4. + + + Install %2 on %3 system partition <strong>%1</strong>. Nainstalovat %2 na %3 systémový oddíl <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Nastavit %3 oddíl <strong>%1</strong> s přípojným bodem <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Nainstalovat zavaděč do <strong>%1</strong>. - + Setting up mount points. Nastavují se přípojné body. @@ -1266,93 +1539,81 @@ Instalační program bude ukončen a všechny změny ztraceny. FinishedPage - + Form Formulář - + &Restart now &Restartovat nyní - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Instalace je u konce.</h1><br/>%1 byl nainstalován na váš počítač.<br/>Nyní ho můžete restartovat a přejít do čerstvě nainstalovaného systému, nebo můžete pokračovat v práci ve stávajícím prostředím %2, spuštěným z instalačního média. - + <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> <html><head/><body><p>Když je tato kolonka zaškrtnutá, systém se restartuje jakmile kliknete na <span style="font-style:italic;">Hotovo</span> nebo zavřete instalátor.</p></body></html> - + <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. <h1>Instalace je u konce.</h1><br/>%1 bylo nainstalováno na váš počítač.<br/>Nyní ho můžete restartovat a přejít do čerstvě nainstalovaného systému, nebo můžete pokračovat v práci ve stávajícím prostředím %2, spuštěným z instalačního média. - + <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> <html><head/><body><p>Když je tato kolonka zaškrtnutá, systém se restartuje jakmile kliknete na <span style="font-style:italic;">Hotovo</span> nebo zavřete instalátor.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Instalace se nezdařila</h1><br/>%1 nebyl instalován na váš počítač.<br/>Hlášení o chybě: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalace se nezdařila</h1><br/>%1 nebylo nainstalováno na váš počítač.<br/>Hlášení o chybě: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Dokončit + + + FinishedViewStep - - Setup Complete - Nastavení dokončeno - - - - Installation Complete - Instalace dokončena - - - - The setup of %1 is complete. - Nastavení %1 je dokončeno. - - - - The installation of %1 is complete. - Instalace %1 je dokončena. + + Finish + Dokončit FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formátovat oddíl %1 (souborový systém: %2, velikost %3 MiB) na %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Naformátovat <strong>%3MiB</strong> oddíl <strong>%1</strong> souborovým systémem <strong>%2</strong>. - + Formatting partition %1 with file system %2. Vytváření souborového systému %2 na oddílu %1. - + The installer failed to format partition %1 on disk '%2'. Instalátoru se nepodařilo vytvořit souborový systém na oddílu %1 jednotky datového úložiště „%2“. @@ -1360,72 +1621,72 @@ Instalační program bude ukončen a všechny změny ztraceny. GeneralRequirements - + has at least %1 GiB available drive space má alespoň %1 GiB dostupného prostoru - + There is not enough drive space. At least %1 GiB is required. Nedostatek místa na úložišti. Je potřeba nejméně %1 GiB. - + has at least %1 GiB working memory má alespoň %1 GiB operační paměti - + The system does not have enough working memory. At least %1 GiB is required. Systém nemá dostatek operační paměti. Je potřeba nejméně %1 GiB. - + is plugged in to a power source je připojený ke zdroji napájení - + The system is not plugged in to a power source. Systém není připojen ke zdroji napájení. - + is connected to the Internet je připojený k Internetu - + The system is not connected to the Internet. Systém není připojený k Internetu. - + is running the installer as an administrator (root) instalátor je spuštěný s právy správce systému (root) - + The setup program is not running with administrator rights. Nastavovací program není spuštěn s právy správce systému. - + The installer is not running with administrator rights. Instalační program není spuštěn s právy správce systému. - + has a screen large enough to show the whole installer má obrazovku dostatečně velkou pro zobrazení celého instalátoru - + The screen is too small to display the setup program. Rozlišení obrazovky je příliš malé pro zobrazení nastavovacího programu. - + The screen is too small to display the installer. Rozlišení obrazovky je příliš malé pro zobrazení instalátoru. @@ -1433,7 +1694,7 @@ Instalační program bude ukončen a všechny změny ztraceny. HostInfoJob - + Collecting information about your machine. Shromažďují se informací o stroji. @@ -1441,25 +1702,25 @@ Instalační program bude ukončen a všechny změny ztraceny. IDJob - - + + + - OEM Batch Identifier Identifikátor OEM série - + Could not create directories <code>%1</code>. Nedaří se vytvořit složky <code>%1</code>. - + Could not open file <code>%1</code>. Nedaří se otevřít soubor <code>%1</code>. - + Could not write to file <code>%1</code>. Nedaří se zapsat do souboru <code>%1</code>. @@ -1467,7 +1728,7 @@ Instalační program bude ukončen a všechny změny ztraceny. InitcpioJob - + Creating initramfs with mkinitcpio. Vytváření initramfs pomocí mkinitcpio. @@ -1475,7 +1736,7 @@ Instalační program bude ukončen a všechny změny ztraceny. InitramfsJob - + Creating initramfs. Vytváření initramfs. @@ -1483,17 +1744,17 @@ Instalační program bude ukončen a všechny změny ztraceny. InteractiveTerminalPage - + Konsole not installed Konsole není nainstalované. - + Please install KDE Konsole and try again! Nainstalujte KDE Konsole a zkuste to znovu! - + Executing script: &nbsp;<code>%1</code> Spouštění skriptu: &nbsp;<code>%1</code> @@ -1501,28 +1762,15 @@ Instalační program bude ukončen a všechny změny ztraceny. InteractiveTerminalViewStep - + Script Skript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Nastavit model klávesnice na %1.<br/> - - - - Set keyboard layout to %1/%2. - Nastavit rozložení klávesnice na %1/%2. - - KeyboardQmlViewStep - + Keyboard Klávesnice @@ -1530,7 +1778,7 @@ Instalační program bude ukončen a všechny změny ztraceny. KeyboardViewStep - + Keyboard Klávesnice @@ -1538,65 +1786,88 @@ Instalační program bude ukončen a všechny změny ztraceny. LCLocaleDialog - + System locale setting - Místní a jazykové nastavení systému + Místní a jazyková nastavení systému - + 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>. Místní a jazykové nastavení systému ovlivňuje jazyk a znakovou sadu některých prvků rozhraní příkazového řádku.<br/>Stávající nastavení je <strong>%1</strong>. - + &Cancel &Storno - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Nastavování šifrovaného prostoru pro odkládání stránek paměti. + + + + No target system available. + Není k dispozici cílový systém + + + + No rootMountPoint is set. + Není nastaven rootMountPoint. + + + + No configFilePath is set. + Není nastaveno configFilePath. + + LicensePage - + Form Formulář - + <h1>License Agreement</h1> <h1>Licenční ujednání</h1> - + I accept the terms and conditions above. Souhlasím s výše uvedenými podmínkami. - + Please review the End User License Agreements (EULAs). Pročtěte si Smlouvy s koncovými uživatelem (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. Tato nastavovací procedura nainstaluje proprietární software, který je předmětem licenčních podmínek. - + If you do not agree with the terms, the setup procedure cannot continue. Pokud s podmínkami nesouhlasíte, instalační procedura nemůže pokračovat. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Pro poskytování dalších funkcí a vylepšení pro uživatele, tato nastavovací procedura nainstaluje i proprietární software, který je předmětem licenčních podmínek. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Pokud nesouhlasíte s podmínkami, proprietární software nebude nainstalován a namísto toho budou použity opensource alternativy. @@ -1604,7 +1875,7 @@ Instalační program bude ukončen a všechny změny ztraceny. LicenseViewStep - + License Licence @@ -1612,109 +1883,102 @@ Instalační program bude ukončen a všechny změny ztraceny. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ovladač</strong><br/>od %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 ovladač grafiky</strong><br/><font color="Grey">od %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 doplněk prohlížeče</strong><br/><font color="Grey">od %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">od %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 balíček</strong><br/><font color="Grey">od %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">od %2</font> - + File: %1 Soubor: %1 - + + Hide license text + Skrýt text licence + + + Show the license text Zobrazit text licence - + Open license agreement in browser. Otevřít licenční ujednání v prohlížeči. - - - Hide license text - Skrýt text licence - LocalePage - - The system language will be set to %1. - Jazyk systému bude nastaven na %1. - - - - The numbers and dates locale will be set to %1. - Formát zobrazení čísel, data a času bude nastaven dle národního prostředí %1. - - - + Region: Oblast: - + Zone: Pásmo: - - + + &Change... &Změnit… - - - Set timezone to %1/%2.<br/> - Nastavit časové pásmo na %1/%2.<br/> - LocaleQmlViewStep - + Location Poloha + + LocaleTests + + + Quit + Ukončit + + LocaleViewStep - + Location Poloha @@ -1722,35 +1986,35 @@ Instalační program bude ukončen a všechny změny ztraceny. LuksBootKeyFileJob - + Configuring LUKS key file. Nastavování souboru s klíčem pro LUKS šifrování. - - + + No partitions are defined. Nejsou definovány žádné oddíly. - - - + + + Encrypted rootfs setup error Chyba nastavení šifrovaného kořenového oddílu - + Root partition %1 is LUKS but no passphrase has been set. Kořenový oddíl %1 je LUKS, ale nebyla nastavena žádná heslová fráze. - + Could not create LUKS key file for root partition %1. Nedaří se vytvořit LUKS klíč pro kořenový oddíl %1. - + Could not configure LUKS key file on partition %1. Nedaří se nastavit LUKS klíč pro oddíl %1. @@ -1758,116 +2022,132 @@ Instalační program bude ukončen a všechny změny ztraceny. MachineIdJob - + Generate machine-id. Vytvořit identifikátor stroje. - + Configuration Error Chyba nastavení - + No root mount point is set for MachineId. Pro MachineId není nastaven žádný kořenový přípojný bod. + + Map + + + Timezone: %1 + Časové pásmo: %1 + + + + 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. + Vyberte vámi upřednostňované umístění na mapě, aby vám instalátor mohl doporučit místní a jazyková nastavení + a časové pásmo. Doporučená nastavení můžete dále jemně doladit níže. Pro hledání na mapě přetahujte + pro posouvání a pomocí tlačítek +/- přibližujte/oddalujte nebo k tomu použijte kolečko myši. + + NetInstallViewStep - - + Package selection Výběr balíčků - + Office software Aplikace pro kancelář - + Office package Balíček s kancelářským software - + Browser software Aplikace pro procházení webu - + Browser package Balíček s webovým prohlížečem - + Web browser Webový prohlížeč - + Kernel Jádro systému - + Services Služby - + Login Uživatelské jméno - + Desktop Desktop - + Applications Aplikace - + Communication Komunikace - + Development Vývoj - + Office Kancelář - + Multimedia Multimédia - + Internet Internet - + Theming Motivy vzhledu - + Gaming Hry - + Utilities Nástroje @@ -1875,7 +2155,7 @@ Instalační program bude ukončen a všechny změny ztraceny. NotesQmlViewStep - + Notes Poznámky @@ -1883,17 +2163,17 @@ Instalační program bude ukončen a všechny změny ztraceny. OEMPage - + Ba&tch: &Série: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Sem zadejte identifikátor série. Toto bude uloženo v cílovém systému.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Nastavení pro OEM</h1><p>Calamares tato nastavení použije při nastavování cílového systému.</p></body></html> @@ -1901,260 +2181,335 @@ Instalační program bude ukončen a všechny změny ztraceny. OEMViewStep - + OEM Configuration Nastavení pro OEM - + Set the OEM Batch Identifier to <code>%1</code>. Nastavit identifikátor OEM série na <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Vyberte vámi upřednostňovanou oblast, nebo použijte výchozí nastavení. + + + + + + Timezone: %1 + Časová zóna: %1 + + + + Select your preferred Zone within your Region. + Vyberte upřednostňované pásmo ve svém regionu. + + + + Zones + Pásma + + + + You can fine-tune Language and Locale settings below. + Níže můžete doladit nastavení jazyka a národního prostředí. + + PWQ - + Password is too short Heslo je příliš krátké - + Password is too long Heslo je příliš dlouhé - + Password is too weak Heslo je příliš slabé - + Memory allocation error when setting '%1' Chyba přidělování paměti při nastavování „%1“ - + Memory allocation error Chyba při přidělování paměti - + The password is the same as the old one Heslo je stejné jako to přechozí - + The password is a palindrome Heslo je palindrom (je stejné i pozpátku) - + The password differs with case changes only Heslo se liší pouze změnou velikosti písmen - + The password is too similar to the old one Heslo je příliš podobné tomu předchozímu - + The password contains the user name in some form Heslo obsahuje nějakou formou uživatelské jméno - + The password contains words from the real name of the user in some form Heslo obsahuje obsahuje nějakou formou slova ze jména uživatele - + The password contains forbidden words in some form Heslo obsahuje nějakou formou slova, která není možné použít - - The password contains less than %1 digits - Heslo obsahuje méně než %1 číslic - - - + The password contains too few digits Heslo obsahuje příliš málo číslic - - The password contains less than %1 uppercase letters - Heslo obsahuje méně než %1 velkých písmen - - - + The password contains too few uppercase letters Heslo obsahuje příliš málo velkých písmen - - - The password contains less than %1 lowercase letters - Heslo obsahuje méně než %1 malých písmen + + + The password contains fewer than %n lowercase letters + + Heslo obsahuje méně než %1 malé písmeno + Heslo obsahuje méně než %1 malá písmena + Heslo obsahuje méně než %1 malých písmen + Heslo obsahuje méně než %1 malá písmena + - + The password contains too few lowercase letters Heslo obsahuje příliš málo malých písmen - - The password contains less than %1 non-alphanumeric characters - Heslo obsahuje méně než %1 speciálních znaků - - - + The password contains too few non-alphanumeric characters Heslo obsahuje příliš málo speciálních znaků - - The password is shorter than %1 characters - Heslo je kratší než %1 znaků - - - + The password is too short Heslo je příliš krátké - - The password is just rotated old one - Heslo je jen některé z předchozích - - - - The password contains less than %1 character classes - Heslo obsahuje méně než %1 druhů znaků - - - + The password does not contain enough character classes Heslo není tvořeno dostatečným počtem druhů znaků - - The password contains more than %1 same characters consecutively - Heslo obsahuje více než %1 stejných znaků za sebou - - - + The password contains too many same characters consecutively Heslo obsahuje příliš mnoho stejných znaků za sebou - - The password contains more than %1 characters of the same class consecutively - Heslo obsahuje více než %1 znaků ze stejné třídy za sebou - - - + The password contains too many characters of the same class consecutively Heslo obsahuje příliš mnoho znaků stejného druhu za sebou - - - The password contains monotonic sequence longer than %1 characters - Heslo obsahuje monotónní posloupnost delší než %1 znaků + + + The password contains fewer than %n digits + + Heslo obsahuje méně než %1 číslici + Heslo obsahuje méně než %1 číslice + Heslo obsahuje méně než %1 číslic + Heslo obsahuje méně než %1 číslice + + + + + The password contains fewer than %n uppercase letters + + Heslo obsahuje méně než %n velké písmeno + Heslo obsahuje méně než %n velká písmena + Heslo obsahuje méně než %n velkých písmen + Heslo obsahuje méně než %n velká písmena + + + + + The password contains fewer than %n non-alphanumeric characters + + Heslo obsahuje méně než %n speciální znak + Heslo obsahuje méně než %n speciální znaky + Heslo obsahuje méně než %n speciálních znaků + Heslo obsahuje méně než %n speciální znaky + + + + + The password is shorter than %n characters + + Heslo je kratší než %1 znak + Heslo je kratší než %1 znaky + Heslo je kratší než %1 znaků + Heslo je kratší než %1 znaky + - + + The password is a rotated version of the previous one + Heslo je otočenou verzí některého z předchozích + + + + The password contains fewer than %n character classes + + Heslo obsahuje méně než %n druh znaků + Heslo obsahuje méně než %n druhy znaků + Heslo obsahuje méně než %n druhů znaků + Heslo obsahuje méně než %n druhy znaků + + + + + The password contains more than %n same characters consecutively + + Heslo obsahuje více než %1 stejný znak za sebou + Heslo obsahuje více než %1 stejné znaky za sebou + Heslo obsahuje více než %1 stejných znaků za sebou + Heslo obsahuje více než %1 stejné znaky za sebou + + + + + The password contains more than %n characters of the same class consecutively + + Heslo obsahuje více než %n znak stejného druhu za sebou + Heslo obsahuje více než %n znaky stejného druhu za sebou + Heslo obsahuje více než %n znaků stejného druhu za sebou + Heslo obsahuje více než %n znaky stejného druhu za sebou + + + + + The password contains monotonic sequence longer than %n characters + + Heslo obsahuje monotónní posloupnost delší než %n znak + Heslo obsahuje monotónní posloupnost delší než %n znaky + Heslo obsahuje monotónní posloupnost delší než %n znaků + Heslo obsahuje monotónní posloupnost delší než %n znaky + + + + The password contains too long of a monotonic character sequence Heslo obsahuje příliš dlouhou monotónní posloupnost - + No password supplied Nebylo zadáno žádné heslo - + Cannot obtain random numbers from the RNG device Nedaří se získat náhodná čísla ze zařízení generátoru náhodných čísel (RNG) - + Password generation failed - required entropy too low for settings Vytvoření hesla se nezdařilo – úroveň nahodilosti je příliš nízká - + The password fails the dictionary check - %1 Heslo je slovníkové – %1 - + The password fails the dictionary check Heslo je slovníkové - + Unknown setting - %1 Neznámé nastavení – %1 - + Unknown setting Neznámé nastavení - + Bad integer value of setting - %1 Chybná celočíselná hodnota nastavení – %1 - + Bad integer value Chybná celočíselná hodnota - + Setting %1 is not of integer type Nastavení %1 není typu celé číslo - + Setting is not of integer type Nastavení není typu celé číslo - + Setting %1 is not of string type Nastavení %1 není typu řetězec - + Setting is not of string type Nastavení není typu řetězec - + Opening the configuration file failed Nepodařilo se otevřít soubor s nastaveními - + The configuration file is malformed Soubor s nastaveními nemá správný formát - + Fatal failure Fatální nezdar - + Unknown error Neznámá chyba - + Password is empty Heslo není vyplněné @@ -2162,40 +2517,48 @@ Instalační program bude ukončen a všechny změny ztraceny. PackageChooserPage - + Form - Form + Formulář - + Product Name Název produktu - + TextLabel TextovýPopisek - + Long Product Description Podrobnější popis produktu - + Package Selection Výběr balíčků - + Please pick a product from the list. The selected product will be installed. Vyberte produkt ze seznamu. Ten vybraný bude nainstalován. + + PackageChooserQmlViewStep + + + Packages + Balíčky + + PackageChooserViewStep - + Packages Balíčky @@ -2203,12 +2566,12 @@ Instalační program bude ukončen a všechny změny ztraceny. PackageModel - + Name Název - + Description Popis @@ -2216,17 +2579,17 @@ Instalační program bude ukončen a všechny změny ztraceny. Page_Keyboard - + Form Formulář - + Keyboard Model: Model klávesnice: - + Type here to test your keyboard Klávesnici vyzkoušíte psaním sem @@ -2234,96 +2597,96 @@ Instalační program bude ukončen a všechny změny ztraceny. Page_UserSetup - + Form Formulář - + What is your name? Jak se jmenujete? - - What name do you want to use to log in? - Jaké jméno chcete používat pro přihlašování do systému? - - - - Choose a password to keep your account safe. - Zvolte si heslo pro ochranu svého účtu. - - - - - <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> - <small>Zadání hesla zopakujte i do kontrolní kolonky, abyste měli jistotu, že jste napsali, co zamýšleli (že nedošlo k překlepu). Dobré heslo se bude skládat z písmen, číslic a interpunkce a mělo by být alespoň osm znaků dlouhé. Heslo byste také měli pravidelně měnit (prevence škod z jeho případného prozrazení).</small> - - - - What is the name of this computer? - Jaký je název tohoto počítače? - - - + Your Full Name Vaše celé jméno - + + What name do you want to use to log in? + Jaké jméno chcete používat pro přihlašování do systému? + + + login uživatelské jméno - + + What is the name of this computer? + Jaký je název tohoto počítače? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Pod tímto názvem se bude počítač případně zobrazovat ostatním počítačům v síti.</small> - + Computer Name Název počítače - - + + Choose a password to keep your account safe. + Zvolte si heslo pro ochranu svého účtu. + + + + + <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> + <small>Zadání hesla zopakujte i do kontrolní kolonky, abyste měli jistotu, že jste napsali, co zamýšleli (že nedošlo k překlepu). Dobré heslo se bude skládat z písmen, číslic a interpunkce a mělo by být alespoň osm znaků dlouhé. Heslo byste také měli pravidelně měnit (prevence škod z jeho případného prozrazení).</small> + + + + Password Heslo - - + + Repeat Password Zopakování zadání hesla - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Když je toto zaškrtnuto, je prověřována odolnost hesla a nebude umožněno použít snadno prolomitelné heslo. - + Require strong passwords. Vyžaduje odolné heslo. - + Log in automatically without asking for the password. Při spouštění systému se přihlašovat automaticky (bez zadávání hesla). - + Use the same password for the administrator account. Použít stejné heslo i pro účet správce systému. - + Choose a password for the administrator account. Zvolte si heslo pro účet správce systému. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Zadání hesla zopakujte i do kontrolní kolonky, abyste měli jistotu, že jste napsali, co zamýšleli (že nedošlo k překlepu).</small> @@ -2331,42 +2694,42 @@ Instalační program bude ukončen a všechny změny ztraceny. PartitionLabelsView - + Root Kořenový (root) - + Home Složky uživatelů (home) - + Boot Zaváděcí (boot) - + EFI system EFI systémový - + Swap Odkládání str. z oper. paměti (swap) - + New partition for %1 Nový oddíl pro %1 - + New partition Nový oddíl - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2375,34 +2738,39 @@ Instalační program bude ukončen a všechny změny ztraceny. PartitionModel - - + + Free Space Volné místo - - + + New partition Nový oddíl - + Name Název - + File System Souborový systém - + + File System Label + Jmenovka souborového systému + + + Mount Point Přípojný bod - + Size Velikost @@ -2410,77 +2778,77 @@ Instalační program bude ukončen a všechny změny ztraceny. PartitionPage - + Form - Form + Formulář - + Storage de&vice: - Úložné zařízení + Úložné &zařízení: - + &Revert All Changes V&rátit všechny změny - + New Partition &Table Nová &tabulka oddílů - + Cre&ate Vytv&ořit - + &Edit &Upravit - + &Delete &Smazat - + New Volume Group Nová skupina svazků - + Resize Volume Group Změnit velikost skupiny svazků - + Deactivate Volume Group Deaktivovat skupinu svazků - + Remove Volume Group Odebrat skupinu svazků - + I&nstall boot loader on: Zavaděč systému &nainstalovat na: - + Are you sure you want to create a new partition table on %1? Opravdu chcete na %1 vytvořit novou tabulku oddílů? - + Can not create new partition Nedaří se vytvořit nový oddíl - + 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. Tabulka oddílů na %1 už obsahuje %2 hlavních oddílů a proto už není možné přidat další. Odeberte jeden z hlavních oddílů a namísto něj vytvořte rozšířený oddíl. @@ -2488,117 +2856,107 @@ Instalační program bude ukončen a všechny změny ztraceny. PartitionViewStep - + Gathering system information... Shromažďování informací o systému… - + Partitions Oddíly - - Install %1 <strong>alongside</strong> another operating system. - Nainstalovat %1 <strong>vedle</strong> dalšího operačního systému. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Smazat</strong> obsah jednotky a nainstalovat %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Nahradit</strong> oddíl %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Ruční</strong> dělení úložiště. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Nainstalovat %1 <strong>vedle</strong> dalšího operačního systému na disk <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Vymazat</strong> obsah jednotky <strong>%2</strong> (%3) a nainstalovat %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Nahradit</strong> oddíl na jednotce <strong>%2</strong> (%3) %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Ruční</strong> dělení jednotky <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Jednotka <strong>%1</strong> (%2) - - - + Current: Stávající: - + After: Potom: - + No EFI system partition configured Není nastavený žádný EFI systémový oddíl - - 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>esp</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. - Pro spuštění %1 je potřeba EFI systémový oddíl.<br/><br/>Pro nastavení EFI systémového oddílu se vraťte zpět a vyberte nebo vytvořte oddíl typu FAT32 s příznakem <strong>esp</strong> a přípojným bodem <strong>%2</strong>.<br/><br/>Je možné pokračovat bez nastavení EFI systémového oddílu, ale systém nemusí jít spustit. + + EFI system partition configured incorrectly + EFI systémový oddíl není nastaven správně - - EFI system partition flag not set - Příznak EFI systémového oddílu není nastavený + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Aby bylo možné spouštět %1, je zapotřebí EFI systémový oddíl.<br/><br/>Takový nastavíte tak, že se vrátíte zpět a vyberete nebo vytvoříte příhodný souborový systém. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Pro spuštění %1 je potřeba EFI systémový oddíl.<br/><br/>Byl nastaven oddíl s přípojným bodem <strong>%2</strong> ale nemá nastaven příznak <strong>esp</strong>.<br/>Pro nastavení příznaku se vraťte zpět a upravte oddíl.<br/><br/>Je možné pokračovat bez nastavení příznaku, ale systém nemusí jít spustit. + + The filesystem must be mounted on <strong>%1</strong>. + Je třeba, aby souborový systém byl připojený na <strong>%1</strong>. - + + The filesystem must have type FAT32. + Je třeba, aby souborový systém byl typu FAT32. + + + + The filesystem must be at least %1 MiB in size. + Je třeba, aby souborový systém byl alespoň %1 MiB velký. + + + + The filesystem must have flag <strong>%1</strong> set. + Je třeba, aby souborový systém měl nastavený příznak <strong>%1</strong>. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Je možné pokračovat bez vytvoření EFI systémového oddílu, ale může se stát, že váš systém tím nenastartuje. + + + Option to use GPT on BIOS Volba použít GPT i pro BIOS zavádění (MBR) - - 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. - GPT tabulka oddílů je nejlepší volbou pro všechny systémy. Tento instalátor podporuje takové uspořádání i pro zavádění v režimu BIOS firmware.<br/><br/>Pro nastavení GPT tabulky oddílů v případě BIOS, (pokud už není provedeno) jděte zpět a nastavte tabulku oddílů na, dále vytvořte 8 MB oddíl (bez souborového systému s příznakem <strong>bios_grub</strong>.<br/><br/>Tento oddíl je zapotřebí pro spuštění %1 na systému s BIOS firmware/režimem a GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + - + Boot partition not encrypted Zaváděcí oddíl není šifrován - + 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. Kromě šifrovaného kořenového oddílu byl vytvořen i nešifrovaný oddíl zavaděče.<br/><br/>To by mohl být bezpečnostní problém, protože na nešifrovaném oddílu jsou důležité soubory systému.<br/>Pokud chcete, můžete pokračovat, ale odemykání souborového systému bude probíhat později při startu systému.<br/>Pro zašifrování oddílu zavaděče se vraťte a vytvořte ho vybráním možnosti <strong>Šifrovat</strong> v okně při vytváření oddílu. - + has at least one disk device available. má k dispozici alespoň jedno zařízení pro ukládání dat. - + There are no partitions to install on. Nejsou zde žádné oddíly na které by se dalo nainstalovat. @@ -2606,13 +2964,13 @@ Instalační program bude ukončen a všechny změny ztraceny. PlasmaLnfJob - + Plasma Look-and-Feel Job Úloha vzhledu a dojmu z Plasma - - + + Could not select KDE Plasma Look-and-Feel package Nedaří se vybrat balíček KDE Plasma Look-and-Feel @@ -2620,17 +2978,17 @@ Instalační program bude ukončen a všechny změny ztraceny. PlasmaLnfPage - + Form Form - + 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. Zvolte vzhled a chování KDE Plasma desktopu. Tento krok je také možné přeskočit a nastavit až po instalaci systému. Kliknutí na výběr vyvolá zobrazení náhledu daného vzhledu a chování. - + 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. Zvolte vzhled a chování KDE Plasma desktopu. Tento krok je také možné přeskočit a nastavit až po instalaci systému. Kliknutí na výběr vyvolá zobrazení náhledu daného vzhledu a chování. @@ -2638,7 +2996,7 @@ Instalační program bude ukončen a všechny změny ztraceny. PlasmaLnfViewStep - + Look-and-Feel Vzhled a dojem z @@ -2646,17 +3004,17 @@ Instalační program bude ukončen a všechny změny ztraceny. PreserveFiles - + Saving files for later ... Ukládání souborů pro pozdější využití… - + No files configured to save for later. U žádných souborů nebylo nastaveno, že mají být uloženy pro pozdější využití. - + Not all of the configured files could be preserved. Ne všechny nastavené soubory bylo možné zachovat. @@ -2664,14 +3022,14 @@ Instalační program bude ukončen a všechny změny ztraceny. ProcessResult - + There was no output from the command. Příkaz neposkytl žádný výstup. - + Output: @@ -2680,52 +3038,52 @@ Výstup: - + External command crashed. Vnější příkaz byl neočekávaně ukončen. - + Command <i>%1</i> crashed. Příkaz <i>%1</i> byl neočekávaně ukončen. - + External command failed to start. Vnější příkaz se nepodařilo spustit. - + Command <i>%1</i> failed to start. Příkaz <i>%1</i> se nepodařilo spustit. - + Internal error when starting command. Vnitřní chyba při spouštění příkazu. - + Bad parameters for process job call. Chybné parametry volání úlohy procesu. - + External command failed to finish. Vnější příkaz se nepodařilo dokončit. - + Command <i>%1</i> failed to finish in %2 seconds. Příkaz <i>%1</i> se nepodařilo dokončit do %2 sekund. - + External command finished with errors. Vnější příkaz skončil s chybami. - + Command <i>%1</i> finished with exit code %2. Příkaz <i>%1</i> skončil s návratovým kódem %2. @@ -2733,89 +3091,95 @@ Výstup: QObject - - Default Keyboard Model - Výchozí model klávesnice - - - - - Default - Výchozí - - - - unknown - neznámý - - - - extended - rozšířený - - - - unformatted - nenaformátovaný - - - - swap - odkládací oddíl - - - - Unpartitioned space or unknown partition table - Nerozdělené prázné místo nebo neznámá tabulka oddílů - - - - (no mount point) - (žádný přípojný bod) - - - - Requirements checking for module <i>%1</i> is complete. - Kontrola požadavků pro modul <i>%1</i> dokončena. - - - + %1 (%2) %1 (%2) - - No product - Žádný produkt + + unknown + neznámý - - No description provided. - Nebyl poskytnut žádný popis. + + extended + rozšířený - - - - + + unformatted + nenaformátovaný + + + + swap + odkládací oddíl + + + + + Default + Výchozí + + + + + + File not found Soubor nenalezen - + Path <pre>%1</pre> must be an absolute path. Je třeba, aby <pre>%1</pre>byl úplný popis umístění. - + + Directory not found + Složka nenalezena + + + + Could not create new random file <pre>%1</pre>. Nepodařilo se vytvořit nový náhodný soubor <pre>%1</pre>. + + + No product + Žádný produkt + + + + No description provided. + Nebyl poskytnut žádný popis. + + + + (no mount point) + (žádný přípojný bod) + + + + Unpartitioned space or unknown partition table + Nerozdělené prázné místo nebo neznámá tabulka oddílů + + + + Recommended + + + <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> + <p>Tento počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/> + Instalace může pokračovat, ale některé funkce mohou být vypnuty.</p> + RemoveUserJob - + Remove live user from target system Odebrat uživatele živé relace z cílového systému @@ -2823,18 +3187,18 @@ Výstup: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Odebrat skupinu svazků nazvanou %1. - + Remove Volume Group named <strong>%1</strong>. Odebrat skupinu svazků nazvanou <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Instalátoru se nepodařilo odebrat skupinu svazků nazvanou „%1“. @@ -2842,143 +3206,160 @@ Výstup: ReplaceWidget - + Form Formulář - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vyberte, kam nainstalovat %1.<br/><font color="red">Upozornění: </font>tímto smažete všechny soubory ve vybraném oddílu. - + The selected item does not appear to be a valid partition. Vybraná položka se nezdá být platným oddílem. - + %1 cannot be installed on empty space. Please select an existing partition. %1 nemůže být instalován na místo bez oddílu. Vyberte existující oddíl. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nemůže být instalován na rozšířený oddíl. Vyberte existující primární nebo logický oddíl. - + %1 cannot be installed on this partition. %1 nemůže být instalován na tento oddíl. - + Data partition (%1) Datový oddíl (%1) - + Unknown system partition (%1) Neznámý systémový oddíl (%1) - + %1 system partition (%2) %1 systémový oddíl (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Oddíl %1 je příliš malý pro %2. Vyberte oddíl s kapacitou alespoň %3 GiB. - + <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. <strong>%2</strong><br/><br/>EFI systémový oddíl nenalezen. Vraťte se, zvolte ruční rozdělení jednotky, a nastavte %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 bude instalován na %2.<br/><font color="red">Upozornění: </font>všechna data v oddílu %2 budou ztracena. - + The EFI system partition at %1 will be used for starting %2. Pro zavedení %2 se využije EFI systémový oddíl %1. - + EFI system partition: EFI systémový oddíl: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Tento počítač nesplňuje minimální požadavky pro instalaci %1.<br/> + Instalace nemůže pokračovat.</p> + + + + <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> + <p>Tento počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/> + Instalace může pokračovat, ale některé funkce mohou být vypnuty.</p> + + ResizeFSJob - + Resize Filesystem Job Úloha změny velikosti souborového systému - + Invalid configuration Neplatné nastavení - + The file-system resize job has an invalid configuration and will not run. Úloha změny velikosti souborového systému nemá platné nastavení a nebude spuštěna. - + KPMCore not Available KPMCore není k dispozici - + Calamares cannot start KPMCore for the file-system resize job. Kalamares nemůže spustit KPMCore pro úlohu změny velikosti souborového systému. - - - - - + + + + + Resize Failed Změna velikosti se nezdařila - + The filesystem %1 could not be found in this system, and cannot be resized. Souborový systém %1 nebyl na tomto systému nalezen a jeho velikost proto nemůže být změněna. - + The device %1 could not be found in this system, and cannot be resized. Zařízení %1 nebylo na tomto systému nalezeno a proto nemůže být jeho velikost změněna. - - + + The filesystem %1 cannot be resized. Velikost souborového systému %1 není možné změnit. - - + + The device %1 cannot be resized. Velikost zařízení %1 nelze měnit. - + The filesystem %1 must be resized, but cannot. Velikost souborového systému %1 je třeba změnit, ale není to možné. - + The device %1 must be resized, but cannot Velikost zařízení %1 je třeba změnit, ale není to možné @@ -2986,22 +3367,22 @@ Výstup: ResizePartitionJob - + Resize partition %1. Změnit velikost oddílu %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Změnit velikost <strong>%2MiB</strong> oddílu <strong>%1</strong> na <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Změna velikosti %2MiB oddílu %1 na %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Instalátoru se nepodařilo změnit velikost oddílu %1 na jednotce „%2“. @@ -3009,7 +3390,7 @@ Výstup: ResizeVolumeGroupDialog - + Resize Volume Group Změnit velikost skupiny svazků @@ -3017,18 +3398,18 @@ Výstup: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Změnit skupinu svazků nazvanou %1 z %2 na %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Změnit velikost skupiny nazvané <strong>%1</strong> z <strong>%</strong> na <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Instalátoru se nepodařilo změnit velikost skupiny svazků zvanou „%1“. @@ -3036,53 +3417,25 @@ Výstup: ResultsListDialog - + For best results, please ensure that this computer: Nejlepších výsledků se dosáhne, pokud tento počítač bude: - + System requirements Požadavky na systém - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Počítač nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokračovat <a href="#details">Podrobnosti…</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Počítač nesplňuje minimální požadavky pro instalaci %1.<br/>Instalace nemůže pokračovat <a href="#details">Podrobnosti…</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/>Instalace může pokračovat, ale některé funkce mohou být vypnuty. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Počítač nesplňuje některé doporučené požadavky pro instalaci %1.<br/>Instalace může pokračovat, ale některé funkce mohou být vypnuty. - - - - This program will ask you some questions and set up %2 on your computer. - Tento program vám položí několik dotazů, aby na základě odpovědí příslušně nainstaloval %2 na váš počítač. - - ScanningDialog - + Scanning storage devices... Skenování úložných zařízení… - + Partitioning Dělení jednotky @@ -3090,29 +3443,29 @@ Výstup: SetHostNameJob - + Set hostname %1 Nastavit název počítače %1 - + Set hostname <strong>%1</strong>. Nastavit název počítače <strong>%1</strong>. - + Setting hostname %1. Nastavuje se název počítače %1. + - Internal Error Vnitřní chyba - - + + Cannot write hostname to target system Název počítače se nedaří zapsat do cílového systému @@ -3120,29 +3473,29 @@ Výstup: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Nastavit model klávesnice na %1, rozložení na %2-%3 - + Failed to write keyboard configuration for the virtual console. Zápis nastavení klávesnice pro virtuální konzoli se nezdařil. - - - + + + Failed to write to %1 Zápis do %1 se nezdařil - + Failed to write keyboard configuration for X11. Zápis nastavení klávesnice pro grafický server X11 se nezdařil. - + Failed to write keyboard configuration to existing /etc/default directory. Zápis nastavení klávesnice do existující složky /etc/default se nezdařil. @@ -3150,82 +3503,82 @@ Výstup: SetPartFlagsJob - + Set flags on partition %1. Nastavit příznaky na oddílu %1. - + Set flags on %1MiB %2 partition. Nastavit příznaky na %1MiB %2 oddílu. - + Set flags on new partition. Nastavit příznaky na novém oddílu. - + Clear flags on partition <strong>%1</strong>. Vymazat příznaky z oddílu <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Odstranit příznaky z %1MiB <strong>%2</strong> oddílu. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Označit %1MiB <strong>%2</strong> oddíl jako <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Odstraňování příznaků na %1MiB <strong>%2</strong> oddílu. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Nastavování příznaků <strong>%3</strong> na %1MiB <strong>%2</strong> oddílu. - - - + Clear flags on new partition. Vymazat příznaky z nového oddílu. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Nastavit příznak oddílu <strong>%1</strong> jako <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Označit %1MiB <strong>%2</strong> oddíl jako <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Nastavit příznak <strong>%1</strong> na novém oddílu. - + Clearing flags on partition <strong>%1</strong>. Mazání příznaků oddílu <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Odstraňování příznaků na %1MiB <strong>%2</strong> oddílu. + + + Clearing flags on new partition. Mazání příznaků na novém oddílu. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Nastavování příznaků <strong>%2</strong> na oddílu <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Nastavování příznaků <strong>%3</strong> na %1MiB <strong>%2</strong> oddílu. + + + Setting flags <strong>%1</strong> on new partition. Nastavování příznaků <strong>%1</strong> na novém oddílu. - + The installer failed to set flags on partition %1. Instalátoru se nepodařilo nastavit příznak na oddílu %1 @@ -3233,42 +3586,42 @@ Výstup: SetPasswordJob - + Set password for user %1 Nastavit heslo pro uživatele %1 - + Setting password for user %1. Nastavuje se heslo pro uživatele %1. - + Bad destination system path. Chybný popis cílového umístění systému. - + rootMountPoint is %1 Přípojný bod kořenového souborového systému (root) je %1 - + Cannot disable root account. Nedaří se zakázat účet správce systému (root). - + passwd terminated with error code %1. - Příkaz passwd ukončen s chybovým kódem %1. + Příkaz passwd skončil s chybovým kódem %1. - + Cannot set password for user %1. Nepodařilo se nastavit heslo uživatele %1. - + usermod terminated with error code %1. Příkaz usermod ukončen s chybovým kódem %1. @@ -3276,45 +3629,82 @@ Výstup: SetTimezoneJob - + Set timezone to %1/%2 Nastavit časové pásmo na %1/%2 - + Cannot access selected timezone path. Není přístup k vybranému popisu umístění časové zóny. - + Bad path: %1 Chybný popis umístění: %1 - + Cannot set timezone. Časovou zónu se nedaří nastavit. - + Link creation failed, target: %1; link name: %2 Odkaz se nepodařilo vytvořit, cíl: %1; název odkazu: %2 - + Cannot set timezone, Nedaří se nastavit časovou zónu, - + Cannot open /etc/timezone for writing Soubor /etc/timezone se nedaří otevřít pro zápis + + SetupGroupsJob + + + Preparing groups. + Příprava skupin. + + + + + Could not create groups in target system + V cílovém systému se nedaří vytvořit skupiny + + + + These groups are missing in the target system: %1 + Tyto skupiny v cílovém systému chybí: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Nastavit <pre>sudo</pre> uživatele. + + + + Cannot chmod sudoers file. + Nepodařilo se změnit přístupová práva (chmod) na souboru se sudoers. + + + + Cannot create sudoers file for writing. + Nepodařilo se vytvořit soubor pro sudoers tak, aby do něj šlo zapsat. + + ShellProcessJob - + Shell Processes Job Úloha shellových procesů @@ -3322,188 +3712,215 @@ Výstup: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Toto je přehled událostí které nastanou po spuštění instalačního procesu. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Toto je přehled událostí které nastanou po spuštění instalačního procesu. + + &Yes + &Ano - - - SummaryViewStep - - Summary - Souhrn + + &No + &Ne + + + + &Cancel + &Storno + + + + &Close + &Zavřít TrackingInstallJob - + Installation feedback Zpětná vazba z instalace - + Sending installation feedback. Posílání zpětné vazby z instalace. - + Internal error in install-tracking. Vnitřní chyba v install-tracking. - + HTTP request timed out. Překročen časový limit HTTP požadavku. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Zpětná vazba od uživatele pro KDE + + + + Configuring KDE user feedback. + Nastavuje se zpětná vazba od uživatele pro KDE + + + + + Error in KDE user feedback configuration. + Chyba v nastavení zpětné vazby od uživatele pro KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Nepodařilo se správně nastavit zpětnou vazbu od uživatele pro KDE, chyba ve skriptu %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Nepodařilo se správně nastavit zpětnou vazbu od uživatel pro KDE, chyba Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback - Zpětná vazba stroje + Zpětná vazba ze stroje - + Configuring machine feedback. - Nastavování zpětné vazby stroje + Nastavování zpětné vazby ze stroje - - + + Error in machine feedback configuration. - Chyba v nastavení zpětné vazby stroje. + Chyba v nastavení zpětné vazby ze stroje. - + Could not configure machine feedback correctly, script error %1. - Nepodařilo se správně nastavit zpětnou vazbu stroje, chyba skriptu %1. + Nepodařilo se správně nastavit zpětnou vazbu ze stroje, chyba skriptu %1. - + Could not configure machine feedback correctly, Calamares error %1. - Nepodařilo se správně nastavit zpětnou vazbu stroje, chyba Calamares %1. + Nepodařilo se správně nastavit zpětnou vazbu ze stroje, chyba Calamares %1. TrackingPage - + Form Form - + Placeholder Výplň - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Nastavením tohoto nebudete posílat <span style=" font-weight:600;">žádné vůbec žádné informace</span> o vaší instalaci.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Kliknutím sem nastavíte neodesílání <span style=" font-weight:600;">vůbec žádných informací</span> o vaší instalaci.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Kliknutím sem se dozvíte více o zpětné vazbě od uživatelů</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Sledování instalace pomůže %1 zjistit, kolik má uživatelů, na jakém hardware %1 instalují a (s posledními dvěma možnostmi níže), získávat průběžné informace o upřednostňovaných aplikacích. Co bude posíláno je možné si zobrazit kliknutím na ikonu nápovědy v každé z oblastí. + + 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. + Sledování pomůže %1 zjistit, jak často je instalováno, na jakém hardware a které aplikace jsou používány. Pro zobrazení toho, co je odesíláno, klikněte na ikonu nápovědy vedle každé z oblastí. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Výběrem tohoto pošlete informace o své instalaci a hardware. Tyto údaje budou poslány <b>pouze jednorázově</b> po dokončení instalace. + + 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. + Výběrem tohoto pošlete informace o své instalaci a hardware. Tyto údaje budou odeslány <b>pouze jednorázově</b> po dokončení instalace. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Výběrem tohoto budete <b>pravidelně</b> posílat informace o své instalaci, hardware a aplikacích do %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Výběrem tohoto budete pravidelně odesílat informace o instalaci na váš <b>počítač</b>, o hardwaru a aplikacích do %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Výběrem tohoto budete <b>pravidelně</b> posílat informace o své instalaci, hardware, aplikacích a způsobu využití do %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Výběrem tohoto budete pravidelně odesílat informace o vaší <b>uživatelské</b> instalaci, hardware, aplikacích a způsobu využití aplikací do %1. TrackingViewStep - + Feedback Zpětná vazba + + UmountJob + + + Unmount file systems. + Odpojit souborové systémy. + + + + No target system available. + Není k dispozici cílový systém + + + + No rootMountPoint is set. + Není nastaven rootMountPoint. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Pokud bude tento počítač používat více lidí, můžete přidat uživatelské účty po dokončení instalace.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Pokud bude tento počítač používat více lidí, můžete přidat uživatelské účty po dokončení instalace.</small> + + + UsersQmlViewStep - - Your username is too long. - Vaše uživatelské jméno je příliš dlouhé. - - - - Your username must start with a lowercase letter or underscore. - Je třeba, aby uživatelské jméno začínalo na malé písmeno nebo podtržítko. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Je možné použít pouze malá písmena, číslice, podtržítko a spojovník. - - - - Only letters, numbers, underscore and hyphen are allowed. - Je možné použít pouze písmena, číslice, podtržítko a spojovník. - - - - Your hostname is too short. - Název stroje je příliš krátký. - - - - Your hostname is too long. - Název stroje je příliš dlouhý. - - - - Your passwords do not match! - Zadání hesla se neshodují! + + Users + Uživatelé UsersViewStep - + Users Uživatelé @@ -3511,65 +3928,67 @@ Výstup: VariantModel - + Key + Column header for key/value Klíč - + Value + Column header for key/value Hodnota VolumeGroupBaseDialog - + Create Volume Group Vytvořit skupinu svazků - + List of Physical Volumes Seznam fyzických svazků - + Volume Group Name: Název skupiny svazků: - + Volume Group Type: Typ skupiny svazků: - + Physical Extent Size: Velikost fyzického bloku dat: - + MiB MiB - + Total Size: Celková velikost: - + Used Size: Využitá velikost: - + Total Sectors: Celkem sektorů: - + Quantity of LVs: Počet logických svazků: @@ -3577,106 +3996,106 @@ Výstup: WelcomePage - + Form Formulář - - + + Select application and system language Vybrat jazyk pro aplikace a systém + &About + &O projektu + + + Open donations website Otevřít webovou stránku po poskytnutí daru - + &Donate &Darovat - + Open help and support website Otevřít webovou stránku s nápovědou a podporou + &Support + &Podpora + + + Open issues and bug-tracking website Otevřít webovou stránku se správou hlášení problémů - Open release notes website - Otevřít webovou stránku s poznámkami k vydání - - - - &Release notes - &Poznámky k vydání - - - &Known issues &Známé problémy - - &Support - &Podpora + + Open release notes website + Otevřít webovou stránku s poznámkami k vydání - - &About - &O projektu + + &Release notes + &Poznámky k vydání - - <h1>Welcome to the %1 installer.</h1> - <h1>Vítejte v instalátoru %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Vítejte v Calamares, instalačním programu (nejen) pro %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Vítejte v Calamares, instalačním programu (nejen) pro %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Vítejte v instalátoru pro %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Vítejte v Calamares, instalačním programu (nejen) pro %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Vítejte v instalátoru %1.</h1> + + + + %1 support + %1 podpora + + + About %1 setup O nastavování %1 - + About %1 installer O instalátoru %1. - + <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. - <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Autorská práva © 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>autorská práva © 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Poděkování <a href="https://calamares.io/team/">kolektivu projektu Calamares</a> a <a href="https://www.transifex.com/calamares/calamares/">kolektivu překladatelů </a>.<br/><br/>Vývoj <a href="https://calamares.io/">Calamares</a> je sponzorován <br/><a href="http://www.blue-systems.com/">Blue Systems</a> – osvobozujeme software. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 podpora + <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/>Poděkování <a href="https://calamares.io/team/">týmu Calamares</a> a <a href="https://www.transifex.com/calamares/calamares/">týmu překladatelů Calamares</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> vývoj je sponzorován <br/><a href="http://www.blue-systems.com/">Blue Systems</a> – Liberating Software. WelcomeQmlViewStep - + Welcome Vítejte @@ -3684,31 +4103,173 @@ Výstup: WelcomeViewStep - + Welcome Vítejte + + ZfsJob + + + Create ZFS pools and datasets + Vytvořit zfs fondy a datové sady + + + + Failed to create zpool on + Nepodařilo se vytvořit zfs fond na + + + + Configuration Error + Chyba nastavení + + + + No partitions are available for ZFS. + Pro ZFS nejsou k dispozici žádné oddíly. + + + + Internal data missing + Chybí vnitřní data + + + + + Failed to create zpool + Nepodařilo se vytvořit zfs fond + + + + Failed to create dataset + Nepodařilo se vytvořit datovou sadu + + + + The output was: + Výstup byl: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + pro %3</strong><br/><br/> + Autorská práva 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Autorská práva 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Děkujeme <a href='https://calamares.io/team/'>Týmu Calamares + a <a href='https://www.transifex.com/calamares/calamares/'>Calamares + týmu překladatelů </a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + vývoj sponzoruje <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. - + + Back + Zpět + + + + calamares-sidebar + + + Show debug information + Zobrazit ladící informace + + + + finishedq + + + Installation Completed + Instalace dokončena + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 bylo nainstalováno na váš počítač.<br/> + Nyní ho můžete restartovat do právě nainstalovaného systému, nebo pokračovat v používání stávajícího prostředí, spuštěného z instalačního média. + + + + Close Installer + Zavřít instalátor + + + + Restart System + Restartovat systém + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Úplný záznam událostí z instalace je k dispozici v souboru installation.log v domovské složce uživatele Live.<br/> + Tento záznam je zkopírován do /var/log/installation.log cílového systému.</p> + + + + finishedq@mobile + + + Installation Completed + Instalace dokončena + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 bylo nainstalováno na váš počítač.<br/> + Nyní ho můžete restartovat. + + + + Close + Zavřít + + + + Restart + Restartovat + + + + i18n + + + <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>. + <h1>Jazyky</h1> </br> + Systémová místní a jazyková nastavení ovlivní jazyk a znakovou sadu některých prvků uživatelského rozhraní příkazového řádku. Stávající nastavení je <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Místní a jazyková nastavení</h1> </br> + Místní a jazyková nastavení ovlivní formát čísel a datumů. Stávající nastavení je <strong>%1</strong>. + + + Back Zpět @@ -3716,52 +4277,43 @@ Výstup: keyboardq - - Keyboard Model - Model klávesnice + + To activate keyboard preview, select a layout. + Pokud chcete aktivovat náhled klávesnice, vyberte rozvržení. - - Pick your preferred keyboard model or use the default one based on the detected hardware - Vyberte vámi upřednostňovaný model klávesnice nebo použijte ten výchozí, založený na zjištěném hardware + + Keyboard Model: + Model klávesnice: - - Refresh - Načíst znovu - - - - + Layouts - Rovzržení + Rozvržení - - - Keyboard Layout - Rozvržení klávesnice + + Type here to test your keyboard + Klávesnici vyzkoušíte psaním sem - - Models - Modely - - - + Variants Varianty + + + localeq - - Test your keyboard - Vyzkoušejte si svou klávesnici + + Change + Změnit notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3769,34 +4321,262 @@ Výstup: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Vítejte v %1 <quote>,</quote> instalátoru</h3>%2 + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice je vybavená a bezplatná sada kancelářských aplikací, používaná miliony lidí po celém světě. Obsahuje několika aplikací, které z ní dělají nejuniverzálnější svobodnou a open source sadu kancelářských aplikací na trhu.<br/> + Výchozí volba. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Pokud nechcete nainstalovat žádnou sadu kancelářských aplikací, stačí jen zvolit Žádná sada kancelářských aplikací. V případě potřeby je možné kdykoli nějakou přidat do už nainstalovaného systému. + + + + No Office Suite + Bez sady kancelářských aplikací + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Vytvořit minimální desktopovou instalaci, odebrat veškeré dodatečné aplikace a až později rozhodnout, co chcete do svého systému přidat. Příklady toho, co není součástí takové instalace je, že zde nebude žádná sada kancelářských aplikací, žádné přehrávače multimédií, žádný prohlížeč obrázků či podpora pro tisk. Bude zde pouze desktopové prostředí, správce souborů, správce balíčků, textový editor a jednoduchý webový prohlížeč. + + + + Minimal Install + Minimální instalace + + + + Please select an option for your install, or use the default: LibreOffice included. + Vyberte volbu pro vaší instalaci, nebo použijte výchozí: včetně LibreOffice. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Toto je ukázka QML souboru, zobrazující možnosti formátovaného textu s pohyblivým (flickable) obsahem.</p> + + <p>QML s formátovaným textem může využívat HTML značky, pohyblivý obsah je užitečný pro dotykové obrazovky.</p> + + <p><b>Toto je tučný text</b></p> + <p><i>Toto je skloněný text (kurzíva)</i></p> + <p><u>Toto je podtržený text</u></p> + <p><center>Tento text bude zarovnán na střed.</center></p> + <p><s>Toto je přeškrtnuté</s></p> + + <p>Ukázka zobrazení zdrojového kódu: + <code>ls -l /home</code></p> + + <p></b>Seznam:</b></p> + <ul> + <li>systémy s procesorem Intel</li> + <li>systémy s procesorem AMD</li> + </ul> + + <p>Svislý posuvník je přizpůsobitelný, stávající výška je nastavena na 10.</p> + + + + Back + Zpět + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Vyberte své uživatelské jméno a přihlašovací údaje pro přihlášení a provádění úkonů správy + + + + What is your name? + Jak se jmenujete? + + + + Your Full Name + Vaše celé jméno + + + + What name do you want to use to log in? + Jaké jméno chcete používat pro přihlašování do systému? + + + + Login Name + Přihlašovací jméno + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Pokud bude tento počítač používat více než jedna osoba, můžete po instalaci vytvořit více účtů. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Je možné použít pouze malá písmena, číslice, podtržítko a spojovník. + + + + root is not allowed as username. + root není možné použít jako uživatelské jméno. + + + + What is the name of this computer? + Jaký je název tohoto počítače? + + + + Computer Name + Název počítače + + + + This name will be used if you make the computer visible to others on a network. + Pod tímto názvem se bude počítač případně zobrazovat ostatním počítačům v síti. + + + + localhost is not allowed as hostname. + localhost není možné použít jako název počítače. + + + + Choose a password to keep your account safe. + Zvolte si heslo pro ochranu svého účtu. + + + + Password + Heslo + + + + Repeat Password + Zopakování zadání hesla + + + + 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. + Zadání hesla zopakujte i do kontrolní kolonky, abyste měli jistotu, že jste napsali, co zamýšleli (že nedošlo k překlepu). Dobré heslo se bude skládat z písmen, číslic a interpunkce a mělo by být alespoň osm znaků dlouhé. Heslo byste také měli pravidelně měnit (prevence škod z jeho případného prozrazení). + + + + Validate passwords quality + Ověřte kvalitu hesel + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Když je toto zaškrtnuto, je prověřována odolnost hesla a nebude umožněno použít snadno prolomitelné heslo. + + + + Log in automatically without asking for the password + Přihlašovat se automaticky bez zadávání hesla + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Je možné použít pouze písmena, číslice, podtržítko a spojovník. Dále je třeba, aby délka byla alespoň dva znaky. + + + + Reuse user password as root password + Použijte heslo uživatele i pro účet správce (root) + + + + Use the same password for the administrator account. + Použít stejné heslo i pro účet správce systému. + + + + Choose a root password to keep your account safe. + Zvolte heslo uživatele root, aby byl váš účet v bezpečí. + + + + Root Password + Heslo uživatele root + + + + Repeat Root Password + Zopakujte zadání hesla pro správce systému (root) + + + + Enter the same password twice, so that it can be checked for typing errors. + Zadání hesla zopakujte i do kontrolní kolonky, abyste měli jistotu, že jste napsali, co zamýšleli (že nedošlo k překlepu). + + + + welcomeq + + + <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> + <h3>Vítejte v instalátoru %1 <quote>%2</quote></h3> + <p>Tato aplikace vám položí několik otázek a na základě odpovědí příslušně nainstaluje %1 na váš počítač.</p> + + + About O projektu - + Support Podpora - + Known issues Známé problémy - + Release notes Poznámky k vydání - + Donate Podpořit vývoj darem diff --git a/lang/calamares_da.ts b/lang/calamares_da.ts index 499fee7cd..f6dce538d 100644 --- a/lang/calamares_da.ts +++ b/lang/calamares_da.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. Systemets <strong>bootmiljø</strong>.<br><br>Ældre x86-systemer understøtter kun <strong>BIOS</strong>.<br>Moderne systemer bruger normalt <strong>EFI</strong>, men kan også vises som BIOS hvis det startes i kompatibilitetstilstand. - + 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. Systemet blev startet med et <strong>EFI</strong>-bootmiljø.<br><br>For at konfigurere opstart fra et EFI-miljø, bliver installationsprogrammet nødt til at installere et bootloaderprogram, såsom <strong>GRUB</strong> eller <strong>systemd-boot</strong> på en <strong>EFI-systempartition</strong>. Det sker automatisk, med mindre du vælger manuel partitionering, hvor du i så fald skal vælge eller oprette den selv. - + 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. Systemet blev startet med et <strong>BIOS</strong>-bootmiljø.<br><br>For at konfigurere opstart fra et BIOS-miljø, bliver installationsprogrammet nødt til at installere en bootloader, såsom <strong>GRUB</strong>, enten i begyndelsen af en partition eller på <strong>Master Boot Record</strong> nær begyndelsen af partitionstabellen (foretrukket). Det sker automatisk, med mindre du vælger manuel partitionering, hvor du i så fald skal opsætte den selv. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record af %1 - + Boot Partition Bootpartition - + System Partition Systempartition - + Do not install a boot loader Installér ikke en bootloader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Tom side @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formular - + GlobalStorage Globalt lager - + JobQueue Jobkø - + Modules Moduler - + Type: Type: - - + + none ingen - + Interface: Grænseflade: - - Tools - Værktøjer + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet Genindlæs stilark - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree Widgettræ - + Debug information Fejlretningsinformation @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - Sæt op + Opsæt - + Install Installation @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Job mislykkedes (%1) - + Programmed job failure was explicitly requested. Mislykket programmeret job blev udtrykkeligt anmodet. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Færdig @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Eksempeljob (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Kør kommandoen '%1' i målsystemet. - + Run command '%1'. Kør kommandoen '%1'. - + Running command %1 %2 Kører kommando %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Kører %1-handling. - + Bad working directory path Ugyldig arbejdsmappesti - + Working directory %1 for python job %2 is not readable. Arbejdsmappen %1 til python-jobbet %2 er ikke læsbar. - + Bad main script file Ugyldig primær skriptfil - + Main script file %1 for python job %2 is not readable. Primær skriptfil %1 til python-jobbet %2 er ikke læsbar. - + Boost.Python error in job "%1". Boost.Python-fejl i job "%1". @@ -210,41 +238,46 @@ Calamares::QmlViewStep - + Loading ... Indlæser ... - + QML Step <i>%1</i>. QML-trin <i>%1</i>. - + Loading failed. Indlæsning mislykkedes. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Tjek af krav for modulet <i>%1</i> er fuldført. + - + Waiting for %n module(s). Venter på %n modul. - Venter på %n moduler. + Venter på %n modul(er). - + (%n second(s)) (%n sekund) - (%n sekunder) + (%n sekund(er)) - + System-requirements checking is complete. Tjek af systemkrav er fuldført. @@ -252,247 +285,237 @@ Calamares::ViewManager - - &Back - &Tilbage - - - - &Next - &Næste - - - - &Cancel - &Annullér - - - - Cancel setup without changing the system. - Annullér opsætningen uden at ændre systemet. - - - - Cancel installation without changing the system. - Annullér installation uden at ændre systemet. - - - + Setup Failed Opsætningen mislykkedes - - Would you like to paste the install log to the web? - Vil du indsætte installationsloggen på webbet? + + Installation Failed + Installation mislykkedes - + + Error + Fejl + + + + &Yes + &Ja + + + + &No + &Nej + + + + &Close + &Luk + + + Install Log Paste URL Indsættelses-URL for installationslog - + The upload was unsuccessful. No web-paste was done. Uploaden lykkedes ikke. Der blev ikke foretaget nogen webindsættelse. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Initiering af Calamares mislykkedes - + %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. %1 kan ikke installeres. Calamares kunne ikke indlæse alle de konfigurerede moduler. Det er et problem med den måde Calamares bruges på af distributionen. - + <br/>The following modules could not be loaded: <br/>Følgende moduler kunne ikke indlæses: - + + Continue with setup? + Fortsæt med opsætningen? + + + Continue with installation? Fortsæt installationen? - + 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> %1-opsætningsprogrammet er ved at foretage ændringer til din disk for at opsætte %2.<br/><strong>Det vil ikke være muligt at fortryde ændringerne.</strong> - + + 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> + %1-installationsprogrammet er ved at foretage ændringer til din disk for at installere %2.<br/><strong>Det vil ikke være muligt at fortryde ændringerne.</strong> + + + &Set up now - &Sæt op nu + &Opsæt nu - + + &Install now + &Installér nu + + + + Go &back + Gå &tilbage + + + &Set up - &Sæt op + &Opsæt - + &Install &Installér - + Setup is complete. Close the setup program. Opsætningen er fuldført. Luk opsætningsprogrammet. - + + The installation is complete. Close the installer. + Installationen er fuldført. Luk installationsprogrammet. + + + + Cancel setup without changing the system. + Annullér opsætningen uden at ændre systemet. + + + + Cancel installation without changing the system. + Annullér installation uden at ændre systemet. + + + + &Next + &Næste + + + + &Back + &Tilbage + + + + &Done + &Færdig + + + + &Cancel + &Annullér + + + Cancel setup? Annullér opsætningen? - + Cancel installation? Annullér installationen? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Vil du virkelig annullere den igangværende opsætningsproces? Opsætningsprogrammet vil stoppe og alle ændringer vil gå tabt. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Vil du virkelig annullere den igangværende installationsproces? Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. - - - - &Yes - &Ja - - - - - &No - &Nej - - - - &Close - &Luk - - - - Continue with setup? - Fortsæt med opsætningen? - - - - 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> - %1-installationsprogrammet er ved at foretage ændringer til din disk for at installere %2.<br/><strong>Det vil ikke være muligt at fortryde ændringerne.</strong> - - - - &Install now - &Installér nu - - - - Go &back - Gå &tilbage - - - - &Done - &Færdig - - - - The installation is complete. Close the installer. - Installationen er fuldført. Luk installationsprogrammet. - - - - Error - Fejl - - - - Installation Failed - Installation mislykkedes - CalamaresPython::Helper - + Unknown exception type Ukendt undtagelsestype - + unparseable Python error Python-fejl som ikke kan fortolkes - + unparseable Python traceback Python-traceback som ikke kan fortolkes - + Unfetchable Python error. Python-fejl som ikke kan hentes. - - CalamaresUtils - - - Install log posted to: -%1 - Installationslog indsendt til: -%1 - - CalamaresWindow - - &Back - &Tilbage - - - - &Next - &Næste - - - - &Cancel - &Annullér - - - + %1 Setup Program %1-opsætningsprogram - + %1 Installer %1-installationsprogram + + + ChangeFilesystemLabelJob - - Show debug information - Vis fejlretningsinformation + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Installationsprogrammet kunne ikke opdatere partitionstabel på disk '%1'. CheckerContainer - + Gathering system information... Indsamler systeminformation ... @@ -500,157 +523,197 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. ChoicePage - + Form Formular - - After: - Efter: - - - - Boot loader location: - Placering af bootloader: - - - + Select storage de&vice: Vælg lageren&hed: - - - - + + + + Current: Nuværende: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Manuel partitionering</strong><br/>Du kan selv oprette eller ændre størrelsen på partitioner. Ved UEFI-installationer er det et must at have en GPT-partitionstabel og <strong>fat32 512Mb /boot-partition</strong>, brug enten en eksisterende formatering eller opret en. + + After: + Efter: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manuel partitionering</strong><br/>Du kan selv oprette og ændre størrelse på partitioner. + + + Reuse %1 as home partition for %2. Genbrug %1 som hjemmepartition til %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vælg en partition der skal mindskes, træk herefter den nederste bjælke for at ændre størrelsen</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 vil blive skrumpet til %2 MiB og en ny %3 MiB partition vil blive oprettet for %4. - + + Boot loader location: + Placering af bootloader: + + + <strong>Select a partition to install on</strong> <strong>Vælg en partition at installere på</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. En EFI-partition blev ikke fundet på systemet. Gå venligst tilbage og brug manuel partitionering til at opsætte %1. - + The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen ved %1 vil blive brugt til at starte %2. - + EFI system partition: EFI-systempartition: - + 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. Lagerenheden ser ikke ud til at indeholde et styresystem. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Slet disk</strong><br/>Det vil <font color="red">slette</font> alt data på den valgte lagerenhed. - - 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. - Lagerenheden har %1 på sig. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før det sker ændringer til lagerenheden. - - - - No Swap - Ingen swap - - - - Reuse Swap - Genbrug swap - - - - Swap (no Hibernate) - Swap (ingen dvale) - - - - Swap (with Hibernate) - Swap (med dvale) - - - - Swap to file - Swap til fil - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installér ved siden af</strong><br/>Installationsprogrammet vil mindske en partition for at gøre plads til %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Erstat en partition</strong><br/>Erstatter en partition med %1. - + + 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. + Lagerenheden har %1 på sig. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før det sker ændringer til lagerenheden. + + + 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. Lagerenheden indeholder allerede et styresystem. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. - + 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. Lagerenheden indeholder flere styresystemer. Hvad ønsker du at gøre?<br/>Du vil få mulighed for at se og bekræfte dine valg før der sker ændringer til lagerenheden. + + + 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/> + Lagerenheden har allerede et styresystem på den men partitionstabellen <strong>%1</strong> er ikke magen til den nødvendige <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Lagerenhden har en af sine partitioner <strong>monteret</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Lagringsenheden er en del af en <strong>inaktiv RAID</strong>-enhed. + + + + No Swap + Ingen swap + + + + Reuse Swap + Genbrug swap + + + + Swap (no Hibernate) + Swap (ingen dvale) + + + + Swap (with Hibernate) + Swap (med dvale) + + + + Swap to file + Swap til fil + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Ryd monteringspunkter for partitioneringshandlinger på %1 - + Clearing mounts for partitioning operations on %1. Rydder monteringspunkter for partitioneringshandlinger på %1. - + Cleared all mounts for %1 Ryddede alle monteringspunkter til %1 @@ -658,22 +721,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. ClearTempMountsJob - + Clear all temporary mounts. Ryd alle midlertidige monteringspunkter. - + Clearing all temporary mounts. Rydder alle midlertidige monteringspunkter. - - Cannot get list of temporary mounts. - Kan ikke få liste over midlertidige monteringspunkter. - - - + Cleared all temporary mounts. Rydder alle midlertidige monteringspunkter. @@ -681,18 +739,18 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. CommandList - - + + Could not run command. Kunne ikke køre kommando. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Kommandoen kører i værtsmiljøet og har brug for at kende rodstien, men der er ikke defineret nogen rootMountPoint. - + The command needs to know the user's name, but no username is defined. Kommandoen har brug for at kende brugerens navn, men der er ikke defineret noget brugernavn. @@ -700,100 +758,235 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Computeren imødekommer ikke minimumsystemkravene for at opsætte %1.<br/>Opsætningen kan ikke fortsætte. <a href="#details">Detaljer ...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Computeren imødekommer ikke minimumsystemkravene for at installere %1.<br/>Installationen kan ikke fortsætte. <a href="#details">Detaljer ...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Computeren imødekommer ikke nogle af de anbefalede systemkrav for at opsætte %1.<br/>Opsætningen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Computeren imødekommer ikke nogle af de anbefalede systemkrav for at installere %1.<br/>Installationen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. - - - - This program will ask you some questions and set up %2 on your computer. - Programmet vil stille dig nogle spørgsmål og opsætte %2 på din computer. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Velkommen til Calamares-opsætningsprogrammet til %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Velkommen til %1-opsætningen.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Velkommen til Calamares-installationsprogrammet for %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Velkommen til %1-installationsprogrammet.</h1> - - - + Set keyboard model to %1.<br/> - Sæt tastaturmodel til %1.<br/> + Indstil tastaturmodel til %1.<br/> - + Set keyboard layout to %1/%2. - Sæt tastaturlayout til %1/%2. + Indstil tastaturlayout til %1/%2. - + + Set timezone to %1/%2. + Indstil tidszone til %1/%2. + + + The system language will be set to %1. - Systemsproget vil blive sat til %1. + Systemets sprog indstilles til %1. - + The numbers and dates locale will be set to %1. - Lokalitet for tal og datoer vil blive sat til %1. + Lokalitet for tal og datoer indstilles til %1. - - Set timezone to %1/%2.<br/> - Sæt tidszone til %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Netværksinstallation. (deaktiveret: forkert konfiguration) - + Network Installation. (Disabled: Received invalid groups data) Netværksinstallation. (deaktiveret: modtog ugyldige gruppers data) - - Network Installation. (Disabled: internal error) - Netværksinstallation. (deaktiveret: intern fejl) + + Network Installation. (Disabled: Internal error) + - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Valg af pakke + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Netværksinstallation. (deaktiveret: kunne ikke hente pakkelister, tjek din netværksforbindelse) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Computeren imødekommer ikke minimumsystemkravene for at opsætte %1.<br/>Opsætningen kan ikke fortsætte. <a href="#details">Detaljer ...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Computeren imødekommer ikke minimumsystemkravene for at installere %1.<br/>Installationen kan ikke fortsætte. <a href="#details">Detaljer ...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Computeren imødekommer ikke nogle af de anbefalede systemkrav for at opsætte %1.<br/>Opsætningen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Computeren imødekommer ikke nogle af de anbefalede systemkrav for at installere %1.<br/>Installationen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. + + + + This program will ask you some questions and set up %2 on your computer. + Programmet vil stille dig nogle spørgsmål og opsætte %2 på din computer. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Velkommen til Calamares-opsætningsprogrammet til %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Velkommen til %1-opsætningen</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Velkommen til Calamares-installationsprogrammet til %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Velkommen til %1-installationsprogrammet</h1> + + + + Your username is too long. + Dit brugernavn er for langt. + + + + '%1' is not allowed as username. + '%1' er ikke tilladt som brugernavn. + + + + Your username must start with a lowercase letter or underscore. + Dit brugernavn skal begynde med et bogstav med småt eller understregning. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Det er kun tilladt at bruge bogstaver med småt, tal, understregning og bindestreg. + + + + Your hostname is too short. + Dit værtsnavn er for kort. + + + + Your hostname is too long. + Dit værtsnavn er for langt. + + + + '%1' is not allowed as hostname. + '%1' er ikke tilladt som værtsnavn. + + + + Only letters, numbers, underscore and hyphen are allowed. + Det er kun tilladt at bruge bogstaver, tal, understregning og bindestreg. + + + + Your passwords do not match! + Dine adgangskoder er ikke ens! + + + + OK! + + + + + Setup Failed + Opsætningen mislykkedes + + + + Installation Failed + Installation mislykkedes + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Opsætningen er fuldført + + + + Installation Complete + Installation fuldført + + + + The setup of %1 is complete. + Opsætningen af %1 er fuldført. + + + + The installation of %1 is complete. + Installationen af %1 er fuldført. + + + + Package Selection + Valg af pakke + + + + Please pick a product from the list. The selected product will be installed. + Vælg venligst et produkt fra listen. Det valgte produkt installeres. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Opsummering + + + + This is an overview of what will happen once you start the setup procedure. + Dette er et overblik over hvad der vil ske når du starter opsætningsprocessen. + + + + This is an overview of what will happen once you start the install procedure. + Dette er et overblik over hvad der vil ske når du starter installationsprocessen. + ContextualProcessJob - + Contextual Processes Job Kontekstuelt procesjob @@ -801,100 +994,136 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. CreatePartitionDialog - + Create a Partition Opret en partition - - MiB - MiB - - - - Partition &Type: - Partitions&type: - - - - &Primary - &Primær - - - - E&xtended - &Udvidet - - - - Fi&le System: - Fi&lsystem: - - - - LVM LV name - LVM LV-navn - - - - Flags: - Flag: - - - - &Mount Point: - &Monteringspunkt: - - - + Si&ze: &Størrelse: - + + MiB + MiB + + + + Partition &Type: + Partitions&type: + + + + Primar&y + + + + + E&xtended + &Udvidet + + + + Fi&le System: + Fi&lsystem: + + + + LVM LV name + LVM LV-navn + + + + &Mount Point: + &Monteringspunkt: + + + + Flags: + Flag: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt Kryp&tér - + Logical Logisk - + Primary Primær - + GPT GPT - + Mountpoint already in use. Please select another one. Monteringspunktet er allerede i brug. Vælg venligst et andet. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. Opret en ny %2 MiB partition på %4 (%3) med %1-filsystem. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Opret en ny <strong>%2 MiB</strong> partition på <strong>%4</strong> (%3) med <strong>%1</strong>-filsystem. - + + Creating new %1 partition on %2. Opretter ny %1-partition på %2. - + The installer failed to create partition on disk '%1'. Installationsprogrammet kunne ikke oprette partition på disk '%1'. @@ -902,27 +1131,27 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. CreatePartitionTableDialog - + Create Partition Table Opret partitionstabel - + Creating a new partition table will delete all existing data on the disk. Oprettelse af en ny partitionstabel vil slette alle data på disken. - + What kind of partition table do you want to create? Hvilken slags partitionstabel vil du oprette? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID-partitionstabel (GPT) @@ -930,22 +1159,22 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. CreatePartitionTableJob - + Create new %1 partition table on %2. Opret en ny %1-partitionstabel på %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Opret en ny <strong>%1</strong>-partitionstabel på <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Opretter ny %1-partitionstabel på %2. - + The installer failed to create a partition table on %1. Installationsprogrammet kunne ikke oprette en partitionstabel på %1. @@ -953,45 +1182,41 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. CreateUserJob - + Create user %1 - Opret bruger %1 + Opret brugeren %1 - + Create user <strong>%1</strong>. - Opret bruger <strong>%1</strong>. + Opret brugeren <strong>%1</strong>. - - Creating user %1. - Opretter bruger %1. + + Preserving home directory + Bevarer hjemmemappe - - Sudoers dir is not writable. - Sudoers mappe er skrivebeskyttet. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Kan ikke oprette sudoers fil til skrivning. + + Configuring user %1 + Konfigurerer brugeren %1 - - Cannot chmod sudoers file. - Kan ikke chmod sudoers fil. - - - - Cannot open groups file for reading. - Kan ikke åbne gruppernes fil til læsning. + + Setting file permissions + Indstiller filtilladelser CreateVolumeGroupDialog - + Create Volume Group Opret diskområdegruppe @@ -999,22 +1224,22 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. CreateVolumeGroupJob - + Create new volume group named %1. Opret ny diskområdegruppe ved navn %1. - + Create new volume group named <strong>%1</strong>. Opret ny diskområdegruppe ved navn <strong>%1</strong>. - + Creating new volume group named %1. Opretter ny diskområdegruppe ved navn %1. - + The installer failed to create a volume group named '%1'. Installationsprogrammet kunne ikke oprette en diskområdegruppe ved navn '%1'. @@ -1022,18 +1247,18 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deaktivér diskområdegruppe ved navn %1. - + Deactivate volume group named <strong>%1</strong>. Deaktivér diskområdegruppe ved navn <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Installationsprogrammet kunne ikke deaktivere en diskområdegruppe ved navn %1. @@ -1041,22 +1266,22 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. DeletePartitionJob - + Delete partition %1. Slet partition %1. - + Delete partition <strong>%1</strong>. Slet partition <strong>%1</strong>. - + Deleting partition %1. Sletter partition %1. - + The installer failed to delete partition %1. Installationsprogrammet kunne ikke slette partition %1. @@ -1064,46 +1289,46 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. DeviceInfoWidget - - 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. - Typen af <strong>partitionstabel</strong> på den valgte lagerenhed.<br><br>Den eneste måde at ændre partitionstabeltypen, er at slette og oprette partitionstabellen igen, hvilket vil destruere al data på lagerenheden.<br>Installationsprogrammet vil beholde den nuværende partitionstabel medmindre du specifikt vælger andet.<br>Hvis usikker, er GPT foretrukket på moderne systemer. - - - + This device has a <strong>%1</strong> partition table. Enheden har en <strong>%1</strong> partitionstabel. - + 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. Dette er en <strong>loop</strong>-enhed.<br><br>Det er en pseudo-enhed uden en partitionstabel, der gør en fil tilgængelig som en blokenhed. Denne slags opsætning indeholder typisk kun et enkelt filsystem. - + 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. Installationsprogrammet <strong>kan ikke finde en partitionstabel</strong> på den valgte lagerenhed.<br><br>Enten har enheden ikke nogen partitionstabel, eller partitionstabellen er ødelagt eller også er den af en ukendt type.<br>Installationsprogrammet kan oprette en ny partitionstabel for dig, enten automatisk, eller igennem den manuelle partitioneringsside. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Dette er den anbefalede partitionstabeltype til moderne systemer som starter fra et <strong>EFI</strong>-bootmiljø. - + <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. <br><br>Partitionstabeltypen anbefales kun på ældre systemer der starter fra et <strong>BIOS</strong>-bootmiljø. GPT anbefales i de fleste tilfælde.<br><br><strong>Advarsel:</strong> MBR-partitionstabeltypen er en forældet MS-DOS-æra standard.<br>Kun 4 <em>primære</em> partitioner var tilladt, og ud af de fire kan én af dem være en <em>udvidet</em> partition, som igen må indeholde mange <em>logiske</em> partitioner. + + + 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. + Typen af <strong>partitionstabel</strong> på den valgte lagerenhed.<br><br>Den eneste måde at ændre partitionstabeltypen, er at slette og oprette partitionstabellen igen, hvilket vil destruere al data på lagerenheden.<br>Installationsprogrammet vil beholde den nuværende partitionstabel medmindre du specifikt vælger andet.<br>Hvis usikker, er GPT foretrukket på moderne systemer. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1337,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Skriv LUKS-konfiguration for Dracut til %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Spring skrivning af LUKS-konfiguration over for Dracut: "/"-partitionen er ikke krypteret - + Failed to open %1 Kunne ikke åbne %1 @@ -1130,7 +1355,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. DummyCppJob - + Dummy C++ Job Dummy C++-job @@ -1138,123 +1363,167 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. EditExistingPartitionDialog - + Edit Existing Partition Redigér eksisterende partition - - Content: - Indhold: + + Con&tent: + - + &Keep &Behold - + Format Formatér - + Warning: Formatting the partition will erase all existing data. Advarsel: Formatering af partitionen vil slette alle eksisterende data. - + &Mount Point: &Monteringspunkt: - + Si&ze: Stø&rrelse: - + MiB MiB - + Fi&le System: Fi&lsystem: - + Flags: Flag: - - Mountpoint already in use. Please select another one. - Monteringspunktet er allerede i brug. Vælg venligst et andet. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formular - + En&crypt system Kryp&tér system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Adgangskode - + Confirm passphrase Bekræft adgangskode - + + Please enter the same passphrase in both boxes. Indtast venligst samme adgangskode i begge bokse. - FillGlobalStorageJob + ErrorDialog - - Set partition information - Sæt partitionsinformation + + Details: + - + + Would you like to paste the install log to the web? + Vil du indsætte installationsloggen på webbet? + + + + FillGlobalStorageJob + + + Set partition information + Indstil partitionsinformation + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Installér %1 på <strong>ny</strong> %2-systempartition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Opsæt den <strong>nye</strong> %2 partition med monteringspunkt <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Installér %2 på %3-systempartition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Opsæt %3 partition <strong>%1</strong> med monteringspunkt <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Installér bootloader på <strong>%1</strong>. - + Setting up mount points. Opsætter monteringspunkter. @@ -1262,93 +1531,81 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. FinishedPage - + Form Formular - + &Restart now &Genstart nu - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Færdig.</h1><br/>%1 er blevet opsat på din computer.<br/>Du kan nu begynde at bruge dit nye system. - + <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> <html><head/><body><p>Når boksen er tilvalgt, vil dit system genstarte med det samme når du klikker på <span style="font-style:italic;">Færdig</span> eller lukker opsætningsprogrammet.</p></body></html> - + <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. <h1>Færdig.</h1><br/>%1 er blevet installeret på din computer.<br/>Du kan nu genstarte for at komme ind i dit nye system eller fortsætte med at bruge %2 livemiljøet. - + <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> <html><head/><body><p>Når boksen er tilvalgt, vil dit system genstarte med det samme når du klikker på <span style="font-style:italic;">Færdig</span> eller lukker installationsprogrammet.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - <h1>Opsætningen mislykkede</h1><br/>%1 er ikke blevet sat op på din computer.<br/>Fejlmeddelelsen var: %2. + <h1>Opsætningen mislykkede</h1><br/>%1 er ikke blevet opsat på din computer.<br/>Fejlmeddelelsen var: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation mislykkede</h1><br/>%1 er ikke blevet installeret på din computer.<br/>Fejlmeddelelsen var: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Færdig + + + FinishedViewStep - - Setup Complete - Opsætningen er fuldført - - - - Installation Complete - Installation fuldført - - - - The setup of %1 is complete. - Opsætningen af %1 er fuldført. - - - - The installation of %1 is complete. - Installationen af %1 er fuldført. + + Finish + Færdig FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatér partition %1 (filsystem: %2, størrelse: %3 MiB) på %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatér <strong>%3 MiB</strong> partition <strong>%1</strong> med <strong>%2</strong>-filsystem. - + Formatting partition %1 with file system %2. Formatterer partition %1 med %2-filsystem. - + The installer failed to format partition %1 on disk '%2'. Installationsprogrammet kunne ikke formatere partition %1 på disk '%2'. @@ -1356,72 +1613,72 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. GeneralRequirements - + has at least %1 GiB available drive space har mindst %1 GiB ledig plads på drevet - + There is not enough drive space. At least %1 GiB is required. Der er ikke nok ledig plads på drevet. Mindst %1 GiB er påkrævet. - + has at least %1 GiB working memory har mindst %1 GiB hukkommelse - + The system does not have enough working memory. At least %1 GiB is required. Systemet har ikke nok arbejdshukommelse. Mindst %1 GiB er påkrævet. - + is plugged in to a power source er tilsluttet en strømkilde - + The system is not plugged in to a power source. Systemet er ikke tilsluttet en strømkilde. - + is connected to the Internet er forbundet til internettet - + The system is not connected to the Internet. Systemet er ikke forbundet til internettet. - + is running the installer as an administrator (root) - kører installationsprogrammet som administrator (root) + kører installationsprogrammet som en administrator (root) - + The setup program is not running with administrator rights. Opsætningsprogrammet kører ikke med administratorrettigheder. - + The installer is not running with administrator rights. Installationsprogrammet kører ikke med administratorrettigheder. - + has a screen large enough to show the whole installer har en skærm, som er stor nok til at vise hele installationsprogrammet - + The screen is too small to display the setup program. Skærmen er for lille til at vise opsætningsprogrammet. - + The screen is too small to display the installer. Skærmen er for lille til at vise installationsprogrammet. @@ -1429,7 +1686,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. HostInfoJob - + Collecting information about your machine. Indsamler information om din maskine. @@ -1437,25 +1694,25 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. IDJob - - + + + - OEM Batch Identifier OEM-batchidentifikator - + Could not create directories <code>%1</code>. Kunne ikke oprette mapperne <code>%1</code>. - + Could not open file <code>%1</code>. Kunne ikke åbne filen <code>%1</code>. - + Could not write to file <code>%1</code>. Kunne ikke skrive til filen <code>%1</code>. @@ -1463,7 +1720,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. InitcpioJob - + Creating initramfs with mkinitcpio. Opretter initramfs med mkinitcpio. @@ -1471,7 +1728,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. InitramfsJob - + Creating initramfs. Opretter initramfs. @@ -1479,17 +1736,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. InteractiveTerminalPage - + Konsole not installed Konsole er ikke installeret - + Please install KDE Konsole and try again! Installér venligst KDE Konsole og prøv igen! - + Executing script: &nbsp;<code>%1</code> Eksekverer skript: &nbsp;<code>%1</code> @@ -1497,28 +1754,15 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. InteractiveTerminalViewStep - + Script Skript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Sæt tastaturmodel til %1.<br/> - - - - Set keyboard layout to %1/%2. - Sæt tastaturlayout til %1/%2. - - KeyboardQmlViewStep - + Keyboard Tastatur @@ -1526,7 +1770,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. KeyboardViewStep - + Keyboard Tastatur @@ -1534,73 +1778,96 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. LCLocaleDialog - + System locale setting Systemets lokalitetsindstilling - + 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>. Systemets lokalitetsindstilling har indflydelse på sproget og tegnsættet for nogle kommandolinje-brugerelementer.<br/>Den nuværende indstilling er <strong>%1</strong>. - + &Cancel &Annullér - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Konfigurerer krypteret swap. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formular - + <h1>License Agreement</h1> <h1>Licensaftale</h1> - + I accept the terms and conditions above. Jeg accepterer de ovenstående vilkår og betingelser. - + Please review the End User License Agreements (EULAs). Gennemse venligst slutbrugerlicensaftalerne (EULA'erne). - + This setup procedure will install proprietary software that is subject to licensing terms. Opsætningsproceduren installerer proprietær software der er underlagt licenseringsvilkår. - + If you do not agree with the terms, the setup procedure cannot continue. - Hvis du ikke er enig med disse vilkår, kan opsætningsproceduren ikke fortsætte. + Hvis du ikke er enig i vilkårne, kan opsætningsproceduren ikke fortsætte. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Opsætningsproceduren kan installere proprietær software der er underlagt licenseringsvilkår, for at kunne tilbyde yderligere funktionaliteter og forbedre brugeroplevelsen. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - Hvis du ikke er enig med disse vilkår vil der ikke blive installeret proprietær software, og open source-alternativer vil blive brugt i stedet. + Hvis du ikke er enig i vilkårne vil der ikke blive installeret proprietær software, og open source-alternativer vil blive brugt i stedet. LicenseViewStep - + License Licens @@ -1608,109 +1875,102 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>af %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikdriver</strong><br/><font color="Grey">af %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser-plugin</strong><br/><font color="Grey">af %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">af %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakke</strong><br/><font color="Grey">af %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">af %2</font> - + File: %1 Fil: %1 - + + Hide license text + Skjul licenstekst + + + Show the license text Vis licensteksten - + Open license agreement in browser. Åbn licensaftale i browser. - - - Hide license text - Skjul licenstekst - LocalePage - - The system language will be set to %1. - Systemsproget vil blive sat til %1. - - - - The numbers and dates locale will be set to %1. - Lokalitet for tal og datoer vil blive sat til %1. - - - + Region: - Region: + Område: - + Zone: Zone: - - + + &Change... &Skift ... - - - Set timezone to %1/%2.<br/> - Sæt tidszone til %1/%2.<br/> - LocaleQmlViewStep - + Location Placering + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Placering @@ -1718,35 +1978,35 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. LuksBootKeyFileJob - + Configuring LUKS key file. Konfigurerer LUKS-nøglefil. - - + + No partitions are defined. Der er ikke defineret nogen partitioner. - - - + + + Encrypted rootfs setup error Fejl ved opsætning af krypteret rootfs - + Root partition %1 is LUKS but no passphrase has been set. Rodpartitionen %1 er LUKS men der er ikke indstillet nogen adgangskode. - + Could not create LUKS key file for root partition %1. Kunne ikke oprette LUKS-nøglefil for rodpartitionen %1. - + Could not configure LUKS key file on partition %1. Kunne ikke konfigurere LUKS-nøglefil på partitionen %1. @@ -1754,116 +2014,132 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. MachineIdJob - + Generate machine-id. Generér maskin-id. - + Configuration Error Fejl ved konfiguration - + No root mount point is set for MachineId. Der er ikke angivet noget rodmonteringspunkt for MachineId. + + Map + + + Timezone: %1 + Tidszone: %1 + + + + 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. + Vælg venligst din foretrukne placering på kortet, så installationsprogrammet kan foreslå lokalitets- + og tidszoneindstillinger til dig. Du kan finjustere de foreslåede indstillinger nedenfor. Søg på kortet ved ved at trække + for at flytte og brug knapperne +/- for at zoome ind/ud eller brug muserulning til at zoome. + + NetInstallViewStep - - + Package selection Valg af pakke - + Office software Kontorsoftware - + Office package Kontorpakke - + Browser software Browsersoftware - + Browser package Browserpakke - + Web browser Webbrowser - + Kernel Kerne - + Services Tjenester - + Login Log ind - + Desktop Skrivebord - + Applications Programmer - + Communication Kommunikation - + Development Udvikling - + Office Kontor - + Multimedia Multimedie - + Internet Internet - + Theming Tema - + Gaming Spil - + Utilities Redskaber @@ -1871,7 +2147,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. NotesQmlViewStep - + Notes Noter @@ -1879,17 +2155,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. OEMPage - + Ba&tch: Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Indtast en batchidentifikator her. Det gemmes på målsystemet.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM-konfiguration</h1><p>Calamares bruger OEM-indstillingerne under konfigurering af målsystemet.</p></body></html> @@ -1897,260 +2173,317 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. OEMViewStep - + OEM Configuration OEM-konfiguration - + Set the OEM Batch Identifier to <code>%1</code>. Indstil OEM-batchidentifikatoren til <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Tidszone: %1 + + + + Select your preferred Zone within your Region. + Vælg din foretrukne zone i dit område. + + + + Zones + Zoner + + + + You can fine-tune Language and Locale settings below. + Du kan finjustere sprog- og lokalitetsindstillinger nedenfor. + + PWQ - + Password is too short Adgangskoden er for kort - + Password is too long Adgangskoden er for lang - + Password is too weak Adgangskoden er for svag - + Memory allocation error when setting '%1' Fejl ved allokering af hukommelse da '%1' blev sat - + Memory allocation error Fejl ved allokering af hukommelse - + The password is the same as the old one Adgangskoden er den samme som den gamle - + The password is a palindrome Adgangskoden er et palindrom - + The password differs with case changes only Adgangskoden har kun ændringer i store/små bogstaver - + The password is too similar to the old one Adgangskoden minder for meget om den gamle - + The password contains the user name in some form Adgangskoden indeholder i nogen form brugernavnet - + The password contains words from the real name of the user in some form Adgangskoden indeholder i nogen form ord fra brugerens rigtige navn - + The password contains forbidden words in some form Adgangskoden indeholder i nogen form forbudte ord - - The password contains less than %1 digits - Adgangskoden indeholder færre end %1 cifre - - - + The password contains too few digits Adgangskoden indeholder for få cifre - - The password contains less than %1 uppercase letters - Adgangskoden indeholder færre end %1 bogstaver med stort - - - + The password contains too few uppercase letters Adgangskoden indeholder for få bogstaver med stort - - - The password contains less than %1 lowercase letters - Adgangskoden indeholder færre end %1 bogstaver med småt + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters Adgangskoden indeholder for få bogstaver med småt - - The password contains less than %1 non-alphanumeric characters - Adgangskoden indeholder færre end %1 ikke-alfanumeriske tegn - - - + The password contains too few non-alphanumeric characters Adgangskoden indeholder for få ikke-alfanumeriske tegn - - The password is shorter than %1 characters - Adgangskoden er kortere end %1 tegn - - - + The password is too short Adgangskoden er for kort - - The password is just rotated old one - Adgangskoden er blot det gamle hvor der er byttet om på tegnene - - - - The password contains less than %1 character classes - Adgangskoden indeholder færre end %1 tegnklasser - - - + The password does not contain enough character classes Adgangskoden indeholder ikke nok tegnklasser - - The password contains more than %1 same characters consecutively - Adgangskoden indeholder flere end %1 af de samme tegn i træk - - - + The password contains too many same characters consecutively Adgangskoden indeholder for mange af de samme tegn i træk - - The password contains more than %1 characters of the same class consecutively - Adgangskoden indeholder flere end %1 tegn af den samme klasse i træk - - - + The password contains too many characters of the same class consecutively Adgangskoden indeholder for mange tegn af den samme klasse i træk - - - The password contains monotonic sequence longer than %1 characters - Adgangskoden indeholder monoton sekvens som er længere end %1 tegn + + + The password contains fewer than %n digits + + Adgangskoden indeholder mindre end %1 ciffer + Adgangskoden indeholder mindre end %1 cifre + + + + + The password contains fewer than %n uppercase letters + + Adgangskoden indeholder mindre end %n bogstav med stort + Adgangskoden indeholder mindre end %n bogstaver med stort + + + + + The password contains fewer than %n non-alphanumeric characters + + Adgangskoden indeholder mindre end %n ikke-alfanumeriske tegn + Adgangskoden indeholder mindre end %n ikke-alfanumeriske tegn + + + + + The password is shorter than %n characters + + Adgangskoden er kortere end %n tegn + Adgangskoden er kortere end %n tegn + - + + The password is a rotated version of the previous one + Adgangskoden er blot det gamle hvor der er byttet om på tegnene + + + + The password contains fewer than %n character classes + + Adgangskoden indeholder mindre end %n tegnklasse + Adgangskoden indeholder mindre end %n tegnklasser + + + + + The password contains more than %n same characters consecutively + + Adgangskoden indeholder flere end %n af de samme tegn i træk + Adgangskoden indeholder flere end %n af de samme tegn i træk + + + + + The password contains more than %n characters of the same class consecutively + + Adgangskoden indeholder flere end %n tegn af den samme klasse i træk + Adgangskoden indeholder flere end %n tegn af den samme klasse i træk + + + + + The password contains monotonic sequence longer than %n characters + + Adgangskoden indeholder monoton sekvens som er længere end %n tegn + Adgangskoden indeholder monoton sekvens som er længere end %n tegn + + + + The password contains too long of a monotonic character sequence Adgangskoden indeholder en monoton tegnsekvens som er for lang - + No password supplied Der er ikke angivet nogen adgangskode - + Cannot obtain random numbers from the RNG device Kan ikke få tilfældige tal fra RNG-enhed - + Password generation failed - required entropy too low for settings Generering af adgangskode mislykkedes - krævede entropi er for lav til indstillinger - + The password fails the dictionary check - %1 Adgangskoden bestod ikke ordbogstjekket - %1 - + The password fails the dictionary check Adgangskoden bestod ikke ordbogstjekket - + Unknown setting - %1 Ukendt indstilling - %1 - + Unknown setting Ukendt indstilling - + Bad integer value of setting - %1 Ugyldig heltalsværdi til indstilling - %1 - + Bad integer value Ugyldig heltalsværdi - + Setting %1 is not of integer type Indstillingen %1 er ikke en helttalsstype - + Setting is not of integer type Indstillingen er ikke en helttalsstype - + Setting %1 is not of string type Indstillingen %1 er ikke en strengtype - + Setting is not of string type Indstillingen er ikke en strengtype - + Opening the configuration file failed Åbningen af konfigurationsfilen mislykkedes - + The configuration file is malformed Konfigurationsfilen er forkert udformet - + Fatal failure Fatal fejl - + Unknown error Ukendt fejl - + Password is empty Adgangskoden er tom @@ -2158,40 +2491,48 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PackageChooserPage - + Form Formular - + Product Name Produktnavn - + TextLabel Tekstetiket - + Long Product Description Lang produktbeskrivelse - + Package Selection Valg af pakke - + Please pick a product from the list. The selected product will be installed. Vælg venligst et produkt fra listen. Det valgte produkt installeres. + + PackageChooserQmlViewStep + + + Packages + Pakker + + PackageChooserViewStep - + Packages Pakker @@ -2199,12 +2540,12 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PackageModel - + Name Navn - + Description Beskrivelse @@ -2212,17 +2553,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. Page_Keyboard - + Form Formular - + Keyboard Model: Tastaturmodel: - + Type here to test your keyboard Skriv her for at teste dit tastatur @@ -2230,96 +2571,96 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. Page_UserSetup - + Form Formular - + What is your name? Hvad er dit navn? - - What name do you want to use to log in? - Hvilket navn skal bruges til at logge ind? - - - - Choose a password to keep your account safe. - Vælg en adgangskode for at beskytte din konto. - - - - - <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> - <small>Skriv den samme adgangskode to gange, så det kan blive tjekket for skrivefejl. En god adgangskode indeholder en blanding af bogstaver, tal og specialtegn, og bør være mindst 8 tegn langt og bør skiftes jævnligt.</small> - - - - What is the name of this computer? - Hvad er navnet på computeren? - - - + Your Full Name Dit fulde navn - + + What name do you want to use to log in? + Hvilket navn skal bruges til at logge ind? + + + login login - + + What is the name of this computer? + Hvad er navnet på computeren? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Navnet bruges, hvis du gør computeren synlig for andre på et netværk.</small> - + Computer Name Computernavn - - + + Choose a password to keep your account safe. + Vælg en adgangskode for at beskytte din konto. + + + + + <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> + <small>Skriv den samme adgangskode to gange, så det kan blive tjekket for skrivefejl. En god adgangskode indeholder en blanding af bogstaver, tal og specialtegn, og bør være mindst 8 tegn langt og bør skiftes jævnligt.</small> + + + + Password Adgangskode - - + + Repeat Password Gentag adgangskode - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Når boksen er tilvalgt, så foretages der tjek af adgangskodens styrke og du vil ikke være i stand til at bruge en svag adgangskode. - + Require strong passwords. Kræv stærke adgangskoder. - + Log in automatically without asking for the password. Log ind automatisk uden at spørge efter adgangskoden. - + Use the same password for the administrator account. Brug den samme adgangskode til administratorkontoen. - + Choose a password for the administrator account. Vælg en adgangskode til administratorkontoen. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Skriv den samme adgangskode to gange, så det kan blive tjekket for skrivefejl.</small> @@ -2327,42 +2668,42 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PartitionLabelsView - + Root Rod - + Home Hjem - + Boot Boot - + EFI system EFI-system - + Swap Swap - + New partition for %1 Ny partition til %1 - + New partition Ny partition - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2712,39 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PartitionModel - - + + Free Space Ledig plads - - + + New partition Ny partition - + Name Navn - + File System Filsystem - + + File System Label + + + + Mount Point Monteringspunkt - + Size Størrelse @@ -2406,77 +2752,77 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PartitionPage - + Form Formular - + Storage de&vice: Lageren&hed: - + &Revert All Changes &Tilbagefør alle ændringer - + New Partition &Table Ny partitions&tabel - + Cre&ate &Opret - + &Edit &Redigér - + &Delete &Slet - + New Volume Group Ny diskområdegruppe - + Resize Volume Group Ændr størrelse på diskområdegruppe - + Deactivate Volume Group Deaktivér diskområdegruppe - + Remove Volume Group Fjern diskområdegruppe - + I&nstall boot loader on: I&nstallér bootloader på: - + Are you sure you want to create a new partition table on %1? Er du sikker på, at du vil oprette en ny partitionstabel på %1? - + Can not create new partition Kan ikke oprette ny partition - + 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. Partitionstabellen på %1 har allerede %2 primære partitioner, og der kan ikke tilføjes flere. Fjern venligst en primær partition og tilføj i stedet en udvidet partition. @@ -2484,117 +2830,107 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PartitionViewStep - + Gathering system information... Indsamler systeminformation ... - + Partitions Partitioner - - Install %1 <strong>alongside</strong> another operating system. - Installér %1 <strong>ved siden af</strong> et andet styresystem. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Slet</strong> disk og installér %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Erstat</strong> en partition med %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Manuel</strong> partitionering. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Installér %1 <strong>ved siden af</strong> et andet styresystem på disk <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Slet</strong> disk <strong>%2</strong> (%3) og installér %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Erstat</strong> en partition på disk <strong>%2</strong> (%3) med %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Manuel</strong> partitionering på disk <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Nuværende: - + After: Efter: - + No EFI system partition configured Der er ikke konfigureret nogen EFI-systempartition - - 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>esp</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. - En EFI-systempartition er nødvendig for at starte %1.<br/><br/>For at konfigurere en EFI-systempartition skal du gå tilbage og vælge eller oprette et FAT32-filsystem med <strong>esp</strong>-flaget aktiveret og monteringspunkt <strong>%2</strong>.<br/><br/>Du kan fortsætte uden at opsætte en EFI-systempartition, men dit system vil muligvis ikke kunne starte. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - EFI-systempartitionsflag ikke sat + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - En EFI-systempartition er nødvendig for at starte %1.<br/><br/>En partition var konfigureret med monteringspunkt <strong>%2</strong>, men dens <strong>esp</strong>-flag var ikke sat.<br/>For at sætte flaget skal du gå tilbage og redigere partitionen.<br/><br/>Du kan fortsætte uden at konfigurere flaget, men dit system vil muligvis ikke kunne starte. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS Valgmulighed til at bruge GPT på BIOS - - 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. - En GPT-partitionstabel er den bedste valgmulighed til alle systemer. Installationsprogrammet understøtter også sådan en opsætning for BIOS-systemer.<br/><br/>Konfigurer en GPT-partitionstabel på BIOS, (hvis det ikke allerede er gjort) ved at gå tilbage og indstil partitionstabellen til GPT, opret herefter en 8 MB uformateret partition med <strong>bios_grub</strong>-flaget aktiveret.<br/><br/>En uformateret 8 MB partition er nødvendig for at starte %1 på et BIOS-system med GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + - + Boot partition not encrypted Bootpartition ikke krypteret - + 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. En separat bootpartition blev opsat sammen med en krypteret rodpartition, men bootpartitionen er ikke krypteret.<br/><br/>Der er sikkerhedsmæssige bekymringer med denne slags opsætning, da vigtige systemfiler er gemt på en ikke-krypteret partition.<br/>Du kan fortsætte hvis du vil, men oplåsning af filsystemet sker senere under systemets opstart.<br/>For at kryptere bootpartitionen skal du gå tilbage og oprette den igen, vælge <strong>Kryptér</strong> i partitionsoprettelsesvinduet. - + has at least one disk device available. har mindst én tilgængelig diskenhed. - + There are no partitions to install on. Der er ikke nogen partitioner at installere på. @@ -2602,13 +2938,13 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma udseende og fremtoning-job - - + + Could not select KDE Plasma Look-and-Feel package Kunne ikke vælge KDE Plasma udseende og fremtoning-pakke @@ -2616,17 +2952,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PlasmaLnfPage - + Form Formular - + 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. Vælg venligst et udseende og fremtoning til KDE Plasma-skrivebordet. Du kan også springe trinnet over og konfigurere udseendet og fremtoningen når systemet er sat op. Ved klik på et udseende og fremtoning giver det dig en liveforhåndsvisning af det. - + 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. Vælg venligst et udseende og fremtoning til KDE Plasma-skrivebordet. Du kan også springe trinnet over og konfigurere udseendet og fremtoningen når systemet er installeret. Ved klik på et udseende og fremtoning giver det dig en liveforhåndsvisning af det. @@ -2634,7 +2970,7 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PlasmaLnfViewStep - + Look-and-Feel Udseende og fremtoning @@ -2642,17 +2978,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. PreserveFiles - + Saving files for later ... Gemmer filer til senere ... - + No files configured to save for later. Der er ikke konfigureret nogen filer til at blive gemt til senere. - + Not all of the configured files could be preserved. Kunne ikke bevare alle de konfigurerede filer. @@ -2660,14 +2996,14 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt. ProcessResult - + There was no output from the command. Der var ikke nogen output fra kommandoen. - + Output: @@ -2676,52 +3012,52 @@ Output: - + External command crashed. Ekstern kommando holdt op med at virke. - + Command <i>%1</i> crashed. Kommandoen <i>%1</i> holdte op med at virke. - + External command failed to start. Ekstern kommando kunne ikke starte. - + Command <i>%1</i> failed to start. Kommandoen <i>%1</i> kunne ikke starte. - + Internal error when starting command. Intern fejl ved start af kommando. - + Bad parameters for process job call. Ugyldige parametre til kald af procesjob. - + External command failed to finish. Ekstern kommando blev ikke færdig. - + Command <i>%1</i> failed to finish in %2 seconds. Kommandoen <i>%1</i> blev ikke færdig på %2 sekunder. - + External command finished with errors. Ekstern kommando blev færdig med fejl. - + Command <i>%1</i> finished with exit code %2. Kommandoen <i>%1</i> blev færdig med afslutningskoden %2. @@ -2729,89 +3065,96 @@ Output: QObject - - Default Keyboard Model - Standardtastaturmodel - - - - - Default - Standard - - - - unknown - ukendt - - - - extended - udvidet - - - - unformatted - uformatteret - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Upartitioneret plads eller ukendt partitionstabel - - - - (no mount point) - (intet monteringspunkt) - - - - Requirements checking for module <i>%1</i> is complete. - Tjek at krav for modulet <i>%1</i> er fuldført. - - - + %1 (%2) %1 (%2) - - No product - Intet produkt + + unknown + ukendt - - No description provided. - Der er ikke angivet nogen beskrivelse. + + extended + udvidet - - - - + + unformatted + uformatteret + + + + swap + swap + + + + + Default + Standard + + + + + + File not found Filen blev ikke fundet - + Path <pre>%1</pre> must be an absolute path. Stien <pre>%1</pre> skal være en absolut sti. - + + Directory not found + Mappen blev ikke fundet + + + + Could not create new random file <pre>%1</pre>. Kunne ikke oprette den tilfældige fil <pre>%1</pre>. + + + No product + Intet produkt + + + + No description provided. + Der er ikke angivet nogen beskrivelse. + + + + (no mount point) + (intet monteringspunkt) + + + + Unpartitioned space or unknown partition table + Upartitioneret plads eller ukendt partitionstabel + + + + Recommended + + + <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> + <p>Computeren imødekommer ikke visse af de anbefalede systemkrav til opsætning af %1.<br/> +setting + Opsætningen kan fortsætte, men nogle funktionaliteter kan være deaktiveret.</p> + RemoveUserJob - + Remove live user from target system Fjern livebruger fra målsystemet @@ -2819,18 +3162,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Fjern diskområdegruppe ved navn %1. - + Remove Volume Group named <strong>%1</strong>. Fjern diskområdegruppe ved navn <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Installationsprogrammet kunne ikke fjern en diskområdegruppe ved navn '%1'. @@ -2838,143 +3181,160 @@ Output: ReplaceWidget - + Form Formular - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vælg hvor %1 skal installeres.<br/><font color="red">Advarsel: </font>Det vil slette alle filer på den valgte partition. - + The selected item does not appear to be a valid partition. Det valgte emne ser ikke ud til at være en gyldig partition. - + %1 cannot be installed on empty space. Please select an existing partition. %1 kan ikke installeres på tom plads. Vælg venligst en eksisterende partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kan ikke installeres på en udvidet partition. Vælg venligst en eksisterende primær eller logisk partition. - + %1 cannot be installed on this partition. - %1 kan ikke installeres på denne partition. + %1 kan ikke installeres på partitionen. - + Data partition (%1) Datapartition (%1) - + Unknown system partition (%1) Ukendt systempartition (%1) - + %1 system partition (%2) %1-systempartition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitionen %1 er for lille til %2. Vælg venligst en partition med mindst %3 GiB plads. - + <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. <strong>%2</strong><br/><br/>En EFI-systempartition kunne ikke findes på systemet. Gå venligst tilbage og brug manuel partitionering til at opsætte %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 vil blive installeret på %2.<br/><font color="red">Advarsel: </font>Al data på partition %2 vil gå tabt. - + The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen ved %1 vil blive brugt til at starte %2. - + EFI system partition: EFI-systempartition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Computeren imødekommer ikke minimumskravene til installation af %1.<br/> + Installation kan ikke fortsætte.</p> + + + + <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> + <p>Computeren imødekommer ikke visse af de anbefalede systemkrav til opsætning af %1.<br/> + Opsætningen kan fortsætte, men nogle funktionaliteter kan være deaktiveret.</p> + + ResizeFSJob - + Resize Filesystem Job Job til ændring af størrelse - + Invalid configuration Ugyldig konfiguration - + The file-system resize job has an invalid configuration and will not run. Filsystemets job til ændring af størrelse har en ugyldig konfiguration og kan ikke køre. - + KPMCore not Available KPMCore ikke tilgængelig - + Calamares cannot start KPMCore for the file-system resize job. Calamares kan ikke starte KPMCore for jobbet til ændring af størrelse. - - - - - + + + + + Resize Failed Ændring af størrelse mislykkedes - + The filesystem %1 could not be found in this system, and cannot be resized. Filsystemet %1 kunne ikke findes i systemet, og kan ikke ændres i størrelse. - + The device %1 could not be found in this system, and cannot be resized. Enheden %1 kunne ikke findes i systemet, og kan ikke ændres i størrelse. - - + + The filesystem %1 cannot be resized. Filsystemet størrelse %1 kan ikke ændres. - - + + The device %1 cannot be resized. Enheden %1 kan ikke ændres i størrelse. - + The filesystem %1 must be resized, but cannot. Filsystemet %1 skal ændres i størrelse, men er ikke i stand til det. - + The device %1 must be resized, but cannot Enheden størrelse %1 skal ændres, men er ikke i stand til det. @@ -2982,22 +3342,22 @@ Output: ResizePartitionJob - + Resize partition %1. Ændr størrelse på partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ændr størrelse af <strong>%2 MiB</strong> partition <strong>%1</strong> til <strong>%3 MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Ændrer størrelsen på %2 MiB partition %1 til %3 MiB. - + The installer failed to resize partition %1 on disk '%2'. Installationsprogrammet kunne ikke ændre størrelse på partition %1 på disk '%2'. @@ -3005,7 +3365,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group Ændr størrelse på diskområdegruppe @@ -3013,18 +3373,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Ændr størrelse på diskområdegruppe ved navn %1 fra %2 til %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ændr størrelse af diskområdegruppe ved navn <strong>%1</strong> fra <strong>%2</strong> til <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Installationsprogrammet kunne ikke ændre størrelsen på en diskområdegruppe ved navn '%1'. @@ -3032,53 +3392,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: For at få det bedste resultat sørg venligst for at computeren: - + System requirements Systemkrav - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Computeren imødekommer ikke minimumsystemkravene for at opsætte %1.<br/>Opsætningen kan ikke fortsætte. <a href="#details">Detaljer ...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Computeren imødekommer ikke minimumsystemkravene for at installere %1.<br/>Installationen kan ikke fortsætte. <a href="#details">Detaljer ...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Computeren imødekommer ikke nogle af de anbefalede systemkrav for at opsætte %1.<br/>Opsætningen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Computeren imødekommer ikke nogle af de anbefalede systemkrav for at installere %1.<br/>Installationen kan fortsætte, men nogle funktionaliteter kan være deaktiveret. - - - - This program will ask you some questions and set up %2 on your computer. - Programmet vil stille dig nogle spørgsmål og opsætte %2 på din computer. - - ScanningDialog - + Scanning storage devices... Skanner lagerenheder ... - + Partitioning Partitionering @@ -3086,29 +3418,29 @@ Output: SetHostNameJob - + Set hostname %1 - Sæt værtsnavn %1 + Indstil værtsnavn %1 - + Set hostname <strong>%1</strong>. - Sæt værtsnavn <strong>%1</strong>. + Indstil værtsnavn <strong>%1</strong>. - + Setting hostname %1. - Sætter værtsnavn %1. + Indstiller værtsnavn %1. + - Internal Error Intern fejl - - + + Cannot write hostname to target system Kan ikke skrive værtsnavn til destinationssystem @@ -3116,29 +3448,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - Sæt tastaturmodel til %1, layout til %2-%3 + Indstil tastaturmodel til %1, layout til %2-%3 - + Failed to write keyboard configuration for the virtual console. Kunne ikke skrive tastaturkonfiguration for den virtuelle konsol. - - - + + + Failed to write to %1 Kunne ikke skrive til %1 - + Failed to write keyboard configuration for X11. Kunne ikke skrive tastaturkonfiguration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. Kunne ikke skrive tastaturkonfiguration til eksisterende /etc/default-mappe. @@ -3146,171 +3478,208 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - Sæt flag på partition %1. + Indstil flag på partition %1. - + Set flags on %1MiB %2 partition. - Sæt flag på %1 MiB %2 partition. + Indstil flag på %1 MiB %2 partition. - + Set flags on new partition. - Sæt flag på ny partition. + Indstil flag på ny partition. - + Clear flags on partition <strong>%1</strong>. Ryd flag på partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Ryd flag på %1 MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Flag %1 MiB <strong>%2</strong> partition som <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Rydder flag på %1 MiB <strong>%2</strong> partition. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Sætter flag <strong>%3</strong> på %1 MiB <strong>%2</strong> partition. - - - + Clear flags on new partition. Ryd flag på ny partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag partition <strong>%1</strong> som <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Flag %1 MiB <strong>%2</strong> partition som <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Flag ny partition som <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Rydder flag på partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Rydder flag på %1 MiB <strong>%2</strong> partition. + + + Clearing flags on new partition. Rydder flag på ny partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - Sætter flag <strong>%2</strong> på partition <strong>%1</strong>. + Indstiller flag <strong>%2</strong> på partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Indstiller flag <strong>%3</strong> på %1 MiB <strong>%2</strong> partition. + + + Setting flags <strong>%1</strong> on new partition. - Sætter flag <strong>%1</strong> på ny partition. + Indstiller flag <strong>%1</strong> på ny partition. - + The installer failed to set flags on partition %1. - Installationsprogrammet kunne ikke sætte flag på partition %1. + Installationsprogrammet kunne ikke indstille flag på partition %1. SetPasswordJob - + Set password for user %1 - Sæt adgangskode for bruger %1 + Indstil adgangskode for brugeren %1 - + Setting password for user %1. - Sætter adgangskode for bruger %1. + Indstiller adgangskode for brugeren %1. - + Bad destination system path. Ugyldig destinationssystemsti. - + rootMountPoint is %1 rodMonteringsPunkt er %1 - + Cannot disable root account. Kan ikke deaktivere root-konto. - + passwd terminated with error code %1. passwd stoppet med fejlkode %1. - + Cannot set password for user %1. - Kan ikke sætte adgangskode for bruger %1. + Kan ikke indstille adgangskode for brugeren %1. - + usermod terminated with error code %1. - usermod stoppet med fejlkode %1. + usermod stoppet med fejlkoden %1. SetTimezoneJob - + Set timezone to %1/%2 - Sæt tidszone til %1/%2 + Indstil tidszone til %1/%2 - + Cannot access selected timezone path. Kan ikke tilgå den valgte tidszonesti. - + Bad path: %1 Ugyldig sti: %1 - + Cannot set timezone. - Kan ikke sætte tidszone. + Kan ikke indstille tidszone. - + Link creation failed, target: %1; link name: %2 Oprettelse af link mislykkedes, destination: %1; linknavn: %2 - + Cannot set timezone, - Kan ikke sætte tidszone, + Kan ikke indstille tidszone, - + Cannot open /etc/timezone for writing Kan ikke åbne /etc/timezone til skrivning + + SetupGroupsJob + + + Preparing groups. + Forbereder grupper. + + + + + Could not create groups in target system + Kunne ikke oprette grupper i målsystemet + + + + These groups are missing in the target system: %1 + Grupperne mangler i målsystemet: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Konfigurer <pre>sudo</pre>-brugere. + + + + Cannot chmod sudoers file. + Kan ikke chmod sudoers-fil. + + + + Cannot create sudoers file for writing. + Kan ikke oprette sudoers-fil til skrivning. + + ShellProcessJob - + Shell Processes Job Skal-procesjob @@ -3318,188 +3687,215 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1/%L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Dette er et overblik over hvad der vil ske når du starter opsætningsprocessen. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Dette er et overblik over hvad der vil ske når du starter installationsprocessen. + + &Yes + &Ja - - - SummaryViewStep - - Summary - Opsummering + + &No + &Nej + + + + &Cancel + &Annullér + + + + &Close + &Luk TrackingInstallJob - + Installation feedback Installationsfeedback - + Sending installation feedback. Sender installationsfeedback. - + Internal error in install-tracking. Intern fejl i installationssporing. - + HTTP request timed out. HTTP-anmodning fik timeout. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE-brugerfeedback + + + + Configuring KDE user feedback. + Konfigurerer KDE-brugerfeedback. + + + + + Error in KDE user feedback configuration. + Fejl i konfiguration af KDE-brugerfeedback. + + + + Could not configure KDE user feedback correctly, script error %1. + Kunne ikke konfigurere KDE-brugerfeedback korrekt, fejl i script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Kunne ikke konfigurere KDE-brugerfeedback korrekt, fejl i Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Maskinfeedback - + Configuring machine feedback. - Konfigurer maskinfeedback. + Konfigurerer maskinfeedback. - - + + Error in machine feedback configuration. Fejl i maskinfeedback-konfiguration. - + Could not configure machine feedback correctly, script error %1. - Kunne ikke konfigurere maskinfeedback korrekt, skript-fejl %1. + Kunne ikke konfigurere maskinfeedback korrekt, fejl i script %1. - + Could not configure machine feedback correctly, Calamares error %1. - Kunne ikke konfigurere maskinfeedback korrekt, Calamares-fejl %1. + Kunne ikke konfigurere maskinfeedback korrekt, fejl i Calamares %1. TrackingPage - + Form Formular - + Placeholder Pladsholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Vælges dette sender du <span style=" font-weight:600;">slet ikke nogen information</span> om din installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Klik her for <span style=" font-weight:600;">slet ikke at sende nogen information</span> om din installation.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klik her for mere information om brugerfeedback</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Installationssporing hjælper %1 til at se hvor mange brugere de har, hvilket hardware de installere %1 på og (med de sidste to valgmuligheder nedenfor), hente information om fortrukne programmer løbende. Klik venligst på hjælp-ikonet ved siden af hvert område, for at se hvad der vil blive sendt. + + 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. + Sporing hjælper %1 med at se hvor ofte den installeres, hvilken hardware den installeres på og hvilke programmer der bruges. Klik på hjælpeikonet ved siden af hvert område for at se hvad der sendes. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Vælges dette sender du information om din installation og hardware. Informationen vil <b>første blive sendt</b> efter installationen er færdig. + + 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. + Vælges dette sender du information om din installation og hardware. Informationen sendes kun <b>én gang</b> efter installationen er færdig. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Vælges dette sender du <b>periodisk</b> information om din installation, hardware og programmer, til %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Vælges dette sender du periodisk information om din <b>maskines</b> installation, hardware og programmer, til %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Vælges dette sender du <b>regelmæssigt</b> information om din installation, hardware, programmer og anvendelsesmønstre, til %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Vælges dette sender du regelmæssigt information om din <b>brugers</b> installation, hardware, programmer og programmernes anvendelsesmønstre, til %1. TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Afmonter filsystemer. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter opsætningen.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Hvis mere end én person bruger computeren, kan du oprette flere konti efter installationen.</small> + + + UsersQmlViewStep - - Your username is too long. - Dit brugernavn er for langt. - - - - Your username must start with a lowercase letter or underscore. - Dit brugernavn skal begynde med et bogstav med småt eller understregning. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Det er kun tilladt at bruge bogstaver med småt, tal, understregning og bindestreg. - - - - Only letters, numbers, underscore and hyphen are allowed. - Det er kun tilladt at bruge bogstaver, tal, understregning og bindestreg. - - - - Your hostname is too short. - Dit værtsnavn er for kort. - - - - Your hostname is too long. - Dit værtsnavn er for langt. - - - - Your passwords do not match! - Dine adgangskoder er ikke ens! + + Users + Brugere UsersViewStep - + Users Brugere @@ -3507,65 +3903,67 @@ Output: VariantModel - + Key + Column header for key/value Nøgle - + Value + Column header for key/value Værdi VolumeGroupBaseDialog - + Create Volume Group Opret diskområdegruppe - + List of Physical Volumes Liste over fysiske disområder - + Volume Group Name: Diskområdegruppenavn: - + Volume Group Type: Diskområdegruppetype: - + Physical Extent Size: Størrelse på fysisk udbredelse: - + MiB MiB - + Total Size: Samlet størrelse: - + Used Size: Anvendt størrelse: - + Total Sectors: Samlet sektorer: - + Quantity of LVs: Mængde af LV'er: @@ -3573,106 +3971,106 @@ Output: WelcomePage - + Form Formular - - + + Select application and system language - Vælg program- og systemsprog + Vælg sprog for programmet og systemet + &About + &Om + + + Open donations website Åbn websted for donationer - + &Donate &Donér - + Open help and support website Åbn websted for hjælp og support + &Support + &Support + + + Open issues and bug-tracking website Åbn websted for issues og bug-tracking - Open release notes website - Åbn websted med udgivelsesnoter - - - - &Release notes - &Udgivelsesnoter - - - &Known issues &Kendte problemer - - &Support - &Support + + Open release notes website + Åbn websted med udgivelsesnoter - - &About - &Om + + &Release notes + &Udgivelsesnoter - - <h1>Welcome to the %1 installer.</h1> - <h1>Velkommen til %1-installationsprogrammet.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Velkommen til Calamares-installationsprogrammet for %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Velkommen til Calamares-opsætningsprogrammet til %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Velkommen til %1-opsætningen.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Velkommen til Calamares-installationsprogrammet for %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Velkommen til %1-installationsprogrammet.</h1> + + + + %1 support + %1 support + + + About %1 setup Om %1-opsætningen - + About %1 installer Om %1-installationsprogrammet - + <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. - <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Ophavsret 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Ophavsret 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Tak til <a href="https://calamares.io/team/">Calamares-teamet</a> og <a href="https://www.transifex.com/calamares/calamares/">Calamares-oversætterteamet</a>.<br/><br/>Udviklingen af <a href="https://calamares.io/">Calamares</a> sponsoreres af <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 support + <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Ophavsret 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Ophavsret 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Tak til <a href="https://calamares.io/team/">Calamares-teamet</a> og <a href="https://www.transifex.com/calamares/calamares/">Calamares-oversætterteamet</a>.<br/><br/>Udviklingen af <a href="https://calamares.io/">Calamares</a> sponsoreres af <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Velkommen @@ -3680,42 +4078,169 @@ Output: WelcomeViewStep - + Welcome Velkommen + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Fejl ved konfiguration + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <h1>%1</h1><br/> <strong>%2<br/> for %3</strong><br/><br/> Ophavsret 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> Ophavsret 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> - Tak til <a href='https://calamares.io/team/'>Calamares-teamet</a> - og <a href='https://www.transifex.com/calamares/calamares/'>Calamares-oversætterteamet - </a>.<br/><br/> - Udviklingen af <a href='https://calamares.io/'>Calamares</a> + Tak til <a href='https://calamares.io/team/'>Calamares-teamet</a> + og <a href='https://www.transifex.com/calamares/calamares/'>Calamares-oversætterteamet</a>.<br/><br/> + Udviklingen af <a href='https://calamares.io/'>Calamares</a> er sponsoreret af <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + Tilbage + + + + calamares-sidebar + + + Show debug information + Vis fejlretningsinformation + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <h1>Sprog</h1> </br> + Systemets lokalitetsindstilling påvirker sproget og tegnsættet for visse brugerfladeelementer i kommandolinjen. Den nuværende indstilling er <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Lokaliteter</h1> </br> + Systemets lokalitetsindstillinger påvirker tal- og datoformatet. Den nuværende indstilling er <strong>%1</strong>. + + + Back Tilbage @@ -3723,52 +4248,43 @@ Output: keyboardq - - Keyboard Model - Tastaturmodel + + To activate keyboard preview, select a layout. + - - Pick your preferred keyboard model or use the default one based on the detected hardware - Vælg din foretrukne tastaturmodel eller brug den som er standard i det registrerede hardware + + Keyboard Model: + Tastaturmodel: - - Refresh - Opdater - - - - + Layouts Layouts - - - Keyboard Layout - Tastaturlayout + + Type here to test your keyboard + Skriv her for at teste dit tastatur - - Models - Modeller - - - + Variants Varianter + + + localeq - - Test your keyboard - Test dit tastatur + + Change + Skift notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3776,34 +4292,261 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Velkommen til %1 <quote>%2</quote>-installationsprogrammet</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Dette er et eksempel på en QML-fil, der vises valgmulighederne i RichText med Flickable-indhold.</p> + + <p>QML med RichText kan bruge HTML-tags — Flickable-indhold er nyttigt til berøringsfølsomme skærme.</p> + + <p><b>Denne tekst er fed</b></p> + <p><i>Denne tekst er kursiv</i></p> + <p><u>Denne tekst er understreget</u></p> + <p><center>Denne tekst vil være centreret.</center></p> + <p><s>Dette er gennemstreget</s></p> + + <p>Eksempel på kode: + <code>ls -l /home</code></p> + + <p><b>Lister:</b></p> + <ul> + <li>Systemer med Intel-CPU</li> + <li>Systemer med AMD-CPU</li> + </ul> + + <p>Den lodrette rullebjælke kan justeres — bredden er på nuværende tidspunkt indstillet til 10.</p> + + + + Back + Tilbage + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Vælg dit brugernavn og loginoplysninger som bruges til at logge ind med og udføre administrative opgaver + + + + What is your name? + Hvad er dit navn? + + + + Your Full Name + Dit fulde navn + + + + What name do you want to use to log in? + Hvilket navn skal bruges til at logge ind? + + + + Login Name + Loginnavn + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Hvis mere end én person bruger computeren, kan du oprette flere konti efter installationen. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Det er kun tilladt at bruge bogstaver med småt, tal, understregning og bindestreg. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Hvad er navnet på computeren? + + + + Computer Name + Computernavn + + + + This name will be used if you make the computer visible to others on a network. + Navnet bruges, hvis du gør computeren synlig for andre på et netværk. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Vælg en adgangskode for at beskytte din konto. + + + + Password + Adgangskode + + + + Repeat Password + Gentag adgangskode + + + + 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. + Skriv den samme adgangskode to gange, så den kan blive tjekket for skrivefejl. En god adgangskode indeholder en blanding af bogstaver, tal og specialtegn, bør være mindst 8 tegn langt og bør skiftes jævnligt. + + + + Validate passwords quality + Validér kvaliteten af adgangskoderne + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Når boksen er tilvalgt, så foretages der tjek af adgangskodens styrke og du vil ikke være i stand til at bruge en svag adgangskode. + + + + Log in automatically without asking for the password + Log ind automatisk uden at spørge efter adgangskoden + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Genbrug brugeradgangskode som root-adgangskode + + + + Use the same password for the administrator account. + Brug den samme adgangskode til administratorkontoen. + + + + Choose a root password to keep your account safe. + Vælg en root-adgangskode til at holde din konto sikker + + + + Root Password + Root-adgangskode + + + + Repeat Root Password + Gentag root-adgangskode + + + + Enter the same password twice, so that it can be checked for typing errors. + Skriv den samme adgangskode to gange, så den kan blive tjekket for skrivefejl. + + + + welcomeq + + + <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> + <h3>Velkommen til %1 <quote>%2</quote> installationsprogrammet</h3> + <p>Programmet stiller dig nogle spørgsmål og opsætte %2 på din computer.</p> + + + About Om - + Support Support - + Known issues Kendte problemer - + Release notes Udgivelsesnoter - + Donate Donér diff --git a/lang/calamares_de.ts b/lang/calamares_de.ts index b1192ae5e..03477e78e 100644 --- a/lang/calamares_de.ts +++ b/lang/calamares_de.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Einstellungen für das automatische Einhängen bearbeiten + + BootInfoWidget - + 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. Die <strong>Boot-Umgebung</strong> dieses Systems.<br><br>Ältere x86-Systeme unterstützen nur <strong>BIOS</strong>.<br>Moderne Systeme verwenden normalerweise <strong>EFI</strong>, können jedoch auch als BIOS angezeigt werden, wenn sie im Kompatibilitätsmodus gestartet werden. - + 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. Dieses System wurde mit einer <strong>EFI</strong> Boot-Umgebung gestartet.<br><br>Um den Start von einer EFI-Umgebung einzurichten, muss das Installationsprogramm einen Bootloader wie <strong>GRUB</strong> oder <strong>systemd-boot</strong> auf einer <strong>EFI System-Partition</strong> installieren. Dies passiert automatisch, außer Sie wählen die manuelle Partitionierung. In diesem Fall müssen Sie die EFI System-Partition selbst auswählen oder erstellen. - + 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. Dieses System wurde mit einer <strong>BIOS</strong> Boot-Umgebung gestartet.<br><br>Um den Systemstart von einer BIOS-Umgebung einzurichten, muss das Installationsprogramm einen Bootloader wie <strong>GRUB</strong>installieren, entweder am Anfang einer Partition oder im <strong>Master Boot Record</strong> nahe des Anfangs der Partitionstabelle (bevorzugt). Dies passiert automatisch, außer Sie wählen die manuelle Partitionierung. In diesem Fall müssen Sie ihn selbst einrichten. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record von %1 - + Boot Partition Boot-Partition - + System Partition System-Partition - + Do not install a boot loader Installiere keinen Bootloader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Leere Seite @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formular - + GlobalStorage Globale Einstellungen - + JobQueue Job-Queue - + Modules Module - + Type: Typ: - - + + none keiner - + Interface: Schnittstelle: - - Tools - Werkzeuge + + Crashes Calamares, so that Dr. Konqui can look at it. + Bringt Calamares zum Absturz, damit eine Untersuchung durch Dr. Konqui erfolgen kann. - + + Reloads the stylesheet from the branding directory. + Aktualisiert die Formatvorlage aus dem Herstellerverzeichnis. + + + + Uploads the session log to the configured pastebin. + Hochladen des Sitzungsprotokolls zum eingestellten Ziel. + + + + Send Session Log + Sitzungsprotokoll senden + + + Reload Stylesheet Stylesheet neu laden - + + Displays the tree of widget names in the log (for stylesheet debugging). + Vermerkt den Verzeichnisbaum der Widget-Namen im Protokoll (für die Fehlersuche bei Formatvorlagen) + + + Widget Tree Widget-Baum - + Debug information Debug-Information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Einrichtung - + Install Installieren @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Auftrag fehlgeschlagen (%1) - + Programmed job failure was explicitly requested. Die Unterlassung einer vorgesehenen Aufgabe wurde ausdrücklich erwünscht. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Fertig @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Beispielaufgabe (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Führen Sie den Befehl '%1' im Zielsystem aus. - + Run command '%1'. Führen Sie den Befehl '%1' aus. - + Running command %1 %2 Befehl %1 %2 wird ausgeführt @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Operation %1 wird ausgeführt. - + Bad working directory path Fehlerhafter Arbeitsverzeichnis-Pfad - + Working directory %1 for python job %2 is not readable. Arbeitsverzeichnis %1 für Python-Job %2 ist nicht lesbar. - + Bad main script file Fehlerhaftes Hauptskript - + Main script file %1 for python job %2 is not readable. Hauptskript-Datei %1 für Python-Job %2 ist nicht lesbar. - + Boost.Python error in job "%1". Boost.Python-Fehler in Job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Lade ... - + QML Step <i>%1</i>. QML Schritt <i>%1</i>. - + Loading failed. Laden fehlgeschlagen. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Die Anforderungsprüfung für das Modul <i>%1</i> ist abgeschlossen. + - + Waiting for %n module(s). Warten auf %n Modul. @@ -236,7 +269,7 @@ - + (%n second(s)) (%n Sekunde) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. Die Überprüfung der Systemvoraussetzungen ist abgeschlossen. @@ -252,247 +285,242 @@ Calamares::ViewManager - - &Back - &Zurück - - - - &Next - &Weiter - - - - &Cancel - &Abbrechen - - - - Cancel setup without changing the system. - Installation abbrechen ohne das System zu verändern. - - - - Cancel installation without changing the system. - Installation abbrechen, ohne das System zu verändern. - - - + Setup Failed Setup fehlgeschlagen - - Would you like to paste the install log to the web? - Möchten Sie das Installationsprotokoll an eine Internetadresse senden? + + Installation Failed + Installation gescheitert - + + Error + Fehler + + + + &Yes + &Ja + + + + &No + &Nein + + + + &Close + &Schließen + + + Install Log Paste URL Internetadresse für das Senden des Installationsprotokolls - + The upload was unsuccessful. No web-paste was done. Das Hochladen ist fehlgeschlagen. Es wurde nichts an eine Internetadresse gesendet. - + + Install log posted to + +%1 + +Link copied to clipboard + Installationsprotokoll gesendet an + +%1 + +Link wurde in die Zwischenablage kopiert + + + Calamares Initialization Failed Initialisierung von Calamares fehlgeschlagen - + %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. %1 kann nicht installiert werden. Calamares war nicht in der Lage, alle konfigurierten Module zu laden. Dieses Problem hängt mit der Art und Weise zusammen, wie Calamares von der jeweiligen Distribution eingesetzt wird. - + <br/>The following modules could not be loaded: <br/>Die folgenden Module konnten nicht geladen werden: - + + Continue with setup? + Setup fortsetzen? + + + Continue with installation? Installation fortsetzen? - + 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> Das %1 Installationsprogramm ist dabei, Änderungen an Ihrer Festplatte vorzunehmen, um %2 einzurichten.<br/><strong> Sie werden diese Änderungen nicht rückgängig machen können.</strong> - + + 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> + Das %1 Installationsprogramm wird Änderungen an Ihrer Festplatte vornehmen, um %2 zu installieren.<br/><strong>Diese Änderungen können nicht rückgängig gemacht werden.</strong> + + + &Set up now &Jetzt einrichten - + + &Install now + Jetzt &installieren + + + + Go &back + Gehe &zurück + + + &Set up &Einrichten - + &Install &Installieren - + Setup is complete. Close the setup program. Setup ist abgeschlossen. Schließe das Installationsprogramm. - + + The installation is complete. Close the installer. + Die Installation ist abgeschlossen. Schließe das Installationsprogramm. + + + + Cancel setup without changing the system. + Installation abbrechen ohne das System zu verändern. + + + + Cancel installation without changing the system. + Installation abbrechen, ohne das System zu verändern. + + + + &Next + &Weiter + + + + &Back + &Zurück + + + + &Done + &Erledigt + + + + &Cancel + &Abbrechen + + + Cancel setup? Installation abbrechen? - + Cancel installation? Installation abbrechen? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Wollen Sie die Installation wirklich abbrechen? Dadurch wird das Installationsprogramm beendet und alle Änderungen gehen verloren. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Wollen Sie wirklich die aktuelle Installation abbrechen? Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. - - - - &Yes - &Ja - - - - - &No - &Nein - - - - &Close - &Schließen - - - - Continue with setup? - Setup fortsetzen? - - - - 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> - Das %1 Installationsprogramm wird Änderungen an Ihrer Festplatte vornehmen, um %2 zu installieren.<br/><strong>Diese Änderungen können nicht rückgängig gemacht werden.</strong> - - - - &Install now - Jetzt &installieren - - - - Go &back - Gehe &zurück - - - - &Done - &Erledigt - - - - The installation is complete. Close the installer. - Die Installation ist abgeschlossen. Schließe das Installationsprogramm. - - - - Error - Fehler - - - - Installation Failed - Installation gescheitert - CalamaresPython::Helper - + Unknown exception type Unbekannter Ausnahmefehler - + unparseable Python error Nicht analysierbarer Python-Fehler - + unparseable Python traceback Nicht analysierbarer Python-Traceback - + Unfetchable Python error. Nicht zuzuordnender Python-Fehler - - CalamaresUtils - - - Install log posted to: -%1 - Installationsprotokoll gesendet an: -%1 - - CalamaresWindow - - &Back - &Zurück - - - - &Next - &Weiter - - - - &Cancel - &Abbrechen - - - + %1 Setup Program %1 Installationsprogramm - + %1 Installer %1 Installationsprogramm + + + ChangeFilesystemLabelJob - - Show debug information - Debug-Information anzeigen + + Set filesystem label on %1. + Setze Dateisytem-Label für %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Setze Dateisytem-Label <strong>%1</strong> für Partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Das Aktualisieren der Partitionstabelle auf Datenträger '%1' ist fehlgeschlagen. CheckerContainer - + Gathering system information... Sammle Systeminformationen... @@ -500,157 +528,197 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. ChoicePage - + Form Form - - After: - Nachher: - - - - Boot loader location: - Installationsziel des Bootloaders: - - - + Select storage de&vice: Speichermedium auswählen - - - - + + + + Current: Aktuell: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Nachher: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manuelle Partitionierung</strong><br/>Sie können Partitionen eigenhändig erstellen oder in der Grösse verändern. + + + Reuse %1 as home partition for %2. %1 als Home-Partition für %2 wiederverwenden. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Wählen Sie die zu verkleinernde Partition, dann ziehen Sie den Regler, um die Größe zu ändern</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 wird auf %2MiB verkleinert und eine neue Partition mit einer Größe von %3MiB wird für %4 erstellt werden. - + + Boot loader location: + Installationsziel des Bootloaders: + + + <strong>Select a partition to install on</strong> <strong>Wählen Sie eine Partition für die Installation</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Es wurde keine EFI-Systempartition auf diesem System gefunden. Bitte gehen Sie zurück und nutzen Sie die manuelle Partitionierung für das Einrichten von %1. - + The EFI system partition at %1 will be used for starting %2. Die EFI-Systempartition %1 wird benutzt, um %2 zu starten. - + EFI system partition: EFI-Systempartition: - + 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. Auf diesem Speichermedium scheint kein Betriebssystem installiert zu sein. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen auf diesem Speichermedium vorgenommen werden. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Festplatte löschen</strong><br/>Dies wird alle vorhandenen Daten auf dem gewählten Speichermedium <font color="red">löschen</font>. - - 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. - Auf diesem Speichermedium ist %1 installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. - - - - No Swap - Kein Swap - - - - Reuse Swap - Swap wiederverwenden - - - - Swap (no Hibernate) - Swap (ohne Ruhezustand) - - - - Swap (with Hibernate) - Swap (mit Ruhezustand) - - - - Swap to file - Auslagerungsdatei verwenden - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Parallel dazu installieren</strong><br/>Das Installationsprogramm wird eine Partition verkleinern, um Platz für %1 zu schaffen. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ersetze eine Partition</strong><br/>Ersetzt eine Partition durch %1. - + + 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. + Auf diesem Speichermedium ist %1 installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. + + + 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. Dieses Speichermedium enthält bereits ein Betriebssystem. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen wird. - + 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. Auf diesem Speichermedium sind mehrere Betriebssysteme installiert. Was möchten Sie tun?<br/>Sie können Ihre Auswahl überprüfen und bestätigen, bevor Änderungen an dem Speichermedium vorgenommen werden. + + + 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/> + Auf diesem Speichergerät befindet sich bereits ein Betriebssystem, aber die Partitionstabelle <strong>%1</strong> unterscheidet sich von den erforderlichen <strong>%2</strong><br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Bei diesem Speichergerät ist eine seiner Partitionen <strong>eingehängt</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Dieses Speichergerät ist ein Teil eines <strong>inaktiven RAID</strong>-Geräts. + + + + No Swap + Kein Swap + + + + Reuse Swap + Swap wiederverwenden + + + + Swap (no Hibernate) + Swap (ohne Ruhezustand) + + + + Swap (with Hibernate) + Swap (mit Ruhezustand) + + + + Swap to file + Auslagerungsdatei verwenden + ClearMountsJob - + + Successfully unmounted %1. + %1 erfolgreich ausgehängt. + + + + Successfully disabled swap %1. + Swap %1 erfolgreich deaktiviert. + + + + Successfully cleared swap %1. + Swap %1 erfolgreich gelöscht. + + + + Successfully closed mapper device %1. + Mapper device %1 erfolgreich geschlossen. + + + + Successfully disabled volume group %1. + Volume group %1 erfolgreich deaktiviert. + + + Clear mounts for partitioning operations on %1 Leere Mount-Points für Partitioning-Operation auf %1 - + Clearing mounts for partitioning operations on %1. Löse eingehängte Laufwerke für die Partitionierung von %1 - + Cleared all mounts for %1 Alle Mount-Points für %1 geleert @@ -658,22 +726,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. ClearTempMountsJob - + Clear all temporary mounts. Alle temporären Mount-Points leeren. - + Clearing all temporary mounts. Löse alle temporär eingehängten Laufwerke. - - Cannot get list of temporary mounts. - Konnte keine Liste von temporären Mount-Points einlesen. - - - + Cleared all temporary mounts. Alle temporären Mount-Points geleert. @@ -681,18 +744,18 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. CommandList - - + + Could not run command. Befehl konnte nicht ausgeführt werden. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Dieser Befehl wird im installierten System ausgeführt und muss daher den Root-Pfad kennen, jedoch wurde kein rootMountPoint definiert. - + The command needs to know the user's name, but no username is defined. Dieser Befehl benötigt den Benutzernamen, jedoch ist kein Benutzername definiert. @@ -700,100 +763,235 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. - - - - This program will ask you some questions and set up %2 on your computer. - Dieses Programm wird Ihnen einige Fragen stellen, um %2 auf Ihrem Computer zu installieren. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Willkommen bei Calamares, dem Installationsprogramm für %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Willkommen zur Installation von %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Willkommen beim Calamares-Installationsprogramm für %1. - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Willkommen im %1 Installationsprogramm.</h1> - - - + Set keyboard model to %1.<br/> Setze Tastaturmodell auf %1.<br/> - + Set keyboard layout to %1/%2. Setze Tastaturbelegung auf %1/%2. - - The system language will be set to %1. - Die Systemsprache wird auf %1 gestellt. + + Set timezone to %1/%2. + Setze Zeitzone auf %1%2. - + + The system language will be set to %1. + Die Systemsprache wird auf %1 eingestellt. + + + The numbers and dates locale will be set to %1. Das Format für Zahlen und Datum wird auf %1 gesetzt. - - Set timezone to %1/%2.<br/> - Setze Zeitzone auf %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Netzwerk-Installation. (Deaktiviert: Ungültige Konfiguration) - + Network Installation. (Disabled: Received invalid groups data) - Netwerk-Installation. (Deaktiviert: Ungültige Gruppen-Daten eingegeben) + Netzwerk-Installation. (Deaktiviert: Ungültige Gruppen-Daten eingegeben) - - Network Installation. (Disabled: internal error) - + + Network Installation. (Disabled: Internal error) + Netzwerkinstallation. (Deaktiviert: Interner Fehler) - + + Network Installation. (Disabled: No package list) + Netzwerkinstallation. (Deaktiviert: Keine Paketliste) + + + + Package selection + Paketauswahl + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Netzwerk-Installation. (Deaktiviert: Paketlisten nicht erreichbar, prüfe deine Netzwerk-Verbindung) + Netzwerk-Installation. (Deaktiviert: Paketlisten nicht erreichbar, prüfen Sie Ihre Netzwerk-Verbindung) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. + + + + This program will ask you some questions and set up %2 on your computer. + Dieses Programm wird Ihnen einige Fragen stellen, um %2 auf Ihrem Computer zu installieren. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Willkommen bei Calamares, dem Installationsprogramm für %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Willkommen zur Installation von %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Willkommen bei Calamares, dem Installationsprogramm für %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Willkommen zum Installationsprogramm für %1</h1> + + + + Your username is too long. + Ihr Benutzername ist zu lang. + + + + '%1' is not allowed as username. + '%1' ist als Benutzername nicht erlaubt. + + + + Your username must start with a lowercase letter or underscore. + Ihr Benutzername muss mit einem Kleinbuchstaben oder Unterstrich beginnen. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Es sind nur Kleinbuchstaben, Zahlen, Unterstrich und Bindestrich erlaubt. + + + + Your hostname is too short. + Ihr Computername ist zu kurz. + + + + Your hostname is too long. + Ihr Computername ist zu lang. + + + + '%1' is not allowed as hostname. + '%1' ist als Computername nicht erlaubt. + + + + Only letters, numbers, underscore and hyphen are allowed. + Es sind nur Buchstaben, Zahlen, Unter- und Bindestriche erlaubt. + + + + Your passwords do not match! + Ihre Passwörter stimmen nicht überein! + + + + OK! + OK! + + + + Setup Failed + Einrichtung fehlgeschlagen + + + + Installation Failed + Installation gescheitert + + + + The setup of %1 did not complete successfully. + Die Einrichtung von %1 wurde nicht erfolgreich abgeschlossen. + + + + The installation of %1 did not complete successfully. + Die Installation von %1 wurde nicht erfolgreich abgeschlossen. + + + + Setup Complete + Einrichtung abgeschlossen + + + + Installation Complete + Installation abgeschlossen + + + + The setup of %1 is complete. + Die Einrichtung von %1 ist abgeschlossen. + + + + The installation of %1 is complete. + Die Installation von %1 ist abgeschlossen. + + + + Package Selection + Paketauswahl + + + + Please pick a product from the list. The selected product will be installed. + Bitte wählen Sie ein Produkt aus der Liste aus. Das ausgewählte Produkt wird installiert. + + + + Install option: <strong>%1</strong> + Installations-Option: <strong>%1</strong> + + + + None + Nichts + + + + Summary + Zusammenfassung + + + + This is an overview of what will happen once you start the setup procedure. + Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. + + + + This is an overview of what will happen once you start the install procedure. + Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. ContextualProcessJob - + Contextual Processes Job Job für kontextuale Prozesse @@ -801,100 +999,136 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. CreatePartitionDialog - + Create a Partition Partition erstellen - - MiB - MiB - - - - Partition &Type: - Partitions&typ: - - - - &Primary - &Primär - - - - E&xtended - Er&weitert - - - - Fi&le System: - Dateisystem: - - - - LVM LV name - LVM LV Name - - - - Flags: - Markierungen: - - - - &Mount Point: - Ein&hängepunkt: - - - + Si&ze: Grö&sse: - + + MiB + MiB + + + + Partition &Type: + Partitions&typ: + + + + Primar&y + Primä&r + + + + E&xtended + Er&weitert + + + + Fi&le System: + Dateisystem: + + + + LVM LV name + LVM LV Name + + + + &Mount Point: + Ein&hängepunkt: + + + + Flags: + Markierungen: + + + + Label for the filesystem + Label für das Dateisystem + + + + FS Label: + FS Label: + + + En&crypt Verschlüsseln - + Logical Logisch - + Primary Primär - + GPT GPT - + Mountpoint already in use. Please select another one. Dieser Einhängepunkt wird schon benuztzt. Bitte wählen Sie einen anderen. + + + Mountpoint must start with a <tt>/</tt>. + Einhängepunkt muss mit einem <tt>/</tt>beginnen. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Erstelle neue %1MiB Partition auf %3 (%2) mit den Einträgen %4. + + + + Create new %1MiB partition on %3 (%2). + Erstelle neue %1MiB Partition auf %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Erstelle eine neue Partition mit einer Größe von %2MiB auf %4 (%3) mit dem Dateisystem %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Erstelle neue <strong>%1MiB</strong>Partition auf <strong>%3</strong> (%2) mit den Einträgen <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Erstelle neue <strong>%1MiB</strong> Partition auf <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Erstelle eine neue Partition mit einer Größe von <strong>%2MiB</strong> auf <strong>%4</strong> (%3) mit dem Dateisystem <strong>%1</strong>. - + + Creating new %1 partition on %2. Erstelle eine neue %1 Partition auf %2. - + The installer failed to create partition on disk '%1'. Das Installationsprogramm scheiterte beim Erstellen der Partition auf Datenträger '%1'. @@ -902,27 +1136,27 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. CreatePartitionTableDialog - + Create Partition Table Partitionstabelle erstellen - + Creating a new partition table will delete all existing data on the disk. Beim Erstellen einer neuen Partitionstabelle werden alle Daten auf dem Datenträger gelöscht. - + What kind of partition table do you want to create? Welchen Partitionstabellen-Typ möchten Sie erstellen? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partitions-Tabelle (GPT) @@ -930,22 +1164,22 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. CreatePartitionTableJob - + Create new %1 partition table on %2. Erstelle eine neue %1 Partitionstabelle auf %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Erstelle eine neue <strong>%1</strong> Partitionstabelle auf <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Erstelle eine neue %1 Partitionstabelle auf %2. - + The installer failed to create a partition table on %1. Das Installationsprogramm konnte die Partitionstabelle auf %1 nicht erstellen. @@ -953,45 +1187,41 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. CreateUserJob - + Create user %1 Erstelle Benutzer %1 - + Create user <strong>%1</strong>. Erstelle Benutzer <strong>%1</strong>. - - Creating user %1. - Erstelle Benutzer %1. + + Preserving home directory + Home-Verzeichnis wird beibehalten - - Sudoers dir is not writable. - Sudoers-Verzeichnis ist nicht beschreibbar. + + + Creating user %1 + Erstelle Benutzer %1 - - Cannot create sudoers file for writing. - Kann sudoers-Datei nicht zum Schreiben erstellen. + + Configuring user %1 + Konfiguriere Benutzer %1 - - Cannot chmod sudoers file. - Kann chmod nicht auf sudoers-Datei anwenden. - - - - Cannot open groups file for reading. - Kann groups-Datei nicht zum Lesen öffnen. + + Setting file permissions + Setze Dateiberechtigungen CreateVolumeGroupDialog - + Create Volume Group Erstelle Volumengruppe @@ -999,22 +1229,22 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. CreateVolumeGroupJob - + Create new volume group named %1. Erstelle eine neue Volumengruppe mit der Bezeichnung %1. - + Create new volume group named <strong>%1</strong>. Erstelle eine neue Volumengruppe mit der Bezeichnung <strong>%1</strong>. - + Creating new volume group named %1. Erstelle eine neue Volumengruppe mit der Bezeichnung %1. - + The installer failed to create a volume group named '%1'. Das Installationsprogramm konnte keine Volumengruppe mit der Bezeichnung '%1' erstellen. @@ -1022,18 +1252,18 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deaktiviere Volumengruppe mit der Bezeichnung %1. - + Deactivate volume group named <strong>%1</strong>. Deaktiviere Volumengruppe mit der Bezeichnung <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Das Installationsprogramm konnte die Volumengruppe %1 nicht deaktivieren. @@ -1041,22 +1271,22 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. DeletePartitionJob - + Delete partition %1. Lösche Partition %1. - + Delete partition <strong>%1</strong>. Lösche Partition <strong>%1</strong>. - + Deleting partition %1. Partition %1 wird gelöscht. - + The installer failed to delete partition %1. Das Installationsprogramm konnte Partition %1 nicht löschen. @@ -1064,46 +1294,46 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. DeviceInfoWidget - - 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. - Die Art von <strong>Partitionstabelle</strong> auf dem gewählten Speichermedium.<br><br>Die einzige Möglichkeit, die Art der Partitionstabelle zu ändern, ist sie zu löschen und sie erneut zu erstellen, wodurch alle Daten auf dem Speichermedium gelöscht werden.<br>Dieses Installationsprogramm wird die aktuelle Partitionstabelle beibehalten, außer Sie entscheiden sich ausdrücklich dagegen.<br>Falls Sie unsicher sind: auf modernen Systemen wird GPT bevorzugt. - - - + This device has a <strong>%1</strong> partition table. Dieses Gerät hat eine <strong>%1</strong> Partitionstabelle. - + 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. Dies ist ein <strong>Loop</strong>-Gerät.<br><br>Es ist ein Pseudo-Gerät ohne Partitionstabelle, das eine Datei als Blockgerät zugänglich macht. Diese Art der Einrichtung enthält in der Regel nur ein einziges Dateisystem. - + 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. Auf dem ausgewählten Speichermedium konnte <strong>keine Partitionstabelle gefunden</strong> werden.<br><br>Die Partitionstabelle dieses Gerätes ist nicht vorhanden, beschädigt oder von einem unbekannten Typ.<br>Dieses Installationsprogramm kann eine neue Partitionstabelle für Sie erstellen, entweder automatisch oder nach Auswahl der manuellen Partitionierung. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Dies ist die empfohlene Partitionstabelle für moderne Systeme, die von einer <strong>EFI</ strong> Boot-Umgebung starten. - + <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. <br><br>Diese Art von Partitionstabelle ist nur für ältere Systeme ratsam, welche von einer <strong>BIOS</strong> Boot-Umgebung starten. GPT wird in den meisten anderen Fällen empfohlen.<br><br><strong>Achtung:</strong> Die MBR-Partitionstabelle ist ein veralteter Standard aus der MS-DOS-Ära.<br>Es können nur 4 <em>primäre</em> Partitionen erstellt werden. Davon kann eine als <em>erweiterte</em> Partition eingerichtet werden, die wiederum viele <em>logische</em> Partitionen enthalten kann. + + + 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. + Die Art von <strong>Partitionstabelle</strong> auf dem gewählten Speichermedium.<br><br>Die einzige Möglichkeit, die Art der Partitionstabelle zu ändern, ist sie zu löschen und sie erneut zu erstellen, wodurch alle Daten auf dem Speichermedium gelöscht werden.<br>Dieses Installationsprogramm wird die aktuelle Partitionstabelle beibehalten, außer Sie entscheiden sich ausdrücklich dagegen.<br>Falls Sie unsicher sind: auf modernen Systemen wird GPT bevorzugt. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1342,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Schreibe LUKS-Konfiguration für Dracut nach %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Überspringe das Schreiben der LUKS-Konfiguration für Dracut: die Partition "/" ist nicht verschlüsselt - + Failed to open %1 Konnte %1 nicht öffnen @@ -1130,7 +1360,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1138,123 +1368,167 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. EditExistingPartitionDialog - + Edit Existing Partition Editiere bestehende Partition - - Content: - Inhalt: + + Con&tent: + Inhal&t: - + &Keep &Beibehalten - + Format Formatieren - + Warning: Formatting the partition will erase all existing data. Warnung: Beim Formatieren der Partition werden alle Daten gelöscht. - + &Mount Point: Einhängepun&kt: - + Si&ze: Grö&sse: - + MiB MiB - + Fi&le System: Datei&system: - + Flags: Markierungen: - - Mountpoint already in use. Please select another one. - Der Einhängepunkt wird schon benutzt. Bitte wählen Sie einen anderen. + + Label for the filesystem + Label für das Dateisystem + + + + FS Label: + FS Label: EncryptWidget - + Form Formular - + En&crypt system Verschlüssele System - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Ihr System scheint Verschlüsselung nicht ausreichend zu unterstützen, um das gesamte System zu verschlüsseln. Sie können diese zwar aktivieren, aber die Leistung des Systems könnte darunter leiden. + + + Passphrase Passwort - + Confirm passphrase Passwort wiederholen - + + Please enter the same passphrase in both boxes. Bitte tragen Sie dasselbe Passwort in beide Felder ein. + + ErrorDialog + + + Details: + Details: + + + + Would you like to paste the install log to the web? + Möchten Sie das Installationsprotokoll an eine Internetadresse senden? + + FillGlobalStorageJob - + Set partition information Setze Partitionsinformationen - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Installiere %1 auf <strong>neue</strong> %2 Systempartition mit den Funktionen <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Installiere %1 auf <strong>neuer</strong> %2 Systempartition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Erstelle <strong>neue</strong> %2 Partition mit Einhängepunkt <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Erstelle <strong>neue</strong> %2 Partition mit Einhängepunkt <strong>%1</strong> und den Funktionen <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Erstelle<strong>neue</strong> %2 Partition mit Einhängepunkt <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Installiere %2 auf %3 Systempartition <strong>%1</strong> mit den Funktionen <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Erstelle %3 Partition <strong>%1</strong> mit Einhängepunkt <strong>%2</strong> und den Funktionen <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Erstelle %3 Partition <strong>%1</strong> mit Einhängepunkt <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Installiere %2 auf %3 Systempartition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Erstelle %3 Partition <strong>%1</strong> mit Einhängepunkt <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Installiere Bootloader auf <strong>%1</strong>. - + Setting up mount points. Richte Einhängepunkte ein. @@ -1262,93 +1536,81 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. FinishedPage - + Form Form - + &Restart now Jetzt &Neustarten - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Alles erledigt.</h1><br/>%1 wurde auf Ihrem Computer eingerichtet.<br/>Sie können nun mit Ihrem neuen System arbeiten. - + <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> <html><head/><body><p>Wenn diese Option aktiviert ist, genügt zum Neustart des Systems ein Klick auf <span style="font-style:italic;">Fertig</span> oder das Schließen des Installationsprogramms.</p></body></html> - + <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. <h1>Alles erledigt.</h1><br/>%1 wurde auf Ihrem Computer installiert.<br/>Sie können nun in Ihr neues System neustarten oder mit der %2 Live-Umgebung fortfahren. - + <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> <html><head/><body><p>Wenn diese Option aktiviert ist, genügt zum Neustart des Systems ein Klick auf <span style="font-style:italic;">Fertig</span> oder das Schließen des Installationsprogramms.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installation fehlgeschlagen</h1><br/>%1 wurde nicht auf Ihrem Computer eingerichtet.<br/>Die Fehlermeldung war: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation fehlgeschlagen</h1><br/>%1 wurde nicht auf deinem Computer installiert.<br/>Die Fehlermeldung lautet: %2. + + FinishedQmlViewStep + + + Finish + Abschließen + + FinishedViewStep - + Finish Beenden - - - Setup Complete - Installation abgeschlossen - - - - Installation Complete - Installation abgeschlossen - - - - The setup of %1 is complete. - Die Installation von %1 ist abgeschlossen. - - - - The installation of %1 is complete. - Die Installation von %1 ist abgeschlossen. - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatiere Partition %1 (Dateisystem: %2, Größe: %3 MiB) auf %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatiere <strong>%3MiB</strong> Partition <strong>%1</strong> mit dem Dateisystem <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatiere Partition %1 mit Dateisystem %2. - + The installer failed to format partition %1 on disk '%2'. Das Formatieren von Partition %1 auf Datenträger '%2' ist fehlgeschlagen. @@ -1356,72 +1618,72 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. GeneralRequirements - + has at least %1 GiB available drive space mindestens %1 GiB freien Festplattenplatz hat - + There is not enough drive space. At least %1 GiB is required. Zu wenig Speicherplatz auf der Festplatte. Es wird mindestens %1 GiB benötigt. - + has at least %1 GiB working memory mindestens %1 GiB Arbeitsspeicher hat - + The system does not have enough working memory. At least %1 GiB is required. Das System hat nicht genug Arbeitsspeicher. Es wird mindestens %1 GiB benötigt. - + is plugged in to a power source ist an eine Stromquelle angeschlossen - + The system is not plugged in to a power source. Der Computer ist an keine Stromquelle angeschlossen. - + is connected to the Internet ist mit dem Internet verbunden - + The system is not connected to the Internet. Der Computer ist nicht mit dem Internet verbunden. - + is running the installer as an administrator (root) führt das Installationsprogramm als Administrator (root) aus - + The setup program is not running with administrator rights. Das Installationsprogramm wird nicht mit Administratorrechten ausgeführt. - + The installer is not running with administrator rights. Das Installationsprogramm wird nicht mit Administratorrechten ausgeführt. - + has a screen large enough to show the whole installer hat einen ausreichend großen Bildschirm für die Anzeige des gesamten Installationsprogramm - + The screen is too small to display the setup program. Der Bildschirm ist zu klein, um das Installationsprogramm anzuzeigen. - + The screen is too small to display the installer. Der Bildschirm ist zu klein, um das Installationsprogramm anzuzeigen. @@ -1429,7 +1691,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. HostInfoJob - + Collecting information about your machine. Sammeln von Informationen über Ihren Computer. @@ -1437,25 +1699,25 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. IDJob - - + + + - OEM Batch Identifier OEM-Chargenkennung - + Could not create directories <code>%1</code>. Verzeichnisse <code>%1</code> konnten nicht erstellt werden. - + Could not open file <code>%1</code>. Die Datei <code>%1</code> konnte nicht geöffnet werden. - + Could not write to file <code>%1</code>. Konnte nicht in die Datei <code>%1</code> schreiben. @@ -1463,7 +1725,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. InitcpioJob - + Creating initramfs with mkinitcpio. Erstelle initramfs mit mkinitcpio. @@ -1471,7 +1733,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. InitramfsJob - + Creating initramfs. Erstelle initramfs. @@ -1479,17 +1741,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. InteractiveTerminalPage - + Konsole not installed Konsole nicht installiert - + Please install KDE Konsole and try again! Bitte installieren Sie das KDE-Programm namens Konsole und probieren Sie es erneut! - + Executing script: &nbsp;<code>%1</code> Führe Skript aus: &nbsp;<code>%1</code> @@ -1497,36 +1759,23 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. InteractiveTerminalViewStep - + Script Skript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Setze Tastaturmodell auf %1.<br/> - - - - Set keyboard layout to %1/%2. - Setze Tastaturbelegung auf %1/%2. - - KeyboardQmlViewStep - + Keyboard - Tastaturbelegung + Tastatur KeyboardViewStep - + Keyboard Tastatur @@ -1534,65 +1783,88 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. LCLocaleDialog - + System locale setting Regions- und Spracheinstellungen - + 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>. Die Lokalisierung des Systems beeinflusst die Sprache und den Zeichensatz einiger Elemente der Kommandozeile.<br/>Die derzeitige Einstellung ist <strong>%1</strong>. - + &Cancel &Abbrechen - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Konfiguriere verschlüsselten Auslagerungsspeicher. + + + + No target system available. + Kein Zielsystem verfügbar. + + + + No rootMountPoint is set. + Kein rootMountPoint gesetzt. + + + + No configFilePath is set. + Kein configFilePath gesetzt. + + LicensePage - + Form Formular - + <h1>License Agreement</h1> <h1>Lizenzvereinbarung</h1> - + I accept the terms and conditions above. Ich akzeptiere die obigen Allgemeinen Geschäftsbedingungen. - + Please review the End User License Agreements (EULAs). Bitte lesen Sie die Lizenzvereinbarungen für Endanwender (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. Diese Installationsroutine wird proprietäre Software installieren, die Lizenzbedingungen unterliegt. - + If you do not agree with the terms, the setup procedure cannot continue. Wenn Sie diesen Bedingungen nicht zustimmen, kann die Installation nicht fortgesetzt werden. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Um zusätzliche Funktionen bereitzustellen und das Benutzererlebnis zu verbessern, kann diese Installationsroutine proprietäre Software installieren, die Lizenzbedingungen unterliegt. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Wenn Sie diesen Bedingungen nicht zustimmen, wird keine proprietäre Software installiert, stattdessen werden Open-Source-Alternativen verwendet. @@ -1600,7 +1872,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. LicenseViewStep - + License Lizenz @@ -1608,109 +1880,102 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 Treiber</strong><br/>von %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 Grafiktreiber</strong><br/><font color="Grey">von %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 Browser-Plugin</strong><br/><font color="Grey">von %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 Codec</strong><br/><font color="Grey">von %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 Paket</strong><br/><font color="Grey">von %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">von %2</font> - + File: %1 Datei: %1 - + + Hide license text + Lizenztext ausblenden + + + Show the license text Lizenzvereinbarung anzeigen - + Open license agreement in browser. Lizenzvereinbarung im Browser öffnen - - - Hide license text - Lizenztext ausblenden - LocalePage - - The system language will be set to %1. - Die Systemsprache wird auf %1 gestellt. - - - - The numbers and dates locale will be set to %1. - Das Format für Zahlen und Datum wird auf %1 gesetzt. - - - + Region: Region: - + Zone: Zeitzone: - - + + &Change... &Ändern... - - - Set timezone to %1/%2.<br/> - Setze Zeitzone auf %1/%2.<br/> - LocaleQmlViewStep - + Location Standort + + LocaleTests + + + Quit + Beenden + + LocaleViewStep - + Location Standort @@ -1718,35 +1983,35 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. LuksBootKeyFileJob - + Configuring LUKS key file. Konfiguriere LUKS-Schlüsseldatei. - - + + No partitions are defined. Keine Partitionen definiert. - - - + + + Encrypted rootfs setup error Fehler bei der Einrichtung der verschlüsselten Root-Partition - + Root partition %1 is LUKS but no passphrase has been set. Root-Partition %1 ist mit LUKS verschlüsselt, aber es wurde kein Passwort gesetzt. - + Could not create LUKS key file for root partition %1. Konnte die LUKS-Schlüsseldatei für die Root-Partition %1 nicht erstellen. - + Could not configure LUKS key file on partition %1. Die LUKS-Schlüsseldatei konnte nicht auf Partition %1 eingerichtet werden. @@ -1754,124 +2019,140 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. MachineIdJob - + Generate machine-id. Generiere Computer-ID. - + Configuration Error Konfigurationsfehler - + No root mount point is set for MachineId. Für die Computer-ID wurde kein Einhängepunkt für die Root-Partition festgelegt. + + Map + + + Timezone: %1 + Zeitzone: %1 + + + + 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. + Bitte wählen Sie Ihren Standort auf der Karte, damit das Installationsprogramm Einstellungen zu Regionalschema + und Zeitzone vorschlagen kann. Diese können unten bearbeitet werden. Navigieren Sie auf der Karte, indem Sie diese mit der Maus bewegen + und benutzen Sie die Tasten +/- oder das Mausrad für das Hinein- und Hinauszoomen. + + NetInstallViewStep - - + Package selection Paketauswahl - + Office software Office-Software - + Office package Office-Paket - + Browser software Browser-Software - + Browser package Browser-Paket - + Web browser Webbrowser - + Kernel Kernel - + Services Dienste - + Login Anmeldung - + Desktop Desktop - + Applications Anwendungen - + Communication - + Kommunikation - + Development - + Entwicklung - + Office - + Büro - + Multimedia - + Multimedia - + Internet - + Internet - + Theming - + Anpassung - + Gaming - + Spielen - + Utilities - + Dienstprogramme NotesQmlViewStep - + Notes Anmerkungen @@ -1879,17 +2160,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. OEMPage - + Ba&tch: S&tapel: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Geben Sie hier eine Chargenkennung ein. Diese wird im Zielsystem gespeichert.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM-Konfiguration</h1><p>Calamares verwendet OEM-Einstellungen bei der Konfiguration des Zielsystems.</p></body></html> @@ -1897,260 +2178,317 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. OEMViewStep - + OEM Configuration OEM-Konfiguration - + Set the OEM Batch Identifier to <code>%1</code>. OEM-Chargenkennung auf <code>%1</code> setzen. + + Offline + + + Select your preferred Region, or use the default settings. + Wählen Sie Ihre bevorzugte Region oder nutzen Sie die Standardeinstellungen. + + + + + + Timezone: %1 + Zeitzone: %1 + + + + Select your preferred Zone within your Region. + Wählen Sie Ihre bevorzugte Zone innerhalb Ihrer Region. + + + + Zones + Zonen + + + + You can fine-tune Language and Locale settings below. + Sie können Sprache und Regionalschema unten weiter anpassen. + + PWQ - + Password is too short Das Passwort ist zu kurz - + Password is too long Das Passwort ist zu lang - + Password is too weak Das Passwort ist zu schwach - + Memory allocation error when setting '%1' Fehler bei der Speicherzuweisung beim Einrichten von '%1' - + Memory allocation error Fehler bei der Speicherzuweisung - + The password is the same as the old one Das Passwort ist dasselbe wie das alte - + The password is a palindrome Das Passwort ist ein Palindrom - + The password differs with case changes only Das Passwort unterscheidet sich nur durch Groß- und Kleinschreibung - + The password is too similar to the old one Das Passwort ist dem alten zu ähnlich - + The password contains the user name in some form Das Passwort enthält eine Form des Benutzernamens - + The password contains words from the real name of the user in some form Das Passwort enthält Teile des Klarnamens des Benutzers - + The password contains forbidden words in some form Das Passwort enthält verbotene Wörter - - The password contains less than %1 digits - Das Passwort hat weniger als %1 Stellen - - - + The password contains too few digits Das Passwort hat zu wenige Stellen - - The password contains less than %1 uppercase letters - Das Passwort enthält weniger als %1 Großbuchstaben - - - + The password contains too few uppercase letters Das Passwort enthält zu wenige Großbuchstaben - - - The password contains less than %1 lowercase letters - Das Passwort enthält weniger als %1 Kleinbuchstaben + + + The password contains fewer than %n lowercase letters + + Das Passwort enthält weniger als %n Kleinbuchstaben + Das Passwort enthält weniger als %n Kleinbuchstaben + - + The password contains too few lowercase letters Das Passwort enthält zu wenige Kleinbuchstaben - - The password contains less than %1 non-alphanumeric characters - Das Passwort enthält weniger als %1 nicht-alphanumerische Zeichen - - - + The password contains too few non-alphanumeric characters Das Passwort enthält zu wenige nicht-alphanumerische Zeichen - - The password is shorter than %1 characters - Das Passwort hat weniger als %1 Stellen - - - + The password is too short Das Passwort ist zu kurz - - The password is just rotated old one - Das Passwort wurde schon einmal verwendet - - - - The password contains less than %1 character classes - Das Passwort enthält weniger als %1 verschiedene Zeichenarten - - - + The password does not contain enough character classes Das Passwort enthält nicht genügend verschiedene Zeichenarten - - The password contains more than %1 same characters consecutively - Das Passwort enthält mehr als %1 gleiche Zeichen am Stück - - - + The password contains too many same characters consecutively Das Passwort enthält zu viele gleiche Zeichen am Stück - - The password contains more than %1 characters of the same class consecutively - Das Passwort enthält mehr als %1 gleiche Zeichenarten am Stück - - - + The password contains too many characters of the same class consecutively Das Passwort enthält zu viele gleiche Zeichenarten am Stück - - - The password contains monotonic sequence longer than %1 characters - Das Passwort enthält eine gleichartige Sequenz von mehr als %1 Zeichen + + + The password contains fewer than %n digits + + Das Passwort enthält weniger als %n Zeichen + Das Passwort enthält weniger als %n Zeichen + + + + + The password contains fewer than %n uppercase letters + + Das Passwort enthält weniger als %n Großbuchstaben + Das Passwort enthält weniger als %n Großbuchstaben + + + + + The password contains fewer than %n non-alphanumeric characters + + Das Passwort enthält weniger als %n nicht-alphanumerische Zeichen + Das Passwort enthält weniger als %n nicht-alphanumerische Zeichen + + + + + The password is shorter than %n characters + + Das Passwort ist kürzer als %n Zeichen + Das Passwort ist kürzer als %n Zeichen + - + + The password is a rotated version of the previous one + Dieses Passwort ist eine abgeänderte Version des vorigen + + + + The password contains fewer than %n character classes + + Dieses Passwort enthält weniger als %n Zeichenarten + Dieses Passwort enthält weniger als %n Zeichenarten + + + + + The password contains more than %n same characters consecutively + + Dieses Passwort enthält mehr als %n geiche Zeichen hintereinander + Dieses Passwort enthält mehr als %n geiche Zeichen hintereinander + + + + + The password contains more than %n characters of the same class consecutively + + Dieses Passwort enthält mehr als %n Zeichen derselben Zeichenart hintereinander + Dieses Passwort enthält mehr als %n Zeichen derselben Zeichenart hintereinander + + + + + The password contains monotonic sequence longer than %n characters + + Dieses Passwort enthält eine abwechslungslose Sequenz länger als %n Zeichen + Dieses Passwort enthält eine abwechslungslose Sequenz länger als %n Zeichen + + + + The password contains too long of a monotonic character sequence Das Passwort enthält eine gleichartige Sequenz von zu großer Länge - + No password supplied Kein Passwort angegeben - + Cannot obtain random numbers from the RNG device Zufallszahlen konnten nicht vom Zufallszahlengenerator abgerufen werden - + Password generation failed - required entropy too low for settings Passwortgeneration fehlgeschlagen - Zufallszahlen zu schwach für die gewählten Einstellungen - + The password fails the dictionary check - %1 Das Passwort besteht den Wörterbuch-Test nicht - %1 - + The password fails the dictionary check Das Passwort besteht den Wörterbuch-Test nicht - + Unknown setting - %1 Unbekannte Einstellung - %1 - + Unknown setting Unbekannte Einstellung - + Bad integer value of setting - %1 Fehlerhafter Integerwert der Einstellung - %1 - + Bad integer value Fehlerhafter Integerwert - + Setting %1 is not of integer type Die Einstellung %1 ist kein Integerwert - + Setting is not of integer type Die Einstellung ist kein Integerwert - + Setting %1 is not of string type Die Einstellung %1 ist keine Zeichenkette - + Setting is not of string type Die Einstellung ist keine Zeichenkette - + Opening the configuration file failed Öffnen der Konfigurationsdatei fehlgeschlagen - + The configuration file is malformed Die Konfigurationsdatei ist falsch strukturiert - + Fatal failure Fataler Fehler - + Unknown error Unbekannter Fehler - + Password is empty Passwort nicht vergeben @@ -2158,40 +2496,48 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PackageChooserPage - + Form Formular - + Product Name Produktname - + TextLabel TextLabel - + Long Product Description Lange Produktbeschreibung - + Package Selection Paketauswahl - + Please pick a product from the list. The selected product will be installed. Bitte wählen Sie ein Produkt aus der Liste aus. Das ausgewählte Produkt wird installiert. + + PackageChooserQmlViewStep + + + Packages + Pakete + + PackageChooserViewStep - + Packages Pakete @@ -2199,12 +2545,12 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PackageModel - + Name Name - + Description Beschreibung @@ -2212,17 +2558,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Page_Keyboard - + Form Formular - + Keyboard Model: Tastaturmodell: - + Type here to test your keyboard Tippen Sie hier, um die Tastaturbelegung zu testen @@ -2230,96 +2576,96 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. Page_UserSetup - + Form Formular - + What is your name? Wie ist Ihr Vor- und Nachname? - - What name do you want to use to log in? - Welchen Namen möchten Sie zum Anmelden benutzen? - - - - Choose a password to keep your account safe. - Wählen Sie ein Passwort, um Ihr Konto zu sichern. - - - - - <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> - <small>Bitte geben Sie Ihr Passwort zweimal ein, um Tippfehler auszuschliessen. Ein gutes Passwort enthält Buchstaben, Zahlen und Sonderzeichen. Ferner sollte es mindestens acht Zeichen umfassen und regelmässig geändert werden.</small> - - - - What is the name of this computer? - Wie ist der Name dieses Computers? - - - + Your Full Name Ihr vollständiger Name - + + What name do you want to use to log in? + Welchen Namen möchten Sie zum Anmelden benutzen? + + + login Anmeldung - + + What is the name of this computer? + Wie ist der Name dieses Computers? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Dieser Name wird benutzt, wenn Sie den Computer im Netzwerk sichtbar machen.</small> - + Computer Name Computername - - + + Choose a password to keep your account safe. + Wählen Sie ein Passwort, um Ihr Konto zu sichern. + + + + + <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> + <small>Bitte geben Sie Ihr Passwort zweimal ein, um Tippfehler auszuschliessen. Ein gutes Passwort enthält Buchstaben, Zahlen und Sonderzeichen. Ferner sollte es mindestens acht Zeichen umfassen und regelmässig geändert werden.</small> + + + + Password Passwort - - + + Repeat Password Passwort wiederholen - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Wenn dieses Kontrollkästchen aktiviert ist, wird die Passwortstärke überprüft und verhindert, dass Sie ein schwaches Passwort verwenden. - + Require strong passwords. Verlange sichere Passwörter. - + Log in automatically without asking for the password. Automatisches Einloggen ohne Passwortabfrage. - + Use the same password for the administrator account. Nutze das gleiche Passwort auch für das Administratorkonto. - + Choose a password for the administrator account. Wählen Sie ein Passwort für das Administrationskonto. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Geben Sie das Passwort zweimal ein, um es auf Tippfehler zu prüfen.</small> @@ -2327,42 +2673,42 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI-System - + Swap Swap - + New partition for %1 Neue Partition für %1 - + New partition Neue Partition - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2717,39 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PartitionModel - - + + Free Space Freier Platz - - + + New partition Neue Partition - + Name Name - + File System Dateisystem - + + File System Label + Dateisystem-Label + + + Mount Point Einhängepunkt - + Size Grösse @@ -2406,77 +2757,77 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PartitionPage - + Form Form - + Storage de&vice: Speicher&medium: - + &Revert All Changes Alle Änderungen &rückgängig machen - + New Partition &Table Neue Partitions&tabelle - + Cre&ate Erstellen - + &Edit Ä&ndern - + &Delete Lösc&hen - + New Volume Group Neue Volumengruppe - + Resize Volume Group Größe der Volumengruppe verändern - + Deactivate Volume Group Volumengruppe deaktivieren - + Remove Volume Group Volumengruppe löschen - + I&nstall boot loader on: I&nstalliere Bootloader auf: - + Are you sure you want to create a new partition table on %1? Sind Sie sicher, dass Sie eine neue Partitionstabelle auf %1 erstellen möchten? - + Can not create new partition Neue Partition kann nicht erstellt werden - + 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. Die Partitionstabelle auf %1 hat bereits %2 primäre Partitionen und weitere können nicht hinzugefügt werden. Bitte entfernen Sie eine primäre Partition und fügen Sie stattdessen eine erweiterte Partition hinzu. @@ -2484,117 +2835,107 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PartitionViewStep - + Gathering system information... Sammle Systeminformationen... - + Partitions Partitionen - - Install %1 <strong>alongside</strong> another operating system. - Installiere %1 <strong>neben</strong> einem anderen Betriebssystem. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Lösche</strong> Festplatte und installiere %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Ersetze</strong> eine Partition durch %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Manuelle</strong> Partitionierung. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - %1 <strong>parallel</strong> zu einem anderen Betriebssystem auf der Festplatte <strong>%2</strong> (%3) installieren. - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - Festplatte <strong>%2</strong> <strong>löschen</strong> (%3) und %1 installieren. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - Eine Partition auf Festplatte <strong>%2</strong> (%3) durch %1 <strong>ersetzen</strong>. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Manuelle</strong> Partitionierung auf Festplatte <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Festplatte <strong>%1</strong> (%2) - - - + Current: Aktuell: - + After: Nachher: - + No EFI system partition configured Keine EFI-Systempartition konfiguriert - - 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>esp</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. - Eine EFI Systempartition wird benötigt, um %1 zu starten.<br/><br/>Um eine EFI Systempartition einzurichten, gehen Sie zurück und wählen oder erstellen Sie ein FAT32-Dateisystem mit einer aktivierten <strong>esp</strong> Markierung sowie <strong>%2</strong> als Einhängepunkt .<br/><br/>Sie können ohne die Einrichtung einer EFI-Systempartition fortfahren, aber ihr System wird unter Umständen nicht starten können. + + EFI system partition configured incorrectly + EFI Systempartition falsch konfiguriert - - EFI system partition flag not set - Die Markierung als EFI-Systempartition wurde nicht gesetzt + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Eine EFI Systempartition ist notwendig, um %1 zu starten.<br/><br/>Um eine EFI Systempartition zu konfigurieren, gehen Sie zurück und wählen oder erstellen Sie ein geeignetes Dateisystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Eine EFI Systempartition wird benötigt, um %1 zu starten.<br/><br/>Eine Partition mit dem Einhängepunkt <strong>%2</strong> wurd eingerichtet, jedoch wurde dort keine <strong>esp</strong> Markierung gesetzt.<br/>Um diese Markierung zu setzen, gehen Sie zurück und bearbeiten Sie die Partition.<br/><br/>Sie können ohne diese Markierung fortfahren, aber ihr System wird unter Umständen nicht starten können. + + The filesystem must be mounted on <strong>%1</strong>. + Das Dateisystem muss eingehängt sein unter <strong>%1</strong>. - + + The filesystem must have type FAT32. + Das Dateisystem muss vom Typ FAT32 sein. + + + + The filesystem must be at least %1 MiB in size. + Das Dateisystem muss mindestens %1 MiB groß sein. + + + + The filesystem must have flag <strong>%1</strong> set. + Das Dateisystem muss die Markierung <strong>%1</strong> tragen. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Sie können fortfahren, ohne eine EFI-Systempartition einzurichten, aber Ihr installiertes System wird möglicherweise nicht starten. + + + Option to use GPT on BIOS + Option zur Verwendung von GPT mit BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted Bootpartition nicht verschlüsselt - + 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. Eine separate Bootpartition wurde zusammen mit einer verschlüsselten Rootpartition erstellt, die Bootpartition ist aber unverschlüsselt.<br/><br/> Dies ist sicherheitstechnisch nicht optimal, da wichtige Systemdateien auf der unverschlüsselten Bootpartition gespeichert werden.<br/>Wenn Sie wollen, können Sie fortfahren, aber das Entschlüsseln des Dateisystems wird erst später während des Systemstarts erfolgen.<br/>Um die Bootpartition zu verschlüsseln, gehen Sie zurück und erstellen Sie diese neu, indem Sie bei der Partitionierung <strong>Verschlüsseln</strong> wählen. - + has at least one disk device available. mindestens eine Festplatte zur Verfügung hat - + There are no partitions to install on. Keine Partitionen für die Installation verfügbar. @@ -2602,13 +2943,13 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PlasmaLnfJob - + Plasma Look-and-Feel Job Job für das Erscheinungsbild von Plasma - - + + Could not select KDE Plasma Look-and-Feel package Das Paket für das Erscheinungsbild von KDE Plasma konnte nicht ausgewählt werden @@ -2616,17 +2957,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PlasmaLnfPage - + Form Formular - + 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. Bitte wählen Sie ein Erscheinungsbild für die Be­nut­zer­ober­flä­che von KDE Plasma. Sie können diesen Schritt auch überspringen und das Erscheinungsbild nach der Installation festlegen. Per Klick auf einen Eintrag können Sie sich eine Vorschau dieses Erscheinungsbildes anzeigen lassen. - + 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. Bitte wählen Sie das Erscheinungsbild für den KDE Plasma Desktop. Sie können diesen Schritt auch überspringen und das Erscheinungsbild festlegen, sobald das System installiert ist. Per Klick auf einen Eintrag können Sie sich eine Vorschau dieses Erscheinungsbildes anzeigen lassen. @@ -2634,7 +2975,7 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PlasmaLnfViewStep - + Look-and-Feel Erscheinungsbild @@ -2642,17 +2983,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. PreserveFiles - + Saving files for later ... Speichere Dateien für später ... - + No files configured to save for later. Keine Dateien für das Speichern zur späteren Verwendung konfiguriert. - + Not all of the configured files could be preserved. Nicht alle konfigurierten Dateien konnten erhalten werden. @@ -2660,14 +3001,14 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. ProcessResult - + There was no output from the command. Dieser Befehl hat keine Ausgabe erzeugt. - + Output: @@ -2676,52 +3017,52 @@ Ausgabe: - + External command crashed. Externes Programm abgestürzt. - + Command <i>%1</i> crashed. Programm <i>%1</i> abgestürzt. - + External command failed to start. Externes Programm konnte nicht gestartet werden. - + Command <i>%1</i> failed to start. Das Programm <i>%1</i> konnte nicht gestartet werden. - + Internal error when starting command. Interner Fehler beim Starten des Programms. - + Bad parameters for process job call. Ungültige Parameter für Prozessaufruf. - + External command failed to finish. Externes Programm konnte nicht abgeschlossen werden. - + Command <i>%1</i> failed to finish in %2 seconds. Programm <i>%1</i> konnte nicht innerhalb von %2 Sekunden abgeschlossen werden. - + External command finished with errors. Externes Programm mit Fehlern beendet. - + Command <i>%1</i> finished with exit code %2. Befehl <i>%1</i> beendet mit Exit-Code %2. @@ -2729,108 +3070,114 @@ Ausgabe: QObject - - Default Keyboard Model - Standard-Tastaturmodell - - - - - Default - Standard - - - - unknown - unbekannt - - - - extended - erweitert - - - - unformatted - unformatiert - - - - swap - Swap - - - - Unpartitioned space or unknown partition table - Nicht zugeteilter Speicherplatz oder unbekannte Partitionstabelle - - - - (no mount point) - (kein Einhängepunkt) - - - - Requirements checking for module <i>%1</i> is complete. - Die Anforderungsprüfung für das Modul <i>%1</i> ist abgeschlossen. - - - + %1 (%2) %1 (%2) - - No product - Kein Produkt + + unknown + unbekannt - - No description provided. - Keine Beschreibung vorhanden. + + extended + erweitert - - - - + + unformatted + unformatiert + + + + swap + Swap + + + + + Default + Standard + + + + + + File not found Datei nicht gefunden - + Path <pre>%1</pre> must be an absolute path. Der Pfad <pre>%1</pre> muss ein absoluter Pfad sein. - + + Directory not found + Verzeichnis nicht gefunden + + + + Could not create new random file <pre>%1</pre>. Die neue Zufallsdatei <pre>%1</pre> konnte nicht erstellt werden. + + + No product + Kein Produkt + + + + No description provided. + Keine Beschreibung vorhanden. + + + + (no mount point) + (kein Einhängepunkt) + + + + Unpartitioned space or unknown partition table + Nicht zugeteilter Speicherplatz oder unbekannte Partitionstabelle + + + + Recommended + + + <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> + <p>Dieser Computer erfüllt einige empfohlene Bedingungen nicht für die Installation von %1.<br/> + Die Installation kann fortgesetzt werden, aber einige Funktionen könnten deaktiviert sein.</p> + RemoveUserJob - + Remove live user from target system - Entferne Live-Benutzer aus dem Zielsystem + Entferne Live-Benutzer vom Zielsystem RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Lösche Volumengruppe mit der Bezeichnung %1. - + Remove Volume Group named <strong>%1</strong>. Lösche Volumengruppe mit der Bezeichnung <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Das Installationsprogramm konnte die Volumengruppe mit der Bezeichnung '%1' nicht löschen. @@ -2838,143 +3185,160 @@ Ausgabe: ReplaceWidget - + Form Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Wählen Sie den Installationsort für %1.<br/><font color="red">Warnung: </font>Dies wird alle Daten auf der ausgewählten Partition löschen. - + The selected item does not appear to be a valid partition. Die aktuelle Auswahl scheint keine gültige Partition zu sein. - + %1 cannot be installed on empty space. Please select an existing partition. %1 kann nicht in einem unpartitionierten Bereich installiert werden. Bitte wählen Sie eine existierende Partition aus. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kann nicht auf einer erweiterten Partition installiert werden. Bitte wählen Sie eine primäre oder logische Partition aus. - + %1 cannot be installed on this partition. %1 kann auf dieser Partition nicht installiert werden. - + Data partition (%1) Datenpartition (%1) - + Unknown system partition (%1) Unbekannte Systempartition (%1) - + %1 system partition (%2) %1 Systempartition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Die Partition %1 ist zu klein für %2. Bitte wählen Sie eine Partition mit einer Kapazität von mindestens %3 GiB. - + <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. <strong>%2</strong><br/><br/>Es wurde keine EFI-Systempartition auf diesem System gefunden. Bitte gehen Sie zurück, und nutzen Sie die manuelle Partitionierung, um %1 aufzusetzen. - - - + + + <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. <strong>%3</strong><br/><br/>%1 wird installiert auf %2.<br/><font color="red">Warnung: </font> Alle Daten auf der Partition %2 werden gelöscht. - + The EFI system partition at %1 will be used for starting %2. Die EFI-Systempartition auf %1 wird benutzt, um %2 zu starten. - + EFI system partition: EFI-Systempartition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Dieser Computer erfüllt die minimalen Bedingungen nicht für die Installation von %1.<br/> + Die Installation kan nicht fortgesetzt werden.</p> + + + + <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> + <p>Dieser Computer erfüllt einige empfohlene Bedingungen nicht für die Installation von %1.<br/> + Die Installation kann fortgesetzt werden, aber einige Funktionen könnten deaktiviert sein.</p> + + ResizeFSJob - + Resize Filesystem Job Auftrag zur Änderung der Dateisystemgröße - + Invalid configuration Ungültige Konfiguration - + The file-system resize job has an invalid configuration and will not run. Die Aufgabe zur Änderung der Größe des Dateisystems enthält eine ungültige Konfiguration und wird nicht ausgeführt. - + KPMCore not Available KPMCore ist nicht verfügbar - + Calamares cannot start KPMCore for the file-system resize job. Calamares kann KPMCore zur Änderung der Dateisystemgröße nicht starten. - - - - - + + + + + Resize Failed Größenänderung ist fehlgeschlagen. - + The filesystem %1 could not be found in this system, and cannot be resized. Das Dateisystem %1 konnte auf diesem System weder gefunden noch in der Größe verändert werden. - + The device %1 could not be found in this system, and cannot be resized. Das Gerät %1 konnte auf diesem System weder gefunden noch in der Größe verändert werden. - - + + The filesystem %1 cannot be resized. Die Größe des Dateisystems %1 kann nicht geändert werden. - - + + The device %1 cannot be resized. Das Gerät %1 kann nicht in seiner Größe verändert werden. - + The filesystem %1 must be resized, but cannot. Die Größe des Dateisystems %1 muss geändert werden, dies ist aber nicht möglich. - + The device %1 must be resized, but cannot Das Gerät %1 muss in seiner Größe verändert werden, dies ist aber nicht möglich. @@ -2982,22 +3346,22 @@ Ausgabe: ResizePartitionJob - + Resize partition %1. Ändere die Grösse von Partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Partition <strong>%1</strong> von <strong>%2MiB</strong> auf <strong>%3MiB</strong> vergrößern. - + Resizing %2MiB partition %1 to %3MiB. Ändere die Größe der Partition %1 von %2MiB auf %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Das Installationsprogramm konnte die Grösse von Partition %1 auf Datenträger '%2' nicht ändern. @@ -3005,7 +3369,7 @@ Ausgabe: ResizeVolumeGroupDialog - + Resize Volume Group Größe der Volumengruppe verändern @@ -3013,18 +3377,18 @@ Ausgabe: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Verändere die Größe der Volumengruppe %1 von %2 auf %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Verändere die Größe der Volumengruppe <strong>%1</strong> von <strong>%2</strong> auf <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Das Installationsprogramm konnte die Größe der Volumengruppe '%1' nicht verändern. @@ -3032,53 +3396,25 @@ Ausgabe: ResultsListDialog - + For best results, please ensure that this computer: Für das beste Ergebnis stellen Sie bitte sicher, dass dieser Computer: - + System requirements Systemanforderungen - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Dieser Computer erfüllt nicht die Mindestvoraussetzungen für die Installation von %1.<br/>Die Installation kann nicht fortgesetzt werden. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Dieser Computer erfüllt nicht alle empfohlenen Voraussetzungen für die Installation von %1.<br/>Die Installation kann fortgesetzt werden, aber es werden eventuell nicht alle Funktionen verfügbar sein. - - - - This program will ask you some questions and set up %2 on your computer. - Dieses Programm wird Ihnen einige Fragen stellen, um %2 auf Ihrem Computer zu installieren. - - ScanningDialog - + Scanning storage devices... Scanne Speichermedien... - + Partitioning Partitionierung @@ -3086,29 +3422,29 @@ Ausgabe: SetHostNameJob - + Set hostname %1 Setze Computername auf %1 - + Set hostname <strong>%1</strong>. Setze Computernamen <strong>%1</strong>. - + Setting hostname %1. Setze Computernamen %1. + - Internal Error Interner Fehler - - + + Cannot write hostname to target system Kann den Computernamen nicht auf das Zielsystem schreiben @@ -3116,29 +3452,29 @@ Ausgabe: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Definiere Tastaturmodel zu %1, Layout zu %2-%3 - + Failed to write keyboard configuration for the virtual console. Konnte keine Tastatur-Konfiguration für die virtuelle Konsole schreiben. - - - + + + Failed to write to %1 Konnte nicht auf %1 schreiben - + Failed to write keyboard configuration for X11. Konnte keine Tastatur-Konfiguration für X11 schreiben. - + Failed to write keyboard configuration to existing /etc/default directory. Die Konfiguration der Tastatur konnte nicht in das bereits existierende Verzeichnis /etc/default geschrieben werden. @@ -3146,82 +3482,82 @@ Ausgabe: SetPartFlagsJob - + Set flags on partition %1. Setze Markierungen für Partition %1. - + Set flags on %1MiB %2 partition. Setze Markierungen für %1MiB %2 Partition. - + Set flags on new partition. Setze Markierungen für neue Partition. - + Clear flags on partition <strong>%1</strong>. Markierungen für Partition <strong>%1</strong> entfernen. - + Clear flags on %1MiB <strong>%2</strong> partition. Markierungen für %1MiB <strong>%2</strong> Partition entfernen. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Markiere %1MiB <strong>%2</strong> Partition als <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Lösche Markierungen für %1MiB <strong>%2</strong> Partition. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Setze Markierungen <strong>%3</strong> für %1MiB <strong>%2</strong> Partition. - - - + Clear flags on new partition. Markierungen für neue Partition entfernen. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Partition markieren <strong>%1</strong> als <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Markiere %1MiB <strong>%2</strong> Partition als <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Markiere neue Partition als <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Lösche Markierungen für Partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Lösche Markierungen für %1MiB <strong>%2</strong> Partition. + + + Clearing flags on new partition. Lösche Markierungen für neue Partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setze Markierungen <strong>%2</strong> für Partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Setze Markierungen <strong>%3</strong> für %1MiB <strong>%2</strong> Partition. + + + Setting flags <strong>%1</strong> on new partition. Setze Markierungen <strong>%1</strong> für neue Partition. - + The installer failed to set flags on partition %1. Das Installationsprogramm konnte keine Markierungen für Partition %1 setzen. @@ -3229,42 +3565,42 @@ Ausgabe: SetPasswordJob - + Set password for user %1 Setze Passwort für Benutzer %1 - + Setting password for user %1. Setze Passwort für Benutzer %1. - + Bad destination system path. Ungültiger System-Zielpfad. - + rootMountPoint is %1 root-Einhängepunkt ist %1 - + Cannot disable root account. Das Root-Konto kann nicht deaktiviert werden. - + passwd terminated with error code %1. Passwd beendet mit Fehlercode %1. - + Cannot set password for user %1. Passwort für Benutzer %1 kann nicht gesetzt werden. - + usermod terminated with error code %1. usermod wurde mit Fehlercode %1 beendet. @@ -3272,45 +3608,82 @@ Ausgabe: SetTimezoneJob - + Set timezone to %1/%2 Setze Zeitzone auf %1/%2 - + Cannot access selected timezone path. Zugriff auf den Pfad der gewählten Zeitzone fehlgeschlagen. - + Bad path: %1 Ungültiger Pfad: %1 - + Cannot set timezone. Zeitzone kann nicht gesetzt werden. - + Link creation failed, target: %1; link name: %2 Erstellen der Verknüpfung fehlgeschlagen, Ziel: %1; Verknüpfung: %2 - + Cannot set timezone, Kann die Zeitzone nicht setzen, - + Cannot open /etc/timezone for writing Kein Schreibzugriff auf /etc/timezone + + SetupGroupsJob + + + Preparing groups. + Bereite Gruppen vor. + + + + + Could not create groups in target system + Auf dem Zielsystem konnten keine Gruppen erstellt werden. + + + + These groups are missing in the target system: %1 + Folgende Gruppen fehlen auf dem Zielsystem: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Konfiguriere <pre>sudo</pre> Benutzer. + + + + Cannot chmod sudoers file. + Kann chmod nicht auf sudoers-Datei anwenden. + + + + Cannot create sudoers file for writing. + Kann sudoers-Datei nicht zum Schreiben erstellen. + + ShellProcessJob - + Shell Processes Job Job für Shell-Prozesse @@ -3318,188 +3691,215 @@ Ausgabe: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Dies ist eine Übersicht der Aktionen, die nach dem Starten des Installationsprozesses durchgeführt werden. + + &Yes + &Ja - - - SummaryViewStep - - Summary - Zusammenfassung + + &No + &Nein + + + + &Cancel + &Abbrechen + + + + &Close + &Schließen TrackingInstallJob - + Installation feedback Rückmeldungen zur Installation - + Sending installation feedback. Senden der Rückmeldungen zur Installation. - + Internal error in install-tracking. Interner Fehler bei der Überwachung der Installation. - + HTTP request timed out. Zeitüberschreitung bei HTTP-Anfrage - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE Benutzer-Feedback + + + + Configuring KDE user feedback. + Konfiguriere KDE Benutzer-Feedback. + + + + + Error in KDE user feedback configuration. + Fehler bei der Konfiguration des KDE Benutzer-Feedbacks. + + + + Could not configure KDE user feedback correctly, script error %1. + Konnte KDE Benutzer-Feedback nicht korrekt konfigurieren, Skriptfehler %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Konnte KDE Benutzer-Feedback nicht korrekt konfigurieren, Calamares-Fehler %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback - Rückinformationen zum Computer + Feedback zum Computer - + Configuring machine feedback. - Konfiguriere Rückmeldungen zum Computer. + Konfiguriere Feedback zum Computer. - - + + Error in machine feedback configuration. - Fehler bei der Konfiguration der Rückmeldungen zum Computer + Fehler bei der Konfiguration des Feedbacks zum Computer. - + Could not configure machine feedback correctly, script error %1. - Rückmeldungen zum Computer konnten nicht korrekt konfiguriert werden, Skriptfehler %1. + Feedback zum Computer konnte nicht korrekt konfiguriert werden, Skriptfehler %1. - + Could not configure machine feedback correctly, Calamares error %1. - Rückmeldungen zum Computer konnten nicht korrekt konfiguriert werden, Calamares-Fehler %1. + Feedback zum Computer konnte nicht korrekt konfiguriert werden, Calamares-Fehler %1. TrackingPage - + Form Formular - + Placeholder Platzhalter - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Ist diese Option aktiviert, werden <span style=" font-weight:600;">keinerlei Informationen</span> über Ihre Installation gesendet.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Hier klicken, um <span style=" font-weight:600;">keinerlei Informationen </span> über Ihre Installation zu senden.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klicken sie hier für weitere Informationen über Benutzer-Rückmeldungen</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Rückinformationen über die Installation helfen %1 festzustellen, wieviele Menschen es benutzen und auf welcher Hardware sie %1 installieren. Mit den beiden letzten Optionen gestatten Sie die Erhebung kontinuierlicher Informationen über Ihre bevorzugte Software. Um zu prüfen, welche Informationen gesendet werden, klicken Sie bitte auf das Hilfesymbol neben dem jeweiligen Abschnitt. + + 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. + Tracking hilft %1 festzustellen, wie oft es installiert wurde, welche Hardware und welche Anwendungen benutzt werden. Um zu sehen, welche Informationen gesendet werden, klicken Sie auf das Hilfesymbol daneben. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Wenn Sie diese Option auswählen, senden Sie Informationen zu Ihrer Installation und Hardware. Diese Informationen werden <b>nur einmalig</b> nach Abschluss der Installation gesendet. + + 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. + Wenn Sie dies auswählen, werden Informationen über Ihre Installation und Hardware gesendet. Diese Informationen werden nur <b>einmal</b> nach der Installation gesendet. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Wenn Sie diese Option auswählen, senden Sie <b>regelmäßig</b> Informationen zu Installation, Hardware und Anwendungen an %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Wenn Sie dies auswählen, werden gelegentlich Informationen über Installation, Hardware und Anwendungen dieses <b>Computers</b> an %1 gesendet. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Wenn Sie diese Option auswählen, senden Sie <b>regelmäßig</b> Informationen zu Installation, Hardware, Anwendungen und Nutzungsmuster an %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Wenn Sie dies auswählen, werden regelmäßig Informationen über Installation, Hardware, Anwendungen und Benutzungsmuster dieses <b>Benutzers</b> an %1 gesendet. TrackingViewStep - + Feedback Rückmeldung + + UmountJob + + + Unmount file systems. + Dateisysteme aushängen. + + + + No target system available. + Kein Zielsystem verfügbar. + + + + No rootMountPoint is set. + Kein rootMountPoint gesetzt. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Falls dieser Computer von mehr als einer Person benutzt werden soll, können weitere Benutzerkonten nach der Installation eingerichtet werden.</small> + + + UsersQmlViewStep - - Your username is too long. - Ihr Nutzername ist zu lang. - - - - Your username must start with a lowercase letter or underscore. - Ihr Benutzername muss mit einem Kleinbuchstaben oder Unterstrich beginnen. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Es sind nur Kleinbuchstaben, Zahlen, Unterstrich und Bindestrich erlaubt. - - - - Only letters, numbers, underscore and hyphen are allowed. - Es sind nur Buchstaben, Zahlen, Unter- und Bindestriche erlaubt. - - - - Your hostname is too short. - Ihr Computername ist zu kurz. - - - - Your hostname is too long. - Ihr Computername ist zu lang. - - - - Your passwords do not match! - Ihre Passwörter stimmen nicht überein! + + Users + Benutzer UsersViewStep - + Users Benutzer @@ -3507,65 +3907,67 @@ Ausgabe: VariantModel - + Key + Column header for key/value Schlüssel - + Value + Column header for key/value Wert VolumeGroupBaseDialog - + Create Volume Group Erstelle Volumengruppe - + List of Physical Volumes Liste der physikalischen Volumen - + Volume Group Name: Name der Volumengruppe: - + Volume Group Type: Typ der Volumengruppe: - + Physical Extent Size: Blockgröße der physikalischen Volumen: - + MiB MiB - + Total Size: Gesamtkapazität: - + Used Size: Benutzte Kapazität: - + Total Sectors: Sektoren insgesamt: - + Quantity of LVs: Menge der LVs: @@ -3573,106 +3975,106 @@ Ausgabe: WelcomePage - + Form Form - - + + Select application and system language Anwendungs- und Systemsprache auswählen + &About + &Über + + + Open donations website Öffne Spenden-Website - + &Donate Spen&den - + Open help and support website Webseite für Hilfe und Support aufrufen + &Support + &Unterstützung + + + Open issues and bug-tracking website Webseite für das Melden von Fehlern aufrufen - Open release notes website - Webseite für Versionshinweise aufrufen - - - - &Release notes - &Veröffentlichungshinweise - - - &Known issues &Bekannte Probleme - - &Support - &Unterstützung + + Open release notes website + Webseite für Versionshinweise aufrufen - - &About - &Über + + &Release notes + &Veröffentlichungshinweise - - <h1>Welcome to the %1 installer.</h1> - <h1>Willkommen im %1 Installationsprogramm.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Willkommen beim Calamares-Installationsprogramm für %1. - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Willkommen bei Calamares, dem Installationsprogramm für %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Willkommen zur Installation von %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Willkommen beim Calamares-Installationsprogramm für %1. + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Willkommen im %1 Installationsprogramm.</h1> + + + + %1 support + Unterstützung für %1 + + + About %1 setup Über das Installationsprogramm %1 - + About %1 installer Über das %1 Installationsprogramm - + <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. - - - - - %1 support - Unterstützung für %1 + <h1>%1</h1><br/><strong>%2<br/>für %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/>Dank an <a href="https://calamares.io/team/">das Calamares Team</a> und das <a href="https://www.transifex.com/calamares/calamares/">Calamares Übersetzerteam</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> wird in der Entwicklung unterstützt von <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Willkommen @@ -3680,84 +4082,217 @@ Ausgabe: WelcomeViewStep - + Welcome Willkommen + + ZfsJob + + + Create ZFS pools and datasets + ZFS Pools und Datensets erstellen + + + + Failed to create zpool on + Zpool konnte nicht erstellt werden auf + + + + Configuration Error + Konfigurationsfehler + + + + No partitions are available for ZFS. + Keine Partitionen für ZFS verfügbar. + + + + Internal data missing + Interne Daten fehlen + + + + + Failed to create zpool + Zpool konnte nicht erstellt werden + + + + Failed to create dataset + Datenset konnte nicht erstellt werden + + + + The output was: + Die Ausgabe war: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + für %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/> + Dank an <a href='https://calamares.io/team/'>das Calamares Team</a> + und das <a href='https://www.transifex.com/calamares/calamares/'>Calamares + Übersetzerteam</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + wird bei der Entwicklung unterstützt von <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. - + Back - + Zurück + + + + calamares-sidebar + + + Show debug information + Informationen zur Fehlersuche anzeigen + + + + finishedq + + + Installation Completed + Installation abgeschlossen + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 wurde auf Ihrem Computer installiert.<br/> + Sie können nun per Neustart das installierte System starten oder weiterhin die Live-Umgebung benutzen. + + + + Close Installer + Installationsprogramm schließen + + + + Restart System + System neustarten + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Ein komplettes Protokoll der Installation ist als installation.log im Home-Verzeichnis des Live-Benutzers verfügbar.<br/> + Dieses Protokoll liegt als /var/log/installation.log im installierten System vor.</p> + + + + finishedq@mobile + + + Installation Completed + Installation abgeschlossen + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 wurde auf Ihrem Computer installiert.<br/> + Sie können Ihr Gerät nun neu starten. + + + + Close + Schließen + + + + Restart + Neustart + + + + i18n + + + <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>. + <h1>Sprachen</h1> </br> + Das Regionalschema betrifft die Sprache und die Tastaturbelegung für einige Elemente der Kommandozeile. Derzeit eingestellt ist <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Regionalschemata</h1> </br> + Die Regionalschemata betreffen das Format der Zahlen und Daten. Derzeit eingestellt ist <strong>%1</strong>. + + + + Back + Zurück keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Wählen Sie ein Design, um die Tastatur-Vorschau zu aktivieren. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Tastaturmodell: - - Refresh - - - - - + Layouts - + Tastaturbelegungen - - - Keyboard Layout - + + Type here to test your keyboard + Tippen Sie hier, um die Tastaturbelegung zu testen. - - Models - - - - + Variants - + Varianten + + + localeq - - Test your keyboard - + + Change + Ändern notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3765,34 +4300,261 @@ Ausgabe: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice ist eine mächtige und freie Office-Lösung, verwendet von Millionen von Menschen rund um den Globus. Sie enthäIt verschiedene Anwendungen, die LibreOffice zur vielseitigsten Open-Source-Lösung für Office-Anwendungen auf dem Markt machen.<br/> + Standard-Option. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Wenn Sie keine Office-Suite installieren wollen, wählen Sie einfach Keine Office Suite. Sie können jederzeit eine oder mehrere zu Ihrem installierten System hinzufügen wenn nötig. + + + + No Office Suite + Keine Office-Suite + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Erstellen Sie eine minimale Desktop-Installation, entfernen Sie alle zusätzlichen Apps und entscheiden Sie später, welche Anwendungen Sie hinzufügen möchten. Zum Beispiel werden weder eine Office-Suite noch Mediaplayer noch Bildbetrachter oder Druckerunterstützung installiert. Sie bekommen lediglich einen schlanken Desktop mit Dateimanager, Paketmanager, Texteditor und Webbrowser. + + + + Minimal Install + Minimal-Installation + + + + Please select an option for your install, or use the default: LibreOffice included. + Bitte wählen Sie eine Option zur Installation oder nutzen Sie die Standard-Auswahl: LibreOffice. + + + + release_notes + + + <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> + <h3>%1</h3> +<p>Dies ist eine Beispiel-QML-Datei, die Optionen in RichText mit Flickable-Inhalt zeigt.</p> + +<p>QML mit RichText kann HTML-Tags verwenden, Flickable-Inhalt ist nützlich für Touchscreens.</p> + +<p><b>Dies ist fetter Text.</b></p> +<p><i>Das ist kursiver Text.</i></p> +<p><u>Das ist unterstrichener Text.</u></p> +<p><center>Dieser Text ist mittig ausgerichtet.</center></p> +<p><s>Das ist durchgestrichen.</s></p> + +<p>Code Beispiel: +<code>ls -l /home</code></p> + +<p><b>Listen:</b></p> +<ul> +<li>Intel CPU Systeme</li> +<li>AMD CPU Systeme</li> +</ul> + +<p>Die vertikale Bildlaufleiste ist einstellbar, die aktuelle Breite ist auf 10 eingestellt.</p> + + + + Back + Zurück + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Wählen Sie Benutzername und Passwort, um sich als Administrator anzumelden. + + + + What is your name? + Wie ist Ihr Vor- und Nachname? + + + + Your Full Name + Ihr vollständiger Name + + + + What name do you want to use to log in? + Welchen Namen möchten Sie zum Anmelden benutzen? + + + + Login Name + Anmeldename + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Falls mehrere Personen diesen Computer benutzen, können Sie nach der Installation weitere Konten hinzufügen. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Es sind nur Kleinbuchstaben, Zahlen, Unterstrich und Bindestrich erlaubt. + + + + root is not allowed as username. + root ist als Benutzername nicht erlaubt. + + + + What is the name of this computer? + Wie ist der Name dieses Computers? + + + + Computer Name + Computername + + + + This name will be used if you make the computer visible to others on a network. + Dieser Name wird benutzt, wenn Sie den Computer im Netzwerk für andere sichtbar machen. + + + + localhost is not allowed as hostname. + localhost ist als Computername nicht erlaubt. + + + + Choose a password to keep your account safe. + Wählen Sie ein Passwort, um Ihr Konto zu sichern. + + + + Password + Passwort + + + + Repeat Password + Passwort wiederholen + + + + 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. + Geben Sie das Passwort zweimal ein, damit es auf Tippfehler überprüft werden kann. Ein gutes Passwort sollte eine Mischung aus Buchstaben, Zahlen sowie Sonderzeichen enthalten, mindestens acht Zeichen lang sein und regelmäßig geändert werden. + + + + Validate passwords quality + Passwort-Qualität überprüfen + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Wenn dieses Kontrollkästchen aktiviert ist, wird die Passwortstärke überprüft und verhindert, dass Sie ein schwaches Passwort verwenden. + + + + Log in automatically without asking for the password + Automatisch anmelden ohne Passwortabfrage + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Es sind nur Buchstaben, Zahlen, Unterstrich und Bindestrich erlaubt, minimal zwei Zeichen. + + + + Reuse user password as root password + Benutzerpasswort als Root-Passwort benutzen + + + + Use the same password for the administrator account. + Nutze das gleiche Passwort auch für das Administratorkonto. + + + + Choose a root password to keep your account safe. + Wählen Sie ein Root-Passwort, um Ihr Konto zu schützen. + + + + Root Password + Root-Passwort + + + + Repeat Root Password + Root-Passwort wiederholen + + + + Enter the same password twice, so that it can be checked for typing errors. + Geben Sie das Passwort zweimal ein, damit es auf Tippfehler überprüft werden kann. + + + + welcomeq + + + <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> + <h3>Willkommen zum %1 <quote>%2</quote> Installationsprogramm</h3><p>Dieses Programm wird Ihnen einige Fragen stellen und %1 auf Ihrem Computer einrichten.</p> + + + About Über - + Support Unterstützung - + Known issues Bekannte Probleme - + Release notes Veröffentlichungshinweise - + Donate Spenden diff --git a/lang/calamares_el.ts b/lang/calamares_el.ts index 1487aacef..aa1988220 100644 --- a/lang/calamares_el.ts +++ b/lang/calamares_el.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. Το <strong> περιβάλλον εκκίνησης <strong> αυτού του συστήματος.<br><br>Παλαιότερα συστήματα x86 υποστηρίζουν μόνο <strong>BIOS</strong>.<br> Τα σύγχρονα συστήματα συνήθως χρησιμοποιούν <strong>EFI</strong>, αλλά ίσως επίσης να φαίνονται ως BIOS εάν εκκινήθηκαν σε λειτουργία συμβατότητας. - + 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. Αυτό το σύστημα εκκινήθηκε με ένα <strong>EFI</strong> περιβάλλον εκκίνησης.<br><br>Για να ρυθμιστεί η εκκίνηση από ένα περιβάλλον EFI, αυτός ο εγκαταστάτης πρέπει να αναπτυχθεί ένα πρόγραμμα φορτωτή εκκίνησης, όπως <strong>GRUB</strong> ή <strong>systemd-boot</strong> σε ένα <strong>EFI Σύστημα Διαμερισμού</strong>. Αυτό είναι αυτόματο, εκτός εάν επιλέξεις χειροκίνητο διαμερισμό, στην οποία περίπτωση οφείλεις να το επιλέξεις ή να το δημιουργήσεις από μόνος σου. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record του %1 - + Boot Partition Κατάτμηση εκκίνησης - + System Partition Κατάτμηση συστήματος - + Do not install a boot loader Να μην εγκατασταθεί το πρόγραμμα εκκίνησης - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Κενή Σελίδα @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Τύπος - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Αρθρώματα - + Type: Τύπος: - - + + none κανένα - + Interface: Διεπαφή: - - Tools - Εργαλεία + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Πληροφορίες αποσφαλμάτωσης @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Εγκατάσταση @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Ολοκληρώθηκε @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Εκτελείται η εντολή %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Εκτελείται η λειτουργία %1. - + Bad working directory path Λανθασμένη διαδρομή καταλόγου εργασίας - + Working directory %1 for python job %2 is not readable. Ο ενεργός κατάλογος %1 για την εργασία python %2 δεν είναι δυνατόν να διαβαστεί. - + Bad main script file Λανθασμένο κύριο αρχείο δέσμης ενεργειών - + Main script file %1 for python job %2 is not readable. Η κύρια δέσμη ενεργειών %1 για την εργασία python %2 δεν είναι δυνατόν να διαβαστεί. - + Boost.Python error in job "%1". Σφάλμα Boost.Python στην εργασία "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Προηγούμενο - - - - &Next - &Επόμενο - - - - &Cancel - &Ακύρωση - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Ακύρωση της εγκατάστασης χωρίς αλλαγές στο σύστημα. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Η εγκατάσταση απέτυχε - + + Error + Σφάλμα + + + + &Yes + &Ναι + + + + &No + &Όχι + + + + &Close + &Κλείσιμο + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Η αρχικοποίηση του Calamares απέτυχε - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + Συνέχεια με την εγκατάσταση; + + + Continue with installation? - + 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> - + + 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> + Το πρόγραμμα εγκατάστασης %1 θα κάνει αλλαγές στον δίσκο για να εγκαταστήσετε το %2.<br/><strong>Δεν θα είστε σε θέση να αναιρέσετε τις αλλαγές.</strong> + + + &Set up now - + + &Install now + &Εγκατάσταση τώρα + + + + Go &back + Μετάβαση &πίσω + + + &Set up - + &Install &Εγκατάσταση - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Η εγκτάσταση ολοκληρώθηκε. Κλείστε το πρόγραμμα εγκατάστασης. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Ακύρωση της εγκατάστασης χωρίς αλλαγές στο σύστημα. + + + + &Next + &Επόμενο + + + + &Back + &Προηγούμενο + + + + &Done + &Ολοκληρώθηκε + + + + &Cancel + &Ακύρωση + + + Cancel setup? - + Cancel installation? Ακύρωση της εγκατάστασης; - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Θέλετε πραγματικά να ακυρώσετε τη διαδικασία εγκατάστασης; Το πρόγραμμα εγκατάστασης θα τερματιστεί και όλες οι αλλαγές θα χαθούν. - - - - &Yes - &Ναι - - - - - &No - &Όχι - - - - &Close - &Κλείσιμο - - - - Continue with setup? - Συνέχεια με την εγκατάσταση; - - - - 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> - Το πρόγραμμα εγκατάστασης %1 θα κάνει αλλαγές στον δίσκο για να εγκαταστήσετε το %2.<br/><strong>Δεν θα είστε σε θέση να αναιρέσετε τις αλλαγές.</strong> - - - - &Install now - &Εγκατάσταση τώρα - - - - Go &back - Μετάβαση &πίσω - - - - &Done - &Ολοκληρώθηκε - - - - The installation is complete. Close the installer. - Η εγκτάσταση ολοκληρώθηκε. Κλείστε το πρόγραμμα εγκατάστασης. - - - - Error - Σφάλμα - - - - Installation Failed - Η εγκατάσταση απέτυχε - CalamaresPython::Helper - + Unknown exception type Άγνωστος τύπος εξαίρεσης - + unparseable Python error Μη αναγνώσιμο σφάλμα Python - + unparseable Python traceback Μη αναγνώσιμη ανίχνευση Python - + Unfetchable Python error. Μη ανακτήσιµο σφάλμα Python. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Προηγούμενο - - - - &Next - &Επόμενο - - - - &Cancel - &Ακύρωση - - - + %1 Setup Program - + %1 Installer Εφαρμογή εγκατάστασης του %1 + + + ChangeFilesystemLabelJob - - Show debug information - Εμφάνιση πληροφοριών απασφαλμάτωσης + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Η εγκατάσταση απέτυχε να αναβαθμίσει τον πίνακα κατατμήσεων στον δίσκο '%1'. CheckerContainer - + Gathering system information... Συλλογή πληροφοριών συστήματος... @@ -498,157 +522,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Τύπος - - After: - Μετά: - - - - Boot loader location: - Τοποθεσία προγράμματος εκκίνησης: - - - + Select storage de&vice: Επιλέξτε συσκευή απ&οθήκευσης: - - - - + + + + Current: Τρέχον: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Μετά: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Χειροκίνητη τμηματοποίηση</strong><br/>Μπορείτε να δημιουργήσετε κατατμήσεις ή να αλλάξετε το μέγεθός τους μόνοι σας. + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Επιλέξτε ένα διαμέρισμα για σμίκρυνση, και μετά σύρετε το κάτω τμήμα της μπάρας για αλλαγή του μεγέθους</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Τοποθεσία προγράμματος εκκίνησης: + + + <strong>Select a partition to install on</strong> <strong>Επιλέξτε διαμέρισμα για την εγκατάσταση</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Πουθενά στο σύστημα δεν μπορεί να ανιχθευθεί μία κατάτμηση EFI. Παρακαλώ επιστρέψτε πίσω και χρησιμοποιήστε τη χειροκίνητη τμηματοποίηση για την εγκατάσταση του %1. - + The EFI system partition at %1 will be used for starting %2. Η κατάτμηση συστήματος EFI στο %1 θα χρησιμοποιηθεί για την εκκίνηση του %2. - + EFI system partition: Κατάτμηση συστήματος EFI: - + 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. Η συσκευή αποθήκευσης δεν φαίνεται να διαθέτει κάποιο λειτουργικό σύστημα. Τί θα ήθελες να κάνεις;<br/>Θα έχεις την δυνατότητα να επιβεβαιώσεις και αναθεωρήσεις τις αλλαγές πριν γίνει οποιαδήποτε αλλαγή στην συσκευή αποθήκευσης. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Διαγραφή του δίσκου</strong><br/>Αυτό θα <font color="red">διαγράψει</font> όλα τα αρχεία στην επιλεγμένη συσκευή αποθήκευσης. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Εγκατάσταση σε επαλληλία</strong><br/>Η εγκατάσταση θα συρρικνώσει μία κατάτμηση για να κάνει χώρο για το %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Αντικατάσταση μίας κατάτμησης</strong><br/>Αντικαθιστά μία κατάτμηση με το %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Καθαρίστηκαν όλες οι προσαρτήσεις για %1 @@ -656,22 +720,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. Καθάρισε όλες τις προσωρινές προσαρτήσεις. - + Clearing all temporary mounts. Καθάρισμα όλων των προσωρινών προσαρτήσεων. - - Cannot get list of temporary mounts. - Η λίστα των προσωρινών προσαρτήσεων δεν μπορεί να ληφθεί. - - - + Cleared all temporary mounts. Καθαρίστηκαν όλες οι προσωρινές προσαρτήσεις. @@ -679,18 +738,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -698,100 +757,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ο υπολογιστής δεν ικανοποιεί τις ελάχιστες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση δεν μπορεί να συνεχιστεί. <a href="#details">Λεπτομέριες...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Αυτός ο υπολογιστής δεν ικανοποιεί μερικές από τις συνιστώμενες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση μπορεί να συνεχιστεί, αλλά ορισμένες λειτουργίες μπορεί να απενεργοποιηθούν. - - - - This program will ask you some questions and set up %2 on your computer. - Το πρόγραμμα θα σας κάνει μερικές ερωτήσεις και θα ρυθμίσει το %2 στον υπολογιστή σας. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Καλώς ήλθατε στην εγκατάσταση του %1.</h1> - - - + Set keyboard model to %1.<br/> Ορισμός του μοντέλου πληκτρολογίου σε %1.<br/> - + Set keyboard layout to %1/%2. Ορισμός της διάταξης πληκτρολογίου σε %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. Η τοπική γλώσσα του συστήματος έχει οριστεί σε %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - Ορισμός της ζώνης ώρας σε %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Επιλογή πακέτου + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Ο υπολογιστής δεν ικανοποιεί τις ελάχιστες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση δεν μπορεί να συνεχιστεί. <a href="#details">Λεπτομέριες...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Αυτός ο υπολογιστής δεν ικανοποιεί μερικές από τις συνιστώμενες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση μπορεί να συνεχιστεί, αλλά ορισμένες λειτουργίες μπορεί να απενεργοποιηθούν. + + + + This program will ask you some questions and set up %2 on your computer. + Το πρόγραμμα θα σας κάνει μερικές ερωτήσεις και θα ρυθμίσει το %2 στον υπολογιστή σας. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Το όνομα χρήστη είναι πολύ μακρύ. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Το όνομα υπολογιστή είναι πολύ σύντομο. + + + + Your hostname is too long. + Το όνομα υπολογιστή είναι πολύ μακρύ. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Οι κωδικοί πρόσβασης δεν ταιριάζουν! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Η εγκατάσταση απέτυχε + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Σύνοψη + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + Αυτή είναι μια επισκόπηση του τι θα συμβεί μόλις ξεκινήσετε τη διαδικασία εγκατάστασης. + ContextualProcessJob - + Contextual Processes Job @@ -799,100 +993,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition Δημιουργία κατάτμησης - - MiB - MiB - - - - Partition &Type: - Τύ&πος κατάτμησης: - - - - &Primary - Π&ρωτεύουσα - - - - E&xtended - Ε&κτεταμένη - - - - Fi&le System: - Σύστημα Αρχ&είων: - - - - LVM LV name - - - - - Flags: - Σημαίες: - - - - &Mount Point: - Σ&ημείο προσάρτησης: - - - + Si&ze: &Μέγεθος: - + + MiB + MiB + + + + Partition &Type: + Τύ&πος κατάτμησης: + + + + Primar&y + + + + + E&xtended + Ε&κτεταμένη + + + + Fi&le System: + Σύστημα Αρχ&είων: + + + + LVM LV name + + + + + &Mount Point: + Σ&ημείο προσάρτησης: + + + + Flags: + Σημαίες: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical Λογική - + Primary Πρωτεύουσα - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Δημιουργείται νέα %1 κατάτμηση στο %2. - + The installer failed to create partition on disk '%1'. Η εγκατάσταση απέτυχε να δημιουργήσει μία κατάτμηση στον δίσκο '%1'. @@ -900,27 +1130,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Δημιούργησε πίνακα κατατμήσεων - + Creating a new partition table will delete all existing data on the disk. Με τη δημιουργία ενός νέου πίνακα κατατμήσεων θα διαγραφούν όλα τα δεδομένα στον δίσκο. - + What kind of partition table do you want to create? Τι είδους πίνακα κατατμήσεων θέλετε να δημιουργήσετε; - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -928,22 +1158,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. Δημιουργία νέου πίνακα κατατμήσεων %1 στο %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Δημιουργία νέου πίνακα κατατμήσεων <strong>%1</strong> στο <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Δημιουργείται νέα %1 κατάτμηση στο %2. - + The installer failed to create a partition table on %1. Η εγκατάσταση απέτυχε να δημιουργήσει ένα πίνακα κατατμήσεων στο %1. @@ -951,45 +1181,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Δημιουργία χρήστη %1 - + Create user <strong>%1</strong>. Δημιουργία χρήστη <strong>%1</strong>. - - Creating user %1. - Δημιουργείται ο χρήστης %1. + + Preserving home directory + - - Sudoers dir is not writable. - Ο κατάλογος sudoers δεν είναι εγγράψιμος. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Δεν είναι δυνατή η δημιουργία του αρχείου sudoers για εγγραφή. + + Configuring user %1 + - - Cannot chmod sudoers file. - Δεν είναι δυνατό το chmod στο αρχείο sudoers. - - - - Cannot open groups file for reading. - Δεν είναι δυνατό το άνοιγμα του αρχείου ομάδων για ανάγνωση. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1223,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1020,18 +1246,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1039,22 +1265,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. Διαγραφή της κατάτμησης %1. - + Delete partition <strong>%1</strong>. Διαγραφή της κατάτμησης <strong>%1</strong>. - + Deleting partition %1. Διαγράφεται η κατάτμηση %1. - + The installer failed to delete partition %1. Απέτυχε η διαγραφή της κατάτμησης %1. @@ -1062,46 +1288,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. Αυτή η συσκευή έχει ένα <strong>%1</strong> πίνακα διαμερισμάτων. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Αυτός είναι ο προτεινόμενος τύπος πίνακα διαμερισμάτων για σύγχρονα συστήματα τα οποία εκκινούν από ένα <strong>EFI</strong> περιβάλλον εκκίνησης. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1110,17 +1336,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1128,7 +1354,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1136,123 +1362,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition Επεξεργασία υπάρχουσας κατάτμησης - - Content: - Περιεχόμενο: + + Con&tent: + - + &Keep &Διατήρηση - + Format Μορφοποίηση - + Warning: Formatting the partition will erase all existing data. Προειδοποίηση: Η μορφοποίηση της κατάτμησης θα διαγράψει όλα τα δεδομένα. - + &Mount Point: Σ&ημείο προσάρτησης: - + Si&ze: &Μέγεθος: - + MiB MiB - + Fi&le System: &Σύστημα αρχείων: - + Flags: Σημαίες: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form Τύπος - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Λέξη Κλειδί - + Confirm passphrase Επιβεβαίωση λέξης κλειδί - + + Please enter the same passphrase in both boxes. Παρακαλώ εισάγετε την ίδια λέξη κλειδί και στα δύο κουτιά. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Ορισμός πληροφοριών κατάτμησης - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Εγκατάσταση %1 στο <strong>νέο</strong> %2 διαμέρισμα συστήματος. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. Εγκατάσταση φορτωτή εκκίνησης στο <strong>%1</strong>. - + Setting up mount points. @@ -1260,93 +1530,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Τύπος - + &Restart now Ε&πανεκκίνηση τώρα - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Η εγκατάσταση ολοκληρώθηκε.</h1><br/>Το %1 εγκαταστήθηκε στον υπολογιστή.<br/>Τώρα, μπορείτε να επανεκκινήσετε τον υπολογιστή σας ή να συνεχίσετε να δοκιμάζετε το %2. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Τέλος + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + + Finish + Τέλος FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1354,72 +1612,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source είναι συνδεδεμένος σε πηγή ρεύματος - + The system is not plugged in to a power source. Το σύστημα δεν είναι συνδεδεμένο σε πηγή ρεύματος. - + is connected to the Internet είναι συνδεδεμένος στο διαδίκτυο - + The system is not connected to the Internet. Το σύστημα δεν είναι συνδεδεμένο στο διαδίκτυο. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Το πρόγραμμα εγκατάστασης δεν εκτελείται με δικαιώματα διαχειριστή. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Η οθόνη είναι πολύ μικρή για να απεικονίσει το πρόγραμμα εγκατάστασης @@ -1427,7 +1685,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1693,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1719,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1727,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1477,17 +1735,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Το Konsole δεν είναι εγκατεστημένο - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> Εκτελείται το σενάριο: &nbsp;<code>%1</code> @@ -1495,28 +1753,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Σενάριο - - KeyboardPage - - - Set keyboard model to %1.<br/> - Ορισμός του μοντέλου πληκτρολογίου σε %1.<br/> - - - - Set keyboard layout to %1/%2. - Ορισμός της διάταξης πληκτρολογίου σε %1/%2. - - KeyboardQmlViewStep - + Keyboard Πληκτρολόγιο @@ -1524,7 +1769,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Πληκτρολόγιο @@ -1532,65 +1777,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting Τοπική ρύθμιση συστήματος - + 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>. Η τοπική ρύθμιση του συστήματος επηρεάζει τη γλώσσα και το σύνολο χαρακτήρων για ορισμένα στοιχεία διεπαφής χρήστη της γραμμής εντολών.<br/>Η τρέχουσα ρύθμιση είναι <strong>%1</strong>. - + &Cancel &Ακύρωση - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Τύπος - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Δέχομαι τους παραπάνω όρους και προϋποθέσεις. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1866,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License Άδεια @@ -1606,109 +1874,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>οδηγός %1</strong><br/>από %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 οδηγός κάρτας γραφικών</strong><br/><font color="Grey">από %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 πρόσθετο περιηγητή</strong><br/><font color="Grey">από %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>κωδικοποιητής %1</strong><br/><font color="Grey">από %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>πακέτο %1</strong><br/><font color="Grey">από %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">από %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Η τοπική γλώσσα του συστήματος έχει οριστεί σε %1. - - - - The numbers and dates locale will be set to %1. - - - - + Region: Περιοχή: - + Zone: Ζώνη: - - + + &Change... &Αλλαγή... - - - Set timezone to %1/%2.<br/> - Ορισμός της ζώνης ώρας σε %1/%2.<br/> - LocaleQmlViewStep - + Location Τοποθεσία + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Τοποθεσία @@ -1716,35 +1977,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2013,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Επιλογή πακέτου - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2144,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1877,17 +2152,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2170,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2156,40 +2488,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Τύπος - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2537,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name Όνομα - + Description Περιγραφή @@ -2210,17 +2550,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Τύπος - + Keyboard Model: Μοντέλο πληκτρολογίου: - + Type here to test your keyboard Πληκτρολογείστε εδώ για να δοκιμάσετε το πληκτρολόγιο σας @@ -2228,96 +2568,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Τύπος - + What is your name? Ποιο είναι το όνομά σας; - - What name do you want to use to log in? - Ποιο όνομα θα θέλατε να χρησιμοποιείτε για σύνδεση; - - - - Choose a password to keep your account safe. - Επιλέξτε ένα κωδικό για να διατηρήσετε το λογαριασμό σας ασφαλή. - - - - - <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> - <small>Εισάγετε τον ίδιο κωδικό δύο φορές, ώστε να γίνει έλεγχος για τυπογραφικά σφάλματα. Ένας καλός κωδικός περιέχει γράμματα, αριθμούς και σημεία στίξης, έχει μήκος τουλάχιστον οκτώ χαρακτήρες, και θα πρέπει να τον αλλάζετε σε τακτά χρονικά διαστήματα.</small> - - - - What is the name of this computer? - Ποιο είναι το όνομά του υπολογιστή; - - - + Your Full Name - + + What name do you want to use to log in? + Ποιο όνομα θα θέλατε να χρησιμοποιείτε για σύνδεση; + + + login - + + What is the name of this computer? + Ποιο είναι το όνομά του υπολογιστή; + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Αυτό το όνομα θα χρησιμοποιηθεί αν κάνετε τον υπολογιστή ορατό στους άλλους σε ένα δίκτυο.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Επιλέξτε ένα κωδικό για να διατηρήσετε το λογαριασμό σας ασφαλή. + + + + + <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> + <small>Εισάγετε τον ίδιο κωδικό δύο φορές, ώστε να γίνει έλεγχος για τυπογραφικά σφάλματα. Ένας καλός κωδικός περιέχει γράμματα, αριθμούς και σημεία στίξης, έχει μήκος τουλάχιστον οκτώ χαρακτήρες, και θα πρέπει να τον αλλάζετε σε τακτά χρονικά διαστήματα.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Σύνδεση αυτόματα χωρίς να ζητείται κωδικός πρόσβασης. - + Use the same password for the administrator account. Χρησιμοποιήστε τον ίδιο κωδικό πρόσβασης για τον λογαριασμό διαχειριστή. - + Choose a password for the administrator account. Επιλέξτε ένα κωδικό για τον λογαριασμό διαχειριστή. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Εισάγετε τον ίδιο κωδικό δύο φορές, ώστε να γίνει έλεγχος για τυπογραφικά σφάλματα.</small> @@ -2325,42 +2665,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Ριζική - + Home Home - + Boot Εκκίνηση - + EFI system Σύστημα EFI - + Swap Swap - + New partition for %1 Νέα κατάτμηση για το %1 - + New partition Νέα κατάτμηση - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2709,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Ελεύθερος χώρος - - + + New partition Νέα κατάτμηση - + Name Όνομα - + File System Σύστημα αρχείων - + + File System Label + + + + Mount Point Σημείο προσάρτησης - + Size Μέγεθος @@ -2404,77 +2749,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Τύπος - + Storage de&vice: Συσκευή απ&οθήκευσης: - + &Revert All Changes Επ&αναφορά όλων των αλλαγών - + New Partition &Table Νέος πίνακας κα&τατμήσεων - + Cre&ate - + &Edit &Επεξεργασία - + &Delete &Διαγραφή - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Θέλετε σίγουρα να δημιουργήσετε έναν νέο πίνακα κατατμήσεων στο %1; - + Can not create new partition - + 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. @@ -2482,117 +2827,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Συλλογή πληροφοριών συστήματος... - + Partitions Κατατμήσεις - - Install %1 <strong>alongside</strong> another operating system. - Εγκατάσταση του %1 <strong>παράλληλα με</strong> ένα άλλο λειτουργικό σύστημα στον δίσκο. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Διαγραφή</strong> του δίσκου και εγκατάσταση του %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Αντικατάσταση</strong> μιας κατάτμησης με το %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Χειροκίνητη</strong> τμηματοποίηση. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Εγκατάσταση του %1 <strong>παράλληλα με</strong> ένα άλλο λειτουργικό σύστημα στον δίσκο<strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Διαγραφή</strong> του δίσκου <strong>%2</strong> (%3) και εγκατάσταση του %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Αντικατάσταση</strong> μιας κατάτμησης στον δίσκο <strong>%2</strong> (%3) με το %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Χειροκίνητη</strong> τμηματοποίηση του δίσκου <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Δίσκος <strong>%1</strong> (%2) - - - + Current: Τρέχον: - + After: Μετά: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2935,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2614,17 +2949,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Τύπος - + 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. - + 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. @@ -2632,7 +2967,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2640,17 +2975,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2658,65 +2993,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Λανθασμένοι παράμετροι για την κλήση διεργασίας. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2724,89 +3059,94 @@ Output: QObject - - Default Keyboard Model - Προκαθορισμένο μοντέλο πληκτρολογίου - - - - - Default - Προκαθορισμένο - - - - unknown - άγνωστη - - - - extended - εκτεταμένη - - - - unformatted - μη μορφοποιημένη - - - - swap - - - - - Unpartitioned space or unknown partition table - Μη κατανεμημένος χώρος ή άγνωστος πίνακας κατατμήσεων - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown + άγνωστη + + + + extended + εκτεταμένη + + + + unformatted + μη μορφοποιημένη + + + + swap - - No description provided. - + + + Default + Προκαθορισμένο - - - - + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Μη κατανεμημένος χώρος ή άγνωστος πίνακας κατατμήσεων + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2814,18 +3154,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2833,143 +3173,158 @@ Output: ReplaceWidget - + Form Τύπος - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. Το επιλεγμένο στοιχείο φαίνεται να μην είναι ένα έγκυρο διαμέρισμα. - + %1 cannot be installed on empty space. Please select an existing partition. %1 δεν μπορεί να εγκατασταθεί σε άδειο χώρο. Παρακαλώ επίλεξε ένα υφιστάμενο διαμέρισμα. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 δεν μπορεί να εγκατασταθεί σε ένα εκτεταμένο διαμέρισμα. Παρακαλώ επίλεξε ένα υφιστάμενο πρωτεύον ή λογικό διαμέρισμα. - + %1 cannot be installed on this partition. %1 δεν μπορεί να εγκατασταθεί σ' αυτό το διαμέρισμα. - + Data partition (%1) Κατάτμηση δεδομένων (%1) - + Unknown system partition (%1) Άγνωστη κατάτμηση συστήματος (%1) - + %1 system partition (%2) %1 κατάτμηση συστήματος (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. <strong>%2</strong><br/><br/>Πουθενά στο σύστημα δεν μπορεί να ανιχθευθεί μία κατάτμηση EFI. Παρακαλώ επιστρέψτε πίσω και χρησιμοποιήστε τη χειροκίνητη τμηματοποίηση για την εγκατάσταση του %1. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. Η κατάτμηση συστήματος EFI στο %1 θα χρησιμοποιηθεί για την εκκίνηση του %2. - + EFI system partition: Κατάτμηση συστήματος EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2977,22 +3332,22 @@ Output: ResizePartitionJob - + Resize partition %1. Αλλαγή μεγέθους κατάτμησης %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Η εγκατάσταση απέτυχε να αλλάξει το μέγεθος της κατάτμησης %1 στον δίσκο '%2'. @@ -3000,7 +3355,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3008,18 +3363,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3027,53 +3382,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Για καλύτερο αποτέλεσμα, παρακαλώ βεβαιωθείτε ότι ο υπολογιστής: - + System requirements Απαιτήσεις συστήματος - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ο υπολογιστής δεν ικανοποιεί τις ελάχιστες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση δεν μπορεί να συνεχιστεί. <a href="#details">Λεπτομέριες...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Αυτός ο υπολογιστής δεν ικανοποιεί μερικές από τις συνιστώμενες απαιτήσεις για την εγκατάσταση του %1.<br/>Η εγκατάσταση μπορεί να συνεχιστεί, αλλά ορισμένες λειτουργίες μπορεί να απενεργοποιηθούν. - - - - This program will ask you some questions and set up %2 on your computer. - Το πρόγραμμα θα σας κάνει μερικές ερωτήσεις και θα ρυθμίσει το %2 στον υπολογιστή σας. - - ScanningDialog - + Scanning storage devices... Σάρωση των συσκευών αποθήκευσης... - + Partitioning Τμηματοποίηση @@ -3081,29 +3408,29 @@ Output: SetHostNameJob - + Set hostname %1 Ορισμός ονόματος υπολογιστή %1 - + Set hostname <strong>%1</strong>. Ορισμός ονόματος υπολογιστή <strong>%1</strong>. - + Setting hostname %1. Ορίζεται το όνομα υπολογιστή %1. + - Internal Error Εσωτερικό σφάλμα - - + + Cannot write hostname to target system Δεν είναι δυνατή η εγγραφή του ονόματος υπολογιστή στο σύστημα @@ -3111,29 +3438,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 Αδυναμία εγγραφής στο %1 - + Failed to write keyboard configuration for X11. Αδυναμία εγγραφής στοιχείων διαμόρφωσης πληκτρολογίου για Χ11 - + Failed to write keyboard configuration to existing /etc/default directory. Αδυναμία εγγραφής στοιχείων διαμόρφωσης πληκτρολογίου στον υπάρχων κατάλογο /etc/default @@ -3141,82 +3468,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. Ο εγκαταστάτης απέτυχε να θέσει τις σημαίες στο διαμέρισμα %1. @@ -3224,42 +3551,42 @@ Output: SetPasswordJob - + Set password for user %1 Ορισμός κωδικού για τον χρήστη %1 - + Setting password for user %1. Ορίζεται κωδικός για τον χρήστη %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3267,45 +3594,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. Αδυναμία ορισμού ζώνης ώρας. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, Αδυναμία ορισμού ζώνης ώρας, - + Cannot open /etc/timezone for writing Αδυναμία ανοίγματος /etc/timezone για εγγραφή + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Δεν είναι δυνατό το chmod στο αρχείο sudoers. + + + + Cannot create sudoers file for writing. + Δεν είναι δυνατή η δημιουργία του αρχείου sudoers για εγγραφή. + + ShellProcessJob - + Shell Processes Job @@ -3313,81 +3677,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. - Αυτή είναι μια επισκόπηση του τι θα συμβεί μόλις ξεκινήσετε τη διαδικασία εγκατάστασης. + + &Yes + &Ναι - - - SummaryViewStep - - Summary - Σύνοψη + + &No + &Όχι + + + + &Cancel + &Ακύρωση + + + + &Close + &Κλείσιμο TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3395,106 +3795,97 @@ Output: TrackingPage - + Form Τύπος - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Το όνομα χρήστη είναι πολύ μακρύ. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Το όνομα υπολογιστή είναι πολύ σύντομο. - - - - Your hostname is too long. - Το όνομα υπολογιστή είναι πολύ μακρύ. - - - - Your passwords do not match! - Οι κωδικοί πρόσβασης δεν ταιριάζουν! + + Users + Χρήστες UsersViewStep - + Users Χρήστες @@ -3502,65 +3893,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3568,106 +3961,106 @@ Output: WelcomePage - + Form Τύπος - - + + Select application and system language + &About + Σ&χετικά με + + + Open donations website - + &Donate - + Open help and support website + &Support + &Υποστήριξη + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - Ση&μειώσεις έκδοσης - - - &Known issues &Γνωστά προβλήματα - - &Support - &Υποστήριξη - - - - &About - Σ&χετικά με - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Καλώς ήλθατε στην εγκατάσταση του %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> + + Open release notes website - + + &Release notes + Ση&μειώσεις έκδοσης + + + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Καλώς ήλθατε στην εγκατάσταση του %1.</h1> + + + + %1 support + Υποστήριξη %1 + + + About %1 setup - + About %1 installer Σχετικά με το πρόγραμμα εγκατάστασης %1 - + <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. - - - %1 support - Υποστήριξη %1 - WelcomeQmlViewStep - + Welcome Καλώς ήλθατε @@ -3675,31 +4068,157 @@ Output: WelcomeViewStep - + Welcome Καλώς ήλθατε + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Εμφάνιση πληροφοριών απασφαλμάτωσης + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3707,86 +4226,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Μοντέλο πληκτρολογίου: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Πληκτρολογείστε εδώ για να δοκιμάσετε το πληκτρολόγιο σας - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Ποιο είναι το όνομά σας; + + + + Your Full Name + + + + + What name do you want to use to log in? + Ποιο όνομα θα θέλατε να χρησιμοποιείτε για σύνδεση; + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Ποιο είναι το όνομά του υπολογιστή; + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Επιλέξτε ένα κωδικό για να διατηρήσετε το λογαριασμό σας ασφαλή. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Χρησιμοποιήστε τον ίδιο κωδικό πρόσβασης για τον λογαριασμό διαχειριστή. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_en.ts b/lang/calamares_en.ts index bbeb85179..f3d84c625 100644 --- a/lang/calamares_en.ts +++ b/lang/calamares_en.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Manage auto-mount settings + + BootInfoWidget - + 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. 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. - + 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. 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. - + 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. 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record of %1 - + Boot Partition Boot Partition - + System Partition System Partition - + Do not install a boot loader Do not install a boot loader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Modules - + Type: Type: - - + + none none - + Interface: Interface: - - Tools - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + Reloads the stylesheet from the branding directory. + + + + Uploads the session log to the configured pastebin. + Uploads the session log to the configured pastebin. + + + + Send Session Log + Send Session Log + + + Reload Stylesheet Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + Displays the tree of widget names in the log (for stylesheet debugging). + + + Widget Tree Widget Tree - + Debug information Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Set up - + Install Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Job failed (%1) - + Programmed job failure was explicitly requested. Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Run command '%1' in target system. - + Run command '%1'. Run command '%1'. - + Running command %1 %2 Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Running %1 operation. - + Bad working directory path Bad working directory path - + Working directory %1 for python job %2 is not readable. Working directory %1 for python job %2 is not readable. - + Bad main script file Bad main script file - + Main script file %1 for python job %2 is not readable. Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Loading ... - + QML Step <i>%1</i>. QML Step <i>%1</i>. - + Loading failed. Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Requirements checking for module <i>%1</i> is complete. + - + Waiting for %n module(s). Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. System-requirements checking is complete. @@ -252,247 +285,241 @@ Calamares::ViewManager - - &Back - &Back - - - - &Next - &Next - - - - &Cancel - &Cancel - - - - Cancel setup without changing the system. - Cancel setup without changing the system. - - - - Cancel installation without changing the system. - Cancel installation without changing the system. - - - + Setup Failed Setup Failed - - Would you like to paste the install log to the web? - Would you like to paste the install log to the web? + + Installation Failed + Installation Failed - + + Error + Error + + + + &Yes + &Yes + + + + &No + &No + + + + &Close + &Close + + + Install Log Paste URL Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + Install log posted to + +%1 + +Link copied to clipboard + + + Calamares Initialization Failed Calamares Initialization Failed - + %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. %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. - + <br/>The following modules could not be loaded: <br/>The following modules could not be loaded: - + + Continue with setup? + Continue with setup? + + + Continue with installation? Continue with installation? - + 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> 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> - + + 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> + 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> + + + &Set up now &Set up now - + + &Install now + &Install now + + + + Go &back + Go &back + + + &Set up &Set up - + &Install &Install - + Setup is complete. Close the setup program. Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + The installation is complete. Close the installer. + + + + Cancel setup without changing the system. + Cancel setup without changing the system. + + + + Cancel installation without changing the system. + Cancel installation without changing the system. + + + + &Next + &Next + + + + &Back + &Back + + + + &Done + &Done + + + + &Cancel + &Cancel + + + Cancel setup? Cancel setup? - + Cancel installation? Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - &Yes - - - - - &No - &No - - - - &Close - &Close - - - - Continue with setup? - Continue with setup? - - - - 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> - 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> - - - - &Install now - &Install now - - - - Go &back - Go &back - - - - &Done - &Done - - - - The installation is complete. Close the installer. - The installation is complete. Close the installer. - - - - Error - Error - - - - Installation Failed - Installation Failed - CalamaresPython::Helper - + Unknown exception type Unknown exception type - + unparseable Python error unparseable Python error - + unparseable Python traceback unparseable Python traceback - + Unfetchable Python error. Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - Install log posted to: -%1 - - CalamaresWindow - - &Back - &Back - - - - &Next - &Next - - - - &Cancel - &Cancel - - - + %1 Setup Program %1 Setup Program - + %1 Installer %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information - Show debug information + + Set filesystem label on %1. + Set filesystem label on %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... Gathering system information... @@ -500,157 +527,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Form - - After: - After: - - - - Boot loader location: - Boot loader location: - - - + Select storage de&vice: Select storage de&vice: - - - - + + + + Current: Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + Reuse %1 as home partition for %2. Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Boot loader location: + + + <strong>Select a partition to install on</strong> <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI system partition: - + 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. 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - 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. - - - - No Swap - No Swap - - - - Reuse Swap - Reuse Swap - - - - Swap (no Hibernate) - Swap (no Hibernate) - - - - Swap (with Hibernate) - Swap (with Hibernate) - - - - Swap to file - Swap to file - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + 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. + + + 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. 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. - + 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. 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. + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + This storage device has one of its partitions <strong>mounted</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + No Swap + No Swap + + + + Reuse Swap + Reuse Swap + + + + Swap (no Hibernate) + Swap (no Hibernate) + + + + Swap (with Hibernate) + Swap (with Hibernate) + + + + Swap to file + Swap to file + ClearMountsJob - + + Successfully unmounted %1. + Successfully unmounted %1. + + + + Successfully disabled swap %1. + Successfully disabled swap %1. + + + + Successfully cleared swap %1. + Successfully cleared swap %1. + + + + Successfully closed mapper device %1. + Successfully closed mapper device %1. + + + + Successfully disabled volume group %1. + Successfully disabled volume group %1. + + + Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Cleared all mounts for %1 @@ -658,22 +725,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. Clear all temporary mounts. - + Clearing all temporary mounts. Clearing all temporary mounts. - - Cannot get list of temporary mounts. - Cannot get list of temporary mounts. - - - + Cleared all temporary mounts. Cleared all temporary mounts. @@ -681,18 +743,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. The command needs to know the user's name, but no username is defined. @@ -700,100 +762,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - This program will ask you some questions and set up %2 on your computer. - This program will ask you some questions and set up %2 on your computer. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Welcome to %1 setup.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Welcome to the Calamares installer for %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Welcome to the %1 installer.</h1> - - - + Set keyboard model to %1.<br/> Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + Set timezone to %1/%2. + + + The system language will be set to %1. The system language will be set to %1. - + The numbers and dates locale will be set to %1. The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - Set timezone to %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + Network Installation. (Disabled: No package list) + + + + Package selection + Package selection + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + This program will ask you some questions and set up %2 on your computer. + This program will ask you some questions and set up %2 on your computer. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Welcome to the Calamares setup program for %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Welcome to %1 setup</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Welcome to the Calamares installer for %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Welcome to the %1 installer</h1> + + + + Your username is too long. + Your username is too long. + + + + '%1' is not allowed as username. + '%1' is not allowed as username. + + + + Your username must start with a lowercase letter or underscore. + Your username must start with a lowercase letter or underscore. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + Your hostname is too short. + Your hostname is too short. + + + + Your hostname is too long. + Your hostname is too long. + + + + '%1' is not allowed as hostname. + '%1' is not allowed as hostname. + + + + Only letters, numbers, underscore and hyphen are allowed. + Only letters, numbers, underscore and hyphen are allowed. + + + + Your passwords do not match! + Your passwords do not match! + + + + OK! + OK! + + + + Setup Failed + Setup Failed + + + + Installation Failed + Installation Failed + + + + The setup of %1 did not complete successfully. + The setup of %1 did not complete successfully. + + + + The installation of %1 did not complete successfully. + The installation of %1 did not complete successfully. + + + + Setup Complete + Setup Complete + + + + Installation Complete + Installation Complete + + + + The setup of %1 is complete. + The setup of %1 is complete. + + + + The installation of %1 is complete. + The installation of %1 is complete. + + + + Package Selection + Package Selection + + + + Please pick a product from the list. The selected product will be installed. + Please pick a product from the list. The selected product will be installed. + + + + Install option: <strong>%1</strong> + Install option: <strong>%1</strong> + + + + None + None + + + + Summary + Summary + + + + This is an overview of what will happen once you start the setup procedure. + This is an overview of what will happen once you start the setup procedure. + + + + This is an overview of what will happen once you start the install procedure. + This is an overview of what will happen once you start the install procedure. + ContextualProcessJob - + Contextual Processes Job Contextual Processes Job @@ -801,100 +998,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition Create a Partition - - MiB - MiB - - - - Partition &Type: - Partition &Type: - - - - &Primary - &Primary - - - - E&xtended - E&xtended - - - - Fi&le System: - Fi&le System: - - - - LVM LV name - LVM LV name - - - - Flags: - Flags: - - - - &Mount Point: - &Mount Point: - - - + Si&ze: Si&ze: - + + MiB + MiB + + + + Partition &Type: + Partition &Type: + + + + Primar&y + Primar&y + + + + E&xtended + E&xtended + + + + Fi&le System: + Fi&le System: + + + + LVM LV name + LVM LV name + + + + &Mount Point: + &Mount Point: + + + + Flags: + Flags: + + + + Label for the filesystem + Label for the filesystem + + + + FS Label: + FS Label: + + + En&crypt En&crypt - + Logical Logical - + Primary Primary - + GPT GPT - + Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + Mountpoint must start with a <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Create new %1MiB partition on %3 (%2) with entries %4. + + + + Create new %1MiB partition on %3 (%2). + Create new %1MiB partition on %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. The installer failed to create partition on disk '%1'. @@ -902,27 +1135,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Create Partition Table - + Creating a new partition table will delete all existing data on the disk. Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? What kind of partition table do you want to create? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -930,22 +1163,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. The installer failed to create a partition table on %1. @@ -953,45 +1186,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Create user %1 - + Create user <strong>%1</strong>. Create user <strong>%1</strong>. - - Creating user %1. - Creating user %1. + + Preserving home directory + Preserving home directory - - Sudoers dir is not writable. - Sudoers dir is not writable. + + + Creating user %1 + Creating user %1 - - Cannot create sudoers file for writing. - Cannot create sudoers file for writing. + + Configuring user %1 + Configuring user %1 - - Cannot chmod sudoers file. - Cannot chmod sudoers file. - - - - Cannot open groups file for reading. - Cannot open groups file for reading. + + Setting file permissions + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group Create Volume Group @@ -999,22 +1228,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. The installer failed to create a volume group named '%1'. @@ -1022,18 +1251,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. The installer failed to deactivate a volume group named %1. @@ -1041,22 +1270,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. Delete partition %1. - + Delete partition <strong>%1</strong>. Delete partition <strong>%1</strong>. - + Deleting partition %1. Deleting partition %1. - + The installer failed to delete partition %1. The installer failed to delete partition %1. @@ -1064,46 +1293,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - 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. - - - + This device has a <strong>%1</strong> partition table. This device has a <strong>%1</strong> partition table. - + 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. 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. - + 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. 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. <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. + + + 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. + 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. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1341,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 Failed to open %1 @@ -1130,7 +1359,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1138,123 +1367,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition Edit Existing Partition - - Content: - Content: + + Con&tent: + Con&tent: - + &Keep &Keep - + Format Format - + Warning: Formatting the partition will erase all existing data. Warning: Formatting the partition will erase all existing data. - + &Mount Point: &Mount Point: - + Si&ze: Si&ze: - + MiB MiB - + Fi&le System: Fi&le System: - + Flags: Flags: - - Mountpoint already in use. Please select another one. - Mountpoint already in use. Please select another one. + + Label for the filesystem + Label for the filesystem + + + + FS Label: + FS Label: EncryptWidget - + Form Form - + En&crypt system En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + Passphrase Passphrase - + Confirm passphrase Confirm passphrase - + + Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + Details: + + + + Would you like to paste the install log to the web? + Would you like to paste the install log to the web? + + FillGlobalStorageJob - + Set partition information Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Install boot loader on <strong>%1</strong>. - + Setting up mount points. Setting up mount points. @@ -1262,93 +1535,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Form - + &Restart now &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> <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> - + <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. <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. - + <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> <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Finish + + + FinishedViewStep - - Setup Complete - Setup Complete - - - - Installation Complete - Installation Complete - - - - The setup of %1 is complete. - The setup of %1 is complete. - - - - The installation of %1 is complete. - The installation of %1 is complete. + + Finish + Finish FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. The installer failed to format partition %1 on disk '%2'. @@ -1356,72 +1617,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source is plugged in to a power source - + The system is not plugged in to a power source. The system is not plugged in to a power source. - + is connected to the Internet is connected to the Internet - + The system is not connected to the Internet. The system is not connected to the Internet. - + is running the installer as an administrator (root) is running the installer as an administrator (root) - + The setup program is not running with administrator rights. The setup program is not running with administrator rights. - + The installer is not running with administrator rights. The installer is not running with administrator rights. - + has a screen large enough to show the whole installer has a screen large enough to show the whole installer - + The screen is too small to display the setup program. The screen is too small to display the setup program. - + The screen is too small to display the installer. The screen is too small to display the installer. @@ -1429,7 +1690,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. Collecting information about your machine. @@ -1437,25 +1698,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier OEM Batch Identifier - + Could not create directories <code>%1</code>. Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. Could not write to file <code>%1</code>. @@ -1463,7 +1724,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. Creating initramfs with mkinitcpio. @@ -1471,7 +1732,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. Creating initramfs. @@ -1479,17 +1740,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole not installed - + Please install KDE Konsole and try again! Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> Executing script: &nbsp;<code>%1</code> @@ -1497,28 +1758,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Set keyboard model to %1.<br/> - - - - Set keyboard layout to %1/%2. - Set keyboard layout to %1/%2. - - KeyboardQmlViewStep - + Keyboard Keyboard @@ -1526,7 +1774,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Keyboard @@ -1534,65 +1782,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting System locale setting - + 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>. 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>. - + &Cancel &Cancel - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Configuring encrypted swap. + + + + No target system available. + No target system available. + + + + No rootMountPoint is set. + No rootMountPoint is set. + + + + No configFilePath is set. + No configFilePath is set. + + LicensePage - + Form Form - + <h1>License Agreement</h1> <h1>License Agreement</h1> - + I accept the terms and conditions above. I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1600,7 +1871,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License License @@ -1608,109 +1879,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 File: %1 - + + Hide license text + Hide license text + + + Show the license text Show the license text - + Open license agreement in browser. Open license agreement in browser. - - - Hide license text - Hide license text - LocalePage - - The system language will be set to %1. - The system language will be set to %1. - - - - The numbers and dates locale will be set to %1. - The numbers and dates locale will be set to %1. - - - + Region: Region: - + Zone: Zone: - - + + &Change... &Change... - - - Set timezone to %1/%2.<br/> - Set timezone to %1/%2.<br/> - LocaleQmlViewStep - + Location Location + + LocaleTests + + + Quit + Quit + + LocaleViewStep - + Location Location @@ -1718,35 +1982,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. Configuring LUKS key file. - - + + No partitions are defined. No partitions are defined. - - - + + + Encrypted rootfs setup error Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. Could not configure LUKS key file on partition %1. @@ -1754,116 +2018,132 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. Generate machine-id. - + Configuration Error Configuration Error - + No root mount point is set for MachineId. No root mount point is set for MachineId. + + Map + + + Timezone: %1 + Timezone: %1 + + + + 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. + 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. + + NetInstallViewStep - - + Package selection Package selection - + Office software Office software - + Office package Office package - + Browser software Browser software - + Browser package Browser package - + Web browser Web browser - + Kernel Kernel - + Services Services - + Login Login - + Desktop Desktop - + Applications Applications - + Communication Communication - + Development Development - + Office Office - + Multimedia Multimedia - + Internet Internet - + Theming Theming - + Gaming Gaming - + Utilities Utilities @@ -1871,7 +2151,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes Notes @@ -1879,17 +2159,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1897,260 +2177,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Select your preferred Region, or use the default settings. + + + + + + Timezone: %1 + Timezone: %1 + + + + Select your preferred Zone within your Region. + Select your preferred Zone within your Region. + + + + Zones + Zones + + + + You can fine-tune Language and Locale settings below. + You can fine-tune Language and Locale settings below. + + PWQ - + Password is too short Password is too short - + Password is too long Password is too long - + Password is too weak Password is too weak - + Memory allocation error when setting '%1' Memory allocation error when setting '%1' - + Memory allocation error Memory allocation error - + The password is the same as the old one The password is the same as the old one - + The password is a palindrome The password is a palindrome - + The password differs with case changes only The password differs with case changes only - + The password is too similar to the old one The password is too similar to the old one - + The password contains the user name in some form The password contains the user name in some form - + The password contains words from the real name of the user in some form The password contains words from the real name of the user in some form - + The password contains forbidden words in some form The password contains forbidden words in some form - - The password contains less than %1 digits - The password contains less than %1 digits - - - + The password contains too few digits The password contains too few digits - - The password contains less than %1 uppercase letters - The password contains less than %1 uppercase letters - - - + The password contains too few uppercase letters The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - The password contains less than %1 lowercase letters + + + The password contains fewer than %n lowercase letters + + The password contains fewer than %n lowercase letters + The password contains fewer than %n lowercase letters + - + The password contains too few lowercase letters The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - The password contains less than %1 non-alphanumeric characters - - - + The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - The password is shorter than %1 characters - - - + The password is too short The password is too short - - The password is just rotated old one - The password is just rotated old one - - - - The password contains less than %1 character classes - The password contains less than %1 character classes - - - + The password does not contain enough character classes The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - The password contains more than %1 same characters consecutively - - - + The password contains too many same characters consecutively The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - The password contains more than %1 characters of the same class consecutively - - - + The password contains too many characters of the same class consecutively The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - The password contains monotonic sequence longer than %1 characters + + + The password contains fewer than %n digits + + The password contains fewer than %n digits + The password contains fewer than %n digits + + + + + The password contains fewer than %n uppercase letters + + The password contains fewer than %n uppercase letters + The password contains fewer than %n uppercase letters + + + + + The password contains fewer than %n non-alphanumeric characters + + The password contains fewer than %n non-alphanumeric characters + The password contains fewer than %n non-alphanumeric characters + + + + + The password is shorter than %n characters + + The password is shorter than %n characters + The password is shorter than %n characters + - + + The password is a rotated version of the previous one + The password is a rotated version of the previous one + + + + The password contains fewer than %n character classes + + The password contains fewer than %n character classes + The password contains fewer than %n character classes + + + + + The password contains more than %n same characters consecutively + + The password contains more than %n same characters consecutively + The password contains more than %n same characters consecutively + + + + + The password contains more than %n characters of the same class consecutively + + The password contains more than %n characters of the same class consecutively + The password contains more than %n characters of the same class consecutively + + + + + The password contains monotonic sequence longer than %n characters + + The password contains monotonic sequence longer than %n characters + The password contains monotonic sequence longer than %n characters + + + + The password contains too long of a monotonic character sequence The password contains too long of a monotonic character sequence - + No password supplied No password supplied - + Cannot obtain random numbers from the RNG device Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 The password fails the dictionary check - %1 - + The password fails the dictionary check The password fails the dictionary check - + Unknown setting - %1 Unknown setting - %1 - + Unknown setting Unknown setting - + Bad integer value of setting - %1 Bad integer value of setting - %1 - + Bad integer value Bad integer value - + Setting %1 is not of integer type Setting %1 is not of integer type - + Setting is not of integer type Setting is not of integer type - + Setting %1 is not of string type Setting %1 is not of string type - + Setting is not of string type Setting is not of string type - + Opening the configuration file failed Opening the configuration file failed - + The configuration file is malformed The configuration file is malformed - + Fatal failure Fatal failure - + Unknown error Unknown error - + Password is empty Password is empty @@ -2158,40 +2495,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Form - + Product Name Product Name - + TextLabel TextLabel - + Long Product Description Long Product Description - + Package Selection Package Selection - + Please pick a product from the list. The selected product will be installed. Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + Packages + + PackageChooserViewStep - + Packages Packages @@ -2199,12 +2544,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name Name - + Description Description @@ -2212,17 +2557,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Form - + Keyboard Model: Keyboard Model: - + Type here to test your keyboard Type here to test your keyboard @@ -2230,96 +2575,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Form - + What is your name? What is your name? - - What name do you want to use to log in? - What name do you want to use to log in? - - - - Choose a password to keep your account safe. - Choose a password to keep your account safe. - - - - - <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> - <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> - - - - What is the name of this computer? - What is the name of this computer? - - - + Your Full Name Your Full Name - + + What name do you want to use to log in? + What name do you want to use to log in? + + + login login - + + What is the name of this computer? + What is the name of this computer? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name Computer Name - - + + Choose a password to keep your account safe. + Choose a password to keep your account safe. + + + + + <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> + <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> + + + + Password Password - - + + Repeat Password Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. Require strong passwords. - + Log in automatically without asking for the password. Log in automatically without asking for the password. - + Use the same password for the administrator account. Use the same password for the administrator account. - + Choose a password for the administrator account. Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2327,42 +2672,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI system - + Swap Swap - + New partition for %1 New partition for %1 - + New partition New partition - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2716,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Free Space - - + + New partition New partition - + Name Name - + File System File System - + + File System Label + File System Label + + + Mount Point Mount Point - + Size Size @@ -2406,77 +2756,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Form - + Storage de&vice: Storage de&vice: - + &Revert All Changes &Revert All Changes - + New Partition &Table New Partition &Table - + Cre&ate Cre&ate - + &Edit &Edit - + &Delete &Delete - + New Volume Group New Volume Group - + Resize Volume Group Resize Volume Group - + Deactivate Volume Group Deactivate Volume Group - + Remove Volume Group Remove Volume Group - + I&nstall boot loader on: I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Are you sure you want to create a new partition table on %1? - + Can not create new partition Can not create new partition - + 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. 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. @@ -2484,117 +2834,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Gathering system information... - + Partitions Partitions - - Install %1 <strong>alongside</strong> another operating system. - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. + No partitions will be changed. - - <strong>Manual</strong> partitioning. - <strong>Manual</strong> partitioning. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Current: - + After: After: - + No EFI system partition configured No EFI system partition configured - - 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>esp</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. - 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>esp</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. + + EFI system partition configured incorrectly + EFI system partition configured incorrectly - - EFI system partition flag not set - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + The filesystem must have type FAT32. + + + + The filesystem must be at least %1 MiB in size. + The filesystem must be at least %1 MiB in size. + + + + The filesystem must have flag <strong>%1</strong> set. + The filesystem must have flag <strong>%1</strong> set. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + You can continue without setting up an EFI system partition but your system may fail to start. + + + Option to use GPT on BIOS Option to use GPT on BIOS - - 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. - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Boot partition not encrypted - + 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. 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. - + has at least one disk device available. has at least one disk device available. - + There are no partitions to install on. There are no partitions to install on. @@ -2602,13 +2942,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package Could not select KDE Plasma Look-and-Feel package @@ -2616,17 +2956,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Form - + 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. 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. - + 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. 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. @@ -2634,7 +2974,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2642,17 +2982,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... Saving files for later ... - + No files configured to save for later. No files configured to save for later. - + Not all of the configured files could be preserved. Not all of the configured files could be preserved. @@ -2660,14 +3000,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. There was no output from the command. - + Output: @@ -2676,52 +3016,52 @@ Output: - + External command crashed. External command crashed. - + Command <i>%1</i> crashed. Command <i>%1</i> crashed. - + External command failed to start. External command failed to start. - + Command <i>%1</i> failed to start. Command <i>%1</i> failed to start. - + Internal error when starting command. Internal error when starting command. - + Bad parameters for process job call. Bad parameters for process job call. - + External command failed to finish. External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. External command finished with errors. - + Command <i>%1</i> finished with exit code %2. Command <i>%1</i> finished with exit code %2. @@ -2729,89 +3069,95 @@ Output: QObject - - Default Keyboard Model - Default Keyboard Model - - - - - Default - Default - - - - unknown - unknown - - - - extended - extended - - - - unformatted - unformatted - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Unpartitioned space or unknown partition table - - - - (no mount point) - (no mount point) - - - - Requirements checking for module <i>%1</i> is complete. - Requirements checking for module <i>%1</i> is complete. - - - + %1 (%2) %1 (%2) - - No product - No product + + unknown + unknown - - No description provided. - No description provided. + + extended + extended - - - - + + unformatted + unformatted + + + + swap + swap + + + + + Default + Default + + + + + + File not found File not found - + Path <pre>%1</pre> must be an absolute path. Path <pre>%1</pre> must be an absolute path. - + + Directory not found + Directory not found + + + + Could not create new random file <pre>%1</pre>. Could not create new random file <pre>%1</pre>. + + + No product + No product + + + + No description provided. + No description provided. + + + + (no mount point) + (no mount point) + + + + Unpartitioned space or unknown partition table + Unpartitioned space or unknown partition table + + + + Recommended + + + <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> + <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> + RemoveUserJob - + Remove live user from target system Remove live user from target system @@ -2819,18 +3165,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. The installer failed to remove a volume group named '%1'. @@ -2838,143 +3184,160 @@ Output: ReplaceWidget - + Form Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. %1 cannot be installed on this partition. - + Data partition (%1) Data partition (%1) - + Unknown system partition (%1) Unknown system partition (%1) - + %1 system partition (%2) %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. <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. - - - + + + <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. <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. - + The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + <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> + <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> + + ResizeFSJob - + Resize Filesystem Job Resize Filesystem Job - + Invalid configuration Invalid configuration - + The file-system resize job has an invalid configuration and will not run. The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot The device %1 must be resized, but cannot @@ -2982,22 +3345,22 @@ Output: ResizePartitionJob - + Resize partition %1. Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. The installer failed to resize partition %1 on disk '%2'. @@ -3005,7 +3368,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group Resize Volume Group @@ -3013,18 +3376,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. The installer failed to resize a volume group named '%1'. @@ -3032,53 +3395,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: For best results, please ensure that this computer: - + System requirements System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - This program will ask you some questions and set up %2 on your computer. - This program will ask you some questions and set up %2 on your computer. - - ScanningDialog - + Scanning storage devices... Scanning storage devices... - + Partitioning Partitioning @@ -3086,29 +3421,29 @@ Output: SetHostNameJob - + Set hostname %1 Set hostname %1 - + Set hostname <strong>%1</strong>. Set hostname <strong>%1</strong>. - + Setting hostname %1. Setting hostname %1. + - Internal Error Internal Error - - + + Cannot write hostname to target system Cannot write hostname to target system @@ -3116,29 +3451,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 Failed to write to %1 - + Failed to write keyboard configuration for X11. Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. Failed to write keyboard configuration to existing /etc/default directory. @@ -3146,82 +3481,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. Set flags on partition %1. - + Set flags on %1MiB %2 partition. Set flags on %1MiB %2 partition. - + Set flags on new partition. Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - + Clear flags on new partition. Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Clearing flags on %1MiB <strong>%2</strong> partition. + + + Clearing flags on new partition. Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + Setting flags <strong>%1</strong> on new partition. Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. The installer failed to set flags on partition %1. @@ -3229,42 +3564,42 @@ Output: SetPasswordJob - + Set password for user %1 Set password for user %1 - + Setting password for user %1. Setting password for user %1. - + Bad destination system path. Bad destination system path. - + rootMountPoint is %1 rootMountPoint is %1 - + Cannot disable root account. Cannot disable root account. - + passwd terminated with error code %1. passwd terminated with error code %1. - + Cannot set password for user %1. Cannot set password for user %1. - + usermod terminated with error code %1. usermod terminated with error code %1. @@ -3272,45 +3607,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Set timezone to %1/%2 - + Cannot access selected timezone path. Cannot access selected timezone path. - + Bad path: %1 Bad path: %1 - + Cannot set timezone. Cannot set timezone. - + Link creation failed, target: %1; link name: %2 Link creation failed, target: %1; link name: %2 - + Cannot set timezone, Cannot set timezone, - + Cannot open /etc/timezone for writing Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + Preparing groups. + + + + + Could not create groups in target system + Could not create groups in target system + + + + These groups are missing in the target system: %1 + These groups are missing in the target system: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configure <pre>sudo</pre> users. + + + + Cannot chmod sudoers file. + Cannot chmod sudoers file. + + + + Cannot create sudoers file for writing. + Cannot create sudoers file for writing. + + ShellProcessJob - + Shell Processes Job Shell Processes Job @@ -3318,81 +3690,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - This is an overview of what will happen once you start the setup procedure. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - This is an overview of what will happen once you start the install procedure. + + &Yes + &Yes - - - SummaryViewStep - - Summary - Summary + + &No + &No + + + + &Cancel + &Cancel + + + + &Close + &Close TrackingInstallJob - + Installation feedback Installation feedback - + Sending installation feedback. Sending installation feedback. - + Internal error in install-tracking. Internal error in install-tracking. - + HTTP request timed out. HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE user feedback + + + + Configuring KDE user feedback. + Configuring KDE user feedback. + + + + + Error in KDE user feedback configuration. + Error in KDE user feedback configuration. + + + + Could not configure KDE user feedback correctly, script error %1. + Could not configure KDE user feedback correctly, script error %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Could not configure KDE user feedback correctly, Calamares error %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Machine feedback - + Configuring machine feedback. Configuring machine feedback. - - + + Error in machine feedback configuration. Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. Could not configure machine feedback correctly, Calamares error %1. @@ -3400,106 +3808,97 @@ Output: TrackingPage - + Form Form - + Placeholder Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Unmount file systems. + + + + No target system available. + No target system available. + + + + No rootMountPoint is set. + No rootMountPoint is set. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Your username is too long. - - - - Your username must start with a lowercase letter or underscore. - Your username must start with a lowercase letter or underscore. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - Only letters, numbers, underscore and hyphen are allowed. - Only letters, numbers, underscore and hyphen are allowed. - - - - Your hostname is too short. - Your hostname is too short. - - - - Your hostname is too long. - Your hostname is too long. - - - - Your passwords do not match! - Your passwords do not match! + + Users + Users UsersViewStep - + Users Users @@ -3507,65 +3906,67 @@ Output: VariantModel - + Key + Column header for key/value Key - + Value + Column header for key/value Value VolumeGroupBaseDialog - + Create Volume Group Create Volume Group - + List of Physical Volumes List of Physical Volumes - + Volume Group Name: Volume Group Name: - + Volume Group Type: Volume Group Type: - + Physical Extent Size: Physical Extent Size: - + MiB MiB - + Total Size: Total Size: - + Used Size: Used Size: - + Total Sectors: Total Sectors: - + Quantity of LVs: Quantity of LVs: @@ -3573,106 +3974,106 @@ Output: WelcomePage - + Form Form - - + + Select application and system language Select application and system language + &About + &About + + + Open donations website Open donations website - + &Donate &Donate - + Open help and support website Open help and support website + &Support + &Support + + + Open issues and bug-tracking website Open issues and bug-tracking website - Open release notes website - Open release notes website - - - - &Release notes - &Release notes - - - &Known issues &Known issues - - &Support - &Support + + Open release notes website + Open release notes website - - &About - &About + + &Release notes + &Release notes - - <h1>Welcome to the %1 installer.</h1> - <h1>Welcome to the %1 installer.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Welcome to the Calamares installer for %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Welcome to the Calamares installer for %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Welcome to the %1 installer.</h1> + + + + %1 support + %1 support + + + About %1 setup About %1 setup - + About %1 installer About %1 installer - + <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. - <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-2019 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. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 support + <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. WelcomeQmlViewStep - + Welcome Welcome @@ -3680,42 +4081,173 @@ Output: WelcomeViewStep - + Welcome Welcome + + ZfsJob + + + Create ZFS pools and datasets + Create ZFS pools and datasets + + + + Failed to create zpool on + Failed to create zpool on + + + + Configuration Error + Configuration Error + + + + No partitions are available for ZFS. + No partitions are available for ZFS. + + + + Internal data missing + Internal data missing + + + + + Failed to create zpool + Failed to create zpool + + + + Failed to create dataset + Failed to create dataset + + + + The output was: + The output was: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + Back + + + + calamares-sidebar + + + Show debug information + Show debug information + + + + finishedq + + + Installation Completed + Installation Completed + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + Close Installer + Close Installer + + + + Restart System + Restart System + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + finishedq@mobile + + + Installation Completed + Installation Completed + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + Close + Close + + + + Restart + Restart + + + + i18n + + + <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>. + <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>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + Back Back @@ -3723,52 +4255,43 @@ Output: keyboardq - - Keyboard Model - Keyboard Model + + To activate keyboard preview, select a layout. + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: + Keyboard Model: - - Refresh - Refresh - - - - + Layouts Layouts - - - Keyboard Layout - Keyboard Layout + + Type here to test your keyboard + Type here to test your keyboard - - Models - Models - - - + Variants Variants + + + localeq - - Test your keyboard - Test your keyboard + + Change + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3776,34 +4299,262 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + No Office Suite + No Office Suite + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + Minimal Install + Minimal Install + + + + Please select an option for your install, or use the default: LibreOffice included. + Please select an option for your install, or use the default: LibreOffice included. + + + + release_notes + + + <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> + <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> + + + + Back + Back + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Pick your user name and credentials to login and perform admin tasks + + + + What is your name? + What is your name? + + + + Your Full Name + Your Full Name + + + + What name do you want to use to log in? + What name do you want to use to log in? + + + + Login Name + Login Name + + + + If more than one person will use this computer, you can create multiple accounts after installation. + If more than one person will use this computer, you can create multiple accounts after installation. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + root is not allowed as username. + root is not allowed as username. + + + + What is the name of this computer? + What is the name of this computer? + + + + Computer Name + Computer Name + + + + This name will be used if you make the computer visible to others on a network. + This name will be used if you make the computer visible to others on a network. + + + + localhost is not allowed as hostname. + localhost is not allowed as hostname. + + + + Choose a password to keep your account safe. + Choose a password to keep your account safe. + + + + Password + Password + + + + Repeat Password + Repeat Password + + + + 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. + 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. + + + + Validate passwords quality + Validate passwords quality + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + Log in automatically without asking for the password + Log in automatically without asking for the password + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + Reuse user password as root password + Reuse user password as root password + + + + Use the same password for the administrator account. + Use the same password for the administrator account. + + + + Choose a root password to keep your account safe. + Choose a root password to keep your account safe. + + + + Root Password + Root Password + + + + Repeat Root Password + Repeat Root Password + + + + Enter the same password twice, so that it can be checked for typing errors. + Enter the same password twice, so that it can be checked for typing errors. + + + + welcomeq + + + <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> + <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> + + + About About - + Support Support - + Known issues Known issues - + Release notes Release notes - + Donate Donate diff --git a/lang/calamares_en_GB.ts b/lang/calamares_en_GB.ts index eede481ef..9993454ed 100644 --- a/lang/calamares_en_GB.ts +++ b/lang/calamares_en_GB.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Manage auto-mount settings + + BootInfoWidget - + 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. 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. - + 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. 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. - + 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. 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record of %1 - + Boot Partition Boot Partition - + System Partition System Partition - + Do not install a boot loader Do not install a boot loader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Modules - + Type: Type: - - + + none none - + Interface: Interface: - - Tools - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Running %1 operation. - + Bad working directory path Bad working directory path - + Working directory %1 for python job %2 is not readable. Working directory %1 for python job %2 is not readable. - + Bad main script file Bad main script file - + Main script file %1 for python job %2 is not readable. Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Back - - - - &Next - &Next - - - - &Cancel - &Cancel - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Cancel installation without changing the system. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Installation Failed - + + Error + Error + + + + &Yes + &Yes + + + + &No + &No + + + + &Close + &Close + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Calamares Initialisation Failed - + %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. %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. - + <br/>The following modules could not be loaded: <br/>The following modules could not be loaded: - + + Continue with setup? + Continue with setup? + + + Continue with installation? - + 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> - + + 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> + 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> + + + &Set up now - + + &Install now + &Install now + + + + Go &back + Go &back + + + &Set up - + &Install &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + The installation is complete. Close the installer. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Cancel installation without changing the system. + + + + &Next + &Next + + + + &Back + &Back + + + + &Done + &Done + + + + &Cancel + &Cancel + + + Cancel setup? - + Cancel installation? Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - &Yes - - - - - &No - &No - - - - &Close - &Close - - - - Continue with setup? - Continue with setup? - - - - 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> - 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> - - - - &Install now - &Install now - - - - Go &back - Go &back - - - - &Done - &Done - - - - The installation is complete. Close the installer. - The installation is complete. Close the installer. - - - - Error - Error - - - - Installation Failed - Installation Failed - CalamaresPython::Helper - + Unknown exception type Unknown exception type - + unparseable Python error unparseable Python error - + unparseable Python traceback unparseable Python traceback - + Unfetchable Python error. Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Back - - - - &Next - &Next - - - - &Cancel - &Cancel - - - + %1 Setup Program - + %1 Installer %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... Gathering system information... @@ -498,157 +522,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Form - - After: - After: - - - - Boot loader location: - Boot loader location: - - - + Select storage de&vice: Select storage de&vice: - - - - + + + + Current: Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + Reuse %1 as home partition for %2. Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Boot loader location: + + + <strong>Select a partition to install on</strong> <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI system partition: - + 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. 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - 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. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + 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. + + + 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. 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. - + 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. 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Cleared all mounts for %1 @@ -656,22 +720,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. Clear all temporary mounts. - + Clearing all temporary mounts. Clearing all temporary mounts. - - Cannot get list of temporary mounts. - Cannot get list of temporary mounts. - - - + Cleared all temporary mounts. Cleared all temporary mounts. @@ -679,18 +738,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. The command needs to know the user's name, but no username is defined. @@ -698,100 +757,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - This program will ask you some questions and set up %2 on your computer. - This program will ask you some questions and set up %2 on your computer. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Welcome to the Calamares installer for %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Welcome to the %1 installer.</h1> - - - + Set keyboard model to %1.<br/> Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. The system language will be set to %1. - + The numbers and dates locale will be set to %1. The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - Set timezone to %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Package selection + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + This program will ask you some questions and set up %2 on your computer. + This program will ask you some questions and set up %2 on your computer. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Your username is too long. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Your hostname is too short. + + + + Your hostname is too long. + Your hostname is too long. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Your passwords do not match! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Installation Failed + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Installation Complete + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + The installation of %1 is complete. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Summary + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + This is an overview of what will happen once you start the install procedure. + ContextualProcessJob - + Contextual Processes Job Contextual Processes Job @@ -799,100 +993,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition Create a Partition - - MiB - MiB - - - - Partition &Type: - Partition &Type: - - - - &Primary - &Primary - - - - E&xtended - E&xtended - - - - Fi&le System: - Fi&le System: - - - - LVM LV name - LVM LV name - - - - Flags: - Flags: - - - - &Mount Point: - &Mount Point: - - - + Si&ze: Si&ze: - + + MiB + MiB + + + + Partition &Type: + Partition &Type: + + + + Primar&y + + + + + E&xtended + E&xtended + + + + Fi&le System: + Fi&le System: + + + + LVM LV name + LVM LV name + + + + &Mount Point: + &Mount Point: + + + + Flags: + Flags: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt En&crypt - + Logical Logical - + Primary Primary - + GPT GPT - + Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. The installer failed to create partition on disk '%1'. @@ -900,27 +1130,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Create Partition Table - + Creating a new partition table will delete all existing data on the disk. Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? What kind of partition table do you want to create? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -928,22 +1158,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. The installer failed to create a partition table on %1. @@ -951,45 +1181,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Create user %1 - + Create user <strong>%1</strong>. Create user <strong>%1</strong>. - - Creating user %1. - Creating user %1. + + Preserving home directory + - - Sudoers dir is not writable. - Sudoers dir is not writable. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Cannot create sudoers file for writing. + + Configuring user %1 + - - Cannot chmod sudoers file. - Cannot chmod sudoers file. - - - - Cannot open groups file for reading. - Cannot open groups file for reading. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1223,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1020,18 +1246,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1039,22 +1265,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. Delete partition %1. - + Delete partition <strong>%1</strong>. Delete partition <strong>%1</strong>. - + Deleting partition %1. Deleting partition %1. - + The installer failed to delete partition %1. The installer failed to delete partition %1. @@ -1062,46 +1288,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - 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. - - - + This device has a <strong>%1</strong> partition table. This device has a <strong>%1</strong> partition table. - + 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. 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. - + 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. 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. <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. + + + 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. + 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. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1110,17 +1336,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 Failed to open %1 @@ -1128,7 +1354,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1136,123 +1362,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition Edit Existing Partition - - Content: - Content: + + Con&tent: + - + &Keep &Keep - + Format Format - + Warning: Formatting the partition will erase all existing data. Warning: Formatting the partition will erase all existing data. - + &Mount Point: &Mount Point: - + Si&ze: Si&ze: - + MiB MiB - + Fi&le System: Fi&le System: - + Flags: Flags: - - Mountpoint already in use. Please select another one. - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Form - + En&crypt system En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Passphrase - + Confirm passphrase Confirm passphrase - + + Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Install boot loader on <strong>%1</strong>. - + Setting up mount points. Setting up mount points. @@ -1260,93 +1530,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Form - + &Restart now &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Finish + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Installation Complete - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - The installation of %1 is complete. + + Finish + Finish FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. The installer failed to format partition %1 on disk '%2'. @@ -1354,72 +1612,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source is plugged in to a power source - + The system is not plugged in to a power source. The system is not plugged in to a power source. - + is connected to the Internet is connected to the Internet - + The system is not connected to the Internet. The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. The screen is too small to display the installer. @@ -1427,7 +1685,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1693,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1719,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1727,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1477,17 +1735,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole not installed - + Please install KDE Konsole and try again! Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> Executing script: &nbsp;<code>%1</code> @@ -1495,28 +1753,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Set keyboard model to %1.<br/> - - - - Set keyboard layout to %1/%2. - Set keyboard layout to %1/%2. - - KeyboardQmlViewStep - + Keyboard Keyboard @@ -1524,7 +1769,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Keyboard @@ -1532,65 +1777,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting System locale setting - + 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>. 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>. - + &Cancel &Cancel - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1866,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License License @@ -1606,109 +1874,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - The system language will be set to %1. - - - - The numbers and dates locale will be set to %1. - The numbers and dates locale will be set to %1. - - - + Region: Region: - + Zone: Zone: - - + + &Change... &Change... - - - Set timezone to %1/%2.<br/> - Set timezone to %1/%2.<br/> - LocaleQmlViewStep - + Location Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Location @@ -1716,35 +1977,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2013,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. Generate machine-id. - + Configuration Error + Configuration Error + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 - - No root mount point is set for MachineId. + + 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. NetInstallViewStep - - + Package selection Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2144,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1877,17 +2152,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2170,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Password is too short - + Password is too long Password is too long - + Password is too weak Password is too weak - + Memory allocation error when setting '%1' Memory allocation error when setting '%1' - + Memory allocation error Memory allocation error - + The password is the same as the old one The password is the same as the old one - + The password is a palindrome The password is a palindrome - + The password differs with case changes only The password differs with case changes only - + The password is too similar to the old one The password is too similar to the old one - + The password contains the user name in some form The password contains the user name in some form - + The password contains words from the real name of the user in some form The password contains words from the real name of the user in some form - + The password contains forbidden words in some form The password contains forbidden words in some form - - The password contains less than %1 digits - The password contains less than %1 digits - - - + The password contains too few digits The password contains too few digits - - The password contains less than %1 uppercase letters - The password contains less than %1 uppercase letters - - - + The password contains too few uppercase letters The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - The password contains less than %1 lowercase letters + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - The password contains less than %1 non-alphanumeric characters - - - + The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - The password is shorter than %1 characters - - - + The password is too short The password is too short - - The password is just rotated old one - The password is just rotated old one - - - - The password contains less than %1 character classes - The password contains less than %1 character classes - - - + The password does not contain enough character classes The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - The password contains more than %1 same characters consecutively - - - + The password contains too many same characters consecutively The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - The password contains more than %1 characters of the same class consecutively - - - + The password contains too many characters of the same class consecutively The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - The password contains monotonic sequence longer than %1 characters + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence The password contains too long of a monotonic character sequence - + No password supplied No password supplied - + Cannot obtain random numbers from the RNG device Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 The password fails the dictionary check - %1 - + The password fails the dictionary check The password fails the dictionary check - + Unknown setting - %1 Unknown setting - %1 - + Unknown setting Unknown setting - + Bad integer value of setting - %1 Bad integer value of setting - %1 - + Bad integer value Bad integer value - + Setting %1 is not of integer type Setting %1 is not of integer type - + Setting is not of integer type Setting is not of integer type - + Setting %1 is not of string type Setting %1 is not of string type - + Setting is not of string type Setting is not of string type - + Opening the configuration file failed Opening the configuration file failed - + The configuration file is malformed The configuration file is malformed - + Fatal failure Fatal failure - + Unknown error Unknown error - + Password is empty @@ -2156,40 +2488,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Form - + Product Name - + TextLabel TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2537,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name Name - + Description Description @@ -2210,17 +2550,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Form - + Keyboard Model: Keyboard Model: - + Type here to test your keyboard Type here to test your keyboard @@ -2228,96 +2568,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Form - + What is your name? What is your name? - - What name do you want to use to log in? - What name do you want to use to log in? - - - - Choose a password to keep your account safe. - Choose a password to keep your account safe. - - - - - <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> - <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> - - - - What is the name of this computer? - What is the name of this computer? - - - + Your Full Name - + + What name do you want to use to log in? + What name do you want to use to log in? + + + login - + + What is the name of this computer? + What is the name of this computer? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Choose a password to keep your account safe. + + + + + <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> + <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> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Log in automatically without asking for the password. - + Use the same password for the administrator account. Use the same password for the administrator account. - + Choose a password for the administrator account. Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2325,42 +2665,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI system - + Swap Swap - + New partition for %1 New partition for %1 - + New partition New partition - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2709,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Free Space - - + + New partition New partition - + Name Name - + File System File System - + + File System Label + + + + Mount Point Mount Point - + Size Size @@ -2404,77 +2749,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Form - + Storage de&vice: Storage de&vice: - + &Revert All Changes &Revert All Changes - + New Partition &Table New Partition &Table - + Cre&ate Cre&ate - + &Edit &Edit - + &Delete &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Are you sure you want to create a new partition table on %1? - + Can not create new partition Can not create new partition - + 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. 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. @@ -2482,117 +2827,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Gathering system information... - + Partitions Partitions - - Install %1 <strong>alongside</strong> another operating system. - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Manual</strong> partitioning. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Current: - + After: After: - + No EFI system partition configured No EFI system partition configured - - 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>esp</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. - 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>esp</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. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Boot partition not encrypted - + 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. 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2935,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package Could not select KDE Plasma Look-and-Feel package @@ -2614,17 +2949,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Form - + 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. - + 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. 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. @@ -2632,7 +2967,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2640,17 +2975,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... Saving files for later... - + No files configured to save for later. No files configured to save for later. - + Not all of the configured files could be preserved. Not all of the configured files could be preserved. @@ -2658,14 +2993,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. There was no output from the command. - + Output: @@ -2674,52 +3009,52 @@ Output: - + External command crashed. External command crashed. - + Command <i>%1</i> crashed. Command <i>%1</i> crashed. - + External command failed to start. External command failed to start. - + Command <i>%1</i> failed to start. Command <i>%1</i> failed to start. - + Internal error when starting command. Internal error when starting command. - + Bad parameters for process job call. Bad parameters for process job call. - + External command failed to finish. External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. External command finished with errors. - + Command <i>%1</i> finished with exit code %2. Command <i>%1</i> finished with exit code %2. @@ -2727,89 +3062,94 @@ Output: QObject - - Default Keyboard Model - Default Keyboard Model - - - - - Default - Default - - - - unknown - unknown - - - - extended - extended - - - - unformatted - unformatted - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Unpartitioned space or unknown partition table - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + unknown - - No description provided. - + + extended + extended - - - - + + unformatted + unformatted + + + + swap + swap + + + + + Default + Default + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Unpartitioned space or unknown partition table + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2817,18 +3157,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2836,143 +3176,158 @@ Output: ReplaceWidget - + Form Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. %1 cannot be installed on this partition. - + Data partition (%1) Data partition (%1) - + Unknown system partition (%1) Unknown system partition (%1) - + %1 system partition (%2) %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. <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. - - - + + + <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. <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. - + The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2980,22 +3335,22 @@ Output: ResizePartitionJob - + Resize partition %1. Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. The installer failed to resize partition %1 on disk '%2'. @@ -3003,7 +3358,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3011,18 +3366,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3030,53 +3385,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: For best results, please ensure that this computer: - + System requirements System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - This program will ask you some questions and set up %2 on your computer. - This program will ask you some questions and set up %2 on your computer. - - ScanningDialog - + Scanning storage devices... Scanning storage devices... - + Partitioning Partitioning @@ -3084,29 +3411,29 @@ Output: SetHostNameJob - + Set hostname %1 Set hostname %1 - + Set hostname <strong>%1</strong>. Set hostname <strong>%1</strong>. - + Setting hostname %1. Setting hostname %1. + - Internal Error Internal Error - - + + Cannot write hostname to target system Cannot write hostname to target system @@ -3114,29 +3441,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 Failed to write to %1 - + Failed to write keyboard configuration for X11. Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. Failed to write keyboard configuration to existing /etc/default directory. @@ -3144,82 +3471,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. The installer failed to set flags on partition %1. @@ -3227,42 +3554,42 @@ Output: SetPasswordJob - + Set password for user %1 Set password for user %1 - + Setting password for user %1. Setting password for user %1. - + Bad destination system path. Bad destination system path. - + rootMountPoint is %1 rootMountPoint is %1 - + Cannot disable root account. Cannot disable root account. - + passwd terminated with error code %1. passwd terminated with error code %1. - + Cannot set password for user %1. Cannot set password for user %1. - + usermod terminated with error code %1. usermod terminated with error code %1. @@ -3270,45 +3597,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Set timezone to %1/%2 - + Cannot access selected timezone path. Cannot access selected timezone path. - + Bad path: %1 Bad path: %1 - + Cannot set timezone. Cannot set timezone. - + Link creation failed, target: %1; link name: %2 Link creation failed, target: %1; link name: %2 - + Cannot set timezone, Cannot set timezone, - + Cannot open /etc/timezone for writing Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Cannot chmod sudoers file. + + + + Cannot create sudoers file for writing. + Cannot create sudoers file for writing. + + ShellProcessJob - + Shell Processes Job Shell Processes Job @@ -3316,81 +3680,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - This is an overview of what will happen once you start the install procedure. + + &Yes + &Yes - - - SummaryViewStep - - Summary - Summary + + &No + &No + + + + &Cancel + &Cancel + + + + &Close + &Close TrackingInstallJob - + Installation feedback Installation feedback - + Sending installation feedback. Sending installation feedback. - + Internal error in install-tracking. Internal error in install-tracking. - + HTTP request timed out. HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Machine feedback - + Configuring machine feedback. Configuring machine feedback. - - + + Error in machine feedback configuration. Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. Could not configure machine feedback correctly, Calamares error %1. @@ -3398,106 +3798,97 @@ Output: TrackingPage - + Form Form - + Placeholder Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Unmount file systems. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Your username is too long. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Your hostname is too short. - - - - Your hostname is too long. - Your hostname is too long. - - - - Your passwords do not match! - Your passwords do not match! + + Users + Users UsersViewStep - + Users Users @@ -3505,65 +3896,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3571,106 +3964,106 @@ Output: WelcomePage - + Form Form - - + + Select application and system language + &About + &About + + + Open donations website - + &Donate - + Open help and support website + &Support + &Support + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Release notes - - - &Known issues &Known issues - - &Support - &Support + + Open release notes website + - - &About - &About + + &Release notes + &Release notes - - <h1>Welcome to the %1 installer.</h1> - <h1>Welcome to the %1 installer.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Welcome to the Calamares installer for %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Welcome to the Calamares installer for %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Welcome to the %1 installer.</h1> + + + + %1 support + %1 support + + + About %1 setup - + About %1 installer About %1 installer - + <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. - - - %1 support - %1 support - WelcomeQmlViewStep - + Welcome Welcome @@ -3678,31 +4071,157 @@ Output: WelcomeViewStep - + Welcome Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Configuration Error + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Show debug information + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3710,86 +4229,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + What is your name? + + + + Your Full Name + + + + + What name do you want to use to log in? + What name do you want to use to log in? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + What is the name of this computer? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Choose a password to keep your account safe. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Use the same password for the administrator account. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_eo.ts b/lang/calamares_eo.ts index cc7882cea..8c983a472 100644 --- a/lang/calamares_eo.ts +++ b/lang/calamares_eo.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + La <strong>praŝarga ĉirkaŭaĵo</strong> de ĉi tiu sistemo.<br><br>Pli maljuna x86 sistemoj subtenas nur <strong>BIOS</strong>.<br>Pli sistemoj kutime uzas <strong>EFI</strong>, sed povos ankaŭ aspektas kiel BIOS, sed ŝaltita en kongrua reĝimo. - + 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. - + Tio ĉi sistemo estis ŝaltita per <strong>EFI</strong> praŝarga ĉirkaŭaĵo.<br><br>Agordi praŝargo el EFI, la instalilo devas disponigi praŝargilon, kiel: <strong>GRUB</strong> aŭ <strong>systemd-boot</strong> sur <strong>EFI Sistema Subdisko</strong>. Tio estas aŭtomata, krom se vi selektas manan dispartigon, tiukaze vi devas selekti ĝin, aŭ kreias unu mane. - + 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. - + Tio ĉi sistemo estis ŝaltita per <strong>BIOS</strong> praŝarga ĉirkaŭaĵo.<br><br>Agordi praŝargo el BIOS, la instalilo devas disponigi praŝargilon, kiel: <strong>GRUB</strong>, ĉe la komenco de subdisko aŭ sur la<strong>Ĉefa Ŝargodosiero</strong> apud la komencao de la subdiska tablo (preferred). Tio estas aŭtomata, krom se vi selektas manan dispartigon, tiukaze vi devas manipuli ĝin mane. BootLoaderModel - + Master Boot Record of %1 - + Ĉefa Ŝargodosiero de %1 - + Boot Partition - + Praŝarga Subdisko - + System Partition - + Sistema Subdisko - + Do not install a boot loader - + Ne instalu praŝargilon - + %1 (%2) %1(%2) @@ -50,92 +58,112 @@ Calamares::BlankViewStep - + Blank Page - + Senskriba Paĝo Calamares::DebugWindow - + Form Formularo - + GlobalStorage - + GlobalStorage - + JobQueue - + JobQueue - + Modules Moduloj - + Type: Tipo: - - + + none neniu - + Interface: Interfaco: - - Tools - Iloj + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet + Reŝargu Stilfolio + + + + Displays the tree of widget names in the log (for stylesheet debugging). - + Widget Tree - + KromprogrametArbo - + Debug information - + Sencimiga Informaĵo Calamares::ExecutionViewStep - + Set up Aranĝu - + Install - Instali + Instalu Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Finita @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,240 @@ Calamares::ViewManager - - &Back - &Reen - - - - &Next - &Sekva - - - - &Cancel - &Nuligi - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Nuligi instalado sen ŝanĝante la sistemo. - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + Eraro + + + + &Yes + &Jes + + + + &No + &Ne + + + + &Close + &Fermi + + + Install Log Paste URL - + Retadreso de la alglua servilo - + The upload was unsuccessful. No web-paste was done. - + Alŝuto malsukcesinta. Neniu transpoŝigis al la reto. - + + Install log posted to + +%1 + +Link copied to clipboard + La protokolo de instalado estis enpoŝtita al: + +%1 + +La retadreso estis copiita al vian tondujon. + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now &Aranĝu nun - + + &Install now + &Instali nun + + + + Go &back + Iru &Reen + + + &Set up &Aranĝu - + &Install &Instali - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Nuligi instalado sen ŝanĝante la sistemo. + + + + &Next + &Sekva + + + + &Back + &Reen + + + + &Done + &Finita + + + + &Cancel + &Nuligi + + + Cancel setup? - + Cancel installation? Nuligi instalado? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ĉu vi vere volas nuligi la instalan procedon? La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. - - - - &Yes - &Jes - - - - - &No - &Ne - - - - &Close - &Fermi - - - - Continue with setup? - - - - - 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> - - - - - &Install now - &Instali nun - - - - Go &back - Iru &Reen - - - - &Done - &Finita - - - - The installation is complete. Close the installer. - - - - - Error - Eraro - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Reen - - - - &Next - &Sekva - - - - &Cancel - &Nuligi - - - + %1 Setup Program - + %1 Installer %1 Instalilo + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -498,157 +526,197 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. ChoicePage - + Form Formularo - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: Elektita &tenada aparato - - - - + + + + Current: + Nune: + + + + After: + Poste: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - - - - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Allokigo de la Praŝargilo: + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -656,22 +724,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -679,18 +742,18 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -698,100 +761,235 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Agordaĵo Plenumita + + + + Installation Complete + Instalaĵo Plenumita + + + + The setup of %1 is complete. + La agordaĵo de %1 estas plenumita. + + + + The installation of %1 is complete. + La instalaĵo de %1 estas plenumita. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -799,100 +997,136 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. CreatePartitionDialog - + Create a Partition - Kreiu Subdisko + Kreiu Subdiskon - - MiB - - - - - Partition &Type: - &Speco de Subdisko: - - - - &Primary - &Ĉefsubdisko - - - - E&xtended - &Kromsubdisko - - - - Fi&le System: - &Dosiersistemo: - - - - LVM LV name - LVM LV nomo - - - - Flags: - Flagoj: - - - - &Mount Point: - &Muntopunkto: - - - + Si&ze: &Grandeco: - + + MiB + MiB + + + + Partition &Type: + &Speco de Subdisko: + + + + Primar&y + + + + + E&xtended + &Kromsubdisko + + + + Fi&le System: + &Dosiersistemo: + + + + LVM LV name + LVM LV nomo + + + + &Mount Point: + &Muntopunkto: + + + + Flags: + Flagoj: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt &Ĉifras - + Logical Logika - + Primary Ĉefa - + GPT - + Mountpoint already in use. Please select another one. Muntopunkto jam utiliĝi. Bonvolu elektu alian. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -900,27 +1134,27 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -928,22 +1162,22 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -951,45 +1185,41 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1227,22 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1020,18 +1250,18 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1039,22 +1269,22 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1062,46 +1292,46 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1110,17 +1340,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1128,7 +1358,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. DummyCppJob - + Dummy C++ Job @@ -1136,123 +1366,167 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep &Tenu - + Format - + Strukturu - + Warning: Formatting the partition will erase all existing data. - + Averto: Strukturi la subdiskon, forviŝos ĉiujn eksistantajn datumojn. - + &Mount Point: &Muntopunkto: - + Si&ze: &Grandeco: - + MiB - + MiB - + Fi&le System: &Dosiersistemo: - + Flags: &Flagoj: - - Mountpoint already in use. Please select another one. - Muntopunkto jam utiliĝi. Bonvolu elektu alian. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formularo - + En&crypt system &Ĉifru la sistemo - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1260,166 +1534,154 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. FinishedPage - + Form Formularo - + &Restart now &Restartigu nun - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <h1>Plenumita!</h1><br/>%1 estis agordita sur vian komputilon.<br/>Vi povas nun ekuzi vian novan sistemon. - + <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> - + <html><head/><body><p>Se ĉi tio elektobutono estas elektita, via sistemo restartos senprokraste, kiam vi klikas <span style="font-style:italic;">Finita</span> aŭ vi malfermas la agordilon.</p></body></html> - + <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. - + <h1>Plenumita!</h1><br/>%1 estis instalita sur vian komputilon.<br/>Vi povas nun restartigas en vian novan sistemon, aŭ vi povas pluiri uzi la %2 aŭtonoman sistemon. - + <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> - + <html><head/><body><p>Se ĉi tio elektobutono estas elektita, via sistemo restartos senprokraste, kiam vi klikas <span style="font-style:italic;">Finita</span> aŭ vi malfermas la instalilon.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Agorado Malsukcesis</h1><br/>%1 ne estis agordita sur vian komputilon.<br/>La erara mesaĝo estis: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - + <h1>Instalaĵo Malsukcesis</h1><br/>%1 ne estis instalita sur vian komputilon.<br/>La erara mesaĝo estis: %2. + + + + FinishedQmlViewStep + + + Finish + Pretigu FinishedViewStep - + Finish - - - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + Pretigu FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Strukturu subdiskon %1 (dosiersistemo: %2, grandeco: %3 MiB) ja %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Strukturu <strong>%3MiB</strong> subdiskon <strong>%1</strong> kiel dosiersistemo <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + Strukturanta subdiskon %1 kiel dosiersistemo %2. - + The installer failed to format partition %1 on disk '%2'. - + La instalilo malsukcesis strukturi ls subdiskon %1 sur disko '%2'. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1427,7 +1689,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1697,25 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1723,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1731,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. InitramfsJob - + Creating initramfs. @@ -1477,17 +1739,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1495,28 +1757,15 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1524,7 +1773,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. KeyboardViewStep - + Keyboard @@ -1532,65 +1781,88 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel &Nuligi - + &OK &Daŭrigu + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formularo - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1870,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. LicenseViewStep - + License @@ -1606,109 +1878,102 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... &Ŝanĝu... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1716,35 +1981,35 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2017,130 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. MachineIdJob - + Generate machine-id. Generi maŝino-legitimilo. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2148,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. NotesQmlViewStep - + Notes @@ -1877,17 +2156,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. OEMPage - + Ba&tch: &Baĉo - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2174,317 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2156,40 +2492,48 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PackageChooserPage - + Form Formularo - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2541,12 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PackageModel - + Name - + Description @@ -2210,17 +2554,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. Page_Keyboard - + Form Formularo - + Keyboard Model: - + Type here to test your keyboard @@ -2228,96 +2572,96 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. Page_UserSetup - + Form Formularo - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2325,42 +2669,42 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2369,34 +2713,39 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2404,77 +2753,77 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PartitionPage - + Form Formularo - + Storage de&vice: &Tenada aparato - + &Revert All Changes &Malfari Sanĝojn - + New Partition &Table - + Cre&ate &Kreiu - + &Edit &Redaktu - + &Delete &Forviŝu - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2482,117 +2831,107 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + Nune: - + After: - + Poste: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2939,13 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2614,17 +2953,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PlasmaLnfPage - + Form Formularo - + 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. - + 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. @@ -2632,7 +2971,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PlasmaLnfViewStep - + Look-and-Feel @@ -2640,17 +2979,17 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2658,65 +2997,65 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2724,89 +3063,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - kromsubdisko - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1(%2) - - No product + + unknown - - No description provided. + + extended + kromsubdisko + + + + unformatted + nestrukturita + + + + swap - - - - + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2814,18 +3158,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2833,143 +3177,158 @@ Output: ReplaceWidget - + Form Formularo - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2977,22 +3336,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -3000,7 +3359,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3008,18 +3367,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3027,53 +3386,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3081,29 +3412,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3111,29 +3442,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3141,82 +3472,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3224,42 +3555,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3267,45 +3598,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3313,81 +3681,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Daŭrigu - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &Jes - - - SummaryViewStep - - Summary - + + &No + &Ne + + + + &Cancel + &Nuligi + + + + &Close + &Fermi TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3395,106 +3799,97 @@ Output: TrackingPage - + Form Formularo - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + Demeti dosieraj sistemoj. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3502,65 +3897,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3568,106 +3965,106 @@ Output: WelcomePage - + Form Formularo - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3675,31 +4072,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3707,86 +4230,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_es.ts b/lang/calamares_es.ts index bd190234b..d8aff5cd8 100644 --- a/lang/calamares_es.ts +++ b/lang/calamares_es.ts @@ -1,49 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Gestionar la configuración de montaje automático + + BootInfoWidget - + 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. - El <strong>entorno de arranque<strong> de este sistema.<br><br>Los sistemas x86 sólo soportan <strong>BIOS</strong>.<br>Los sistemas modernos habitualmente usan <strong>EFI</strong>, pero también pueden mostrarse como BIOS si se inician en modo de compatibildiad. + El <strong>entorno de arranque<strong> de este sistema.<br><br>Los sistemas x86 más antiguos solo funcionan con <strong>BIOS</strong>, mientras que los sistemas modernos suelen usan <strong>EFI</strong>, pero también pueden aparece como BIOS si se inician en el modo de retrocompatibilidad. - + 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. - Este sistema se inició con un entorno de arranque <strong>EFI</strong>.<br><br>Para configurar el arranque desde un entorno EFI, este instalador debe desplegar una aplicación de gestor de arranque, como <strong>GRUB</strong> o <strong>systemd-boot</strong> en una <strong>Partición de Sistema EFI</strong>. Esto es automático, a menos que escoja particionamiento manual, en cuyo caso debe escogerlo o crearlo usted mismo. + Este sistema ha iniciado con un entorno de arranque <strong>EFI</strong>.<br><br>Para configurar el arranque desde un entorno EFI este instalador debe instalar gestor de arranque como <strong>GRUB</strong> o <strong>systemd-boot</strong> en una <strong>partición del sistema EFI</strong>. Esto se hará de forma automática a menos que utilices el particionado manual y lo completes todo por tu cuenta. - + 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. - Este sistema fue iniciado con un entorno de arranque <strong>BIOS</strong>.<br><br> -Para configurar el arranque desde un entorno BIOS, este instalador debe instalar un gestor de arranque, como <strong>GRUB</strong>, tanto al principio de una partición o en el <strong>Master Boot Record</strong> (registro maestro de arranque) cerca del principio de la tabla de partición (preferentemente). Esto es automático, a menos que escoja particionamiento manual, en cuayo caso debe establecerlo usted mismo. + Este sistema se ha iniciado con un entorno de arranque <strong>BIOS</strong>.<br><br>Para configurar el arranque desde un entorno BIOS este instalador debe instalar un gestor de arranque, como <strong>GRUB</strong>, ya sea al principio de una partición o en el <strong>Master Boot Record</strong> (registro de arranque principal) casi al principio de la tabla de partición (si es posible). Esto se hará de forma automática a menos que utilices el particionado manual y lo completes todo por tu cuenta. BootLoaderModel - + Master Boot Record of %1 - Master Boot Record de %1 + Registro de arranque principal (MBR) de %1 - + Boot Partition - Partición de Arranque + Partición de arranque - + System Partition - Partición del Sistema + Partición del sistema - + Do not install a boot loader No instalar el gestor de arranque - + %1 (%2) %1 (%2) @@ -51,7 +58,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Calamares::BlankViewStep - + Blank Page Página vacía @@ -59,71 +66,91 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Calamares::DebugWindow - + Form Formulario - + GlobalStorage - Almacenamiento Global + GlobalStorage - + JobQueue - Lista de trabajos pendientes + JobQueue - + Modules Módulos - + Type: Tipo: - - + + none ninguno - + Interface: Interfaz: - - Tools - Herramientas + + Crashes Calamares, so that Dr. Konqui can look at it. + Cuelga y cierra de forma inesperada Calamares para que lo mire el Dr. Konqui. - + + Reloads the stylesheet from the branding directory. + Vuelve a cargar la hoja de estilo desde la carpeta de diseño propio. + + + + Uploads the session log to the configured pastebin. + Sube el registro de la sesión hacia el «pastebin» asignado. + + + + Send Session Log + Enviar registro de sesión + + + Reload Stylesheet - + Recargar hoja de estilo - + + Displays the tree of widget names in the log (for stylesheet debugging). + Muestra el árbol de nombres de widgets en el registro (para la depuración de hojas de estilo). + + + Widget Tree - + Árbol de «widgets» - + Debug information - Información de depuración. + Información de depuración Calamares::ExecutionViewStep - + Set up - + Preparar - + Install Instalar @@ -131,20 +158,20 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Calamares::FailJob - + Job failed (%1) - Trabajo fallido (%1) + La tarea ha fallado (%1) - + Programmed job failure was explicitly requested. - + Se solicitó de manera explícita que la tarea fallara. Calamares::JobThread - + Done Hecho @@ -152,346 +179,347 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Calamares::NamedJob - + Example job (%1) - + Tarea de ejemplo (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Ejecutar la orden «%1» en el sistema a instalar. - + Run command '%1'. - + Ejecutar la orden «%1». - + Running command %1 %2 - Ejecutando comando %1 %2 + Ejecutando orden %1 %2 Calamares::PythonJob - + Running %1 operation. - Ejecutando %1 operación. + Ejecutando operación %1. - + Bad working directory path - Error en la ruta del directorio de trabajo + La ruta de la carpeta de trabajo no es válida - + Working directory %1 for python job %2 is not readable. - El directorio de trabajo %1 para el script de python %2 no se puede leer. + La tarea de python %2 no tiene permisos de lectura en la carpeta de trabajo %1. - + Bad main script file Script principal erróneo - + Main script file %1 for python job %2 is not readable. - El script principal %1 del proceso python %2 no es accesible. + El script principal «%1» de la tarea de python «%2» no es accesible. - + Boost.Python error in job "%1". - Error Boost.Python en el proceso "%1". + Hubo un error Boost.Python en el proceso «%1». Calamares::QmlViewStep - + Loading ... - + Cargando... - + QML Step <i>%1</i>. - + Paso QML <i>%1</i>. - + Loading failed. - + No se ha podido cargar. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Se ha terminado la comprobación de requisitos para el módulo <i>%1</i>. + - + Waiting for %n module(s). - - - + + Esperando a %n módulo. + Esperando a %n módulos. - + (%n second(s)) - - - + + (%n segundo) + (%n segundos) - + System-requirements checking is complete. - + Se ha terminado la comprobación de los requisitos del sistema. Calamares::ViewManager - - &Back - &Atrás - - - - &Next - &Siguiente - - - - &Cancel - &Cancelar - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Cancelar instalación sin cambiar el sistema. - - - + Setup Failed - + El asistente ha fallado - - Would you like to paste the install log to the web? - + + Installation Failed + La instalación ha fallado - - Install Log Paste URL - - - - - The upload was unsuccessful. No web-paste was done. - - - - - Calamares Initialization Failed - La inicialización de Calamares falló - - - - %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. - %1 no se pudo instalar. Calamares no fue capaz de cargar todos los módulos configurados. Esto es un problema con la forma en que Calamares es usado por la distribución - - - - <br/>The following modules could not be loaded: - Los siguientes módulos no se pudieron cargar: - - - - Continue with installation? - - - - - 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> - - - - - &Set up now - - - - - &Set up - - - - - &Install - &Instalar - - - - Setup is complete. Close the setup program. - - - - - Cancel setup? - - - - - Cancel installation? - ¿Cancelar la instalación? - - - - Do you really want to cancel the current setup process? -The setup program will quit and all changes will be lost. - - - - - Do you really want to cancel the current install process? -The installer will quit and all changes will be lost. - ¿Realmente quiere cancelar el proceso de instalación? -Saldrá del instalador y se perderán todos los cambios. - - - - - &Yes - &Sí - - - - - &No - &No - - - - &Close - &Cerrar - - - - Continue with setup? - ¿Continuar con la configuración? - - - - 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> - El instalador %1 va a realizar cambios en su disco para instalar %2.<br/><strong>No podrá deshacer estos cambios.</strong> - - - - &Install now - &Instalar ahora - - - - Go &back - Regresar - - - - &Done - &Hecho - - - - The installation is complete. Close the installer. - La instalación se ha completado. Cierre el instalador. - - - + Error Error - - Installation Failed - Error en la Instalación + + &Yes + &Sí + + + + &No + &No + + + + &Close + &Cerrar + + + + Install Log Paste URL + URL del registro del instalador + + + + The upload was unsuccessful. No web-paste was done. + No se pudo terminar la subida del registro de texto a la web. + + + + Install log posted to + +%1 + +Link copied to clipboard + El registro se ha publicado en + +%1 + +El enlace se ha copiado en el portapapeles. + + + + Calamares Initialization Failed + Calamares no ha podido arrancar bien + + + + %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. + %1 no se pudo instalar. Calamares no ha sido capaz de cargar todos los módulos configurados. Puede que esto sea un problema de la propia distribución y de cómo sus desarrolladores hayan desplegado el instalador. + + + + <br/>The following modules could not be loaded: + Los siguientes módulos no se han podido cargar: + + + + Continue with setup? + ¿Quieres seguir con la configuración? + + + + Continue with installation? + ¿Quieres seguir con la instalación? + + + + 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> + El programa de instalación %1 está a punto de hacer cambios en el disco con el fin de configurar %2.<br/><strong>No podrás deshacer estos cambios.</strong> + + + + 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> + El instalador %1 está a punto de hacer cambios en el disco con el fin de instalar %2.<br/><strong>No podrás deshacer estos cambios.</strong> + + + + &Set up now + &Configurar ahora + + + + &Install now + &Instalar ahora + + + + Go &back + &Volver atrás + + + + &Set up + &Preparar + + + + &Install + &Instalar + + + + Setup is complete. Close the setup program. + Configuración terminada, ya puedes cerrar el asistente de preparación. + + + + The installation is complete. Close the installer. + Instalación terminada, ya puedes cerrar el instalador. + + + + Cancel setup without changing the system. + Cancelar la configuración sin cambiar el sistema. + + + + Cancel installation without changing the system. + Cancelar la instalación sin cambiar el sistema. + + + + &Next + &Siguiente + + + + &Back + &Atrás + + + + &Done + &Hecho + + + + &Cancel + &Cancelar + + + + Cancel setup? + ¿Quieres cancelar la configuración? + + + + Cancel installation? + ¿Quieres cancelar la instalación? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + ¿Seguro que quieres cancelar el proceso de configuración en curso? +El programa se cerrará y todos tus cambios se perderán. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + ¿Seguro que quieres cancelar el proceso de instalación en curso? +El instalador se cerrará y todos tus cambios se perderán. CalamaresPython::Helper - + Unknown exception type - Excepción desconocida + Tipo de excepción desconocida - + unparseable Python error - error unparseable Python + Error de Python no analizable - + unparseable Python traceback - rastreo de Python unparseable + Volcado de errores de Python («traceback») no analizable - + Unfetchable Python error. - Error de Python Unfetchable. - - - - CalamaresUtils - - - Install log posted to: -%1 - + No se puede obtener el error de Python. CalamaresWindow - - &Back - &Atrás - - - - &Next - &Siguiente - - - - &Cancel - &Cancelar - - - + %1 Setup Program - + Programa de configuración de %1 - + %1 Installer - %1 Instalador + Instalador de %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + Establecer la etiqueta del sistema de archivos para «%1». - - Show debug information - Mostrar información de depuración. + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Establecer la etiqueta del sistema de archivos «<strong>%1</strong>» para la partición «<strong>%2</strong>». + + + + The installer failed to update partition table on disk '%1'. + El instalador no ha podido actualizar la tabla de particiones en el disco «%1». CheckerContainer - + Gathering system information... Obteniendo información del sistema... @@ -499,180 +527,215 @@ Saldrá del instalador y se perderán todos los cambios. ChoicePage - + Form Formulario - - After: - Despues: + + Select storage de&vice: + Elige un dispositivo de almacenamiento: - + + + + + Current: + Ahora: + + + + After: + Después: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particionado manual</strong><br/> Puedes crear o cambiar el tamaño de las particiones a tu gusto. + + + + Reuse %1 as home partition for %2. + Reutilizar %1 como partición de datos personales («home») para %2 + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>Elige la partición a reducir, una vez hecho esto arrastra la barra inferior para configurar el espacio restante</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 se reducirá a %2MiB y se creará una nueva partición de %3MiB para %4. + + + Boot loader location: Ubicación del cargador de arranque: - - Select storage de&vice: - Seleccionar dispositivo de almacenamiento: - - - - - - - Current: - Actual: - - - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - - - - - Reuse %1 as home partition for %2. - Volver a usar %1 como partición home para %2 - - - - <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - <strong>Seleccione una partición para reducir el tamaño, a continuación, arrastre la barra inferior para cambiar el tamaño</strong> - - - - %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - - - - + <strong>Select a partition to install on</strong> - <strong>Seleccione una partición para instalar en</strong> + <strong>Elige una partición en la que realizar la instalación</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - No se puede encontrar una partición de sistema EFI en ningún lugar de este sistema. Por favor, vuelva y use el particionamiento manual para establecer %1. + No parece que haya ninguna partición del sistema EFI en el equipo. Puedes volver atrás y preparar %1 con la opción de particionado manual. - + The EFI system partition at %1 will be used for starting %2. - La partición de sistema EFI en %1 se usará para iniciar %2. + La partición del sistema EFI en «%1» se va a usar para arrancar %2. - + EFI system partition: Partición del sistema EFI: - + 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. - Este dispositivo de almacenamiento no parece tener un sistema operativo en él. ¿Qué quiere hacer?<br/>Podrá revisar y confirmar sus elecciones antes de que se haga cualquier cambio en el dispositivo de almacenamiento. + Este dispositivo de almacenamiento no parece tener un sistema operativo dentro. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar los cambios antes de que pase nada. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - <strong>Borrar disco</strong><br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento. + <strong>Borrar el disco</strong><br/>Esto <font color="red">eliminará permanentemente</font> todos los datos en el dispositivo de almacenamiento. - - 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. - %1 se encuentra instalado en este dispositivo de almacenamiento. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. - - - - No Swap - Sin Swap - - - - Reuse Swap - Reusar Swap - - - - Swap (no Hibernate) - Swap (sin hibernación) - - - - Swap (with Hibernate) - Swap (con hibernación) - - - - Swap to file - Swap a archivo - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - <strong>Instalar junto al otro SO</strong><br/>El instalador reducirá la partición del SO existente para tener espacio para instalar %1. + <strong>Instalar al lado</strong><br/>El instalador reducirá el tamaño de una partición y dejará el suficiente para instalar %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - <strong>Reemplazar una partición</strong><br/>Reemplazar una partición con %1. + <strong>Reemplazar una partición</strong><br/>Sustituye el espacio de una de las particiones ya existentes con %1. - + + 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. + %1 se encuentra instalado en este dispositivo de almacenamiento. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar tu elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. + + + 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. - Este dispositivo de almacenamiento parece que ya tiene un sistema operativo instalado en él. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. + Parece que este dispositivo de almacenamiento ya tiene un sistema operativo instalado. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar tu elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. - + 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. - Este dispositivo de almacenamiento contiene múltiples sistemas operativos instalados en él. ¿Qué desea hacer?<br/>Podrá revisar y confirmar su elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. + Este dispositivo de almacenamiento contiene múltiples sistemas operativos instalados en él. ¿Qué quieres hacer?<br/>Podrás revisar y confirmar tu elección antes de que cualquier cambio se haga efectivo en el dispositivo de almacenamiento. + + + + 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/> + Este dispositivo de almacenamiento ya tiene un sistema operativo, pero la tabla de particiones <strong>%1</strong> es diferente de la que se necesita; <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Este dispositivo de almacenamiento tiene alguna de sus particiones <strong>ya montadas</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Este dispositivo de almacenamiento es parte de un <strong>dispositivo RAID</strong> inactivo. + + + + No Swap + Sin «swap» + + + + Reuse Swap + Reutilizar «swap» ya existente + + + + Swap (no Hibernate) + Con «swap» (pero sin hibernación) + + + + Swap (with Hibernate) + Con «swap» (y con hibernación) + + + + Swap to file + Swap en archivo ClearMountsJob - + + Successfully unmounted %1. + «%1» se ha desmontando correctamente. + + + + Successfully disabled swap %1. + El «swap» %1 se ha desactivado correctamente. + + + + Successfully cleared swap %1. + El «swap» %1 se ha vaciado correctamente. + + + + Successfully closed mapper device %1. + El dispositivo de mapeo «%1» se ha cerrado correctamente. + + + + Successfully disabled volume group %1. + El grupo de volúmenes «%1» se ha desactivado correctamente. + + + Clear mounts for partitioning operations on %1 - Limpiar puntos de montaje para operaciones de particionamiento en %1 + Borrar los puntos de montaje para las operaciones de particionado en «%1» - + Clearing mounts for partitioning operations on %1. - Limpiando puntos de montaje para operaciones de particionamiento en %1. + Quitando los puntos de montaje para las operaciones de particionado en «%1». - + Cleared all mounts for %1 - Limpiados todos los puntos de montaje para %1 + Borrar todos los puntos de montaje de «%1» ClearTempMountsJob - + Clear all temporary mounts. - Limpiar todos los puntos de montaje temporales. + Quitar todos los puntos de montaje temporales. - + Clearing all temporary mounts. Limpiando todos los puntos de montaje temporales. - - Cannot get list of temporary mounts. - No se puede obtener la lista de puntos de montaje temporales. - - - + Cleared all temporary mounts. Limpiado todos los puntos de montaje temporales. @@ -680,317 +743,484 @@ Saldrá del instalador y se perderán todos los cambios. CommandList - - + + Could not run command. - No se pudo ejecutar el comando. + No se pudo ejecutar la orden. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - El comando corre en el ambiente anfitrión y necesita saber el directorio raiz, pero no está definido el punto de montaje de la raiz + La orden se ejecuta en el entorno del equipo anfitrión («host») y necesita conocer la ruta de la raíz, pero no hay definido ningún «rootMountPoint». - + The command needs to know the user's name, but no username is defined. - El comando necesita saber el nombre de usuario, pero no hay nombre de usuario definido. + La orden a ejecutar necesita saber el nombre de usuario, pero se ha definido ninguno. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este ordenador no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este ordenador no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. - - - - This program will ask you some questions and set up %2 on your computer. - El programa le preguntará algunas cuestiones y configurará %2 en su ordenador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bienvenido al instalador de Calamares para %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Bienvenido al instalador %1.</h1> - - - + Set keyboard model to %1.<br/> - Establecer el modelo de teclado a %1.<br/> + Establecer el modelo de teclado como %1.<br/> - + Set keyboard layout to %1/%2. - Configurar la disposición de teclado a %1/%2. + Establecer la disposición de teclado a %1/%2. - + + Set timezone to %1/%2. + Configurar el huso horario a %1/%2 + + + The system language will be set to %1. El idioma del sistema se establecerá a %1. - + The numbers and dates locale will be set to %1. - La localización de números y fechas se establecerá a %1. - - - - Set timezone to %1/%2.<br/> - Configurar zona horaria a %1/%2.<br/> - - - - Network Installation. (Disabled: Incorrect configuration) - - - - - Network Installation. (Disabled: Received invalid groups data) - Instalación de red. (Deshabilitada: Se recibieron grupos de datos no válidos) - - - - Network Installation. (Disabled: internal error) - + El formato de números y fechas aparecerá en %1. + Network Installation. (Disabled: Incorrect configuration) + Instalación de red. (Desactivada: configuración incorrecta) + + + + Network Installation. (Disabled: Received invalid groups data) + Instalación de red. (Desactivada: los grupos recibidos no son correctos) + + + + Network Installation. (Disabled: Internal error) + Instalación de red. (Desactivada: error interno) + + + + Network Installation. (Disabled: No package list) + Instalación de red. (Desactivada: sin lista de paquetes) + + + + Package selection + Selección de paquetes + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Instalación a través de la Red. (Desactivada: no se ha podido obtener una lista de paquetes, comprueba tu conexión a la red) + Instalación por Internet. (Desactivada: no se ha podido obtener una lista de paquetes, comprueba tu conexión a la red) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Este equipo no cumple los requisitos mínimos para instalar %1.<br/>La instalación no puede continuar.<a href="#details">Más detalles...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Este equipo no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + El equipo no cumple con alguno de los requisitos recomendados para configurar %1. Se puede continuar con la configuración, pero puede que ciertas funciones no estén disponibles. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + El equipo no cumple con alguno de los requisitos recomendados para instalar %1. Se puede continuar con la instalación, pero puede que ciertas funciones no estén disponibles. + + + + This program will ask you some questions and set up %2 on your computer. + El programa te hará algunas preguntas y configurará %2 en tu equipo. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Te damos la bienvenida al asistente de configuración de %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Te damos la bienvenida al asistente de configuración de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Te damos la bienvenida a Calamares, el instalador de %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Te damos la bienvenida al instalador de %1</h1> + + + + Your username is too long. + Tu nombre de usuario es demasiado largo. + + + + '%1' is not allowed as username. + «%1» no vale como nombre de usuario. + + + + Your username must start with a lowercase letter or underscore. + Los nombres de usuario empiezan con una letra minúscula o un guion bajo. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Solo se permiten letras minúsculas, números, guiones bajos y normales. + + + + Your hostname is too short. + El nombre del equipo es demasiado corto. + + + + Your hostname is too long. + El nombre del equipo es demasiado largo. + + + + '%1' is not allowed as hostname. + «%1» no es un nombre de equipo válido. + + + + Only letters, numbers, underscore and hyphen are allowed. + Solo se permiten letras, números, guiones bajos y normales. + + + + Your passwords do not match! + Parece que las contraseñas no coinciden. + + + + OK! + Entendido + + + + Setup Failed + La configuración ha fallado + + + + Installation Failed + La instalación ha fallado + + + + The setup of %1 did not complete successfully. + No se ha podido terminar correctamente la configuración de %1. + + + + The installation of %1 did not complete successfully. + No se ha podido terminar correctamente la instalación de %1. + + + + Setup Complete + Se ha terminado la configuración + + + + Installation Complete + Se ha terminado la instalación + + + + The setup of %1 is complete. + Se ha terminado la configuración de %1. + + + + The installation of %1 is complete. + Se ha completado la instalación de %1. + + + + Package Selection + Selección de paquetes + + + + Please pick a product from the list. The selected product will be installed. + Hay que elegir uno de los productos a instalar de la lista. + + + + Install option: <strong>%1</strong> + Opción de instalación: <strong>%1</strong> + + + + None + Ninguno + + + + Summary + Resumen + + + + This is an overview of what will happen once you start the setup procedure. + Esto es un resumen muy general de lo que se cambiará una vez empiece el proceso de configuración. + + + + This is an overview of what will happen once you start the install procedure. + Esto es un resumen muy general de lo que se cambiará una vez empiece el proceso de instalación. ContextualProcessJob - + Contextual Processes Job - Tarea Contextual Processes + Tarea de procesos contextuales CreatePartitionDialog - + Create a Partition Crear partición - - MiB - MiB - - - - Partition &Type: - &Tipo de partición: - - - - &Primary - &Primaria - - - - E&xtended - E&xtendida - - - - Fi&le System: - Sistema de archivos: - - - - LVM LV name - Nombre del LV (volumen lógico) del LVM (administrador de LVs) - - - - Flags: - Banderas: - - - - &Mount Point: - Punto de &montaje: - - - + Si&ze: &Tamaño: - + + MiB + MiB + + + + Partition &Type: + &Tipo de partición: + + + + Primar&y + Primar&ia + + + + E&xtended + E&xtendida + + + + Fi&le System: + Sistema de archivos: + + + + LVM LV name + Nombre del LV (volumen lógico) del LVM (administrador de LVs) + + + + &Mount Point: + Punto de &montaje: + + + + Flags: + Indicadores: + + + + Label for the filesystem + Etiqueta para el sistema de archivos + + + + FS Label: + Etiqueta del sist. de arch.: + + + En&crypt &Cifrar - + Logical Lógica - + Primary Primaria - + GPT GPT - + Mountpoint already in use. Please select another one. - Punto de montaje ya en uso. Por favor, seleccione otro. + El punto de montaje ya está en uso y no se puede modificar. + + + + Mountpoint must start with a <tt>/</tt>. + El punto de montaje debe comenzar con un <tt>/</tt>. CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Crear nueva partición %1MiB en %3 (%2) con entradas %4. + + + + Create new %1MiB partition on %3 (%2). + Crear nueva partición %1MiB en %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - + Crear nueva partición %2MiB en %4 (%3) con sistema de archivos %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Crear nueva partición <strong>%1MiB</strong> en <strong>%3</strong> (%2) con entradas<em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Crear nueva partición <strong>%1MiB</strong> en <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + Crear nueva partición <strong>%2MiB</strong> en <strong>%4</strong> (%3) con sistema de archivos <strong>%1</strong>. - + + Creating new %1 partition on %2. Creando nueva %1 partición en %2 - + The installer failed to create partition on disk '%1'. - El instalador fallo al crear la partición en el disco '%1'. + El instalador no pudo particionar el disco «%1». CreatePartitionTableDialog - + Create Partition Table - Crear Tabla de Particiones + Crear tabla de particiones - + Creating a new partition table will delete all existing data on the disk. - Crear una nueva tabla de particiones borrara todos los datos existentes en el disco. + Al crear una tabla de particiones se borrarán todos los datos del disco. - + What kind of partition table do you want to create? - ¿Qué tipo de tabla de particiones desea crear? + Elige el tipo de tabla de particiones que quieres crear: - + Master Boot Record (MBR) Registro de arranque principal (MBR) - + GUID Partition Table (GPT) - Tabla de Particiones GUID (GPT) + Tabla de particiones GUID (GPT) CreatePartitionTableJob - + Create new %1 partition table on %2. - Crear nueva %1 tabla de particiones en %2 + Crear una nueva tabla de particiones %1 en %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - Crear nueva <strong>%1</strong> tabla de particiones en <strong>%2</strong> (%3). + Crear una nueva tabla de particiones <strong>%1</strong> en <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - Creando nueva %1 tabla de particiones en %2. + Creando una nueva tabla de particiones %1 en %2. - + The installer failed to create a partition table on %1. - El instalador fallo al crear la tabla de partición en %1. + El instalador no pudo crear una tabla de particiones en %1. CreateUserJob - + Create user %1 - Crear usuario %1 + Crear el usuario %1 - + Create user <strong>%1</strong>. - Crear usuario <strong>%1</strong>. + Crear el usuario <strong>%1</strong>. - - Creating user %1. - Creando usuario %1. + + Preserving home directory + Preservando la carpeta de usuario («home») - - Sudoers dir is not writable. - El directorio de sudoers no dispone de permisos de escritura. + + + Creating user %1 + Creando el usuario %1 - - Cannot create sudoers file for writing. - No es posible crear el archivo de escritura para sudoers. + + Configuring user %1 + Configurando el usuario %1 - - Cannot chmod sudoers file. - No es posible modificar los permisos de sudoers. - - - - Cannot open groups file for reading. - No es posible abrir el archivo de grupos del sistema. + + Setting file permissions + Configurando permisos de archivo CreateVolumeGroupDialog - + Create Volume Group Crear grupo de volúmenes @@ -998,138 +1228,138 @@ Saldrá del instalador y se perderán todos los cambios. CreateVolumeGroupJob - + Create new volume group named %1. - Crear un nuevo grupo de volúmenes llamado %1. + Crear un nuevo grupo de volúmenes denominado «%1». - + Create new volume group named <strong>%1</strong>. - Crear un nuevo grupo de volúmenes llamado <strong>%1</strong>. + Crear un nuevo grupo de volúmenes denominado «<strong>%1</strong>». - + Creating new volume group named %1. - Creando un nuevo grupo de volúmenes llamado %1. + Creando un nuevo grupo de volúmenes denominado «%1». - + The installer failed to create a volume group named '%1'. - El instalador falló en crear un grupo de volúmenes llamado '%1'. + El instalador no pudo crear un grupo de volúmenes denominado «%1». DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - Desactivar grupo de volúmenes llamado %1. + Desactivar el grupo de volúmenes denominado «%1». - + Deactivate volume group named <strong>%1</strong>. - Desactivar grupo de volúmenes llamado <strong>%1</strong>. + Desactivar el grupo de volúmenes denominado «<strong>%1</strong>». - + The installer failed to deactivate a volume group named %1. - El instalador falló en desactivar el grupo de volúmenes llamado %1. + El instalador no pudo desactivar el grupo de volúmenes denominado «%1». DeletePartitionJob - + Delete partition %1. - Eliminar partición %1. + Eliminar la partición %1. - + Delete partition <strong>%1</strong>. - Eliminar partición <strong>%1</strong>. + Eliminar la partición <strong>%1</strong>. - + Deleting partition %1. - Eliminando partición %1. + Eliminando la partición %1. - + The installer failed to delete partition %1. - El instalador falló al eliminar la partición %1. + El instalador no pudo eliminar la partición %1. DeviceInfoWidget - - 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. - El tipo de <strong>tabla de particiones</strong> en el dispositivo de almacenamiento seleccionado.<br/><br/>La única forma de cambiar el tipo de la tabla de particiones es borrando y creando la tabla de particiones de nuevo, lo cual destruirá todos los datos almacenados en el dispositivo de almacenamiento.<br/>Este instalador mantendrá la tabla de particiones actual salvo que explícitamente se indique lo contrario.<br/>En caso de dudas, GPT es preferible en sistemas modernos. + + This device has a <strong>%1</strong> partition table. + Este dispositivo tiene un tabla de particiones <strong>%1</strong>. + + + + 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. + Este es un dispositivo <strong>«loop»</strong>.<br/><br/>Lo que significa que es un archivo normal que se ha montado como disco virtual de bloques, pero sin tabla de particiones. Normalmente estos puntos de montaje contienen un único sistema de archivos, como una sola partición. - This device has a <strong>%1</strong> partition table. - Este dispositivo tiene un <strong>% 1 </ strong> tabla de particiones. - - - - 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. - Este es un dispositivo <strong>loop</strong>.<br/><br/>Se trata de un pseudo-dispositivo sin tabla de particiones que permite el acceso a los archivos como un dispositivo orientado a bloques. Este tipo de configuración normalmente solo contiene un único sistema de archivos. - - - 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. Este instalador <strong>no puede detectar una tabla de particiones</strong> en el dispositivo de almacenamiento seleccionado.<br><br> El dispositivo no tiene una tabla de particiones o la tabla de particiones está corrupta o es de un tipo desconocido.<br> Este instalador puede crearte una nueva tabla de particiones automáticamente o mediante la página de particionamiento manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este es el tipo de tabla de particiones recomendado para sistemas modernos que arrancan mediante un entorno de arranque <strong>EFI</strong>. - + <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. - <br><br>Este tipo de tabla de partición sólo es aconsejable en sistemas antiguos que se inician desde un entorno de arranque <strong>BIOS</strong>. La tabla GPT está recomendada en la mayoría de los demás casos.<br><br><strong>Advertencia:</strong> La tabla de partición MBR es un estándar obsoleto de la era MS-DOS.<br>Sólo se pueden crear 4 particiones <em>primarias</em>, y de esas 4, una puede ser una partición <em>extendida</em> que, en cambio, puede contener varias particiones <em>lógicas</em>. + <br><br>Este tipo de tabla de partición sólo es aconsejable en sistemas antiguos que se inician desde un entorno de arranque <strong>BIOS</strong>. La tabla GPT está recomendada en la mayoría de los demás casos.<br><br><strong>Advertencia:</strong> La tabla de partición MBR es un estándar obsoleto de la era MS-DOS.<br>Sólo se pueden crear 4 particiones <em>primarias</em>, y de esas 4, una puede ser una partición <em>extendida</em> con varias particiones <em>lógicas</em> dentro. + + + + 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. + El tipo de <strong>tabla de particiones</strong> en el dispositivo de almacenamiento seleccionado.<br/><br/>La única forma de cambiar el tipo de la tabla de particiones es borrando y creando la tabla de particiones de nuevo, lo cual destruirá todos los datos almacenados en el dispositivo de almacenamiento.<br/>Este instalador mantendrá la tabla de particiones actual salvo que explícitamente se indique lo contrario.<br/>En caso de dudas, GPT es preferible en sistemas modernos. DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) - %1-(%2) + %1 - (%2) DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escribir la configuración de LUKS para Dracut en %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - Omitir la escritura de la configuración de LUKS para Dracut: La partición "/" no está cifrada + Omitir la escritura de la configuración de LUKS para Dracut: La partición «/» no está cifrada - + Failed to open %1 - No se pudo abrir %1 + No se pudo abrir «%1» DummyCppJob - + Dummy C++ Job Tarea C++ ficticia @@ -1137,123 +1367,167 @@ Saldrá del instalador y se perderán todos los cambios. EditExistingPartitionDialog - + Edit Existing Partition - Editar Partición Existente + Editar partición ya existente - - Content: - Contenido: + + Con&tent: + Con&tenido: - + &Keep &Mantener - + Format Formato - + Warning: Formatting the partition will erase all existing data. - Advertencia: Formatear la partición borrará todos los datos existentes. + Advertencia: Al formatear la partición se borrarán todos los datos ya existentes. - + &Mount Point: Punto de &montaje: - + Si&ze: &Tamaño: - + MiB MiB - + Fi&le System: - S&istema de archivo: + S&istema de archivos: - + Flags: - Banderas: + Indicadores: - - Mountpoint already in use. Please select another one. - Punto de montaje ya en uso. Por favor, seleccione otro. + + Label for the filesystem + Etiqueta para el sistema de archivos + + + + FS Label: + Etiqueta del sist. de archivos: EncryptWidget - + Form Formulario - + En&crypt system &Cifrar sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Parece que tu sistema puede tener problemas al utilizar un cifrado de disco completo. Ten en cuenta que puedes dejar el cifrado activado, pero el rendimiento puede verse afectado. + + + Passphrase - Frase-contraseña + Contraseña de cifrado - + Confirm passphrase - Confirmar frase-contraseña + Confirmar contraseña de cifrado - + + Please enter the same passphrase in both boxes. - Por favor, introduzca la misma frase-contraseña en ambos recuadros. + Las contraseñas de ambos campos deben coincidir. + + + + ErrorDialog + + + Details: + Detalles: + + + + Would you like to paste the install log to the web? + ¿Quieres subir una copia del registro de instalación a la web? FillGlobalStorageJob - + Set partition information Establecer la información de la partición - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Instalar %1 en una <strong>nueva</strong> partición %2 del sistema con funciones <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. - Instalar %1 en <strong>nuevo</strong> %2 partición del sistema. + Instalar %1 en una <strong>nueva</strong> partición %2 del sistema. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Configurar <strong>nueva</strong> %2 partición con punto de montaje <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Configurar una <strong>nueva</strong> partición %2 con el punto de montaje <strong>%1</strong> y las funciones <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Configurar una <strong>nueva</strong> %2 partición con punto de montaje <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Instalar %2 en %3 partición de sistema <strong>%1</strong> con características <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong> y características <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 en %3 partición del sistema <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. - Instalar gestor de arranque en <strong>%1</strong>. + Instalar el gestor de arranque en <strong>%1</strong>. - + Setting up mount points. Configurando puntos de montaje. @@ -1261,166 +1535,154 @@ Saldrá del instalador y se perderán todos los cambios. FinishedPage - + Form Formulario - + &Restart now &Reiniciar ahora - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <h1>Hemos terminado.</h1><br/>Ahora %1 ya está configurado y listo para usar.<br/>Ya puedes empezar a utilizar tu equipo. - + <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> - + <html><head/><body><p>Al marcar esta casilla el sistema se reiniciará inmediatamente una vez hagas clic en el botón <span style="font-style:italic;">Hecho</span> o al cerrar el programa de configuración.</p></body></html> - + <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. - <h1>Listo.</h1><br/>%1 ha sido instalado en su equipo.<br/>Ahora puede reiniciar hacia su nuevo sistema, o continuar utilizando %2 Live. + <h1>Hemos terminado.</h1><br/>Ahora %1 está instalado en tu equipo.<br/>Puedes reiniciar para empezar a utilizar tu nuevo sistema o seguir en el entorno temporal («live») de %2. - + <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> - + <html><head/><body><p>Al marcar esta casilla el sistema se reiniciará inmediatamente una vez hagas clic en el botón <span style="font-style:italic;">Hecho</span> o al cerrar el instalador.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>La configuración ha fallado</h1><br/>%1 no ha podido configurar tu equipo.<br/>El mensaje de error fue: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - <h1>La instalación falló</h1><br/>%1 no se ha instalado en su equipo.<br/>El mensaje de error fue: %2. + <h1>La instalación ha fallado</h1><br/>%1 no se ha instalado en tu equipo.<br/>El mensaje de error fue: %2. + + + + FinishedQmlViewStep + + + Finish + Terminar FinishedViewStep - + Finish - Finalizar - - - - Setup Complete - - - - - Installation Complete - Instalación completada - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - Se ha completado la instalación de %1. + Terminar FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Formatear partición %1 (sistema de archivos: %2, tamaño: %3 MiB) en %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatear <strong>%3MiB</strong> partición «<strong>%1</strong>» con sistema de archivos <strong>%2</strong>. - + Formatting partition %1 with file system %2. - Formateando partición %1 con sistema de ficheros %2. + Formateando partición «%1» con sistema de archivos %2. - + The installer failed to format partition %1 on disk '%2'. - El instalador falló al formatear la partición %1 del disco '%2'. + El instalador no ha podido formatear la partición %1 en el disco «%2». GeneralRequirements - + has at least %1 GiB available drive space - + tiene al menos %1 GiB de espacio disponible en el disco - + There is not enough drive space. At least %1 GiB is required. - + No hay suficiente espació en el disco duro. Se requiere al menos %1 GB libre. - + has at least %1 GiB working memory - + tiene al menos %1 GB de memoria. - + The system does not have enough working memory. At least %1 GiB is required. - + El sistema no tiene suficiente memoria; se necesita un mínimo de %1 GB. - + is plugged in to a power source esta conectado a una fuente de alimentación - + The system is not plugged in to a power source. El sistema no esta conectado a una fuente de alimentación. - + is connected to the Internet - esta conectado a Internet + está conectado a Internet - + The system is not connected to the Internet. El sistema no esta conectado a Internet - + is running the installer as an administrator (root) - + esta ejecutándose con permisos de administrador («root»). - + The setup program is not running with administrator rights. - - - - - The installer is not running with administrator rights. El instalador no esta ejecutándose con permisos de administrador. - + + The installer is not running with administrator rights. + El instalador no se está ejecutando con permisos de administrador. + + + has a screen large enough to show the whole installer - + tiene una pantalla lo suficientemente grande como para mostrar todo el instalador - + The screen is too small to display the setup program. - + La pantalla es demasiado pequeña para mostrar el instalador. - + The screen is too small to display the installer. La pantalla es demasiado pequeña para mostrar el instalador. @@ -1428,96 +1690,83 @@ Saldrá del instalador y se perderán todos los cambios. HostInfoJob - + Collecting information about your machine. - + Recopilando información sobre su máquina. IDJob - - + + + - OEM Batch Identifier - + Identificador de lote OEM - + Could not create directories <code>%1</code>. - + No se pudieron crear las carpetas <code>%1</code>. + + + + Could not open file <code>%1</code>. + No se pudo abrir el archivo <code>%1</code>. - Could not open file <code>%1</code>. - - - - Could not write to file <code>%1</code>. - + No se pudo escribir en el archivo <code>%1</code>. InitcpioJob - + Creating initramfs with mkinitcpio. - + Creando el «initramfs» con «mkinitcpio». InitramfsJob - + Creating initramfs. - + Creando el «initramfs». InteractiveTerminalPage - + Konsole not installed - Konsole no está instalada + Konsole no está instalado - + Please install KDE Konsole and try again! - ¡Por favor, instale KDE Konsole e inténtelo de nuevo! + Instala KDE Konsole y prueba a lanzar este asistente otra vez. - + Executing script: &nbsp;<code>%1</code> - Ejecutando script: &nbsp;<code>%1</code> + Ejecutando el script: &nbsp;<code>%1</code> InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Establecer el modelo de teclado a %1.<br/> - - - - Set keyboard layout to %1/%2. - Configurar la disposición de teclado a %1/%2. - - KeyboardQmlViewStep - + Keyboard Teclado @@ -1525,7 +1774,7 @@ Saldrá del instalador y se perderán todos los cambios. KeyboardViewStep - + Keyboard Teclado @@ -1533,183 +1782,199 @@ Saldrá del instalador y se perderán todos los cambios. LCLocaleDialog - + System locale setting Configuración regional del sistema. - + 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>. - La configuración regional del sistema afecta al idioma y a al conjunto de caracteres para algunos elementos de interfaz de la linea de comandos.<br/>La configuración actual es <strong>%1</strong>. + La configuración regional del sistema afecta al idioma y al tipo de caracteres que se muestran en algunos elementos del terminal.<br/>El modo actual está establecido a «<strong>%1</strong>». - + &Cancel &Cancelar - + &OK &Aceptar + + LOSHJob + + + Configuring encrypted swap. + Configurando la memoria de intercambio («swap») cifrada. + + + + No target system available. + No parece que haya ningún sistema al que aplicar las operaciones. + + + + No rootMountPoint is set. + No se ha definido «rootMountPoint». + + + + No configFilePath is set. + No se ha definido «configFilePath». + + LicensePage - + Form Formulario - + <h1>License Agreement</h1> - + <h1>Contrato de licencia</h1> - + I accept the terms and conditions above. Acepto los términos y condiciones anteriores. - + Please review the End User License Agreements (EULAs). - + Revisa los contratos de licencia para el usuario final (CLUF). - + This setup procedure will install proprietary software that is subject to licensing terms. - + Este asistente instalará software privativo, o no libre, que está sujeto a términos de licencia especiales. - + If you do not agree with the terms, the setup procedure cannot continue. - + Si no estás de acuerdo con estas licencias la configuración no puede continuar. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Este procedimiento de configuración puede instalar software privativo (o no libre) sujeto a términos de licencia especiales, con el fin de proporcionar características adicionales y mejorar la experiencia del usuario. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Si no estás de acuerdo con estas licencias no se instalará dicho software y se sustituirá por alternativas libres, de código abierto. LicenseViewStep - + License - Licencia + Contrato LicenseWidget - + URL: %1 - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - <strong>%1 driver</strong><br/>por %2 + <strong>controlador %1</strong><br/> de %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - <strong>%1 driver gráficos</strong><br/><font color="Grey">por %2</font> + <strong>controlador gráfico %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - <strong>%1 plugin del navegador</strong><br/><font color="Grey">por %2</font> + <strong>extensión del navegador %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - <strong>%1 codec</strong><br/><font color="Grey">por %2</font> + <strong>códec %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - <strong>%1 paquete</strong><br/><font color="Grey">por %2</font> + <strong>paquete %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - <strong>%1</strong><br/><font color="Grey">por %2</font> + <strong>%1</strong><br/><font color="Grey">de %2</font> - + File: %1 - + Archivo: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text - + Ocultar el texto legal + + + + Show the license text + Ver el texto legal + + + + Open license agreement in browser. + Abrir el texto legal en el navegador. LocalePage - - The system language will be set to %1. - El idioma del sistema se establecerá a %1. - - - - The numbers and dates locale will be set to %1. - La localización de números y fechas se establecerá a %1. - - - + Region: Región: - + Zone: - Zona: + Huso horario: - - + + &Change... &Cambiar... - - - Set timezone to %1/%2.<br/> - Configurar zona horaria a %1/%2.<br/> - LocaleQmlViewStep - + Location Ubicación + + LocaleTests + + + Quit + Salir + + LocaleViewStep - + Location Ubicación @@ -1717,493 +1982,574 @@ Saldrá del instalador y se perderán todos los cambios. LuksBootKeyFileJob - + Configuring LUKS key file. - + Configurando archivo de claves LUKS. - - + + No partitions are defined. - + Se ha definido ninguna partición. - - - + + + Encrypted rootfs setup error - + Se ha producido un error del «rootfs» cifrado - + Root partition %1 is LUKS but no passphrase has been set. - + La partición root %1 es LUKS pero no se ha establecido ninguna frase de contraseña. - + Could not create LUKS key file for root partition %1. - + No se pudo crear el archivo de clave LUKS para la partición root %1. - + Could not configure LUKS key file on partition %1. - + No se pudo configurar el archivo de clave LUKS para la partición root %1. MachineIdJob - + Generate machine-id. - Generar identificación-de-máquina. + Generar el identificador único de máquina. - + Configuration Error Error de configuración - + No root mount point is set for MachineId. - + No hay ningún punto de montaje raíz («root») establecido para «MachineId». + + + + Map + + + Timezone: %1 + Huso horario: %1 + + + + 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. + Seleccione su ubicación preferida en el mapa para que el instalador pueda sugerir la ubicación + y la configuración de la zona horaria para usted. Puede ajustar la configuración sugerida a continuación. Busque en el mapa arrastrando + para mover y usar los botones +/- para acercar/alejar o usar el desplazamiento del mouse para acercar. NetInstallViewStep - - + Package selection Selección de paquetes - + Office software - + Programa de oficina + + + + Office package + Paquete de oficina + + + + Browser software + Explorador de archivos + + + + Browser package + Paquetes de explorador de archivos + + + + Web browser + Navegador web + + + + Kernel + Kernel + + + + Services + Servicios + + + + Login + Iniciar sesion + + + + Desktop + Escritorio + + + + Applications + Aplicaciones + + + + Communication + Comunicación + + + + Development + Desarrollo + + + + Office + Oficina + + + + Multimedia + Multimedia + + + + Internet + Internet - Office package - + Theming + Temas - Browser software - + Gaming + Juegos - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + Herramientas NotesQmlViewStep - + Notes - + Notas OEMPage - + Ba&tch: - + Lo&te: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Introduce un identificador de lote, se almacenará en el sistema a instalar.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - + <html><head/><body>Configuración OEM</h1><p>Calamares usará la configuración OEM al configurar el sistema de destino.</p></body></html> OEMViewStep - + OEM Configuration - + Configuración OEM - + Set the OEM Batch Identifier to <code>%1</code>. - + Define el identificador de lote OEM en <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. + Seleccione su región preferida o use la configuración predeterminada. + + + + + + Timezone: %1 + Huso horario: %1 + + + + Select your preferred Zone within your Region. + Elige un huso horario en tu región. + + + + Zones + Husos + + + + You can fine-tune Language and Locale settings below. + A continuación puedes ajustar la configuración regional. PWQ - + Password is too short La contraseña es demasiado corta - + Password is too long La contraseña es demasiado larga - + Password is too weak La contraseña es demasiado débil - + Memory allocation error when setting '%1' - Error de asignación de memoria al establecer '%1' + No parece que haya suficiente memoria como para establecer «%1» - + Memory allocation error Error de asignación de memoria - + The password is the same as the old one La contraseña es la misma que la antigua - + The password is a palindrome La contraseña es un palíndromo - + The password differs with case changes only - La contraseña difiere sólo en cambios de mayúsculas/minúsculas + La contraseña solo cambia las mayúsculas y minúsculas - + The password is too similar to the old one La contraseña es demasiado similar a la antigua - + The password contains the user name in some form - La contraseña contiene el nombre de usuario de alguna forma + La contraseña contiene partes del nombre de usuario - + The password contains words from the real name of the user in some form - La contraseña contiene palabras procedentes del nombre real del usuario de alguna forma + La contraseña contiene partes del nombre real del usuario - + The password contains forbidden words in some form - La contraseña contiene palabras prohibidas de alguna forma + La contraseña contiene alguna palabra prohibida - - The password contains less than %1 digits - La contraseña contiene menos de %1 dígitos - - - + The password contains too few digits - La contraseña contiene demasiado pocos dígitos + La contraseña no tiene suficientes números - - The password contains less than %1 uppercase letters - La contraseña contiene menos de %1 letras mayúsculas - - - + The password contains too few uppercase letters - La contraseña contiene demasiado pocas letras mayúsculas + La contraseña no tiene suficientes mayúsculas + + + + The password contains fewer than %n lowercase letters + + La contraseña contiene menos de %n letras minúsculas + La contraseña contiene menos de %n letras minúsculas + - - The password contains less than %1 lowercase letters - La contraseña contiene menos de %1 letras mayúsculas - - - + The password contains too few lowercase letters - La contraseña contiene demasiado pocas letras minúsculas + La contraseña contiene muy pocas letras minúsculas - - The password contains less than %1 non-alphanumeric characters - La contraseña contiene menos de %1 caracteres alfanuméricos - - - + The password contains too few non-alphanumeric characters - La contraseña contiene demasiado pocos caracteres alfanuméricos + La contraseña no tiene suficientes caracteres alfanuméricos - - The password is shorter than %1 characters - La contraseña tiene menos de %1 caracteres - - - + The password is too short La contraseña es demasiado corta - - The password is just rotated old one - La contraseña sólo es la antigua invertida - - - - The password contains less than %1 character classes - La contraseña contiene menos de %1 clases de caracteres - - - + The password does not contain enough character classes - La contraseña no contiene suficientes clases de caracteres + La contraseña no contiene suficientes tipos de caracteres - - The password contains more than %1 same characters consecutively - La contraseña contiene más de %1 caracteres iguales consecutivamente - - - + The password contains too many same characters consecutively - La contraseña contiene demasiados caracteres iguales consecutivamente + La contraseña contiene demasiados caracteres iguales consecutivos - - The password contains more than %1 characters of the same class consecutively - La contraseña contiene más de %1 caracteres de la misma clase consecutivamente - - - + The password contains too many characters of the same class consecutively - La contraseña contiene demasiados caracteres de la misma clase consecutivamente + La contraseña contiene demasiados caracteres seguidos del mismo tipo + + + + The password contains fewer than %n digits + + La contraseña contiene menos de %n dígitos + La contraseña contiene menos de %n dígitos + + + + + The password contains fewer than %n uppercase letters + + La contraseña contiene menos de %n letras mayúsculas + La contraseña contiene menos de %n letras mayúsculas + + + + + The password contains fewer than %n non-alphanumeric characters + + La contraseña contiene menos de %n caracteres no alfanuméricos + La contraseña contiene menos de %n caracteres no alfanuméricos + + + + + The password is shorter than %n characters + + La contraseña es más corta que %n caracteres + La contraseña es más corta que %n caracteres + - - The password contains monotonic sequence longer than %1 characters - La contraseña contiene una secuencia monótona de más de %1 caracteres + + The password is a rotated version of the previous one + La contraseña es una versión rotada de la anterior. + + + + The password contains fewer than %n character classes + + La contraseña contiene menos de %n clases de caracteres + La contraseña contiene menos de %n clases de caracteres + + + + + The password contains more than %n same characters consecutively + + La contraseña contiene más de %n caracteres iguales consecutivos + La contraseña contiene más de %n caracteres iguales consecutivos + + + + + The password contains more than %n characters of the same class consecutively + + La contraseña contiene más de %n caracteres de la misma clase consecutivamente + La contraseña contiene más de %n caracteres de la misma clase consecutivamente + + + + + The password contains monotonic sequence longer than %n characters + + La contraseña contiene una secuencia monótona de más de %n caracteres + La contraseña contiene una secuencia monótona de más de %n caracteres + - + The password contains too long of a monotonic character sequence La contraseña contiene una secuencia monótona de caracteres demasiado larga - + No password supplied No se proporcionó contraseña - + Cannot obtain random numbers from the RNG device No se puede obtener números aleatorios del dispositivo RNG (generador de números aleatorios) - - - Password generation failed - required entropy too low for settings - La generación de contraseña falló - la entropía requerida es demasiado baja para la configuración - - - - The password fails the dictionary check - %1 - La contraseña no paso el test de diccionario - %1 - - - - The password fails the dictionary check - La contraseña no pasó el test de diccionario - - - - Unknown setting - %1 - Configuración desconocida - %1 - - - - Unknown setting - Configuración desconocida - - - - Bad integer value of setting - %1 - Valor entero de la configuración erróneo - %1 - - - - Bad integer value - Valor entero erróneo - - - - Setting %1 is not of integer type - La configuración %1 no es de tipo entero - - - - Setting is not of integer type - La configuración no es de tipo entero - - Setting %1 is not of string type - La configuración %1 no es de tipo cadena de caracteres + Password generation failed - required entropy too low for settings + No se pudo generar la contraseña; no hay suficiente entropía para ello - Setting is not of string type - La configuración no es de tipo cadena de caracteres + The password fails the dictionary check - %1 + La contraseña contiene una palabra del diccionario (%1), por lo que ha fallado el nivel de seguridad necesario - + + The password fails the dictionary check + La contraseña contiene una palabra del diccionario, por lo que ha fallado el nivel de seguridad necesario + + + + Unknown setting - %1 + Ajuste desconocido; %1 + + + + Unknown setting + Ajuste desconocido + + + + Bad integer value of setting - %1 + El siguiente ajuste no es un número entero; %1 + + + + Bad integer value + Hay un número que no es de tipo entero + + + + Setting %1 is not of integer type + La el ajuste %1 no es un número entero + + + + Setting is not of integer type + El ajuste no es un número entero + + + + Setting %1 is not of string type + El ajuste %1 no contiene una cadena de caracteres + + + + Setting is not of string type + El ajuste no es una cadena de caracteres + + + Opening the configuration file failed No se pudo abrir el fichero de configuración - + The configuration file is malformed - El fichero de configuración está mal formado + El archivo de configuración tiene un formato desconocido o incorrecto - + Fatal failure Fallo fatal - + Unknown error Error desconocido - + Password is empty - + La contraseña está vacía. PackageChooserPage - + Form Formulario - + Product Name - + Nombre del producto - + TextLabel - Etiqueta de texto + TextLabel - + Long Product Description - + Descripción larga del producto - + Package Selection - + Selección de paquetes - + Please pick a product from the list. The selected product will be installed. - + Elige un producto de la lista para instalarlo. + + + + PackageChooserQmlViewStep + + + Packages + Paquetes PackageChooserViewStep - + Packages - + Paquetes PackageModel - + Name Nombre - + Description Descripción @@ -2211,157 +2557,157 @@ Saldrá del instalador y se perderán todos los cambios. Page_Keyboard - + Form Formulario - + Keyboard Model: Modelo de teclado: - + Type here to test your keyboard - Escriba aquí para comprobar su teclado + Escribe aquí para probar la salida del teclado Page_UserSetup - + Form Formulario - + What is your name? - Nombre + ¿Cómo te llamas? - + + Your Full Name + Tu nombre completo + + + What name do you want to use to log in? - ¿Qué nombre desea usar para ingresar? + ¿Qué nombre quieres usar para iniciar sesión? - - Choose a password to keep your account safe. - Elija una contraseña para mantener su cuenta segura. + + login + minombredeusuario - - - <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> - <small>Ingrese la misma contraseña dos veces para poder revisar los errores al escribir. Una buena contraseña debe contener una mezcla entre letras, números y puntuación, deberá contener al menos ocho caracteres de longitud, y ser cambiada con regularidad.</small> - - - + What is the name of this computer? + ¿Qué nombre le ponemos al equipo? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>Este nombre será visible al compartir cosas en red.</small> + + + + Computer Name Nombre del equipo - - Your Full Name - + + Choose a password to keep your account safe. + Elige una contraseña para proteger tu cuenta. - - login - + + + <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> + <small>Escribe dos veces la misma contraseña, para que se pueda comprobar si hay errores de escritura. Una buena contraseña contendrá una combinación de letras, números y signos de puntuación; tiene por lo menos ocho caracteres y hay que cambiarla cada cierto tiempo.</small> - - <small>This name will be used if you make the computer visible to others on a network.</small> - <small>Este nombre será utilizado si hace este equipo visible para otros en una red.</small> - - - - Computer Name - - - - - + + Password - + Contraseña - - + + Repeat Password - + Repite la contraseña - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Cuando se marca esta casilla se comprueba la seguridad de la contraseña y no se podrá usar una débil. - + Require strong passwords. - + Requiere contraseñas fuertes. - + Log in automatically without asking for the password. - Conectarse automaticamente sin pedir la contraseña. + Iniciar sesión automáticamente sin pedir la contraseña - + Use the same password for the administrator account. - Usar la misma contraseña para la cuenta de administrador. + Utilizar la misma contraseña para la cuenta de administrador. - + Choose a password for the administrator account. - Elegir una contraseña para la cuenta de administrador. + Elige una contraseña para la cuenta de administrador. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - <small>Escriba dos veces la contraseña para que se puede verificar en caso de errores al escribir.</small> + <small>Escribe dos veces la contraseña para comprobar si tiene errores.</small> PartitionLabelsView - + Root - Root + Raíz - + Home - Inicio + Datos de usuario + + + + Boot + Arranque - Boot - Boot - - - EFI system Sistema EFI - + Swap Swap - + New partition for %1 Nueva partición de %1 - + New partition - Partición nueva + Nueva partición - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2716,39 @@ Saldrá del instalador y se perderán todos los cambios. PartitionModel - - + + Free Space Espacio libre - - + + New partition Partición nueva - + Name Nombre - + File System Sistema de archivos - + + File System Label + Etiqueta del sistema de archivos + + + Mount Point Punto de montaje - + Size Tamaño @@ -2405,235 +2756,225 @@ Saldrá del instalador y se perderán todos los cambios. PartitionPage - + Form Formulario - + Storage de&vice: Dispositivo de almacenamiento: - + &Revert All Changes &Deshacer todos los cambios - + New Partition &Table Nueva &tabla de particiones - + Cre&ate Cre&ar - + &Edit &Editar - + &Delete &Borrar - + New Volume Group Nuevo grupo de volúmenes - + Resize Volume Group Cambiar el tamaño del grupo de volúmenes - + Deactivate Volume Group Desactivar grupo de volúmenes - + Remove Volume Group - Remover grupo de volúmenes + Eliminar grupo de volúmenes - + I&nstall boot loader on: - Instalar gestor de arranque en: + I&nstalar gestor de arranque en: - + Are you sure you want to create a new partition table on %1? - ¿Está seguro de querer crear una nueva tabla de particiones en %1? + ¿Estás seguro de que quieres crear una nueva tabla de particiones en %1? - + Can not create new partition - No se puede crear una partición nueva + No se pudo crear una partición nueva - + 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. - La tabla de particiones en %1 tiene %2 particiones primarias y no se pueden agregar más. Por favor remueva una partición primaria y agregue una partición extendida en su reemplazo. + La tabla de particiones en %1 ya tiene %2 particiones primarias, y no se puede añadir ninguna más. Quita una partición primaria y sustitúyela por una extendida para poder añadir particiones lógicas en su interior. PartitionViewStep - + Gathering system information... - Obteniendo información del sistema... + Recogiendo información sobre el sistema... - + Partitions Particiones - - Install %1 <strong>alongside</strong> another operating system. - Instalar %1 <strong>junto a</strong> otro sistema operativo. + + Unsafe partition actions are enabled. + Se han activado las particiones inseguras. - - <strong>Erase</strong> disk and install %1. - <strong>Borrar</strong> disco e instalar %1. + + Partitioning is configured to <b>always</b> fail. + Se ha configurado el particionado para que falle <b>siempre</b>. - - <strong>Replace</strong> a partition with %1. - <strong>Reemplazar</strong> una partición con %1. + + No partitions will be changed. + No se cambiará ninguna partición. - - <strong>Manual</strong> partitioning. - Particionamiento <strong>manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instalar %1 <strong>junto a</strong> otro sistema operativo en disco <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Borrar</strong> disco <strong>%2</strong> (%3) e instalar %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Reemplazar</strong> una partición en disco <strong>%2</strong> (%3) con %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particionamiento <strong>manual</strong> en disco <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disco <strong>%1<strong> (%2) - - - + Current: - Corriente + Ahora: - + After: - Despúes: + Después: - + No EFI system partition configured No hay una partición del sistema EFI configurada - - 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>esp</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. - Una partición EFI del sistema es necesaria para empezar %1.<br/><br/>Para configurar una partición EFI, vuelva atrás y seleccione crear un sistema de archivos FAT32 con el argumento <strong>esp</strong> activado y montada en <strong>%2</strong>.<br/><br/>Puede continuar sin configurar una partición EFI pero su sistema puede fallar al arrancar. + + EFI system partition configured incorrectly + La partición del sistema EFI no se ha configurado bien - - EFI system partition flag not set - Bandera EFI no establecida en la partición del sistema + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Se necesita una partición EFI para arrancar %1.<br/><br/>Para establecer una partición EFI vuelve atrás y selecciona o crea un sistema de archivos adecuado. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Una partición EFI del sistema es necesaria para empezar %1.<br/><br/>Una partición EFI fue configurada para ser montada en <strong>%2</strong> pero su argumento <strong>esp</strong> no fue seleccionado.<br/>Para activar el argumento, vuelva atrás y edite la partición.<br/><br/>Puede continuar sin configurar el argumento pero su sistema puede fallar al arrancar. + + The filesystem must be mounted on <strong>%1</strong>. + El sistema de archivos debe estar montado en <strong>%1</strong>. - + + The filesystem must have type FAT32. + El sistema de archivos debe ser de tipo FAT32. + + + + The filesystem must be at least %1 MiB in size. + El sistema de archivos debe tener al menos %1 MiB de tamaño. + + + + The filesystem must have flag <strong>%1</strong> set. + El sistema de archivos debe tener establecido el indicador <strong>%1.</strong> + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Puedes seguir con la instalación sin haber establecido una partición del sistema EFI, pero puede que el sistema no arranque. + + + Option to use GPT on BIOS - + Opción para usar GPT en BIOS - - 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. - + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + Una tabla de particiones GPT es lo preferible en casi todos los casos. Este instalador también la admite para los sistemas más antiguos basados en arranque por BIOS.<br/><br/>Para configurar una partición GPT en BIOS, (si aún no lo has hecho) vuelve atrás y configura la tabla de particiones como GPT, luego crea una partición sin formato de 8 MB con el indicador <strong>bios_grub</strong> marcado.<br/><br/>Se necesita una partición de 8 MB sin formatear para arrancar %1 en un sistema BIOS con GPT. - + Boot partition not encrypted - Partición de arranque no cifrada + Partición de arranque sin cifrar - + 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. Se estableció una partición de arranque aparte junto con una partición raíz cifrada, pero la partición de arranque no está cifrada.<br/><br/>Hay consideraciones de seguridad con esta clase de instalación, porque los ficheros de sistema importantes se mantienen en una partición no cifrada.<br/>Puede continuar si lo desea, pero el desbloqueo del sistema de ficheros ocurrirá más tarde durante el arranque del sistema.<br/>Para cifrar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Cifrar</strong> en la ventana de creación de la partición. - + has at least one disk device available. - + tiene al menos un dispositivo de disco disponible. - + There are no partitions to install on. - + No hay particiones donde instalar. PlasmaLnfJob - + Plasma Look-and-Feel Job - Tarea Plasma Look-and-Feel + Tarea de aspecto de Plasma - - + + Could not select KDE Plasma Look-and-Feel package - No se pudo seleccionar el paquete Plasma Look-and-Feel de KDE + No se pudo seleccionar el paquete de aspecto de KDE Plasma PlasmaLnfPage - + Form Formulario - + 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. - + Elige un aspecto para el escritorio KDE Plasma. También puedes omitir este paso y configurar la apariencia una vez el sistema esté configurado. Al hacer clic en cualquiera de los elementos verás una vista previa del estilo. - + 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. - Elija una apariencia para KDE Plasma Desktop. También puede omitir este paso y configurar el aspecto una vez que el sistema está instalado. Al hacer clic en una selección de apariencia, obtendrá una vista previa en vivo de esa apariencia. + Elige un aspecto para el escritorio KDE Plasma. También puedes omitir este paso y configurar la apariencia una vez el sistema esté instalado. Al hacer clic en cualquiera de los elementos verás una vista previa del estilo. PlasmaLnfViewStep - + Look-and-Feel Apariencia @@ -2641,195 +2982,201 @@ Saldrá del instalador y se perderán todos los cambios. PreserveFiles - + Saving files for later ... - Guardando archivos para después ... + Guardando archivos para más tarde... - + No files configured to save for later. - No hay archivos configurados para guardarlos para después. + No hay archivos configurados para guardarse más tarde. - + Not all of the configured files could be preserved. - No todos los archivos de configuración se pudieron preservar. + No se pudieron conservar todos los archivos configurados. ProcessResult - + There was no output from the command. -No hubo salida del comando. +La orden no ha proporcionado información de salida. - + Output: -Salida: +Información de salida: - + External command crashed. - El comando externo falló. + El programa externo se ha colgado, fallando de forma inesperada. - + Command <i>%1</i> crashed. - El comando <i>%1</i> falló. + El programa externo se ha colgado al llamarlo con <i>%1</i>. - + External command failed to start. - El comando externo no se pudo iniciar. + El programa externo no se ha podido iniciar. - + Command <i>%1</i> failed to start. - El comando <i>%1</i> no se pudo iniciar. + El programa externo <i>%1</i> no se ha podido iniciar. - + Internal error when starting command. - Error interno al iniciar el comando. + Se ha producido un error interno al iniciar el programa. - + Bad parameters for process job call. - Parámetros erróneos para la llamada de la tarea del procreso. + Parámetros erróneos en la llamada al proceso. - + External command failed to finish. - El comando externo no se pudo finalizar. + El programa externo no se ha podido terminar. - + Command <i>%1</i> failed to finish in %2 seconds. - El comando <i>%1</i> no se pudo finalizar en %2 segundos. + El programa externo <i>%1</i> no ha podido terminar en %2 segundos. - + External command finished with errors. - El comando externo finalizó con errores. + El programa externo ha terminado, pero devolviendo errores. - + Command <i>%1</i> finished with exit code %2. - El comando <i>%1</i> finalizó con un código de salida %2. + El programa externo <i>%1</i> ha terminado con un código de salida %2. QObject - - Default Keyboard Model - Modelo de teclado por defecto - - - - - Default - Por defecto - - - - unknown - desconocido - - - - extended - extendido - - - - unformatted - sin formato - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Espacio no particionado o tabla de partición desconocida - - - - (no mount point) - (sin punto de montaje) - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + desconocido - - No description provided. - + + extended + extendido - - - - + + unformatted + sin formato + + + + swap + swap + + + + + Default + Predeterminado + + + + + + File not found - + No se ha encontrado el archivo - + Path <pre>%1</pre> must be an absolute path. - + La ruta <pre>%1</pre> debe ser absoluta. - + + Directory not found + No se ha encontrado la carpeta + + + + Could not create new random file <pre>%1</pre>. - + No se ha podido crear nuevo archivo temporal al azar «<pre>%1</pre>». + + + + No product + Sin producto + + + + No description provided. + No se ha proporcionado ninguna descripción. + + + + (no mount point) + (sin punto de montaje) + + + + Unpartitioned space or unknown partition table + Espacio no particionado o tabla de partición desconocida + + + + Recommended + + + <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> + <p>El equipo no cumple con alguno de los requisitos recomendados para configurar %1.<br/> + Se puede continuar con la configuración, pero puede que ciertas funciones no estén disponibles.</p> RemoveUserJob - + Remove live user from target system - Borre el usuario "en vivo" del sistema objetivo + Borrar el usuario temporal («live») del sistema a instalar RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - Remover grupo de volúmenes llamado %1. + Quitar el grupo de volumen denominado «%1». - + Remove Volume Group named <strong>%1</strong>. - Remover grupo de volúmenes llamado <strong>%1</strong>. + Quitar el grupo de volumen denominado «<strong>%1</strong>». - + The installer failed to remove a volume group named '%1'. El instalador no pudo eliminar el grupo de volúmenes denominado «%1». @@ -2837,143 +3184,160 @@ Salida: ReplaceWidget - + Form Formulario - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccione dónde instalar %1<br/><font color="red">Atención: </font>esto borrará todos sus archivos en la partición seleccionada. - + The selected item does not appear to be a valid partition. El elemento seleccionado no parece ser una partición válida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 no se puede instalar en el espacio vacío. Por favor, seleccione una partición existente. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no se puede instalar en una partición extendida. Por favor, seleccione una partición primaria o lógica existente. - + %1 cannot be installed on this partition. %1 no se puede instalar en esta partición. - + Data partition (%1) Partición de datos (%1) - + Unknown system partition (%1) Partición desconocida del sistema (%1) - + %1 system partition (%2) %1 partición del sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 es demasiado pequeña para %2. Por favor, seleccione una participación con capacidad para al menos %3 GiB. - + <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. <strong>%2</strong><br/><br/>No se puede encontrar una partición de sistema EFI en ninguna parte de este sistema. Por favor, retroceda y use el particionamiento manual para establecer %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 se instalará en %2.<br/><font color="red">Advertencia: </font>Todos los datos en la partición %2 se perderán. - + The EFI system partition at %1 will be used for starting %2. La partición del sistema EFI en %1 se utilizará para iniciar %2. - + EFI system partition: Partición del sistema EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>El equipo no cumple con los requisitos mínimos para instalar %1.<br/> + La instalación no puede continuar.</p> + + + + <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> + <p>El equipo no cumple con alguno de los requisitos recomendados para configurar %1.<br/> + Se puede continuar con la configuración, pero puede que ciertas funciones no estén disponibles.</p> + + ResizeFSJob - + Resize Filesystem Job Tarea de redimensionamiento de sistema de archivos - + Invalid configuration Configuración no válida - + The file-system resize job has an invalid configuration and will not run. La tarea de redimensionamiento del sistema de archivos no posee una configuración válida y no se ejecutará. - + KPMCore not Available KPMCore no disponible - + Calamares cannot start KPMCore for the file-system resize job. Calamares no puede iniciar KPMCore para la tarea de redimensionamiento del sistema de archivos. - - - - - + + + + + Resize Failed Falló el redimiensionamiento - + The filesystem %1 could not be found in this system, and cannot be resized. No se encontró en este sistema el sistema de archivos %1, por lo que no puede redimensionarse. - + The device %1 could not be found in this system, and cannot be resized. No se encontró en este sistema el dispositivo %1, por lo que no puede redimensionarse. - - + + The filesystem %1 cannot be resized. No puede redimensionarse el sistema de archivos %1. - - + + The device %1 cannot be resized. No puede redimensionarse el dispositivo %1. - + The filesystem %1 must be resized, but cannot. Es necesario redimensionar el sistema de archivos %1 pero no es posible hacerlo. - + The device %1 must be resized, but cannot Es necesario redimensionar el dispositivo %1 pero no es posible hacerlo. @@ -2981,22 +3345,22 @@ Salida: ResizePartitionJob - + Resize partition %1. Redimensionar partición %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Cambiar tamaño de la <strong>%2MiB</strong> partición <strong>%1</strong> a <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + Cambiando tamaño de la %2MiB partición %1 a %3MiB. - + The installer failed to resize partition %1 on disk '%2'. El instalador ha fallado a la hora de reducir la partición %1 en el disco '%2'. @@ -3004,7 +3368,7 @@ Salida: ResizeVolumeGroupDialog - + Resize Volume Group Cambiar el tamaño del grupo de volúmenes @@ -3012,18 +3376,18 @@ Salida: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Cambiar el tamaño del grupo de volúmenes llamado %1 de %2 a %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - Cambiar el tamaño del grupo de volúmenes llamado <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>. + Cambiar el tamaño del grupo de volúmenes denominado «<strong>%1</strong>» de «<strong>%2</strong>» a «<strong>%3</strong>». - + The installer failed to resize a volume group named '%1'. El instalador no pudo redimensionar el grupo de volúmenes denominado «%1». @@ -3031,53 +3395,25 @@ Salida: ResultsListDialog - + For best results, please ensure that this computer: - Para obtener los mejores resultados, por favor asegúrese que este ordenador: + Para un mejor desempeño se recomienda que este equipo: - + System requirements Requisitos del sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este ordenador no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este ordenador no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. - - - - This program will ask you some questions and set up %2 on your computer. - El programa le preguntará algunas cuestiones y configurará %2 en su ordenador. - - ScanningDialog - + Scanning storage devices... Dispositivos de almacenamiento de escaneado... - + Partitioning Particiones @@ -3085,29 +3421,29 @@ Salida: SetHostNameJob - + Set hostname %1 Hostname: %1 - + Set hostname <strong>%1</strong>. Configurar hostname <strong>%1</strong>. - + Setting hostname %1. Configurando hostname %1. + - Internal Error Error interno - - + + Cannot write hostname to target system No es posible escribir el hostname en el sistema de destino @@ -3115,29 +3451,29 @@ Salida: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Configurar modelo de teclado a %1, distribución a %2-%3 - + Failed to write keyboard configuration for the virtual console. Hubo un fallo al escribir la configuración del teclado para la consola virtual. - - - + + + Failed to write to %1 No se puede escribir en %1 - + Failed to write keyboard configuration for X11. Hubo un fallo al escribir la configuración del teclado para X11. - + Failed to write keyboard configuration to existing /etc/default directory. No se pudo escribir la configuración de teclado en el directorio /etc/default existente. @@ -3145,82 +3481,82 @@ Salida: SetPartFlagsJob - + Set flags on partition %1. Establecer indicadores en la partición %1. - + Set flags on %1MiB %2 partition. - + Establecer indicadores en la %1MiB %2 partición.. - + Set flags on new partition. Establecer indicadores en una nueva partición. - + Clear flags on partition <strong>%1</strong>. Limpiar indicadores en la partición <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - + Borrar indicadores en la %1MiB <strong>%2</strong> partición. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Limpiar indicadores en la nueva partición. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Indicar partición <strong>%1</strong> como <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Marcar %1MiB <strong>%2</strong> partición como <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Indicar nueva partición como <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Limpiando indicadores en la partición <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Borrando marcadores en la %1MiB <strong>%2</strong> partición. + + + Clearing flags on new partition. Limpiando indicadores en la nueva partición. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Estableciendo indicadores <strong>%2</strong> en la partición <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Estableciendo indicadores <strong>%3</strong> en la %1MiB <strong>%2</strong> partición. + + + Setting flags <strong>%1</strong> on new partition. Estableciendo indicadores <strong>%1</strong> en una nueva partición. - + The installer failed to set flags on partition %1. El instalador no pudo establecer indicadores en la partición %1. @@ -3228,42 +3564,42 @@ Salida: SetPasswordJob - + Set password for user %1 Definir contraseña para el usuario %1. - + Setting password for user %1. Configurando contraseña para el usuario %1. - + Bad destination system path. Destino erróneo del sistema. - + rootMountPoint is %1 El punto de montaje de la raíz es %1 - + Cannot disable root account. No se puede deshabilitar la cuenta root - + passwd terminated with error code %1. passwd finalizó con el código de error %1. - + Cannot set password for user %1. No se puede definir contraseña para el usuario %1. - + usermod terminated with error code %1. usermod ha terminado con el código de error %1 @@ -3271,127 +3607,200 @@ Salida: SetTimezoneJob - + Set timezone to %1/%2 Configurar uso horario a %1/%2 - + Cannot access selected timezone path. No se puede acceder a la ruta de la zona horaria. - + Bad path: %1 Ruta errónea: %1 - + Cannot set timezone. No se puede definir la zona horaria - + Link creation failed, target: %1; link name: %2 Fallo al crear el enlace, destino: %1; nombre del enlace: %2 - + Cannot set timezone, No se puede establecer la zona horaria, - + Cannot open /etc/timezone for writing No se puede abrir/etc/timezone para la escritura + + SetupGroupsJob + + + Preparing groups. + Preparando grupos. + + + + + Could not create groups in target system + No se pudieron crear grupos en el sistema destino + + + + These groups are missing in the target system: %1 + Estos grupos faltan en el sistema de destino: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configurar usuarios <pre>sudo</pre> . + + + + Cannot chmod sudoers file. + No es posible modificar los permisos de sudoers. + + + + Cannot create sudoers file for writing. + No es posible crear el archivo de escritura para sudoers. + + ShellProcessJob - + Shell Processes Job - Tarea de procesos del interprete de comandos + Tarea de procesos de la «shell» SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Aceptar - - This is an overview of what will happen once you start the install procedure. - Esto es una previsualización de que ocurrirá una vez que empiece la instalación. + + &Yes + &Sí - - - SummaryViewStep - - Summary - Resumen + + &No + &No + + + + &Cancel + &Cancelar + + + + &Close + &Cerrar TrackingInstallJob - + Installation feedback Respuesta de la instalación - + Sending installation feedback. Enviar respuesta de la instalación - + Internal error in install-tracking. Error interno en el seguimiento-de-instalación. - + HTTP request timed out. La petición HTTP agotó el tiempo de espera. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + comentarios de los usuarios de KDE + + + + Configuring KDE user feedback. + Configuración de los comentarios de los usuarios de KDE. + + + + + Error in KDE user feedback configuration. + Error en la configuración de los comentarios de los usuarios de KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + No se pudieron configurar correctamente los comentarios de los usuarios de KDE, error de script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + No se pudieron configurar correctamente los comentarios de los usuarios de KDE, error de Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Respuesta de la máquina - + Configuring machine feedback. Configurando respuesta de la máquina. - - + + Error in machine feedback configuration. Error en la configuración de la respuesta de la máquina. - + Could not configure machine feedback correctly, script error %1. No se pudo configurar correctamente la respuesta de la máquina, error de script %1. - + Could not configure machine feedback correctly, Calamares error %1. No se pudo configurar correctamente la respuesta de la máquina, error de Calamares %1. @@ -3399,106 +3808,97 @@ Salida: TrackingPage - + Form Formulario - + Placeholder Indicador de posición - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Al seleccionar esto, no enviará <span style=" font-weight:600;">información en absoluto</span> acerca de su instalación.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Haz clic aquí para <span style=" font-weight:600;">no enviar información</span> sobre tu instalación.</p></body></html> - + <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> - <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Pulse aquí para más información acerca de la respuesta del usuario</span></a></p></body></html> + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Haz clic aquí para saber más sobre el sistema de opinión de usuarios</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - El seguimiento de instalación ayuda a %1 a ver cuántos usuarios tiene, en qué hardware se instala %1, y (con las últimas dos opciones de debajo) a obtener información continua acerca de las aplicaciones preferidas. Para ver lo que se enviará, por favor, pulse en el icono de ayuda junto a cada área. + + 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. + El seguimiento ayuda a %1 a ver con qué frecuencia se instala, en qué hardware se instala y qué aplicaciones se usan. Para ver lo que se envía, haz clic en el icono de ayuda en cada sección. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Al seleccionar esto enviará información acerca de su instalación y hardware. Esta información <b>sólo se enviará una vez</b> después de que finalice la instalación. + + 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. + Al seleccionar esto, enviará información sobre su instalación y hardware. Esta información solo se enviará <b>una vez</b> después de finalizar la instalación. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Al seleccionar esto enviará información <b>periódicamente</b> acerca de su instalación, hardware y aplicaciones, a %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Al seleccionar esto, enviará periódicamente información sobre la instalación, el hardware y las aplicaciones de su <b>máquina</b> a %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Al seleccionar esto enviará información <b>regularmente</b> acerca de su instalación, hardware, aplicaciones y patrones de uso, a %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Al seleccionar esto, enviará regularmente información sobre su instalación de <b>usuario</b>, hardware, aplicaciones y patrones de uso de aplicaciones a %1. TrackingViewStep - + Feedback - Respuesta + Opinar + + + + UmountJob + + + Unmount file systems. + Desmontar los sistemas de archivos. + + + + No target system available. + No parece que haya ningún sistema instalable disponible. + + + + No rootMountPoint is set. + «rootMountPoint» no definido. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>Si va a haber más de una persona usando el equipo se pueden crear otras cuentas de usuario una vez terminado el asistente de configuración.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + <small>Si va a haber más de una persona usando el equipo se pueden crear otras cuentas de usuario una vez instalado.</small> + + + UsersQmlViewStep - - Your username is too long. - Su nombre de usuario es demasiado largo. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - El nombre del Host es demasiado corto. - - - - Your hostname is too long. - El nombre del Host es demasiado largo. - - - - Your passwords do not match! - ¡Sus contraseñas no coinciden! + + Users + Usuarios UsersViewStep - + Users Usuarios @@ -3506,65 +3906,67 @@ Salida: VariantModel - + Key - + Column header for key/value + Clave - + Value + Column header for key/value Valor VolumeGroupBaseDialog - + Create Volume Group Crear grupo de volúmenes - + List of Physical Volumes Lista de volúmenes físicos - + Volume Group Name: Nombre del grupo de volúmenes: - + Volume Group Type: Tipo del grupo de volúmenes: - + Physical Extent Size: Tamaño de sector físico: - + MiB MiB - + Total Size: Tamaño total: - + Used Size: Tamaño utilizado - + Total Sectors: Sectores totales: - + Quantity of LVs: Cantidad de LVs: @@ -3572,227 +3974,590 @@ Salida: WelcomePage - + Form Formulario - - + + Select application and system language - + Elige el idioma para las aplicaciones y el sistema - Open donations website - - - - - &Donate - - - - - Open help and support website - - - - - Open issues and bug-tracking website - - - - - Open release notes website - - - - - &Release notes - &Notas de publicación - - - - &Known issues - &Problemas conocidos - - - - &Support - &Ayuda - - - &About &Acerca de - - <h1>Welcome to the %1 installer.</h1> - <h1>Bienvenido al instalador %1.</h1> + + Open donations website + Abrir la página web de donaciones - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bienvenido al instalador de Calamares para %1.</h1> + + &Donate + &Donar - + + Open help and support website + Abrir el sitio web de ayuda y soporte + + + + &Support + &Ayuda + + + + Open issues and bug-tracking website + Sitio web de problemas y mejoras + + + + &Known issues + &Problemas conocidos + + + + Open release notes website + Abrir la web con las notas de lanzamiento + + + + &Release notes + &Notas de publicación + + + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Te damos la bienvenida a Calamares; el configurador de %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + <h1>Te damos la bienvenida al configurador de %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Te damos la bienvenida a Calamares; el instalador de %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Te damos la bienvenida al instalador de %1.</h1> + + + + %1 support + %1 ayuda + + + About %1 setup - Acerca de la configuración %1 + Acerca del configurador de %1 - + About %1 installer Acerca del instalador %1 - + <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. - - - - - %1 support - %1 ayuda + <h1>%1</h1><br/><strong>%2<br/>para %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/>Gracias al <a href="https://calamares.io/team/">equipo de Calamares</a> y al <a href="https://www.transifex.com/calamares/calamares/">equipo de traductores de Calamares</a>.<br/><br/><a href="https://calamares.io/"> El desarrollo de Calamares</a> está patrocinado por <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Software Libre. WelcomeQmlViewStep - + Welcome - Bienvenido + Te damos la bienvenida WelcomeViewStep - + Welcome - Bienvenido + Te damos la bienvenida + + + + ZfsJob + + + Create ZFS pools and datasets + Crear grupos y conjuntos de datos ZFS + + + + Failed to create zpool on + Error al crear el «zpool» en + + + + Configuration Error + Error de configuración + + + + No partitions are available for ZFS. + No hay particiones disponibles para ZFS. + + + + Internal data missing + Faltan datos internos + + + + + Failed to create zpool + Error al crear el «zpool» + + + + Failed to create dataset + No se pudo crear el «dataset» + + + + The output was: + El programa ha devuelto: about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + para %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/> + Gracias al <a href='https://calamares.io/team/'>equipo de Calamares</a> + y al <a href='https://www.transifex.com/calamares/calamares/'>equipo de + traductores de</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + El desarrollo es patrocinado por<br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Software Libre. - + Back - + Atrás + + + + calamares-sidebar + + + Show debug information + Ver la información de depuración. + + + + finishedq + + + Installation Completed + Instalación completada + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + Se ha instalado %1 en tu equipo. + A partir de ahora puedes reiniciar para empezar a usar el sistema operativo nuevo o seguir usando el entorno temporal («live»). + + + + Close Installer + Cerrar el instalador + + + + Restart System + Reiniciar el sistema + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Un registro completo de la instalación está disponible como «installation.log» en la carpeta personal del usuario temporal. +<br/> + Este registro también se copia en la ruta «/var/log/installation.log» del sistema a instalar. + + + + finishedq@mobile + + + Installation Completed + Instalación completada + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + Se ha instalado %1 en tu equipo.<br/> + Ya puedes reiniciar para empezar a usar tu nuevo sistema operativo. + + + + Close + Cerrar + + + + Restart + Reiniciar + + + + i18n + + + <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>. + <h1>Idiomas</h1></br> + La configuración regional del sistema afecta al idioma y al tipo de caracteres que se muestran en algunos elementos del terminal. El modo actual está establecido a «<strong>%1</strong>». + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Configuración regional</h1> </br> + La configuración regional del sistema afecta el formato de números y fechas. La configuración actual es <strong>%1</strong>. + + + + Back + Atrás keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Para previsualizar el teclado elige una distribución. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelo de teclado: - - Refresh - - - - - + Layouts - + Distribuciones - - - Keyboard Layout - + + Type here to test your keyboard + Escribe aquí para probar la salida del teclado - - Models - - - - + Variants - + Variantes + + + localeq - - Test your keyboard - + + Change + Modificar notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - + <h3>%1</h3> + <p>Estos son ejemplos de notas de publicación.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice es una suite ofimática potente y gratuita, utilizada por millones de personas en todo el mundo. Incluye varias aplicaciones que la convierten en la suite ofimática libre y de código abierto más versátil del mercado.<br/> + Opción predeterminada. + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Si no quieres instalar un paquete de ofimática cámbialo abajo. Siempre se puede instalar uno (o más de uno) a través del administrador de paquetes cuando surja la necesidad. + + + + No Office Suite + Sin paquete de ofimática + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Crea una instalación de escritorio mínima, evitando todas las aplicaciones extras para poder elegir más adelante qué te gustaría añadir al sistema. En este modo no habrá paquete de ofimática, ni reproductores multimedia, ni visor de imágenes ni soporte de impresión. Solo incluye un escritorio, un explorador de archivos, un administrador de paquetes, un editor de texto y un navegador web simple. Simple. + + + + Minimal Install + Instalación mínima + + + + Please select an option for your install, or use the default: LibreOffice included. + Elige una de las opciones o deja la que viene de serie: con LibreOffice. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Este es un archivo QML de ejemplo, que muestra opciones en RichText con contenido Flickable.</p> + +<p>QML con RichText puede usar etiquetas HTML, el contenido móvil es útil para pantallas táctiles.</p> + + <p><b>Este es un texto en negrita</b></p> + <p><i>Este es el texto en cursiva</i></p> + <p><u>Este es un texto subrayado</u></p> + <p><center>Este texto se alineará al centro.</center></p> + <p><s>esto es tachado</s></p> + + <p>Ejemplo de código: + <code>ls -l /casa</code></p> + + <p><b>Listas:</b></p> + <ul> + <li>Sistemas de CPU Intel</li> + <li>Sistemas de CPU AMD</li> + </ul> + + <p>La barra de desplazamiento vertical es ajustable, el ancho actual se establece en 10.</p> + + + + Back + Atrás + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Elige un nombre de usuario con contraseña para iniciar sesión y poder hacer tareas de administración + + + + What is your name? + Nombre + + + + Your Full Name + Tu nombre completo + + + + What name do you want to use to log in? + ¿Qué nombre quieres usar para iniciar sesión? + + + + Login Name + Nombre de inicio de sesión + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Si va a haber más de una persona usando el equipo se pueden crear otras cuentas de usuario una vez terminada la instalación. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Solo se pueden poner letras minúsculas, números y guiones bajos y normales. + + + + root is not allowed as username. + No se puede poner «root» como nombre de usuario. + + + + What is the name of this computer? + ¿Qué nombre le ponemos al equipo? + + + + Computer Name + Nombre del equipo + + + + This name will be used if you make the computer visible to others on a network. + Este nombre será visible al compartir cosas en red. + + + + localhost is not allowed as hostname. + No se puede poner «localhost» como nombre del equipo. + + + + Choose a password to keep your account safe. + Elige una contraseña para mantener tu cuenta segura. + + + + Password + Contraseña + + + + Repeat Password + Repite la contraseña + + + + 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. + Introduce la misma contraseña dos veces, para que se pueda verificar si hay errores de escritura. Una buena contraseña contendrá una combinación de letras, números y puntuación; tiene que tener al menos ocho caracteres y cambiarse de vez en cuando. + + + + Validate passwords quality + Verificar la fortaleza de contraseña + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Cuando se marca esta casilla se verificará la seguridad de la contraseña y no se podrá usar una contraseña débil. + + + + Log in automatically without asking for the password + Iniciar sesión automáticamente sin pedir la contraseña + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Solo se permiten letras, números, guiones bajos y guiones, con un mínimo de dos caracteres. + + + + Reuse user password as root password + Reutilizar la contraseña para el usuario «root» + + + + Use the same password for the administrator account. + Utiliza la misma contraseña para la cuenta de administrador. + + + + Choose a root password to keep your account safe. + Elige una contraseña segura para la cuenta de administración «root». + + + + Root Password + Contraseña de «root» + + + + Repeat Root Password + Repetir la contraseña de «root» + + + + Enter the same password twice, so that it can be checked for typing errors. + Introduce la misma contraseña dos veces para verificar si hay errores de escritura. welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Te damos la bienvenida al instalador de <quote>%2</quote></h3> + <p>Este programa te hará algunas preguntas y configurará %1 en tu equipo.</p> - + About - + Acerca de - + Support - + Soporte - + Known issues - + Problemas conocidos - + Release notes - + Notas de lanzamiento - + Donate - + Donar diff --git a/lang/calamares_es_MX.ts b/lang/calamares_es_MX.ts index 8603bc429..f4347a96a 100644 --- a/lang/calamares_es_MX.ts +++ b/lang/calamares_es_MX.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. El <strong>entorno de arranque </strong>de este sistema. <br><br>Sistemas antiguos x86 solo admiten <strong>BIOS</strong>. <br>Sistemas modernos usualmente usan <strong>EFI</strong>, pero podrían aparecer como BIOS si inició en modo de compatibilidad. - + 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. Este sistema fue iniciado con un entorno de arranque <strong>EFI. </strong><br><br>Para configurar el arranque desde un entorno EFI, este instalador debe hacer uso de un cargador de arranque, como <strong>GRUB</strong>, <strong>system-boot </strong> o una <strong>Partición de sistema EFI</strong>. Esto es automático, a menos que escoja el particionado manual, en tal caso debe escogerla o crearla por su cuenta. - + 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. Este sistema fue iniciado con un entorno de arranque <strong>BIOS. </strong><br><br>Para configurar el arranque desde un entorno BIOS, este instalador debe instalar un gestor de arranque como <strong>GRUB</strong>, ya sea al inicio de la partición o en el <strong> Master Boot Record</strong> cerca del inicio de la tabla de particiones (preferido). Esto es automático, a menos que escoja el particionado manual, en este caso debe configurarlo por su cuenta. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record de %1 - + Boot Partition Partición de arranque - + System Partition Partición del Sistema - + Do not install a boot loader No instalar el gestor de arranque - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Página en blanco @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulario - + GlobalStorage Almacenamiento Global - + JobQueue Cola de trabajo - + Modules Módulos - + Type: Tipo: - - + + none ninguno - + Interface: Interfaz: - - Tools - Herramientas + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Información de depuración @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Preparar - + Install Instalar @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Trabajo fallido (%1) - + Programmed job failure was explicitly requested. Falla del trabajo programado fue solicitado explícitamente. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Hecho @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Trabajo de ejemplo. (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Ejecutando comando %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Ejecutando operación %1. - + Bad working directory path Ruta a la carpeta de trabajo errónea - + Working directory %1 for python job %2 is not readable. La carpeta de trabajo %1 para la tarea de python %2 no es accesible. - + Bad main script file Script principal erróneo - + Main script file %1 for python job %2 is not readable. El script principal %1 del proceso python %2 no es accesible. - + Boost.Python error in job "%1". Error Boost.Python en el proceso "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. Chequeo de requerimientos del sistema completado. @@ -252,246 +285,237 @@ Calamares::ViewManager - - &Back - &Atrás - - - - &Next - &Siguiente - - - - &Cancel - &Cancelar - - - - Cancel setup without changing the system. - Cancelar la configuración sin cambiar el sistema. - - - - Cancel installation without changing the system. - Cancelar instalación sin cambiar el sistema. - - - + Setup Failed Fallo en la configuración. - - Would you like to paste the install log to the web? - + + Installation Failed + Instalación Fallida - + + Error + Error + + + + &Yes + &Si + + + + &No + &No + + + + &Close + &Cerrar + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed La inicialización de Calamares ha fallado - + %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. %1 no pudo ser instalado. Calamares no pudo cargar todos los módulos configurados. Este es un problema con la forma en que Calamares esta siendo usada por la distribución. - + <br/>The following modules could not be loaded: <br/>Los siguientes módulos no pudieron ser cargados: - + + Continue with setup? + ¿Continuar con la instalación? + + + Continue with installation? ¿Continuar con la instalación? - + 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> El %1 programa de instalación esta a punto de realizar cambios a su disco con el fin de establecer %2.<br/><strong>Usted no podrá deshacer estos cambios.</strong> - + + 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> + El instalador %1 va a realizar cambios en su disco para instalar %2.<br/><strong>No podrá deshacer estos cambios.</strong> + + + &Set up now &Configurar ahora - + + &Install now + &Instalar ahora + + + + Go &back + &Regresar + + + &Set up &Configurar - + &Install &Instalar - + Setup is complete. Close the setup program. Configuración completa. Cierre el programa de instalación. - + + The installation is complete. Close the installer. + Instalación completa. Cierre el instalador. + + + + Cancel setup without changing the system. + Cancelar la configuración sin cambiar el sistema. + + + + Cancel installation without changing the system. + Cancelar instalación sin cambiar el sistema. + + + + &Next + &Siguiente + + + + &Back + &Atrás + + + + &Done + &Hecho + + + + &Cancel + &Cancelar + + + Cancel setup? ¿Cancelar la configuración? - + Cancel installation? ¿Cancelar la instalación? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. ¿Realmente desea cancelar el actual proceso de configuración? El programa de instalación se cerrará y todos los cambios se perderán. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. ¿Realmente desea cancelar el proceso de instalación actual? El instalador terminará y se perderán todos los cambios. - - - - &Yes - &Si - - - - - &No - &No - - - - &Close - &Cerrar - - - - Continue with setup? - ¿Continuar con la instalación? - - - - 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> - El instalador %1 va a realizar cambios en su disco para instalar %2.<br/><strong>No podrá deshacer estos cambios.</strong> - - - - &Install now - &Instalar ahora - - - - Go &back - &Regresar - - - - &Done - &Hecho - - - - The installation is complete. Close the installer. - Instalación completa. Cierre el instalador. - - - - Error - Error - - - - Installation Failed - Instalación Fallida - CalamaresPython::Helper - + Unknown exception type Tipo de excepción desconocida - + unparseable Python error error Python no analizable - + unparseable Python traceback rastreo de Python no analizable - + Unfetchable Python error. Error de Python inalcanzable. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Atrás - - - - &Next - &Siguiente - - - - &Cancel - &Cancelar - - - + %1 Setup Program %1 Programa de instalación - + %1 Installer %1 Instalador + + + ChangeFilesystemLabelJob - - Show debug information - Mostrar información de depuración + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + El instalador falló al actualizar la tabla de partición en el disco '%1'. CheckerContainer - + Gathering system information... Obteniendo información del sistema... @@ -499,158 +523,198 @@ El instalador terminará y se perderán todos los cambios. ChoicePage - + Form Formulario - - After: - Después: - - - - Boot loader location: - Ubicación del cargador de arranque: - - - + Select storage de&vice: Seleccionar dispositivo de almacenamiento: - - - - + + + + Current: Actual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Después: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particionado manual </strong><br/> Puede crear o cambiar el tamaño de las particiones usted mismo. + + + Reuse %1 as home partition for %2. Reuse %1 como partición home para %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione una partición para reducir el tamaño, a continuación, arrastre la barra inferior para redimencinar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será reducido a %2MiB y una nueva %3MiB partición se creará para %4. - + + Boot loader location: + Ubicación del cargador de arranque: + + + <strong>Select a partition to install on</strong> <strong>Seleccione una partición para instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. No se puede encontrar en el sistema una partición EFI. Por favor vuelva atrás y use el particionamiento manual para configurar %1. - + The EFI system partition at %1 will be used for starting %2. La partición EFI en %1 será usada para iniciar %2. - + EFI system partition: Partición de sistema EFI: - + 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. Este dispositivo de almacenamiento parece no tener un sistema operativo en el. ¿que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong> <br/>Esto <font color="red">borrará</font> todos los datos presentes actualmente en el dispositivo de almacenamiento seleccionado. - - 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. - Este dispositivo de almacenamiento tiene %1 en el. ¿Que le gustaría hacer? <br/>Usted podrá revisar y confirmar sus elecciones antes de que cualquier cambio se realice al dispositivo de almacenamiento. - - - - No Swap - Sin Swap - - - - Reuse Swap - Reutilizar Swap - - - - Swap (no Hibernate) - Swap (sin hibernación) - - - - Swap (with Hibernate) - Swap (con hibernación) - - - - Swap to file - Swap a archivo - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar junto a</strong> <br/>El instalador reducirá una partición con el fin de hacer espacio para %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong> <br/>Reemplaza una partición con %1. - + + 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. + Este dispositivo de almacenamiento tiene %1 en el. ¿Que le gustaría hacer? <br/>Usted podrá revisar y confirmar sus elecciones antes de que cualquier cambio se realice al dispositivo de almacenamiento. + + + 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. Este dispositivo de almacenamiento ya tiene un sistema operativo en el. ¿Que le gustaría hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. - + 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. Este dispositivo de almacenamiento tiene múltiples sistemas operativos en el. ¿Que le gustaria hacer?<br/> Usted podrá revisar y confirmar sus elecciones antes que cualquier cambio se realice al dispositivo de almacenamiento. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + Sin Swap + + + + Reuse Swap + Reutilizar Swap + + + + Swap (no Hibernate) + Swap (sin hibernación) + + + + Swap (with Hibernate) + Swap (con hibernación) + + + + Swap to file + Swap a archivo + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Borrar puntos de montaje para operaciones de particionamiento en %1 - + Clearing mounts for partitioning operations on %1. Borrando puntos de montaje para operaciones de particionamiento en %1. - + Cleared all mounts for %1 Puntos de montaje despejados para %1 @@ -658,22 +722,17 @@ El instalador terminará y se perderán todos los cambios. ClearTempMountsJob - + Clear all temporary mounts. Despejar todos los puntos de montaje temporales. - + Clearing all temporary mounts. Despejando todos los puntos de montaje temporales. - - Cannot get list of temporary mounts. - No se puede obtener la lista de puntos de montaje temporales. - - - + Cleared all temporary mounts. Todos los puntos de montaje temporales despejados. @@ -681,18 +740,18 @@ El instalador terminará y se perderán todos los cambios. CommandList - - + + Could not run command. No puede ejecutarse el comando. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Este comando se ejecuta en el entorno host y necesita saber la ruta root, pero no hay rootMountPoint definido. - + The command needs to know the user's name, but no username is defined. Este comando necesita saber el nombre de usuario, pero no hay nombre de usuario definido. @@ -700,100 +759,235 @@ El instalador terminará y se perderán todos los cambios. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este equipo no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este equipo no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. - - - - This program will ask you some questions and set up %2 on your computer. - El programa le hará algunas preguntas y configurará %2 en su ordenador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Bienvenido al programa de instalación Calamares para %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Bienvenido a la configuración %1</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bienvenido al instalador Calamares para %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Bienvenido al instalador de %1.</h1> - - - + Set keyboard model to %1.<br/> Ajustar el modelo de teclado a %1.<br/> - + Set keyboard layout to %1/%2. Ajustar teclado a %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. El lenguaje del sistema será establecido a %1. - + The numbers and dates locale will be set to %1. Los números y datos locales serán establecidos a %1. - - Set timezone to %1/%2.<br/> - Definir la zona horaria como %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Instalación de Red. (Deshabilitada: Grupos de datos invalidos recibidos) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Selección de paquete + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalación de Red. (Deshabilitada: No se puede acceder a la lista de paquetes, verifique su conección de red) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Este equipo no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Este equipo no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. + + + + This program will ask you some questions and set up %2 on your computer. + El programa le hará algunas preguntas y configurará %2 en su ordenador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Tu nombre de usuario es demasiado largo. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + El nombre de tu equipo es demasiado corto. + + + + Your hostname is too long. + El nombre de tu equipo es demasiado largo. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Las contraseñas no coinciden! + + + + OK! + + + + + Setup Failed + Fallo en la configuración. + + + + Installation Failed + Instalación Fallida + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Instalación Completa + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + La instalación de %1 está completa. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Resumen + + + + This is an overview of what will happen once you start the setup procedure. + Esta es una descripción general de lo que sucederá una vez que comience el procedimiento de configuración. + + + + This is an overview of what will happen once you start the install procedure. + Esto es un resumen de lo que pasará una vez que inicie el procedimiento de instalación. + ContextualProcessJob - + Contextual Processes Job Tareas de procesos contextuales @@ -801,100 +995,136 @@ El instalador terminará y se perderán todos los cambios. CreatePartitionDialog - + Create a Partition Crear una Partición - - MiB - MiB - - - - Partition &Type: - &Tipo de partición: - - - - &Primary - &Primaria - - - - E&xtended - E&xtendida - - - - Fi&le System: - Sis&tema de Archivos: - - - - LVM LV name - Nombre del LVM LV. - - - - Flags: - Indicadores: - - - - &Mount Point: - Punto de &Montaje: - - - + Si&ze: Ta&maño: - + + MiB + MiB + + + + Partition &Type: + &Tipo de partición: + + + + Primar&y + + + + + E&xtended + E&xtendida + + + + Fi&le System: + Sis&tema de Archivos: + + + + LVM LV name + Nombre del LVM LV. + + + + &Mount Point: + Punto de &Montaje: + + + + Flags: + Indicadores: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt En&criptar - + Logical Lógica - + Primary Primaria - + GPT GPT - + Mountpoint already in use. Please select another one. Punto de montaje ya esta en uso. Por favor seleccione otro. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. Crear nueva %2MiB partición en %4 (%3) con el sistema de archivos %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Crear nueva<strong>%2MiB</strong> partición en<strong>%2MiB</strong> (%3) con el sistema de archivos <strong>%1</strong>. - + + Creating new %1 partition on %2. Creando nueva partición %1 en %2 - + The installer failed to create partition on disk '%1'. El instalador falló en crear la partición en el disco '%1'. @@ -902,27 +1132,27 @@ El instalador terminará y se perderán todos los cambios. CreatePartitionTableDialog - + Create Partition Table Crear Tabla de Particiones - + Creating a new partition table will delete all existing data on the disk. Crear una nueva tabla de particiones borrara todos los datos existentes en el disco. - + What kind of partition table do you want to create? ¿Qué tipo de tabla de particiones desea crear? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) Tabla de Particiones GUID (GPT) @@ -930,22 +1160,22 @@ El instalador terminará y se perderán todos los cambios. CreatePartitionTableJob - + Create new %1 partition table on %2. Crear nueva tabla de partición %1 en %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear nueva tabla de particiones <strong>%1</strong> en <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Creando nueva tabla de particiones %1 en %2. - + The installer failed to create a partition table on %1. El instalador falló al crear una tabla de partición en %1. @@ -953,45 +1183,41 @@ El instalador terminará y se perderán todos los cambios. CreateUserJob - + Create user %1 Crear usuario %1 - + Create user <strong>%1</strong>. Crear usuario <strong>%1</strong>. - - Creating user %1. - Creando cuenta de susuario %1. + + Preserving home directory + - - Sudoers dir is not writable. - El directorio "Sudoers" no es editable. + + + Creating user %1 + - - Cannot create sudoers file for writing. - No se puede crear el archivo sudoers para editarlo. + + Configuring user %1 + - - Cannot chmod sudoers file. - No se puede aplicar chmod al archivo sudoers. - - - - Cannot open groups file for reading. - No se puede abrir el archivo groups para lectura. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group Crear Grupo de Volumen @@ -999,22 +1225,22 @@ El instalador terminará y se perderán todos los cambios. CreateVolumeGroupJob - + Create new volume group named %1. Crear nuevo grupo de volumen llamado %1. - + Create new volume group named <strong>%1</strong>. Crear nuevo grupo de volumen llamado <strong>%1</strong>. - + Creating new volume group named %1. Creando nuevo grupo de volumen llamado %1. - + The installer failed to create a volume group named '%1'. El instalador no pudo crear un grupo de volumen llamado '%1'. @@ -1022,41 +1248,41 @@ El instalador terminará y se perderán todos los cambios. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - Desactivar el grupo de volúmenes llamado%1. + Desactivar el grupo de volúmenes llamado %1. - + Deactivate volume group named <strong>%1</strong>. - Desactivar el grupo de volúmenes llamado<strong>% 1</strong>. + Desactivar el grupo de volúmenes llamado<strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. - El instalador no pudo desactivar un grupo de volúmenes llamado%1. + El instalador no pudo desactivar un grupo de volúmenes llamado %1. DeletePartitionJob - + Delete partition %1. Eliminar la partición %1. - + Delete partition <strong>%1</strong>. Eliminar la partición <strong>%1</strong>. - + Deleting partition %1. Eliminando partición %1. - + The installer failed to delete partition %1. El instalador no pudo borrar la partición %1. @@ -1064,46 +1290,46 @@ El instalador terminará y se perderán todos los cambios. DeviceInfoWidget - - 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. - Este tipo de <strong>tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>La única forma de cambiar el tipo de tabla de partición es borrar y recrear la tabla de partición de cero. lo cual destruye todos los datos en el dispositivo de almacenamiento.<br> Este instalador conservará la actual tabla de partición a menos que usted explícitamente elija lo contrario. <br>Si no está seguro, en los sistemas modernos GPT es lo preferible. - - - + This device has a <strong>%1</strong> partition table. Este dispositivo tiene una tabla de partición <strong>%1</strong> - + 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. Este es un dispositivo<br> <strong>loop</strong>. <br>Es un pseudo - dispositivo sin tabla de partición que hace un archivo accesible como un dispositivo bloque. Este tipo de configuración usualmente contiene un solo sistema de archivos. - + 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. Este instalador <strong>no puede detectar una tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>El dispositivo o no tiene tabla de partición, o la tabla de partición esta corrupta o de un tipo desconocido. <br>Este instalador puede crear una nueva tabla de partición por usted ya sea automáticamente, o a través de la página de particionado manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este es el tipo de tabla de partición recomendada para sistemas modernos que inician desde un entorno de arranque <strong>EFI</strong>. - + <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. <br><br>Este tipo de tabla de partición solo es recomendable en sistemas antiguos que inician desde un entorno de arranque <strong>BIOS</strong>. GPT es recomendado en la otra mayoría de casos.<br><br><strong> Precaución:</strong> La tabla de partición MBR es una era estándar MS-DOS obsoleta.<br> Unicamente 4 particiones <em>primarias</em> pueden ser creadas, y de esas 4, una puede ser una partición <em>extendida</em>, la cual puede a su vez contener varias particiones <em>logicas</em>. + + + 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. + Este tipo de <strong>tabla de partición</strong> en el dispositivo de almacenamiento seleccionado.<br> <br>La única forma de cambiar el tipo de tabla de partición es borrar y recrear la tabla de partición de cero. lo cual destruye todos los datos en el dispositivo de almacenamiento.<br> Este instalador conservará la actual tabla de partición a menos que usted explícitamente elija lo contrario. <br>Si no está seguro, en los sistemas modernos GPT es lo preferible. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1338,17 @@ El instalador terminará y se perderán todos los cambios. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escribe configuración LUKS para Dracut a %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omitir escritura de configuración LUKS por Dracut: "/" partición no está encriptada. - + Failed to open %1 Falla al abrir %1 @@ -1130,7 +1356,7 @@ El instalador terminará y se perderán todos los cambios. DummyCppJob - + Dummy C++ Job Trabajo C++ Simulado @@ -1138,123 +1364,167 @@ El instalador terminará y se perderán todos los cambios. EditExistingPartitionDialog - + Edit Existing Partition Editar Partición Existente - - Content: - Contenido: + + Con&tent: + - + &Keep &Conservar - + Format Formato - + Warning: Formatting the partition will erase all existing data. Advertencia: Formatear la partición borrara todos los datos existentes. - + &Mount Point: Punto de &Montaje - + Si&ze: Tam&año: - + MiB MiB - + Fi&le System: Sis&tema de Archivos: - + Flags: Indicadores: - - Mountpoint already in use. Please select another one. - Punto de montaje ya esta en uso. Por favor seleccione otro. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formulario - + En&crypt system En&criptar sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Contraseña segura - + Confirm passphrase Confirmar contraseña segura - + + Please enter the same passphrase in both boxes. Favor ingrese la misma contraseña segura en ambas casillas. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Fijar información de la partición. - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Instalar %1 en <strong>nueva</strong> %2 partición de sistema. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Configurar <strong>nueva</strong> %2 partición con punto de montaje <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 en %3 partición del sistema <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Configurar %3 partición <strong>%1</strong> con punto de montaje <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instalar el cargador de arranque en <strong>%1</strong>. - + Setting up mount points. Configurando puntos de montaje. @@ -1262,93 +1532,81 @@ El instalador terminará y se perderán todos los cambios. FinishedPage - + Form Formulario - + &Restart now &Reiniciar ahora - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - <h1>Todo listo.</h1><br/>% 1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema. + <h1>Todo listo.</h1><br/>%1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema. - + <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> <html><head/><body><p>Cuando esta casilla está marcada, su sistema se reiniciará inmediatamente cuando haga clic en <span style="font-style:italic;">Listo</span> o cierre el programa de instalación.</p></body></html> - + <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. <h1>Listo.</h1><br/>%1 ha sido instalado en su computadora.<br/>Ahora puede reiniciar su nuevo sistema, o continuar usando el entorno Live %2. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalación fallida</h1> <br/>%1 no ha sido instalado en su computador. <br/>El mensaje de error es: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Terminado + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Instalación Completa - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - La instalación de %1 está completa. + + Finish + Terminado FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formateando partición %1 con sistema de archivos %2. - + The installer failed to format partition %1 on disk '%2'. El instalador no ha podido formatear la partición %1 en el disco '%2' @@ -1356,72 +1614,72 @@ El instalador terminará y se perderán todos los cambios. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source está conectado a una fuente de energía - + The system is not plugged in to a power source. El sistema no está conectado a una fuente de energía. - + is connected to the Internet está conectado a Internet - + The system is not connected to the Internet. El sistema no está conectado a Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. El instalador no se está ejecutando con privilegios de administrador. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. La pantalla es muy pequeña para mostrar el instalador @@ -1429,7 +1687,7 @@ El instalador terminará y se perderán todos los cambios. HostInfoJob - + Collecting information about your machine. @@ -1437,25 +1695,25 @@ El instalador terminará y se perderán todos los cambios. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1463,7 +1721,7 @@ El instalador terminará y se perderán todos los cambios. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1471,7 +1729,7 @@ El instalador terminará y se perderán todos los cambios. InitramfsJob - + Creating initramfs. @@ -1479,17 +1737,17 @@ El instalador terminará y se perderán todos los cambios. InteractiveTerminalPage - + Konsole not installed Konsole no instalado - + Please install KDE Konsole and try again! Favor instale la Konsola KDE e intentelo de nuevo! - + Executing script: &nbsp;<code>%1</code> Ejecutando script: &nbsp;<code>%1</code> @@ -1497,28 +1755,15 @@ El instalador terminará y se perderán todos los cambios. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Ajustar el modelo de teclado a %1.<br/> - - - - Set keyboard layout to %1/%2. - Ajustar teclado a %1/%2. - - KeyboardQmlViewStep - + Keyboard Teclado @@ -1526,7 +1771,7 @@ El instalador terminará y se perderán todos los cambios. KeyboardViewStep - + Keyboard Teclado @@ -1534,65 +1779,88 @@ El instalador terminará y se perderán todos los cambios. LCLocaleDialog - + System locale setting Configuración de localización del sistema - + 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>. La configuración regional del sistema afecta al idioma y a al conjunto de caracteres para algunos elementos de interfaz de la linea de comandos.<br/>La configuración actual es <strong>%1</strong>. - + &Cancel &Cancelar - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Configurando la swap encriptada. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulario - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Acepto los terminos y condiciones anteriores. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1600,7 +1868,7 @@ El instalador terminará y se perderán todos los cambios. LicenseViewStep - + License Licencia @@ -1608,109 +1876,102 @@ El instalador terminará y se perderán todos los cambios. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>controlador %1</strong><br/>por %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>controladores gráficos de %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>plugin del navegador %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>codec %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>paquete %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - El lenguaje del sistema será establecido a %1. - - - - The numbers and dates locale will be set to %1. - Los números y datos locales serán establecidos a %1. - - - + Region: Región: - + Zone: Zona: - - + + &Change... &Cambiar... - - - Set timezone to %1/%2.<br/> - Definir la zona horaria como %1/%2.<br/> - LocaleQmlViewStep - + Location Ubicación + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Ubicación @@ -1718,35 +1979,35 @@ El instalador terminará y se perderán todos los cambios. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1754,116 +2015,130 @@ El instalador terminará y se perderán todos los cambios. MachineIdJob - + Generate machine-id. Generar identificación de la maquina. - + Configuration Error + Error de configuración + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 - - No root mount point is set for MachineId. + + 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. NetInstallViewStep - - + Package selection Selección de paquete - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1871,7 +2146,7 @@ El instalador terminará y se perderán todos los cambios. NotesQmlViewStep - + Notes @@ -1879,17 +2154,17 @@ El instalador terminará y se perderán todos los cambios. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1897,260 +2172,317 @@ El instalador terminará y se perderán todos los cambios. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short La contraseña es muy corta - + Password is too long La contraseña es muy larga - + Password is too weak La contraseña es muy débil - + Memory allocation error when setting '%1' Error de asignación de memoria al configurar '%1' - + Memory allocation error Error en la asignación de memoria - + The password is the same as the old one La contraseña es la misma que la anterior - + The password is a palindrome La contraseña es un Palíndromo - + The password differs with case changes only La contraseña solo difiere en cambios de mayúsculas y minúsculas - + The password is too similar to the old one La contraseña es muy similar a la anterior. - + The password contains the user name in some form La contraseña contiene el nombre de usuario de alguna forma - + The password contains words from the real name of the user in some form La contraseña contiene palabras del nombre real del usuario de alguna forma - + The password contains forbidden words in some form La contraseña contiene palabras prohibidas de alguna forma - - The password contains less than %1 digits - La contraseña contiene menos de %1 dígitos - - - + The password contains too few digits La contraseña contiene muy pocos dígitos - - The password contains less than %1 uppercase letters - La contraseña contiene menos de %1 letras mayúsculas - - - + The password contains too few uppercase letters La contraseña contiene muy pocas letras mayúsculas - - - The password contains less than %1 lowercase letters - La contraseña continee menos de %1 letras minúsculas + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters La contraseña contiene muy pocas letras minúsculas - - The password contains less than %1 non-alphanumeric characters - La contraseña contiene menos de %1 caracteres no alfanuméricos - - - + The password contains too few non-alphanumeric characters La contraseña contiene muy pocos caracteres alfanuméricos - - The password is shorter than %1 characters - La contraseña es mas corta que %1 caracteres - - - + The password is too short La contraseña es muy corta - - The password is just rotated old one - La contraseña solo es la rotación de la anterior - - - - The password contains less than %1 character classes - La contraseña contiene menos de %1 tipos de caracteres - - - + The password does not contain enough character classes La contraseña no contiene suficientes tipos de caracteres - - The password contains more than %1 same characters consecutively - La contraseña contiene más de %1 caracteres iguales consecutivamente - - - + The password contains too many same characters consecutively La contraseña contiene muchos caracteres iguales repetidos consecutivamente - - The password contains more than %1 characters of the same class consecutively - La contraseña contiene mas de %1 caracteres de la misma clase consecutivamente - - - + The password contains too many characters of the same class consecutively La contraseña contiene muchos caracteres de la misma clase consecutivamente - - - The password contains monotonic sequence longer than %1 characters - La contraseña contiene secuencias monotónicas mas larga que %1 caracteres + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence La contraseña contiene secuencias monotónicas muy largas - + No password supplied Contraseña no suministrada - + Cannot obtain random numbers from the RNG device No pueden obtenerse números aleatorios del dispositivo RING - + Password generation failed - required entropy too low for settings Generación de contraseña fallida - entropía requerida muy baja para los ajustes - + The password fails the dictionary check - %1 La contraseña falla el chequeo del diccionario %1 - + The password fails the dictionary check La contraseña falla el chequeo del diccionario - + Unknown setting - %1 Configuración desconocida - %1 - + Unknown setting Configuración desconocida - + Bad integer value of setting - %1 Valor entero de configuración incorrecto - %1 - + Bad integer value Valor entero incorrecto - + Setting %1 is not of integer type - Ajuste de % 1 no es de tipo entero + Ajuste de %1 no es de tipo entero - + Setting is not of integer type Ajuste no es de tipo entero - + Setting %1 is not of string type El ajuste %1 no es de tipo cadena - + Setting is not of string type El ajuste no es de tipo cadena - + Opening the configuration file failed Apertura del archivo de configuración fallida - + The configuration file is malformed El archivo de configuración está malformado - + Fatal failure Falla fatal - + Unknown error Error desconocido - + Password is empty @@ -2158,40 +2490,48 @@ El instalador terminará y se perderán todos los cambios. PackageChooserPage - + Form Formulario - + Product Name - + TextLabel Etiqueta de texto - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2199,12 +2539,12 @@ El instalador terminará y se perderán todos los cambios. PackageModel - + Name Nombre - + Description Descripción @@ -2212,17 +2552,17 @@ El instalador terminará y se perderán todos los cambios. Page_Keyboard - + Form Formulario - + Keyboard Model: Modelo de teclado: - + Type here to test your keyboard Teclee aquí para probar su teclado @@ -2230,96 +2570,96 @@ El instalador terminará y se perderán todos los cambios. Page_UserSetup - + Form Formulario - + What is your name? ¿Cuál es su nombre? - - What name do you want to use to log in? - ¿Qué nombre desea usar para acceder al sistema? - - - - Choose a password to keep your account safe. - Seleccione una contraseña para mantener segura su cuenta. - - - - - <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> - <small>Escribe dos veces la misma contraseña para que se pueda comprobar si tiene errores. Una buena contraseña está formada por letras, números y signos de puntuación, tiene por lo menos ocho caracteres y hay que cambiarla cada cierto tiempo.</small> - - - - What is the name of this computer? - ¿Cuál es el nombre de esta computadora? - - - + Your Full Name - + + What name do you want to use to log in? + ¿Qué nombre desea usar para acceder al sistema? + + + login - + + What is the name of this computer? + ¿Cuál es el nombre de esta computadora? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nombre sera usado si hace esta computadora visible para otros en una red.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Seleccione una contraseña para mantener segura su cuenta. + + + + + <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> + <small>Escribe dos veces la misma contraseña para que se pueda comprobar si tiene errores. Una buena contraseña está formada por letras, números y signos de puntuación, tiene por lo menos ocho caracteres y hay que cambiarla cada cierto tiempo.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Iniciar sesión automáticamente sin preguntar por la contraseña. - + Use the same password for the administrator account. Usar la misma contraseña para la cuenta de administrador. - + Choose a password for the administrator account. Elegir una contraseña para la cuenta de administrador. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Escribe dos veces la contraseña para comprobar si tiene errores</small> @@ -2327,42 +2667,42 @@ El instalador terminará y se perderán todos los cambios. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system Sistema EFI - + Swap Swap - + New partition for %1 Partición nueva para %1 - + New partition Partición nueva - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2711,39 @@ El instalador terminará y se perderán todos los cambios. PartitionModel - - + + Free Space Espacio libre - - + + New partition Partición nueva - + Name Nombre - + File System Sistema de archivos - + + File System Label + + + + Mount Point Punto de montaje - + Size Tamaño @@ -2406,77 +2751,77 @@ El instalador terminará y se perderán todos los cambios. PartitionPage - + Form Formulario - + Storage de&vice: Dis&positivo de almacenamiento: - + &Revert All Changes &Deshacer todos los cambios - + New Partition &Table Nueva &tabla de particiones - + Cre&ate Cre&ar - + &Edit &Editar - + &Delete &Borrar - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? ¿Está seguro de querer crear una nueva tabla de particiones en %1? - + Can not create new partition No se puede crear nueva partición - + 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. La tabla de partición en %1 ya tiene %2 particiones primarias, y no pueden agregarse mas. Favor remover una partición primaria y en cambio, agregue una partición extendida. @@ -2484,117 +2829,107 @@ El instalador terminará y se perderán todos los cambios. PartitionViewStep - + Gathering system information... Obteniendo información del sistema... - + Partitions Particiones - - Install %1 <strong>alongside</strong> another operating system. - Instalar %1 <strong>junto con</strong> otro sistema operativo. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Borrar</strong> el disco e instalar %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Reemplazar</strong> una parición con %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Particionamiento <strong>manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instalar %1 <strong>junto con</strong> otro sistema operativo en el disco <strong>%2</strong>(%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Borrar</strong> el disco <strong>%2<strong> (%3) e instalar %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Reemplazar</strong> una parición en el disco <strong>%2</strong> (%3) con %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particionar <strong>manualmente</strong> el disco <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disco <strong>%1</strong> (%2) - - - + Current: Actual: - + After: Después: - + No EFI system partition configured Sistema de partición EFI no configurada - - 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>esp</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. - Un sistema de partición EFI es necesario para iniciar %1. <br/><br/>Para configurar un sistema de partición EFI, Regrese y seleccione o cree un sistema de archivos FAT32 con la bandera <strong>esp</strong> activada y el punto de montaje <strong>%2</strong>. <br/><br/>Puede continuar sin configurar una partición de sistema EFI, pero su sistema podría fallar al iniciar. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Indicador de partición del sistema EFI no configurado + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Una partición del sistema EFI es necesaria para iniciar% 1. <br/><br/>Una partición se configuró con el punto de montaje <strong>% 2</strong>, pero su bandera <strong>esp</strong> no está configurada. <br/>Para establecer el indicador, retroceda y edite la partición.<br/><br/> Puede continuar sin configurar el indicador, pero su sistema puede fallar al iniciar. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Partición de arranque no encriptada - + 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. Se creó una partición de arranque separada junto con una partición raíz cifrada, pero la partición de arranque no está encriptada.<br/><br/> Existen problemas de seguridad con este tipo de configuración, ya que los archivos importantes del sistema se guardan en una partición no encriptada. <br/>Puede continuar si lo desea, pero el desbloqueo del sistema de archivos ocurrirá más tarde durante el inicio del sistema. <br/>Para encriptar la partición de arranque, retroceda y vuelva a crearla, seleccionando <strong>Encriptar</strong> en la ventana de creación de la partición. - + has at least one disk device available. - + There are no partitions to install on. @@ -2602,13 +2937,13 @@ El instalador terminará y se perderán todos los cambios. PlasmaLnfJob - + Plasma Look-and-Feel Job Trabajo Plasma Look-and-Feel - - + + Could not select KDE Plasma Look-and-Feel package No se pudo seleccionar el paquete KDE Plasma Look-and-Feel @@ -2616,17 +2951,17 @@ El instalador terminará y se perderán todos los cambios. PlasmaLnfPage - + Form Formulario - + 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. - + 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. Favor seleccione un Escritorio Plasma KDE Look-and-Feel. También puede omitir este paso y configurar el Look-and-Feel una vez el sistema está instalado. Haciendo clic en la selección Look-and-Feel le dará una previsualización en vivo de ese Look-and-Feel. @@ -2634,7 +2969,7 @@ El instalador terminará y se perderán todos los cambios. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2642,17 +2977,17 @@ El instalador terminará y se perderán todos los cambios. PreserveFiles - + Saving files for later ... Guardando archivos para más tarde ... - + No files configured to save for later. No hay archivos configurados para guardar más tarde. - + Not all of the configured files could be preserved. No todos los archivos configurados podrían conservarse. @@ -2660,14 +2995,14 @@ El instalador terminará y se perderán todos los cambios. ProcessResult - + There was no output from the command. No hubo salida desde el comando. - + Output: @@ -2676,52 +3011,52 @@ Salida - + External command crashed. El comando externo ha fallado. - + Command <i>%1</i> crashed. El comando <i>%1</i> ha fallado. - + External command failed to start. El comando externo falló al iniciar. - + Command <i>%1</i> failed to start. El comando <i>%1</i> Falló al iniciar. - + Internal error when starting command. Error interno al iniciar el comando. - + Bad parameters for process job call. Parámetros erróneos en la llamada al proceso. - + External command failed to finish. Comando externo falla al finalizar - + Command <i>%1</i> failed to finish in %2 seconds. Comando <i>%1</i> falló al finalizar en %2 segundos. - + External command finished with errors. Comando externo finalizado con errores - + Command <i>%1</i> finished with exit code %2. Comando <i>%1</i> finalizó con código de salida %2. @@ -2729,89 +3064,94 @@ Salida QObject - - Default Keyboard Model - Modelo de teclado por defecto - - - - - Default - Por defecto - - - - unknown - desconocido - - - - extended - extendido - - - - unformatted - no formateado - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Espacio no particionado o tabla de partición desconocida - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + desconocido - - No description provided. - + + extended + extendido - - - - + + unformatted + no formateado + + + + swap + swap + + + + + Default + Por defecto + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Espacio no particionado o tabla de partición desconocida + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2819,18 +3159,18 @@ Salida RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2838,144 +3178,159 @@ Salida ReplaceWidget - + Form Formulario - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selecciona donde instalar %1.<br/><font color="red">Aviso: </font>Se borrarán todos los archivos de la partición seleccionada. - + The selected item does not appear to be a valid partition. El elemento seleccionado no parece ser una partición válida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 no se puede instalar en un espacio vacío. Selecciona una partición existente. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 no se puede instalar en una partición extendida. Selecciona una partición primaria o lógica. - + %1 cannot be installed on this partition. No se puede instalar %1 en esta partición. - + Data partition (%1) Partición de datos (%1) - + Unknown system partition (%1) Partición de sistema desconocida (%1) - + %1 system partition (%2) %1 partición de sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partición %1 es muy pequeña para %2. Selecciona otra partición que tenga al menos %3 GiB. - + <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. <strong>%2</strong><br/><br/>No se puede encontrar una partición EFI en este sistema. Por favor vuelva atrás y use el particionamiento manual para configurar %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 sera instalado en %2.<br/><font color="red">Advertencia: </font>toda la información en la partición %2 se perdera. - + The EFI system partition at %1 will be used for starting %2. La partición EFI en %1 será usada para iniciar %2. - + EFI system partition: Partición de sistema EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration Configuración inválida - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available KPMCore no está disponible - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2983,22 +3338,22 @@ Salida ResizePartitionJob - + Resize partition %1. Redimensionar partición %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. El instalador ha fallado al reducir la partición %1 en el disco '%2'. @@ -3006,7 +3361,7 @@ Salida ResizeVolumeGroupDialog - + Resize Volume Group @@ -3014,18 +3369,18 @@ Salida ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3033,53 +3388,25 @@ Salida ResultsListDialog - + For best results, please ensure that this computer: Para mejores resultados, por favor verifique que esta computadora: - + System requirements Requisitos de sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este equipo no cumple los requisitos mínimos para la instalación. %1.<br/>La instalación no puede continuar. <a href="#details">Detalles...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este equipo no cumple alguno de los requisitos recomendados para la instalación %1.<br/>La instalación puede continuar, pero algunas funcionalidades podrían ser deshabilitadas. - - - - This program will ask you some questions and set up %2 on your computer. - El programa le hará algunas preguntas y configurará %2 en su ordenador. - - ScanningDialog - + Scanning storage devices... Escaneando dispositivos de almacenamiento... - + Partitioning Particionando @@ -3087,29 +3414,29 @@ Salida SetHostNameJob - + Set hostname %1 Hostname: %1 - + Set hostname <strong>%1</strong>. Establecer nombre del equipo <strong>%1</strong>. - + Setting hostname %1. Configurando nombre de host %1. + - Internal Error Error interno - - + + Cannot write hostname to target system No es posible escribir el hostname en el sistema de destino @@ -3117,29 +3444,29 @@ Salida SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Establecer el modelo de teclado %1, a una disposición %2-%3 - + Failed to write keyboard configuration for the virtual console. No se ha podido guardar la configuración de teclado para la consola virtual. - - - + + + Failed to write to %1 No se ha podido escribir en %1 - + Failed to write keyboard configuration for X11. No se ha podido guardar la configuración del teclado de X11. - + Failed to write keyboard configuration to existing /etc/default directory. Fallo al escribir la configuración del teclado en el directorio /etc/default existente. @@ -3147,125 +3474,125 @@ Salida SetPartFlagsJob - + Set flags on partition %1. - Establecer indicadores en la partición% 1. + Establecer indicadores en la partición %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Establecer indicadores en la nueva partición. - + Clear flags on partition <strong>%1</strong>. Borrar indicadores en la partición <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Borrar indicadores en la nueva partición. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Indicador de partición <strong>%1</strong> como <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Marcar la nueva partición como <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Borrar indicadores en la partición <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Borrar indicadores en la nueva partición. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Establecer indicadores <strong>%2</strong> en la partición <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Establecer indicadores <strong>%1</strong> en nueva partición. - + The installer failed to set flags on partition %1. - El instalador no pudo establecer indicadores en la partición% 1. + El instalador no pudo establecer indicadores en la partición %1. SetPasswordJob - + Set password for user %1 Definir contraseña para el usuario %1. - + Setting password for user %1. Configurando contraseña para el usuario %1. - + Bad destination system path. Destino erróneo del sistema. - + rootMountPoint is %1 El punto de montaje de root es %1 - + Cannot disable root account. No se puede deshabilitar la cuenta root. - + passwd terminated with error code %1. Contraseña terminada con un error de código %1. - + Cannot set password for user %1. No se puede definir contraseña para el usuario %1. - + usermod terminated with error code %1. usermod ha terminado con el código de error %1 @@ -3273,45 +3600,82 @@ Salida SetTimezoneJob - + Set timezone to %1/%2 Configurar zona horaria a %1/%2 - + Cannot access selected timezone path. No se puede acceder a la ruta de la zona horaria. - + Bad path: %1 Ruta errónea: %1 - + Cannot set timezone. No se puede definir la zona horaria - + Link creation failed, target: %1; link name: %2 Fallo al crear el enlace, destino: %1; nombre del enlace: %2 - + Cannot set timezone, No se puede establer la zona horaria. - + Cannot open /etc/timezone for writing No se puede abrir /etc/timezone para escritura + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + No se puede aplicar chmod al archivo sudoers. + + + + Cannot create sudoers file for writing. + No se puede crear el archivo sudoers para editarlo. + + ShellProcessJob - + Shell Processes Job Trabajo de procesos Shell @@ -3319,188 +3683,215 @@ Salida SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Esta es una descripción general de lo que sucederá una vez que comience el procedimiento de configuración. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Esto es un resumen de lo que pasará una vez que inicie el procedimiento de instalación. + + &Yes + &Si - - - SummaryViewStep - - Summary - Resumen + + &No + &No + + + + &Cancel + &Cancelar + + + + &Close + &Cerrar TrackingInstallJob - + Installation feedback Retroalimentacion de la instalación - + Sending installation feedback. Envío de retroalimentación de instalación. - + Internal error in install-tracking. Error interno en el seguimiento de instalación. - + HTTP request timed out. Tiempo de espera en la solicitud HTTP agotado. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Retroalimentación de la maquina - + Configuring machine feedback. Configurando la retroalimentación de la maquina. - - + + Error in machine feedback configuration. Error en la configuración de retroalimentación de la máquina. - + Could not configure machine feedback correctly, script error %1. - No se pudo configurar correctamente la retroalimentación de la máquina, error de script% 1. + No se pudo configurar correctamente la retroalimentación de la máquina, error de script %1. - + Could not configure machine feedback correctly, Calamares error %1. - No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error% 1. + No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error %1. TrackingPage - + Form Formulario - + Placeholder Marcador de posición - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Al seleccionar esto, usted no enviará <span style=" font-weight:600;">ninguna información</span> acerca de su instalacion.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Haga clic aquí para más información acerca de comentarios del usuario</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - El seguimiento de instalación ayuda a% 1 a ver cuántos usuarios tienen, qué hardware instalan% 1 y (con las dos últimas opciones a continuación), obtener información continua sobre las aplicaciones preferidas. Para ver qué se enviará, haga clic en el ícono de ayuda al lado de cada área. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Al seleccionar esto usted enviará información acerca de su instalación y hardware. Esta informacion será <b>enviada unicamente una vez</b> después de terminada la instalación. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Al seleccionar esto usted enviará información <b>periodicamente</b> acerca de su instalación, hardware y aplicaciones a %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Al seleccionar esto usted enviará información <b>regularmente</b> acerca de su instalación, hardware y patrones de uso de aplicaciones a %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Retroalimentación + + UmountJob + + + Unmount file systems. + Desmontar sistemas de archivo. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Si más de una persona usará esta computadora, puede crear múltiples cuentas después de la configuración</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Si más de una persona usará esta computadora, puede crear varias cuentas después de la instalación.</small> + + + UsersQmlViewStep - - Your username is too long. - Tu nombre de usuario es demasiado largo. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - El nombre de tu equipo es demasiado corto. - - - - Your hostname is too long. - El nombre de tu equipo es demasiado largo. - - - - Your passwords do not match! - Las contraseñas no coinciden! + + Users + Usuarios UsersViewStep - + Users Usuarios @@ -3508,65 +3899,67 @@ Salida VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Valor VolumeGroupBaseDialog - + Create Volume Group Crear Grupo de Volumen - + List of Physical Volumes Lista de volúmenes físicos - + Volume Group Name: Nombre de Grupo de volumen: - + Volume Group Type: Tipo de Grupo de volumen: - + Physical Extent Size: Tamaño de la extensión física: - + MiB MiB - + Total Size: Tamaño total: - + Used Size: Tamaño usado: - + Total Sectors: Total de Sectores: - + Quantity of LVs: Cantidad de LVs: @@ -3574,106 +3967,106 @@ Salida WelcomePage - + Form Formulario - - + + Select application and system language + &About + &Acerca de + + + Open donations website - + &Donate - + Open help and support website + &Support + &Soporte + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Notas de lanzamiento - - - &Known issues &Problemas Conocidos - - &Support - &Soporte + + Open release notes website + - - &About - &Acerca de + + &Release notes + &Notas de lanzamiento - - <h1>Welcome to the %1 installer.</h1> - <h1>Bienvenido al instalador de %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bienvenido al instalador Calamares para %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bienvenido al programa de instalación Calamares para %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Bienvenido a la configuración %1</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Bienvenido al instalador Calamares para %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Bienvenido al instalador de %1.</h1> + + + + %1 support + %1 Soporte + + + About %1 setup Acerca de la configuración %1 - + About %1 installer Acerca del instalador %1 - + <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. - - - %1 support - %1 Soporte - WelcomeQmlViewStep - + Welcome Bienvenido @@ -3681,31 +4074,157 @@ Salida WelcomeViewStep - + Welcome Bienvenido + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Error de configuración + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Mostrar información de depuración + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3713,86 +4232,283 @@ Salida keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelo de teclado: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Teclee aquí para probar su teclado - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + ¿Cuál es su nombre? + + + + Your Full Name + + + + + What name do you want to use to log in? + ¿Qué nombre desea usar para acceder al sistema? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + ¿Cuál es el nombre de esta computadora? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Seleccione una contraseña para mantener segura su cuenta. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Usar la misma contraseña para la cuenta de administrador. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_es_PR.ts b/lang/calamares_es_PR.ts index 974083530..f3fccce77 100644 --- a/lang/calamares_es_PR.ts +++ b/lang/calamares_es_PR.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Registro de arranque maestro de %1 - + Boot Partition Partición de arranque - + System Partition Partición del sistema - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulario - + GlobalStorage AlmacenamientoGlobal - + JobQueue ColadeTrabajos - + Modules Módulos - + Type: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Información de depuración @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Instalar @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Hecho @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path La ruta del directorio de trabajo es incorrecta - + Working directory %1 for python job %2 is not readable. El directorio de trabajo %1 para el script de python %2 no se puede leer. - + Bad main script file Script principal erróneo - + Main script file %1 for python job %2 is not readable. El script principal %1 del proceso python %2 no es accesible. - + Boost.Python error in job "%1". Error Boost.Python en el proceso "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - &Atrás - - - - &Next - &Próximo - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed + Falló la instalación + + + + Error + Error + + + + &Yes - + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &Próximo + + + + &Back + &Atrás + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - Error - - - - Installation Failed - Falló la instalación - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Atrás - - - - &Next - &Próximo - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Formulario - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Falló la instalación + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Resumen + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form Formulario - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Formulario - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard Teclado @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Teclado @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulario - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location Ubicación + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Ubicación @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Formulario - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Formulario - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Formulario - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Formulario - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Formulario - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Parámetros erróneos para el trabajo en proceso. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form Formulario - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary - Resumen + + &No + + + + + &Cancel + + + + + &Close + TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form Formulario - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form Formulario - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_et.ts b/lang/calamares_et.ts index 6110c0677..002e36de1 100644 --- a/lang/calamares_et.ts +++ b/lang/calamares_et.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. Selle süsteemi <strong>käivituskeskkond</strong>.<br><br>Vanemad x86 süsteemid toetavad ainult <strong>BIOS</strong>i.<br>Modernsed süsteemid tavaliselt kasutavad <strong>EFI</strong>t, aga võib ka kasutada BIOSi, kui käivitatakse ühilduvusrežiimis. - + 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. See süsteem käivitati <strong>EFI</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust EFI keskkonnast, peab see paigaldaja paigaldama käivituslaaduri rakenduse, näiteks <strong>GRUB</strong> või <strong>systemd-boot</strong> sinu <strong>EFI süsteemipartitsioonile</strong>. See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle valima või ise looma. - + 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. See süsteem käivitati <strong>BIOS</strong> käivituskeskkonnas.<br><br>Et seadistada käivitust BIOS keskkonnast, peab see paigaldaja paigaldama käivituslaaduri, näiteks <strong>GRUB</strong>, kas mõne partitsiooni algusse või <strong>Master Boot Record</strong>'i paritsioonitabeli alguse lähedale (eelistatud). See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle ise seadistama. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1 Master Boot Record - + Boot Partition Käivituspartitsioon - + System Partition Süsteemipartitsioon - + Do not install a boot loader Ära paigalda käivituslaadurit - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Tühi leht @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Moodulid - + Type: Tüüp: - - + + none puudub - + Interface: Liides: - - Tools - Tööriistad + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Silumisteave @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Paigalda @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Valmis @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Käivitan käsklust %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Käivitan %1 tegevust. - + Bad working directory path Halb töökausta tee - + Working directory %1 for python job %2 is not readable. Töökaust %1 python tööle %2 pole loetav. - + Bad main script file Halb põhiskripti fail - + Main script file %1 for python job %2 is not readable. Põhiskripti fail %1 python tööle %2 pole loetav. - + Boost.Python error in job "%1". Boost.Python viga töös "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Tagasi - - - - &Next - &Edasi - - - - &Cancel - &Tühista - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Tühista paigaldamine ilma süsteemi muutmata. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Paigaldamine ebaõnnestus - + + Error + Viga + + + + &Yes + &Jah + + + + &No + &Ei + + + + &Close + &Sulge + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Calamarese alglaadimine ebaõnnestus - + %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. %1 ei saa paigaldada. Calamares ei saanud laadida kõiki konfigureeritud mooduleid. See on distributsiooni põhjustatud Calamarese kasutamise viga. - + <br/>The following modules could not be loaded: <br/>Järgnevaid mooduleid ei saanud laadida: - + + Continue with setup? + Jätka seadistusega? + + + Continue with installation? - + 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> - + + 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> + %1 paigaldaja on tegemas muudatusi sinu kettale, et paigaldada %2.<br/><strong>Sa ei saa neid muudatusi tagasi võtta.</strong> + + + &Set up now &Seadista kohe - + + &Install now + &Paigalda kohe + + + + Go &back + Mine &tagasi + + + &Set up &Seadista - + &Install &Paigalda - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Paigaldamine on lõpetatud. Sulge paigaldaja. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Tühista paigaldamine ilma süsteemi muutmata. + + + + &Next + &Edasi + + + + &Back + &Tagasi + + + + &Done + &Valmis + + + + &Cancel + &Tühista + + + Cancel setup? - + Cancel installation? Tühista paigaldamine? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Kas sa tõesti soovid tühistada praeguse paigaldusprotsessi? Paigaldaja sulgub ning kõik muutused kaovad. - - - - &Yes - &Jah - - - - - &No - &Ei - - - - &Close - &Sulge - - - - Continue with setup? - Jätka seadistusega? - - - - 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> - %1 paigaldaja on tegemas muudatusi sinu kettale, et paigaldada %2.<br/><strong>Sa ei saa neid muudatusi tagasi võtta.</strong> - - - - &Install now - &Paigalda kohe - - - - Go &back - Mine &tagasi - - - - &Done - &Valmis - - - - The installation is complete. Close the installer. - Paigaldamine on lõpetatud. Sulge paigaldaja. - - - - Error - Viga - - - - Installation Failed - Paigaldamine ebaõnnestus - CalamaresPython::Helper - + Unknown exception type Tundmatu veateade - + unparseable Python error mittetöödeldav Python'i viga - + unparseable Python traceback mittetöödeldav Python'i traceback - + Unfetchable Python error. Kättesaamatu Python'i viga. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Tagasi - - - - &Next - &Edasi - - - - &Cancel - &Tühista - - - + %1 Setup Program - + %1 Installer %1 paigaldaja + + + ChangeFilesystemLabelJob - - Show debug information - Kuva silumisteavet + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + CheckerContainer - + Gathering system information... Hangin süsteemiteavet... @@ -498,157 +522,197 @@ Paigaldaja sulgub ning kõik muutused kaovad. ChoicePage - + Form Form - - After: - Pärast: - - - - Boot loader location: - Käivituslaaduri asukoht: - - - + Select storage de&vice: Vali mäluseade: - - - - + + + + Current: Hetkel: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Pärast: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Käsitsi partitsioneerimine</strong><br/>Sa võid ise partitsioone luua või nende suurust muuta. + + + Reuse %1 as home partition for %2. Taaskasuta %1 %2 kodupartitsioonina. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vali vähendatav partitsioon, seejärel sikuta alumist riba suuruse muutmiseks</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Käivituslaaduri asukoht: + + + <strong>Select a partition to install on</strong> <strong>Vali partitsioon, kuhu paigaldada</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI süsteemipartitsiooni ei leitud sellest süsteemist. Palun mine tagasi ja kasuta käsitsi partitsioonimist, et seadistada %1. - + The EFI system partition at %1 will be used for starting %2. EFI süsteemipartitsioon asukohas %1 kasutatakse %2 käivitamiseks. - + EFI system partition: EFI süsteemipartitsioon: - + 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. Sellel mäluseadmel ei paista olevat operatsioonisüsteemi peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Tühjenda ketas</strong><br/>See <font color="red">kustutab</font> kõik valitud mäluseadmel olevad andmed. - - 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. - Sellel mäluseadmel on peal %1. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Paigalda kõrvale</strong><br/>Paigaldaja vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Asenda partitsioon</strong><br/>Asendab partitsiooni operatsioonisüsteemiga %1. - + + 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. + Sellel mäluseadmel on peal %1. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. + + + 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. Sellel mäluseadmel on juba operatsioonisüsteem peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. - + 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. Sellel mäluseadmel on mitu operatsioonisüsteemi peal. Mida soovid teha?<br/>Sa saad oma valikud üle vaadata ja kinnitada enne kui mistahes muudatus saab mäluseadmele teostatud. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Tühjenda monteeringud partitsioneerimistegevustes %1 juures - + Clearing mounts for partitioning operations on %1. Tühjendan monteeringud partitsioneerimistegevustes %1 juures. - + Cleared all mounts for %1 Kõik monteeringud tühjendatud %1 jaoks @@ -656,22 +720,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. ClearTempMountsJob - + Clear all temporary mounts. Tühjenda kõik ajutised monteeringud. - + Clearing all temporary mounts. Tühjendan kõik ajutised monteeringud. - - Cannot get list of temporary mounts. - Ajutiste monteeringute nimekirja ei saa hankida. - - - + Cleared all temporary mounts. Kõik ajutised monteeringud tühjendatud. @@ -679,18 +738,18 @@ Paigaldaja sulgub ning kõik muutused kaovad. CommandList - - + + Could not run command. Käsku ei saanud käivitada. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. See käsklus käivitatakse hostikeskkonnas ning peab teadma juurteed, kuid rootMountPoint pole defineeritud. - + The command needs to know the user's name, but no username is defined. Käsklus peab teadma kasutaja nime, aga kasutajanimi pole defineeritud. @@ -698,100 +757,235 @@ Paigaldaja sulgub ning kõik muutused kaovad. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - See arvuti ei rahulda %1 paigldamiseks vajalikke minimaaltingimusi.<br/>Paigaldamine ei saa jätkuda. <a href="#details">Detailid...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - See arvuti ei rahulda mõnda %1 paigaldamiseks soovitatud tingimust.<br/>Paigaldamine võib jätkuda, ent mõned funktsioonid võivad olla keelatud. - - - - This program will ask you some questions and set up %2 on your computer. - See programm küsib sult mõned küsimused ja seadistab %2 sinu arvutisse. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Tere tulemast Calamares'i paigaldajasse %1 jaoks.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Tere tulemast %1 paigaldajasse.</h1> - - - + Set keyboard model to %1.<br/> Sea klaviatuurimudeliks %1.<br/> - + Set keyboard layout to %1/%2. Sea klaviatuuripaigutuseks %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. Süsteemikeeleks määratakse %1. - + The numbers and dates locale will be set to %1. Arvude ja kuupäevade lokaaliks seatakse %1. - - Set timezone to %1/%2.<br/> - Määra ajatsooniks %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Võrgupaigaldus. (Keelatud: vastu võetud sobimatud grupiandmed) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Paketivalik + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Võrgupaigaldus. (Keelatud: paketinimistute saamine ebaõnnestus, kontrolli oma võrguühendust) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + See arvuti ei rahulda %1 paigldamiseks vajalikke minimaaltingimusi.<br/>Paigaldamine ei saa jätkuda. <a href="#details">Detailid...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + See arvuti ei rahulda mõnda %1 paigaldamiseks soovitatud tingimust.<br/>Paigaldamine võib jätkuda, ent mõned funktsioonid võivad olla keelatud. + + + + This program will ask you some questions and set up %2 on your computer. + See programm küsib sult mõned küsimused ja seadistab %2 sinu arvutisse. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Sinu kasutajanimi on liiga pikk. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Sinu hostinimi on liiga lühike. + + + + Your hostname is too long. + Sinu hostinimi on liiga pikk. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Sinu paroolid ei ühti! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Paigaldamine ebaõnnestus + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Seadistus valmis + + + + Installation Complete + Paigaldus valmis + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + %1 paigaldus on valmis. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Kokkuvõte + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + See on ülevaade sellest mis juhtub, kui alustad paigaldusprotseduuri. + ContextualProcessJob - + Contextual Processes Job Kontekstipõhiste protsesside töö @@ -799,100 +993,136 @@ Paigaldaja sulgub ning kõik muutused kaovad. CreatePartitionDialog - + Create a Partition Loo sektsioon - - MiB - MiB - - - - Partition &Type: - Partitsiooni tüüp: - - - - &Primary - %Peamine - - - - E&xtended - %Laiendatud - - - - Fi&le System: - %Failisüsteem: - - - - LVM LV name - LVM LV nimi - - - - Flags: - Sildid: - - - - &Mount Point: - &Monteerimispunkt: - - - + Si&ze: Suurus: - + + MiB + MiB + + + + Partition &Type: + Partitsiooni tüüp: + + + + Primar&y + + + + + E&xtended + %Laiendatud + + + + Fi&le System: + %Failisüsteem: + + + + LVM LV name + LVM LV nimi + + + + &Mount Point: + &Monteerimispunkt: + + + + Flags: + Sildid: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt &Krüpti - + Logical Loogiline - + Primary Peamine - + GPT GPT - + Mountpoint already in use. Please select another one. Monteerimispunkt on juba kasutusel. Palun vali mõni teine. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Loon uut %1 partitsiooni kettal %2. - + The installer failed to create partition on disk '%1'. Paigaldaja ei suutnud luua partitsiooni kettale "%1". @@ -900,27 +1130,27 @@ Paigaldaja sulgub ning kõik muutused kaovad. CreatePartitionTableDialog - + Create Partition Table Loo partitsioonitabel - + Creating a new partition table will delete all existing data on the disk. Uue partitsioonitabeli loomine kustutab kettalt kõik olemasolevad andmed. - + What kind of partition table do you want to create? Millist partitsioonitabelit soovid luua? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID partitsioonitabel (GPT) @@ -928,22 +1158,22 @@ Paigaldaja sulgub ning kõik muutused kaovad. CreatePartitionTableJob - + Create new %1 partition table on %2. Loo uus %1 partitsioonitabel kohta %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Loo uus <strong>%1</strong> partitsioonitabel kohta <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Loon uut %1 partitsioonitabelit kohta %2. - + The installer failed to create a partition table on %1. Paigaldaja ei suutnud luua partitsioonitabelit kettale %1. @@ -951,45 +1181,41 @@ Paigaldaja sulgub ning kõik muutused kaovad. CreateUserJob - + Create user %1 Loo kasutaja %1 - + Create user <strong>%1</strong>. Loo kasutaja <strong>%1</strong>. - - Creating user %1. - Loon kasutajat %1. + + Preserving home directory + - - Sudoers dir is not writable. - Sudoja tee ei ole kirjutatav. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Sudoja faili ei saa kirjutamiseks luua. + + Configuring user %1 + - - Cannot chmod sudoers file. - Sudoja faili ei saa chmod-ida. - - - - Cannot open groups file for reading. - Grupifaili ei saa lugemiseks avada. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1223,22 @@ Paigaldaja sulgub ning kõik muutused kaovad. CreateVolumeGroupJob - + Create new volume group named %1. Loo uus kettagrupp nimega %1. - + Create new volume group named <strong>%1</strong>. Loo uus kettagrupp nimega <strong>%1</strong>. - + Creating new volume group named %1. Uue kettagrupi %1 loomine. - + The installer failed to create a volume group named '%1'. Paigaldaja ei saanud luua kettagruppi "%1". @@ -1020,18 +1246,18 @@ Paigaldaja sulgub ning kõik muutused kaovad. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Keela kettagrupp nimega %1. - + Deactivate volume group named <strong>%1</strong>. Keela kettagrupp nimega <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Paigaldaja ei saanud luua kettagruppi "%1". @@ -1039,22 +1265,22 @@ Paigaldaja sulgub ning kõik muutused kaovad. DeletePartitionJob - + Delete partition %1. Kustuta partitsioon %1. - + Delete partition <strong>%1</strong>. Kustuta partitsioon <strong>%1</strong>. - + Deleting partition %1. Kustutan partitsiooni %1. - + The installer failed to delete partition %1. Paigaldaja ei suutnud kustutada partitsiooni %1. @@ -1062,46 +1288,46 @@ Paigaldaja sulgub ning kõik muutused kaovad. DeviceInfoWidget - - 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. - <strong>Partitsioonitabeli</strong> tüüp valitud mäluseadmel.<br><br>Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.<br>See paigaldaja säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.<br>Kui pole kindel, eelista modernsetel süsteemidel GPT-d. - - - + This device has a <strong>%1</strong> partition table. Sellel seadmel on <strong>%1</strong> partitsioonitabel. - + 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. See on <strong>loop</strong>-seade.<br><br>See on pseudo-seade ilma partitsioonitabelita, mis muudab faili ligipääsetavaks plokiseadmena. Seda tüüpi seadistus sisaldab tavaliselt ainult ühte failisüsteemi. - + 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. See paigaldaja <strong>ei suuda tuvastada partitsioonitabelit</strong>valitud mäluseadmel.<br><br>Seadmel kas pole partitsioonitabelit, see on korrumpeerunud või on tundmatut tüüpi.<br>See paigaldaja võib sulle luua uue partitsioonitabeli, kas automaatselt või läbi käsitsi partitsioneerimise lehe. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>See on soovitatav partitsioonitabeli tüüp modernsetele süsteemidele, mis käivitatakse <strong>EFI</strong>käivituskeskkonnast. - + <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. <br><br>See partitsioonitabel on soovitatav ainult vanemates süsteemides, mis käivitavad <strong>BIOS</strong>-i käivituskeskkonnast. GPT on soovitatav enamus teistel juhtudel.<br><br><strong>Hoiatus:</strong> MBR partitsioonitabel on vananenud MS-DOS aja standard.<br>aVõimalik on luua inult 4 <em>põhilist</em> partitsiooni ja nendest üks võib olla <em>laiendatud</em> partitsioon, mis omakorda sisaldab mitmeid <em>loogilisi</em> partitsioone. + + + 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. + <strong>Partitsioonitabeli</strong> tüüp valitud mäluseadmel.<br><br>Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.<br>See paigaldaja säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.<br>Kui pole kindel, eelista modernsetel süsteemidel GPT-d. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1336,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Kirjuta Dracut'ile LUKS konfiguratsioon kohta %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Lõpeta Dracut'ile LUKS konfigruatsiooni kirjutamine: "/" partitsioon pole krüptitud - + Failed to open %1 %1 avamine ebaõnnestus @@ -1128,7 +1354,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. DummyCppJob - + Dummy C++ Job Testiv C++ töö @@ -1136,123 +1362,167 @@ Paigaldaja sulgub ning kõik muutused kaovad. EditExistingPartitionDialog - + Edit Existing Partition Muuda olemasolevat partitsiooni - - Content: - Sisu: + + Con&tent: + - + &Keep &Säilita - + Format Vorminda - + Warning: Formatting the partition will erase all existing data. Hoiatus: Partitsiooni vormindamine tühjendab kõik olemasolevad andmed. - + &Mount Point: &Monteerimispunkt: - + Si&ze: Suurus: - + MiB MiB - + Fi&le System: %Failisüsteem: - + Flags: Sildid: - - Mountpoint already in use. Please select another one. - Monteerimispunkt on juba kasutusel. Palun vali mõni teine. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Form - + En&crypt system Krüpti süsteem - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Salaväljend - + Confirm passphrase Kinnita salaväljendit - + + Please enter the same passphrase in both boxes. Palun sisesta sama salaväljend mõlemisse kasti. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Sea partitsiooni teave - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Paigalda %1 <strong>uude</strong> %2 süsteemipartitsiooni. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Seadista <strong>uus</strong> %2 partitsioon monteerimiskohaga <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Paigalda %2 %3 süsteemipartitsioonile <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Seadista %3 partitsioon <strong>%1</strong> monteerimiskohaga <strong>%2</strong> - - - + Install boot loader on <strong>%1</strong>. Paigalda käivituslaadur kohta <strong>%1</strong>. - + Setting up mount points. Seadistan monteerimispunkte. @@ -1260,93 +1530,81 @@ Paigaldaja sulgub ning kõik muutused kaovad. FinishedPage - + Form Form - + &Restart now &Taaskäivita nüüd - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Kõik on valmis.</h1><br/>%1 on paigaldatud sinu arvutisse.<br/>Sa võid nüüd taaskäivitada oma uude süsteemi või jätkata %2 live-keskkonna kasutamist. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Paigaldamine ebaõnnestus</h1><br/>%1 ei paigaldatud sinu arvutisse.<br/>Veateade oli: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Valmis + + + FinishedViewStep - - Setup Complete - Seadistus valmis - - - - Installation Complete - Paigaldus valmis - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - %1 paigaldus on valmis. + + Finish + Valmis FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Vormindan partitsiooni %1 failisüsteemiga %2. - + The installer failed to format partition %1 on disk '%2'. Paigaldaja ei suutnud vormindada partitsiooni %1 kettal "%2". @@ -1354,72 +1612,72 @@ Paigaldaja sulgub ning kõik muutused kaovad. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source on ühendatud vooluallikasse - + The system is not plugged in to a power source. Süsteem pole ühendatud vooluallikasse. - + is connected to the Internet on ühendatud Internetti - + The system is not connected to the Internet. Süsteem pole ühendatud Internetti. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Paigaldaja pole käivitatud administraatoriõigustega. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Ekraan on paigaldaja kuvamiseks liiga väike. @@ -1427,7 +1685,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1693,25 @@ Paigaldaja sulgub ning kõik muutused kaovad. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1719,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1727,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. InitramfsJob - + Creating initramfs. @@ -1477,17 +1735,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. InteractiveTerminalPage - + Konsole not installed Konsole pole paigaldatud - + Please install KDE Konsole and try again! Palun paigalda KDE Konsole ja proovi uuesti! - + Executing script: &nbsp;<code>%1</code> Käivitan skripti: &nbsp;<code>%1</code> @@ -1495,28 +1753,15 @@ Paigaldaja sulgub ning kõik muutused kaovad. InteractiveTerminalViewStep - + Script Skript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Sea klaviatuurimudeliks %1.<br/> - - - - Set keyboard layout to %1/%2. - Sea klaviatuuripaigutuseks %1/%2. - - KeyboardQmlViewStep - + Keyboard Klaviatuur @@ -1524,7 +1769,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. KeyboardViewStep - + Keyboard Klaviatuur @@ -1532,65 +1777,88 @@ Paigaldaja sulgub ning kõik muutused kaovad. LCLocaleDialog - + System locale setting Süsteemilokaali valik - + 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>. Süsteemilokaali valik mõjutab keelt ja märgistikku teatud käsurea kasutajaliideste elementidel.<br/>Praegune valik on <strong>%1</strong>. - + &Cancel &Tühista - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Ma nõustun alljärgevate tingimustega. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1866,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. LicenseViewStep - + License Litsents @@ -1606,109 +1874,102 @@ Paigaldaja sulgub ning kõik muutused kaovad. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 draiver</strong><br/>autorilt %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graafikadraiver</strong><br/><font color="Grey">autorilt %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 brauseriplugin</strong><br/><font color="Grey">autorilt %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 koodek</strong><br/><font color="Grey">autorilt %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakett</strong><br/><font color="Grey">autorilt %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">autorilt %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Süsteemikeeleks määratakse %1. - - - - The numbers and dates locale will be set to %1. - Arvude ja kuupäevade lokaaliks seatakse %1. - - - + Region: Regioon: - + Zone: Tsoon: - - + + &Change... &Muuda... - - - Set timezone to %1/%2.<br/> - Määra ajatsooniks %1/%2.<br/> - LocaleQmlViewStep - + Location Asukoht + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Asukoht @@ -1716,35 +1977,35 @@ Paigaldaja sulgub ning kõik muutused kaovad. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2013,130 @@ Paigaldaja sulgub ning kõik muutused kaovad. MachineIdJob - + Generate machine-id. Genereeri masina-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Paketivalik - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2144,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. NotesQmlViewStep - + Notes @@ -1877,17 +2152,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2170,317 @@ Paigaldaja sulgub ning kõik muutused kaovad. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Parool on liiga lühike - + Password is too long Parool on liiga pikk - + Password is too weak Parool on liiga nõrk - + Memory allocation error when setting '%1' Mälu eraldamise viga valikut "%1" määrates - + Memory allocation error Mälu eraldamise viga - + The password is the same as the old one Parool on sama mis enne - + The password is a palindrome Parool on palindroom - + The password differs with case changes only Parool erineb ainult suurtähtede poolest - + The password is too similar to the old one Parool on eelmisega liiga sarnane - + The password contains the user name in some form Parool sisaldab mingil kujul kasutajanime - + The password contains words from the real name of the user in some form Parool sisaldab mingil kujul sõnu kasutaja pärisnimest - + The password contains forbidden words in some form Parool sisaldab mingil kujul sobimatuid sõnu - - The password contains less than %1 digits - Parool sisaldab vähem kui %1 numbrit - - - + The password contains too few digits Parool sisaldab liiga vähe numbreid - - The password contains less than %1 uppercase letters - Parool sisaldab vähem kui %1 suurtähte - - - + The password contains too few uppercase letters Parool sisaldab liiga vähe suurtähti - - - The password contains less than %1 lowercase letters - Parool sisaldab vähem kui %1 väiketähte + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters Parool sisaldab liiga vähe väiketähti - - The password contains less than %1 non-alphanumeric characters - Parool sisaldab vähem kui %1 mitte-tähestikulist märki - - - + The password contains too few non-alphanumeric characters Parool sisaldab liiga vähe mitte-tähestikulisi märke - - The password is shorter than %1 characters - Parool on lühem kui %1 tähemärki - - - + The password is too short Parool on liiga lühike - - The password is just rotated old one - Parool on lihtsalt pööratud eelmine parool - - - - The password contains less than %1 character classes - Parool sisaldab vähem kui %1 tähemärgiklassi - - - + The password does not contain enough character classes Parool ei sisalda piisavalt tähemärgiklasse - - The password contains more than %1 same characters consecutively - Parool sisaldab järjest rohkem kui %1 sama tähemärki - - - + The password contains too many same characters consecutively Parool sisaldab järjest liiga palju sama tähemärki - - The password contains more than %1 characters of the same class consecutively - Parool sisaldab järjest samast klassist rohkem kui %1 tähemärki - - - + The password contains too many characters of the same class consecutively Parool sisaldab järjest liiga palju samast klassist tähemärke - - - The password contains monotonic sequence longer than %1 characters - Parool sisaldab monotoonset jada, mis on pikem kui %1 tähemärki + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence Parool sisaldab liiga pikka monotoonsete tähemärkide jada - + No password supplied Parooli ei sisestatud - + Cannot obtain random numbers from the RNG device RNG seadmest ei saanud hankida juhuslikke numbreid - + Password generation failed - required entropy too low for settings Parooligenereerimine ebaõnnestus - nõutud entroopia on seadete jaoks liiga vähe - + The password fails the dictionary check - %1 Parool põrub sõnastikukontrolli - %1 - + The password fails the dictionary check Parool põrub sõnastikukontrolli - + Unknown setting - %1 Tundmatu valik - %1 - + Unknown setting Tundmatu valik - + Bad integer value of setting - %1 Halb täisarvuline väärtus valikul - %1 - + Bad integer value Halb täisarvuväärtus - + Setting %1 is not of integer type Valik %1 pole täisarvu tüüpi - + Setting is not of integer type Valik ei ole täisarvu tüüpi - + Setting %1 is not of string type Valik %1 ei ole string-tüüpi - + Setting is not of string type Valik ei ole string-tüüpi - + Opening the configuration file failed Konfiguratsioonifaili avamine ebaõnnestus - + The configuration file is malformed Konfiguratsioonifail on rikutud - + Fatal failure Saatuslik viga - + Unknown error Tundmatu viga - + Password is empty @@ -2156,40 +2488,48 @@ Paigaldaja sulgub ning kõik muutused kaovad. PackageChooserPage - + Form Form - + Product Name - + TextLabel TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2537,12 @@ Paigaldaja sulgub ning kõik muutused kaovad. PackageModel - + Name Nimi - + Description Kirjeldus @@ -2210,17 +2550,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. Page_Keyboard - + Form Form - + Keyboard Model: Klaviatuurimudel: - + Type here to test your keyboard Kirjuta siia, et testida oma klaviatuuri @@ -2228,96 +2568,96 @@ Paigaldaja sulgub ning kõik muutused kaovad. Page_UserSetup - + Form Form - + What is your name? Mis on su nimi? - - What name do you want to use to log in? - Mis nime soovid sisselogimiseks kasutada? - - - - Choose a password to keep your account safe. - Vali parool, et hoida oma konto turvalisena. - - - - - <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> - <small>Sisesta sama parool kaks korda, et kontrollida kirjavigade puudumist. Hea parool sisaldab segu tähtedest, numbritest ja kirjavahemärkidest, peaks olema vähemalt kaheksa märki pikk ja seda peaks muutma regulaarselt.</small> - - - - What is the name of this computer? - Mis on selle arvuti nimi? - - - + Your Full Name - + + What name do you want to use to log in? + Mis nime soovid sisselogimiseks kasutada? + + + login - + + What is the name of this computer? + Mis on selle arvuti nimi? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Seda nime kasutatakse, kui teed arvuti võrgus teistele nähtavaks.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Vali parool, et hoida oma konto turvalisena. + + + + + <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> + <small>Sisesta sama parool kaks korda, et kontrollida kirjavigade puudumist. Hea parool sisaldab segu tähtedest, numbritest ja kirjavahemärkidest, peaks olema vähemalt kaheksa märki pikk ja seda peaks muutma regulaarselt.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Logi automaatselt sisse ilma parooli küsimata. - + Use the same password for the administrator account. Kasuta sama parooli administraatorikontole. - + Choose a password for the administrator account. Vali administraatori kontole parool. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Sisesta sama parooli kaks korda, et kontrollida kirjavigade puudumist.</small> @@ -2325,42 +2665,42 @@ Paigaldaja sulgub ning kõik muutused kaovad. PartitionLabelsView - + Root Juur - + Home Kodu - + Boot Käivitus - + EFI system EFI süsteem - + Swap Swap - + New partition for %1 Uus partitsioon %1 jaoks - + New partition Uus partitsioon - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2709,39 @@ Paigaldaja sulgub ning kõik muutused kaovad. PartitionModel - - + + Free Space Tühi ruum - - + + New partition Uus partitsioon - + Name Nimi - + File System Failisüsteem - + + File System Label + + + + Mount Point Monteerimispunkt - + Size Suurus @@ -2404,77 +2749,77 @@ Paigaldaja sulgub ning kõik muutused kaovad. PartitionPage - + Form Form - + Storage de&vice: Mäluseade: - + &Revert All Changes &Ennista kõik muutused - + New Partition &Table Uus partitsioonitabel - + Cre&ate L&oo - + &Edit &Muuda - + &Delete &Kustuta - + New Volume Group Uus kettagrupp - + Resize Volume Group Muuda kettagrupi suurust - + Deactivate Volume Group Keela kettagrupp - + Remove Volume Group Eemalda kettagrupp - + I&nstall boot loader on: Paigalda käivituslaadur kohta: - + Are you sure you want to create a new partition table on %1? Kas soovid kindlasti luua uut partitsioonitabelit kettale %1? - + Can not create new partition Uut partitsiooni ei saa luua - + 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. Partitsioonitabel kohas %1 juba omab %2 peamist partitsiooni ning rohkem juurde ei saa lisada. Palun eemalda selle asemel üks peamine partitsioon ja lisa juurde laiendatud partitsioon. @@ -2482,117 +2827,107 @@ Paigaldaja sulgub ning kõik muutused kaovad. PartitionViewStep - + Gathering system information... Hangin süsteemiteavet... - + Partitions Partitsioonid - - Install %1 <strong>alongside</strong> another operating system. - Paigalda %1 praeguse operatsioonisüsteemi <strong>kõrvale</strong> + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Tühjenda</strong> ketas ja paigalda %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Asenda</strong> partitsioon operatsioonisüsteemiga %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Käsitsi</strong> partitsioneerimine. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Paigalda %1 teise operatsioonisüsteemi <strong>kõrvale</strong> kettal <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Tühjenda</strong> ketas <strong>%2</strong> (%3) ja paigalda %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Asenda</strong> partitsioon kettal <strong>%2</strong> (%3) operatsioonisüsteemiga %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Käsitsi</strong> partitsioneerimine kettal <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Ketas <strong>%1</strong> (%2). - - - + Current: Hetkel: - + After: Pärast: - + No EFI system partition configured EFI süsteemipartitsiooni pole seadistatud - - 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>esp</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. - %1 käivitamiseks on vajalik EFI süsteemipartitsioon.<br/><br/>Et seadistada EFI süsteemipartitsiooni, mine tagasi ja vali või loo FAT32 failisüsteem sildiga <strong>esp</strong> ja monteerimispunktiga <strong>%2</strong>.<br/><br/>Sa võid jätkata ilma EFI süsteemipartitsiooni seadistamata aga su süsteem ei pruugi käivituda. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - EFI süsteemipartitsiooni silt pole määratud + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1 käivitamiseks on vajalik EFI süsteemipartitsioon.<br/><br/>Partitsioon seadistati monteerimispunktiga <strong>%2</strong> aga sellel ei määratud <strong>esp</strong> silti.<br/>Sildi määramiseks mine tagasi ja muuda partitsiooni.<br/><br/>Sa võid jätkata ilma silti seadistamata aga su süsteem ei pruugi käivituda. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Käivituspartitsioon pole krüptitud - + 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. Eraldi käivituspartitsioon seadistati koos krüptitud juurpartitsiooniga, aga käivituspartitsioon ise ei ole krüptitud.<br/><br/>Selle seadistusega kaasnevad turvaprobleemid, sest tähtsad süsteemifailid hoitakse krüptimata partitsioonil.<br/>Sa võid soovi korral jätkata, aga failisüsteemi lukust lahti tegemine toimub hiljem süsteemi käivitusel.<br/>Et krüpteerida käivituspartisiooni, mine tagasi ja taasloo see, valides <strong>Krüpteeri</strong> partitsiooni loomise aknas. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2935,13 @@ Paigaldaja sulgub ning kõik muutused kaovad. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma välimuse-ja-tunnetuse töö - - + + Could not select KDE Plasma Look-and-Feel package KDE Plasma välimuse-ja-tunnetuse paketti ei saanud valida @@ -2614,17 +2949,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. PlasmaLnfPage - + Form Form - + 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. - + 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. Palun vali KDE Plasma töölauale välimus-ja-tunnetus. Sa võid selle sammu ka vahele jätta ja seadistada välimust-ja-tunnetust siis, kui süsteem on paigaldatud. Välimuse-ja-tunnetuse valikule klõpsates näed selle reaalajas eelvaadet. @@ -2632,7 +2967,7 @@ Paigaldaja sulgub ning kõik muutused kaovad. PlasmaLnfViewStep - + Look-and-Feel Välimus-ja-tunnetus @@ -2640,17 +2975,17 @@ Paigaldaja sulgub ning kõik muutused kaovad. PreserveFiles - + Saving files for later ... Salvestan faile hiljemaks... - + No files configured to save for later. Ühtegi faili ei konfigureeritud hiljemaks salvestamiseks. - + Not all of the configured files could be preserved. Ühtegi konfigureeritud faili ei suudetud säilitada. @@ -2658,14 +2993,14 @@ Paigaldaja sulgub ning kõik muutused kaovad. ProcessResult - + There was no output from the command. Käsul polnud väljundit. - + Output: @@ -2674,52 +3009,52 @@ Väljund: - + External command crashed. Väline käsk jooksis kokku. - + Command <i>%1</i> crashed. Käsk <i>%1</i> jooksis kokku. - + External command failed to start. Välise käsu käivitamine ebaõnnestus. - + Command <i>%1</i> failed to start. Käsu <i>%1</i> käivitamine ebaõnnestus. - + Internal error when starting command. Käsu käivitamisel esines sisemine viga. - + Bad parameters for process job call. Protsessi töö kutsel olid halvad parameetrid. - + External command failed to finish. Väline käsk ei suutnud lõpetada. - + Command <i>%1</i> failed to finish in %2 seconds. Käsk <i>%1</i> ei suutnud lõpetada %2 sekundi jooksul. - + External command finished with errors. Väline käsk lõpetas vigadega. - + Command <i>%1</i> finished with exit code %2. Käsk <i>%1</i> lõpetas sulgemiskoodiga %2. @@ -2727,89 +3062,94 @@ Väljund: QObject - - Default Keyboard Model - Vaikimisi klaviatuurimudel - - - - - Default - Vaikimisi - - - - unknown - tundmatu - - - - extended - laiendatud - - - - unformatted - vormindamata - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Partitsioneerimata ruum või tundmatu partitsioonitabel - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + tundmatu - - No description provided. - + + extended + laiendatud - - - - + + unformatted + vormindamata + + + + swap + swap + + + + + Default + Vaikimisi + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Partitsioneerimata ruum või tundmatu partitsioonitabel + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2817,18 +3157,18 @@ Väljund: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Eemalda kettagrupp nimega %1. - + Remove Volume Group named <strong>%1</strong>. Eemalda kettagrupp nimega <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Paigaldaja ei saanud eemaldada kettagruppi "%1". @@ -2836,143 +3176,158 @@ Väljund: ReplaceWidget - + Form Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vali, kuhu soovid %1 paigaldada.<br/><font color="red">Hoiatus: </font>see kustutab valitud partitsioonilt kõik failid. - + The selected item does not appear to be a valid partition. Valitud üksus ei paista olevat sobiv partitsioon. - + %1 cannot be installed on empty space. Please select an existing partition. %1 ei saa paigldada tühjale kohale. Palun vali olemasolev partitsioon. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ei saa paigaldada laiendatud partitsioonile. Palun vali olemasolev põhiline või loogiline partitsioon. - + %1 cannot be installed on this partition. %1 ei saa sellele partitsioonile paigaldada. - + Data partition (%1) Andmepartitsioon (%1) - + Unknown system partition (%1) Tundmatu süsteemipartitsioon (%1) - + %1 system partition (%2) %1 süsteemipartitsioon (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitsioon %1 on liiga väike %2 jaoks. Palun vali partitsioon suurusega vähemalt %3 GiB. - + <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. <strong>%2</strong><br/><br/>Sellest süsteemist ei leitud EFI süsteemipartitsiooni. Palun mine tagasi ja kasuta käsitsi partitsioneerimist, et seadistada %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 paigaldatakse partitsioonile %2.<br/><font color="red">Hoiatus: </font>kõik andmed partitsioonil %2 kaovad. - + The EFI system partition at %1 will be used for starting %2. EFI süsteemipartitsioon asukohas %1 kasutatakse %2 käivitamiseks. - + EFI system partition: EFI süsteemipartitsioon: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job Failisüsteemi suuruse muutmise töö - + Invalid configuration Sobimatu konfiguratsioon - + The file-system resize job has an invalid configuration and will not run. Failisüsteemi suuruse muutmise tööl on sobimatu konfiguratsioon ning see ei käivitu. - + KPMCore not Available KPMCore pole saadaval - + Calamares cannot start KPMCore for the file-system resize job. Calamares ei saa KPMCore'i käivitada failisüsteemi suuruse muutmise töö jaoks. - - - - - + + + + + Resize Failed Suuruse muutmine ebaõnnestus - + The filesystem %1 could not be found in this system, and cannot be resized. Failisüsteemi %1 ei leitud sellest süsteemist, seega selle suurust ei saa muuta. - + The device %1 could not be found in this system, and cannot be resized. Seadet %1 ei leitud sellest süsteemist, seega selle suurust ei saa muuta. - - + + The filesystem %1 cannot be resized. Failisüsteemi %1 suurust ei saa muuta. - - + + The device %1 cannot be resized. Seadme %1 suurust ei saa muuta. - + The filesystem %1 must be resized, but cannot. Failisüsteemi %1 suurust tuleb muuta, aga ei saa. - + The device %1 must be resized, but cannot Seadme %1 suurust tuleb muuta, aga ei saa. @@ -2980,22 +3335,22 @@ Väljund: ResizePartitionJob - + Resize partition %1. Muuda partitsiooni %1 suurust. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Paigaldajal ebaõnnestus partitsiooni %1 suuruse muutmine kettal "%2". @@ -3003,7 +3358,7 @@ Väljund: ResizeVolumeGroupDialog - + Resize Volume Group Muuda kettagrupi suurust @@ -3011,18 +3366,18 @@ Väljund: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Muuda kettagrupi %1 suurust %2-st %3-ks. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Muuda kettagrupi <strong>%1</strong> suurust <strong>%2</strong>-st <strong>%3</strong>-ks. - + The installer failed to resize a volume group named '%1'. Paigaldaja ei saanud muuta kettagrupi "%1" suurust. @@ -3030,53 +3385,25 @@ Väljund: ResultsListDialog - + For best results, please ensure that this computer: Parimate tulemuste jaoks palun veendu, et see arvuti: - + System requirements Süsteeminõudmised - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - See arvuti ei rahulda %1 paigldamiseks vajalikke minimaaltingimusi.<br/>Paigaldamine ei saa jätkuda. <a href="#details">Detailid...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - See arvuti ei rahulda mõnda %1 paigaldamiseks soovitatud tingimust.<br/>Paigaldamine võib jätkuda, ent mõned funktsioonid võivad olla keelatud. - - - - This program will ask you some questions and set up %2 on your computer. - See programm küsib sult mõned küsimused ja seadistab %2 sinu arvutisse. - - ScanningDialog - + Scanning storage devices... Skaneerin mäluseadmeid... - + Partitioning Partitsioneerimine @@ -3084,29 +3411,29 @@ Väljund: SetHostNameJob - + Set hostname %1 Määra hostinimi %1 - + Set hostname <strong>%1</strong>. Määra hostinimi <strong>%1</strong>. - + Setting hostname %1. Määran hostinime %1. + - Internal Error Sisemine viga - - + + Cannot write hostname to target system Hostinime ei saa sihtsüsteemile kirjutada @@ -3114,29 +3441,29 @@ Väljund: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Klaviatuurimudeliks on seatud %1, paigutuseks %2-%3 - + Failed to write keyboard configuration for the virtual console. Klaviatuurikonfiguratsiooni kirjutamine virtuaalkonsooli ebaõnnestus. - - - + + + Failed to write to %1 Kohta %1 kirjutamine ebaõnnestus - + Failed to write keyboard configuration for X11. Klaviatuurikonsooli kirjutamine X11-le ebaõnnestus. - + Failed to write keyboard configuration to existing /etc/default directory. Klaviatuurikonfiguratsiooni kirjutamine olemasolevale /etc/default kaustateele ebaõnnestus. @@ -3144,82 +3471,82 @@ Väljund: SetPartFlagsJob - + Set flags on partition %1. Määratud sildid partitsioonil %1: - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Määra sildid uuele partitsioonile. - + Clear flags on partition <strong>%1</strong>. Tühjenda sildid partitsioonil <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Tühjenda sildid uuel partitsioonil - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Määra partitsioonile <strong>%1</strong> silt <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Määra uuele partitsioonile silt <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Eemaldan sildid partitsioonilt <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Eemaldan uuelt partitsioonilt sildid. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Määran sildid <strong>%1</strong> partitsioonile <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Määran sildid <strong>%1</strong> uuele partitsioonile. - + The installer failed to set flags on partition %1. Paigaldaja ei suutnud partitsioonile %1 silte määrata. @@ -3227,42 +3554,42 @@ Väljund: SetPasswordJob - + Set password for user %1 Määra kasutajale %1 parool - + Setting password for user %1. Määran kasutajale %1 parooli. - + Bad destination system path. Halb sihtsüsteemi tee. - + rootMountPoint is %1 rootMountPoint on %1 - + Cannot disable root account. Juurkasutajat ei saa keelata. - + passwd terminated with error code %1. passwd peatatud veakoodiga %1. - + Cannot set password for user %1. Kasutajale %1 ei saa parooli määrata. - + usermod terminated with error code %1. usermod peatatud veateatega %1. @@ -3270,45 +3597,82 @@ Väljund: SetTimezoneJob - + Set timezone to %1/%2 Määra ajatsooniks %1/%2 - + Cannot access selected timezone path. Valitud ajatsooni teele ei saa ligi. - + Bad path: %1 Halb tee: %1 - + Cannot set timezone. Ajatsooni ei saa määrata. - + Link creation failed, target: %1; link name: %2 Lingi loomine ebaõnnestus, siht: %1; lingi nimi: %2 - + Cannot set timezone, Ajatsooni ei saa määrata, - + Cannot open /etc/timezone for writing /etc/timezone ei saa kirjutamiseks avada + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Sudoja faili ei saa chmod-ida. + + + + Cannot create sudoers file for writing. + Sudoja faili ei saa kirjutamiseks luua. + + ShellProcessJob - + Shell Processes Job Kesta protsesside töö @@ -3316,81 +3680,117 @@ Väljund: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - See on ülevaade sellest mis juhtub, kui alustad paigaldusprotseduuri. + + &Yes + &Jah - - - SummaryViewStep - - Summary - Kokkuvõte + + &No + &Ei + + + + &Cancel + &Tühista + + + + &Close + &Sulge TrackingInstallJob - + Installation feedback Paigalduse tagasiside - + Sending installation feedback. Saadan paigalduse tagasisidet. - + Internal error in install-tracking. Paigaldate jälitamisel esines sisemine viga. - + HTTP request timed out. HTTP taotlusel esines ajalõpp. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Seadme tagasiside - + Configuring machine feedback. Seadistan seadme tagasisidet. - - + + Error in machine feedback configuration. Masina tagasiside konfiguratsioonis esines viga. - + Could not configure machine feedback correctly, script error %1. Masina tagasisidet ei suudetud korralikult konfigureerida, skripti viga %1. - + Could not configure machine feedback correctly, Calamares error %1. Masina tagasisidet ei suudetud korralikult konfigureerida, Calamares'e viga %1. @@ -3398,106 +3798,97 @@ Väljund: TrackingPage - + Form Form - + Placeholder Kohatäitja - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Seda valides <span style=" font-weight:600;">ei saada sa üldse</span> teavet oma paigalduse kohta.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klõpsa siia, et saada rohkem teavet kasutaja tagasiside kohta</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Paigalduse jälitamine aitab %1-l näha, mitu kasutajat neil on, mis riistvarale nad %1 paigaldavad ja (märkides kaks alumist valikut) saada pidevat teavet eelistatud rakenduste kohta. Et näha, mis infot saadetakse, palun klõpsa abiikooni iga ala kõrval. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Seda valides saadad sa teavet oma paigalduse ja riistvara kohta. See teave <b>saadetakse ainult korra</b>peale paigalduse lõppu. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Seda valides saadad sa %1-le <b>perioodiliselt</b> infot oma paigalduse, riistvara ja rakenduste kohta. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Seda valides saadad sa %1-le <b>regulaarselt</b> infot oma paigalduse, riistvara, rakenduste ja kasutusharjumuste kohta. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Tagasiside + + UmountJob + + + Unmount file systems. + Haagi failisüsteemid lahti. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Sinu kasutajanimi on liiga pikk. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Sinu hostinimi on liiga lühike. - - - - Your hostname is too long. - Sinu hostinimi on liiga pikk. - - - - Your passwords do not match! - Sinu paroolid ei ühti! + + Users + Kasutajad UsersViewStep - + Users Kasutajad @@ -3505,65 +3896,67 @@ Väljund: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes Füüsiliste ketaste nimekiri - + Volume Group Name: Kettagrupi nimi: - + Volume Group Type: Kettagrupi tüüp: - + Physical Extent Size: Füüsiline ulatussuurus: - + MiB MiB - + Total Size: Kogusuurus: - + Used Size: Kasutatud suurus: - + Total Sectors: Kogusektorid: - + Quantity of LVs: Loogiliste köidete kogus: @@ -3571,106 +3964,106 @@ Väljund: WelcomePage - + Form Form - - + + Select application and system language + &About + &Teave + + + Open donations website - + &Donate - + Open help and support website + &Support + &Tugi + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Väljalaskemärkmed - - - &Known issues &Teadaolevad vead - - &Support - &Tugi + + Open release notes website + - - &About - &Teave + + &Release notes + &Väljalaskemärkmed - - <h1>Welcome to the %1 installer.</h1> - <h1>Tere tulemast %1 paigaldajasse.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Tere tulemast Calamares'i paigaldajasse %1 jaoks.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Tere tulemast Calamares'i paigaldajasse %1 jaoks.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Tere tulemast %1 paigaldajasse.</h1> + + + + %1 support + %1 tugi + + + About %1 setup - + About %1 installer Teave %1 paigaldaja kohta - + <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. - - - %1 support - %1 tugi - WelcomeQmlViewStep - + Welcome Tervist @@ -3678,31 +4071,157 @@ Väljund: WelcomeViewStep - + Welcome Tervist + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Kuva silumisteavet + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3710,86 +4229,283 @@ Väljund: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Klaviatuurimudel: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Kirjuta siia, et testida oma klaviatuuri - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Mis on su nimi? + + + + Your Full Name + + + + + What name do you want to use to log in? + Mis nime soovid sisselogimiseks kasutada? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Mis on selle arvuti nimi? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Vali parool, et hoida oma konto turvalisena. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Kasuta sama parooli administraatorikontole. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_eu.ts b/lang/calamares_eu.ts index a1661618e..810aa18bc 100644 --- a/lang/calamares_eu.ts +++ b/lang/calamares_eu.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. Sistema honen <strong>abio ingurunea</strong>. <br><br>X86 zaharrek <strong>BIOS</strong> euskarria bakarrik daukate. <br>Sistema modernoek normalean <strong>EFI</strong> darabilte, baina BIOS bezala ere agertu daitezke konpatibilitate moduan hasiz gero. - + 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. Sistema hau <strong>EFI</strong> abio inguruneaz hasi da.<br><br>EFI ingurunetik abiaraztea konfiguratzeko instalatzaile honek abio kargatzaile aplikazioa ezarri behar du, <strong>GRUB </strong> bezalakoa edo <strong>systemd-abioa</strong> <strong>EFI sistema partizio</strong> batean. Hau automatikoa da, zuk partizioak eskuz egitea aukeratzen ez baduzu, eta kasu horretan zuk sortu edo aukeratu beharko duzu zure kabuz. - + 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. Sistema hau <strong>BIOS</strong> abio inguruneaz hasi da.<br><br>BIOS ingurunetik abiaraztea konfiguratzeko instalatzaile honek abio kargatzaile aplikazioa ezarri behar du, <strong>GRUB</strong> bezalakoa, partizioaren hasieran edo <strong>Master Boot Record</strong> deritzonean partizio taularen hasieratik gertu (hobetsia). Hau automatikoa da, zuk partizioak eskuz egitea aukeratzen ez baduzu eta kasu horretan zuk sortu edo aukeratu beharko duzu zure kabuz. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1-(e)n Master Boot Record - + Boot Partition Abio partizioa - + System Partition Sistema-partizioa - + Do not install a boot loader Ez instalatu abio kargatzailerik - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Orri zuria @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulario - + GlobalStorage Biltegiratze globala - + JobQueue LanIlara - + Modules Moduluak - + Type: Mota: - - + + none Ezer ez - + Interface: Interfasea: - - Tools - Tresnak + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Arazte informazioa @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Instalatu @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Egina @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 %1 %2 komandoa exekutatzen @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 eragiketa burutzen. - + Bad working directory path Direktorio ibilbide ezegokia - + Working directory %1 for python job %2 is not readable. %1 lanerako direktorioa %2 python lanak ezin du irakurri. - + Bad main script file Script fitxategi nagusi okerra - + Main script file %1 for python job %2 is not readable. %1 script fitxategi nagusia ezin da irakurri python %2 lanerako - + Boost.Python error in job "%1". Boost.Python errorea "%1" lanean. @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + Kargatzen ... - + QML Step <i>%1</i>. - + Loading failed. - + Kargatzeak huts egin du. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Atzera - - - - &Next - &Hurrengoa - - - - &Cancel - &Utzi - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Instalazioa bertan behera utsi da sisteman aldaketarik gabe. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Instalazioak huts egin du - + + Error + Akatsa + + + + &Yes + &Bai + + + + &No + &Ez + + + + &Close + &Itxi + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Calamares instalazioak huts egin du - + %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. %1 ezin da instalatu. Calamares ez da gai konfiguratutako modulu guztiak kargatzeko. Arazao hau banaketak Calamares erabiltzen duen eragatik da. - + <br/>The following modules could not be loaded: <br/> Ondorengo moduluak ezin izan dira kargatu: - - Continue with installation? - + + Continue with setup? + Ezarpenarekin jarraitu? - + + Continue with installation? + Instalazioarekin jarraitu? + + + 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> - + + 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> + %1 instalatzailea zure diskoan aldaketak egitera doa %2 instalatzeko.<br/><strong>Ezingo dituzu desegin aldaketa hauek.</strong> + + + &Set up now - + + &Install now + &Instalatu orain + + + + Go &back + &Atzera + + + &Set up - + &Install &Instalatu - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Instalazioa burutu da. Itxi instalatzailea. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Instalazioa bertan behera utsi da sisteman aldaketarik gabe. + + + + &Next + &Hurrengoa + + + + &Back + &Atzera + + + + &Done + E&ginda + + + + &Cancel + &Utzi + + + Cancel setup? - + Cancel installation? Bertan behera utzi instalazioa? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ziur uneko instalazio prozesua bertan behera utzi nahi duzula? Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. - - - - &Yes - &Bai - - - - - &No - &Ez - - - - &Close - &Itxi - - - - Continue with setup? - Ezarpenarekin jarraitu? - - - - 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> - %1 instalatzailea zure diskoan aldaketak egitera doa %2 instalatzeko.<br/><strong>Ezingo dituzu desegin aldaketa hauek.</strong> - - - - &Install now - &Instalatu orain - - - - Go &back - &Atzera - - - - &Done - E&ginda - - - - The installation is complete. Close the installer. - Instalazioa burutu da. Itxi instalatzailea. - - - - Error - Akatsa - - - - Installation Failed - Instalazioak huts egin du - CalamaresPython::Helper - + Unknown exception type Salbuespen-mota ezezaguna - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Atzera - - - - &Next - &Hurrengoa - - - - &Cancel - &Utzi - - - + %1 Setup Program - + %1 Installer %1 Instalatzailea + + + ChangeFilesystemLabelJob - - Show debug information - Erakutsi arazte informazioa + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + CheckerContainer - + Gathering system information... Sistemaren informazioa eskuratzen... @@ -498,157 +522,197 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. ChoicePage - + Form Formulario - - After: - Ondoren: - - - - Boot loader location: - Abio kargatzaile kokapena: - - - + Select storage de&vice: Aukeratu &biltegiratze-gailua: - - - - + + + + Current: Unekoa: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Ondoren: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Eskuz partizioak landu</strong><br/>Zure kasa sortu edo tamainaz alda dezakezu partizioak. + + + Reuse %1 as home partition for %2. Berrerabili %1 home partizio bezala %2rentzat. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Aukeratu partizioa txikitzeko eta gero arrastatu azpiko-barra tamaina aldatzeko</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Abio kargatzaile kokapena: + + + <strong>Select a partition to install on</strong> <strong>aukeratu partizioa instalatzeko</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ezin da inon aurkitu EFI sistemako partiziorik sistema honetan. Mesedez joan atzera eta erabili eskuz partizioak lantzea %1 ezartzeko. - + The EFI system partition at %1 will be used for starting %2. %1eko EFI partizio sistema erabiliko da abiarazteko %2. - + EFI system partition: EFI sistema-partizioa: - + 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. Biltegiratze-gailuak badirudi ez duela sistema eragilerik. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - <strong>Diskoa ezabatu</strong><br/>Honek orain dauden datu guztiak <font color="red">ezbatuko</font> ditu biltegiratze-gailutik. + <strong>Diskoa ezabatu</strong><br/>Honek orain dauden datu guztiak <font color="red">ezabatuko</font> ditu biltegiratze-gailutik. - - 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. - Biltegiratze-gailuak %1 dauka. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalatu alboan</strong><br/>Instalatzaileak partizioa txikituko du lekua egiteko %1-(r)i. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ordeztu partizioa</strong><br/>ordezkatu partizioa %1-(e)kin. - + + 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. + Biltegiratze-gailuak %1 dauka. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan + + + 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. Biltegiragailu honetan badaude jadanik eragile sistema bat. Zer gustatuko litzaizuke egin?<br/>Biltegiragailuan aldaketarik egin baino lehen zure aukerak aztertu eta konfirmatu ahal izango duzu. - + 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. Biltegiragailu honetan badaude jadanik eragile sistema batzuk. Zer gustatuko litzaizuke egin?<br/>Biltegiragailuan aldaketarik egin baino lehen zure aukerak aztertu eta konfirmatu ahal izango duzu. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Garbitu muntaketa puntuak partizioak egiteko %1 -(e)an. - + Clearing mounts for partitioning operations on %1. Garbitzen muntaketa puntuak partizio eragiketak egiteko %1 -(e)an. - + Cleared all mounts for %1 Muntaketa puntu guztiak garbitu dira %1 -(e)an @@ -656,22 +720,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. ClearTempMountsJob - + Clear all temporary mounts. Garbitu aldi-baterako muntaketa puntu guztiak. - + Clearing all temporary mounts. Garbitzen aldi-baterako muntaketa puntu guztiak. - - Cannot get list of temporary mounts. - Ezin izan da aldi-baterako muntaketa puntu guztien zerrenda lortu. - - - + Cleared all temporary mounts. Garbitu dira aldi-baterako muntaketa puntu guztiak. @@ -679,18 +738,18 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. CommandList - - + + Could not run command. Ezin izan da komandoa exekutatu. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komandoa exekutatzen da ostalariaren inguruan eta erro bidea jakin behar da baina erroaren muntaketa punturik ez da zehaztu. - + The command needs to know the user's name, but no username is defined. Komandoak erabiltzailearen izena jakin behar du baina ez da zehaztu erabiltzaile-izenik. @@ -698,100 +757,235 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Konputagailu honek ez dauzka gutxieneko eskakizunak %1 instalatzeko. <br/>Instalazioak ezin du jarraitu. <a href="#details">Xehetasunak...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Konputagailu honek ez du betetzen gomendatutako zenbait eskakizun %1 instalatzeko. <br/>Instalazioak jarraitu ahal du, baina zenbait ezaugarri desgaituko dira. - - - - This program will ask you some questions and set up %2 on your computer. - Konputagailuan %2 ezartzeko programa honek hainbat galdera egingo dizkizu. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Ongi etorri %1 instalatzailera.</h1> - - - + Set keyboard model to %1.<br/> Ezarri teklatu mota %1ra.<br/> - + Set keyboard layout to %1/%2. Ezarri teklatu diseinua %1%2ra. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. %1 ezarriko da sistemako hizkuntza bezala. - + The numbers and dates locale will be set to %1. Zenbaki eta daten eskualdea %1-(e)ra ezarri da. - - Set timezone to %1/%2.<br/> - Ordu-zonaldea %1%2-ra ezarri da.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Pakete aukeraketa + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Konputagailu honek ez dauzka gutxieneko eskakizunak %1 instalatzeko. <br/>Instalazioak ezin du jarraitu. <a href="#details">Xehetasunak...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Konputagailu honek ez du betetzen gomendatutako zenbait eskakizun %1 instalatzeko. <br/>Instalazioak jarraitu ahal du, baina zenbait ezaugarri desgaituko dira. + + + + This program will ask you some questions and set up %2 on your computer. + Konputagailuan %2 ezartzeko programa honek hainbat galdera egingo dizkizu. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Zure erabiltzaile-izena luzeegia da. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Zure ostalari-izena laburregia da. + + + + Your hostname is too long. + Zure ostalari-izena luzeegia da. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Pasahitzak ez datoz bat! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Instalazioak huts egin du + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Instalazioa amaitua + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + %1 instalazioa amaitu da. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Laburpena + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -799,100 +993,136 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. CreatePartitionDialog - + Create a Partition Sortu partizio bat - - MiB - MiB - - - - Partition &Type: - PartizioMo&ta: - - - - &Primary - &Primarioa - - - - E&xtended - &Hedatua - - - - Fi&le System: - Fi&txategi-Sistema: - - - - LVM LV name - LVM LV izena - - - - Flags: - Banderak: - - - - &Mount Point: - &Muntatze Puntua: - - - + Si&ze: &Tamaina: - + + MiB + MiB + + + + Partition &Type: + PartizioMo&ta: + + + + Primar&y + + + + + E&xtended + &Hedatua + + + + Fi&le System: + Fi&txategi-Sistema: + + + + LVM LV name + LVM LV izena + + + + &Mount Point: + &Muntatze Puntua: + + + + Flags: + Banderak: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt En%kriptatu - + Logical Logikoa - + Primary Primarioa - + GPT GPT - + Mountpoint already in use. Please select another one. Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. %1 partizioa berria sortzen %2n. - + The installer failed to create partition on disk '%1'. Huts egin du instalatzaileak '%1' diskoan partizioa sortzen. @@ -900,27 +1130,27 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. CreatePartitionTableDialog - + Create Partition Table Sortu Partizio Taula - + Creating a new partition table will delete all existing data on the disk. Partizio taula berria sortzean diskoan dauden datu guztiak ezabatuko dira. - + What kind of partition table do you want to create? Zein motatako partizio taula sortu nahi duzu? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partizio Taula (GPT) @@ -928,22 +1158,22 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. CreatePartitionTableJob - + Create new %1 partition table on %2. Sortu %1 partizio taula berria %2n. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Sortu <strong>%1</strong> partizio taula berria <strong>%2</strong>n (%3). - + Creating new %1 partition table on %2. %1 partizio taula berria %2n sortzen. - + The installer failed to create a partition table on %1. Huts egin du instalatzaileak '%1' diskoan partizioa taula sortzen. @@ -951,45 +1181,41 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. CreateUserJob - + Create user %1 Sortu %1 erabiltzailea - + Create user <strong>%1</strong>. Sortu <strong>%1</strong> erabiltzailea - - Creating user %1. - %1 erabiltzailea sortzen. + + Preserving home directory + - - Sudoers dir is not writable. - Ezin da sudoers direktorioan idatzi. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Ezin da sudoers fitxategia sortu bertan idazteko. + + Configuring user %1 + - - Cannot chmod sudoers file. - Ezin zaio chmod egin sudoers fitxategiari. - - - - Cannot open groups file for reading. - Ezin da groups fitxategia ireki berau irakurtzeko. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1223,22 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. CreateVolumeGroupJob - + Create new volume group named %1. Sortu bolumen talde berria %1 izenaz. - + Create new volume group named <strong>%1</strong>. Sortu bolumen talde berria<strong> %1</strong> izenaz. - + Creating new volume group named %1. Bolumen talde berria sortzen %1 izenaz. - + The installer failed to create a volume group named '%1'. Huts egin du instalatzaileak '%1' izeneko bolumen taldea sortzen. @@ -1020,18 +1246,18 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Desaktibatu %1 izeneko bolumen taldea. - + Deactivate volume group named <strong>%1</strong>. Desaktibatu <strong>%1</strong> izeneko bolumen taldea. - + The installer failed to deactivate a volume group named %1. Huts egin du instalatzaileak '%1' izeneko bolumen taldea desaktibatzen. @@ -1039,22 +1265,22 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. DeletePartitionJob - + Delete partition %1. Ezabatu %1 partizioa. - + Delete partition <strong>%1</strong>. Ezabatu <strong>%1</strong> partizioa. - + Deleting partition %1. %1 partizioa ezabatzen. - + The installer failed to delete partition %1. Huts egin du instalatzaileak %1 partizioa ezabatzen. @@ -1062,46 +1288,46 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. DeviceInfoWidget - - 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. - <strong>partizio-taula</strong> mota aukeratutako biltegiragailuan.<br><br>Partizio-taula mota aldatzeko modu bakarra ezabatzea da eta berriro sortu partizio-taula zerotik, eta ekintza horrek biltegiragailuan dauden datu guztiak hondatuko ditu.<br>Instalatzaile honek egungo partizio-taula mantenduko du, besterik ez baduzu esplizituki aukeratzen.<br>Ez bazaude seguru horri buruz, sistema modernoetan GPT hobe da. - - - + This device has a <strong>%1</strong> partition table. Gailuak <strong>%1</strong> partizio taula dauka. - + 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. Hau <strong>begizta</strong> gailu bat da. <br><br>Partiziorik gabeko sasi-gailu bat fitxategiak eskuragarri jartzen dituena gailu bloke erara. Ezarpen mota honek normalean fitxategi-sistema bakarra dauka. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + <strong>partizio-taula</strong> mota aukeratutako biltegiragailuan.<br><br>Partizio-taula mota aldatzeko modu bakarra ezabatzea da eta berriro sortu partizio-taula zerotik, eta ekintza horrek biltegiragailuan dauden datu guztiak hondatuko ditu.<br>Instalatzaile honek egungo partizio-taula mantenduko du, besterik ez baduzu esplizituki aukeratzen.<br>Ez bazaude seguru horri buruz, sistema modernoetan GPT hobe da. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1336,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 Huts egin du %1 irekitzean @@ -1128,7 +1354,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. DummyCppJob - + Dummy C++ Job Dummy C++ lana @@ -1136,123 +1362,167 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. EditExistingPartitionDialog - + Edit Existing Partition Editatu badagoen partizioa - - Content: - Edukia: + + Con&tent: + - + &Keep M&antendu - + Format Formateatu - + Warning: Formatting the partition will erase all existing data. Oharra: Partizioa formateatzean dauden datu guztiak ezabatuko dira. - + &Mount Point: &Muntatze Puntua: - + Si&ze: &Tamaina: - + MiB MiB - + Fi&le System: Fi&txategi-Sistema: - + Flags: Banderak: - - Mountpoint already in use. Please select another one. - Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formulario - + En&crypt system Sistema en%kriptatua - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Pasahitza - + Confirm passphrase Berretsi pasahitza - + + Please enter the same passphrase in both boxes. Mesedez sartu pasahitz berdina bi kutxatan. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Ezarri partizioaren informazioa - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Instalatu %1 sistemako %2 partizio <strong>berrian</strong>. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Ezarri %2 partizio <strong>berria</strong> <strong>%1</strong> muntatze puntuarekin. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Ezarri %3 partizioa <strong>%1</strong> <strong>%2</strong> muntatze puntuarekin. - - - + Install boot loader on <strong>%1</strong>. Instalatu abio kargatzailea <strong>%1</strong>-(e)n. - + Setting up mount points. Muntatze puntuak ezartzen. @@ -1260,93 +1530,81 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. FinishedPage - + Form Formulario - + &Restart now &Berrabiarazi orain - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Bukatu + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Instalazioa amaitua - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - %1 instalazioa amaitu da. + + Finish + Bukatu FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. %1 partizioa formateatzen %2 sistemaz. - + The installer failed to format partition %1 on disk '%2'. Huts egin du instalatzaileak %1 partizioa sortzen '%2' diskoan. @@ -1354,72 +1612,72 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. Sistema ez dago indar iturri batetara konektatuta. - + is connected to the Internet Internetera konektatuta dago - + The system is not connected to the Internet. Sistema ez dago Internetera konektatuta. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Instalatzailea ez dabil exekutatzen administrari eskubideekin. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Pantaila txikiegia da instalatzailea erakusteko. @@ -1427,7 +1685,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1693,25 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1719,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1727,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. InitramfsJob - + Creating initramfs. @@ -1477,17 +1735,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. InteractiveTerminalPage - + Konsole not installed Konsole ez dago instalatuta - + Please install KDE Konsole and try again! Mesedez instalatu KDE kontsola eta saiatu berriz! - + Executing script: &nbsp;<code>%1</code> @@ -1495,28 +1753,15 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Ezarri teklatu mota %1ra.<br/> - - - - Set keyboard layout to %1/%2. - Ezarri teklatu diseinua %1%2ra. - - KeyboardQmlViewStep - + Keyboard Teklatua @@ -1524,7 +1769,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. KeyboardViewStep - + Keyboard Teklatua @@ -1532,65 +1777,88 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. LCLocaleDialog - + System locale setting Sistemaren locale ezarpena - + 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>. - + &Cancel &Utzi - + &OK &Ados + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulario - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Goiko baldintzak onartzen ditut. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1866,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. LicenseViewStep - + License Lizentzia @@ -1606,109 +1874,102 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - %1 ezarriko da sistemako hizkuntza bezala. - - - - The numbers and dates locale will be set to %1. - Zenbaki eta daten eskualdea %1-(e)ra ezarri da. - - - + Region: Eskualdea: - + Zone: Zonaldea: - - + + &Change... &Aldatu... - - - Set timezone to %1/%2.<br/> - Ordu-zonaldea %1%2-ra ezarri da.<br/> - LocaleQmlViewStep - + Location Kokapena + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Kokapena @@ -1716,35 +1977,35 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2013,130 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. MachineIdJob - + Generate machine-id. Sortu makina-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Pakete aukeraketa - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2144,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. NotesQmlViewStep - + Notes @@ -1877,17 +2152,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2170,317 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Pasahitza laburregia da - + Password is too long Pasahitza luzeegia da - + Password is too weak Pasahitza ahulegia da - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one Pasahitza aurreko zahar baten berdina da - + The password is a palindrome Pasahitza palindromoa da - + The password differs with case changes only - + The password is too similar to the old one Pasahitza aurreko zahar baten oso antzerakoa da - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - Pasahitzak %1 baino zenbaki gutxiago ditu - - - + The password contains too few digits Pasahitzak zenbaki gutxiegi ditu - - The password contains less than %1 uppercase letters - Pasahitzak %1 baino maiuskula gutxiago ditu - - - + The password contains too few uppercase letters Pasahitzak maiuskula gutxiegi ditu - - - The password contains less than %1 lowercase letters - Pasahitzak %1 baino minuskula gutxiago ditu + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters Pasahitzak minuskula gutxiegi ditu - - The password contains less than %1 non-alphanumeric characters - Pasahitzak alfabetokoak ez diren %1 baino karaktere gutxiago ditu - - - + The password contains too few non-alphanumeric characters Pasahitzak alfabetokoak ez diren karaktere gutxiegi ditu - - The password is shorter than %1 characters - Pasahitza %1 karaktere baino motzagoa da. - - - + The password is too short Pasahitza motzegia da - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed Ezin izan da konfigurazio fitxategia zabaldu. - + The configuration file is malformed Konfigurazio fitxategia ez dago ondo eginda. - + Fatal failure Hutsegite larria - + Unknown error Hutsegite ezezaguna - + Password is empty @@ -2156,40 +2488,48 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PackageChooserPage - + Form Formulario - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2537,12 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PackageModel - + Name Izena - + Description Deskribapena @@ -2210,17 +2550,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Page_Keyboard - + Form Formulario - + Keyboard Model: Teklatu Modeloa: - + Type here to test your keyboard Idatzi hemen zure teklatua frogatzeko @@ -2228,96 +2568,96 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. Page_UserSetup - + Form Formulario - + What is your name? Zein da zure izena? - - What name do you want to use to log in? - Zein izen erabili nahi duzu saioa hastean? - - - - Choose a password to keep your account safe. - Aukeratu pasahitza zure kontua babesteko. - - - - - <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> - <small>Pasahitza berbera birritan sartu, idazketa akatsak ez dauden egiaztatzeko. Pasahitza on batek letrak, zenbakiak eta puntuazio sinboloak izan behar ditu, zortzi karaktere gutxienez izan behar ditu eta tarteka-marteka aldatu behar izango litzateke.</small> - - - - What is the name of this computer? - Zein da ordenagailu honen izena? - - - + Your Full Name - + + What name do you want to use to log in? + Zein izen erabili nahi duzu saioa hastean? + + + login - + + What is the name of this computer? + Zein da ordenagailu honen izena? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Izen hau erakutsiko da sarean zure ordenagailua besteei erakustean.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Aukeratu pasahitza zure kontua babesteko. + + + + + <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> + <small>Pasahitza berbera birritan sartu, idazketa akatsak ez dauden egiaztatzeko. Pasahitza on batek letrak, zenbakiak eta puntuazio sinboloak izan behar ditu, zortzi karaktere gutxienez izan behar ditu eta tarteka-marteka aldatu behar izango litzateke.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Hasi saioa automatikoki pasahitza eskatu gabe. - + Use the same password for the administrator account. Erabili pasahitz bera administratzaile kontuan. - + Choose a password for the administrator account. Aukeratu pasahitz bat administratzaile kontuarentzat. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Sartu pasahitza birritan, honela tekleatze erroreak egiaztatzeko.</small> @@ -2325,42 +2665,42 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI sistema - + Swap Swap - + New partition for %1 Partizio berri %1(e)ntzat - + New partition Partizio berria - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2709,39 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PartitionModel - - + + Free Space Espazio librea - - + + New partition Partizio berria - + Name Izena - + File System Fitxategi Sistema - + + File System Label + + + + Mount Point Muntatze Puntua - + Size Tamaina @@ -2404,77 +2749,77 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PartitionPage - + Form Formulario - + Storage de&vice: Biltegiratze-gailua: - + &Revert All Changes Atze&ra bota aldaketa guztiak: - + New Partition &Table Partizio &Taula berria - + Cre&ate Sor&tu - + &Edit &Editatu - + &Delete E&zabatu - + New Volume Group Bolumen Talde berria - + Resize Volume Group Bolumen Talde berriaren tamaina aldatu - + Deactivate Volume Group Bolumen Taldea desaktibatu - + Remove Volume Group Bolumen Taldea ezabatu - + I&nstall boot loader on: Abio kargatzailea I&nstalatu bertan: - + Are you sure you want to create a new partition table on %1? Ziur al zaude partizio-taula berri bat %1-(e)an sortu nahi duzula? - + Can not create new partition Ezin da partizio berririk sortu - + 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. @@ -2482,117 +2827,107 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PartitionViewStep - + Gathering system information... Sistemaren informazioa eskuratzen... - + Partitions Partizioak - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: Unekoa: - + After: Ondoren: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2935,13 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2614,17 +2949,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PlasmaLnfPage - + Form Formulario - + 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. - + 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. @@ -2632,7 +2967,7 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PlasmaLnfViewStep - + Look-and-Feel @@ -2640,17 +2975,17 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. PreserveFiles - + Saving files for later ... Fitxategiak geroko gordetzen... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2658,13 +2993,13 @@ Instalatzailea irten egingo da eta aldaketa guztiak galduko dira. ProcessResult - + There was no output from the command. - + Output: @@ -2673,52 +3008,52 @@ Irteera: - + External command crashed. Kanpo-komandoak huts egin du. - + Command <i>%1</i> crashed. <i>%1</i> komandoak huts egin du. - + External command failed to start. Ezin izan da %1 kanpo-komandoa abiarazi. - + Command <i>%1</i> failed to start. Ezin izan da <i>%1</i> komandoa abiarazi. - + Internal error when starting command. Barne-akatsa komandoa abiarazterakoan. - + Bad parameters for process job call. - + External command failed to finish. Kanpo-komandoa ez da bukatu. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. Kanpo-komandoak akatsekin bukatu da. - + Command <i>%1</i> finished with exit code %2. @@ -2726,89 +3061,94 @@ Irteera: QObject - - Default Keyboard Model - Teklatu mota lehenetsia - - - - - Default - Lehenetsia - - - - unknown - Ezezaguna - - - - extended - Hedatua - - - - unformatted - Formatugabea - - - - swap - swap - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + Ezezaguna - - No description provided. - + + extended + Hedatua - - - - + + unformatted + Formatugabea + + + + swap + swap + + + + + Default + Lehenetsia + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2816,18 +3156,18 @@ Irteera: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2835,143 +3175,158 @@ Irteera: ReplaceWidget - + Form Formulario - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. %1eko EFI partizio sistema erabiliko da abiarazteko %2. - + EFI system partition: EFI sistema-partizioa: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration Konfigurazio baliogabea - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2979,22 +3334,22 @@ Irteera: ResizePartitionJob - + Resize partition %1. Tamaina aldatu %1 partizioari. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -3002,7 +3357,7 @@ Irteera: ResizeVolumeGroupDialog - + Resize Volume Group Bolumen Talde berriaren tamaina aldatu @@ -3010,18 +3365,18 @@ Irteera: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3029,53 +3384,25 @@ Irteera: ResultsListDialog - + For best results, please ensure that this computer: Emaitza egokienak lortzeko, ziurtatu ordenagailu honek baduela: - + System requirements Sistemaren betebeharrak - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Konputagailu honek ez dauzka gutxieneko eskakizunak %1 instalatzeko. <br/>Instalazioak ezin du jarraitu. <a href="#details">Xehetasunak...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Konputagailu honek ez du betetzen gomendatutako zenbait eskakizun %1 instalatzeko. <br/>Instalazioak jarraitu ahal du, baina zenbait ezaugarri desgaituko dira. - - - - This program will ask you some questions and set up %2 on your computer. - Konputagailuan %2 ezartzeko programa honek hainbat galdera egingo dizkizu. - - ScanningDialog - + Scanning storage devices... Biltegiratze-gailuak eskaneatzen... - + Partitioning Partizioa(k) egiten @@ -3083,29 +3410,29 @@ Irteera: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error Barne errorea - - + + Cannot write hostname to target system @@ -3113,29 +3440,29 @@ Irteera: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 Ezin izan da %1 partizioan idatzi - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3143,82 +3470,82 @@ Irteera: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3226,42 +3553,42 @@ Irteera: SetPasswordJob - + Set password for user %1 Ezarri %1 erabiltzailearen pasahitza - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 root Muntatze Puntua %1 da - + Cannot disable root account. Ezin da desgaitu root kontua. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3269,45 +3596,82 @@ Irteera: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 Bide okerra: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, Ezin da ezarri ordu-zonaldea - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Ezin zaio chmod egin sudoers fitxategiari. + + + + Cannot create sudoers file for writing. + Ezin da sudoers fitxategia sortu bertan idazteko. + + ShellProcessJob - + Shell Processes Job @@ -3315,81 +3679,117 @@ Irteera: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Ados - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &Bai - - - SummaryViewStep - - Summary - Laburpena + + &No + &Ez + + + + &Cancel + &Utzi + + + + &Close + &Itxi TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3397,106 +3797,97 @@ Irteera: TrackingPage - + Form Formulario - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Fitxategi sistemak desmuntatu. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Zure erabiltzaile-izena luzeegia da. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Zure ostalari-izena laburregia da. - - - - Your hostname is too long. - Zure ostalari-izena luzeegia da. - - - - Your passwords do not match! - Pasahitzak ez datoz bat! + + Users + Erabiltzaileak UsersViewStep - + Users Erabiltzaileak @@ -3504,65 +3895,67 @@ Irteera: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes Bolumen Fisikoen Zerrenda - + Volume Group Name: Bolumen Taldearen Izena: - + Volume Group Type: Bolumen Talde Mota: - + Physical Extent Size: - + MiB MiB - + Total Size: Tamaina guztira: - + Used Size: Erabilitako tamaina: - + Total Sectors: Sektoreak guztira: - + Quantity of LVs: LV kopurua: @@ -3570,106 +3963,106 @@ Irteera: WelcomePage - + Form Formulario - - + + Select application and system language + &About + Honi &buruz + + + Open donations website - + &Donate - + Open help and support website + &Support + &Laguntza + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues &Arazo ezagunak - - &Support - &Laguntza - - - - &About - Honi &buruz - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Ongi etorri %1 instalatzailera.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> + + Open release notes website - + + &Release notes + + + + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Ongi etorri %1 instalatzailera.</h1> + + + + %1 support + %1 euskarria + + + About %1 setup - + About %1 installer %1 instalatzaileari buruz - + <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. - - - %1 support - %1 euskarria - WelcomeQmlViewStep - + Welcome Ongi etorri @@ -3677,120 +4070,443 @@ Irteera: WelcomeViewStep - + Welcome Ongi etorri + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + Atzera + + + + calamares-sidebar + + + Show debug information + Erakutsi arazte informazioa + + + + finishedq + + + Installation Completed + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + Atzera + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Teklatu Modeloa: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Idatzi hemen zure teklatua frogatzeko - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + Atzera + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Zein da zure izena? + + + + Your Full Name + + + + + What name do you want to use to log in? + Zein izen erabili nahi duzu saioa hastean? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Zein da ordenagailu honen izena? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Aukeratu pasahitza zure kontua babesteko. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Erabili pasahitz bera administratzaile kontuan. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + <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> - + About - + Honi buruz - + Support - + Known issues - + Release notes - + Donate - + Egin dohaintza diff --git a/lang/calamares_fa.ts b/lang/calamares_fa.ts index ee3728d69..349a5ba5b 100644 --- a/lang/calamares_fa.ts +++ b/lang/calamares_fa.ts @@ -1,3793 +1,4535 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + مدیریت تنظیمات سوارشدن-خودکار + + BootInfoWidget - + 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. - + <strong>محیط راه‌اندازی</strong> این سامانه. <br><br>سامانه‌های x86 قدیم‌تر فقط از <strong>بایوس</strong> پشتیبانی می‌کنند. <br>سامانه‌های نوین معمولا از <strong>ای‌اف‌آی</strong> استفاده می‌کنند، ولی اگر در حالت سازگاری روشن شوند، ممکن است به عنوان بایوس هم نمایش یابند. - + 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. - + سامانه با محیط راه‌اندازی <strong>ای‌اف‌آی</strong> روشن شد. <br><br>برای پیکربندی برپایی از محیط ای‌اف‌آی، باید این نصب‌کننده، برنامه بارکنندهٔ راه‌اندازی‌ای چون <strong>گراب</strong> یا <strong>راه‌انداز سیستم‌دی</strong> را روی یک <strong>افراز سامانه‌ای ای‌اف‌آی</strong> مستقر کند. این عمل به صورت خودکار انجام می‌شود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان ایجادش کرده یا برگزینید. - + 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. - + سامانه با محیط راه‌اندازی <strong>بایوس</strong> روشن شد. <br><br>برای پیکربندی برپایی از یک محیط بایوس، باید این نصب‌کنده برنامهٔ بارکنندهٔ راه‌اندازی چون <strong>گراب</strong> را در ابتدای یک افراز یا (ترجیحاً) روی <strong>رکورد راه‌اندازی اصلی</strong> نزدیکابتدای جدول افراز نصب کند. این عمل به صورت خودکار انجام می‌شود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان برپایش کنید. BootLoaderModel - + Master Boot Record of %1 - + رکورد راه اندازی اصلی %1 - + Boot Partition - + افراز راه‌اندازی - + System Partition - + افراز سامانه‌ای - + Do not install a boot loader - + نصب نکردن یک بارکنندهٔ راه‌اندازی - + %1 (%2) - + %1 (%2) Calamares::BlankViewStep - + Blank Page - + صفحهٔ خالی Calamares::DebugWindow - + Form - + فرم - + GlobalStorage - + ذخیره‌سازی همگانی - + JobQueue - + صف کارها - + Modules - + پیمانه‌ها - + Type: - + گونه: - - + + none - + هیچ - + Interface: - + رابط: - - Tools - + + Crashes Calamares, so that Dr. Konqui can look at it. + کلامارس کرش میکنه، تا Dr. Konqui بتونه بهش یک نگاهی بندازه. - + + Reloads the stylesheet from the branding directory. + استایل های مسیر branding را بارگیری مجدد می‌کند. + + + + Uploads the session log to the configured pastebin. + گزارش نشست را به pastebin تنظیم شده بارگذاری میکند. + + + + Send Session Log + ارسال گزارش نشست + + + Reload Stylesheet - + بارگزاری مجدد برگه‌شیوه - + + Displays the tree of widget names in the log (for stylesheet debugging). + نمایش درخت نام های ویجت ها در گزارش (برای دیباگ استایل ها). + + + Widget Tree - + درخت ابزارک‌ها - + Debug information - + اطّلاعات اشکال‌زدایی Calamares::ExecutionViewStep - + Set up - + راه‌اندازی - + Install - + نصب Calamares::FailJob - + Job failed (%1) - + کار شکست خورد. (%1) - + Programmed job failure was explicitly requested. - + عدم موفقیت کار برنامه ریزی شده به صورت صریح درخواست شد Calamares::JobThread - + Done - + انجام شد. Calamares::NamedJob - + Example job (%1) - + کار نمونه (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + دستور '%1' را در سیستم هدف اجرا کنید - + Run command '%1'. - + دستور '%1' را اجرا کنید - + Running command %1 %2 - + اجرای دستور %1 %2 Calamares::PythonJob - + Running %1 operation. - + اجرا عملیات %1 - + Bad working directory path - + مسیر شاخهٔ جاری بد - + Working directory %1 for python job %2 is not readable. - + شاخهٔ کاری %1 برای کار پایتونی %2 خواندنی نیست - + Bad main script file - + پروندهٔ کدنوشتهٔ اصلی بد - + Main script file %1 for python job %2 is not readable. - + پروندهٔ کدنویسهٔ اصلی %1 برای کار پایتونی %2 قابل خواندن نیست. - + Boost.Python error in job "%1". - + خطای Boost.Python در کار %1. Calamares::QmlViewStep - + Loading ... - + در حال بارگذاری ... - + QML Step <i>%1</i>. - + مرحله QML <i>%1</i>. - + Loading failed. - + بارگذاری شکست خورد. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + بررسی الزامات برای ماژول٪ 1 کامل شد. + - + Waiting for %n module(s). - - - + + منتظر ماندن برای n% ماژول + منتظر ماندن برای n% ماژول (ها). - + (%n second(s)) - - - + + (%n ثانیه) + (%n ثانیه) - + System-requirements checking is complete. - + چک کردن نیازمندی‌های سیستم تمام شد. Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - + راه‌اندازی شکست خورد. - - Would you like to paste the install log to the web? - + + Installation Failed + نصب شکست خورد + + + + Error + خطا + + + + &Yes + &بله + + + + &No + &خیر + + + + &Close + &بسته + + + + Install Log Paste URL + Install Log Paste URL + + + + The upload was unsuccessful. No web-paste was done. + The upload was unsuccessful. No web-paste was done. + + + + Install log posted to + +%1 + +Link copied to clipboard + گزارش نصب به پیوند زیر پست شد + +%1 + +پیوند در کلیپ برد رونگاری شد + + + + Calamares Initialization Failed + راه اندازی کالاماریس شکست خورد. - Install Log Paste URL - - - - - The upload was unsuccessful. No web-paste was done. - - - - - Calamares Initialization Failed - - - - %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. - + %1 نمی‌تواند نصب شود. کالاماریس نمی‌تواند همه ماژول‌های پیکربندی را بالا بیاورد. این یک مشکل در نحوه استفاده کالاماریس توسط توزیع است. - + <br/>The following modules could not be loaded: - + <br/>این ماژول نمی‌تواند بالا بیاید: + + + + Continue with setup? + ادامهٔ برپایی؟ + + + + Continue with installation? + نصب ادامه یابد؟ + + + + 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> + برنامه نصب %1 در شرف ایجاد تغییرات در دیسک شما به منظور راه‌اندازی %2 است. <br/><strong>شما قادر نخواهید بود تا این تغییرات را برگردانید.</strong> + + + + 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> + نصب‌کنندهٔ %1 می‌خواهد برای نصب %2 تغییراتی در دیسکتان بدهد. <br/><strong>نخواهید توانست این تغییرات را برگردانید.</strong> + + + + &Set up now + &همین حالا راه‌انداری کنید + + + + &Install now + &اکنون نصب شود - Continue with installation? - + Go &back + &بازگشت - - 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> - - - - - &Set up now - - - - + &Set up - + &راه‌اندازی - + &Install - + &نصب + + + + Setup is complete. Close the setup program. + نصب انجام شد. برنامه نصب را ببندید. + + + + The installation is complete. Close the installer. + نصب انجام شد. نصاب را ببندید. + + + + Cancel setup without changing the system. + لغو راه‌اندازی بدون تغییر سیستم. + + + + Cancel installation without changing the system. + لغو نصب بدون تغییر کردن سیستم. - Setup is complete. Close the setup program. - + &Next + &بعدی - + + &Back + &پیشین + + + + &Done + &انجام شد + + + + &Cancel + &لغو + + + Cancel setup? - + لغو راه‌اندازی؟ - + Cancel installation? - + لغو نصب؟ - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + آیا واقعا می‌خواهید روند راه‌اندازی فعلی رو لغو کنید؟ +برنامه راه اندازی ترک می شود و همه تغییرات از بین می روند. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - + واقعاً می خواهید فرایند نصب فعلی را لغو کنید؟ +نصب‌کننده بسته شده و تمامی تغییرات از بین خواهند رفت. CalamaresPython::Helper - + Unknown exception type - + گونهٔ استثنای ناشناخته - + unparseable Python error - + خطای پایتونی غیرقابل تجزیه - + unparseable Python traceback - + ردیابی پایتونی غیرقابل تجزیه - + Unfetchable Python error. - - - - - CalamaresUtils - - - Install log posted to: -%1 - + خطای پایتونی غیرقابل دریافت. CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 برنامه راه‌اندازی - + %1 Installer - + نصب‌کنندهٔ %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + تنظیم برچسب سامانه پرونده روی %1. - - Show debug information - + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + تنظیم عنوان سامانه پرونده <strong>%1</strong> به افراز <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + نصب کننده برای بروز کردن جدول افراز روی دیسک '%1' شکست خورد. CheckerContainer - + Gathering system information... - + جمع‌آوری اطلاعات سیستم... ChoicePage - + Form - + فرم - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - + انتخاب &دستگاه ذخیره‌سازی: - - - - + + + + Current: - + فعلی: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + بعد از: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + شما می توانید پارتیشن بندی دستی ایجاد یا تغییر اندازه دهید . + + + Reuse %1 as home partition for %2. - + استفاده مجدد از %1 به عنوان پارتیشن خانه برای %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + <strong>انتخاب یک پارتیشن برای کوجک کردن و ایجاد پارتیشن جدید از آن، سپس نوار دکمه را بکشید تا تغییر اندازه دهد</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + %1 تغییر سایز خواهد داد به %2 مبی‌بایت و یک پارتیشن %3 مبی‌بایتی برای %4 ساخته خواهد شد. - + + Boot loader location: + مکان بالاآورنده بوت: + + + <strong>Select a partition to install on</strong> - + <strong>یک پارتیشن را برای نصب بر روی آن، انتخاب کنید</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + پارتیشن سیستم ای.اف.آی نمی‌تواند در هیچ جایی از این سیستم یافت شود. لطفا برگردید و از پارتیشن بندی دستی استفاده کنید تا %1 را راه‌اندازی کنید. - + The EFI system partition at %1 will be used for starting %2. - + پارتیشن سیستم ای.اف.آی در %1 برای شروع %2 استفاده خواهد شد. - + EFI system partition: - + پارتیشن سیستم ای.اف.آی - + 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. - + به نظر می‌رسد در دستگاه ذخیره‌سازی هیچ سیستم‌عاملی وجود ندارد. تمایل به انجام چه کاری دارید؟<br/>شما می‌توانید انتخاب‌هایتان را قبل از اعمال هر تغییری در دستگاه ذخیره‌سازی، مرور و تأیید نمایید. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - + <strong>پاک کردن دیسک</strong><br/>این کار تمام داده‌های موجود بر روی دستگاه ذخیره‌سازی انتخاب شده را <font color="red">حذف می‌کند</font>. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - + <strong>نصب در امتداد</strong><br/>این نصاب از یک پارتیشن برای ساخت یک اتاق برای %1 استفاده می‌کند. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + <strong>جایگزینی یک افراز</strong><br/>افرازی را با %1 جایگزین می‌کند. - + + 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. + این دستگاه ذخیره سازی٪ 1 روی خود دارد. دوست دارید چه کاری انجام دهید؟ قبل از اینکه تغییری در دستگاه ذخیره ایجاد شود ، می توانید انتخاب های خود را بررسی و تأیید کنید. + + + 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. - + این دستگاه ذخیره سازی از قبل یک سیستم عامل روی خود دارد. دوست دارید چه کاری انجام دهید؟ قبل از اینکه تغییری در دستگاه ذخیره ایجاد شود ، می توانید انتخاب های خود را بررسی و تأیید کنید. - + 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. - + این دستگاه ذخیره سازی دارای چندین سیستم عامل است. دوست دارید چه کاری انجام دهید؟ قبل از اینکه تغییری در دستگاه ذخیره ایجاد شود ، می توانید انتخاب های خود را بررسی و تأیید کنید. + + + + 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/> + این دستگاه حافظه هم اکنون یک سیستم عامل روی خود دارد، اما جدول افراز <strong>%1</strong> با نیاز <strong>%2</strong> متفاوت است. + + + + This storage device has one of its partitions <strong>mounted</strong>. + این دستگاه حافظه دارای یک افرازی بوده که هم اکنون <strong>سوارشده</strong> است. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + یکی از بخش های این دستگاه حافظه عضوی از دستگاه <strong>RAID غیرفعال</strong> است. + + + + No Swap + بدون Swap + + + + Reuse Swap + باز استفاده از مبادله + + + + Swap (no Hibernate) + مبادله (بدون خواب‌زمستانی) + + + + Swap (with Hibernate) + مبادله (با خواب‌زمستانی) + + + + Swap to file + مبادله به پرونده ClearMountsJob - + + Successfully unmounted %1. + %1 باموفقیت جدا شد. + + + + Successfully disabled swap %1. + سوآپ %1 باموفقیت غیرفعال شد. + + + + Successfully cleared swap %1. + سوآپ %1 باموفقیت پاک شد. + + + + Successfully closed mapper device %1. + دستگاه مپر %1 باموفقیت بسته شد. + + + + Successfully disabled volume group %1. + گروه حجمی %1 باموفقیت غیرفعال شد. + + + Clear mounts for partitioning operations on %1 - + پاک‌سازی اتّصال‌ها برای عملبات افراز روی %1 - + Clearing mounts for partitioning operations on %1. - + در حال پاک‌سازی اتّصال‌ها برای عملبات افراز روی %1 - + Cleared all mounts for %1 - + همهٔ اتّصال‌ها برای %1 پاک‌‌سازی شدند ClearTempMountsJob - + Clear all temporary mounts. - + پاک‌سازی همهٔ اتّصال‌های موقّتی. - + Clearing all temporary mounts. - + در حال پاک‌سازی همهٔ اتّصال‌های موقّتی. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. - + همهٔ اتّصال‌های موقّتی پاک‌سازی شدند. CommandList - - + + Could not run command. - + نمی‌توان دستور را اجرا کرد. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + دستور در محیط میزبان اجرا می‌شود و نیاز دارد مسیر ریشه را بداند، ولی هیچ نقطهٔ اتّصال ریشه‌ای تعریف نشده. - + The command needs to know the user's name, but no username is defined. - + دستور نیاز دارد نام کاربر را بداند، ولی هیچ نام کاربری‌ای تعریف نشده. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + تنظیم مدل صفحه‌کلید به %1.<br/> - + Set keyboard layout to %1/%2. - + تنظیم چینش صفحه‌کلید به %1/%2. - + + Set timezone to %1/%2. + منطقه زمانی را تنظیم کنید 1% + + + The system language will be set to %1. - + زبان سامانه به %1 تنظیم خواهد شد. - + The numbers and dates locale will be set to %1. - - - - - Set timezone to %1/%2.<br/> - - - - - Network Installation. (Disabled: Incorrect configuration) - - - - - Network Installation. (Disabled: Received invalid groups data) - - - - - Network Installation. (Disabled: internal error) - + محلی و اعداد و تاریخ ها روی٪ 1 تنظیم می شوند. + Network Installation. (Disabled: Incorrect configuration) + نصب شبکه‌ای. (از کار افتاده: پیکربندی نادرست) + + + + Network Installation. (Disabled: Received invalid groups data) + نصب شبکه‌ای. (از کار افتاده: دریافت داده‌های گروه‌های نامعتبر) + + + + Network Installation. (Disabled: Internal error) + نصب شبکه‌ای. (از کار افتاده: خطای داخلی) + + + + Network Installation. (Disabled: No package list) + نصب شبکه ای. (از کار افتاده: بدون فهرست بسته) + + + + Package selection + گزینش بسته‌ها + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - + نصب شبکه‌ای. (از کار افتاده: ناتوان در گرفتن فهرست بسته‌ها. اتّصال شبکه‌تان را بررسی کنید) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. + + + + This program will ask you some questions and set up %2 on your computer. + این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانه‌تان برپا می‌کند. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + به برنامه راه اندازی Calamares خوش آمدید برای 1٪ + + + + <h1>Welcome to %1 setup</h1> + <h1>به برپاسازی %1 خوش آمدید.</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>به نصب‌کنندهٔ کالامارس برای %1 خوش آمدید.</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>به نصب‌کنندهٔ %1 خوش آمدید.</h1> + + + + Your username is too long. + نام کاربریتان بیش از حد بلند است. + + + + '%1' is not allowed as username. + '%1' بعنوان نام کاربر مجاز نیست. + + + + Your username must start with a lowercase letter or underscore. + نام کاربری شما باید با یک حرف کوچک یا خط زیر شروع شود. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + فقط حروف کوچک ، اعداد ، زیر خط و خط خط مجاز است. + + + + Your hostname is too short. + نام میزبانتان بیش از حد کوتاه است. + + + + Your hostname is too long. + نام میزبانتان بیش از حد بلند است. + + + + '%1' is not allowed as hostname. + '%1' بعنوان نام میزبان مجاز نیست. + + + + Only letters, numbers, underscore and hyphen are allowed. + فقط حروف ، اعداد ، زیر خط و خط خط مجاز است. + + + + Your passwords do not match! + گذرواژه‌هایتان مطابق نیستند! + + + + OK! + باشه! + + + + Setup Failed + راه‌اندازی شکست خورد. + + + + Installation Failed + نصب شکست خورد + + + + The setup of %1 did not complete successfully. + برپایی %1 با موفقیت کامل نشد. + + + + The installation of %1 did not complete successfully. + نصب %1 با موفقیت کامل نشد. + + + + Setup Complete + برپایی کامل شد + + + + Installation Complete + نصب کامل شد + + + + The setup of %1 is complete. + برپایی %1 کامل شد. + + + + The installation of %1 is complete. + نصب %1 کامل شد. + + + + Package Selection + گزینش بسته‌ها + + + + Please pick a product from the list. The selected product will be installed. + لطفاً محصولی را از لیست انتخاب کنید. محصول انتخاب شده نصب خواهد شد. + + + + Install option: <strong>%1</strong> + گزینه نصب: <strong>%1</strong> + + + + None + هیچ کدام + + + + Summary + خلاصه + + + + This is an overview of what will happen once you start the setup procedure. + این یک بررسی از مواردی که بعد از اینکه برپایی را شروع کنید، انجام می شوند است. + + + + This is an overview of what will happen once you start the install procedure. + این یک بررسی از مواردی که بعد از اینکه نصب را شروع کنید، انجام می شوند است. ContextualProcessJob - + Contextual Processes Job - + پردازه های متنی CreatePartitionDialog - + Create a Partition - + ایجاد یک افراز - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: + اندا&زه: + + + + MiB + می‌ب + + + + Partition &Type: + &گونهٔ افراز + + + + Primar&y - + + E&xtended + &گسترش‌یافته + + + + Fi&le System: + سامانه &پرونده: + + + + LVM LV name + نام حجم منطقی + + + + &Mount Point: + &نقطهٔ اتّصال: + + + + Flags: + پرچم‌ها: + + + + Label for the filesystem + برچسب برای سامانه پرونده + + + + FS Label: + برچسب سامانه پرونده: + + + En&crypt - + رمز&نگاری - + Logical - + منطقی - + Primary - + اصلی - + GPT - + GPT - + Mountpoint already in use. Please select another one. + نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. + + + + Mountpoint must start with a <tt>/</tt>. CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + ایجاد افراز %1 می‌ب جدید روی %3 (%2) با ورودی های %4. + + + + Create new %1MiB partition on %3 (%2). + ایجاد افراز %1 می‌ب جدید روی %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - + ایچاد افراز %2می‌ب جدید روی %4 (%3) با سامانهٔ پروندهٔ %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + ایجاد افراز <strong>%1 می‌ب</strong> جدید روی <strong>%3</strong> (%2) با ورودی های <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + ایجاد افراز <strong>%1</strong> می‌ب جدید روی <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + ایچاد افراز <strong>%2می‌ب</strong> جدید روی <strong>%</strong>4 (%3) با سامانهٔ پروندهٔ <strong>%</strong>1. - + + Creating new %1 partition on %2. - + در حال ایجاد افراز %1 جدید روی %2. - + The installer failed to create partition on disk '%1'. - + نصب کننده برای ساختن افراز روی دیسک '%1' شکست خورد. CreatePartitionTableDialog - + Create Partition Table - + ایجاد جدول افراز - + Creating a new partition table will delete all existing data on the disk. - + ایجاد یک جدول افراز جدید، همهٔ داده‌های موجود روی دیسک را حذف خواهد کرد. - + What kind of partition table do you want to create? - + می‌خواهید چه جور جدول افرازی بسازید؟ - + Master Boot Record (MBR) - + رکورد راه‌اندازی اصلی (MBR) - + GUID Partition Table (GPT) - + جدول افراز گاید (GPT) CreatePartitionTableJob - + Create new %1 partition table on %2. - + ایجاد جدول افراز %1 جدید روی %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + ایجاد جدول افراز <strong>%1</strong> جدید روی <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + در حال ایجاد جدول افراز %1 جدید روی %2. - + The installer failed to create a partition table on %1. - + نصب کننده برای ساختن جدول افراز روی %1 شکست خورد. CreateUserJob - + Create user %1 - + ایجاد کاربر %1 - + Create user <strong>%1</strong>. - + ایجاد کاربر <strong>%</strong>1. - - Creating user %1. - + + Preserving home directory + حفظ مسیر خانگی - - Sudoers dir is not writable. - + + + Creating user %1 + درحال ایجاد کاربر %1 - - Cannot create sudoers file for writing. - + + Configuring user %1 + درحال تنظیم کاربر %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. - + + Setting file permissions + درحال تنظیم مجوزهای پرونده CreateVolumeGroupDialog - + Create Volume Group - + ایجاد گروه حجمی CreateVolumeGroupJob - + Create new volume group named %1. - + ایجاد گروه حجمی جدید به نام %1. - + Create new volume group named <strong>%1</strong>. - + ایجاد گروه حجمی جدید به نام <strong>%1</strong>. - + Creating new volume group named %1. - + در حال ایجاد گروه حجمی جدید به نام %1. - + The installer failed to create a volume group named '%1'. - + نصب کننده برای ساخت گروه حجمی با نام '%1' شکست خورد. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + از کار انداختن گروه حجمی با نام %1. - + Deactivate volume group named <strong>%1</strong>. - + از کار انداختن گروه حجمی با نام <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. - + نصب کننده برای ازکارانداختن گروه حجمی با نام '%1' شکست خورد. DeletePartitionJob - + Delete partition %1. - + حذف افراز %1. - + Delete partition <strong>%1</strong>. - + حذف افراز <strong>%1</strong>. - + Deleting partition %1. - + در حال حذف افراز %1. - + The installer failed to delete partition %1. - + نصب کننده برای حذف افراز %1 شکست خورد. DeviceInfoWidget - - 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. - + + This device has a <strong>%1</strong> partition table. + این افزاره یک جدول افراز <strong>%1</strong> دارد. + + + + 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. + این یک دستگاه حلقه ای است. این یک دستگاه شبه بدون جدول پارتیشن است که یک فایل را به عنوان یک دستگاه بلوک قابل دسترسی می کند. این نوع تنظیمات معمولاً فقط شامل یک سیستم فایل منفرد است. - This device has a <strong>%1</strong> partition table. - - - - - 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. - - - - 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. - + این نصب کننده نمی تواند یک جدول پارتیشن را در دستگاه ذخیره سازی انتخاب شده تشخیص دهد. دستگاه یا جدول پارتیشن بندی ندارد ، یا جدول پارتیشن خراب است یا از نوع ناشناخته ای است. این نصب کننده می تواند یک جدول پارتیشن جدید برای شما ایجاد کند ، یا به صورت خودکار یا از طریق صفحه پارتیشن بندی دستی. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + این نوع جدول پارتیشن بندی توصیه شده برای سیستم های مدرن است که از محیط راه اندازی EFI شروع می شود. - + <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. - + این نوع جدول پارتیشن بندی فقط در سیستم های قدیمی که از محیط راه اندازی BIOS شروع می شوند توصیه می شود. GPT در بیشتر موارد دیگر توصیه می شود. هشدار: جدول پارتیشن MBR یک استاندارد منسوخ شده دوره MS-DOS است. فقط 4 پارتیشن اصلی ممکن است ایجاد شود و از این 4 پارتیشن می تواند یک پارتیشن توسعه یافته باشد ، که ممکن است به نوبه خود شامل بسیاری از موارد منطقی باشد پارتیشن بندی + + + + 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. + نوع جدول پارتیشن در دستگاه ذخیره سازی انتخاب شده. تنها راه برای تغییر نوع جدول پارتیشن پاک کردن و ایجاد مجدد جدول پارتیشن از ابتدا است ، که تمام داده های دستگاه ذخیره سازی را از بین می برد. این نصب کننده جدول پارتیشن فعلی را حفظ می کند مگر اینکه شما به صراحت غیر از این را انتخاب کنید. اگر مطمئن نیستید ، در سیستم های مدرن GPT ترجیح داده می شود. DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) - + %1 - (%2) DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + ردشدن از نوشتن تنظیمات LUKS برای Dracut: افراز "/" رمزگذاری نشده است - + Failed to open %1 - + شکست در گشودن %1 DummyCppJob - + Dummy C++ Job - + کار سی‌پلاس‌پلاس الکی EditExistingPartitionDialog - + Edit Existing Partition + ویرایش افراز موجود + + + + Con&tent: - - Content: - - - - + &Keep - + &نگه‌داری - + Format - + قالب‌بندی - + Warning: Formatting the partition will erase all existing data. - + هشدار: قالب‌بندی افراز، همهٔ داده‌های موجود را پاک می‌کند. - + &Mount Point: - - - - - Si&ze: - + &نقطهٔ اتّصال: + Si&ze: + اندا&زه: + + + MiB - + می‌ب - + Fi&le System: - + سامانه &پرونده: - + Flags: - + پرچم‌ها: - - Mountpoint already in use. Please select another one. - + + Label for the filesystem + برچسب برای سامانه پرونده + + + + FS Label: + برچسب سامانه پرونده: EncryptWidget - + Form - + فرم - + En&crypt system + رمز&نگاری سامانه + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. - + Passphrase - + عبارت عبور - + Confirm passphrase + تأیید عبارت عبور + + + + + Please enter the same passphrase in both boxes. + لطفاً عبارت عبور یکسانی را در هر دو جعبه وارد کنید. + + + + ErrorDialog + + + Details: - - Please enter the same passphrase in both boxes. - + + Would you like to paste the install log to the web? + آیا مایلید که گزارش‌ها در وب الصاق شوند؟ FillGlobalStorageJob - + Set partition information - - - - - Install %1 on <strong>new</strong> %2 system partition. - - - - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - - - - - Install %2 on %3 system partition <strong>%1</strong>. - - - - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - + تنظیم اطّلاعات افراز - Install boot loader on <strong>%1</strong>. - + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + نصب %1 روی سامانه افراز %2 <strong>جدید</strong> با امکانات <em>%3</em>. - + + Install %1 on <strong>new</strong> %2 system partition. + نصب %1 روی سامانه افراز %2 <strong>جدید</strong>. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + برپایی افراز <strong>جدید</strong> %2 با نقطه سوارشدن <strong>%1</strong> و امکانات <em>%3</em>. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + برپایی افراز <strong>جدید</strong> %2 با نقطه سوارشدن <strong>%1</strong> %3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + نصب %2 روی <strong>%1</strong> سامانه افراز %3 با امکانات <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + برپایی %3 افراز <strong>%1</strong> با نقطه سوارشدن <strong>%2</strong> و امکانات <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + برپایی %3 افراز <strong>%1</strong> با نقطه سوارشدن <strong>%2</strong> %4. + + + + Install %2 on %3 system partition <strong>%1</strong>. + نصب %2 روی <strong>%1</strong> سامانه افراز %3. + + + + Install boot loader on <strong>%1</strong>. + نصب بوت لودر روی <strong>%1</strong>. + + + Setting up mount points. - + برپایی نقطه‌های اتّصال FinishedPage - + Form - + فرم - + &Restart now - + &راه‌اندازی دوباره - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + تمام شد.٪ 1 در رایانه شما تنظیم شده است. اکنون می توانید از سیستم جدید خود استفاده کنید. - + <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> - + هنگامی که این کادر علامت گذاری شد ، هنگامی که بر روی انجام شده کلیک کنید یا برنامه برپاکننده را ببندید ، سیستم شما بلافاصله راه اندازی می شود. - + <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. - + <h1>همه‌چیز انجام شد.</h1><br/>%1 روی رایانه‌تان نصب شد.<br/>ممکن است بخواهید به سامانهٔ جدیدتان وارد شده تا به استفاده از محیط زندهٔ %2 ادامه دهید. - + <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> - + هنگامی که این کادر علامت گذاری شد ، هنگامی که بر روی انجام شده کلیک کنید یا نصب را ببندید ، سیستم شما بلافاصله راه اندازی می شود. - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>برپایی شکست خورد</h1><br/>%1 روی رایانه شما برپا نشد.<br/>پیام خطا: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - + <h1>نصب شکست خورد</h1><br/>%1 روی رایانه شما نصب نشد.<br/>پیام خطا: %2. + + + + FinishedQmlViewStep + + + Finish + پایان FinishedViewStep - + Finish - - - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + پایان FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + فرمت افراز %1 (سامانه پروانه: %2، اندازه: %3مبی‌بایت) روی %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + فرمت افراز<strong>%1</strong> با سایز <strong>%3مبی‌بایت</strong> با سامانه پرونده <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + فرمت افراز %1 با سامانه پروند %2. - + The installer failed to format partition %1 on disk '%2'. - + نصب کننده برای فرمت افراز %1 روی دیسک '%2' شکست خورد. GeneralRequirements - + has at least %1 GiB available drive space - - - - - There is not enough drive space. At least %1 GiB is required. - - - - - has at least %1 GiB working memory - - - - - The system does not have enough working memory. At least %1 GiB is required. - - - - - is plugged in to a power source - - - - - The system is not plugged in to a power source. - - - - - is connected to the Internet - + دارای حداقل %1 گی‌ب فضای کافی - The system is not connected to the Internet. - + There is not enough drive space. At least %1 GiB is required. + فضای کافی موجود نیست. حداقل %1 گی‌ب نیاز است. - - is running the installer as an administrator (root) - - - - - The setup program is not running with administrator rights. - + + has at least %1 GiB working memory + دارای حداقل %1 گی‌ب مموری کارکننده + The system does not have enough working memory. At least %1 GiB is required. + سامانه مموری کارکننده کافی ندارد. حداقل %1 گی‌ب نیاز است. + + + + is plugged in to a power source + به برق وصل است. + + + + The system is not plugged in to a power source. + سامانه به برق وصل نیست. + + + + is connected to the Internet + به اینترنت وصل است + + + + The system is not connected to the Internet. + سامانه به اینترنت وصل نیست. + + + + is running the installer as an administrator (root) + دارد نصب‌کننده را به عنوان یک مدیر (ریشه) اجرا می‌کند + + + + The setup program is not running with administrator rights. + برنامهٔ برپایی با دسترسی‌های مدیر اجرا نشده‌است. + + + The installer is not running with administrator rights. - + برنامهٔ نصب کننده با دسترسی‌های مدیر اجرا نشده‌است. - + has a screen large enough to show the whole installer - + صفحه‌ای با بزرگی کافی برای نمایش تمام نصب‌کننده دارد - + The screen is too small to display the setup program. - + صفحه برای نمایش برنامهٔ برپایی خیلی کوچک است. - + The screen is too small to display the installer. - + صفحه برای نمایش نصب‌کننده خیلی کوچک است. HostInfoJob - + Collecting information about your machine. - + در حال جمع‌آوری اطّلاعات دربارهٔ دستگاهتان. IDJob - - + + + - OEM Batch Identifier - + شناسه Batch اوئی‌ام - + Could not create directories <code>%1</code>. - + نمی‌توان شاخه‌های <code>%1</code> را ایجاد کرد. + + + + Could not open file <code>%1</code>. + نمی‌توان پروندهٔ <code>%1</code> را گشود. - Could not open file <code>%1</code>. - - - - Could not write to file <code>%1</code>. - + نمی‌توان در پروندهٔ <code>%1</code> نوشت. InitcpioJob - + Creating initramfs with mkinitcpio. - + در جال ایجاد initramfs با mkinitcpio. InitramfsJob - + Creating initramfs. - + در حال ایجاد initramfs. InteractiveTerminalPage - + Konsole not installed - + برنامهٔ Konsole نصب نیست - + Please install KDE Konsole and try again! - + لطفاً Konsole کی‌دی‌ای را نصب کرده و دوباره تلاش کنید! - + Executing script: &nbsp;<code>%1</code> - + در حال اجرای کدنوشته: &nbsp;<code>%1</code> InteractiveTerminalViewStep - + Script - - - - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - + کدنوشته KeyboardQmlViewStep - + Keyboard - + صفحه‌کلید KeyboardViewStep - + Keyboard - + صفحه‌کلید LCLocaleDialog - + System locale setting - + تنظیمات محلی سیستم - + 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>. - + تنظیمات محلی سیستم بر روی زبان و مجموعه کاراکتر برخی از عناصر رابط کاربری خط فرمان تأثیر می‌گذارد. <br/>تنظیمات فعلی <strong>%1</strong> است. - + &Cancel + &لغو + + + + &OK + &قبول + + + + LOSHJob + + + Configuring encrypted swap. + در حال پیکربندی مبادلهٔ رمزشده. + + + + No target system available. - - &OK + + No rootMountPoint is set. + + + + + No configFilePath is set. LicensePage - + Form - + فرم - + <h1>License Agreement</h1> - + <h1>توافق پروانه</h1> - + I accept the terms and conditions above. - + شرایط و ضوابط فوق را می‌پذیرم. - + Please review the End User License Agreements (EULAs). - + لطفاً توافق پروانهٔ کاربر نهایی (EULAs) را بازبینی کنید. - + This setup procedure will install proprietary software that is subject to licensing terms. - + با این روش نصب ، نرم افزار اختصاصی نصب می شود که مشروط به شرایط مجوز است. - + If you do not agree with the terms, the setup procedure cannot continue. - + اگر با شرایط موافق نباشید ، روش تنظیم ادامه نمی یابد. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + این روش راه اندازی می تواند نرم افزار اختصاصی را که مشمول شرایط صدور مجوز است نصب کند تا ویژگی های اضافی را فراهم کند و تجربه کاربر را افزایش دهد. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + اگر با این شرایط موافق نباشید ، نرم افزار اختصاصی نصب نمی شود و به جای آن از گزینه های منبع باز استفاده می شود. LicenseViewStep - + License - + پروانه LicenseWidget - + URL: %1 - + نشانی اینترنتی: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>راه‌انداز %1</strong><br/>از %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>درایور گرافیک %1</strong><br/><font color="Grey">توسط %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>افزونه مرورگر %1</strong><br/><font color="Grey">توسط %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>کدک %1</strong><br/><font color="Grey">توسط %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>بسته %1</strong><br/><font color="Grey">توسط %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">توسط %2</font> - + File: %1 - + پرونده: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text - + نهفتن متن پروانه + + + + Show the license text + نمایش متن پروانه + + + + Open license agreement in browser. + گشودن توافق پروانه در مرورگر. LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + ناحیه: - + Zone: - + منطقه: - - + + &Change... - - - - - Set timezone to %1/%2.<br/> - + &تغییر… LocaleQmlViewStep - + Location - + موقعیت + + + + LocaleTests + + + Quit + خروج LocaleViewStep - + Location - + موقعیت LuksBootKeyFileJob - + Configuring LUKS key file. - + پیکربندی پروندهٔ کلید LUKS. - - + + No partitions are defined. - + هیچ افرازی تعریف نشده - - - + + + Encrypted rootfs setup error - + خطای برپاسازی rootfs رمزشده - + Root partition %1 is LUKS but no passphrase has been set. - + افراز روت %1 یک LUKS است، ولی هیچ گذرواژه ای تنظیم نشده است. - + Could not create LUKS key file for root partition %1. - + نمیتوان پرونده کلید LUKS را برای افراز روت %1 ایجاد کرد. - + Could not configure LUKS key file on partition %1. - + نمیتوان پرونده کلید LUKS را برای افراز روت %1 تنظیم کرد. MachineIdJob - + Generate machine-id. - + تولید شناسهٔ دستگاه - + Configuration Error - + خطای پیکربندی - + No root mount point is set for MachineId. - + هیچ نقطه نصب ریشه ای برای MachineId تنظیم نشده است. + + + + Map + + + Timezone: %1 + منطقه زمانی: %1 + + + + 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. + لطفاً مکان مورد نظر خود را بر روی نقشه انتخاب کنید تا نصب کننده بتواند تنظیمات منطقه و منطقه را برای شما پیشنهاد دهد. می توانید تنظیمات پیشنهادی را در زیر دقیق کنید. با کشیدن برای حرکت و استفاده از دکمه های +/- برای بزرگنمایی یا کوچک کردن نقشه یا استفاده از پیمایش ماوس برای بزرگنمایی ، نقشه را جستجو کنید. NetInstallViewStep - - + Package selection - + گزینش بسته‌ها + + + + Office software + نرم‌افزار اداری + + + + Office package + بستهٔ اداری + + + + Browser software + نرم‌افزار مرورگر + + + + Browser package + بستهٔ مرورگر + + + + Web browser + مرورگر وب + + + + Kernel + کرنل + + + + Services + خدمت‌ها + + + + Login + ورود + + + + Desktop + میزکار + + + + Applications + برنامه‌های کاربردی + + + + Communication + ارتباطات + + + + Development + توسعه + + + + Office + اداری + + + + Multimedia + چندرسانه‌ای - Office software - + Internet + اینترنت - Office package - + Theming + شخصی‌سازی - Browser software - + Gaming + بازی - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + ابزارها NotesQmlViewStep - + Notes - + یادداشت‌ها OEMPage - + Ba&tch: - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>اینجا یک شناسه batch وارد کنید. این مقدار در سامانه هدف ذخیره می‌شود.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - + <html><head/><body><h1>تنظیمات اوئی‌ام</h1><p>کلامارس از تنظیمات اوئی‌ام هنگام تنظیم سامانه هدف استفده خواهد کرد.</p></body></html> OEMViewStep - + OEM Configuration - + پیکربندی سازنده - + Set the OEM Batch Identifier to <code>%1</code>. - + تنظیم شناسه Batch اوئی‌ام به <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. + منطقه موردنظر خود را انتخاب کنید یا از تنظیمات پیشفرض استفاده کنید. + + + + + + Timezone: %1 + منطقه زمانی: %1 + + + + Select your preferred Zone within your Region. + منطقه مورد نظر خود را در منطقه خود انتخاب کنید. + + + + Zones + مناطق + + + + You can fine-tune Language and Locale settings below. + شما میتوانید زبان و زبان محلی را در تنظیمات زیر بطوردقیق تنظیم کنید. PWQ - + Password is too short - + گذرواژه خیلی کوتاه است - + Password is too long - - - - - Password is too weak - - - - - Memory allocation error when setting '%1' - - - - - Memory allocation error - - - - - The password is the same as the old one - - - - - The password is a palindrome - - - - - The password differs with case changes only - - - - - The password is too similar to the old one - - - - - The password contains the user name in some form - - - - - The password contains words from the real name of the user in some form - - - - - The password contains forbidden words in some form - - - - - The password contains less than %1 digits - - - - - The password contains too few digits - + گذرواژه خیلی بلند است - The password contains less than %1 uppercase letters - + Password is too weak + گذرواژه خیلی ضعیف است - + + Memory allocation error when setting '%1' + خطای تخصیص حافظه هنگام تنظیم %1 + + + + Memory allocation error + خطای تخصیص حافظه + + + + The password is the same as the old one + گذرواژه همان قبلی است + + + + The password is a palindrome + گذرواژه متقارن است + + + + The password differs with case changes only + گذرواژه فقط در کوچکی و بزرگی متفاوت است + + + + The password is too similar to the old one + گذرواژه خیلی شبیه قبلی است + + + + The password contains the user name in some form + گذرواژه، شکلی از نام کاربری را داراست + + + + The password contains words from the real name of the user in some form + گذرواژه شامل واژگانی از نام واقعی کاربر است + + + + The password contains forbidden words in some form + گذرواژه شکلی از واژگان ممنوعه را دارد + + + + The password contains too few digits + گذرواژه، رقم‌های خیلی کمی دارد + + + The password contains too few uppercase letters - + رمز عبور حاوی حروف بزرگ بسیار کمی است + + + + The password contains fewer than %n lowercase letters + + گذرواژه حاوی کمتر از %n حرف کوچک است + گذرواژه حاوی کمتر از %n حرف کوچک است + - - The password contains less than %1 lowercase letters - - - - + The password contains too few lowercase letters - + گذرواژه حاوی حروف کوچک بسیار کمی است - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - + گذرواژه حاوی بیش از حد نویسه غیر الفبا است - - The password is shorter than %1 characters - - - - + The password is too short - + گذرواژه خیلی کوتاه است - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - + کلمه عبور شامل شکل های کافی نیست. - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - - - - The password contains more than %1 characters of the same class consecutively - - - - - The password contains too many characters of the same class consecutively - - - - - The password contains monotonic sequence longer than %1 characters - - - - - The password contains too long of a monotonic character sequence - - - - - No password supplied - - - - - Cannot obtain random numbers from the RNG device - - - - - Password generation failed - required entropy too low for settings - - - - - The password fails the dictionary check - %1 - - - - - The password fails the dictionary check - - - - - Unknown setting - %1 - - - - - Unknown setting - + گذرواژه حاوی بیش از حد نویسه های پی در پی است - Bad integer value of setting - %1 - + The password contains too many characters of the same class consecutively + رمز ورود به صورت پی در پی حاوی نویسه های زیادی از همان کلاس است + + + + The password contains fewer than %n digits + + گذرواژه حاوی کمتر از %n عدد است + گذرواژه حاوی کمتر از %n عدد است + + + + + The password contains fewer than %n uppercase letters + + گذرواژه حاوی کمتر از %n حرف بزرگ است + گذرواژه حاوی کمتر از %n حرف بزرگ است + + + + + The password contains fewer than %n non-alphanumeric characters + + گذرواژه حاوی کمتر از %n نویسه غیرالفبا است + گذرواژه حاوی کمتر از %n نویسه غیرالفبا است + + + + + The password is shorter than %n characters + + گذرواژه کوتاه تر از %n نویسه است + گذرواژه کوتاه تر از %n نویسه است + + + The password is a rotated version of the previous one + گذرواژه یک نسخه برعکس شده از قبلی است + + + + The password contains fewer than %n character classes + + گذرواژه حاوی کمتر از %n کلاس نویسه است + گذرواژه حاوی کمتر از %n کلاس نویسه است + + + + + The password contains more than %n same characters consecutively + + گذرواژه حاوی بیش از %n نویسه پی در پی است + گذرواژه حاوی بیش از %n نویسه پی در پی است + + + + + The password contains more than %n characters of the same class consecutively + + گذرواژه حاوی بیش از%n نویسه پی در پی از همان کلاس است + گذرواژه حاوی بیش از%n نویسه پی در پی از همان کلاس است + + + - Bad integer value - + The password contains monotonic sequence longer than %n characters + + گذرواژه حاوی یک توالی کاراکتر یکنواخت بیش از %n نویسه است + گذرواژه حاوی یک توالی کاراکتر یکنواخت بیش از %n نویسه است + - - Setting %1 is not of integer type - + + The password contains too long of a monotonic character sequence + رمز عبور حاوی یک توالی کاراکتر یکنواخت بیش از حد طولانی است - Setting is not of integer type - + No password supplied + هیچ‌گذرواژه‌ای فراهم نشده + + + + Cannot obtain random numbers from the RNG device + نمی توان اعداد تصادفی را از دستگاه RNG بدست آورد - Setting %1 is not of string type - + Password generation failed - required entropy too low for settings + تولید رمز عبور ناموفق بود - برای تنظیمات آنتروپی مورد نیاز بسیار کم است + The password fails the dictionary check - %1 + گذرواژه در بررسی فرهنگ لفت ناموفق است - %1 + + + + The password fails the dictionary check + رمز عبور در بررسی فرهنگ لغت ناموفق است + + + + Unknown setting - %1 + تنظیمات ناشناخته - %1 + + + + Unknown setting + تنظیمات ناشناخته + + + + Bad integer value of setting - %1 + مقدار صحیح بد در تنظیمات - %1 + + + + Bad integer value + مقدار صحیح بد + + + + Setting %1 is not of integer type + تنظیمات %1 از گونهٔ صحیح نیست + + + + Setting is not of integer type + تنظیمات از گونهٔ صحیح نیست + + + + Setting %1 is not of string type + تنظیمات %1 از گونهٔ رشته نیست + + + Setting is not of string type - + تنظیمات از گونهٔ رشته نیست - + Opening the configuration file failed - + گشودن پروندهٔ پیکربندی شکست خورد - + The configuration file is malformed - + پروندهٔ پیکربندی بدریخت است - + Fatal failure - + خطای مهلک - + Unknown error - + خطای ناشناخته - + Password is empty - + گذرواژه خالی است PackageChooserPage - + Form - + فرم - + Product Name - + نام محصول - + TextLabel - + TextLabel - + Long Product Description - + شرح محصول بلند - + Package Selection - + گزینش بسته‌ها - + Please pick a product from the list. The selected product will be installed. - + لطفاً محصولی را از لیست انتخاب کنید. محصول انتخاب شده نصب خواهد شد. + + + + PackageChooserQmlViewStep + + + Packages + بسته‌ها PackageChooserViewStep - + Packages - + بسته‌ها PackageModel - + Name - + نام - + Description - + شرح Page_Keyboard - + Form - + فرم - + Keyboard Model: - + مدل صفحه‌کلید: - + Type here to test your keyboard - + برای آزمودن صفحه‌کلیدتان، این‌جا بنویسید Page_UserSetup - + Form - + فرم - + What is your name? - + نامتان چیست؟ - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + نام کاملتان - + + What name do you want to use to log in? + برای ورود می خواهید از چه نامی استفاده کنید؟ + + + login - + ورود - + + What is the name of this computer? + نام این رایانه چیست؟ + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + <small>اگر رایانه‌تان را روی یک شبکه برای دیگران نمایان کنید، از این نام استفاده می‌شود.</small> - + Computer Name - + نام رایانه - - + + Choose a password to keep your account safe. + برای امن نگه داشتن حسابتان، گذرواژه‌ای برگزینید. + + + + + <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> + <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود. یک گذرواژهٔ خوب شامل ترکیبی از حروف، ارقام و علامت‌هاست که باید لااقل هست نویسه طول داشته باشد و در دوره‌های منظّم، عوض شود.</small> + + + + Password - + گذرواژه - - + + Repeat Password - + تکرار TextLabel - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + وقتی این کادر علامت گذاری شد ، بررسی قدرت رمز عبور انجام می شود و دیگر نمی توانید از رمز عبور ضعیف استفاده کنید. - + Require strong passwords. - + نباز به گذرواژهٔ قوی دارد. - + Log in automatically without asking for the password. - + ورود خودکار بدون پرسیدن گذرواژه. - + Use the same password for the administrator account. - + استفاده از گذرواژهٔ یکسان برای حساب مدیر. - + Choose a password for the administrator account. - + گذرواژه‌ای برای حساب مدیر برگزینید. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود.</small> PartitionLabelsView - + Root - + ریشه - + Home - + خانه + + + + Boot + بوت - Boot - - - - EFI system - + سیستم ای.اف.آی - + Swap - + Swap - + New partition for %1 - + پارتیشن جدید برای %1 - + New partition - + پارتیشن جدید - + %1 %2 size[number] filesystem[name] - + %1 %2 PartitionModel - - + + Free Space - + فضای آزاد - - + + New partition - + افراز جدید - + Name - + نام - + File System - + سامانهٔ پرونده - + + File System Label + برچسب سامانه پرونده + + + Mount Point - + نقطهٔ اتّصال - + Size - + اندازه PartitionPage - + Form - + فرم - + Storage de&vice: - + ذخیره‌سازی و افزا&ره: - + &Revert All Changes - + &بازگردانی همهٔ تغییرات - + New Partition &Table - + &جدول افراز جدید - + Cre&ate - + ای&جاد - + &Edit - + &ویرایش - + &Delete - + &حذف - + New Volume Group - + گروه حجمی جدید - + Resize Volume Group - + تغییر اندازهٔ گروه حجمی - + Deactivate Volume Group - + از کار انداختن گروه حجمی - + Remove Volume Group - + برداشتن گروه حجمی - + I&nstall boot loader on: - + &نصب بارکنندهٔ راه‌اندازی روی: - + Are you sure you want to create a new partition table on %1? - + مطمئنید می‌خواهید روی %1 جدول افراز جدیدی بسازید؟ - + Can not create new partition - + نمی‌توان افراز جدید ساخت - + 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. - + جدول پارتیشن در٪ 1 از قبل دارای٪ 2 پارتیشن اصلی است و دیگر نمی توان آن را اضافه کرد. لطفاً یک پارتیشن اصلی را حذف کنید و به جای آن یک پارتیشن توسعه یافته اضافه کنید. PartitionViewStep - + Gathering system information... - + جمع‌آوری اطّلاعات سامانه… - + Partitions + افرازها + + + + Unsafe partition actions are enabled. - - Install %1 <strong>alongside</strong> another operating system. + + Partitioning is configured to <b>always</b> fail. - - <strong>Erase</strong> disk and install %1. + + No partitions will be changed. - - <strong>Replace</strong> a partition with %1. - - - - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + فعلی: - + After: - + بعد از: - + No EFI system partition configured - + هیچ پارتیشن سیستم EFI پیکربندی نشده است - - 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>esp</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. - + + EFI system partition configured incorrectly + افراز سامانه EFI به نادرستی تنظیم شده است - - EFI system partition flag not set - + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + یک افراز سامانه EFI نیازمندست که از %1 شروع شود.<br/><br/>برای تنظیم یک افراز سامانه EFI، به عقب بازگشته و یک سامانه پرونده مناسب انتخاب یا ایجاد کنید. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - + + The filesystem must be mounted on <strong>%1</strong>. + سامانه پرونده باید روی <strong>%1</strong> سوارشده باشد. - + + The filesystem must have type FAT32. + سامانه پرونده باید دارای نوع FAT32 باشد. + + + + The filesystem must be at least %1 MiB in size. + سامانه پرونده حداقل باید دارای %1مبی‌بایت حجم باشد. + + + + The filesystem must have flag <strong>%1</strong> set. + سامانه پرونده باید پرچم <strong>%1</strong> را دارا باشد. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + شما میتوانید بدون برپاکردن افراز سامانه EFI ادامه دهید ولی ممکن است سامانه برای شروع با مشکل مواجه شود. + + + Option to use GPT on BIOS + گزینه ای برای استفاده از GPT در BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted - + پارتیشن بوت رمزشده نیست - + 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. - + یک پارتیشن بوت جداگانه همراه با یک پارتیشن ریشه ای رمزگذاری شده راه اندازی شده است ، اما پارتیشن بوت رمزگذاری نشده است. با این نوع تنظیمات مشکلات امنیتی وجود دارد ، زیرا پرونده های مهم سیستم در یک پارتیشن رمزگذاری نشده نگهداری می شوند. در صورت تمایل می توانید ادامه دهید ، اما باز کردن قفل سیستم فایل بعداً در هنگام راه اندازی سیستم اتفاق می افتد. برای رمزگذاری پارتیشن بوت ، به عقب برگردید و آن را دوباره ایجاد کنید ، رمزگذاری را در پنجره ایجاد پارتیشن انتخاب کنید. - + has at least one disk device available. - + حداقل یک دستگاه دیسک در دسترس دارد. - + There are no partitions to install on. - + هیچ پارتیشنی برای نصب وجود ندارد PlasmaLnfJob - + Plasma Look-and-Feel Job - + شغل ظاهری و احساس پلاسما - - + + Could not select KDE Plasma Look-and-Feel package - + بسته KDE Plasma Look-and-Feel قابل انتخاب نیست PlasmaLnfPage - + Form - + فرم - + 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. - + لطفاً برای KDE Plasma Desktop ظاهر و احساسی را انتخاب کنید. همچنین می توانید پس از نصب سیستم ، از این مرحله صرف نظر کرده و شکل ظاهری را پیکربندی کنید. با کلیک بر روی انتخاب ظاهر و احساس ، پیش نمایش زنده ای از آن احساس و احساس به شما ارائه می شود. - + 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. - + لطفاً برای KDE Plasma Desktop ظاهر و احساسی را انتخاب کنید. همچنین می توانید پس از نصب سیستم ، از این مرحله صرف نظر کرده و شکل ظاهری را پیکربندی کنید. با کلیک بر روی انتخاب ظاهر و احساس ، پیش نمایش زنده ای از آن احساس و احساس به شما ارائه می شود. PlasmaLnfViewStep - + Look-and-Feel - + ظاهر و احساس PreserveFiles - + Saving files for later ... - + ذخیرهٔ پرونده‌ها برای بعد - + No files configured to save for later. - + هیچ پرونده ای پیکربندی نشده است تا بعداً ذخیره شود. - + Not all of the configured files could be preserved. - + همه پرونده های پیکربندی شده قابل حفظ نیستند. ProcessResult - + There was no output from the command. - + output هیچ خروجی از دستور نبود. - + Output: - + خروجی - + External command crashed. - + فرمان خارجی خراب شد. - + Command <i>%1</i> crashed. - + دستور <i>%1</i> شکست خورد. - + External command failed to start. - + دستور خارجی شروع نشد. - + Command <i>%1</i> failed to start. - + دستور <i>%1</i> برای شروع شکست خورد. - + Internal error when starting command. - + خطای داخلی هنگام شروع دستور. - + Bad parameters for process job call. - + پارامترهای نامناسب برای صدا زدن کار پردازش شده است - + External command failed to finish. - + فرمان خارجی به پایان نرسید. - + Command <i>%1</i> failed to finish in %2 seconds. - + دستور <i>%1</i> برای اتمام در %2 ثانیه شکست خورد. - + External command finished with errors. - + دستور خارجی با خطا به پایان رسید. - + Command <i>%1</i> finished with exit code %2. - + دستور <i>%1</i> با کد خروج %2 به پایان رسید. QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - + %1 (%2) - - No product - + + unknown + ناشناخته - - No description provided. - + + extended + گسترده - - - - + + unformatted + قالب‌بندی نشده + + + + swap + مبادله + + + + + Default + پیش گزیده + + + + + + File not found - + پرونده پیدا نشد - + Path <pre>%1</pre> must be an absolute path. - + مسیر <pre>%1</pre> باید یک مسیر مطلق باشد. - + + Directory not found + مسیر یافت نشد + + + + Could not create new random file <pre>%1</pre>. - + نمی توان پرونده تصادفی <pre>%1</pre> را ساخت. + + + + No product + بدون محصول + + + + No description provided. + هیچ توضیحی وجود ندارد. + + + + (no mount point) + (بدون نقطهٔ اتّصال) + + + + Unpartitioned space or unknown partition table + فضای افرازنشده یا جدول افراز ناشناخته + + + + Recommended + + + <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> + <p>رایانه شما نیازمندی‌های برپاسازی %1 را ندارد. +برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند.</p> RemoveUserJob - + Remove live user from target system - + برداشتن کاربر زنده از سامانهٔ هدف RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + حذف گروه حجمی با نام %1. - + Remove Volume Group named <strong>%1</strong>. - + حذف گروه حجمی با نام <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. - + نصب کننده برای حذف گروه حجمی با نام '%1' شکست خورد. ReplaceWidget - + Form - + فرم - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + انتخاب کنید که کجا %1 نصب شود.<br/><font color="red">اخطار:</font>این همه پرونده های افراز انتخاب شده را پاک خواهد کرد. - + The selected item does not appear to be a valid partition. - + بنظر نمی آید که گزینه انتخاب شده، افراز معتبری باشد. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 نمیتواند روی فضای خالی نصب شود. لطفا یک افراز موجود را برگزینید. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 نمیتواند روی یک افراز extended نصب شود. لطفا یک افراز primary یا logical برگزینید. - + %1 cannot be installed on this partition. - + %1 نمیتواند روی این افراز نصب شود. - + Data partition (%1) - + داده افراز (%1) - + Unknown system partition (%1) - + سامانه افراز ناشناس (%1) - + %1 system partition (%2) - + سامانه افراز %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <strong>%4</strong><br/><br/>افراز %1 برای %2 بسیار کوچک است. لطفا یک افراز با ظرفیت حداقل %3 گیبی‌بایت انتخاب کنید. - + <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. - + <strong>%2</strong><br/><br/>افراز سامانه EFI نمی‌تواند در هیچ جایی از این سیستم یافت شود. لطفا برگردید و از پارتیشن بندی دستی استفاده کنید تا %1 را راه‌اندازی کنید. - - - + + + <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. - + <strong>%3</strong><br/><br/>%1 روی %2 نصب خواهد شد.<br/><font color="red">اخطار:</font>همه داده های افراز %2 از دست خواهند رفت. - + The EFI system partition at %1 will be used for starting %2. - + پارتیشن سیستم ای.اف.آی در %1 برای شروع %2 استفاده خواهد شد. - + EFI system partition: - + پارتیشن سیستم ای.اف.آی + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>رایانه شما نیازمندی های نصب %1 را ندارد.<br/> +نصب نمیتواند ادامه یابد.</p> + + + + <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> + <p>رایانه شما نیازمندی‌های برپاسازی %1 را ندارد. +برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند.</p> ResizeFSJob - + Resize Filesystem Job - + کار تغییر اندازهٔ سامانه‌پرونده - + Invalid configuration - + پیکربندی نامعتبر - + The file-system resize job has an invalid configuration and will not run. - + کار تغییر اندازه سیستم فایل دارای پیکربندی نامعتبری است و اجرا نمی شود. - + KPMCore not Available - + KPMCore موجود نیست - + Calamares cannot start KPMCore for the file-system resize job. - + کلامارس نمیتواند KPMCore را برای کار تغییراندازه فایل سیستم شروع کند. + + + + + + + + Resize Failed + تغییر اندازه شکست خورد + + + + The filesystem %1 could not be found in this system, and cannot be resized. + فایل سیستم %1 روی این سامانه یافت نشد و نمیتواند تغییر اندازه دهد. - - - - - Resize Failed - - - - - The filesystem %1 could not be found in this system, and cannot be resized. - - - - The device %1 could not be found in this system, and cannot be resized. - + دستگاه %1 روی این سامانه یافت نشد و نمیتواند تغییراندازه دهد. - - + + The filesystem %1 cannot be resized. - + سیستم فایل %1 نمی تواند تغییر اندازه دهد. - - + + The device %1 cannot be resized. - + دستگاه %1 نمی تواند تغییر اندازه دهد. - + The filesystem %1 must be resized, but cannot. - + سیستم فایل٪ 1 باید تغییر اندازه دهد ، اما نمی تواند. - + The device %1 must be resized, but cannot - + دستگاه %1 باید تغییر اندازه دهد، اما نمی تواند. ResizePartitionJob - + Resize partition %1. - + تغییر اندازهٔ افراز %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + تغییر اندازه افراز <strong>%1</strong> از <strong>%2مبی‌بایت</strong> به <strong>%3مبی‌بایت</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + درحال تغییر اندازه افراز %1 از %2مبی‌بایت به %3مبی‌بایت. - + The installer failed to resize partition %1 on disk '%2'. - + نصب کننده برای تغییر اندازه افراز %1 روی دیسک '%2' شکست خورد. ResizeVolumeGroupDialog - + Resize Volume Group - + تغییر اندازهٔ گروه حجمی ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + تغییر اندازه گروه حجمی با نام %1 از %2 به %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + تغییر اندازه گروه حجمی با نام <strong>%1</strong> از <strong>%2</strong> به <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. - + نصب کننده برای تغییر اندازه گروه حجمی با نام '%1' شکست خورد. ResultsListDialog - + For best results, please ensure that this computer: - + برای بهترین نتیجه ، لطفا اطمینان حاصل کنید که این کامپیوتر: - + System requirements - - - - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - + نیازمندی‌های سامانه ScanningDialog - + Scanning storage devices... - + در حال پویش افزارهٔ ذخیره‌ساز… - + Partitioning - + افرازش SetHostNameJob - + Set hostname %1 - + تنظیم نام میزبان %1 - + Set hostname <strong>%1</strong>. - + تنظیم نام میزبان <strong>%1</strong>. - + Setting hostname %1. - + تنظیم نام میزبان به %1. + - Internal Error - + خطای داخلی - - + + Cannot write hostname to target system - + عدم توانایی نوشتن نام میزبان به سامانه هدف SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + تنظیم مدل کیبورد به %1، چیدمان به %2-%3 - + Failed to write keyboard configuration for the virtual console. - + شکست در نوشتن تنظیمات کیبورد برای کنسول مجازی. - - - + + + Failed to write to %1 - + شکست در نوشتن %1 - + Failed to write keyboard configuration for X11. - + شکست در نوشتن تنظیمات کیبورد برای X11. - + Failed to write keyboard configuration to existing /etc/default directory. - + شکست در نوشتن تنظیمات کیبورد به مسیر /etc/default موجود. SetPartFlagsJob - + Set flags on partition %1. - + تنظیم پرچم ها روی افراز %1. - + Set flags on %1MiB %2 partition. - + تنظیم پرچم ها روی افراز %2 با حجم %1مبی‌بایت. - + Set flags on new partition. - + تنظیم پرچم ها روی افراز جدید. - + Clear flags on partition <strong>%1</strong>. - + پاک کردن پرچم ها از افراز <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - + پاک کردن پرچم ها از افراز <strong>%2</strong> با حجم %1مبی‌بایت. + + + + Clear flags on new partition. + پاک کردن پرچم در افراز جدید. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + پرچم گذاری افراز <strong>%1</strong> بعنوان <strong>%2</strong>. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + پرچم گذاری افراز <strong>%2</strong> بعنوان <strong>%3</strong> با حجم %1 مبی‌بایت. - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - + Flag new partition as <strong>%1</strong>. + درحال پرچم گذاری افراز جدید بعنوان <strong>%1</strong>. - + + Clearing flags on partition <strong>%1</strong>. + درحال پاک کردن پرچم ها از افراز <strong>%1</strong>. + + + Clearing flags on %1MiB <strong>%2</strong> partition. - + درحال پاک کردن پرچم ها از افراز <strong>%2</strong> با حجم %1مبی‌بایت. + + + + Clearing flags on new partition. + پاک کردن پرچم ها در افراز جدید. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + درحال تنظیم پرچم های <strong>%2</strong> روی افراز <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + درحال تنظیم پرچم های <strong>%3</strong> روی افراز <strong>%2</strong> با حجم %1مبی‌بایت. - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - - Clear flags on new partition. - - - - - Flag partition <strong>%1</strong> as <strong>%2</strong>. - - - - - Flag new partition as <strong>%1</strong>. - - - - - Clearing flags on partition <strong>%1</strong>. - - - - - Clearing flags on new partition. - - - - - Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - - - - Setting flags <strong>%1</strong> on new partition. - + درحال تنظیم پرچم های <strong>%1</strong> روی افراز جدید. - + The installer failed to set flags on partition %1. - + نصب کننده برای تنظیم پرچم ها روی افراز %1 شکست خورد. SetPasswordJob - + Set password for user %1 - + تنظیم گذرواژه برای کاربر %1 - + Setting password for user %1. - + درحال تنظیم گذرواژه برای کاربر %1. - + Bad destination system path. - + مسیر مقصد سامانه بد است. - + rootMountPoint is %1 - + نقطهٔ اتّصال ریشه %1 است + + + + Cannot disable root account. + حساب ریشه را نمیتوان غیرفعال کرد. + + + + passwd terminated with error code %1. + passwd با خطای %1 پایان یافت. - Cannot disable root account. - + Cannot set password for user %1. + نمی‌توان برای کاربر %1 گذرواژه تنظیم کرد. - passwd terminated with error code %1. - - - - - Cannot set password for user %1. - - - - usermod terminated with error code %1. - + usermod با خطای %1 پایان یافت. SetTimezoneJob - + Set timezone to %1/%2 - + تنظیم منطقهٔ زمانی به %1/%2 + + + + Cannot access selected timezone path. + نمی‌توان به مسیر منطقهٔ زمانی گزیده دسترسی یافت. + + + + Bad path: %1 + مسیر بد: %1 - Cannot access selected timezone path. - + Cannot set timezone. + نمی‌توان منطقهٔ زمانی را تنظیم کرد. - Bad path: %1 - - - - - Cannot set timezone. - - - - Link creation failed, target: %1; link name: %2 - + ساختن پیوند با خطا مواجه شد، هدف: %1؛ پیوند: %2 - + Cannot set timezone, - + نمی‌توان منطقه زمانی را تنظیم کرد، - + Cannot open /etc/timezone for writing - + عدم توانایی در باز کردن /etc/timezone برای نوشتن + + + + SetupGroupsJob + + + Preparing groups. + درحال آماده سازی گروه ها. + + + + + Could not create groups in target system + عدم توانایی در ساخت گروه ها در سامانه هدف + + + + These groups are missing in the target system: %1 + این گروه ها در سامانه هدف یافت نشدند: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + کاربران با دسترسی <pre>sudo</pre> را تنظیم کنید. + + + + Cannot chmod sudoers file. + نمی‌توان مالک پروندهٔ sudoers را تغییر داد. + + + + Cannot create sudoers file for writing. + نمی‌توان پروندهٔ sudoers را برای نوشتن ایجاد کرد. ShellProcessJob - + Shell Processes Job - + پردازه های شل SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - + %L1 از %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &قبول - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &بله - - - SummaryViewStep - - Summary - + + &No + &خیر + + + + &Cancel + &لغو + + + + &Close + &بسته TrackingInstallJob - + Installation feedback - + بازخورد نصب - + Sending installation feedback. - + ارسال بازخورد نصب - + Internal error in install-tracking. - + خطای داخلی در پیگیری نصب رخ داد. - + HTTP request timed out. - + زمان درخواست HTTP به پایان رسید. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + بازخورد کاربری KDE + + + + Configuring KDE user feedback. + در حال تنظیم بازخورد کاربری KDE. + + + + + Error in KDE user feedback configuration. + خطایی در تنظیمات بازخورد کاربری KDE رخ داد. + + + + Could not configure KDE user feedback correctly, script error %1. + عدم توانایی در تنظیم درست بازخورد کاربری KDE، برنامه با خطای %1 مواجه شد. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + عدم توانایی در تنظیم درست بازخورد کاربری KDE، کلامارس با خطای %1 مواجه شد. + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + بازخورد ماشین - + Configuring machine feedback. - + در حال تنظیم بازخورد ماشین. - - + + Error in machine feedback configuration. - + خطایی در تنظیمات بازخورد ماشین رخ داد. - + Could not configure machine feedback correctly, script error %1. - + عدم توانایی در تنظیم درست بازخورد ماشین، برنامه با خطای %1 مواجه شد. - + Could not configure machine feedback correctly, Calamares error %1. - + عدم توانایی در تنظیم درست بازخورد ماشین، کلامارس با خطای %1 مواجه شد. TrackingPage - + Form - + فرم - + Placeholder - + محل نگهدارنده - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p> این گزینه را برای <span style=" font-weight:600;">نفرستادن هیچگونه اطلاعاتی</span> درباره نصب خودتان انتخاب کنید.</p></body></html> - + <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> - + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">برای دریافت اطلاعات بیشتر درمورد بازخورد کاربران اینجا کلیک کنید</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - + + 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. + ردیابی به٪ 1 کمک می کند تا بفهمد هر چند وقت یک بار نصب می شود ، روی چه سخت افزاری نصب شده و از کدام برنامه ها استفاده می شود. برای دیدن موارد ارسالی ، لطفاً روی نماد راهنما در کنار هر منطقه کلیک کنید. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - + + 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. + با انتخاب این گزینه، شما فقط یکبار داده هایی درباره نصب و سخت افزار خود ارسال می کنید. این داده ها فقط <b>یکبار</b> بعد از به پایان رسیدن نصب فرستاده می شوند. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + با انتخاب این گزینه، شما بطور دوره ای داده هایی درباره نصب <b>ماشین</b>، سخت افزار و برنامه ها را به %1 می فرستید. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + با انتخاب این گزینه، شما بطور منظم داده هایی درباره نصب <b>کاربر</b>، سخت افزار، برنامه ها و الگوی مصرفی برنامه ها را به %1 می فرستید. TrackingViewStep - + Feedback + بازخورد + + + + UmountJob + + + Unmount file systems. + پیاده کردن سامانه‌های پرونده. + + + + No target system available. + + + + + No rootMountPoint is set. UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>اگر بیش از یک نفر از این کامپیوتر استفاده می کنند، میتوانید حساب های دیگری بعد نصب ایجاد کنید.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + <small>اگر بیش از یک نفر از این کامپیوتر استفاده می کنند، میتوانید حساب های دیگری بعد نصب ایجاد کنید.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! - + + Users + کاربران UsersViewStep - + Users - + کاربران VariantModel - + Key - + Column header for key/value + کلید - + Value - + Column header for key/value + مقدار VolumeGroupBaseDialog - + Create Volume Group - + ایجاد گروه حجمی - + List of Physical Volumes - + فهرست حجم‌های فیزیکی - + Volume Group Name: - + نام گروه حجمی: - + Volume Group Type: - + گونهٔ گروه حجمی: - + Physical Extent Size: - + اندازه فیزیکی: - + MiB - + می‌ب - + Total Size: - + اندازهٔ کل: - + Used Size: - + اندازهٔ استفاده‌شده: - + Total Sectors: - + کل شیارها: - + Quantity of LVs: - + کمیت حجم‌های منطقی: WelcomePage - + Form - + فرم - - + + Select application and system language - + برنامه و زبان سیستم را انتخاب کنید - Open donations website - + &About + &درباره - - &Donate - + + Open donations website + گشودن پایگاه وب اعانه‌ها + &Donate + ا&عانه + + + Open help and support website - + گشودن پایگاه وب راهنمایی و پشتیبانی + &Support + &پشتیبانی + + + Open issues and bug-tracking website - + گشودن پایگاه وب ردیاب مشکل - Open release notes website - - - - - &Release notes - - - - &Known issues - + &مشکلات شناخته‌شده - - &Support - + + Open release notes website + گشودن پاگاه وب یادداشت‌های انتشار - - &About - + + &Release notes + &یادداشت‌های انتشار - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1> - + <h1>Welcome to %1 setup.</h1> - + <h1>به برپاسازی %1 خوش آمدید.</h1> - - About %1 setup - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>به نصب‌کنندهٔ کالامارس برای %1 خوش آمدید.</h1> - - About %1 installer - + + <h1>Welcome to the %1 installer.</h1> + <h1>به نصب‌کنندهٔ %1 خوش آمدید.</h1> - - <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. - - - - + %1 support - + پشتیبانی %1 + + + + About %1 setup + دربارهٔ برپاسازی %1 + + + + About %1 installer + دربارهٔ نصب‌کنندهٔ %1 + + + + <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. + <h1>%1</h1><br/><strong>%2<br/> برای %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/> سپاس از <a href='https://calamares.io/team/'>گروه کلامارس</a> و <a href='https://www.transifex.com/calamares/calamares/'>گروه ترجمه کلامارس</a>.<br/><br/> توسعه <a href='https://calamares.io/'>کلامارس</a> توسط <br/> <a href="http://www.blue-systems.com/"><a href='http://www.blue-systems.com/'>سیستم های آبی</a> - نرم افزار آزادی پشتیبانی شده است. WelcomeQmlViewStep - + Welcome - + خوش آمدید WelcomeViewStep - + Welcome + خوش آمدید + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + خطای پیکربندی + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. + <h1>%1</h1><br/> + <strong>%2<br/> + برای %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/> + سپاس از <a href='https://calamares.io/team/'>گروه کلامارس</a> + و <a href='https://www.transifex.com/calamares/calamares/'>گروه ترجمه کلامارس</a>.<br/><br/> + توسعه <a href='https://calamares.io/'>کلامارس</a> توسط <br/> + <a href='http://www.blue-systems.com/'>سیستم های آبی</a> - + نرم افزار آزادی پشتیبانی شده است. + + + + Back + بازگشت + + + + calamares-sidebar + + + Show debug information + نمایش اطّلاعات اشکال‌زدایی + + + + finishedq + + + Installation Completed + نصب کامل شد + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 روی رایانه شما نصب شد.<br/> +میتوانید به سامانه جدیدتان وارد شوید، یا به استفاده محیط زنده ادامه دهید. + + + + Close Installer + بستن نصب کننده + + + + Restart System + راه اندازی مجدد سامانه + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>یک گزارش کامل از نصب در فایل installation.log درون مسیر خانه کاربر زنده موجود است.<br/> +این گزارش به مسیر /var/log/installation.log سامانه هدف نیز رونوشت شده است.</p> + + + + finishedq@mobile + + + Installation Completed + نصب کامل شد + + + + %1 has been installed on your computer.<br/> + You may now restart your device. - - Back + + Close + + + Restart + + + + + i18n + + + <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>. + <h1>زبان ها</h1></br> + تنظیمات محلی سامانه روی زبان و مجموعه کارکتر برخی از عناصر رابط کاربری خط فرمان تاثیر می گذارد. تنظیمات فعلی <strong>%1</strong> است. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>زبان های محلی</h1> </br> + تنظیمات زبان محلی سامانه قالب اعداد و تاریخ را تغییر می دهد. تنظیمات فعلی <strong>%1</strong> است. + + + + Back + بازگشت + keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + برای فعال کردن پیشنمایش صفحه کلید، یک چیدمان انتخاب کنید. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + مدل صفحه‌کلید: - - Refresh - - - - - + Layouts - + چینش‌ها - - - Keyboard Layout - + + Type here to test your keyboard + برای آزمودن صفحه‌کلیدتان، این‌جا بنویسید - - Models - - - - + Variants - + دگرگونه‌ها + + + localeq - - Test your keyboard - + + Change + تغییر notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - + <h3>%1</h3> + <p>این ها یک سری یادداشت انتشار نمونه هستند.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice یک مجموعه قدرتمند و آزاد از برنامه های اداری است، که توسط میلیون ها آدم در سراسر دنیا استفاده میشود. این مجموعه شامل برنامه های بسیاری هست که این مجموعه را یک مجموعه برنامه همه کاره آزاد و متن باز در بازار میکند.<br/> +گزینه پیشفرض + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + اگر نمیخواهید برنامه های اداری را نصب کنید، فقط گزینه بدون برنامه های اداری را انتخاب کنید. شما همیشه بعدا میتوانید یکی (یا چند تا) را اگر نیاز پیدا کردید، نصب کنید. + + + + No Office Suite + بدون برنامه های اداری + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + یک نصب حداقلی برای میزکار ایجاد کنید، تمام برنامه های اضافی را حذف کنید و بعدا تصمیم بگیرید که چه چیزی را میخواهید به رایانه خود اضافه کنید. مثال هایی از برنامه هایی که در این نصب جای ندارند عبارت است از نبود برنامه های اداری، هیچ پخش کننده رسانه ای، هیچ بازکننده تصویری یا پشتیبانی چاپ. این تنها یک میزکار، مدیریت فایل، مدیریت بسته، ویرایشگر متن و مرورگر ساده وب خواهد بود. + + + + Minimal Install + نصب حداقلی + + + + Please select an option for your install, or use the default: LibreOffice included. + لطفا گزینه ای را برای نصب انتخاب کنید، یا از پیشفرض استفاده کنید: LibreOffice + + + + release_notes + + + <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> + ٪ 1 +این یک نمونه پرونده QML است که گزینه هایی را در RichText با محتوای قابل تکان دادن نشان می دهد. QML با RichText می تواند از برچسب های HTML استفاده کند ، محتوای قابل تکان خوردن برای صفحه های لمسی مفید است. این متن پررنگ است این متن مورب است این متن زیرخط دار است این متن در تراز وسط قرار خواهد گرفت. این مثال از کد نمونه است: ls -l / home لیست ها: سیستم های CPU اینتل سیستم های CPU AMD نوار پیمایش عمودی قابل تنظیم است ، عرض فعلی روی 10 تنظیم شده است. + + + + Back + بازگشت + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + نام کاربری و اطلاعات مهم خود را برای ورود و انجام وظایف مدیریت برگزینید + + + + What is your name? + نامتان چیست؟ + + + + Your Full Name + نام کاملتان + + + + What name do you want to use to log in? + برای ورود می خواهید از چه نامی استفاده کنید؟ + + + + Login Name + نام ورود + + + + If more than one person will use this computer, you can create multiple accounts after installation. + اگر بیش از یک نفر از این کامپیوتر استفاده می کنند، میتوانید حساب های دیگری بعد نصب ایجاد کنید. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + فقط حروف کوچک ، اعداد ، زیر خط و خط خط مجاز است. + + + + root is not allowed as username. + عبارت root بعنوان نام کاربر مجاز نیست. + + + + What is the name of this computer? + نام این رایانه چیست؟ + + + + Computer Name + نام رایانه + + + + This name will be used if you make the computer visible to others on a network. + اگر رایانه‌تان را روی یک شبکه برای دیگران نمایان کنید، از این نام استفاده می‌شود. + + + + localhost is not allowed as hostname. + عبارت localhost بعنوان نام میزبان مجاز نیست. + + + + Choose a password to keep your account safe. + برای امن نگه داشتن حسابتان، گذرواژه‌ای برگزینید. + + + + Password + گذرواژه + + + + Repeat Password + تکرار TextLabel + + + + 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. + رمز ورود یکسان را دو بار وارد کنید ، تا بتوان آن را از نظر اشتباه تایپ بررسی کرد. یک رمز ورود خوب شامل ترکیبی از حروف ، اعداد و علائم نگارشی است ، باید حداقل هشت حرف داشته باشد و باید در فواصل منظم تغییر یابد. + + + + Validate passwords quality + اعتبارسنجی کیفیت گذرواژه + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + وقتی این کادر علامت گذاری شد ، بررسی قدرت رمز عبور انجام می شود و دیگر نمی توانید از رمز عبور ضعیف استفاده کنید. + + + + Log in automatically without asking for the password + ورود خودکار بدون پرسیدن گذرواژه + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + حداقل دو حرف و فقط حروف، اعداد، زیرخط و خط تیره مجاز هستند. + + + + Reuse user password as root password + استفاده گذرواژه کاربر بعنوان گذرواژه روت + + + + Use the same password for the administrator account. + استفاده از گذرواژهٔ یکسان برای حساب مدیر. + + + + Choose a root password to keep your account safe. + برای امن نگه داشتن حسابتان، گذرواژه روت ای برگزینید. + + + + Root Password + گذرواژه روت + + + + Repeat Root Password + تکرار گذرواژه روت + + + + Enter the same password twice, so that it can be checked for typing errors. + همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود. welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>به نصب کننده %1 <quote>%2</quote>خوش آمدید</h3> +<p>این برنامه از شما سوالایی میپرسد و %1 را روی رایانه شما نصب می کند.</p> - + About - + درباره - + Support - + پشتیبانی - + Known issues - + اشکالات شناخته‌شده - + Release notes - + یادداشت‌های انتشار - + Donate - + اعانه diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts index 6d3c4d3c3..49ba688fd 100644 --- a/lang/calamares_fi_FI.ts +++ b/lang/calamares_fi_FI.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Hallitse 'auto-mount'-asetuksia + + BootInfoWidget - + 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. - Järjestelmän <strong>käynnistysympäristö.</strong> <br><br>Vanhemmat x86-järjestelmät tukevat vain <strong>BIOS</strong>-järjestelmää.<br>Nykyaikaiset järjestelmät käyttävät yleensä <strong>EFI</strong>,mutta voivat myös näkyä BIOS tilassa, jos ne käynnistetään yhteensopivuustilassa. + Järjestelmän <strong>käynnistysympäristö.</strong> <br><br>Vanhemmat x86-järjestelmät tukevat vain <strong>BIOS</strong>-järjestelmää.<br>Nykyaikaiset järjestelmät käyttävät yleensä <strong>EFI</strong>ä, mutta voivat myös näkyä BIOS-tilassa, jos ne käynnistetään yhteensopivuustilassa. - + 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. - Tämä järjestelmä käynnistettiin <strong>EFI</strong> -käynnistysympäristössä.<br><br>Jos haluat määrittää EFI-ympäristön, tämän asennuksen on asennettava käynnistyksen latausohjelma, kuten <strong>GRUB</strong> tai <strong>systemd-boot</strong> ohjaus <strong>EFI -järjestelmän osioon</strong>. Tämä on automaattinen oletus, ellet valitse manuaalista osiota, jolloin sinun on valittava asetukset itse. + Tämä järjestelmä käynnistettiin <strong>EFI</strong>-käynnistysympäristössä.<br><br>Jos haluat määrittää EFI-ympäristön, tämän asennuksen on asennettava käynnistylatain, kuten <strong>GRUB</strong> tai <strong>systemd-boot</strong>, <strong>EFI-järjestelmäosioon</strong>. Tämä on automaattinen oletus, ellet valitse manuaalista osiointia, jolloin sinun on valittava asetukset itse. - + 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. - Järjestelmä käynnistettiin <strong>BIOS</strong> -käynnistysympäristössä.<br><br>Jos haluat määrittää käynnistämisen BIOS-ympäristöstä, tämän asennusohjelman on asennettava käynnistyksen lataaja, kuten<strong>GRUB</strong>, joko osion alkuun tai <strong>Master Boot Record</strong> ,joka on osiotaulukon alussa (suositus). Tämä on automaattista, ellet valitset manuaalista osiota, jolloin sinun on valittava asetukset itse. + Tämä järjestelmä käynnistettiin <strong>BIOS</strong>-käynnistysympäristössä.<br><br>Jos haluat määrittää käynnistämisen BIOS-ympäristöstä, tämän asennusohjelman on asennettava käynnistyslatain, kuten<strong>GRUB</strong>, joko osion alkuun tai <strong>pääkäynnistyslohkoon (MBR)</strong> ,joka on osiotaulukon alussa (suositus). Tämä on automaattista, ellet valitset manuaalista osiointia, jolloin sinun on valittava asetukset itse. BootLoaderModel - + Master Boot Record of %1 - %1:n MBR + %1:n pääkäynnistyslohko - + Boot Partition Käynnistysosio - + System Partition Järjestelmäosio - + Do not install a boot loader Älä asenna käynnistyslatainta - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Tyhjä sivu @@ -58,71 +66,91 @@ Calamares::DebugWindow - + Form Lomake - + GlobalStorage - Globaali-tallennus + Tallennustila - + JobQueue Työjono - + Modules Moduulit - + Type: Tyyppi: - - + + none - tyhjä + ei käytössä - + Interface: Käyttöliittymä: - - Tools - Työkalut + + Crashes Calamares, so that Dr. Konqui can look at it. + Kaada Calamares, jotta tohtori Konqui voi katsoa sitä. - + + Reloads the stylesheet from the branding directory. + Lataa tyylisivu tuotemerkin kansiosta uudelleen. + + + + Uploads the session log to the configured pastebin. + Lataa istunnon loki määritettyyn pastebiniin. + + + + Send Session Log + Lähetä istunnon loki + + + Reload Stylesheet Virkistä tyylisivu - - Widget Tree - Widget puu + + Displays the tree of widget names in the log (for stylesheet debugging). + Näyttää sovelman nimen hakemistopuun lokissa (tyylisivun virheenkorjausta varten). - + + Widget Tree + Widgettipuu + + + Debug information - Virheenkorjaustiedot + Vianetsinnän tiedot Calamares::ExecutionViewStep - + Set up Määritä - + Install Asenna @@ -130,20 +158,20 @@ Calamares::FailJob - + Job failed (%1) Työ epäonnistui (%1) - + Programmed job failure was explicitly requested. - Ohjelmoitua työn epäonnistumista pyydettiin erikseen. + Ohjelmoitu työn epäonnistuminen pyydettiin erikseen. Calamares::JobThread - + Done Valmis @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - Esimerkki työ (%1) + Esimerkkityö (%1) Calamares::ProcessJob - + Run command '%1' in target system. Suorita komento '%1' kohdejärjestelmässä. - + Run command '%1'. Suorita komento '%1'. - + Running command %1 %2 Suoritetaan komentoa %1 %2 @@ -177,322 +205,321 @@ Calamares::PythonJob - + Running %1 operation. Suoritetaan %1 toimenpidettä. - + Bad working directory path - Epäkelpo työskentelyhakemiston polku + Virheellinen työkansion polku - + Working directory %1 for python job %2 is not readable. - Työkansio %1 pythonin työlle %2 ei ole luettavissa. + Työkansio %1 python-työlle %2 ei ole luettavissa. - + Bad main script file - Huono pää-skripti tiedosto + Virheellinen komentosarjan tiedosto - + Main script file %1 for python job %2 is not readable. - Pääskriptitiedosto %1 pythonin työlle %2 ei ole luettavissa. + Komentosarjan tiedosto %1 python-työlle %2 ei ole luettavissa. - + Boost.Python error in job "%1". - Boost.Python virhe työlle "%1". + Boost.Python-virhe työlle "%1". Calamares::QmlViewStep - + Loading ... - Ladataan ... + Ladataan... - + QML Step <i>%1</i>. QML-vaihe <i>%1</i>. - + Loading failed. Lataus epäonnistui. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Moduulin vaatimusten tarkistaminen <i>%1</i> on valmis. + - + Waiting for %n module(s). - Odotetaan %n moduuli(t). - Odotetaan %n moduuli(t). + Odotetaan %n moduulia. + Odotetaan %n moduulia. - + (%n second(s)) - (%n sekunttia(s)) - (%n sekunttia(s)) + (%n sekunti) + (%n sekuntia) - + System-requirements checking is complete. - Järjestelmävaatimusten tarkistus on valmis. + Järjestelmän vaatimusten tarkistus on valmis. Calamares::ViewManager - - &Back - &Takaisin - - - - &Next - &Seuraava - - - - &Cancel - &Peruuta - - - - Cancel setup without changing the system. - Peruuta asennus muuttamatta järjestelmää. - - - - Cancel installation without changing the system. - Peruuta asennus tekemättä muutoksia järjestelmään. - - - + Setup Failed Asennus epäonnistui - - Would you like to paste the install log to the web? - Haluatko liittää asennuslokin verkkoon? + + Installation Failed + Asentaminen epäonnistui + + + + Error + Virhe + + + + &Yes + &Kyllä + + + + &No + &Ei + + + + &Close + &Sulje + + + + Install Log Paste URL + Asenna lokiliitoksen URL-osoite + + + + The upload was unsuccessful. No web-paste was done. + Lähettäminen epäonnistui. Verkko-liittämistä ei tehty. + + + + Install log posted to + +%1 + +Link copied to clipboard + Asennuksen loki on lähetetty + +%1 + +Linkki kopioitu leikepöydälle + + + + Calamares Initialization Failed + Calamaresin alustaminen epäonnistui - Install Log Paste URL - Asenna lokitiedon URL-osoite - - - - The upload was unsuccessful. No web-paste was done. - Lähettäminen epäonnistui. Web-liittämistä ei tehty. - - - - Calamares Initialization Failed - Calamares-alustustaminen epäonnistui - - - %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. - %1 ei voida asentaa. Calamares ei voinut ladata kaikkia määritettyjä moduuleja. Ongelma on siinä, miten jakelu käyttää Calamaresia. + %1 ei voi asentaa. Calamares ei voinut ladata kaikkia määritettyjä moduuleja. Ongelma on siinä, miten jakelu käyttää Calamaresia. - + <br/>The following modules could not be loaded: <br/>Seuraavia moduuleja ei voitu ladata: - + + Continue with setup? + Jatketaanko asennusta? + + + Continue with installation? Jatka asennusta? - + 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> - %1 asennusohjelma on aikeissa tehdä muutoksia levylle, jotta voit määrittää kohteen %2.<br/><strong>Et voi kumota näitä muutoksia.</strong> + %1-asennusohjelma on aikeissa tehdä muutoksia levylle, jotta voit määrittää kohteen %2.<br/><strong>Et voi kumota näitä muutoksia.</strong> - + + 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> + Asennusohjelman %1 on tehtävä muutoksia asemalle, jotta %2 voidaan asentaa.<br/><strong>Et voi kumota näitä muutoksia.</strong> + + + &Set up now &Määritä nyt - + + &Install now + &Asenna nyt + + + + Go &back + Mene &takaisin + + + &Set up &Määritä - + &Install &Asenna - + Setup is complete. Close the setup program. Asennus on valmis. Sulje asennusohjelma. - + + The installation is complete. Close the installer. + Asennus on valmis. Sulje asennusohjelma. + + + + Cancel setup without changing the system. + Peruuta asennus muuttamatta järjestelmää. + + + + Cancel installation without changing the system. + Peruuta asennus tekemättä muutoksia järjestelmään. + + + + &Next + &Seuraava + + + + &Back + &Takaisin + + + + &Done + &Valmis + + + + &Cancel + &Peruuta + + + Cancel setup? Peruuta asennus? - + Cancel installation? Peruuta asennus? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Haluatko todella peruuttaa nykyisen asennuksen? Asennusohjelma lopetetaan ja kaikki muutokset menetetään. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - Oletko varma että haluat peruuttaa käynnissä olevan asennusprosessin? + Haluatko todella peruuttaa käynnissä olevan asennusprosessin? Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. - - - - &Yes - &Kyllä - - - - - &No - &Ei - - - - &Close - &Sulje - - - - Continue with setup? - Jatka asennusta? - - - - 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> - Asennus ohjelman %1 on tehtävä muutoksia levylle, jotta %2 voidaan asentaa.<br/><strong>Et voi kumota näitä muutoksia.</strong> - - - - &Install now - &Asenna nyt - - - - Go &back - Mene &takaisin - - - - &Done - &Valmis - - - - The installation is complete. Close the installer. - Asennus on valmis. Sulje asennusohjelma. - - - - Error - Virhe - - - - Installation Failed - Asennus Epäonnistui - CalamaresPython::Helper - + Unknown exception type Tuntematon poikkeustyyppi - + unparseable Python error - jäsentämätön Python virhe + jäsentämätön Python-virhe - + unparseable Python traceback - jäsentämätön Python jäljitys + jäsentämätön Python-jäljitys - + Unfetchable Python error. - Python virhettä ei voitu hakea. - - - - CalamaresUtils - - - Install log posted to: -%1 - Asennuksen loki lähetetty: -%1 + Python-virhettä ei voitu hakea. CalamaresWindow - - &Back - &Takaisin - - - - &Next - &Seuraava - - - - &Cancel - &Peruuta - - - + %1 Setup Program - %1 Asennusohjelma + %1-asennusohjelma - + %1 Installer - %1 Asennusohjelma + %1-asentaja + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + Valitse tiedostojärjestelmän nimi %1. - - Show debug information - Näytä virheenkorjaustiedot + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Valitse tiedostojärjestelmän nimi <strong>%1</strong> osioon <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Asennusohjelman epäonnistui päivittää osio levyllä '%1'. CheckerContainer - + Gathering system information... Kerätään järjestelmän tietoja... @@ -500,157 +527,197 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. ChoicePage - + Form Lomake - - After: - Jälkeen: - - - - Boot loader location: - Käynnistyksen lataajan sijainti: - - - + Select storage de&vice: - Valitse tallennus&laite: + Valitse kiintole&vy: - - - - + + + + Current: Nykyinen: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Manuaalinen osiointi</strong><br/>Voit luoda osioita tai muuttaa itse sen kokoa. Gpt-osiotaulu ja <strong>fat32 512Mb /boot osio on välttämätön UEFI asennuksessa</strong>, käytä aiemmin luotua tai luo sellainen. + + After: + Jälkeen: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manuaalinen osiointi </strong><br/>Voit luoda tai muuttaa osioita itse. + + + Reuse %1 as home partition for %2. Käytä %1 uudelleen kotiosiona kohteelle %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Valitse supistettava osio ja säädä alarivillä kokoa vetämällä</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 supistetaan %2Mib:iin ja uusi %3MiB-osio luodaan kohteelle %4. - + + Boot loader location: + Käynnistyslataajan sijainti: + + + <strong>Select a partition to install on</strong> <strong>Valitse asennettava osio</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - EFI-osiota ei löydy mistään tässä järjestelmässä. Siirry takaisin ja käytä manuaalista osiointia, kun haluat määrittää %1 + EFI-järjestelmäosiota ei löydy tästä järjestelmästä. Siirry takaisin ja käytä manuaalista osiointia, kun haluat määrittää %1 - + The EFI system partition at %1 will be used for starting %2. - EFI-järjestelmän osiota %1 käytetään käynnistettäessä %2. + EFI-järjestelmäosiota %1 käytetään %2 käynnistämiseen. - + EFI system partition: - EFI järjestelmäosio + EFI-järjestelmäosio: - + 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. - Tällä tallennuslaitteella ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin tallennuslaitteeseen tehdään muutoksia. + Tällä massamuistilla ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistille tehdään muutoksia. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - <strong>Tyhjennä levy</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitussa tallennuslaitteessa. + <strong>Tyhjennä asema</strong><br/>Tämä <font color="red">poistaa</font> kaikki tiedot valitusta massamuistista. - - 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. - Tässä tallennuslaitteessa on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin tallennuslaitteeseen tehdään muutoksia. - - - - No Swap - Ei välimuistia - - - - Reuse Swap - Kierrätä välimuistia - - - - Swap (no Hibernate) - Välimuisti (ei lepotilaa) - - - - Swap (with Hibernate) - Välimuisti (lepotilan kanssa) - - - - Swap to file - Välimuisti tiedostona - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - <strong>Asenna nykyisen rinnalle</strong><br/>Asennus ohjelma supistaa osion tehdäkseen tilaa kohteelle %1. + <strong>Asenna nykyisen rinnalle</strong><br/>Asennusohjelma supistaa osiota tehdäkseen tilaa kohteelle %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Osion korvaaminen</strong><br/>korvaa osion %1. - - 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. - Tämä tallennuslaite sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin tallennuslaitteeseen tehdään muutoksia. + + 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. + Tässä massamuistissa on %1 dataa. Mitä haluat tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistiin tehdään muutoksia. - + + 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. + Tämä massamuisti sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia. + + + 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. - Tämä tallennuslaite sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin tallennuslaitteeseen tehdään muutoksia. + Tämä massamuisti sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?<br/>Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia. + + + + 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/> + Tällä massamuistilla on jo käyttöjärjestelmä, mutta osiotaulukko <strong>%1</strong> on erilainen kuin tarvittava <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Tähän massamuistiin on <strong>liitetty</strong> yksi osioista. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Tämä massamuisti on osa <strong>passiivista RAID</strong> kokoonpanoa. + + + + No Swap + Swap ei + + + + Reuse Swap + Swap käytä uudellen + + + + Swap (no Hibernate) + Swap (ei lepotilaa) + + + + Swap (with Hibernate) + Swap (lepotilan kanssa) + + + + Swap to file + Swap tiedostona ClearMountsJob - + + Successfully unmounted %1. + Poistettu onnistuneesti %1. + + + + Successfully disabled swap %1. + Poistettu käytöstä swap %1. + + + + Successfully cleared swap %1. + Tyhjennetty swap %1. + + + + Successfully closed mapper device %1. + Suljettu laitekartoitus %1. + + + + Successfully disabled volume group %1. + Poistettu käytöstä taltioryhmä %1. + + + Clear mounts for partitioning operations on %1 - Poista osiointitoimenpiteitä varten tehdyt liitokset kohteesta %1 + Tyhjennä osiointia varten tehdyt liitokset kohteesta %1 - + Clearing mounts for partitioning operations on %1. - Tyhjennät kiinnitys osiointitoiminnoille %1. + Tyhjennetään liitokset %1 osiointia varten. - + Cleared all mounts for %1 Kaikki liitokset poistettu kohteesta %1 @@ -658,22 +725,17 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. ClearTempMountsJob - + Clear all temporary mounts. Poista kaikki väliaikaiset liitokset. - + Clearing all temporary mounts. Kaikki tilapäiset kiinnitykset tyhjennetään. - - Cannot get list of temporary mounts. - Väliaikaisten kiinnitysten luetteloa ei voi hakea. - - - + Cleared all temporary mounts. Poistettu kaikki väliaikaiset liitokset. @@ -681,18 +743,18 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. CommandList - - + + Could not run command. Komentoa ei voi suorittaa. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komento toimii isäntäympäristössä ja sen täytyy tietää juuren polku, mutta root-liityntä kohtaa ei ole määritetty. - + The command needs to know the user's name, but no username is defined. Komennon on tiedettävä käyttäjän nimi, mutta käyttäjän tunnusta ei ole määritetty. @@ -700,101 +762,236 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. Config - + + Set keyboard model to %1.<br/> + Aseta näppäimiston malli %1.<br/> + + + + Set keyboard layout to %1/%2. + Aseta näppäimiston asetteluksi %1/%2. + + + + Set timezone to %1/%2. + Aseta aikavyöhykkeeksi %1/%2. + + + + The system language will be set to %1. + Järjestelmän kielen asetuksena on %1. + + + + The numbers and dates locale will be set to %1. + Numerot ja päivämäärät, paikallinen asetus on %1. + + + + Network Installation. (Disabled: Incorrect configuration) + Verkko asennus. (Ei käytössä: virheellinen määritys) + + + + Network Installation. (Disabled: Received invalid groups data) + Verkkoasennus. (Ei käytössä: Vastaanotettiin virheellisiä ryhmän tietoja) + + + + Network Installation. (Disabled: Internal error) + Verkon asennus (Poistettu käytöstä: sisäinen virhe) + + + + Network Installation. (Disabled: No package list) + Verkon asennus (Poistettu käytöstä: ei pakettien listaa) + + + + Package selection + Paketin valinta + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Verkkoasennus. (Ei käytössä: Pakettiluetteloita ei voi hakea, tarkista verkkoyhteys) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Tämä tietokone ei täytä vähimmäisvaatimuksia, %1.<br/>Asennusta ei voi jatkaa. <a href="#details">Yksityiskohdat...</a> - + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Tämä tietokone ei täytä asennuksen vähimmäisvaatimuksia, %1.<br/>Asennus ei voi jatkua. <a href="#details">Yksityiskohdat...</a> - + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/>Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. - + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1. Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. - + This program will ask you some questions and set up %2 on your computer. - Tämä ohjelma kysyy joitakin kysymyksiä %2 ja asentaa tietokoneeseen. + Tämä ohjelma kysyy joitakin kysymyksiä liittyen järjestelmään %2 ja asentaa sen tietokoneeseen. - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1> + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Tervetuloa Calamares-asennusohjelmaan %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Tervetuloa %1 asennukseen</h1> - <h1>Welcome to %1 setup.</h1> - <h1>Tervetuloa %1 asennukseen.</h1> + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Tervetuloa Calamares-asentajaan %1</h1> - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1> + + <h1>Welcome to the %1 installer</h1> + <h1>Tervetuloa %1-asentajaan</h1> - - <h1>Welcome to the %1 installer.</h1> - <h1>Tervetuloa %1 -asennusohjelmaan.</h1> + + Your username is too long. + Käyttäjänimesi on liian pitkä. - - Set keyboard model to %1.<br/> - Aseta näppäimiston malli %1.<br/> + + '%1' is not allowed as username. + Käyttäjänimessä '%1' ei ole sallittu. - - Set keyboard layout to %1/%2. - Aseta näppäimiston asetelmaksi %1/%2. + + Your username must start with a lowercase letter or underscore. + Sinun käyttäjänimi täytyy alkaa pienellä kirjaimella tai alaviivalla. - - The system language will be set to %1. - Järjestelmän kielen asetuksena on %1. + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. - - The numbers and dates locale will be set to %1. - Numerot ja päivämäärät, paikallinen asetus on %1. + + Your hostname is too short. + Koneen nimi on liian lyhyt. - - Set timezone to %1/%2.<br/> - Aseta aikavyöhyke %1/%2.<br/> + + Your hostname is too long. + Koneen nimi on liian pitkä. - - Network Installation. (Disabled: Incorrect configuration) - Verkko asennus. (Ei käytössä: virheellinen määritys) + + '%1' is not allowed as hostname. + Koneen nimessä '%1' ei ole sallittu. - - Network Installation. (Disabled: Received invalid groups data) - Verkkoasennus. (Ei käytössä: Vastaanotettiin virheellisiä ryhmän tietoja) + + Only letters, numbers, underscore and hyphen are allowed. + Vain kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. - - Network Installation. (Disabled: internal error) - Verkon asennus. (Ei käytössä: sisäinen virhe) + + Your passwords do not match! + Salasanasi eivät täsmää! - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Verkkoasennus. (Ei käytössä: Pakettiluetteloita ei voi hakea, tarkista verkkoyhteys) + + OK! + OK! + + + + Setup Failed + Asennus epäonnistui + + + + Installation Failed + Asentaminen epäonnistui + + + + The setup of %1 did not complete successfully. + Määrityksen %1 asennus ei onnistunut. + + + + The installation of %1 did not complete successfully. + Asennus %1 ei onnistunut. + + + + Setup Complete + Asennus valmis + + + + Installation Complete + Asennus valmis + + + + The setup of %1 is complete. + Asennus %1 on valmis. + + + + The installation of %1 is complete. + Asennus %1 on valmis. + + + + Package Selection + Paketin valinta + + + + Please pick a product from the list. The selected product will be installed. + Ole hyvä ja valitse tuote luettelosta. Valittu tuote asennetaan. + + + + Install option: <strong>%1</strong> + Asennuksen vaihtoehto: <strong>%1</strong> + + + + None + Ei käytössä + + + + Summary + Yhteenveto + + + + This is an overview of what will happen once you start the setup procedure. + Tämä on yleiskuva siitä, mitä tapahtuu, kun asennusohjelma käynnistetään. + + + + This is an overview of what will happen once you start the install procedure. + Tämä on yleiskuva siitä, mitä tapahtuu asennuksen aloittamisen jälkeen. ContextualProcessJob - + Contextual Processes Job Prosessien yhteydessä tehtävät @@ -802,151 +999,187 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. CreatePartitionDialog - + Create a Partition Luo levyosio - - MiB - Mib - - - - Partition &Type: - Osion &Tyyppi: - - - - &Primary - &Ensisijainen - - - - E&xtended - &Laajennettu - - - - Fi&le System: - Tie&dosto järjestelmä: - - - - LVM LV name - LVM LV nimi - - - - Flags: - Liput: - - - - &Mount Point: - &Liitoskohta: - - - + Si&ze: K&oko: - + + MiB + MiB + + + + Partition &Type: + Osion &tyyppi: + + + + Primar&y + Ensisi&jainen + + + + E&xtended + &Laajennettu + + + + Fi&le System: + Tiedostojärjeste&lmä: + + + + LVM LV name + LVM LV -nimi + + + + &Mount Point: + &Liitoskohta: + + + + Flags: + Liput: + + + + Label for the filesystem + Tiedostojärjestelmän nimi + + + + FS Label: + Tiedostojärjestelmän nimike: + + + En&crypt Sa&laa - + Logical Looginen - + Primary Ensisijainen - + GPT GPT - + Mountpoint already in use. Please select another one. Asennuskohde on jo käytössä. Valitse toinen. + + + Mountpoint must start with a <tt>/</tt>. + Liitospisteen tulee alkaa <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Luo uusi %1MiB osio kohteeseen %3 (%2), jossa on %4. + + + + Create new %1MiB partition on %3 (%2). + Luo uusi %1MiB osio kohteeseen %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Luo uusi %2Mib-osio %4 (%3) tiedostojärjestelmällä %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Luo uusi <strong>%1MiB</strong> osio kohteeseen <strong>%3</strong> (%2) jossa on <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Luo uusi <strong>%1MiB</strong> osio kohteeseen <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Luo uusi <strong>%2Mib</strong> osio <strong>%4</strong> (%3) tiedostojärjestelmällä <strong>%1</strong>. - + + Creating new %1 partition on %2. Luodaan uutta %1-osiota kohteessa %2. - + The installer failed to create partition on disk '%1'. - Asennusohjelma epäonnistui osion luonnissa levylle '%1'. + Asennusohjelma epäonnistui osion luonnissa asemalle '%1'. CreatePartitionTableDialog - + Create Partition Table - Luo Osiotaulukko + Luo osiotaulukko - + Creating a new partition table will delete all existing data on the disk. - Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot levyltä. + Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot asemalta. - + What kind of partition table do you want to create? Minkälaisen osiotaulukon haluat luoda? - + Master Boot Record (MBR) - Master Boot Record (MBR) + Pääkäynnistyslohko (MBR) - + GUID Partition Table (GPT) - GUID Partition Table (GPT) + GUID-osiotaulukko (GPT) CreatePartitionTableJob - + Create new %1 partition table on %2. Luo uusi %1 osiotaulukko kohteessa %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Luo uusi <strong>%1</strong> osiotaulukko kohteessa <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Luodaan uutta %1 osiotaulukkoa kohteelle %2. - + The installer failed to create a partition table on %1. Asennusohjelma epäonnistui osiotaulukon luonnissa kohteeseen %1. @@ -954,68 +1187,64 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. CreateUserJob - + Create user %1 Luo käyttäjä %1 - + Create user <strong>%1</strong>. Luo käyttäjä <strong>%1</strong>. - - Creating user %1. + + Preserving home directory + Kotikansion säilyttäminen + + + + + Creating user %1 Luodaan käyttäjä %1. - - Sudoers dir is not writable. - Ei voitu kirjoittaa Sudoers -hakemistoon. + + Configuring user %1 + Määritetään käyttäjää %1 - - Cannot create sudoers file for writing. - Ei voida luoda sudoers -tiedostoa kirjoitettavaksi. - - - - Cannot chmod sudoers file. - Ei voida tehdä käyttöoikeuden muutosta sudoers -tiedostolle. - - - - Cannot open groups file for reading. - Ei voida avata ryhmätiedostoa luettavaksi. + + Setting file permissions + Tiedostojen oikeuksien määrittäminen CreateVolumeGroupDialog - + Create Volume Group - Luo aseman ryhmä + Luo taltioryhmä CreateVolumeGroupJob - + Create new volume group named %1. - Luo uusi aseman ryhmä nimellä %1. + Luo uusi taltioryhmä nimeltä %1. - + Create new volume group named <strong>%1</strong>. Luo uusi aseman ryhmä nimellä <strong>%1</strong>. - + Creating new volume group named %1. Luodaan uusi aseman ryhmä nimellä %1. - + The installer failed to create a volume group named '%1'. Asennusohjelma ei voinut luoda aseman ryhmää nimellä '%1'. @@ -1023,18 +1252,18 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Poista levyryhmän nimi %1 käytöstä. - + Deactivate volume group named <strong>%1</strong>. Poista levyryhmän nimi käytöstä. <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Asennusohjelma ei pystynyt poistamaan levyryhmää nimellä %1. @@ -1042,22 +1271,22 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. DeletePartitionJob - + Delete partition %1. Poista levyosio %1. - + Delete partition <strong>%1</strong>. Poista levyosio <strong>%1</strong>. - + Deleting partition %1. Poistetaan levyosiota %1. - + The installer failed to delete partition %1. Asennusohjelma epäonnistui osion %1 poistossa. @@ -1065,46 +1294,46 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. DeviceInfoWidget - - 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. - Valitun tallennuslaitteen <strong>osion taulukon</strong> tyyppi.<br><br>Ainoa tapa muuttaa osion taulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki tallennuslaitteen tiedot. <br>Tämä asennusohjelma säilyttää nykyisen osion taulukon, ellet nimenomaisesti valitse muuta.<br>Jos olet epävarma, niin nykyaikaisissa järjestelmissä GPT on suositus. - - - + This device has a <strong>%1</strong> partition table. Tässälaitteessa on <strong>%1</strong> osion taulukko. - + 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. Tämä <strong>loop</strong> -laite.<br><br>Se on pseudo-laite, jossa ei ole osio-taulukkoa ja joka tekee tiedostosta lohkotun aseman. Tällainen asennus sisältää yleensä vain yhden tiedostojärjestelmän. - + 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. - Tämä asennusohjelma <strong>ei tunnista osion taulukkoa</strong> valitussa tallennuslaitteessa.<br><br>Laitteessa ei ole osio-taulukkoa, tai taulukko on vioittunut tai tuntematon.<br>Tämä asennusohjelma voi luoda uuden osiontaulukon sinulle, joko automaattisesti tai manuaalisesti. + Asennusohjelma <strong>ei tunnista osiotaulukkoa</strong> valitussa massamuistissa.<br><br>Laitteessa ei ole osiotaulukkoa, taulukko on vioittunut tai tuntematon.<br>Asennusohjelma voi tehdä uuden osiotaulukon, joko automaattisesti tai manuaalisesti. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Tämä on suositeltava osion taulun tyyppi nykyaikaisille järjestelmille, jotka käyttävät <strong>EFI</strong> -käynnistysympäristöä. - + <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. <br><br>Tämä osiotaulukon tyyppi on suositeltava vain vanhemmissa järjestelmissä, jotka käyttävät <strong>BIOS</strong> -käynnistysympäristöä. GPT:tä suositellaan useimmissa muissa tapauksissa.<br><br><strong>Varoitus:</strong>MBR-taulukko on vanhentunut MS-DOS-standardi.<br>Vain 4 <em>ensisijaisia</em> Vain ensisijaisia osioita voidaan luoda, ja 4, niistä yksi voi olla <em>laajennettu</em> osio, joka voi puolestaan sisältää monia osioita <em>loogisia</em> osioita. + + + 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. + Valitun massamuistin <strong>osiotaulukon</strong> tyyppi.<br><br>Ainoa tapa muuttaa osiotaulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki massamuistin sisältämät tiedot. <br>Asennusohjelma säilyttää nykyisen osiotaulukon, ellet nimenomaisesti valitse muuta.<br>Jos olet epävarma niin nykyaikaisissa järjestelmissä GPT on suositus. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1113,17 +1342,17 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Kirjoita LUKS-kokoonpano Dracutille %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Ohita LUKS-määrityksen kirjoittaminen Dracutille: "/" -osio ei ole salattu - + Failed to open %1 Ei voi avata %1 @@ -1131,7 +1360,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. DummyCppJob - + Dummy C++ Job Dummy C++ -työ @@ -1139,123 +1368,167 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. EditExistingPartitionDialog - + Edit Existing Partition Muokkaa olemassa olevaa osiota - - Content: - Sisältö: + + Con&tent: + Sisäl&tö: - + &Keep &Säilytä - + Format Alusta - + Warning: Formatting the partition will erase all existing data. Varoitus: Osion alustus tulee poistamaan kaikki olemassa olevat tiedostot. - + &Mount Point: &Liitoskohta: - + Si&ze: K&oko: - + MiB Mib - + Fi&le System: - Tie&dosto järjestelmä: + Tie&dostojärjestelmä: - + Flags: Liput: - - Mountpoint already in use. Please select another one. - Asennuskohde on jo käytössä. Valitse toinen. + + Label for the filesystem + Tiedostojärjestelmän nimi + + + + FS Label: + Tiedostojärjestelmän nimike: EncryptWidget - + Form Lomake - + En&crypt system Sa&laa järjestelmä - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Järjestelmäsi ei näytä tukevan salausta tarpeeksi hyvin koko järjestelmän salaamiseksi. Voit ottaa salauksen käyttöön, mutta suorituskyky voi kärsiä. + + + Passphrase Salasana - + Confirm passphrase Vahvista salasana - + + Please enter the same passphrase in both boxes. - Anna sama salasana molemmissa ruuduissa. + Anna sama salasana molempiin kenttiin. + + + + ErrorDialog + + + Details: + Tiedot: + + + + Would you like to paste the install log to the web? + Haluatko liittää asennuslokin verkkoon? FillGlobalStorageJob - + Set partition information Aseta osion tiedot - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Asenna %1 <strong>uusi</strong> %2 järjestelmäosio ominaisuuksilla <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Asenna %1 <strong>uusi</strong> %2 järjestelmä osio. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Määritä <strong>uusi</strong> %2 -osio liitepisteellä<strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Määritä <strong>uusi</strong> %2 osio liitospisteellä <strong>%1</strong> ja ominaisuuksilla <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Määritä <strong>uusi</strong> %2 osio liitospisteellä <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Asenna %2 - %3 järjestelmäosio <strong>%1</strong> ominaisuuksilla <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Määritä %3 osio <strong>%1</strong> liitospisteellä <strong>%2</strong> ja ominaisuuksilla <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Määritä %3 osio <strong>%1</strong> liitospisteellä <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Asenna %2 - %3 -järjestelmän osioon <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Määritä %3 osio <strong>%1</strong> jossa on liitäntäpiste <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Asenna käynnistyslatain <strong>%1</strong>. - + Setting up mount points. Liitosten määrittäminen. @@ -1263,166 +1536,154 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. FinishedPage - + Form Lomake - + &Restart now &Käynnistä uudelleen - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Valmista.</h1><br/>%1 on määritetty tietokoneellesi.<br/>Voit nyt alkaa käyttää uutta järjestelmääsi. - + <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> <html><head/><body><p>Kun tämä valintaruutu on valittu, järjestelmä käynnistyy heti, kun napsautat <span style="font-style:italic;">Valmis</span> -painiketta tai suljet asennusohjelman.</p></body></html> - + <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. - <h1>Kaikki tehty.</h1><br/>%1 on asennettu tietokoneellesi.<br/>Voit joko uudelleenkäynnistää uuteen kokoonpanoosi, tai voit jatkaa %2 live-ympäristön käyttöä. + <h1>Kaikki tehty.</h1><br/>%1 on asennettu tietokoneellesi.<br/>Voit käynnistää tietokoneen nyt uuteen järjestelmääsi, tai voit jatkaa käyttöjärjestelmän %2 live-ympäristön käyttöä. - + <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> <html><head/><body><p>Kun tämä valintaruutu on valittuna, järjestelmä käynnistyy heti, kun napsautat <span style="font-style:italic;">Valmis</span> tai suljet asentimen.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Asennus epäonnistui</h1><br/>%1 ei ole määritetty tietokoneellesi.<br/> Virhesanoma oli: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Asennus epäonnistui </h1><br/>%1 ei ole asennettu tietokoneeseesi.<br/>Virhesanoma oli: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Valmis + + + FinishedViewStep - - Setup Complete - Asennus valmis - - - - Installation Complete - Asennus valmis - - - - The setup of %1 is complete. - Asennus %1 on valmis. - - - - The installation of %1 is complete. - Asennus %1 on valmis. + + Finish + Valmis FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Alustaa osiota %1 (tiedostojärjestelmä: %2, koko: %3 MiB) - %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Alustus <strong>%3MiB</strong> osio <strong>%1</strong> tiedostojärjestelmällä <strong>%2</strong>. - + Formatting partition %1 with file system %2. Alustaa osiota %1 tiedostojärjestelmällä %2. - + The installer failed to format partition %1 on disk '%2'. - Levyn '%2' osion %1 alustus epäonnistui. + Aseman '%2' osion %1 alustus epäonnistui. GeneralRequirements - + has at least %1 GiB available drive space vähintään %1 GiB vapaata levytilaa - + There is not enough drive space. At least %1 GiB is required. Levytilaa ei ole riittävästi. Vähintään %1 GiB tarvitaan. - + has at least %1 GiB working memory vähintään %1 GiB työmuistia - + The system does not have enough working memory. At least %1 GiB is required. Järjestelmässä ei ole tarpeeksi työmuistia. Vähintään %1 GiB vaaditaan. - + is plugged in to a power source on yhdistetty virtalähteeseen - + The system is not plugged in to a power source. Järjestelmä ei ole kytketty virtalähteeseen. - + is connected to the Internet on yhdistetty internetiin - + The system is not connected to the Internet. Järjestelmä ei ole yhteydessä internetiin. - + is running the installer as an administrator (root) ajaa asennusohjelmaa järjestelmänvalvojana (root) - + The setup program is not running with administrator rights. - Asennus -ohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. + Asennusohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. - + The installer is not running with administrator rights. - Asennus -ohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. + Asennusohjelma ei ole käynnissä järjestelmänvalvojan oikeuksin. - + has a screen large enough to show the whole installer näytöllä on riittävän suuri tarkkuus asentajalle - + The screen is too small to display the setup program. Näyttö on liian pieni, jotta asennus -ohjelma voidaan näyttää. - + The screen is too small to display the installer. Näyttö on liian pieni asentajan näyttämiseksi. @@ -1430,7 +1691,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. HostInfoJob - + Collecting information about your machine. Kerätään tietoja laitteesta. @@ -1438,25 +1699,25 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. IDJob - - + + + - OEM Batch Identifier OEM-erän tunniste - + Could not create directories <code>%1</code>. Hakemistoja ei voitu luoda <code>%1</code>. - + Could not open file <code>%1</code>. Tiedostoa ei voitu avata <code>%1</code>. - + Could not write to file <code>%1</code>. Tiedostoon ei voitu kirjoittaa <code>%1</code>. @@ -1464,15 +1725,15 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. InitcpioJob - + Creating initramfs with mkinitcpio. - Initramfs luominen mkinitcpion avulla. + Luodaan initramfs mkinitcpion avulla. InitramfsJob - + Creating initramfs. Luodaan initramfs. @@ -1480,17 +1741,17 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. InteractiveTerminalPage - + Konsole not installed Pääte ei asennettuna - + Please install KDE Konsole and try again! Asenna KDE konsole ja yritä uudelleen! - + Executing script: &nbsp;<code>%1</code> Suoritetaan skripti: &nbsp;<code>%1</code> @@ -1498,28 +1759,15 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. InteractiveTerminalViewStep - + Script Skripti - - KeyboardPage - - - Set keyboard model to %1.<br/> - Aseta näppäimiston malli %1.<br/> - - - - Set keyboard layout to %1/%2. - Aseta näppäimiston asetelmaksi %1/%2. - - KeyboardQmlViewStep - + Keyboard Näppäimistö @@ -1527,7 +1775,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. KeyboardViewStep - + Keyboard Näppäimistö @@ -1535,65 +1783,88 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. LCLocaleDialog - + System locale setting Järjestelmän maa-asetus - + 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>. - Järjestelmän kieli asetus vaikuttaa joidenkin komentorivin käyttöliittymän kieleen ja merkistön käyttöön.<br/>Nykyinen asetus on <strong>%1</strong>. + Järjestelmän maa-asetus vaikuttaa komentorivin käyttöliittymän kieleen ja merkistön käyttöön.<br/>Nykyinen asetus on <strong>%1</strong>. - + &Cancel &Peruuta - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Salatun swapin määrittäminen. + + + + No target system available. + Kohdejärjestelmää ei ole käytettävissä. + + + + No rootMountPoint is set. + Ei ole asetettu rootMountPoint + + + + No configFilePath is set. + Ei ole asetettu configFilePath + + LicensePage - + Form Lomake - + <h1>License Agreement</h1> <h1>Lisenssisopimus</h1> - + I accept the terms and conditions above. Hyväksyn yllä olevat ehdot ja edellytykset. - + Please review the End User License Agreements (EULAs). Ole hyvä ja tarkista loppukäyttäjän lisenssisopimus (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. Tämä asennusohjelma asentaa patentoidun ohjelmiston, johon sovelletaan lisenssiehtoja. - + If you do not agree with the terms, the setup procedure cannot continue. Jos et hyväksy ehtoja, asennusta ei voida jatkaa. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tämä asennus voi asentaa patentoidun ohjelmiston, johon sovelletaan lisenssiehtoja lisäominaisuuksien tarjoamiseksi ja käyttökokemuksen parantamiseksi. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Jos et hyväksy ehtoja, omaa ohjelmistoa ei asenneta, vaan sen sijaan käytetään avoimen lähdekoodin vaihtoehtoja. @@ -1601,7 +1872,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. LicenseViewStep - + License Lisenssi @@ -1609,109 +1880,102 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. LicenseWidget - + URL: %1 OSOITE: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ajuri</strong><br/>- %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 näytönohjaimet</strong><br/><font color="Grey">- %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 selaimen laajennus</strong><br/><font color="Grey">- %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodekki</strong><br/><font color="Grey">- %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paketti</strong><br/><font color="Grey">- %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">- %2</font> - + File: %1 Tiedosto: %1 - + + Hide license text + Piilota lisenssin teksti + + + Show the license text Näytä lisenssiteksti - + Open license agreement in browser. Avaa lisenssisopimus selaimessa. - - - Hide license text - Piilota lisenssin teksti - LocalePage - - The system language will be set to %1. - Järjestelmän kielen asetuksena on %1. - - - - The numbers and dates locale will be set to %1. - Numerot ja päivämäärät, paikallinen asetus on %1. - - - + Region: Alue: - + Zone: Vyöhyke: - - + + &Change... &Vaihda... - - - Set timezone to %1/%2.<br/> - Aseta aikavyöhyke %1/%2.<br/> - LocaleQmlViewStep - + Location Sijainti + + LocaleTests + + + Quit + Sulje + + LocaleViewStep - + Location Sijainti @@ -1719,35 +1983,35 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. LuksBootKeyFileJob - + Configuring LUKS key file. LUKS-avaintiedoston määrittäminen. - - + + No partitions are defined. Osioita ei ole määritelty. - - - + + + Encrypted rootfs setup error Salattu rootfs asennusvirhe - + Root partition %1 is LUKS but no passphrase has been set. Juuriosio %1 on LUKS, mutta salasanaa ei ole asetettu. - + Could not create LUKS key file for root partition %1. LUKS-avaintiedostoa ei voitu luoda juuriosioon %1. - + Could not configure LUKS key file on partition %1. LUKS-avaintiedostoa ei voi määrittää osiossa %1. @@ -1755,124 +2019,140 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. MachineIdJob - + Generate machine-id. Luo koneen-id. - + Configuration Error Määritysvirhe - + No root mount point is set for MachineId. Koneen tunnukselle ei ole asetettu root kiinnityskohtaa. + + Map + + + Timezone: %1 + Aikavyöhyke: %1 + + + + 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. + Valitse sijainti kartalla, jotta asentaja voi ehdottaa maa- ja aikavyöhyke-asetukset. + Voit hienosäätää alla olevia asetuksia. Etsi kartalta vetämällä ja suurenna/pienennä +/- -painikkeella tai käytä +hiiren vieritystä skaalaamiseen. + + NetInstallViewStep - - + Package selection Paketin valinta - + Office software Office-ohjelmisto - + Office package Office-paketti - + Browser software Selainohjelmisto - + Browser package Selainpaketti - + Web browser Nettiselain - + Kernel Kernel - + Services Palvelut - + Login Kirjaudu - + Desktop Työpöytä - + Applications Sovellukset - + Communication - + Viestintä - + Development - + Ohjelmistokehitys - + Office - + Toimisto - + Multimedia - + Multimedia - + Internet - + Internetti - + Theming - + Teema - + Gaming - + Pelit - + Utilities - + Apuohjelmat NotesQmlViewStep - + Notes Huomautuksia @@ -1880,278 +2160,335 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. OEMPage - + Ba&tch: Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Syötä erän tunniste tähän. Tämä tallennetaan kohdejärjestelmään.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - <html><head/><body><h1>OEM asetukset</h1><p>Calamares käyttää OEM-asetuksia määritettäessä kohdejärjestelmää.</p></body></html> + <html><head/><body><h1>OEM-asetukset</h1><p>Calamares käyttää OEM-asetuksia määritettäessä kohdejärjestelmää.</p></body></html> OEMViewStep - + OEM Configuration OEM-kokoonpano - + Set the OEM Batch Identifier to <code>%1</code>. - Aseta OEM valmistajan erän tunnus <code>%1</code>. + Aseta OEM-valmistajan erän tunnisteeksi <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. + Valitse sinun asuinalue tai käytä oletusta. + + + + + + Timezone: %1 + Aikavyöhyke: %1 + + + + Select your preferred Zone within your Region. + Valitse haluamasi alue alueesi sisällä. + + + + Zones + Vyöhykkeet + + + + You can fine-tune Language and Locale settings below. + Voit hienosäätää kieli- ja alueasetuksia alla. PWQ - + Password is too short Salasana on liian lyhyt - + Password is too long Salasana on liian pitkä - + Password is too weak Salasana on liian heikko - + Memory allocation error when setting '%1' Muistin varausvirhe asetettaessa '%1' - + Memory allocation error Muistin varausvirhe - + The password is the same as the old one Salasana on sama kuin vanha - + The password is a palindrome Salasana on palindromi - + The password differs with case changes only Salasana eroaa vain vähäisin muutoksin - + The password is too similar to the old one Salasana on liian samanlainen kuin vanha - + The password contains the user name in some form Salasana sisältää jonkin käyttäjänimen - + The password contains words from the real name of the user in some form Salasana sisältää sanoja käyttäjän todellisesta nimestä jossain muodossa - + The password contains forbidden words in some form Salasana sisältää kiellettyjä sanoja - - The password contains less than %1 digits - Salasana sisältää vähemmän kuin %1 numeroa - - - + The password contains too few digits Salasana sisältää liian vähän numeroita - - The password contains less than %1 uppercase letters - Salasana sisältää vähemmän kuin %1 isoja kirjaimia - - - + The password contains too few uppercase letters Salasana sisältää liian vähän isoja kirjaimia - - - The password contains less than %1 lowercase letters - Salasana sisältää vähemmän kuin %1 pieniä kirjaimia + + + The password contains fewer than %n lowercase letters + + Salasana sisältää vähemmän kuin %n pientä kirjainta + Salasana sisältää vähemmän kuin %n pientä kirjainta + - + The password contains too few lowercase letters Salasana sisältää liian vähän pieniä kirjaimia - - The password contains less than %1 non-alphanumeric characters - Salasanassa on vähemmän kuin %1 erikoismerkkiä - - - + The password contains too few non-alphanumeric characters Salasana sisältää liian vähän erikoismerkkejä - - The password is shorter than %1 characters - Salasana on lyhyempi kuin %1 merkkiä - - - + The password is too short Salasana on liian lyhyt - - The password is just rotated old one - Salasana on vain vanhan pyöritystä - - - - The password contains less than %1 character classes - Salasana sisältää vähemmän kuin %1 merkkiluokkaa - - - + The password does not contain enough character classes Salasana ei sisällä tarpeeksi merkkiluokkia - - The password contains more than %1 same characters consecutively - Salasana sisältää enemmän kuin %1 samaa merkkiä peräkkäin - - - + The password contains too many same characters consecutively Salasana sisältää liian monta samaa merkkiä peräkkäin - - The password contains more than %1 characters of the same class consecutively - Salasana sisältää enemmän kuin %1 merkkiä samasta luokasta peräkkäin - - - + The password contains too many characters of the same class consecutively Salasana sisältää liian monta saman luokan merkkiä peräkkäin - - - The password contains monotonic sequence longer than %1 characters - Salasana sisältää monotonisen merkkijonon, joka on pidempi kuin %1 merkkiä + + + The password contains fewer than %n digits + + Salasana sisältää vähemmän kuin %n numeroa + Salasana sisältää vähemmän kuin %n numeroa + + + + + The password contains fewer than %n uppercase letters + + Salasana sisältää vähemmän kuin %n isoa kirjainta + Salasana sisältää vähemmän kuin %n isoa kirjainta + + + + + The password contains fewer than %n non-alphanumeric characters + + Salasana sisältää vähemmän kuin %n erikoismerkkiä + Salasana sisältää vähemmän kuin %n erikoismerkkiä + + + + + The password is shorter than %n characters + + Salasana on lyhyempi kuin %1 merkkiä + Salasana on lyhyempi kuin %n merkkiä + - + + The password is a rotated version of the previous one + Salasana on edellisen käänteinen versio + + + + The password contains fewer than %n character classes + + Salasana sisältää vähemmän kuin %n tasoa + Salasana sisältää vähemmän kuin %n tasoa + + + + + The password contains more than %n same characters consecutively + + Salasana sisältää enemmän kuin %n samaa merkkiä peräkkäin + Salasana sisältää enemmän kuin %n samaa merkkiä peräkkäin + + + + + The password contains more than %n characters of the same class consecutively + + Salasana sisältää enemmän kuin %n samaa merkkiä peräkkäin + Salasana sisältää enemmän kuin %n samaa merkkiä peräkkäin + + + + + The password contains monotonic sequence longer than %n characters + + Salasana sisältää monotonisen jonon, joka on pidempi kuin %n merkkiä + Salasana sisältää monotonisen jonon, joka on pidempi kuin %n merkkiä + + + + The password contains too long of a monotonic character sequence Salasanassa on liian pitkä monotoninen merkkijono - + No password supplied Salasanaa ei annettu - + Cannot obtain random numbers from the RNG device Satunnaislukuja ei voi saada RNG-laitteesta - + Password generation failed - required entropy too low for settings Salasanojen luonti epäonnistui - pakollinen vähimmäistaso liian alhainen asetuksia varten - + The password fails the dictionary check - %1 Salasana epäonnistui sanaston tarkistuksessa -%1 - + The password fails the dictionary check Salasana epäonnistui sanaston tarkistuksessa - + Unknown setting - %1 Tuntematon asetus - %1 - + Unknown setting Tuntematon asetus - + Bad integer value of setting - %1 Asetuksen virheellinen kokonaisluku - %1 - + Bad integer value Virheellinen kokonaisluku - + Setting %1 is not of integer type Asetus %1 ei ole kokonaisluku - + Setting is not of integer type Asetus ei ole kokonaisluku - + Setting %1 is not of string type Asetus %1 ei ole merkkijono - + Setting is not of string type Asetus ei ole merkkijono - + Opening the configuration file failed Määritystiedoston avaaminen epäonnistui - + The configuration file is malformed Määritystiedosto on väärin muotoiltu - + Fatal failure Vakava virhe - + Unknown error Tuntematon virhe - + Password is empty Salasana on tyhjä @@ -2159,40 +2496,48 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PackageChooserPage - + Form Lomake - + Product Name Tuotteen nimi - + TextLabel Nimilappu - + Long Product Description Pitkä tuotekuvaus - + Package Selection Paketin valinta - + Please pick a product from the list. The selected product will be installed. - Ole hyvä ja valitse tuote luettelosta. Valittu tuote asennetaan. + Valitse tuote luettelosta. Valittu tuote asennetaan. + + + + PackageChooserQmlViewStep + + + Packages + Paketit PackageChooserViewStep - + Packages Paketit @@ -2200,12 +2545,12 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PackageModel - + Name Nimi - + Description Kuvaus @@ -2213,17 +2558,17 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. Page_Keyboard - + Form Lomake - + Keyboard Model: Näppäimistön malli: - + Type here to test your keyboard Kirjoita tähän testaksesi näppäimistöäsi. @@ -2231,96 +2576,96 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. Page_UserSetup - + Form Lomake - + What is your name? Mikä on nimesi? - - What name do you want to use to log in? - Mitä nimeä haluat käyttää sisäänkirjautumisessa? - - - - Choose a password to keep your account safe. - Valitse salasana pitääksesi tilisi turvallisena. - - - - - <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> - <small>Syötä salasana kahdesti välttääksesi kirjoitusvirheitä. Hyvän salasanan tulee sisältää sekoitetusti kirjaimia, numeroita ja erikoismerkkejä. Salasanan täytyy olla vähintään kahdeksan merkin mittainen ja tulee vaihtaa säännöllisin väliajoin.</small> - - - - What is the name of this computer? - Mikä on tämän tietokoneen nimi? - - - + Your Full Name Koko nimesi - + + What name do you want to use to log in? + Mitä nimeä haluat käyttää sisäänkirjautumisessa? + + + login Kirjaudu - + + What is the name of this computer? + Mikä on tämän tietokoneen nimi? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Tätä nimeä tullaan käyttämään mikäli asetat tietokoneen näkyviin muille verkossa.</small> - + Computer Name Tietokoneen nimi - - + + Choose a password to keep your account safe. + Valitse salasana pitääksesi tilisi turvallisena. + + + + + <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> + <small>Syötä salasana kahdesti välttääksesi kirjoitusvirheitä. Hyvän salasanan tulee sisältää sekoitetusti kirjaimia, numeroita ja erikoismerkkejä. Salasanan täytyy olla vähintään kahdeksan merkin mittainen ja tulee vaihtaa säännöllisin väliajoin.</small> + + + + Password Salasana - - + + Repeat Password Toista salasana - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kun tämä valintaruutu on valittu, salasanan vahvuus tarkistetaan, etkä voi käyttää heikkoa salasanaa. - + Require strong passwords. Vaaditaan vahvat salasanat. - + Log in automatically without asking for the password. Kirjaudu automaattisesti ilman salasanaa. - + Use the same password for the administrator account. Käytä pääkäyttäjän tilillä samaa salasanaa. - + Choose a password for the administrator account. Valitse salasana pääkäyttäjän tilille. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Syötä salasana kahdesti välttääksesi kirjoitusvirheitä.</small> @@ -2328,42 +2673,42 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI-järjestelmä - + Swap Swap - + New partition for %1 Uusi osio %1 - + New partition - Uusi osiointi + Uusi osio - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2372,34 +2717,39 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PartitionModel - - + + Free Space Vapaa tila - - + + New partition - Uusi osiointi + Uusi osio - + Name Nimi - + File System Tiedostojärjestelmä - + + File System Label + Tiedostojärjestelmän nimi + + + Mount Point Liitoskohta - + Size Koko @@ -2407,77 +2757,77 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PartitionPage - + Form Lomake - + Storage de&vice: - Tallennus&laite: + Kiintole&vy: - + &Revert All Changes &Peru kaikki muutokset - + New Partition &Table Uusi osiointi&taulukko - + Cre&ate Luo& - + &Edit &Muokkaa - + &Delete &Poista - + New Volume Group - Uusi aseman ryhmä + Uusi taltioryhmä - + Resize Volume Group - Muuta kokoa aseman-ryhmässä + Muuta taltioryhmän kokoa - + Deactivate Volume Group - Poista asemaryhmä käytöstä + Poista taltioryhmä käytöstä - + Remove Volume Group - Poista asemaryhmä + Poista taltioryhmä - + I&nstall boot loader on: A&senna käynnistyslatain: - + Are you sure you want to create a new partition table on %1? - Oletko varma, että haluat luoda uuden osion %1? + Haluatko varmasti luoda uuden osiotaulukon levylle %1? - + Can not create new partition Ei voi luoda uutta osiota - + 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. %1 osio-taulukossa on jo %2 ensisijaista osiota, eikä sitä voi lisätä. Poista yksi ensisijainen osio ja lisää laajennettu osio. @@ -2485,117 +2835,107 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PartitionViewStep - + Gathering system information... Kerätään järjestelmän tietoja... - + Partitions Osiot - - Install %1 <strong>alongside</strong> another operating system. - Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong>. + + Unsafe partition actions are enabled. + Epäturvalliset osiotoiminnot ovat käytössä. - - <strong>Erase</strong> disk and install %1. - <strong>Tyhjennä</strong> levy ja asenna %1. + + Partitioning is configured to <b>always</b> fail. + Osiointi on määritetty <b>aina</b> epäonnistumaan. - - <strong>Replace</strong> a partition with %1. - <strong>Vaihda</strong> osio jolla on %1. + + No partitions will be changed. + Osioita ei muuteta. - - <strong>Manual</strong> partitioning. - <strong>Manuaalinen</strong> osointi. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong> levylle <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Tyhjennä</strong> levy <strong>%2</strong> (%3) ja asenna %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Korvaa</strong> levyn osio <strong>%2</strong> (%3) jolla on %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Manuaalinen</strong> osiointi levyllä <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Levy <strong>%1</strong> (%2) - - - + Current: Nykyinen: - + After: Jälkeen: - + No EFI system partition configured EFI-järjestelmäosiota ei ole määritetty - - 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>esp</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. - EFI-järjestelmäosio on välttämätön käynnistystä varten %1.<br/><br/>Jos haluat tehdä EFI-järjestelmäosion, mene takaisin ja luo FAT32-tiedostojärjestelmä, jossa on<strong>esp</strong> lippu yhdistettynä asennuspisteen liitokseen <strong>%2</strong>.<br/><br/>Voit jatkaa ilman EFI-järjestelmäosiota, mutta järjestelmä ei ehkä käynnisty. + + EFI system partition configured incorrectly + EFI-järjestelmäosio on määritetty väärin - - EFI system partition flag not set - EFI-järjestelmäosion lippua ei ole asetettu + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + EFI-järjestelmäosio on vaatimus käynnistääksesi %1.<br/><br/>Palaa jos haluat määrittää EFI-järjestelmäosion, valitse tai luo sopiva tiedostojärjestelmä. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - EFI-järjestelmäosio on välttämätön käynnistystä varten %1.<br/><br/>Osio määritettiin liittymäpisteellä, <strong>%2</strong> mutta sen <strong>esp</strong> lippua ei ole asetettu.<br/>Jos haluat asettaa lipun, palaa takaisin ja muokkaa osiota.<br/><br/>Voit jatkaa lippua asettamatta, mutta järjestelmä ei ehkä käynnisty. + + The filesystem must be mounted on <strong>%1</strong>. + Tiedostojärjestelmä on asennettava <strong>%1</strong>. - + + The filesystem must have type FAT32. + Tiedostojärjestelmän on oltava tyyppiä FAT32. + + + + The filesystem must be at least %1 MiB in size. + Tiedostojärjestelmän on oltava kooltaan vähintään %1 MiB. + + + + The filesystem must have flag <strong>%1</strong> set. + Tiedostojärjestelmässä on oltava <strong>%1</strong> lippu. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Voit jatkaa ilman EFI-järjestelmäosion määrittämistä, mutta järjestelmä ei ehkä käynnisty. + + + Option to use GPT on BIOS BIOS:ssa mahdollisuus käyttää GPT:tä - - 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. - GPT-osiotaulukko on paras vaihtoehto kaikille järjestelmille. Tämä asennusohjelma tukee asennusta myös BIOS:n järjestelmään.<br/><br/>Jos haluat määrittää GPT-osiotaulukon BIOS:ssa (jos sitä ei ole jo tehty) palaa takaisin ja aseta osiotaulukkoksi GPT. Luo seuraavaksi 8 Mb alustamaton osio <strong>bios_grub</strong> lipulla käyttöön.<br/><br/>Alustamaton 8 Mb osio on tarpeen %1:n käynnistämiseksi BIOS-järjestelmässä GPT:llä. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT-osiotaulukko on paras vaihtoehto kaikille järjestelmille. Kuitenkin asennusohjelma tukee myös BIOS-järjestelmää.<br/><br/>Jos haluat määrittää GPT-osiotaulukon BIOS:ssa (jos et ole jo tehnyt) niin palaa takaisin ja aseta osiotaulukkoksi GPT. Luo seuraavaksi 8 Mt alustamaton osio <strong>%2</strong> lipulla käyttöön.<br/><br/>Alustamaton 8 Mt tarvitaan %1 käynnistämiseen BIOS-järjestelmässä, jossa on GPT. - + Boot partition not encrypted Käynnistysosiota ei ole salattu - + 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. Erillinen käynnistysosio perustettiin yhdessä salatun juuriosion kanssa, mutta käynnistysosio ei ole salattu.<br/><br/>Tällaisissa asetuksissa on tietoturvaongelmia, koska tärkeät järjestelmätiedostot pidetään salaamattomassa osiossa.<br/>Voit jatkaa, jos haluat, mutta tiedostojärjestelmän lukituksen avaaminen tapahtuu myöhemmin järjestelmän käynnistyksen aikana.<br/>Käynnistysosion salaamiseksi siirry takaisin ja luo se uudelleen valitsemalla <strong>Salaa</strong> osion luominen -ikkunassa. - + has at least one disk device available. - on vähintään yksi levy käytettävissä. + on vähintään yksi asema käytettävissä. - + There are no partitions to install on. Asennettavia osioita ei ole. @@ -2603,39 +2943,39 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasman ulkoasu - - + + Could not select KDE Plasma Look-and-Feel package - KDE-plasman ulkoasupakettia ei voi valita + KDE Plasman ulkoasupakettia ei voi valita PlasmaLnfPage - + Form Lomake - + 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. Valitse ulkoasu KDE-plasma -työpöydälle. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asetettu. Klikkaamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta. - + 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. - Valitse KDE-plasma -työpöydän ulkoasu. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asennettu. Klikkaamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta. + Valitse KDE Plasma -työpöydän ulkoasu. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asennettu. Napsauttamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta. PlasmaLnfViewStep - + Look-and-Feel Ulkoasu @@ -2643,17 +2983,17 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. PreserveFiles - + Saving files for later ... - Tiedostojen tallentaminen myöhemmin ... + Tallennetaan tiedostoja myöhemmäksi... - + No files configured to save for later. Ei tiedostoja, joita olisi määritetty tallentamaan myöhemmin. - + Not all of the configured files could be preserved. Kaikkia määritettyjä tiedostoja ei voitu säilyttää. @@ -2661,14 +3001,14 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. ProcessResult - + There was no output from the command. Komentoa ei voitu ajaa. - + Output: @@ -2677,52 +3017,52 @@ Ulostulo: - + External command crashed. Ulkoinen komento kaatui. - + Command <i>%1</i> crashed. Komento <i>%1</i> kaatui. - + External command failed to start. Ulkoisen komennon käynnistäminen epäonnistui. - + Command <i>%1</i> failed to start. Komennon <i>%1</i> käynnistäminen epäonnistui. - + Internal error when starting command. Sisäinen virhe käynnistettäessä komentoa. - + Bad parameters for process job call. Huonot parametrit prosessin kutsuun. - + External command failed to finish. Ulkoinen komento ei onnistunut. - + Command <i>%1</i> failed to finish in %2 seconds. Komento <i>%1</i> epäonnistui %2 sekunnissa. - + External command finished with errors. Ulkoinen komento päättyi virheisiin. - + Command <i>%1</i> finished with exit code %2. Komento <i>%1</i> päättyi koodiin %2. @@ -2730,89 +3070,95 @@ Ulostulo: QObject - - Default Keyboard Model - Oletus näppäimistömalli - - - - - Default - Oletus - - - - unknown - tuntematon - - - - extended - laajennettu - - - - unformatted - formatoimaton - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Osioimaton tila tai tuntematon osion taulu - - - - (no mount point) - (ei liitoskohtaa) - - - - Requirements checking for module <i>%1</i> is complete. - Moduulin vaatimusten tarkistaminen <i>%1</i> on valmis. - - - + %1 (%2) %1 (%2) - - No product - Ei tuotetta + + unknown + tuntematon - - No description provided. - Kuvausta ei ole. + + extended + laajennettu - - - - + + unformatted + formatoimaton + + + + swap + swap + + + + + Default + Oletus + + + + + + File not found Tiedostoa ei löytynyt - + Path <pre>%1</pre> must be an absolute path. Polku <pre>%1</pre> täytyy olla ehdoton polku. - + + Directory not found + Kansiota ei löytynyt + + + + Could not create new random file <pre>%1</pre>. Uutta satunnaista tiedostoa ei voitu luoda <pre>%1</pre>. + + + No product + Ei tuotetta + + + + No description provided. + Kuvausta ei ole. + + + + (no mount point) + (ei liitoskohtaa) + + + + Unpartitioned space or unknown partition table + Osioimaton tila tai tuntematon osion taulu + + + + Recommended + + + <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> + <p>Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/> +Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</p> + RemoveUserJob - + Remove live user from target system Poista Live-käyttäjä kohdejärjestelmästä @@ -2820,162 +3166,179 @@ Ulostulo: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - Poista asemaryhmä nimeltä %1. + Poista taltioryhmä nimeltä %1. - + Remove Volume Group named <strong>%1</strong>. - Poista asemaryhmä nimeltä <strong>%1</strong>. + Poista taltioryhmä nimeltä <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. - Asentaja ei onnistunut poistamaan nimettyä asemaryhmää '%1'. + Asennusoihjelma ei onnistunut poistamaan taltioryhmää '%1'. ReplaceWidget - + Form Lomake - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Valitse minne %1 asennetaan.<br/><font color="red">Varoitus: </font>tämä poistaa kaikki tiedostot valitulta osiolta. - + The selected item does not appear to be a valid partition. Valitsemaasi kohta ei näytä olevan kelvollinen osio. - + %1 cannot be installed on empty space. Please select an existing partition. %1 ei voi asentaa tyhjään tilaan. Valitse olemassa oleva osio. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ei voida asentaa jatketun osion. Valitse olemassa oleva ensisijainen tai looginen osio. - + %1 cannot be installed on this partition. %1 ei voida asentaa tähän osioon. - + Data partition (%1) - Data osio (%1) + Dataosio (%1) - + Unknown system partition (%1) - Tuntematon järjestelmä osio (%1) + Tuntematon järjestelmäosio (%1) - + %1 system partition (%2) %1 järjestelmäosio (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Osio %1 on liian pieni %2. Valitse osio, jonka kapasiteetti on vähintään %3 GiB. - + <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. <strong>%2</strong><br/><br/>EFI-järjestelmäosiota ei löydy mistään tässä järjestelmässä. Palaa takaisin ja käytä manuaalista osiointia määrittämällä %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 asennetaan %2.<br/><font color="red">Varoitus: </font>kaikki osion %2 tiedot katoavat. - + The EFI system partition at %1 will be used for starting %2. EFI-järjestelmän osiota %1 käytetään käynnistettäessä %2. - + EFI system partition: EFI järjestelmäosio + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Tämä tietokone ei täytä vähittäisvaatimuksia asennukseen %1.<br/> + Asennusta ei voida jatkaa.</p> + + + + <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> + <p>Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/> +Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</p> + + ResizeFSJob - + Resize Filesystem Job Muuta tiedostojärjestelmän kokoa - + Invalid configuration Virheellinen konfiguraatio - + The file-system resize job has an invalid configuration and will not run. Tiedostojärjestelmän koon muutto ei kelpaa eikä sitä suoriteta. - + KPMCore not Available KPMCore ei saatavilla - + Calamares cannot start KPMCore for the file-system resize job. Calamares ei voi käynnistää KPMCore-tiedostoa tiedostojärjestelmän koon muuttamiseksi. - - - - - + + + + + Resize Failed Kokomuutos epäonnistui - + The filesystem %1 could not be found in this system, and cannot be resized. Tiedostojärjestelmää %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa. - + The device %1 could not be found in this system, and cannot be resized. Laitetta %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa. - - + + The filesystem %1 cannot be resized. Tiedostojärjestelmän %1 kokoa ei voi muuttaa. - - + + The device %1 cannot be resized. Laitteen %1 kokoa ei voi muuttaa. - + The filesystem %1 must be resized, but cannot. Tiedostojärjestelmän %1 kokoa on muutettava, mutta ei onnistu. - + The device %1 must be resized, but cannot Laitteen %1 kokoa on muutettava, mutta ei onnistu. @@ -2983,30 +3346,30 @@ Ulostulo: ResizePartitionJob - + Resize partition %1. Muuta osion kokoa %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Muuta <strong>%2MiB</strong> osiota <strong>%1</strong> - <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Muuntaa %2MiB osion %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. - Asennusohjelma epäonnistui osion %1 koon muuttamisessa levyllä '%2'. + Asennusohjelma epäonnistui osion %1 koon muuttamisessa asemalla '%2'. ResizeVolumeGroupDialog - + Resize Volume Group Muuta kokoa aseman-ryhmässä @@ -3014,73 +3377,44 @@ Ulostulo: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Muuta %1 levyn kokoa %2:sta %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Muuta levyä nimeltä <strong>%1</strong> lähde <strong>%2</strong> - <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. - Asentaja ei onnistunut muuttamaan nimettyä levyä '%1'. + Asennusohjelma ei onnistunut muuttamaan taltioryhmän '%1' kokoa. ResultsListDialog - + For best results, please ensure that this computer: Saadaksesi parhaan lopputuloksen, tarkista että tämä tietokone: - + System requirements Järjestelmävaatimukset - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Tämä tietokone ei täytä vähimmäisvaatimuksia, %1.<br/>Asennusta ei voi jatkaa. <a href="#details">Yksityiskohdat...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Tämä tietokone ei täytä asennuksen vähimmäisvaatimuksia, %1.<br/>Asennus ei voi jatkua. <a href="#details">Yksityiskohdat...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/>Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1. -Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. - - - - This program will ask you some questions and set up %2 on your computer. - Tämä ohjelma kysyy joitakin kysymyksiä %2 ja asentaa tietokoneeseen. - - ScanningDialog - + Scanning storage devices... - Skannataan tallennuslaitteita... + Etsitään massamuisteja... - + Partitioning Osiointi @@ -3088,29 +3422,29 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. SetHostNameJob - + Set hostname %1 Aseta isäntänimi %1 - + Set hostname <strong>%1</strong>. - Aseta koneellenimi <strong>%1</strong>. + Aseta isäntänimi <strong>%1</strong>. - + Setting hostname %1. - Asetetaan koneellenimi %1. + Asetetaan isäntänimi %1. + - Internal Error - Sisäinen Virhe + Sisäinen virhe - - + + Cannot write hostname to target system Ei voida kirjoittaa isäntänimeä kohdejärjestelmään. @@ -3118,112 +3452,112 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - Aseta näppäimistön malliksi %1, asetelmaksi %2-%3 + Aseta näppäimistön malliksi %1, asetteluksi %2-%3 - + Failed to write keyboard configuration for the virtual console. Virtuaalikonsolin näppäimistöasetuksen tallentaminen epäonnistui. - - - + + + Failed to write to %1 Kirjoittaminen epäonnistui kohteeseen %1 - + Failed to write keyboard configuration for X11. - X11 näppäimistöasetuksen tallentaminen epäonnistui. + X11-näppäimistöasetusten tallentaminen epäonnistui. - + Failed to write keyboard configuration to existing /etc/default directory. - Näppäimistöasetusten kirjoittaminen epäonnistui olemassa olevaan /etc/default hakemistoon. + Näppäimistöasetusten kirjoittaminen epäonnistui olemassa olevaan /etc/default-hakemistoon. SetPartFlagsJob - + Set flags on partition %1. Aseta liput osioon %1. - + Set flags on %1MiB %2 partition. Aseta liput %1MiB %2 osioon. - + Set flags on new partition. Aseta liput uuteen osioon. - + Clear flags on partition <strong>%1</strong>. Poista liput osiosta <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Poista liput %1MiB <strong>%2</strong> osiosta. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Lippu %1MiB <strong>%2</strong> osiosta <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Tyhjennä liput %1MiB <strong>%2</strong> osiossa. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Asetetaan liput <strong>%3</strong> %1MiB <strong>%2</strong> osioon. - - - + Clear flags on new partition. Tyhjennä liput uuteen osioon. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Merkitse osio <strong>%1</strong> - <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Lippu %1MiB <strong>%2</strong> osiosta <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Merkitse uusi osio <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Lipun poisto osiosta <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Tyhjennä liput %1MiB <strong>%2</strong> osiossa. + + + Clearing flags on new partition. Uusien osioiden lippujen poistaminen. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Lippujen <strong>%2</strong> asettaminen osioon <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Asetetaan liput <strong>%3</strong> %1MiB <strong>%2</strong> osioon. + + + Setting flags <strong>%1</strong> on new partition. Asetetaan liput <strong>%1</strong> uuteen osioon. - + The installer failed to set flags on partition %1. Asennusohjelma ei voinut asettaa lippuja osioon %1. @@ -3231,42 +3565,42 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. SetPasswordJob - + Set password for user %1 Aseta salasana käyttäjälle %1 - + Setting password for user %1. Salasanan asettaminen käyttäjälle %1. - + Bad destination system path. Huono kohteen järjestelmäpolku - + rootMountPoint is %1 rootMountPoint on %1 - + Cannot disable root account. Root-tiliä ei voi poistaa. - + passwd terminated with error code %1. passwd päättyi virhekoodiin %1. - + Cannot set password for user %1. Salasanaa ei voi asettaa käyttäjälle %1. - + usermod terminated with error code %1. usermod päättyi virhekoodilla %1. @@ -3274,45 +3608,82 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. SetTimezoneJob - + Set timezone to %1/%2 Aseta aikavyöhykkeeksi %1/%2 - + Cannot access selected timezone path. Ei pääsyä valittuun aikavyöhykkeen polkuun. - + Bad path: %1 Huono polku: %1 - + Cannot set timezone. Aikavyöhykettä ei voi asettaa. - + Link creation failed, target: %1; link name: %2 Linkin luominen kohteeseen %1 epäonnistui; linkin nimi: %2 - + Cannot set timezone, Aikavyöhykettä ei voi määrittää, - + Cannot open /etc/timezone for writing - Ei voi avata /etc/timezone + Ei voi avata /etc/timezone kirjoitusta varten + + + + SetupGroupsJob + + + Preparing groups. + Valmistellaan ryhmiä. + + + + + Could not create groups in target system + Ryhmiä ei voitu luoda kohdejärjestelmään + + + + These groups are missing in the target system: %1 + Kohderyhmästä puuttuu näitä ryhmiä: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Määritä <pre>sudo</pre>-käyttäjät. + + + + Cannot chmod sudoers file. + Ei voida tehdä käyttöoikeuden muutosta sudoers-tiedostolle. + + + + Cannot create sudoers file for writing. + Ei voida luoda sudoers-tiedostoa kirjoitettavaksi. ShellProcessJob - + Shell Processes Job Shell-prosessien työ @@ -3320,81 +3691,117 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Tämä on yleiskuva siitä, mitä tapahtuu, kun asennusohjelma käynnistetään. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Tämä on yleiskuva siitä, mitä tapahtuu asennuksen aloittamisen jälkeen. + + &Yes + &Kyllä - - - SummaryViewStep - - Summary - Yhteenveto + + &No + &Ei + + + + &Cancel + &Peruuta + + + + &Close + &Sulje TrackingInstallJob - + Installation feedback Asennuksen palaute - + Sending installation feedback. Lähetetään asennuksen palautetta. - + Internal error in install-tracking. Sisäinen virhe asennuksen seurannassa. - + HTTP request timed out. - HTTP -pyyntö aikakatkaistiin. + HTTP-pyyntö aikakatkaistiin. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE-käyttäjäpalaute + + + + Configuring KDE user feedback. + Määritetään KDE-käyttäjäpalaute. + + + + + Error in KDE user feedback configuration. + Virhe KDE:n käyttäjäpalautteen määrityksissä. + + + + Could not configure KDE user feedback correctly, script error %1. + KDE-käyttäjäpalautetta ei voitu määrittää oikein, komentosarjassa virhe %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE-käyttäjäpalautetta ei voitu määrittää oikein, Calamares-virhe %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Koneen palaute - + Configuring machine feedback. Konekohtaisen palautteen määrittäminen. - - + + Error in machine feedback configuration. Virhe koneen palautteen määrityksessä. - + Could not configure machine feedback correctly, script error %1. Konekohtaista palautetta ei voitu määrittää oikein, komentosarjan virhe %1. - + Could not configure machine feedback correctly, Calamares error %1. Koneen palautetta ei voitu määrittää oikein, Calamares-virhe %1. @@ -3402,106 +3809,97 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. TrackingPage - + Form Lomake - + Placeholder Paikkamerkki - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Valitsemalla tämän, <span style=" font-weight:600;">et lähetä mitään</span> tietoja asennuksesta.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Napsauta tätä <span style=" font-weight:600;">jos et halua lähettää mitään</span> tietoja asennuksesta.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klikkaa tästä saadaksesi lisätietoja käyttäjäpalautteesta</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Asentamalla seuranta autat %1 näkemään, kuinka monta käyttäjää heillä on, mitä laitteita he asentavat %1 ja (kahdella viimeisellä vaihtoehdolla), saat jatkuvaa tietoa suosituista sovelluksista. Jos haluat nähdä, mitä tietoa lähetetään, napsauta kunkin alueen vieressä olevaa ohjekuvaketta. + + 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. + Seuranta auttaa %1 näkemään, kuinka usein se asennetaan, mihin laitteistoon se on asennettu ja mihin sovelluksiin sitä käytetään. Jos haluat nähdä, mitä lähetetään, napsauta kunkin alueen vieressä olevaa ohjekuvaketta. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Kun valitset tämän, lähetät tietoja asennuksesta ja laitteistosta. <b>Nämä tiedot lähetetään vain kerran</b> asennuksen päättymisen jälkeen. + + 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. + Valitsemalla tämän lähetät tietoja asennuksesta ja laitteistosta. Nämä tiedot lähetetään vain </b>kerran</b> asennuksen päätyttyä. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Kun valitset tämän, lähetät <b>määräajoin </b> tietoja asennuksesta, laitteistosta ja sovelluksista osoitteeseen %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Valitsemalla tämän lähetät määräajoin tietoja <b>koneesi</b> asennuksesta, laitteistosta ja sovelluksista, %1:lle. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Kun valitset tämän, lähetät <b>säännöllisesti </b> tietoja asennuksesta, laitteistosta, sovelluksista ja käyttötavoista osoitteeseen %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Valitsemalla tämän lähetät säännöllisesti tietoja <b>käyttäjän</b> asennuksesta, laitteistosta, sovelluksista ja sovellusten käyttötavoista %1:lle. TrackingViewStep - + Feedback Palautetta + + UmountJob + + + Unmount file systems. + Irrota tiedostojärjestelmät käytöstä. + + + + No target system available. + Kohdejärjestelmää ei ole käytettävissä. + + + + No rootMountPoint is set. + Ei ole asetettu rootMountPoint + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small> + + + UsersQmlViewStep - - Your username is too long. - Käyttäjänimesi on liian pitkä. - - - - Your username must start with a lowercase letter or underscore. - Käyttäjätunnuksesi täytyy alkaa pienillä kirjaimilla tai alaviivoilla. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. - - - - Only letters, numbers, underscore and hyphen are allowed. - Vain kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. - - - - Your hostname is too short. - Isäntänimesi on liian lyhyt. - - - - Your hostname is too long. - Isäntänimesi on liian pitkä. - - - - Your passwords do not match! - Salasanasi eivät täsmää! + + Users + Käyttäjät UsersViewStep - + Users Käyttäjät @@ -3509,172 +3907,174 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. VariantModel - + Key + Column header for key/value Avain - + Value + Column header for key/value Arvo VolumeGroupBaseDialog - + Create Volume Group - Luo aseman ryhmä + Luo taltioryhmä - + List of Physical Volumes - Fyysisten levyjen luoettelo + Fyysisten taltioiden luettelo - + Volume Group Name: - Aseman ryhmän nimi: + Taltioryhmän nimi: - + Volume Group Type: - Aseman ryhmän tyyppi: + Taltioryhmän tyyppi: - + Physical Extent Size: Fyysinen koko: - + MiB Mib - + Total Size: Yhteensä koko: - + Used Size: Käytetty tila: - + Total Sectors: Sektorit yhteensä: - + Quantity of LVs: - Määrä LVs: + Loogisten taltioiden määrä: WelcomePage - + Form Lomake - - + + Select application and system language Valitse sovelluksen ja järjestelmän kieli + &About + &Tietoa + + + Open donations website Avaa lahjoitussivusto - + &Donate &Lahjoita - + Open help and support website Avaa ohje- ja tukisivusto + &Support + &Tuki + + + Open issues and bug-tracking website Avaa ongelmia käsittelevä verkkosivusto - Open release notes website - Avaa julkaisutiedot verkkosivusto - - - - &Release notes - &Julkaisutiedot - - - &Known issues &Tunnetut ongelmat - - &Support - &Tuki + + Open release notes website + Avaa julkaisutietojen verkkosivusto - - &About - &Tietoa + + &Release notes + &Julkaisutiedot - - <h1>Welcome to the %1 installer.</h1> - <h1>Tervetuloa %1 -asennusohjelmaan.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1> + <h1>Tervetuloa Calamares-asennusohjelmaan %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Tervetuloa %1 asennukseen.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Tervetuloa Calamares-asennusohjelmaan %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Tervetuloa %1 -asennusohjelmaan.</h1> + + + + %1 support + %1 tuki + + + About %1 setup Tietoja %1 asetuksista - + About %1 installer - Tietoa %1 asennusohjelmasta + Tietoa %1-asennusohjelmasta - + <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. - <h1>%1</h1><br/><strong>%2<br/>- %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Kiitokset <a href="https://calamares.io/team/">Calamares-tiimille</a> ja <a href="https://www.transifex.com/calamares/calamares/">Calamares kääntäjille</a>.<br/><br/><a href="https://calamares.io/">Calamaresin</a> kehitystä sponsoroi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 tuki + <h1>%1</h1><br/><strong>%2<br/>- %3</strong><br/><br/>Tekijänoikeus 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Tekijänoikeus 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Kiitokset <a href="https://calamares.io/team/">Calamares-tiimille</a> ja <a href="https://www.transifex.com/calamares/calamares/">Calamares-kääntäjille</a>.<br/><br/><a href="https://calamares.io/">Calamaresin</a> kehitystä sponsoroi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Tervetuloa @@ -3682,84 +4082,217 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. WelcomeViewStep - + Welcome Tervetuloa + + ZfsJob + + + Create ZFS pools and datasets + Luo ZFS-poolit ja tietojoukot + + + + Failed to create zpool on + Zpoolin luominen epäonnistui + + + + Configuration Error + Määritysvirhe + + + + No partitions are available for ZFS. + ZFS:lle ei ole saatavilla osioita. + + + + Internal data missing + Sisäiset tiedot puuttuvat + + + + + Failed to create zpool + Epäonnistui zpoolin luominen + + + + Failed to create dataset + Tietojoukon luominen epäonnistui + + + + The output was: + Tulos oli: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <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/> + Kiitokset <a href='https://calamares.io/team/'>the Calamares tiimille</a> + ja <a href='https://www.transifex.com/calamares/calamares/'>Calamares + kääntäjäille</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + ohjelmistokehitystä sponsoroi <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. - + Back - + Takaisin + + + + calamares-sidebar + + + Show debug information + Näytä virheenkorjaustiedot + + + + finishedq + + + Installation Completed + Asennus suoritettu + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 on asennettu tietokoneellesi.<br/> + Voit käynnistää nyt uuteen järjestelmään tai jatkaa Live-ympäristön käyttöä. + + + + Close Installer + Sulje asennusohjelma + + + + Restart System + Käynnistä järjestelmä + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Täydellinen loki asennuksesta on saatavana nimellä install.log Live-käyttäjän kotihakemistossa.<br/> + Tämä loki on kopioitu /var/log/installation.log-tiedostoon.</p> + + + + finishedq@mobile + + + Installation Completed + Asennus suoritettu + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 on asennettu tietokoneellesi.<br/> + Voit nyt käynnistää uudelleen. + + + + Close + Sulje + + + + Restart + Käynnistä + + + + i18n + + + <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>. + <h1>Kielet</h1> </br> + Järjestelmän maa-asetus vaikuttaa komentorivin käyttöliittymän kieleen ja merkistöön. Nykyinen asetus on <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Maa-asetukset</h1> </br> + Järjestelmän maa-asetus vaikuttaa numeroiden ja päivämäärien muotoihin. Nykyinen asetus on <strong>%1</strong>. + + + + Back + Takaisin keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Jos haluat aktivoida näppäimistön esikatselun, valitse asettelu. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Näppäimistön malli: - - Refresh - - - - - + Layouts - + Asettelut - - - Keyboard Layout - + + Type here to test your keyboard + Kirjoita tähän testaksesi näppäimistöäsi. - - Models - - - - + Variants - + Vaihtoehdot + + + localeq - - Test your keyboard - + + Change + Vaihda notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3767,34 +4300,262 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä. - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice on tehokas ja ilmainen toimistopaketti, jota käyttävät miljoonat ihmiset ympäri maailmaa. Sisältää useita sovelluksia, joka tekee siitä markkinoiden monipuolisimman avoimen lähdekoodin toimistopaketin.<br/> + Oletusvalinta. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Jos et halua asentaa toimistopakettia, valitse "Ei toimistopakettia". Voit aina lisätä myöhemmin yhden (tai useamman) asennettuun järjestelmään tarpeen mukaan. + + + + No Office Suite + Ei toimistopakettia + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Luo minimaalinen työpöydän asennus, poista kaikki ylimääräiset sovellukset ja päätät myöhemmin, mitä haluat lisätä järjestelmääsi. Tällaisessa asennuksessa ei ole esimerkiksi toimistopakettia, mediasoittimia, kuvien katseluohjelmaa tai tulostintukea. Vain työpöytä, tiedostoselain, paketinhallinta, tekstieditori ja verkkoselain. + + + + Minimal Install + Minimaalinen asennus + + + + Please select an option for your install, or use the default: LibreOffice included. + Valitse asennuksen vaihtoehto tai käytä oletusta: LibreOffice sisältyy toimitukseen. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Tämä esimerkki QML-tiedostosta, jossa näkyvät RichText-asetukset, joissa on liukuva sisältö.</p> + + <p>QML Richtext voi käyttää HTML-tunnisteita, liukuva sisältö on hyödyllinen kosketusnäytöissä.</p> + + <p><b>Tämä on lihavoitu teksti</b></p> + <p><i>Tämä on kursivoitu teksti</i></p> + <p><u>Tämä on alleviivattu teksti</u></p> + <p><center>Tämä teksti on keskitetty</center></p> + <p><s>Tämä on yliviivattu</s></p> + + <p>Koodiesimerkki: + <code>ls -l /home</code></p> + + <p><b>Listat:</b></p> + <ul> + <li>Intel CPU järjestelmät</li> + <li>AMD CPU järjestelmät</li> + </ul> + + <p>Pystysuuntainen vieritys on säädettävissä, leveys nyt 10.</p> + + + + Back + Takaisin + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Valitse käyttäjänimi kirjautumiseen ja järjestelmänvalvojan tehtävien suorittamiseen + + + + What is your name? + Mikä on nimesi? + + + + Your Full Name + Koko nimesi + + + + What name do you want to use to log in? + Mitä nimeä haluat käyttää sisäänkirjautumisessa? + + + + Login Name + Kirjautumisnimi + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Jos tätä tietokonetta käyttää useampi kuin yksi henkilö, voit luoda useita tilejä asennuksen jälkeen. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. + + + + root is not allowed as username. + root ei ole sallittu käyttäjänimeksi. + + + + What is the name of this computer? + Mikä on tämän tietokoneen nimi? + + + + Computer Name + Tietokoneen nimi + + + + This name will be used if you make the computer visible to others on a network. + Tätä nimeä käytetään, jos teet tietokoneen näkyväksi verkon muille käyttäjille. + + + + localhost is not allowed as hostname. + localhost ei ole sallittu koneen nimeksi. + + + + Choose a password to keep your account safe. + Valitse salasana pitääksesi tilisi turvallisena. + + + + Password + Salasana + + + + Repeat Password + Toista salasana + + + + 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. + Syötä sama salasana kahdesti, jotta se voidaan tarkistaa kirjoittamisvirheiden varalta. Hyvä salasana sisältää sekoituksen kirjaimia, numeroita ja välimerkkejä. Vähintään kahdeksan merkkiä pitkä ja se on vaihdettava säännöllisin väliajoin. + + + + Validate passwords quality + Tarkista salasanojen laatu + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Kun tämä valintaruutu on valittu, salasanan vahvuus tarkistetaan, etkä voi käyttää heikkoa salasanaa. + + + + Log in automatically without asking for the password + Kirjaudu automaattisesti ilman salasanaa + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Vain kirjaimet, numerot, alaviiva ja väliviiva ovat sallittuja, vähintään kaksi merkkiä. + + + + Reuse user password as root password + Käytä käyttäjän salasanaa myös root-salasanana + + + + Use the same password for the administrator account. + Käytä pääkäyttäjän tilillä samaa salasanaa. + + + + Choose a root password to keep your account safe. + Valitse root-salasana, jotta tilisi pysyy turvassa. + + + + Root Password + Root-salasana + + + + Repeat Root Password + Toista Root-salasana + + + + Enter the same password twice, so that it can be checked for typing errors. + Syötä sama salasana kahdesti, jotta se voidaan tarkistaa kirjoitusvirheiden varalta. + + + + welcomeq + + + <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> + <h3>Tervetuloa %1 <quote>%2</quote> -asentajaan</h3> + <p>Tämä ohjelma esittää sinulle joitain kysymyksiä liittyen järjestelmään %1 ja asentaa sen tietokoneellesi.</p> + + + About Tietoa - + Support Tuki - + Known issues Tunnetut ongelmat - + Release notes Julkaisutiedot - + Donate Lahjoita diff --git a/lang/calamares_fr.ts b/lang/calamares_fr.ts index 129d1dea0..58fa8f79d 100644 --- a/lang/calamares_fr.ts +++ b/lang/calamares_fr.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Gérer les paramètres de montage automatique + + BootInfoWidget - + 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. L'<strong>environnement de démarrage</strong> de ce système.<br><br>Les anciens systèmes x86 supportent uniquement <strong>BIOS</strong>.<br>Les systèmes récents utilisent habituellement <strong>EFI</strong>, mais peuvent également afficher BIOS s'ils sont démarrés en mode de compatibilité. - + 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. Ce système a été initialisé avec un environnement de démarrage <strong>EFI</strong>.<br><br>Pour configurer le démarrage depuis un environnement EFI, cet installateur doit déployer un chargeur de démarrage, comme <strong>GRUB</strong> ou <strong>systemd-boot</strong> sur une <strong>partition système EFI</strong>. Ceci est automatique, à moins que vous n'ayez sélectionné le partitionnement manuel, auquel cas vous devez en choisir une ou la créer vous même. - + 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. Ce système a été initialisé avec un environnement de démarrage <strong>BIOS</strong>.<br><br>Pour configurer le démarrage depuis un environnement BIOS, cet installateur doit déployer un chargeur de démarrage, comme <strong>GRUB</strong> ou <strong>systemd-boot</strong> au début d'une partition ou bien sur le <strong>Master Boot Record</strong> au début de la table des partitions (méthode privilégiée). Ceci est automatique, à moins que vous n'ayez sélectionné le partitionnement manuel, auquel cas vous devez le configurer vous-même. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record de %1 - + Boot Partition Partition de démarrage - + System Partition - Partition Système + Partition système - + Do not install a boot loader Ne pas installer de chargeur de démarrage - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Page blanche @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulaire - + GlobalStorage Stockage global - + JobQueue File de travail - + Modules Modules - + Type: Type : - - + + none aucun - + Interface: - Interface: + Interface : - - Tools - Outils + + Crashes Calamares, so that Dr. Konqui can look at it. + Accidents de Calamares, pour que le Dr. Konqui puisse les regarder. - + + Reloads the stylesheet from the branding directory. + Recharge la feuille de style à partir du répertoire de personnalisation. + + + + Uploads the session log to the configured pastebin. + Télécharge le journal de session dans le pastebin configuré. + + + + Send Session Log + Envoyer le journal de session + + + Reload Stylesheet Recharger la feuille de style - - Widget Tree - Arbre de Widget + + Displays the tree of widget names in the log (for stylesheet debugging). + Affiche l'arborescence des noms de widgets dans le journal (pour le débogage de la feuille de style). - + + Widget Tree + Arbre de widget + + + Debug information Informations de dépannage @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Configurer - + Install Installer @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) La tâche a échoué (%1) - + Programmed job failure was explicitly requested. L'échec de la tâche programmée a été explicitement demandée. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Fait @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Tâche d'exemple (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Exécuter la commande '%1' dans le système cible. - + Run command '%1'. Exécuter la commande '%1'. - + Running command %1 %2 Exécution de la commande %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Exécution de l'opération %1. - + Bad working directory path Chemin du répertoire de travail invalide - + Working directory %1 for python job %2 is not readable. Le répertoire de travail %1 pour le job python %2 n'est pas accessible en lecture. - + Bad main script file Fichier de script principal invalide - + Main script file %1 for python job %2 is not readable. Le fichier de script principal %1 pour la tâche python %2 n'est pas accessible en lecture. - + Boost.Python error in job "%1". Erreur Boost.Python pour le job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Chargement... - + QML Step <i>%1</i>. - + Étape QML <i>%1</i>. - + Loading failed. Échec de chargement Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + La vérification des prérequis pour le module <i>%1</i> est terminée. + - + Waiting for %n module(s). En attente de %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) (%n seconde(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. La vérification des prérequis système est terminée. @@ -252,247 +285,241 @@ Calamares::ViewManager - - &Back - &Précédent - - - - &Next - &Suivant - - - - &Cancel - &Annuler - - - - Cancel setup without changing the system. - Annuler la configuration sans toucher au système. - - - - Cancel installation without changing the system. - Annuler l'installation sans modifier votre système. - - - + Setup Failed Échec de la configuration - - Would you like to paste the install log to the web? - Voulez-vous copier le journal d'installation sur le Web ? + + Installation Failed + L'installation a échoué - - Install Log Paste URL - URL de copie du journal d'installation - - - - The upload was unsuccessful. No web-paste was done. - L'envoi a échoué. La copie sur le web n'a pas été effectuée. - - - - Calamares Initialization Failed - L'initialisation de Calamares a échoué - - - - %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. - %1 n'a pas pu être installé. Calamares n'a pas pu charger tous les modules configurés. C'est un problème avec la façon dont Calamares est utilisé par la distribution. - - - - <br/>The following modules could not be loaded: - Les modules suivants n'ont pas pu être chargés : - - - - Continue with installation? - Continuer avec l'installation ? - - - - 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> - Le programme de configuration de %1 est sur le point de procéder aux changements sur le disque afin de configurer %2.<br/> <strong>Vous ne pourrez pas annulez ces changements.</strong> - - - - &Set up now - &Configurer maintenant - - - - &Set up - &Configurer - - - - &Install - &Installer - - - - Setup is complete. Close the setup program. - La configuration est terminée. Fermer le programme de configuration. - - - - Cancel setup? - Annuler la configuration ? - - - - Cancel installation? - Abandonner l'installation ? - - - - Do you really want to cancel the current setup process? -The setup program will quit and all changes will be lost. - Voulez-vous réellement abandonner le processus de configuration ? -Le programme de configuration se fermera et les changements seront perdus. - - - - Do you really want to cancel the current install process? -The installer will quit and all changes will be lost. - Voulez-vous réellement abandonner le processus d'installation ? -L'installateur se fermera et les changements seront perdus. - - - - - &Yes - &Oui - - - - - &No - &Non - - - - &Close - &Fermer - - - - Continue with setup? - Poursuivre la configuration ? - - - - 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> - L'installateur %1 est sur le point de procéder aux changements sur le disque afin d'installer %2.<br/> <strong>Vous ne pourrez pas annulez ces changements.<strong> - - - - &Install now - &Installer maintenant - - - - Go &back - &Retour - - - - &Done - &Terminé - - - - The installation is complete. Close the installer. - L'installation est terminée. Fermer l'installateur. - - - + Error Erreur - - Installation Failed - L'installation a échoué + + &Yes + &Oui + + + + &No + &Non + + + + &Close + &Fermer + + + + Install Log Paste URL + URL de copie du journal d'installation + + + + The upload was unsuccessful. No web-paste was done. + L'envoi a échoué. La copie sur le web n'a pas été effectuée. + + + + Install log posted to + +%1 + +Link copied to clipboard + Journal d'installation publié sur + +%1 + +Lien copié dans le presse-papiers + + + + Calamares Initialization Failed + L'initialisation de Calamares a échoué + + + + %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. + %1 n'a pas pu être installé. Calamares n'a pas pu charger tous les modules configurés. C'est un problème avec la façon dont Calamares est utilisé par la distribution. + + + + <br/>The following modules could not be loaded: + <br/>Les modules suivants n'ont pas pu être chargés : + + + + Continue with setup? + Poursuivre la configuration ? + + + + Continue with installation? + Continuer avec l'installation ? + + + + 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> + Le programme de configuration de %1 est sur le point de procéder aux changements sur le disque afin de configurer %2.<br/> <strong>Vous ne pourrez pas annulez ces changements.</strong> + + + + 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> + L'installateur %1 est sur le point de procéder aux changements sur le disque afin d'installer %2.<br/> <strong>Vous ne pourrez pas annulez ces changements.<strong> + + + + &Set up now + &Configurer maintenant + + + + &Install now + &Installer maintenant + + + + Go &back + &Retour + + + + &Set up + &Configurer + + + + &Install + &Installer + + + + Setup is complete. Close the setup program. + La configuration est terminée. Fermer le programme de configuration. + + + + The installation is complete. Close the installer. + L'installation est terminée. Fermer l'installateur. + + + + Cancel setup without changing the system. + Annuler la configuration sans toucher au système. + + + + Cancel installation without changing the system. + Annuler l'installation sans modifier votre système. + + + + &Next + &Suivant + + + + &Back + &Précédent + + + + &Done + &Terminé + + + + &Cancel + &Annuler + + + + Cancel setup? + Annuler la configuration ? + + + + Cancel installation? + Abandonner l'installation ? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + Voulez-vous vraiment abandonner le processus de configuration ? +Le programme de configuration se fermera et les changements seront perdus. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + Voulez-vous vraiment abandonner le processus d'installation ? +L'installateur se fermera et les changements seront perdus. CalamaresPython::Helper - + Unknown exception type Type d'exception inconnue - + unparseable Python error Erreur Python non analysable - + unparseable Python traceback Traçage Python non exploitable - + Unfetchable Python error. Erreur Python non rapportable. - - CalamaresUtils - - - Install log posted to: -%1 - Le journal d'installation a été posté sur : -%1 - - CalamaresWindow - - &Back - &Précédent - - - - &Next - &Suivant - - - - &Cancel - &Annuler - - - + %1 Setup Program Programme de configuration de %1 - + %1 Installer Installateur %1 + + + ChangeFilesystemLabelJob - - Show debug information - Afficher les informations de dépannage + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Mettre le nom du système de fichier <strong>%1</strong> à la partition <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Le programme d'installation n'a pas pu mettre à jour la table de partitionnement sur le disque '%1'. CheckerContainer - + Gathering system information... Récupération des informations système... @@ -500,157 +527,197 @@ L'installateur se fermera et les changements seront perdus. ChoicePage - + Form Formulaire - - After: - Après: - - - - Boot loader location: - Emplacement du chargeur de démarrage: - - - + Select storage de&vice: - Sélectionnez le support de sto&ckage : + Sélectionner le support de sto&ckage : - - - - + + + + Current: Actuel : - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Après : - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Partitionnement manuel</strong><br/>Vous pouvez créer ou redimensionner vous-même des partitions. + + + Reuse %1 as home partition for %2. Réutiliser %1 comme partition home pour %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - <strong>Sélectionnez une partition à réduire, puis faites glisser la barre du bas pour redimensionner</strong> + <strong>Sélectionner une partition à réduire, puis faites glisser la barre du bas pour redimensionner</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - %1 va être réduit à %2Mio et une nouvelle partition de %3Mio va être créée pour %4. + %1 va être réduit à %2 Mio et une nouvelle partition de %3 Mio va être créée pour %4. - + + Boot loader location: + Emplacement du chargeur de démarrage : + + + <strong>Select a partition to install on</strong> <strong>Sélectionner une partition pour l'installation</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Une partition système EFI n'a pas pu être trouvée sur ce système. Veuillez retourner à l'étape précédente et sélectionner le partitionnement manuel pour configurer %1. - + The EFI system partition at %1 will be used for starting %2. La partition système EFI sur %1 va être utilisée pour démarrer %2. - + EFI system partition: Partition système EFI : - + 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. Ce périphérique de stockage ne semble pas contenir de système d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Effacer le disque</strong><br/>Ceci va <font color="red">effacer</font> toutes les données actuellement présentes sur le périphérique de stockage sélectionné. - - 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. - Ce périphérique de stockage contient %1. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - - - - No Swap - Aucun Swap - - - - Reuse Swap - Réutiliser le Swap - - - - Swap (no Hibernate) - Swap (sans hibernation) - - - - Swap (with Hibernate) - Swap (avec hibernation) - - - - Swap to file - Swap dans un fichier - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installer à côté</strong><br/>L'installateur va réduire une partition pour faire de la place pour %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Remplacer une partition</strong><br>Remplace une partition par %1. - + + 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. + Ce périphérique de stockage contient %1. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. + + + 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. Ce périphérique de stockage contient déjà un système d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. - + 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. Ce péiphérique de stockage contient déjà plusieurs systèmes d'exploitation. Que souhaitez-vous faire ?<br/>Vous pourrez relire et confirmer vos choix avant que les modifications soient effectuées sur le périphérique de stockage. + + + 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/> + Le périphérique de stockage contient déjà un système d'exploitation, mais la table de partition <strong>%1</strong> est différente de celle nécessaire <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Une des partitions de ce périphérique de stockage est <strong>montée</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Ce périphérique de stockage fait partie d'une grappe <strong>RAID inactive</strong>. + + + + No Swap + Aucun Swap + + + + Reuse Swap + Réutiliser le Swap + + + + Swap (no Hibernate) + Swap (sans hibernation) + + + + Swap (with Hibernate) + Swap (avec hibernation) + + + + Swap to file + Swap dans un fichier + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Retirer les montages pour les opérations de partitionnement sur %1 - + Clearing mounts for partitioning operations on %1. Libération des montages pour les opérations de partitionnement sur %1. - + Cleared all mounts for %1 Tous les montages ont été retirés pour %1 @@ -658,22 +725,17 @@ L'installateur se fermera et les changements seront perdus. ClearTempMountsJob - + Clear all temporary mounts. Supprimer les montages temporaires. - + Clearing all temporary mounts. Libération des montages temporaires. - - Cannot get list of temporary mounts. - Impossible de récupérer la liste des montages temporaires. - - - + Cleared all temporary mounts. Supprimer les montages temporaires. @@ -681,18 +743,18 @@ L'installateur se fermera et les changements seront perdus. CommandList - - + + Could not run command. La commande n'a pas pu être exécutée. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. La commande est exécutée dans l'environnement hôte et a besoin de connaître le chemin racine, mais aucun point de montage racine n'est défini. - + The command needs to know the user's name, but no username is defined. La commande a besoin de connaître le nom de l'utilisateur, mais aucun nom d'utilisateur n'est défini. @@ -700,100 +762,235 @@ L'installateur se fermera et les changements seront perdus. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Cet ordinateur ne satisfait pas les minimum prérequis pour configurer %1.<br/>La configuration ne peut pas continuer. <a href="#details">Détails...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Cet ordinateur ne satisfait pas les minimum prérequis pour installer %1.<br/>L'installation ne peut pas continuer. <a href="#details">Détails...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Cet ordinateur ne satisfait pas certains des prérequis recommandés pour configurer %1.<br/>La configuration peut continuer, mais certaines fonctionnalités pourraient être désactivées. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Cet ordinateur ne satisfait pas certains des prérequis recommandés pour installer %1.<br/>L'installation peut continuer, mais certaines fonctionnalités pourraient être désactivées. - - - - This program will ask you some questions and set up %2 on your computer. - Ce programme va vous poser quelques questions et configurer %2 sur votre ordinateur. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Bienvenue dans le programme de configuration Calamares pour %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Bienvenue dans la configuration de %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - Bien dans l'installateur Calamares pour %1. - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Bienvenue dans l'installateur de %1.</h1> - - - + Set keyboard model to %1.<br/> Configurer le modèle de clavier à %1.<br/> - + Set keyboard layout to %1/%2. Configurer la disposition clavier à %1/%2. - + + Set timezone to %1/%2. + Configurer timezone sur %1/%2. + + + The system language will be set to %1. La langue du système sera réglée sur %1. - + The numbers and dates locale will be set to %1. Les nombres et les dates seront réglés sur %1. - - Set timezone to %1/%2.<br/> - Configurer le fuseau horaire à %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Installation réseau. (Désactivée : configuration incorrecte) - + Network Installation. (Disabled: Received invalid groups data) Installation par le réseau. (Désactivée : données de groupes reçues invalides) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) + Installation réseau. (Désactivé : erreur interne) + + + + Network Installation. (Disabled: No package list) + Installation réseau. (Désactivé : pas de liste de paquets) + + + + Package selection + Sélection des paquets + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Installation par le réseau (Désactivée : impossible de récupérer les listes de paquets, vérifier la connexion réseau) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Cet ordinateur ne satisfait pas les minimum prérequis pour configurer %1.<br/>La configuration ne peut pas continuer. <a href="#details">Détails...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Cet ordinateur ne satisfait pas les minimum prérequis pour installer %1.<br/>L'installation ne peut pas continuer. <a href="#details">Détails...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Cet ordinateur ne satisfait pas certains des prérequis recommandés pour configurer %1.<br/>La configuration peut continuer, mais certaines fonctionnalités pourraient être désactivées. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Cet ordinateur ne satisfait pas certains des prérequis recommandés pour installer %1.<br/>L'installation peut continuer, mais certaines fonctionnalités pourraient être désactivées. + + + + This program will ask you some questions and set up %2 on your computer. + Ce programme va vous poser quelques questions et configurer %2 sur votre ordinateur. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Bienvenue dans le programme de configuration Calamares pour %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Bienvenue dans la configuration de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Bienvenue dans l'installateur Calamares pour %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Bienvenue dans l'installateur de %1</h1> + + + + Your username is too long. + Votre nom d'utilisateur est trop long. + + + + '%1' is not allowed as username. + '%1' n'est pas autorisé comme nom d'utilisateur. + + + + Your username must start with a lowercase letter or underscore. + Votre nom d'utilisateur doit commencer avec une lettre minuscule ou un underscore. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Seuls les minuscules, nombres, underscores et tirets sont autorisés. + + + + Your hostname is too short. + Le nom d'hôte est trop petit. + + + + Your hostname is too long. + Le nom d'hôte est trop long. + + + + '%1' is not allowed as hostname. + '%1' n'est pas autorisé comme nom d'hôte. + + + + Only letters, numbers, underscore and hyphen are allowed. + Seuls les lettres, nombres, underscores et tirets sont autorisés. + + + + Your passwords do not match! + Vos mots de passe ne correspondent pas ! + + + + OK! + OK! + + + + Setup Failed + Échec de la configuration + + + + Installation Failed + L'installation a échoué + + + + The setup of %1 did not complete successfully. + La configuration de %1 n'a pas abouti. + + + + The installation of %1 did not complete successfully. + L’installation de %1 n’a pas abouti. + + + + Setup Complete + Configuration terminée + + + + Installation Complete + Installation terminée + + + + The setup of %1 is complete. + La configuration de %1 est terminée. + + + + The installation of %1 is complete. + L'installation de %1 est terminée. + + + + Package Selection + Sélection des paquets + + + + Please pick a product from the list. The selected product will be installed. + Merci de sélectionner un produit de la liste. Le produit sélectionné sera installé. + + + + Install option: <strong>%1</strong> - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Installation par le réseau (Désactivée : impossible de récupérer leslistes de paquets, vérifiez la connexion réseau) + + None + + + + + Summary + Résumé + + + + This is an overview of what will happen once you start the setup procedure. + Ceci est un aperçu de ce qui va arriver lorsque vous commencerez la configuration. + + + + This is an overview of what will happen once you start the install procedure. + Ceci est un aperçu de ce qui va arriver lorsque vous commencerez l'installation. ContextualProcessJob - + Contextual Processes Job Tâche des processus contextuels @@ -801,100 +998,136 @@ L'installateur se fermera et les changements seront perdus. CreatePartitionDialog - + Create a Partition Créer une partition - - MiB - Mio - - - - Partition &Type: - Type de partition : - - - - &Primary - &Primaire - - - - E&xtended - É&tendue - - - - Fi&le System: - Sy&stème de fichiers: - - - - LVM LV name - Gestion par volumes logiques : Nom du volume logique - - - - Flags: - Drapeaux: - - - - &Mount Point: - Point de &Montage : - - - + Si&ze: Ta&ille : - + + MiB + Mio + + + + Partition &Type: + Type de partition : + + + + Primar&y + + + + + E&xtended + É&tendue + + + + Fi&le System: + Sy&stème de fichiers : + + + + LVM LV name + Gestion par volumes logiques : Nom du volume logique + + + + &Mount Point: + Point de &montage : + + + + Flags: + Drapeaux : + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt Chi&ffrer - + Logical Logique - + Primary Primaire - + GPT GPT - + Mountpoint already in use. Please select another one. Le point de montage est déjà utilisé. Merci d'en sélectionner un autre. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Créer une nouvelle partition %1 Mio sur %3 (%2) avec les entrées %4. + + + + Create new %1MiB partition on %3 (%2). + Créer une nouvelle partition %1 Mio sur %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - Créer une nouvelle partition de %2Mio sur %4 (%3) avec le système de fichier %1. + Créer une nouvelle partition de %2 Mio sur %4 (%3) avec le système de fichier %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Créer une nouvelle partition <strong>%1 Mio</strong> sur <strong>%3</strong> (%2) avec les entrées <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Créer une nouvelle partition <strong>%1 Mio</strong> sur <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - Créer une nouvelle partition de <strong>%2Mio</strong> sur <strong>%4</strong> (%3) avec le système de fichiers <strong>%1</strong>. + Créer une nouvelle partition de <strong>%2 Mio</strong> sur <strong>%4</strong> (%3) avec le système de fichiers <strong>%1</strong>. - + + Creating new %1 partition on %2. Création d'une nouvelle partition %1 sur %2. - + The installer failed to create partition on disk '%1'. Le programme d'installation n'a pas pu créer la partition sur le disque '%1'. @@ -902,27 +1135,27 @@ L'installateur se fermera et les changements seront perdus. CreatePartitionTableDialog - + Create Partition Table Créer une table de partitionnement - + Creating a new partition table will delete all existing data on the disk. Créer une nouvelle table de partitionnement supprimera toutes les données existantes sur le disque. - + What kind of partition table do you want to create? Quel type de table de partitionnement voulez-vous créer ? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) Table de partitionnement GUID (GPT) @@ -930,22 +1163,22 @@ L'installateur se fermera et les changements seront perdus. CreatePartitionTableJob - + Create new %1 partition table on %2. Créer une nouvelle table de partition %1 sur %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Créer une nouvelle table de partitions <strong>%1</strong> sur <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Création d'une nouvelle table de partitions %1 sur %2. - + The installer failed to create a partition table on %1. Le programme d'installation n'a pas pu créer la table de partitionnement sur le disque %1. @@ -953,68 +1186,64 @@ L'installateur se fermera et les changements seront perdus. CreateUserJob - + Create user %1 Créer l'utilisateur %1 - + Create user <strong>%1</strong>. Créer l'utilisateur <strong>%1</strong>. - - Creating user %1. - Création de l'utilisateur %1. + + Preserving home directory + Conserver le dossier home - - Sudoers dir is not writable. - Le répertoire Superutilisateur n'est pas inscriptible. + + + Creating user %1 + Création de l'utilisateur %1 - - Cannot create sudoers file for writing. - Impossible de créer le fichier sudoers en écriture. + + Configuring user %1 + Configuration de l'utilisateur %1 - - Cannot chmod sudoers file. - Impossible d'exécuter chmod sur le fichier sudoers. - - - - Cannot open groups file for reading. - Impossible d'ouvrir le fichier groups en lecture. + + Setting file permissions + Définition des autorisations de fichiers CreateVolumeGroupDialog - + Create Volume Group - Créer le Groupe de Volumes + Créer le groupe de volume CreateVolumeGroupJob - + Create new volume group named %1. Créer un nouveau groupe de volumes nommé %1. - + Create new volume group named <strong>%1</strong>. Créer un nouveau groupe de volumes nommé <strong>%1</strong>. - + Creating new volume group named %1. Création en cours du nouveau groupe de volumes nommé %1. - + The installer failed to create a volume group named '%1'. L'installateur n'a pas pu créer le groupe de volumes nommé %1. @@ -1022,18 +1251,18 @@ L'installateur se fermera et les changements seront perdus. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Désactiver le groupe de volume nommé %1. - + Deactivate volume group named <strong>%1</strong>. Désactiver le groupe de volumes nommé <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. L'installateur n'a pas pu désactiver le groupe de volumes nommé %1. @@ -1041,22 +1270,22 @@ L'installateur se fermera et les changements seront perdus. DeletePartitionJob - + Delete partition %1. Supprimer la partition %1. - + Delete partition <strong>%1</strong>. Supprimer la partition <strong>%1</strong>. - + Deleting partition %1. Suppression de la partition %1. - + The installer failed to delete partition %1. Le programme d'installation n'a pas pu supprimer la partition %1. @@ -1064,46 +1293,46 @@ L'installateur se fermera et les changements seront perdus. DeviceInfoWidget - - 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. - Le type de <strong>table de partitions</strong> sur le périphérique de stockage sélectionné.<br><br>Le seul moyen de changer le type de table de partitions est d'effacer et de recréer entièrement la table de partitions, ce qui détruit toutes les données sur le périphérique de stockage.<br>Cette installateur va conserver la table de partitions actuelle à moins de faire explicitement un autre choix.<br>Si vous n'êtes pas sûr, sur les systèmes modernes GPT est à privilégier. - - - + This device has a <strong>%1</strong> partition table. Ce périphérique utilise une table de partitions <strong>%1</strong>. - + 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. Ceci est un périphérique <strong>loop</strong>.<br><br>C'est un pseudo-périphérique sans table de partitions qui rend un fichier acccessible comme un périphérique de type block. Ce genre de configuration ne contient habituellement qu'un seul système de fichiers. - + 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. L'installateur <strong>n'a pas pu détecter de table de partitions</strong> sur le périphérique de stockage sélectionné.<br><br>Le périphérique ne contient pas de table de partition, ou la table de partition est corrompue ou d'un type inconnu.<br>Cet installateur va créer une nouvelle table de partitions pour vous, soit automatiquement, soit au travers de la page de partitionnement manuel. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ceci est le type de tables de partition recommandé pour les systèmes modernes qui démarrent depuis un environnement <strong>EFI</strong>. - + <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. <br><br>Ce type de table de partitions est uniquement envisageable que sur d'anciens systèmes qui démarrent depuis un environnement <strong>BIOS</strong>. GPT est recommandé dans la plupart des autres cas.<br><br><strong>Attention : </strong> la table de partitions MBR est un standard de l'ère MS-DOS.<br>Seules 4 partitions <em>primaires</em>peuvent être créées, et parmi ces 4, l'une peut être une partition <em>étendue</em>, qui à son tour peut contenir plusieurs partitions <em>logiques</em>. + + + 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. + Le type de <strong>table de partitions</strong> sur le périphérique de stockage sélectionné.<br><br>Le seul moyen de changer le type de table de partitions est d'effacer et de recréer entièrement la table de partitions, ce qui détruit toutes les données sur le périphérique de stockage.<br>Cette installateur va conserver la table de partitions actuelle à moins de faire explicitement un autre choix.<br>Si vous n'êtes pas sûr, sur les systèmes modernes GPT est à privilégier. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1341,17 @@ L'installateur se fermera et les changements seront perdus. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Inscrire la configuration LUKS pour Dracut sur %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Ne pas enreigstrer la configuration LUKS pour Dracut : la partition "/" n'est pas chiffrée - + Failed to open %1 Impossible d'ouvrir %1 @@ -1130,7 +1359,7 @@ L'installateur se fermera et les changements seront perdus. DummyCppJob - + Dummy C++ Job Tâche C++ fictive @@ -1138,123 +1367,167 @@ L'installateur se fermera et les changements seront perdus. EditExistingPartitionDialog - + Edit Existing Partition Éditer une partition existante - - Content: - Contenu : + + Con&tent: + - + &Keep &Conserver - + Format Formater - + Warning: Formatting the partition will erase all existing data. Attention : le formatage de cette partition effacera toutes les données existantes. - + &Mount Point: - Point de &Montage : - - - - Si&ze: - Ta&ille: + Point de &montage : + Si&ze: + Ta&ille : + + + MiB Mio - + Fi&le System: - Sys&tème de fichiers: + Sys&tème de fichiers : - + Flags: - Drapeaux: + Drapeaux : - - Mountpoint already in use. Please select another one. - Le point de montage est déjà utilisé. Merci d'en sélectionner un autre. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formulaire - + En&crypt system Chi&ffrer le système - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - Phrase de passe + Phrase secrète - + Confirm passphrase - Confirmez la phrase de passe + Confirmer la phrase secrète - + + Please enter the same passphrase in both boxes. - Merci d'entrer la même phrase de passe dans les deux champs. + Merci d'entrer la même phrase secrète dans les deux champs. + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Voulez-vous copier le journal d'installation sur le Web ? FillGlobalStorageJob - + Set partition information Configurer les informations de la partition - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Installer %1 sur la <strong>nouvelle</strong> partition système %2 avec les fonctionnalités <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Installer %1 sur le <strong>nouveau</strong> système de partition %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Configurer la <strong>nouvelle</strong> partition %2 avec le point de montage <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Configurer la <strong>nouvelle</strong> partition %2 avec le point de montage <strong>%1</strong> et les fonctionnalités <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Configurer la <strong>nouvelle</strong> partition %2 avec le point de montage <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Installer %2 sur la partition système %3 <strong>%1</strong> avec les fonctionnalités <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Configurer la partition %3 <strong>%1</strong> avec le point de montage <strong>%2</strong> et les fonctionnalités <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Configurer la partition %3 <strong>%1</strong> avec le point de montage <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Installer %2 sur la partition système %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Configurer la partition %3 <strong>%1</strong> avec le point de montage <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Installer le chargeur de démarrage sur <strong>%1</strong>. - + Setting up mount points. Configuration des points de montage. @@ -1262,93 +1535,81 @@ L'installateur se fermera et les changements seront perdus. FinishedPage - + Form Formulaire - + &Restart now &Redémarrer maintenant - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Configuration terminée.</h1><br/>%1 a été configuré sur votre ordinateur.<br/>Vous pouvez maintenant utiliser votre nouveau système. - + <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> <html><head/><body><p>En sélectionnant cette option, votre système redémarrera immédiatement quand vous cliquerez sur <span style=" font-style:italic;">Terminé</span> ou fermerez le programme de configuration.</p></body></html> - + <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. <h1>Installation terminée.</h1><br/>%1 a été installé sur votre ordinateur.<br/>Vous pouvez redémarrer sur le nouveau système, ou continuer d'utiliser l'environnement actuel %2 . - + <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> <html><head/><body><p>En sélectionnant cette option, votre système redémarrera immédiatement quand vous cliquerez sur <span style=" font-style:italic;">Terminé</span> ou fermerez l'installateur.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Échec de la configuration</h1><br/>%1 n'a pas été configuré sur cet ordinateur.<br/>Le message d'erreur était : %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installation échouée</h1><br/>%1 n'a pas été installée sur cet ordinateur.<br/>Le message d'erreur était : %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Terminer + + + FinishedViewStep - - Setup Complete - Configuration terminée - - - - Installation Complete - Installation terminée - - - - The setup of %1 is complete. - La configuration de %1 est terminée. - - - - The installation of %1 is complete. - L'installation de %1 est terminée. + + Finish + Terminer FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formater la partition %1 (système de fichiers : %2, taille : %3 Mio) sur %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formater la partition <strong>%1</strong> de <strong>%3Mio</strong>avec le système de fichier <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatage de la partition %1 avec le système de fichiers %2. - + The installer failed to format partition %1 on disk '%2'. Le programme d'installation n'a pas pu formater la partition %1 sur le disque '%2'. @@ -1356,72 +1617,72 @@ L'installateur se fermera et les changements seront perdus. GeneralRequirements - + has at least %1 GiB available drive space a au moins %1 Gio d'espace disque disponible - + There is not enough drive space. At least %1 GiB is required. Il n'y a pas assez d'espace disque. Au moins %1 Gio sont requis. - + has at least %1 GiB working memory a au moins %1 Gio de mémoire vive - + The system does not have enough working memory. At least %1 GiB is required. Le système n'a pas assez de mémoire vive. Au moins %1 Gio sont requis. - + is plugged in to a power source est relié à une source de courant - + The system is not plugged in to a power source. Le système n'est pas relié à une source de courant. - + is connected to the Internet est connecté à Internet - + The system is not connected to the Internet. Le système n'est pas connecté à Internet. - + is running the installer as an administrator (root) a démarré l'installateur en tant qu'administrateur (root) - + The setup program is not running with administrator rights. Le programme de configuration ne dispose pas des droits administrateur. - + The installer is not running with administrator rights. L'installateur ne dispose pas des droits administrateur. - + has a screen large enough to show the whole installer a un écran assez large pour afficher l'intégralité de l'installateur - + The screen is too small to display the setup program. L'écran est trop petit pour afficher le programme de configuration. - + The screen is too small to display the installer. L'écran est trop petit pour afficher l'installateur. @@ -1429,7 +1690,7 @@ L'installateur se fermera et les changements seront perdus. HostInfoJob - + Collecting information about your machine. Récupération des informations à propos de la machine. @@ -1437,25 +1698,25 @@ L'installateur se fermera et les changements seront perdus. IDJob - - + + + - OEM Batch Identifier - Identifiant de Lot OEM + Identifiant de lot OEM - + Could not create directories <code>%1</code>. Impossible de créer les répertoires <code>%1</code>. - + Could not open file <code>%1</code>. Impossible d'ouvrir le fichier <code>%1</code>. - + Could not write to file <code>%1</code>. Impossible d'écrire dans le fichier <code>%1</code>. @@ -1463,7 +1724,7 @@ L'installateur se fermera et les changements seront perdus. InitcpioJob - + Creating initramfs with mkinitcpio. Création de l'initramfs avec mkinitcpio. @@ -1471,7 +1732,7 @@ L'installateur se fermera et les changements seront perdus. InitramfsJob - + Creating initramfs. création du initramfs @@ -1479,17 +1740,17 @@ L'installateur se fermera et les changements seront perdus. InteractiveTerminalPage - + Konsole not installed Konsole n'a pas été installé - + Please install KDE Konsole and try again! Veuillez installer KDE Konsole et réessayer! - + Executing script: &nbsp;<code>%1</code> Exécution en cours du script : &nbsp;<code>%1</code> @@ -1497,28 +1758,15 @@ L'installateur se fermera et les changements seront perdus. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Configurer le modèle de clavier à %1.<br/> - - - - Set keyboard layout to %1/%2. - Configurer la disposition clavier à %1/%2. - - KeyboardQmlViewStep - + Keyboard Clavier @@ -1526,7 +1774,7 @@ L'installateur se fermera et les changements seront perdus. KeyboardViewStep - + Keyboard Clavier @@ -1534,65 +1782,88 @@ L'installateur se fermera et les changements seront perdus. LCLocaleDialog - + System locale setting Paramètre régional - + 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>. Les paramètres régionaux systèmes affectent la langue et le jeu de caractère pour la ligne de commande et différents éléments d'interface.<br/>Le paramètre actuel est <strong>%1</strong>. - + &Cancel &Annuler - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Configuration du swap chiffrée. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulaire - + <h1>License Agreement</h1> <h1>Accord de Licence</h1> - + I accept the terms and conditions above. J'accepte les termes et conditions ci-dessus. - + Please review the End User License Agreements (EULAs). Merci de lire les Contrats de Licence Utilisateur Final (CLUFs). - + This setup procedure will install proprietary software that is subject to licensing terms. La procédure de configuration va installer des logiciels propriétaires qui sont soumis à des accords de licence. - + If you do not agree with the terms, the setup procedure cannot continue. Si vous ne validez pas ces accords, la procédure de configuration ne peut pas continuer. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. La procédure de configuration peut installer des logiciels propriétaires qui sont assujetti à des accords de licence afin de fournir des fonctionnalités supplémentaires et améliorer l'expérience utilisateur. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Si vous n'acceptez pas ces termes, les logiciels propriétaires ne seront pas installés, et des alternatives open source seront utilisés à la place. @@ -1600,7 +1871,7 @@ L'installateur se fermera et les changements seront perdus. LicenseViewStep - + License Licence @@ -1608,109 +1879,102 @@ L'installateur se fermera et les changements seront perdus. LicenseWidget - + URL: %1 - URL: %1 + URL : %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Pilote %1</strong><br/>par %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Pilote graphique %1</strong><br/><font color="Grey">par %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Module de navigateur %1</strong><br/><font color="Grey">par %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Codec %1</strong><br/><font color="Grey">par %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquet %1</strong><br/><font color="Grey">par %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">par %2</font> - + File: %1 Fichier : %1 - + + Hide license text + Masquer le texte de licence + + + Show the license text Afficher le texte de licence - + Open license agreement in browser. Ouvrir l'accord de licence dans le navigateur. - - - Hide license text - Masquer le texte de licence - LocalePage - - The system language will be set to %1. - La langue du système sera réglée sur %1. - - - - The numbers and dates locale will be set to %1. - Les nombres et les dates seront réglés sur %1. - - - + Region: Région : - + Zone: Zone : - - + + &Change... &Modifier... - - - Set timezone to %1/%2.<br/> - Configurer le fuseau horaire à %1/%2.<br/> - LocaleQmlViewStep - + Location Emplacement + + LocaleTests + + + Quit + Quiter + + LocaleViewStep - + Location Localisation @@ -1718,35 +1982,35 @@ L'installateur se fermera et les changements seront perdus. LuksBootKeyFileJob - + Configuring LUKS key file. Configuration de la clé de fichier LUKS. - - + + No partitions are defined. Aucune partition n'est définie. - - - + + + Encrypted rootfs setup error Erreur du chiffrement du setup rootfs - + Root partition %1 is LUKS but no passphrase has been set. - La partition racine %1 est LUKS mais aucune passphrase n'a été configurée. + La partition racine %1 est LUKS mais aucune phrase secrète n'a été configurée. - + Could not create LUKS key file for root partition %1. Impossible de créer le fichier de clé LUKS pour la partition racine %1. - + Could not configure LUKS key file on partition %1. La clé LUKS n'a pas pu être configurée sur la partition %1. @@ -1754,124 +2018,140 @@ L'installateur se fermera et les changements seront perdus. MachineIdJob - + Generate machine-id. Générer un identifiant machine. - + Configuration Error Erreur de configuration - + No root mount point is set for MachineId. Aucun point de montage racine n'est défini pour MachineId. + + Map + + + Timezone: %1 + Fuseau horaire : %1 + + + + 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. + Sélectionner votre emplacement préféré sur la carte pour que l'installateur vous suggère + les paramètres linguistiques et de fuseau horaire. Vous pouvez affiner les paramètres suggérés ci-dessous. Chercher sur la carte en la faisant glisser + et en utilisant les boutons +/- pour zoomer/dézoomer ou utiliser la molette de la souris. + + NetInstallViewStep - - + Package selection Sélection des paquets - + Office software Logiciel de bureau - + Office package - + Suite bureautique - + Browser software Logiciel de navigation - + Browser package - + Navigateur web - + Web browser Navigateur web - + Kernel Noyau - + Services Services - + Login Connexion - + Desktop Bureau - + Applications Applications - + Communication - + Communication - + Development - + Développement - + Office - + Bureautique - + Multimedia - + Multimédia - + Internet - + Internet - + Theming - + Thèmes - + Gaming - + Jeux - + Utilities - + Utilitaires NotesQmlViewStep - + Notes Notes @@ -1879,17 +2159,17 @@ L'installateur se fermera et les changements seront perdus. OEMPage - + Ba&tch: - Lo&amp;t: + Lo&amp;t : - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - <html><head/><body><p>Entrez ici un identifiant de lot. Celui-ci sera stocké sur le système cible.</p></body></html> + <html><head/><body><p>Saisir ici un identifiant de lot. Celui-ci sera stocké sur le système cible.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configuration OEM</h1><p>Calamares va utiliser les paramètres OEM pendant la configuration du système cible.</p></body></html> @@ -1897,260 +2177,317 @@ L'installateur se fermera et les changements seront perdus. OEMViewStep - + OEM Configuration Configuration OEM - + Set the OEM Batch Identifier to <code>%1</code>. Utiliser <code>%1</code> comme Identifiant de Lot OEM. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Fuseau horaire : %1 + + + + Select your preferred Zone within your Region. + Sélectionner votre zone préférée dans votre région. + + + + Zones + Zones + + + + You can fine-tune Language and Locale settings below. + Vous pouvez affiner les paramètres de langue et régionaux ci-dessous. + + PWQ - + Password is too short Le mot de passe est trop court - + Password is too long Le mot de passe est trop long - + Password is too weak Le mot de passe est trop faible - + Memory allocation error when setting '%1' Erreur d'allocation mémoire lors du paramétrage de '%1' - + Memory allocation error Erreur d'allocation mémoire - + The password is the same as the old one Le mot de passe est identique au précédent - + The password is a palindrome Le mot de passe est un palindrome - + The password differs with case changes only Le mot de passe ne diffère que sur la casse - + The password is too similar to the old one Le mot de passe est trop similaire à l'ancien - + The password contains the user name in some form Le mot de passe contient le nom d'utilisateur sous une certaine forme - + The password contains words from the real name of the user in some form Le mot de passe contient des mots provenant du nom d'utilisateur sous une certaine forme - + The password contains forbidden words in some form Le mot de passe contient des mots interdits sous une certaine forme - - The password contains less than %1 digits - Le mot de passe contient moins de %1 chiffres - - - + The password contains too few digits Le mot de passe ne contient pas assez de chiffres - - The password contains less than %1 uppercase letters - Le mot de passe contient moins de %1 lettres majuscules - - - + The password contains too few uppercase letters Le mot de passe ne contient pas assez de lettres majuscules - - - The password contains less than %1 lowercase letters - Le mot de passe contient moins de %1 lettres minuscules + + + The password contains fewer than %n lowercase letters + + Le mot de passe contient moins de %n lettres minuscules + Le mot de passe contient moins de %n lettres minuscules + - + The password contains too few lowercase letters Le mot de passe ne contient pas assez de lettres minuscules - - The password contains less than %1 non-alphanumeric characters - Le mot de passe contient moins de %1 caractères spéciaux - - - + The password contains too few non-alphanumeric characters Le mot de passe ne contient pas assez de caractères spéciaux - - The password is shorter than %1 characters - Le mot de passe fait moins de %1 caractères - - - + The password is too short Le mot de passe est trop court - - The password is just rotated old one - Le mot de passe saisit correspond avec un de vos anciens mot de passe - - - - The password contains less than %1 character classes - Le mot de passe contient moins de %1 classes de caractères - - - + The password does not contain enough character classes Le mot de passe ne contient pas assez de classes de caractères - - The password contains more than %1 same characters consecutively - Le mot de passe contient plus de %1 fois le même caractère à la suite - - - + The password contains too many same characters consecutively Le mot de passe contient trop de fois le même caractère à la suite - - The password contains more than %1 characters of the same class consecutively - Le mot de passe contient plus de %1 caractères de la même classe consécutivement - - - + The password contains too many characters of the same class consecutively - Le mot de passe contient trop de caractères de la même classe consécutivement + Le mot de passe contient trop de caractères de la même classe consécutive + + + + The password contains fewer than %n digits + + Le mot de passe contient moins de %n chiffres + Le mot de passe contient moins de %n chiffres + + + + + The password contains fewer than %n uppercase letters + + Le mot de passe contient moins de %n lettres majuscules + Le mot de passe contient moins de %n lettres majuscules + + + + + The password contains fewer than %n non-alphanumeric characters + + Le mot de passe contient moins de %n caractères non alphanumériques + Le mot de passe contient moins de %n caractères non alphanumériques + + + + + The password is shorter than %n characters + + Le mot de passe est plus court que %n caractères + Le mot de passe est plus court que %n caractères + - - The password contains monotonic sequence longer than %1 characters - Le mot de passe contient une séquence de caractères monotones de %1 caractères + + The password is a rotated version of the previous one + Le mot de passe est une version pivotée du précédent + + + + The password contains fewer than %n character classes + + Le mot de passe contient moins de %n classes de caractères + Le mot de passe contient moins de %n classes de caractères + + + + + The password contains more than %n same characters consecutively + + Le mot de passe contient plus de %n mêmes caractères consécutifs + Le mot de passe contient plus de %n mêmes caractères consécutifs + + + + + The password contains more than %n characters of the same class consecutively + + Le mot de passe contient plus de %n caractères de la même classe consécutive + Le mot de passe contient plus de %n caractères de la même classe consécutive + + + + + The password contains monotonic sequence longer than %n characters + + Le mot de passe contient une séquence monotone de plus de %n caractères + Le mot de passe contient une séquence monotone de plus de %n caractères + - + The password contains too long of a monotonic character sequence Le mot de passe contient une trop longue séquence de caractères monotones - + No password supplied Aucun mot de passe saisi - + Cannot obtain random numbers from the RNG device Impossible d'obtenir des nombres aléatoires depuis le générateur de nombres aléatoires - + Password generation failed - required entropy too low for settings La génération du mot de passe a échoué - L'entropie minimum nécessaire n'est pas satisfaite par les paramètres - + The password fails the dictionary check - %1 Le mot de passe a échoué le contrôle de qualité par dictionnaire - %1 - + The password fails the dictionary check Le mot de passe a échoué le contrôle de qualité par dictionnaire - + Unknown setting - %1 Paramètre inconnu - %1 - + Unknown setting Paramètre inconnu - + Bad integer value of setting - %1 Valeur incorrect du paramètre - %1 - + Bad integer value Mauvaise valeur d'entier - + Setting %1 is not of integer type Le paramètre %1 n'est pas de type entier - + Setting is not of integer type Le paramètre n'est pas de type entier - + Setting %1 is not of string type Le paramètre %1 n'est pas une chaîne de caractères - + Setting is not of string type Le paramètre n'est pas une chaîne de caractères - + Opening the configuration file failed L'ouverture du fichier de configuration a échouée - + The configuration file is malformed Le fichier de configuration est mal formé - + Fatal failure Erreur fatale - + Unknown error Erreur inconnue - + Password is empty Le mot de passe est vide @@ -2158,40 +2495,48 @@ L'installateur se fermera et les changements seront perdus. PackageChooserPage - + Form Formulaire - + Product Name - Nom du Produit + Nom du produit - + TextLabel - TextLabel + Étiquette de texte - + Long Product Description Description complète du produit - + Package Selection Sélection des paquets - + Please pick a product from the list. The selected product will be installed. Merci de sélectionner un produit de la liste. Le produit sélectionné sera installé. + + PackageChooserQmlViewStep + + + Packages + Paquets + + PackageChooserViewStep - + Packages Paquets @@ -2199,12 +2544,12 @@ L'installateur se fermera et les changements seront perdus. PackageModel - + Name Nom - + Description Description @@ -2212,17 +2557,17 @@ L'installateur se fermera et les changements seront perdus. Page_Keyboard - + Form Formulaire - + Keyboard Model: - Modèle Clavier : + Modèle de clavier : - + Type here to test your keyboard Saisir ici pour tester votre clavier @@ -2230,96 +2575,96 @@ L'installateur se fermera et les changements seront perdus. Page_UserSetup - + Form Formulaire - + What is your name? Quel est votre nom ? - - What name do you want to use to log in? - Quel nom souhaitez-vous utiliser pour la connexion ? - - - - Choose a password to keep your account safe. - Veuillez saisir le mot de passe pour sécuriser votre compte. - - - - - <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> - <small>Veuillez entrer le même mot de passe deux fois afin de vérifier qu'il n'y ait pas d'erreur de frappe. Un bon mot de passe doit contenir un mélange de lettres, de nombres et de caractères de ponctuation, contenir au moins huit caractères et être changé à des intervalles réguliers.</small> - - - - What is the name of this computer? - Quel est le nom de votre ordinateur ? - - - + Your Full Name Nom complet - + + What name do you want to use to log in? + Quel nom souhaitez-vous utiliser pour la connexion ? + + + login identifiant - + + What is the name of this computer? + Quel est le nom de votre ordinateur ? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ce nom sera utilisé pour rendre l'ordinateur visible des autres sur le réseau.</small> - + Computer Name Nom de l'ordinateur - - + + Choose a password to keep your account safe. + Veuillez saisir le mot de passe pour sécuriser votre compte. + + + + + <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> + <small>Veuillez entrer le même mot de passe deux fois afin de vérifier qu'il n'y ait pas d'erreur de frappe. Un bon mot de passe doit contenir un mélange de lettres, de nombres et de caractères de ponctuation, contenir au moins huit caractères et être changé à des intervalles réguliers.</small> + + + + Password Mot de passe - - + + Repeat Password Répéter le mot de passe - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quand cette case est cochée, la vérification de la puissance du mot de passe est activée et vous ne pourrez pas utiliser de mot de passe faible. - + Require strong passwords. Nécessite un mot de passe fort. - + Log in automatically without asking for the password. Démarrer la session sans demander de mot de passe. - + Use the same password for the administrator account. Utiliser le même mot de passe pour le compte administrateur. - + Choose a password for the administrator account. Choisir un mot de passe pour le compte administrateur. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Veuillez entrer le même mot de passe deux fois, afin de vérifier qu'ils n'y ait pas d'erreur de frappe.</small> @@ -2327,42 +2672,42 @@ L'installateur se fermera et les changements seront perdus. PartitionLabelsView - + Root Racine - + Home Home - + Boot Démarrage - + EFI system Système EFI - + Swap Swap - + New partition for %1 Nouvelle partition pour %1 - + New partition Nouvelle partition - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2716,39 @@ L'installateur se fermera et les changements seront perdus. PartitionModel - - + + Free Space Espace libre - - + + New partition Nouvelle partition - + Name Nom - + File System Système de fichiers - + + File System Label + + + + Mount Point Point de montage - + Size Taille @@ -2406,77 +2756,77 @@ L'installateur se fermera et les changements seront perdus. PartitionPage - + Form Formulaire - + Storage de&vice: - Périphérique de stockage: + Périphérique de stockage : - + &Revert All Changes &Annuler tous les changements - + New Partition &Table Nouvelle &table de partitionnement - + Cre&ate Cré&er - + &Edit &Modifier - + &Delete &Supprimer - + New Volume Group - Nouveau Groupe de Volumes + Nouveau groupe de volume - + Resize Volume Group - Redimensionner le Groupe de Volumes + Redimensionner le groupe de volume - + Deactivate Volume Group - Désactiver le Groupe de Volumes + Désactiver le groupe de volume - + Remove Volume Group - Supprimer le Groupe de Volumes + Supprimer le groupe de volume - + I&nstall boot loader on: Installer le chargeur de démarrage sur : - + Are you sure you want to create a new partition table on %1? Êtes-vous sûr de vouloir créer une nouvelle table de partitionnement sur %1 ? - + Can not create new partition Impossible de créer une nouvelle partition - + 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. La table de partition sur %1 contient déjà %2 partitions primaires, et aucune supplémentaire ne peut être ajoutée. Veuillez supprimer une partition primaire et créer une partition étendue à la place. @@ -2484,117 +2834,107 @@ L'installateur se fermera et les changements seront perdus. PartitionViewStep - + Gathering system information... Récupération des informations système… - + Partitions Partitions - - Install %1 <strong>alongside</strong> another operating system. - Installer %1 <strong>à côté</strong>d'un autre système d'exploitation. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Effacer</strong> le disque et installer %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Remplacer</strong> une partition avec %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Partitionnement <strong>manuel</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Installer %1 <strong>à côté</strong> d'un autre système d'exploitation sur le disque <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Effacer</strong> le disque <strong>%2</strong> (%3) et installer %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Remplacer</strong> une partition sur le disque <strong>%2</strong> (%3) avec %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Partitionnement <strong>manuel</strong> sur le disque <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disque <strong>%1</strong> (%2) - - - + Current: Actuel : - + After: Après : - + No EFI system partition configured Aucune partition système EFI configurée - - 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>esp</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. - Une partition système EFI est nécessaire pour démarrer %1.<br/><br/>Pour configurer une partition système EFI, revenez en arrière et sélectionnez ou créez une partition FAT32 avec le drapeau <strong>esp</strong> activé et le point de montage <strong>%2</strong>.<br/><br/>Vous pouvez continuer sans configurer de partition système EFI mais votre système pourrait refuser de démarrer. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Drapeau de partition système EFI non configuré + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Une partition système EFI est nécessaire pour démarrer %1.<br/><br/>Une partition a été configurée avec le point de montage <strong>%2</strong> mais son drapeau <strong>esp</strong> n'est pas activé.<br/>Pour activer le drapeau, revenez en arrière et éditez la partition.<br/><br/>Vous pouvez continuer sans activer le drapeau mais votre système pourrait refuser de démarrer. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + Option pour utiliser GPT sur le BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted Partition d'amorçage non chiffrée. - + 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. Une partition d'amorçage distincte a été configurée avec une partition racine chiffrée, mais la partition d'amorçage n'est pas chiffrée. <br/> <br/> Il y a des problèmes de sécurité avec ce type d'installation, car des fichiers système importants sont conservés sur une partition non chiffrée <br/> Vous pouvez continuer si vous le souhaitez, mais le déverrouillage du système de fichiers se produira plus tard au démarrage du système. <br/> Pour chiffrer la partition d'amorçage, revenez en arrière et recréez-la, en sélectionnant <strong> Chiffrer </ strong> dans la partition Fenêtre de création. - + has at least one disk device available. a au moins un disque disponible. - + There are no partitions to install on. Il n'y a pas de partition pour l'installation @@ -2602,13 +2942,13 @@ L'installateur se fermera et les changements seront perdus. PlasmaLnfJob - + Plasma Look-and-Feel Job Traitement de l'apparence de Plasma - - + + Could not select KDE Plasma Look-and-Feel package Impossible de sélectionner le paquet Apparence de KDE Plasma @@ -2616,17 +2956,17 @@ L'installateur se fermera et les changements seront perdus. PlasmaLnfPage - + Form Formulaire - + 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. Merci de choisir l'apparence du bureau KDE Plasma. Vous pouvez aussi passer cette étape et configurer l'apparence une fois le système configuré. Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celles-ci. - + 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. Merci de choisir l'apparence du bureau KDE Plasma. Vous pouvez aussi passer cette étape et configurer l'apparence une fois le système installé. Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celles-ci. @@ -2635,7 +2975,7 @@ Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celle PlasmaLnfViewStep - + Look-and-Feel Apparence @@ -2643,17 +2983,17 @@ Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celle PreserveFiles - + Saving files for later ... Sauvegarde des fichiers en cours pour plus tard... - + No files configured to save for later. Aucun fichier de sélectionné pour sauvegarde ultérieure. - + Not all of the configured files could be preserved. Certains des fichiers configurés n'ont pas pu être préservés. @@ -2661,14 +3001,14 @@ Vous pouvez obtenir un aperçu des différentes apparences en cliquant sur celle ProcessResult - + There was no output from the command. Il y a eu aucune sortie de la commande - + Output: @@ -2677,52 +3017,52 @@ Sortie - + External command crashed. La commande externe s'est mal terminée. - + Command <i>%1</i> crashed. La commande <i>%1</i> s'est arrêtée inopinément. - + External command failed to start. La commande externe n'a pas pu être lancée. - + Command <i>%1</i> failed to start. La commande <i>%1</i> n'a pas pu être lancée. - + Internal error when starting command. Erreur interne au lancement de la commande - + Bad parameters for process job call. Mauvais paramètres pour l'appel au processus de job. - + External command failed to finish. La commande externe ne s'est pas terminée. - + Command <i>%1</i> failed to finish in %2 seconds. La commande <i>%1</i> ne s'est pas terminée en %2 secondes. - + External command finished with errors. La commande externe s'est terminée avec des erreurs. - + Command <i>%1</i> finished with exit code %2. La commande <i>%1</i> s'est terminée avec le code de sortie %2. @@ -2730,89 +3070,95 @@ Sortie QObject - - Default Keyboard Model - Modèle Clavier par défaut - - - - - Default - Défaut - - - - unknown - inconnu - - - - extended - étendu - - - - unformatted - non formaté - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Espace non partitionné ou table de partitions inconnue - - - - (no mount point) - (aucun point de montage) - - - - Requirements checking for module <i>%1</i> is complete. - La vérification des prérequis pour le module <i>%1</i> est terminée. - - - + %1 (%2) %1 (%2) - - No product - Aucun produit + + unknown + inconnu - - No description provided. - Aucune description fournie. + + extended + étendu - - - - + + unformatted + non formaté + + + + swap + swap + + + + + Default + Défaut + + + + + + File not found Fichier non trouvé - + Path <pre>%1</pre> must be an absolute path. Le chemin <pre>%1</pre> doit être un chemin absolu. - + + Directory not found + Répertoire non trouvé + + + + Could not create new random file <pre>%1</pre>. Impossible de créer le nouveau fichier aléatoire <pre>%1</pre>. + + + No product + Aucun produit + + + + No description provided. + Aucune description fournie. + + + + (no mount point) + (aucun point de montage) + + + + Unpartitioned space or unknown partition table + Espace non partitionné ou table de partitions inconnue + + + + Recommended + + + <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> + <p>Cet ordinateur ne satisfait pas à certaines des exigences recommandées pour la configuration de %1.<br/> + L'installation peut continuer, mais certaines fonctionnalités peuvent être désactivées. + RemoveUserJob - + Remove live user from target system Supprimer l'utilisateur live du système cible @@ -2820,18 +3166,18 @@ Sortie RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Supprimer le Groupe de Volumes nommé %1. - + Remove Volume Group named <strong>%1</strong>. Supprimer le Groupe de Volumes nommé <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. L'installateur n'a pas pu supprimer le groupe de volumes nommé '%1'. @@ -2839,143 +3185,160 @@ Sortie ReplaceWidget - + Form Formulaire - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - Sélectionnez ou installer %1.<br><font color="red">Attention: </font>ceci va effacer tous les fichiers sur la partition sélectionnée. + Sélectionner ou installer %1.<br><font color="red">Attention : </font>ceci va effacer tous les fichiers sur la partition sélectionnée. - + The selected item does not appear to be a valid partition. L'objet sélectionné ne semble pas être une partition valide. - + %1 cannot be installed on empty space. Please select an existing partition. %1 ne peut pas être installé sur un espace vide. Merci de sélectionner une partition existante. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ne peut pas être installé sur une partition étendue. Merci de sélectionner une partition primaire ou logique existante. - + %1 cannot be installed on this partition. %1 ne peut pas être installé sur cette partition. - + Data partition (%1) Partition de données (%1) - + Unknown system partition (%1) Partition système inconnue (%1) - + %1 system partition (%2) Partition système %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partition %1 est trop petite pour %2. Merci de sélectionner une partition avec au moins %3 Gio de capacité. - + <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. <strong>%2</strong><br/><br/>Une partition système EFI n'a pas pu être localisée sur ce système. Veuillez revenir en arrière et utiliser le partitionnement manuel pour configurer %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 va être installé sur %2.<br/><font color="red">Attention:</font> toutes les données sur la partition %2 seront perdues. - + The EFI system partition at %1 will be used for starting %2. La partition système EFI sur %1 sera utilisée pour démarrer %2. - + EFI system partition: - Partition système EFI: + Partition système EFI : + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Cet ordinateur ne satisfait pas à la configuration minimale requise pour l'installation de %1.<br/> + L'installation ne peut pas continuer. + + + + <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> + <p>Cet ordinateur ne satisfait pas à certaines des exigences recommandées pour la configuration de %1.<br/> + L'installation peut continuer, mais certaines fonctionnalités peuvent être désactivées.</p> ResizeFSJob - + Resize Filesystem Job Tâche de redimensionnement du système de fichiers - + Invalid configuration Configuration incorrecte - + The file-system resize job has an invalid configuration and will not run. La tâche de redimensionnement du système de fichier a une configuration incorrecte et ne sera pas exécutée. - + KPMCore not Available KPMCore n'est pas disponible - + Calamares cannot start KPMCore for the file-system resize job. Calamares ne peut pas démarrer KPMCore pour la tâche de redimensionnement du système de fichiers. - - - - - + + + + + Resize Failed Échec du redimensionnement - + The filesystem %1 could not be found in this system, and cannot be resized. Le système de fichiers %1 n'a pas été trouvé sur ce système, et ne peut pas être redimensionné. - + The device %1 could not be found in this system, and cannot be resized. Le périphérique %1 n'a pas été trouvé sur ce système, et ne peut pas être redimensionné. - - + + The filesystem %1 cannot be resized. Le système de fichiers %1 ne peut pas être redimensionné. - - + + The device %1 cannot be resized. Le périphérique %1 ne peut pas être redimensionné. - + The filesystem %1 must be resized, but cannot. Le système de fichiers %1 doit être redimensionné, mais c'est impossible. - + The device %1 must be resized, but cannot Le périphérique %1 doit être redimensionné, mais c'est impossible. @@ -2983,22 +3346,22 @@ Sortie ResizePartitionJob - + Resize partition %1. Redimensionner la partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Redimensionner la partition <strong>%1</strong> de <strong>%2 Mio</strong> à <strong>%3 Mio</strong>. - + Resizing %2MiB partition %1 to %3MiB. Redimensionnement de la partition %1 de %2 Mio à %3 Mio. - + The installer failed to resize partition %1 on disk '%2'. Le programme d'installation n'a pas pu redimensionner la partition %1 sur le disque '%2'. @@ -3006,7 +3369,7 @@ Sortie ResizeVolumeGroupDialog - + Resize Volume Group Redimensionner le Groupe de Volumes @@ -3014,18 +3377,18 @@ Sortie ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Redimensionner le groupe de volume nommé %1 de %2 à %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Redimensionner le groupe de volume nommé <strong>%1</strong> de <strong>%2</strong> à <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. L'installateur n'a pas pu redimensionner le groupe de volumes nommé '%1'. @@ -3033,53 +3396,25 @@ Sortie ResultsListDialog - + For best results, please ensure that this computer: Pour de meilleur résultats, merci de s'assurer que cet ordinateur : - + System requirements - Prérequis système - - - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Cet ordinateur ne satisfait pas les minimum prérequis pour configurer %1.<br/>La configuration ne peut pas continuer. <a href="#details">Détails...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Cet ordinateur ne satisfait pas les minimum prérequis pour installer %1.<br/>L'installation ne peut pas continuer. <a href="#details">Détails...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Cet ordinateur ne satisfait pas certains des prérequis recommandés pour configurer %1.<br/>La configuration peut continuer, mais certaines fonctionnalités pourraient être désactivées. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Cet ordinateur ne satisfait pas certains des prérequis recommandés pour installer %1.<br/>L'installation peut continuer, mais certaines fonctionnalités pourraient être désactivées. - - - - This program will ask you some questions and set up %2 on your computer. - Ce programme va vous poser quelques questions et configurer %2 sur votre ordinateur. + Configuration requise ScanningDialog - + Scanning storage devices... - Balayage des périphériques de stockage... + Analyse des périphériques de stockage... - + Partitioning Partitionnement @@ -3087,29 +3422,29 @@ Sortie SetHostNameJob - + Set hostname %1 Définir le nom d'hôte %1 - + Set hostname <strong>%1</strong>. Configurer le nom d'hôte <strong>%1</strong>. - + Setting hostname %1. Configuration du nom d'hôte %1. + - Internal Error Erreur interne - - + + Cannot write hostname to target system Impossible d'écrire le nom d'hôte sur le système cible. @@ -3117,29 +3452,29 @@ Sortie SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Configurer le modèle de clavier à %1, la disposition des touches à %2-%3 - + Failed to write keyboard configuration for the virtual console. Échec de l'écriture de la configuration clavier pour la console virtuelle. - - - + + + Failed to write to %1 Échec de l'écriture sur %1 - + Failed to write keyboard configuration for X11. Échec de l'écriture de la configuration clavier pour X11. - + Failed to write keyboard configuration to existing /etc/default directory. Impossible d'écrire la configuration du clavier dans le dossier /etc/default existant. @@ -3147,82 +3482,82 @@ Sortie SetPartFlagsJob - + Set flags on partition %1. Configurer les drapeaux sur la partition %1. - + Set flags on %1MiB %2 partition. Configurer les drapeaux sur la partition %2 de %1 Mio. - + Set flags on new partition. Configurer les drapeaux sur la nouvelle partition. - + Clear flags on partition <strong>%1</strong>. - Réinitialisez les drapeaux sur la partition <strong>%1</strong>. + Réinitialiser les drapeaux sur la partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - Réinitialisez les drapeaux sur la partition <strong>%2</strong> de %1Mio. + Réinitialiser les drapeaux sur la partition <strong>%2</strong> de %1 Mio. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Marquer la partition <strong>%2</strong> de %1 Mio comme <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Réinitialisez les drapeaux sur la partition <strong>%2</strong> de %1 Mio. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Configuration des drapeaux <strong>%3</strong> pour la partition <strong>%2</strong> de %1 Mio. - - - + Clear flags on new partition. - Réinitialisez les drapeaux sur la nouvelle partition. + Réinitialiser les drapeaux sur la nouvelle partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Marquer la partition <strong>%1</strong> comme <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Marquer la partition <strong>%2</strong> de %1 Mio comme <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Marquer la nouvelle partition comme <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Réinitialisation des drapeaux pour la partition <strong>%1</strong>. - - Clearing flags on new partition. - Réinitialisez les drapeaux sur la nouvelle partition. + + Clearing flags on %1MiB <strong>%2</strong> partition. + Réinitialiser les drapeaux sur la partition <strong>%2</strong> de %1 Mio. - + + Clearing flags on new partition. + Réinitialiser les drapeaux sur la nouvelle partition. + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Configuration des drapeaux <strong>%2</strong> pour la partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Configuration des drapeaux <strong>%3</strong> pour la partition <strong>%2</strong> de %1 Mio. + + + Setting flags <strong>%1</strong> on new partition. Configuration des drapeaux <strong>%1</strong> pour la nouvelle partition. - + The installer failed to set flags on partition %1. L'installateur n'a pas pu activer les drapeaux sur la partition %1. @@ -3230,42 +3565,42 @@ Sortie SetPasswordJob - + Set password for user %1 Définir le mot de passe pour l'utilisateur %1 - + Setting password for user %1. Configuration du mot de passe pour l'utilisateur %1. - + Bad destination system path. Mauvaise destination pour le chemin système. - + rootMountPoint is %1 Le point de montage racine est %1 - + Cannot disable root account. Impossible de désactiver le compte root. - + passwd terminated with error code %1. passwd c'est arrêté avec le code d'erreur %1. - + Cannot set password for user %1. Impossible de créer le mot de passe pour l'utilisateur %1. - + usermod terminated with error code %1. usermod s'est terminé avec le code erreur %1. @@ -3273,45 +3608,82 @@ Sortie SetTimezoneJob - + Set timezone to %1/%2 Configurer le fuseau-horaire à %1/%2 - + Cannot access selected timezone path. Impossible d'accéder au chemin d'accès du fuseau horaire sélectionné. - + Bad path: %1 Mauvais chemin : %1 - + Cannot set timezone. Impossible de définir le fuseau horaire. - + Link creation failed, target: %1; link name: %2 Création du lien échouée, destination : %1; nom du lien : %2 - + Cannot set timezone, Impossible de définir le fuseau horaire. - + Cannot open /etc/timezone for writing Impossible d'ourvir /etc/timezone pour écriture + + SetupGroupsJob + + + Preparing groups. + Préparation des groupes. + + + + + Could not create groups in target system + Impossible de créer des groupes dans le système cible + + + + These groups are missing in the target system: %1 + Ces groupes sont manquants dans le système cible : %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configurer les utilisateurs <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + Impossible d'exécuter chmod sur le fichier sudoers. + + + + Cannot create sudoers file for writing. + Impossible de créer le fichier sudoers en écriture. + + ShellProcessJob - + Shell Processes Job Tâche des processus de l'intérpréteur de commande @@ -3319,81 +3691,117 @@ Sortie SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Ceci est un aperçu de ce qui va arriver lorsque vous commencerez la configuration. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Ceci est un aperçu de ce qui va arriver lorsque vous commencerez l'installation. + + &Yes + &Oui - - - SummaryViewStep - - Summary - Résumé + + &No + &Non + + + + &Cancel + &Annuler + + + + &Close + &Fermer TrackingInstallJob - + Installation feedback Rapport d'installation - + Sending installation feedback. Envoi en cours du rapport d'installation. - + Internal error in install-tracking. Erreur interne dans le suivi d'installation. - + HTTP request timed out. La requête HTTP a échoué. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Commentaires des utilisateurs de KDE + + + + Configuring KDE user feedback. + Configuration des commentaires des utilisateurs de KDE. + + + + + Error in KDE user feedback configuration. + Erreur dans la configuration des commentaires des utilisateurs de KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Impossible de configurer correctement les commentaires des utilisateurs de KDE, erreur de script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Impossible de configurer correctement les commentaires des utilisateurs de KDE, erreur Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Rapport de la machine - + Configuring machine feedback. Configuration en cours du rapport de la machine. - - + + Error in machine feedback configuration. Erreur dans la configuration du rapport de la machine. - + Could not configure machine feedback correctly, script error %1. Echec pendant la configuration du rapport de machine, erreur de script %1. - + Could not configure machine feedback correctly, Calamares error %1. Impossible de mettre en place le rapport d'utilisateurs, erreur %1. @@ -3401,106 +3809,97 @@ Sortie TrackingPage - + Form Formulaire - + Placeholder Emplacement - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>En sélectionnant cette option, vous n'enverrez <span style=" font-weight:600;">aucune information</span> sur votre installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Cliquer ici <span style=" font-weight:600;">pour n'envoyer aucune information</span> sur votre installation.</p></body></html> - + <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> - <html><head/><body><span style=" text-decoration: underline; color:#2980b9;">Cliquez ici pour plus d'informations sur les rapports d'utilisateurs</span><a href="placeholder"><p></p></body> + <html><head/><body><span style=" text-decoration: underline; color:#2980b9;">Cliquer ici pour plus d'informations sur les rapports d'utilisateurs</span><a href="placeholder"><p></p></body> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - L'installation de la surveillance permet à %1 de voir combien d'utilisateurs l'utilise, quelle configuration matérielle %1 utilise, et (avec les 2 dernières options ci-dessous), recevoir une information continue concernant les applications préférées. Pour connaître les informations qui seront envoyées, veuillez cliquer sur l'icône d'aide à côté de chaque zone. + + 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. + Le suivi aide %1 à voir à quelle fréquence il est installé, sur quel matériel il est installé et quelles applications sont utilisées. Pour voir ce qui sera envoyé, veuillez cliquer sur l'icône d'aide à côté de chaque zone. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - En sélectionnant cette option, vous enverrez des informations sur votre installation et votre matériel. Cette information ne sera <b>seulement envoyée qu'une fois</b> après la finalisation de l'installation. + + 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. + En sélectionnant cette option, vous enverrez des informations sur votre installation et votre matériel. Ces informations ne seront envoyées <b>qu'une seule fois</b> après la fin de l'installation. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - En sélectionnant cette option vous enverrez <b>périodiquement</b> des informations sur votre installation, matériel, et applications, à %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + En sélectionnant cette option, vous enverrez périodiquement des informations sur l'installation, le matériel et les applications de votre <b>machine</b> à %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - En sélectionnant cette option vous enverrez <b>régulièrement</b> des informations sur votre installation, matériel, applications, et habitudes d'utilisation, à %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + En sélectionnant cette option, vous enverrez régulièrement des informations sur <b>votre</b> installation, le matériel, les applications et les modèles d'utilisation des applications à %1. TrackingViewStep - + Feedback Rapport + + UmountJob + + + Unmount file systems. + Démonter les systèmes de fichiers + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>si plusieurs personnes utilisent cet ordinateur, vous pourrez créer plusieurs comptes après la configuration.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>si plusieurs personnes utilisent cet ordinateur, vous pourrez créer plusieurs comptes après l'installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Votre nom d'utilisateur est trop long. - - - - Your username must start with a lowercase letter or underscore. - Votre nom d'utilisateur doit commencer avec une lettre minuscule ou un underscore. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Seuls les minuscules, nombres, underscores et tirets sont autorisés. - - - - Only letters, numbers, underscore and hyphen are allowed. - Seuls les lettres, nombres, underscores et tirets sont autorisés. - - - - Your hostname is too short. - Le nom d'hôte est trop petit. - - - - Your hostname is too long. - Le nom d'hôte est trop long. - - - - Your passwords do not match! - Vos mots de passe ne correspondent pas ! + + Users + Utilisateurs UsersViewStep - + Users Utilisateurs @@ -3508,65 +3907,67 @@ Sortie VariantModel - + Key + Column header for key/value Clé - + Value + Column header for key/value Valeur VolumeGroupBaseDialog - + Create Volume Group Créer le Groupe de Volumes - + List of Physical Volumes Liste des Volumes Physiques - + Volume Group Name: Nom du Groupe de Volume : - + Volume Group Type: Type de Groupe de Volumes : - + Physical Extent Size: Taille de l'Extent Physique : - + MiB Mio - + Total Size: - Taille Totale : + Taille totale : - + Used Size: - Taille Utilisée : + Taille utilisée : - + Total Sectors: - Total des Secteurs : + Total des secteurs : - + Quantity of LVs: Nombre de VLs : @@ -3574,106 +3975,106 @@ Sortie WelcomePage - + Form Formulaire - - + + Select application and system language Sélectionner l'application et la langue système + &About + &À propos + + + Open donations website Ouvrir le site web de dons - + &Donate &Donner - + Open help and support website Ouvrir le site web d'aide et support + &Support + &Support + + + Open issues and bug-tracking website Ouvrir les issues et le site de suivi de bugs - Open release notes website - Ouvrir le site des notes de publication - - - - &Release notes - &Notes de publication - - - &Known issues &Problèmes connus - - &Support - &Support + + Open release notes website + Ouvrir le site des notes de publication - - &About - &À propos + + &Release notes + &Notes de publication - - <h1>Welcome to the %1 installer.</h1> - <h1>Bienvenue dans l'installateur de %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - Bien dans l'installateur Calamares pour %1. - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bienvenue dans le programme de configuration Calamares pour %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Bienvenue dans la configuration de %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + Bien dans l'installateur Calamares pour %1. + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Bienvenue dans l'installateur de %1.</h1> + + + + %1 support + Support de %1 + + + About %1 setup À propos de la configuration de %1 - + About %1 installer À propos de l'installateur %1 - + <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. - - - - - %1 support - Support de %1 + <h1>%1</h1><br/><strong>%2<br/> pour %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/>Merci à <a href="https://calamares.io/team/">l'équipe de Calamares</a> et à <a href="https://www.transifex.com/calamares/calamares/">l'équipe de traducteurs de Calamares</a>.<br/><br/>Le développement de <a href="https://calamares.io/">Calamares</a> est sponsorisé par<br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Bienvenue @@ -3681,118 +4082,476 @@ Sortie WelcomeViewStep - + Welcome Bienvenue + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Erreur de configuration + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. + <h1>%1</h1><br/> + <strong>%2<br/> + pour %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/> + Merci à <a href='https://calamares.io/team/'>l'équipe de Calamares</a> + et à <a href='https://www.transifex.com/calamares/calamares/'>l'équipe de traducteurs de Calamares</a>.<br/><br/> + Le développement de <a href='https://calamares.io/'>Calamares</a> est sponsorisé par<br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. + + + + Back + Retour + + + + calamares-sidebar + + + Show debug information + Afficher les informations de dépannage + + + + finishedq + + + Installation Completed + Installation terminée + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 a été installé sur votre ordinateur.<br/> + Vous pouvez maintenant redémarrer votre nouveau système ou continuer à utiliser l'environnement en direct. + + + + Close Installer + Fermer l'installateur + + + + Restart System + Redémarrer le système + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Un journal complet de l'installation est disponible sous le nom d'installation.log dans le répertoire de base de l'utilisateur en direct.<br/> + Ce journal est copié dans /var/log/installation.log du système cible.</p> + + + + finishedq@mobile + + + Installation Completed + Installation terminée + + + + %1 has been installed on your computer.<br/> + You may now restart your device. - - Back + + Close + + + Restart + + + + + i18n + + + <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>. + <h1>Langues</h1></br> + Les paramètres régionaux du système affectent la langue et le jeu de caractères de certains éléments de l'interface utilisateur de la ligne de commande. Le paramètre actuel est <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Paramètres régionaux</h1></br> + Les paramètres régionaux du système affectent le format des nombres et des dates. Le paramètre actuel est <strong>%1</strong>. + + + + Back + Retour + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modèle de clavier : - - Refresh - - - - - + Layouts - + Dispositions - - - Keyboard Layout - + + Type here to test your keyboard + Saisir ici pour tester votre clavier - - Models - - - - + Variants - + Variantes + + + localeq - - Test your keyboard - + + Change + Modifier notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + <h3>%1</h3> + <p>Ce sont des exemples de notes de mise à jour.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Voici un exemple de fichier QML, montrant les options dans RichText avec un contenu Flickable.</p> + + <p>QML avec RichText peut utiliser des balises HTML, le contenu Flickable est utile pour les écrans tactiles.</p> + + <p><b>Ceci est un texte en gras</b></p> + <p><i>Ceci est du texte en italique</i></p> + <p><u>Ceci est un texte souligné</u></p> + <p><center>Ce texte sera aligné au centre.</center></p> + <p><s>C'est barré</s></p> + + <p>Exemple de code : + <code>ls -l /home</code></p> + + <p><b>Listes :</b></p> + <ul> + <li>Systèmes CPU Intel</li> + <li>Systèmes CPU AMD</li> + </ul> + + <p>La barre de défilement verticale est réglable, la largeur actuelle est définie sur 10.</p> + + + + Back + Retour + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Choisir votre nom d'utilisateur et vos informations d'identification pour vous connecter et effectuer des tâches d'administration + + + + What is your name? + Quel est votre nom ? + + + + Your Full Name + Nom complet + + + + What name do you want to use to log in? + Quel nom souhaitez-vous utiliser pour la connexion ? + + + + Login Name + Identifiant + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Si plusieurs personnes utilisent cet ordinateur, vous pouvez créer plusieurs comptes après l'installation. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Seuls les minuscules, nombres, underscores et tirets sont autorisés. + + + + root is not allowed as username. + root n'est pas autorisé en tant que nom d'utilisateur. + + + + What is the name of this computer? + Quel est le nom de votre ordinateur ? + + + + Computer Name + Nom de l'ordinateur + + + + This name will be used if you make the computer visible to others on a network. + Ce nom sera utilisé si vous rendez l'ordinateur visible aux autres sur un réseau. + + + + localhost is not allowed as hostname. + localhost n'est pas autorisé en tant que nom d'utilisateur. + + + + Choose a password to keep your account safe. + Veuillez saisir le mot de passe pour sécuriser votre compte. + + + + Password + Mot de passe + + + + Repeat Password + Répéter le mot de passe + + + + 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. + Saisir le même mot de passe deux fois, afin qu'il puisse être vérifié pour les erreurs de frappe. Un bon mot de passe contient un mélange de lettres, de chiffres et de ponctuation, doit comporter au moins huit caractères et doit être changé à intervalles réguliers. + + + + Validate passwords quality + Valider la qualité des mots de passe + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Quand cette case est cochée, la vérification de la puissance du mot de passe est activée et vous ne pourrez pas utiliser de mot de passe faible. + + + + Log in automatically without asking for the password + Connectez-vous automatiquement sans demander le mot de passe + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Seuls les lettres, les chiffres, les underscores et les trait d'union sont autorisés et un minimum de deux caractères. + + + + Reuse user password as root password + Réutiliser le mot de passe utilisateur comme mot de passe root + + + + Use the same password for the administrator account. + Utiliser le même mot de passe pour le compte administrateur. + + + + Choose a root password to keep your account safe. + Choisir un mot de passe root pour protéger votre compte. + + + + Root Password + Mot de passe root + + + + Repeat Root Password + Répéter le mot de passe root + + + + Enter the same password twice, so that it can be checked for typing errors. + Entrer le même mot de passe deux fois, afin qu'il puisse être vérifié pour les erreurs de frappe. + welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Bienvenue dans le programme d'installation de %1 <quote>%2</quote></h3> + <p>Ce programme vous posera quelques questions et installera %1 sur votre ordinateur.</p> - + About À propos - + Support - + Support - + Known issues Problèmes connus - + Release notes - + Notes de version - + Donate Faites un don diff --git a/lang/calamares_fur.ts b/lang/calamares_fur.ts new file mode 100644 index 000000000..aa879dc2c --- /dev/null +++ b/lang/calamares_fur.ts @@ -0,0 +1,4554 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + L'<strong>ambient di inviament</strong> di chest sisteme. I vecjos sistemis x86 a supuartin dome <strong>BIOS</strong>.<br>I sistemis modernis di solit a doprin <strong>EFI</strong>, ma a puedin ancje mostrâsi tant che BIOS se si ju invie inte modalitât di compatibilitât. + + + + 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. + Chest sisteme al è stât inviât cuntun ambient di inviament <strong>EFI</strong>.<br><br>Par configurâ l'inviament di un ambient EFI chest program di instalazion al scugne meti in vore une aplicazion che e gjestìs l'inviament, come <strong>GRUB</strong> o <strong>systemd-boot</strong>, suntune <strong>Partizion di sisteme EFI</strong>. Cheste operazion e ven fate in automatic, gjavant che no si sielzi di partizionâ a man il disc, in chest câs si scugnarà sielzile o creâle di bessôi. + + + + 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. + Chest sisteme al è stât inviât cuntun ambient di inviament <strong>BIOS</strong>.<br><br>Par configurâ l'inviament di un ambient BIOS chest program di instalazion al scugne instalâ un gjestôr di inviament, come <strong>GRUB</strong>, o al inizi di une partizion o sul <strong>Master Boot Record</strong> che al sta dongje de tabele des partizions (opzion preferide). Chest al ven fat in automatic, gjavant che no si sielzi di partizionâ a man il disc, in chest câs si scugnarà configurâlu di bessôi. + + + + BootLoaderModel + + + Master Boot Record of %1 + Master Boot Record di %1 + + + + Boot Partition + Partizion di inviament + + + + System Partition + Partizion di sisteme + + + + Do not install a boot loader + No sta instalâ un gjestôr di inviament + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Pagjine vueide + + + + Calamares::DebugWindow + + + Form + Formulari + + + + GlobalStorage + ArchiviGlobâl + + + + JobQueue + Code dai lavôrs + + + + Modules + Modui + + + + Type: + Gjenar: + + + + + none + nissun + + + + Interface: + Interface: + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + Torne cjarie sfuei di stîl + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + Arbul dai widget + + + + Debug information + Informazions di debug + + + + Calamares::ExecutionViewStep + + + Set up + Impostazion + + + + Install + Instale + + + + Calamares::FailJob + + + Job failed (%1) + Operazion falide (%1) + + + + Programmed job failure was explicitly requested. + Il faliment de operazion programade al è stât domandât in maniere esplicite. + + + + Calamares::JobThread + + + Done + Fat + + + + Calamares::NamedJob + + + Example job (%1) + Lavôr di esempli (%1) + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + Eseguìs il comant '%1' tal sisteme di destinazion. + + + + Run command '%1'. + Eseguìs il comant '%1'. + + + + Running command %1 %2 + Daûr a eseguî il comant %1 %2 + + + + Calamares::PythonJob + + + Running %1 operation. + Operazion %1 in esecuzion. + + + + Bad working directory path + Il percors de cartele di lavôr nol è just + + + + Working directory %1 for python job %2 is not readable. + No si rive a lei la cartele di lavôr %1 pe operazion di python %2. + + + + Bad main script file + Il file di script principâl nol è valit + + + + Main script file %1 for python job %2 is not readable. + No si rive a lei il file di script principâl %1 pe operazion di python %2. + + + + Boost.Python error in job "%1". + Erôr di Boost.Python te operazion "%1". + + + + Calamares::QmlViewStep + + + Loading ... + Daûr a cjariâ ... + + + + QML Step <i>%1</i>. + Pas QML <i>%1</i>. + + + + Loading failed. + Cjariament falît. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Il control dai recuisîts pal modul <i>%1</i> al è complet. + + + + Waiting for %n module(s). + + In spiete di %n modul. + In spiete di %n modui. + + + + + (%n second(s)) + + (%n secont) + (%n seconts) + + + + + System-requirements checking is complete. + Il control dai recuisîts di sisteme al è complet. + + + + Calamares::ViewManager + + + Setup Failed + Configurazion falide + + + + Installation Failed + Instalazion falide + + + + Error + Erôr + + + + &Yes + &Sì + + + + &No + &No + + + + &Close + S&iere + + + + Install Log Paste URL + URL de copie dal regjistri di instalazion + + + + The upload was unsuccessful. No web-paste was done. + Il cjariament sù pe rêt al è lât strucj. No je stade fate nissune copie sul web. + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + Inizializazion di Calamares falide + + + + %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. + No si pues instalâ %1. Calamares nol è rivât a cjariâ ducj i modui configurâts. Chest probleme achì al è causât de distribuzion e di cemût che al ven doprât Calamares. + + + + <br/>The following modules could not be loaded: + <br/>I modui chi sot no puedin jessi cjariâts: + + + + Continue with setup? + Continuâ cu la configurazion? + + + + Continue with installation? + Continuâ cu la instalazion? + + + + 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> + Il program di configurazion %1 al sta par aplicâ modifichis al disc, di mût di podê instalâ %2.<br/><strong>No si podarà tornâ indaûr e anulâ chestis modifichis.</strong> + + + + 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> + Il program di instalazion %1 al sta par aplicâ modifichis al disc, di mût di podê instalâ %2.<br/><strong>No tu podarâs tornâ indaûr e anulâ chestis modifichis.</strong> + + + + &Set up now + &Configure cumò + + + + &Install now + &Instale cumò + + + + Go &back + &Torne indaûr + + + + &Set up + &Configure + + + + &Install + &Instale + + + + Setup is complete. Close the setup program. + Configurazion completade. Siere il program di configurazion. + + + + The installation is complete. Close the installer. + La instalazion e je stade completade. Siere il program di instalazion. + + + + Cancel setup without changing the system. + Anule la configurazion cence modificâ il sisteme. + + + + Cancel installation without changing the system. + Anulâ la instalazion cence modificâ il sisteme. + + + + &Next + &Sucessîf + + + + &Back + &Indaûr + + + + &Done + &Fat + + + + &Cancel + &Anule + + + + Cancel setup? + Anulâ la configurazion? + + + + Cancel installation? + Anulâ la instalazion? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + Anulâ pardabon il procès di configurazion? +Il program di configurazion al jessarà e dutis lis modifichis a laran pierdudis. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + Anulâ pardabon il procès di instalazion? +Il program di instalazion al jessarà e dutis lis modifichis a laran pierdudis. + + + + CalamaresPython::Helper + + + Unknown exception type + Gjenar di ecezion no cognossût + + + + unparseable Python error + erôr Python che no si pues analizâ + + + + unparseable Python traceback + rapuart di ricercje erôr di Python che no si pues analizâ + + + + Unfetchable Python error. + erôr di Python che no si pues recuperâ. + + + + CalamaresWindow + + + %1 Setup Program + Program di configurazion di %1 + + + + %1 Installer + Program di instalazion di %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + Daûr a dâ dongje lis informazions dal sisteme... + + + + ChoicePage + + + Form + Formulari + + + + Select storage de&vice: + Selezione il &dispositîf di memorie: + + + + + + + Current: + Atuâl: + + + + After: + Dopo: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Partizionament manuâl</strong><br/>Tu puedis creâ o ridimensionâ lis partizions di bessôl. + + + + Reuse %1 as home partition for %2. + Torne dopre %1 come partizion home par %2. + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>Selezione une partizion di scurtâ, dopo strissine la sbare inferiôr par ridimensionâ</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 e vignarà scurtade a %2MiB e une gnove partizion di %3MiB e vignarà creade par %4. + + + + Boot loader location: + Ubicazion dal gjestôr di inviament: + + + + <strong>Select a partition to install on</strong> + <strong>Selezione une partizion dulà lâ a instalâ</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + Impussibil cjatâ une partizion di sisteme EFI. Par plasê torne indaûr e dopre un partizionament manuâl par configurâ %1. + + + + The EFI system partition at %1 will be used for starting %2. + La partizion di sisteme EFI su %1 e vignarà doprade par inviâ %2. + + + + EFI system partition: + Partizion di sisteme EFI: + + + + 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. + Al somee che chest dispositîf di memorie nol vedi parsore un sisteme operatîf. Ce desideristu fâ?<br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <strong>Scancelâ il disc</strong><br/>Chest al <font color="red">eliminarà</font> ducj i dâts presints sul dispositîf di memorie selezionât. + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <strong>Instalâ in bande</strong><br/>Il program di instalazion al scurtarà une partizion par fâ spazi a %1. + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong>Sostituî une partizion</strong><br/>Al sostituìs une partizion cun %1. + + + + 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. + Chest dispositîf di memorie al à parsore %1. Ce desideristu fâ? <br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. + + + + 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. + Chest dispositîf di memorie al à za parsore un sisteme operatîf. Ce desideristu fâ?<br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. + + + + 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. + Chest dispositîf di memorie al à parsore plui sistemis operatîfs. Ce desideristu fâ?<br/>Tu podarâs tornâ a viodi e confermâ lis tôs sieltis prime di aplicâ cualsisei modifiche al dispositîf di memorie. + + + + 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/> + Chest dispositîf di memorie al à za un sisteme operatîf parsore, ma la tabele des partizions <strong>%1</strong> e je diferente di chê che a covente: <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Une des partizions dal dispositîf di memorie e je <strong>montade</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Chest dispositîf di memorie al fâs part di un dispositîf <strong>RAID inatîf</strong>. + + + + No Swap + Cence Swap + + + + Reuse Swap + Torne dopre Swap + + + + Swap (no Hibernate) + Swap (cence ibernazion) + + + + Swap (with Hibernate) + Swap (cun ibernazion) + + + + Swap to file + Swap su file + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + Netâ i ponts di montaç pes operazions di partizionament su %1 + + + + Clearing mounts for partitioning operations on %1. + Daûr a netâ i ponts di montaç pes operazions di partizionament su %1. + + + + Cleared all mounts for %1 + Netâts ducj i ponts di montaç par %1 + + + + ClearTempMountsJob + + + Clear all temporary mounts. + Netâ ducj i ponts di montaç temporanis. + + + + Clearing all temporary mounts. + Daûr a netâ ducj i ponts di montaç temporanis. + + + + Cleared all temporary mounts. + Netâts ducj i ponts di montaç temporanis. + + + + CommandList + + + + Could not run command. + Impussibil eseguî il comant. + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + Il comant al ven eseguît tal ambient anfitrion (host) e al à bisugne di savê il percors lidrîs (root), ma nol è stât definît nissun rootMountPoint (pont di montaç de lidrîs). + + + + The command needs to know the user's name, but no username is defined. + Il comant al à bisugne di cognossi il non dal utent, ma nol è stât definît nissun non utent. + + + + Config + + + Set keyboard model to %1.<br/> + Stabilî il model di tastiere a %1.<br/> + + + + Set keyboard layout to %1/%2. + Stabilî la disposizion di tastiere a %1/%2. + + + + Set timezone to %1/%2. + Stabilî il fûs orari a %1/%2. + + + + The system language will be set to %1. + La lenghe dal sisteme e vignarà configurade a %1. + + + + The numbers and dates locale will be set to %1. + La localizazion dai numars e des datis e vignarà configurade a %1. + + + + Network Installation. (Disabled: Incorrect configuration) + Instalazion di rêt (Disabilitade: configurazion no valide) + + + + Network Installation. (Disabled: Received invalid groups data) + Instalazion di rêt. (Disabilitade: ricevûts dâts di grups no valits) + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Selezion pachets + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Instalazion di rêt. (Disabilitade: impussibil recuperâ la liste dai pachets, controlâ la conession di rêt) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Chest computer nol sodisfe i recuisîts minims pe configurazion di %1.<br/>La configurazion no pues continuâ. <a href="#details">Detais...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Chest computer nol sodisfe i recuisîts minims pe instalazion di %1.<br/>La instalazion no pues continuâ. <a href="#details">Detais...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Chest computer nol sodisfe cualchi recuisît conseât pe configurazion di %1.<br/>La configurazion e pues continuâ, ma cualchi funzionalitât e podarès vignî disabilitade. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Chest computer nol sodisfe cualchi recuisît conseât pe instalazion di %1.<br/>La instalazion e pues continuâ, ma cualchi funzionalitât e podarès vignî disabilitade. + + + + This program will ask you some questions and set up %2 on your computer. + Chest program al fasarà cualchi domande e al configurarà %2 sul computer. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Benvignûts sul program di configurazion Calamares par %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Benvignûts te configurazion di %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Benvignûts sul program di instalazion Calamares par %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Benvignûts tal program di instalazion di %1</h1> + + + + Your username is too long. + Il to non utent al è masse lunc. + + + + '%1' is not allowed as username. + '%1' nol è ametût come non utent. + + + + Your username must start with a lowercase letter or underscore. + Il to non utent al scugne scomençâ cuntune letare minuscule o une liniute basse. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + A son ametûts dome i numars, lis letaris minusculis, lis liniutis bassis e i tratuts. + + + + Your hostname is too short. + Il to non host al è masse curt. + + + + Your hostname is too long. + Il to non host al è masse lunc. + + + + '%1' is not allowed as hostname. + '%1' nol è ametût come non host. + + + + Only letters, numbers, underscore and hyphen are allowed. + A son ametûts dome i numars, lis letaris, lis liniutis bassis e i tratuts. + + + + Your passwords do not match! + Lis passwords no corispuindin! + + + + OK! + + + + + Setup Failed + Configurazion falide + + + + Installation Failed + Instalazion falide + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Configurazion completade + + + + Installation Complete + Instalazion completade + + + + The setup of %1 is complete. + La configurazion di %1 e je completade. + + + + The installation of %1 is complete. + La instalazion di %1 e je completade. + + + + Package Selection + Selezion pachets + + + + Please pick a product from the list. The selected product will be installed. + Sielç un prodot de liste. Il prodot selezionât al vignarà instalât. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Sintesi + + + + This is an overview of what will happen once you start the setup procedure. + Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di configurazion. + + + + This is an overview of what will happen once you start the install procedure. + Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di instalazion. + + + + ContextualProcessJob + + + Contextual Processes Job + Lavôr dai procès contestuâi + + + + CreatePartitionDialog + + + Create a Partition + Creâ une partizion + + + + Si&ze: + Di&mension: + + + + MiB + MiB + + + + Partition &Type: + &Gjenar di partizion: + + + + Primar&y + + + + + E&xtended + E&stese + + + + Fi&le System: + Fi&le System: + + + + LVM LV name + Non VL LVM + + + + &Mount Point: + &Pont di montaç: + + + + Flags: + Proprietâts: + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + Ci&frâ + + + + Logical + Logjiche + + + + Primary + Primarie + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + Pont di montaç za in ûs. Selezione un altri. + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + Creâ une gnove partizion di %2MiB su %4 (%3) cul filesystem %1. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + Creâ une gnove partizion di <strong>%2MiB</strong> su <strong>%4</strong> (%3) cul filesystem <strong>%1</strong>. + + + + + Creating new %1 partition on %2. + Daûr a creâ une gnove partizion %1 su %2. + + + + The installer failed to create partition on disk '%1'. + Il program di instalazion nol è rivât a creâ la partizion sul disc '%1'. + + + + CreatePartitionTableDialog + + + Create Partition Table + Creâ la tabele des partizions + + + + Creating a new partition table will delete all existing data on the disk. + Creant une gnove tabele des partizions si eliminarà ducj i dâts esistents sul disc. + + + + What kind of partition table do you want to create? + Ce gjenar di tabele des partizions si desiderie creâ? + + + + Master Boot Record (MBR) + Master Boot Record (MBR) + + + + GUID Partition Table (GPT) + GUID Partition Table (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + Creâ une gnove tabele des partizions %1 su %2. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + Creâ une gnove tabele des partizions <strong>%1</strong> su <strong>%2</strong>(%3). + + + + Creating new %1 partition table on %2. + Daûr a creâ une gnove tabele des partizions %1 su %2. + + + + The installer failed to create a partition table on %1. + Il program di instalazion nol è rivât a creâ une tabele des partizions su %1. + + + + CreateUserJob + + + Create user %1 + Creâ l'utent %1 + + + + Create user <strong>%1</strong>. + Creâ l'utent <strong>%1</strong>. + + + + Preserving home directory + Si preserve la cartele home + + + + + Creating user %1 + + + + + Configuring user %1 + Daûr a configurâ l'utent %1 + + + + Setting file permissions + Daûr a stabilî i permès dai file + + + + CreateVolumeGroupDialog + + + Create Volume Group + Creâ Grup di Volums + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + Creâ un gnûf grup di volums clamât %1. + + + + Create new volume group named <strong>%1</strong>. + Creâ un gnûf grup di volums clamât <strong>%1</strong>. + + + + Creating new volume group named %1. + Daûr a creâ un gnûf grup di volums clamât %1. + + + + The installer failed to create a volume group named '%1'. + Il program di instalazion nol è rivât a creâ un grup di volums clamât '%1'. + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + Disativâ grup di volums clamât %1. + + + + Deactivate volume group named <strong>%1</strong>. + Disativâ grup di volums clamât <strong>%1</strong>. + + + + The installer failed to deactivate a volume group named %1. + Il program di instalazion nol è rivât a disativâ un grup di volums clamât %1. + + + + DeletePartitionJob + + + Delete partition %1. + Eliminâ partizion %1. + + + + Delete partition <strong>%1</strong>. + Eliminâ partizion <strong>%1</strong>. + + + + Deleting partition %1. + Daûr a eliminâ la partizion %1. + + + + The installer failed to delete partition %1. + Il program di instalazion nol è rivât a eliminâ la partizion %1. + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + Chest dispositîf al à une tabele des partizions <strong>%1</strong>. + + + + 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. + Chest al è un dispositîf di <strong>loop</strong>.<br><br>Al è un pseudodispositîf cence tabele des partizions che al fâs deventâ un file un dispositîf a blocs. Chest gjenar di configurazion di solit al conten dome un sôl filesystem. + + + + 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. + Il program di instalazion <strong>nol rive a rilevâ une tabele des partizions</strong> sul dispositîf di memorie selezionât.<br><br>O il dispositîf nol à une tabele des partizions o la tabele des partizions e je ruvinade o di gjenar no cognossût.<br>Chest program di instalazion al pues creâ une gnove tabele des partizions par te sedi in maniere automatiche che cu la pagjine dal partizionament manuâl. + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <br><br>Chest al è il gjenar di tabele des partizions conseade pai sistemis modernis che a partissin di un ambient di inviament <strong>EFI</strong>. + + + + <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. + <br><br>Chest gjenar di tabele des partizions al è conseât dome pai sistemis plui vecjos, chei che a partissin di un ambient di inviament <strong>BIOS</strong>. In ducj chei altris câs al è conseât doprâ GPT.<br><br><strong>Atenzion:</strong>la tabele des partizions MBR al è un standard sorpassât de ete di MS-DOS.<br>A puedin jessi creadis dome 4 partizions <em>primariis</em> e di chês 4 dome une e pues jessi une partizion <em>estese</em>, che però a pues contignî tantis partizions <em>logjichis</em>. + + + + 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. + Il gjenar di <strong>tabele des partizions</strong> sul dispositîf di memorie selezionât.<br><br>La uniche maniere par cambiâ il gjenar di tabele des partizions e je chê di scancelâle e tornâ a creâ la tabele des partizion di zero. Cheste operazion e distrûç ducj i dâts sul dispositîf di memorie. <br>Chest program di instalazion al tignarà la tabele des partizions atuâl gjavât che no tu decidis in mût esplicit il contrari.<br>Se no tu sês sigûr, si preferìs doprâ GPT sui sistemis modernis. + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + Scrivi la configurazion LUKS par Dracut su %1 + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + Salt de scriture de configurazion LUKS par Dracut: la partizion "/" no je cifrade + + + + Failed to open %1 + No si è rivâts a vierzi %1 + + + + DummyCppJob + + + Dummy C++ Job + Lavôr C++ pustiç + + + + EditExistingPartitionDialog + + + Edit Existing Partition + Modificâ partizion esistente + + + + Con&tent: + + + + + &Keep + &Mantignî + + + + Format + Formatâ + + + + Warning: Formatting the partition will erase all existing data. + Atenzion: la formatazion de partizion e scancelarà ducj i dâts esistents. + + + + &Mount Point: + &Pont di montaç: + + + + Si&ze: + Di&mension: + + + + MiB + MiB + + + + Fi&le System: + Fi&le System: + + + + Flags: + Proprietâts: + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + Formulari + + + + En&crypt system + &Cifrâ il sisteme + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + Frase di acès + + + + Confirm passphrase + Conferme frase di acès + + + + + Please enter the same passphrase in both boxes. + Par plasê inserìs la stesse frase di acès in ducj i doi i ricuadris. + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Meti sul web il regjistri di instalazion? + + + + FillGlobalStorageJob + + + Set partition information + Stabilî informazions di partizion + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + Instalâ %1 te <strong>gnove</strong> partizion di sisteme %2. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + Instalâ %2 te partizion di sisteme %3 <strong>%1</strong>. + + + + Install boot loader on <strong>%1</strong>. + Instalâ il gjestôr di inviament su <strong>%1</strong>. + + + + Setting up mount points. + Daûr a configurâ i ponts di montaç. + + + + FinishedPage + + + Form + Formulari + + + + &Restart now + &Torne invie cumò + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + <h1>Fat dut.</h1><br/>%1 al è stât configurât sul computer.<br/>Tu puedis cumò scomençâ a doprâ il gnûf sisteme. + + + + <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> + <html><head/><body><p>Cuant che cheste casele e ven selezionade, il sisteme al tornarà a inviâsi a colp apene che si fasarà clic su <span style="font-style:italic;">Fat</span> o si sierarà il program di configurazion.</p></body></html> + + + + <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. + <h1>Fat dut.</h1><br/>%1 al è stât instalât sul computer.<br/>Tu puedis tornâ a inviâ la machine tal gnûf sisteme o continuâ a doprâ l'ambient Live di %2. + + + + <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> + <html><head/><body><p>Cuant che cheste casele e ven selezionade, il sisteme al tornarà a inviâsi a colp apene che si fasarà clic su <span style="font-style:italic;">Fat</span> o si sierarà il program di instalazion.</p></body></html> + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + <h1>Configurazion falide</h1><br/>%1 nol è stât configurât sul to computer.<br/>Il messaç di erôr al jere: %2. + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + <h1>Instalazion falide</h1><br/>%1 nol è stât instalât sul to computer.<br/>Il messaç di erôr al jere: %2. + + + + FinishedQmlViewStep + + + Finish + Finìs + + + + FinishedViewStep + + + Finish + Finìs + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + Formatâ la partizion %1 (filesystem: %2, dimension %3 MiB) su %4. + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + Formatâ la partizion <strong>%1</strong> di <strong>%3MiB</strong> cul filesystem <strong>%2</strong>. + + + + Formatting partition %1 with file system %2. + Daûr a formatâ la partizion %1 cul filesystem %2. + + + + The installer failed to format partition %1 on disk '%2'. + Il program di instalazion nol è rivât a formatâ la partizion %1 sul disc '%2'. + + + + GeneralRequirements + + + has at least %1 GiB available drive space + al à almancul %1 GiB di spazi disponibil + + + + There is not enough drive space. At least %1 GiB is required. + No si à vonde spazi libar te unitât. Al covente spazi par almancul %1 GiB. + + + + has at least %1 GiB working memory + al à almancul %1 GiB di memorie di lavôr + + + + The system does not have enough working memory. At least %1 GiB is required. + Il sisteme nol à vonde memorie di lavôr. Al covente spazi par almancul %1 GiB. + + + + is plugged in to a power source + al è tacât a une prese di alimentazion + + + + The system is not plugged in to a power source. + Il sisteme nol è tacât a une prese di alimentazion. + + + + is connected to the Internet + al è tacât a internet + + + + The system is not connected to the Internet. + Il sisteme nol è tacât a internet. + + + + is running the installer as an administrator (root) + al sta eseguint il program di instalazion come aministradôr (root) + + + + The setup program is not running with administrator rights. + Il program di configurazion nol è in esecuzion cui permès di aministradôr. + + + + The installer is not running with administrator rights. + Il program di instalazion nol è in esecuzion cui permès di aministradôr. + + + + has a screen large enough to show the whole installer + al à un schermi avonde grant par mostrâ dut il program di instalazion + + + + The screen is too small to display the setup program. + Il schermi al è masse piçul par visualizâ il program di configurazion. + + + + The screen is too small to display the installer. + Il schermi al è masse piçul par visualizâ il program di instalazion. + + + + HostInfoJob + + + Collecting information about your machine. + Daûr a tirâ dongje lis informazions su la machine. + + + + IDJob + + + + + + OEM Batch Identifier + Identificadôr dal lot OEM + + + + Could not create directories <code>%1</code>. + Impussibil creâ lis cartelis <code>%1</code>. + + + + Could not open file <code>%1</code>. + Impussibil vierzi il file <code>%1</code>. + + + + Could not write to file <code>%1</code>. + Impussibil scrivi sul file <code>%1</code>. + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + Daûr a creâ initramfs cun mkinitcpio. + + + + InitramfsJob + + + Creating initramfs. + Daûr a creâ initramfs. + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole no instalade + + + + Please install KDE Konsole and try again! + Par plasê instale KDE Konsole e torne prove! + + + + Executing script: &nbsp;<code>%1</code> + Esecuzion script: &nbsp;<code>%1</code> + + + + InteractiveTerminalViewStep + + + Script + Script + + + + KeyboardQmlViewStep + + + Keyboard + Tastiere + + + + KeyboardViewStep + + + Keyboard + Tastiere + + + + LCLocaleDialog + + + System locale setting + Impostazion di localizazion dal sisteme + + + + 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>. + La impostazion di localizazion dal sisteme e interesse la lenghe e la cumbinazion di caratars par cualchi element de interface utent a rie di comant.<br/>La impostazion atuâl e je <strong>%1</strong>. + + + + &Cancel + &Anule + + + + &OK + &Va ben + + + + LOSHJob + + + Configuring encrypted swap. + Daûr a configurâ la memorie di scambi (swap) cifrade. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + Formulari + + + + <h1>License Agreement</h1> + <h1>Acuardi di licence</h1> + + + + I accept the terms and conditions above. + O aceti i tiermins e lis condizions chi parsore. + + + + Please review the End User License Agreements (EULAs). + Si pree di tornâ a viodi i acuardis di licence pal utent finâl (EULAs). + + + + This setup procedure will install proprietary software that is subject to licensing terms. + La procedure di configurazion e instalarà software proprietari sometût a tiermins di licence. + + + + If you do not agree with the terms, the setup procedure cannot continue. + Se no tu concuardis cui tiermins, la procedure di configurazion no pues continuâ. + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + Cheste procedure di configurazion e pues instalâ software proprietari che al è sometût a tiermins di licence par podê furnî funzionalitâts adizionâls e miorâ la esperience dal utent. + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + Se no tu concuardis cui tiermins, il software proprietari nol vignarà instalât e al lôr puest a vignaran dopradis lis alternativis open source. + + + + LicenseViewStep + + + License + Licence + + + + LicenseWidget + + + URL: %1 + URL: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>%1 driver</strong><br/>di %2 + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>%1 driver video</strong><br/><font color="Grey">di %2</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>%1 plugin dal navigadôr</strong><br/><font color="Grey">di %2</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>%1 codec</strong><br/><font color="Grey">di %2</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>%1 pachet</strong><br/><font color="Grey">di %2</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">di %2</font> + + + + File: %1 + File: %1 + + + + Hide license text + Plate il test de licence + + + + Show the license text + Mostre il test de licence + + + + Open license agreement in browser. + Vierç l'acuardi di licence tal navigadôr. + + + + LocalePage + + + Region: + Regjon: + + + + Zone: + Zone: + + + + + &Change... + &Cambie... + + + + LocaleQmlViewStep + + + Location + Posizion + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + Posizion + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + Daûr a configurâ dal file clâf di LUKS. + + + + + No partitions are defined. + No je stade definide nissune partizion. + + + + + + Encrypted rootfs setup error + Erôr te configurazion di rootfs cifrât + + + + Root partition %1 is LUKS but no passphrase has been set. + La partizion lidrîs (root) %1 e je LUKS ma no je stade stabilide nissune frase di acès. + + + + Could not create LUKS key file for root partition %1. + Impussibil creâ il file clâf di LUKS pe partizion lidrîs (root) %1. + + + + Could not configure LUKS key file on partition %1. + No si è rivâts a configurâ il file clâf di LUKS su la partizion %1. + + + + MachineIdJob + + + Generate machine-id. + Gjenerâ id-machine. + + + + Configuration Error + Erôr di configurazion + + + + No root mount point is set for MachineId. + Nissun pont di montaç pe lidrîs al è stât stabilît par MachineId. + + + + Map + + + Timezone: %1 + Fûs orari: %1 + + + + 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. + Selezione la posizion preferide su pe mape in mût che il program di instalazion al podedi + sugjerî lis impostazions di localizazion e fûs orari. Chi sot tu puedis justâ lis impostazion sugjeridis. Cîr te + mape strissinantle par spostâsi e doprant +/- o la rudiele dal mouse par justâ l'ingrandiment. + + + + NetInstallViewStep + + + Package selection + Selezion pachets + + + + Office software + Software pal ufici + + + + Office package + Pachet pal ufici + + + + Browser software + Software par navigâ + + + + Browser package + Pachet par navigadôr + + + + Web browser + Navigadôr web + + + + Kernel + Kernel + + + + Services + Servizis + + + + Login + Acès + + + + Desktop + Scritori + + + + Applications + Aplicazions + + + + Communication + Comunicazion + + + + Development + Disvilup + + + + Office + Ufici + + + + Multimedia + Multimedia + + + + Internet + Internet + + + + Theming + Personalizazion teme + + + + Gaming + Zûcs + + + + Utilities + Utilitâts + + + + NotesQmlViewStep + + + Notes + Notis + + + + OEMPage + + + Ba&tch: + Lo&t: + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + <html><head/><body><p>Inserìs un identificadôr di lot achì. Chest al vignarà archiviât intal sisteme di destinazion.</p></body></html> + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + <html><head/><body><h1>Configurazion OEM</h1><p>Calamares al doprarà lis impostazions OEM te configurazion dal sisteme di destinazion.</p></body></html> + + + + OEMViewStep + + + OEM Configuration + Configurazion OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + Stabilìs l'identificadôr di lot OEM a <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Fûs orari: %1 + + + + Select your preferred Zone within your Region. + Selezione la tô Zone preferide dentri de tô Regjon. + + + + Zones + Zonis + + + + You can fine-tune Language and Locale settings below. + Tu puedis regolâ lis impostazions di Lenghe e Localizazion chi sot. + + + + PWQ + + + Password is too short + La password e je masse curte + + + + Password is too long + La password e je masse lungje + + + + Password is too weak + La password e je masse debile + + + + Memory allocation error when setting '%1' + Erôr di assegnazion de memorie tal stabilî '%1' + + + + Memory allocation error + Erôr di assegnazion de memorie + + + + The password is the same as the old one + La password e je compagne di chê vecje + + + + The password is a palindrome + La password e je un palindrom + + + + The password differs with case changes only + La password e cambie dome par vie di letaris maiusculis e minusculis + + + + The password is too similar to the old one + La password e somee masse a chê vecje + + + + The password contains the user name in some form + La password e conten in cualchi maniere il non utent + + + + The password contains words from the real name of the user in some form + La password e conten in cualchi maniere peraulis dal non reâl dal utent + + + + The password contains forbidden words in some form + La password e conten in cualchi maniere peraulis vietadis + + + + The password contains too few digits + La password e conten masse pocjis cifris + + + + The password contains too few uppercase letters + La password e conten masse pocjis letaris maiusculis + + + + The password contains fewer than %n lowercase letters + + La password e conten mancul di %n letare minuscule + La password e conten mancul di %n letaris minusculis + + + + + The password contains too few lowercase letters + La password e conten masse pocjis letaris minusculis + + + + The password contains too few non-alphanumeric characters + La password e conten masse pôcs caratars no-alfanumerics + + + + The password is too short + La password e je masse curte + + + + The password does not contain enough character classes + La password no conten vonde classis di caratars + + + + The password contains too many same characters consecutively + La password e conten masse caratars compagns consecutîfs + + + + The password contains too many characters of the same class consecutively + La password e conten masse caratars consecutîfs de stesse classe + + + + The password contains fewer than %n digits + + La password e conten mancul di %n cifre + La password e conten mancul di %n cifris + + + + + The password contains fewer than %n uppercase letters + + La password e conten mancul di %n letare maiuscule + La password e conten mancul di %n letaris maiusculis + + + + + The password contains fewer than %n non-alphanumeric characters + + La password e conten mancul di %n caratar no-alfanumeric + La password e conten mancul di %n caratars no-alfanumerics + + + + + The password is shorter than %n characters + + La password e je plui curte di %n caratar + La password e je plui curte di %n caratars + + + + + The password is a rotated version of the previous one + La password e je une version voltade di chê precedente + + + + The password contains fewer than %n character classes + + La password e conten mancul di %n classe di caratars + La password e conten mancul di %n classis di caratars + + + + + The password contains more than %n same characters consecutively + + La password e conten plui di %n caratar consecutîf compagn + La password e conten plui di %n caratars consecutîfs compagns + + + + + The password contains more than %n characters of the same class consecutively + + La password e conten plui di %n caratar consecutîf de stesse classe + La password e conten plui di %n caratars consecutîfs de stesse classe + + + + + The password contains monotonic sequence longer than %n characters + + La password e conten secuencis monotonichis plui lungjis di %n caratar + La password e conten secuencis monotonichis plui lungjis di %n caratars + + + + + The password contains too long of a monotonic character sequence + La password e conten une secuence di caratars monotone masse lungje + + + + No password supplied + Nissune password furnide + + + + Cannot obtain random numbers from the RNG device + Impussibil otignî numars casuâi dal dispositîf RNG + + + + Password generation failed - required entropy too low for settings + Gjenerazion de password falide - entropie domandade masse basse pes impostazions + + + + The password fails the dictionary check - %1 + La password no passe il control dal dizionari - %1 + + + + The password fails the dictionary check + La password no passe il control dal dizionari + + + + Unknown setting - %1 + Impostazion no cognossude - %1 + + + + Unknown setting + Impostazion no cognossude + + + + Bad integer value of setting - %1 + Valôr intîr de impostazion no valit - %1 + + + + Bad integer value + Valôr intîr no valit + + + + Setting %1 is not of integer type + La impostazion %1 no je di gjenar intîr + + + + Setting is not of integer type + La impostazion no je di gjenar intîr + + + + Setting %1 is not of string type + La impostazion %1 no je di gjenar stringhe + + + + Setting is not of string type + La impostazion no je di gjenar stringhe + + + + Opening the configuration file failed + No si è rivâts a vierzi il file di configurazion + + + + The configuration file is malformed + Il file di configurazion al è malformât + + + + Fatal failure + Erôr fatâl + + + + Unknown error + Erôr no cognossût + + + + Password is empty + Password vueide + + + + PackageChooserPage + + + Form + Formulari + + + + Product Name + Non prodot + + + + TextLabel + EticheteTest + + + + Long Product Description + Descrizion estese dal prodot + + + + Package Selection + Selezion pachets + + + + Please pick a product from the list. The selected product will be installed. + Sielç un prodot de liste. Il prodot selezionât al vignarà instalât. + + + + PackageChooserQmlViewStep + + + Packages + Pachets + + + + PackageChooserViewStep + + + Packages + Pachets + + + + PackageModel + + + Name + Non + + + + Description + Descrizion + + + + Page_Keyboard + + + Form + Formulari + + + + Keyboard Model: + Model de tastiere: + + + + Type here to test your keyboard + Scrîf achì par provâ la tastiere + + + + Page_UserSetup + + + Form + Formulari + + + + What is your name? + Ce non âstu? + + + + Your Full Name + Il to non complet + + + + What name do you want to use to log in? + Ce non vûstu doprâ pe autenticazion? + + + + login + acès + + + + What is the name of this computer? + Ce non aial chest computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>Si doprarà chest non inte rêt par rindi visibil a altris chest computer.</small> + + + + Computer Name + Non dal computer + + + + Choose a password to keep your account safe. + Sielç une password par tignî il to account al sigûr. + + + + + <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> + <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> + + + + + Password + Password + + + + + Repeat Password + Ripeti password + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Cuant che cheste casele e je selezionade, il control su la robustece de password al ven fat e no si podarà doprâ une password debile. + + + + Require strong passwords. + Si domande passwords robustis. + + + + Log in automatically without asking for the password. + Jentre in automatic cence domandâ la password. + + + + Use the same password for the administrator account. + Dopre la stesse password pal account di aministradôr. + + + + Choose a password for the administrator account. + Sielç une password pal account dal aministradôr. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure.</small> + + + + PartitionLabelsView + + + Root + Lidrîs + + + + Home + Home + + + + Boot + Boot + + + + EFI system + Sisteme EFI + + + + Swap + Swap + + + + New partition for %1 + Gnove partizion par %1 + + + + New partition + Gnove partizion + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + Spazi libar + + + + + New partition + Gnove partizion + + + + Name + Non + + + + File System + File System + + + + File System Label + + + + + Mount Point + Pont di montaç + + + + Size + Dimension + + + + PartitionPage + + + Form + Formulari + + + + Storage de&vice: + Dis&positîf di memorie: + + + + &Revert All Changes + &Disfe dutis lis modifichis + + + + New Partition &Table + Gnove &tabele des partizions + + + + Cre&ate + Cre&ê + + + + &Edit + &Modifiche + + + + &Delete + E&limine + + + + New Volume Group + Gnûf grup di volums + + + + Resize Volume Group + Ridimensione grup di volums + + + + Deactivate Volume Group + Disative grup di volums + + + + Remove Volume Group + Gjave grup di volums + + + + I&nstall boot loader on: + I&nstale gjestôr di inviament su: + + + + Are you sure you want to create a new partition table on %1? + Creâ pardabon une gnove tabele des partizions su %1? + + + + Can not create new partition + Impussibil creâ une gnove partizion + + + + 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. + La tabele des partizions su %1 e à za %2 partizions primaris e no si pues zontâ altris. Gjave une partizion primarie e zonte une partizion estese al so puest. + + + + PartitionViewStep + + + Gathering system information... + Daûr a dâ dongje lis informazions dal sisteme... + + + + Partitions + Partizions + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + Atuâl: + + + + After: + Dopo: + + + + No EFI system partition configured + Nissune partizion di sisteme EFI configurade + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + Opzion par doprâ GPT su BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + Partizion di inviament no cifrade + + + + 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. + E je stade configurade une partizion di inviament separade adun cuntune partizion lidrîs cifrade, ma la partizion di inviament no je cifrade.<br/><br/> A esistin problemis di sigurece cun chest gjenar di configurazion, par vie che i file di sisteme impuartants a vegnin tignûts intune partizion no cifrade.<br/>Tu puedis continuâ se tu lu desideris, ma il sbloc dal filesystem al sucedarà plui indenant tal inviament dal sisteme.<br/>Par cifrâ la partizion di inviament, torne indaûr e torne creile, selezionant <strong>Cifrâ</strong> tal barcon di creazion de partizion. + + + + has at least one disk device available. + al à almancul une unitât disc disponibil. + + + + There are no partitions to install on. + No son partizions dulà lâ a instalâ. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + Lavôr di aspiet e compuartament di Plasma + + + + + Could not select KDE Plasma Look-and-Feel package + Impussibil selezionâ il pachet di KDE Plasma Look-and-Feel + + + + PlasmaLnfPage + + + Form + Formulari + + + + 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. + Sielç un aspiet-e-compuartament pal scritori KDE Plasma. Si pues ancje saltâ chest passaç e configurâ l'aspiet e il compuartament une volte finide la configurazion dal sisteme. Fasint clic suntune selezion dal aspiet-e-compuartament si varà une anteprime di chel teme. + + + + 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. + Sielç un aspiet-e-compuartament pal scritori KDE Plasma. Si pues ancje saltâ chest passaç e configurâ l'aspiet e il compuartament une volte finide la instalazion dal sisteme. Fasint clic suntune selezion dal aspiet-e-compuartament si varà une anteprime di chel teme. + + + + PlasmaLnfViewStep + + + Look-and-Feel + Aspiet-e-compuartament + + + + PreserveFiles + + + Saving files for later ... + Daûr a salvâ files par dopo ... + + + + No files configured to save for later. + Nissun file configurât di salvâ par dopo. + + + + Not all of the configured files could be preserved. + Nol è stât pussibil preservâ ducj i files configurâts. + + + + ProcessResult + + + +There was no output from the command. + +No si à vût un output dal comant. + + + + +Output: + + +Output: + + + + + External command crashed. + Comant esterni colassât. + + + + Command <i>%1</i> crashed. + Comant <i>%1</i> colassât. + + + + External command failed to start. + Il comant esterni nol è rivât a inviâsi. + + + + Command <i>%1</i> failed to start. + Il comant <i>%1</i> nol è rivât a inviâsi. + + + + Internal error when starting command. + Erôr interni tal inviâ il comant. + + + + Bad parameters for process job call. + Parametris sbaliâts par processâ la clamade de operazion. + + + + External command failed to finish. + Il comant esterni nol è stât finît. + + + + Command <i>%1</i> failed to finish in %2 seconds. + Il comant <i>%1</i> nol è stât finît in %2 seconts. + + + + External command finished with errors. + Il comant esterni al è terminât cun erôrs. + + + + Command <i>%1</i> finished with exit code %2. + Il comant <i>%1</i> al è terminât cul codiç di jessude %2. + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + no cognossût + + + + extended + estese + + + + unformatted + no formatade + + + + swap + swap + + + + + Default + Predefinît + + + + + + + File not found + File no cjatât + + + + Path <pre>%1</pre> must be an absolute path. + Il percors <pre>%1</pre> al à di jessi un percors assolût. + + + + Directory not found + Cartele no cjatade + + + + + Could not create new random file <pre>%1</pre>. + Impussibil creâ il gnûf file casuâl <pre>%1</pre>. + + + + No product + Nissun prodot + + + + No description provided. + Nissune descrizion dade. + + + + (no mount point) + (nissun pont di montaç) + + + + Unpartitioned space or unknown partition table + Spazi no partizionât o tabele des partizions no cognossude + + + + Recommended + + + <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> + <p>Chest computer nol sodisfe cualchi recuisît conseât par configurâ %1.<br/> + La configurazion e pues continuâ, ma cualchi funzionalitât e podarès jessi disabilitade.</p> + + + + RemoveUserJob + + + Remove live user from target system + Gjavâ l'utent “live” dal sisteme di destinazion + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + Gjavâ il grup di volums clamât %1. + + + + Remove Volume Group named <strong>%1</strong>. + Gjavâ il grup di volums clamât <strong>%1</strong>. + + + + The installer failed to remove a volume group named '%1'. + Il program di instalazion nol è rivât a gjavâ un grup di volums clamât '%1'. + + + + ReplaceWidget + + + Form + Formulari + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + Selezione dulà lâ a instalâ %1.<br/><font color="red">Atenzion: </font>cheste operazion e eliminarà ducj i file de partizion selezionade. + + + + The selected item does not appear to be a valid partition. + L'element selezionât nol somee jessi une partizion valide. + + + + %1 cannot be installed on empty space. Please select an existing partition. + No si pues instalâ %1 su spazi vueit. Par plasê selezione une partizion esistente. + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %1 nol pues jessi instalât suntune partizion estese. Par plasê selezione une partizion primarie o logjiche esistente. + + + + %1 cannot be installed on this partition. + No si pues instalâ %1 su cheste partizion. + + + + Data partition (%1) + Partizion dâts (%1) + + + + Unknown system partition (%1) + Partizion di sisteme no cognossude (%1) + + + + %1 system partition (%2) + %1 partizion di sisteme (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <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. + + + + <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. + <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. + + + + + + <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. + <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. + + + + The EFI system partition at %1 will be used for starting %2. + La partizion di sisteme EFI su %1 e vignarà doprade par inviâ %2. + + + + EFI system partition: + Partizion di sisteme EFI: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Chest computer nol sodisfe i recuisîts minims pe instalazion di %1.<br/> + La instalazion no pues continuâ.</p> + + + + <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> + <p>Chest computer nol sodisfe cualchi recuisît conseât par configurâ %1.<br/> + La configurazion e pues continuâ, ma cualchi funzionalitât e podarès jessi disabilitade.</p> + + + + ResizeFSJob + + + Resize Filesystem Job + Operazion di ridimensionament dal filesystem + + + + Invalid configuration + Configurazion no valide + + + + The file-system resize job has an invalid configuration and will not run. + La operazion di ridimensionament dal filesystem e à une configurazion no valide e no vignarà eseguide. + + + + KPMCore not Available + KPMCore no disponibil + + + + Calamares cannot start KPMCore for the file-system resize job. + Calamares nol rive a inviâ KPMCore pe operazion di ridimensionament dal filesystem. + + + + + + + + Resize Failed + Ridimensionament falît + + + + The filesystem %1 could not be found in this system, and cannot be resized. + Nol è stât pussibil cjatâ in chest sisteme il filesystem %1 e duncje nol pues jessi ridimensionât. + + + + The device %1 could not be found in this system, and cannot be resized. + Nol è stât pussibil cjatâ in chest sisteme il dispositîf %1 e duncje nol pues jessi ridimensionât. + + + + + The filesystem %1 cannot be resized. + Impussibil ridimensionâ il filesystem %1. + + + + + The device %1 cannot be resized. + Impussibil ridimensionâ il dispositîf %1. + + + + The filesystem %1 must be resized, but cannot. + Si scugne ridimensionâ il filesystem %1, ma no si rive. + + + + The device %1 must be resized, but cannot + Si scugne ridimensionâ il filesystem %1, ma no si rive. + + + + ResizePartitionJob + + + Resize partition %1. + Ridimensionâ partizion %1 + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + Ridimensionâ la partizion <strong>%1</strong> di <strong>%2MiB</strong> a <strong>%3MiB</strong>. + + + + Resizing %2MiB partition %1 to %3MiB. + Ridimensionâ la partizion %1 di %2MiB a %3MiB. + + + + The installer failed to resize partition %1 on disk '%2'. + Il program di instalazion nol è rivât a ridimensionâ la partizion %1 sul disc '%2'. + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + Ridimensione grup di volums + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + Ridimensionâ il grup di volums clamât %1 di %2 a %3. + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + Ridimensionâ il grup di volums clamât <strong>%1</strong> di <strong>%2</strong> a <strong>%3</strong>. + + + + The installer failed to resize a volume group named '%1'. + Il program di instalazion nol è rivât a ridimensionâ un grup di volums clamât '%1'. + + + + ResultsListDialog + + + For best results, please ensure that this computer: + Par otignî i miôrs risultâts, siguriti che chest computer: + + + + System requirements + Recuisîts di sisteme + + + + ScanningDialog + + + Scanning storage devices... + Scandai dai dispositîfs di memorie... + + + + Partitioning + Partizionament + + + + SetHostNameJob + + + Set hostname %1 + Stabilî il non-host a %1 + + + + Set hostname <strong>%1</strong>. + Stabilî il non-host a <strong>%1</strong>. + + + + Setting hostname %1. + Daûr a stabilî il non-host a %1. + + + + + Internal Error + Erôr interni + + + + + Cannot write hostname to target system + Impussibil scrivi il non-host sul sisteme di destinazion + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + Stabilî il model di tastiere a %1, disposizion a %2-%3 + + + + Failed to write keyboard configuration for the virtual console. + No si è rivâts a scrivi la configurazion de tastiere pe console virtuâl. + + + + + + Failed to write to %1 + No si è rivâts a scrivi su %1 + + + + Failed to write keyboard configuration for X11. + No si è rivâts a scrivi la configurazion de tastiere par X11. + + + + Failed to write keyboard configuration to existing /etc/default directory. + No si è rivâts a scrivi la configurazion de tastiere te cartele esistente /etc/default . + + + + SetPartFlagsJob + + + Set flags on partition %1. + Stabilî lis opzions te partizion %1. + + + + Set flags on %1MiB %2 partition. + Stabilî lis opzions te partizion %2 di %1MiB. + + + + Set flags on new partition. + Stabilî lis opzion te gnove partizion. + + + + Clear flags on partition <strong>%1</strong>. + Netâ lis opzions te partizion <strong>%1</strong>. + + + + Clear flags on %1MiB <strong>%2</strong> partition. + Netâ lis opzions te partizion <strong>%2</strong> di %1MiB. + + + + Clear flags on new partition. + Netâ lis opzions te gnove partizion. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + Segnâ la partizion <strong>%1</strong> come <strong>%2</strong>. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Segnâ la partizion <strong>%2</strong> di %1MiB come <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. + Segnâ la gnove partizion come <strong>%1</strong>. + + + + Clearing flags on partition <strong>%1</strong>. + Daûr a netâ lis opzions te partizion <strong>%1</strong>. + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + Daûr a netâ lis opzion te partizion <strong>%2</strong> di %1MiB. + + + + Clearing flags on new partition. + Daûr a netâ lis opzions te gnove partizion. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + Daûr a meti lis opzions <strong>%2</strong> te partizion <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Daûr a meti lis opzions <strong>%3</strong> te partizion <strong>%2</strong> di %1MiB. + + + + Setting flags <strong>%1</strong> on new partition. + Daûr a meti lis opzions <strong>%1</strong> te gnove partizion. + + + + The installer failed to set flags on partition %1. + Il program di instalazion nol è rivât a meti lis opzions te partizion %1. + + + + SetPasswordJob + + + Set password for user %1 + Stabilî la password pal utent %1 + + + + Setting password for user %1. + Daûr a stabilî la password pal utent %1. + + + + Bad destination system path. + Percors di sisteme de destinazion sbaliât. + + + + rootMountPoint is %1 + Il rootMountPoint (pont di montaç de lidrîs) al è %1 + + + + Cannot disable root account. + Impussibil disabilitâ l'account di root. + + + + passwd terminated with error code %1. + passwd terminât cun codiç di erôr %1. + + + + Cannot set password for user %1. + Impussibil stabilî la password pal utent %1. + + + + usermod terminated with error code %1. + usermod terminât cun codiç di erôr %1. + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Meti il fûs orari su %1/%2 + + + + Cannot access selected timezone path. + Impussibil acedi al percors dal fûs orari selezionât. + + + + Bad path: %1 + Percors no valit: %1 + + + + Cannot set timezone. + Impussibil stabilî il fûs orari. + + + + Link creation failed, target: %1; link name: %2 + Creazion dal colegament falide, destinazion: %1; non colegament: %2 + + + + Cannot set timezone, + Impussibil stabilî il fûs orari, + + + + Cannot open /etc/timezone for writing + Impussibil vierzi /etc/timezone pe scriture + + + + SetupGroupsJob + + + Preparing groups. + Daûr a preparâ i grups. + + + + + Could not create groups in target system + Impussibil creâ i grups intal sisteme di destinazion + + + + These groups are missing in the target system: %1 + A mancjin chescj grups tal sisteme di destinazion: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configurâ i utents <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + Impussibil eseguî chmod sul file sudoers. + + + + Cannot create sudoers file for writing. + Impussibil creâ il file sudoers pe scriture. + + + + ShellProcessJob + + + Shell Processes Job + Operazion dai procès de shell + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &Va ben + + + + &Yes + &Sì + + + + &No + &No + + + + &Cancel + &Anule + + + + &Close + S&iere + + + + TrackingInstallJob + + + Installation feedback + Opinion su la instalazion + + + + Sending installation feedback. + Daûr a inviâ la opinion su la instalazion. + + + + Internal error in install-tracking. + Erôr interni in install-tracking. + + + + HTTP request timed out. + Richieste HTTP scjadude. + + + + TrackingKUserFeedbackJob + + + KDE user feedback + Opinion dal utent di KDE + + + + Configuring KDE user feedback. + Daûr a configurâ la opinione dal utent di KDE. + + + + + Error in KDE user feedback configuration. + Erôr te configurazion de opinion dal utent di KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di Calamares %1. + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + Opinion su la machine + + + + Configuring machine feedback. + Daûr a configurâ la opinion su la machine. + + + + + Error in machine feedback configuration. + Erôr inte configurazion de opinion su la machine. + + + + Could not configure machine feedback correctly, script error %1. + Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di script %1. + + + + Could not configure machine feedback correctly, Calamares error %1. + Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di Calamares %1. + + + + TrackingPage + + + Form + Formulari + + + + Placeholder + Segnepuest + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <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> + + + + <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> + <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> + + + + 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. + 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. + + + + 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. + 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. + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + 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>. + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + 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>. + + + + TrackingViewStep + + + Feedback + Opinion + + + + UmountJob + + + Unmount file systems. + Dismonte i file-systems. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + <small>Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la configurazion.</small> + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + <small>Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la instalazion.</small> + + + + UsersQmlViewStep + + + Users + Utents + + + + UsersViewStep + + + Users + Utents + + + + VariantModel + + + Key + Column header for key/value + Clâf + + + + Value + Column header for key/value + Valôr + + + + VolumeGroupBaseDialog + + + Create Volume Group + Creâ Grup di Volums + + + + List of Physical Volumes + Liste di volums fisics + + + + Volume Group Name: + Non dal grup di volums: + + + + Volume Group Type: + Gjenar dal grup di volums: + + + + Physical Extent Size: + Dimension de estension fisiche: + + + + MiB + MiB + + + + Total Size: + Dimension totâl: + + + + Used Size: + Dimension doprade: + + + + Total Sectors: + Setôrs totâi: + + + + Quantity of LVs: + Cuantitât di VLs: + + + + WelcomePage + + + Form + Formulari + + + + + Select application and system language + Selezionâ lenghe di sisteme e di aplicazions + + + + &About + &Informazions + + + + Open donations website + Vierç il sît web pes donazions + + + + &Donate + &Done + + + + Open help and support website + Vierç il sît web pal jutori e pal supuart + + + + &Support + &Supuart + + + + Open issues and bug-tracking website + Vierç il sît web sui problemis e lis segnalazions/indizis sui erôrs + + + + &Known issues + &Problemis cognossûts + + + + Open release notes website + Vierç il sît web des notis di publicazion + + + + &Release notes + &Notis di publicazion + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>Benvignûts sul program di configurazion Calamares par %1.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>Benvignûts te configurazion di %1.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Benvignûts sul program di instalazion Calamares par %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Benvignûts sul program di instalazion di %1.</h1> + + + + %1 support + Supuart di %1 + + + + About %1 setup + Informazions su la configurazion di %1 + + + + About %1 installer + Informazion su la instalazion di %1 + + + + <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. + <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. + + + + WelcomeQmlViewStep + + + Welcome + Benvignûts + + + + WelcomeViewStep + + + Welcome + Benvignûts + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Erôr di configurazion + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + <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. + + + + Back + Indaûr + + + + calamares-sidebar + + + Show debug information + Mostre informazions di debug + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <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>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <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>. + + + + Back + Indaûr + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + Model de tastiere: + + + + Layouts + Disposizions + + + + Type here to test your keyboard + Scrîf achì par provâ la tastiere + + + + Variants + Variantis + + + + localeq + + + Change + Cambie + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + <h3>%1</h3> + <p>Chescj a son esemplis di notis di publicazion.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <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> + + + + Back + Indaûr + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Sielç e dopre il to non utent e lis credenziâls par jentrâ e eseguî ativitâts di aministradôr + + + + What is your name? + Ce non âstu? + + + + Your Full Name + Il to non complet + + + + What name do you want to use to log in? + Ce non vûstu doprâ pe autenticazion? + + + + Login Name + Non di acès + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Se chest computer al vignarà doprât di plui personis, tu puedis creâ plui account dopo vê completade la instalazion. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + A son ametûts dome i numars, lis letaris minusculis, lis liniutis bassis e i tratuts. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Ce non aial chest computer? + + + + Computer Name + Non dal computer + + + + This name will be used if you make the computer visible to others on a network. + Si doprarà chest non se tu rindis visibil a altris chest computer suntune rêt. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Sielç une password par tignî il to account al sigûr. + + + + Password + Password + + + + Repeat Password + Ripeti password + + + + 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. + 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. + + + + Validate passwords quality + Convalidâ la cualitât des passwords + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Cuant che cheste casele e je selezionade, il control su la fuarce de password al ven fat e no si podarà doprâ une password debile. + + + + Log in automatically without asking for the password + Jentre in automatic cence domandâ la password + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Torne dopre la password dal utent pe password di root + + + + Use the same password for the administrator account. + Dopre la stesse password pal account di aministradôr. + + + + Choose a root password to keep your account safe. + Sielç une password di root par tignî il to account al sigûr. + + + + Root Password + Password di root + + + + Repeat Root Password + Ripeti password di root + + + + Enter the same password twice, so that it can be checked for typing errors. + Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. + + + + welcomeq + + + <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> + <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> + + + + About + Informazions + + + + Support + Supuart + + + + Known issues + Problemis cognossûts + + + + Release notes + Notis di publicazion + + + + Donate + Done + + + diff --git a/lang/calamares_gl.ts b/lang/calamares_gl.ts index d97124d99..775374c7a 100644 --- a/lang/calamares_gl.ts +++ b/lang/calamares_gl.ts @@ -1,21 +1,29 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. O <strong> entorno de arranque </strong> do sistema. <br><br> Os sistemas x86 antigos só admiten <strong> BIOS </strong>.<br> Os sistemas modernos empregan normalmente <strong> EFI </strong>, pero tamén poden arrincar como BIOS se funcionan no modo de compatibilidade. - + 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. Este sistema arrincou con <strong> EFI </strong> como entorno de arranque.<br><br> Para configurar o arranque dende un entorno EFI, este instalador debe configurar un cargador de arranque, como <strong>GRUB</strong> ou <strong>systemd-boot</strong> nunha <strong> Partición de Sistema EFI</strong>. Este proceso é automático, salvo que escolla particionamento manual. Nese caso deberá escoller unha existente ou crear unha pola súa conta. - + 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. Este sistema arrincou con <strong> BIOS </strong> como entorno de arranque.<br><br> Para configurar o arranque dende un entorno BIOS, este instalador debe configurar un cargador de arranque, como <strong>GRUB</strong>, ben ó comezo dunha partición ou no <strong>Master Boot Record</strong> preto do inicio da táboa de particións (recomendado). Este proceso é automático, salvo que escolla particionamento manual, nese caso deberá configuralo pola súa conta. @@ -23,27 +31,27 @@ BootLoaderModel - + Master Boot Record of %1 Rexistro de arranque maestro de %1 - + Boot Partition Partición de arranque - + System Partition Partición do sistema - + Do not install a boot loader Non instalar un cargador de arranque - + %1 (%2) %1 (%2) @@ -51,7 +59,7 @@ Calamares::BlankViewStep - + Blank Page Páxina en branco @@ -59,58 +67,78 @@ Calamares::DebugWindow - + Form Formulario - + GlobalStorage Almacenamento global - + JobQueue Cola de traballo - + Modules Módulos - + Type: Tipo: - - + + none Non - + Interface: Interface - - Tools - Ferramentas + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Informe de depuración de erros. @@ -118,12 +146,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Instalar @@ -131,12 +159,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -144,7 +172,7 @@ Calamares::JobThread - + Done Feito @@ -152,7 +180,7 @@ Calamares::NamedJob - + Example job (%1) @@ -160,17 +188,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Executando a orde %1 %2 @@ -178,32 +206,32 @@ Calamares::PythonJob - + Running %1 operation. Excutando a operación %1. - + Bad working directory path A ruta ó directorio de traballo é errónea - + Working directory %1 for python job %2 is not readable. O directorio de traballo %1 para o traballo de python %2 non é lexible - + Bad main script file Ficheiro de script principal erróneo - + Main script file %1 for python job %2 is not readable. O ficheiro principal de script %1 para a execución de python %2 non é lexible. - + Boost.Python error in job "%1". Boost.Python tivo un erro na tarefa "%1". @@ -211,25 +239,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -237,7 +270,7 @@ - + (%n second(s)) @@ -245,7 +278,7 @@ - + System-requirements checking is complete. @@ -253,245 +286,236 @@ Calamares::ViewManager - - &Back - &Atrás - - - - &Next - &Seguinte - - - - &Cancel - &Cancelar - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Cancelar a instalación sen cambiar o sistema - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Erro na instalación - + + Error + Erro + + + + &Yes + &Si + + + + &No + &Non + + + + &Close + &Pechar + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Fallou a inicialización do Calamares - + %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. Non é posíbel instalar %1. O calamares non foi quen de cargar todos os módulos configurados. Este é un problema relacionado con como esta distribución utiliza o Calamares. - + <br/>The following modules could not be loaded: <br/> Non foi posíbel cargar os módulos seguintes: - + + Continue with setup? + Continuar coa posta en marcha? + + + Continue with installation? - + 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> - + + 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> + O %1 instalador está a piques de realizar cambios no seu disco para instalar %2.<br/><strong>Estes cambios non poderán desfacerse.</strong> + + + &Set up now - + + &Install now + &Instalar agora + + + + Go &back + Ir &atrás + + + &Set up - + &Install &Instalar - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Completouse a instalacion. Peche o instalador + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Cancelar a instalación sen cambiar o sistema + + + + &Next + &Seguinte + + + + &Back + &Atrás + + + + &Done + &Feito + + + + &Cancel + &Cancelar + + + Cancel setup? - + Cancel installation? Cancelar a instalación? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Desexa realmente cancelar o proceso actual de instalación? O instalador pecharase e perderanse todos os cambios. - - - - &Yes - &Si - - - - - &No - &Non - - - - &Close - &Pechar - - - - Continue with setup? - Continuar coa posta en marcha? - - - - 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> - O %1 instalador está a piques de realizar cambios no seu disco para instalar %2.<br/><strong>Estes cambios non poderán desfacerse.</strong> - - - - &Install now - &Instalar agora - - - - Go &back - Ir &atrás - - - - &Done - &Feito - - - - The installation is complete. Close the installer. - Completouse a instalacion. Peche o instalador - - - - Error - Erro - - - - Installation Failed - Erro na instalación - CalamaresPython::Helper - + Unknown exception type Excepción descoñecida - + unparseable Python error Erro de Python descoñecido - + unparseable Python traceback O rastreo de Python non é analizable. - + Unfetchable Python error. Erro de Python non recuperable - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Atrás - - - - &Next - &Seguinte - - - - &Cancel - &Cancelar - - - + %1 Setup Program - + %1 Installer Instalador de %1 + + + ChangeFilesystemLabelJob - - Show debug information - Mostrar informes de depuración + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + O instalador fallou ó actualizar a táboa de particións no disco '%1'. CheckerContainer - + Gathering system information... A reunir a información do sistema... @@ -499,157 +523,197 @@ O instalador pecharase e perderanse todos os cambios. ChoicePage - + Form Formulario - - After: - Despois: - - - - Boot loader location: - Localización do cargador de arranque: - - - + Select storage de&vice: Seleccione o dispositivo de almacenamento: - - - - + + + + Current: Actual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Despois: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particionado manual</strong><br/> Pode crear o redimensionar particións pola súa conta. + + + Reuse %1 as home partition for %2. Reutilizar %1 como partición home para %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Seleccione unha partición para acurtar, logo empregue a barra para redimensionala</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Localización do cargador de arranque: + + + <strong>Select a partition to install on</strong> <strong>Seleccione unha partición para instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Non foi posible atopar unha partición de sistema de tipo EFI. Por favor, volva atrás e empregue a opción de particionado manual para crear unha en %1. - + The EFI system partition at %1 will be used for starting %2. A partición EFI do sistema en %1 será usada para iniciar %2. - + EFI system partition: Partición EFI do sistema: - + 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. Esta unidade de almacenamento non semella ter un sistema operativo instalado nela. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Borrar disco</strong><br/>Esto <font color="red">eliminará</font> todos os datos gardados na unidade de almacenamento seleccionada. - - 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. - A unidade de almacenamento ten %1 nela. Que desexa facer?<br/>Poderá revisar e confirmar a súa elección antes de que se aplique algún cambio á unidade. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar a carón</strong><br/>O instalador encollerá a partición para facerlle sitio a %1 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituír a partición</strong><br/>Substitúe a partición con %1. - + + 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. + A unidade de almacenamento ten %1 nela. Que desexa facer?<br/>Poderá revisar e confirmar a súa elección antes de que se aplique algún cambio á unidade. + + + 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. Esta unidade de almacenamento xa ten un sistema operativo instalado nel. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento - + 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. Esta unidade de almacenamento ten múltiples sistemas operativos instalados nela. Que desexa facer?<br/>Poderá revisar e confirmar as súas eleccións antes de que calquera cambio sexa feito na unidade de almacenamento. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Desmontar os volumes para levar a cabo as operacións de particionado en %1 - + Clearing mounts for partitioning operations on %1. Desmontando os volumes para levar a cabo as operacións de particionado en %1. - + Cleared all mounts for %1 Os volumes para %1 foron desmontados @@ -657,22 +721,17 @@ O instalador pecharase e perderanse todos os cambios. ClearTempMountsJob - + Clear all temporary mounts. Limpar todas as montaxes temporais. - + Clearing all temporary mounts. Limpando todas as montaxes temporais. - - Cannot get list of temporary mounts. - Non se pode obter unha lista dos montaxes temporais. - - - + Cleared all temporary mounts. Desmontados todos os volumes temporais. @@ -680,18 +739,18 @@ O instalador pecharase e perderanse todos os cambios. CommandList - - + + Could not run command. Non foi posíbel executar a orde. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. A orde execútase no ambiente hóspede e precisa coñecer a ruta a root, mais non se indicou ningún rootMountPoint. - + The command needs to know the user's name, but no username is defined. A orde precisa coñecer o nome do usuario, mais non se indicou ningún nome de usuario. @@ -699,100 +758,235 @@ O instalador pecharase e perderanse todos os cambios. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este ordenador non satisfai os requerimentos mínimos ara a instalación de %1.<br/>A instalación non pode continuar. <a href="#details">Máis información...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este ordenador non satisfai algúns dos requisitos recomendados para instalar %1.<br/> A instalación pode continuar, pero pode que algunhas características sexan desactivadas. - - - - This program will ask you some questions and set up %2 on your computer. - Este programa faralle algunhas preguntas mentres prepara %2 no seu ordenador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Reciba a benvida ao instalador Calamares para %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Benvido o instalador %1.</h1> - - - + Set keyboard model to %1.<br/> Seleccionado modelo de teclado a %1.<br/> - + Set keyboard layout to %1/%2. Seleccionada a disposición do teclado a %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. A linguaxe do sistema será establecida a %1. - + The numbers and dates locale will be set to %1. A localización de números e datas será establecida a %1. - - Set timezone to %1/%2.<br/> - Establecer a zona de tempo a %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Instalación de rede. (Desactivado: Recibírense datos de grupos incorrectos) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Selección de pacotes. + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Installación por rede. (Desactivadas. Non se pudo recupera-la lista de pacotes, comprobe a sua conexión a rede) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Este ordenador non satisfai os requerimentos mínimos ara a instalación de %1.<br/>A instalación non pode continuar. <a href="#details">Máis información...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Este ordenador non satisfai algúns dos requisitos recomendados para instalar %1.<br/> A instalación pode continuar, pero pode que algunhas características sexan desactivadas. + + + + This program will ask you some questions and set up %2 on your computer. + Este programa faralle algunhas preguntas mentres prepara %2 no seu ordenador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + O nome de usuario é demasiado longo. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + O nome do computador é demasiado curto. + + + + Your hostname is too long. + O nome do computador é demasiado longo. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Os contrasinais non coinciden! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Erro na instalación + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Instalacion completa + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + Completouse a instalación de %1 + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Resumo + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + Esta é unha vista xeral do que vai acontecer cando inicie o procedemento de instalación. + ContextualProcessJob - + Contextual Processes Job Tarefa de procesos contextuais @@ -800,100 +994,136 @@ O instalador pecharase e perderanse todos os cambios. CreatePartitionDialog - + Create a Partition Crear partición - - MiB - MiB - - - - Partition &Type: - &Tipo de partición: - - - - &Primary - &Primaria - - - - E&xtended - E&xtendida - - - - Fi&le System: - Sistema de ficheiros: - - - - LVM LV name - Nome de LV de LVM - - - - Flags: - Bandeiras: - - - - &Mount Point: - Punto de &montaxe: - - - + Si&ze: &Tamaño: - + + MiB + MiB + + + + Partition &Type: + &Tipo de partición: + + + + Primar&y + + + + + E&xtended + E&xtendida + + + + Fi&le System: + Sistema de ficheiros: + + + + LVM LV name + Nome de LV de LVM + + + + &Mount Point: + Punto de &montaxe: + + + + Flags: + Bandeiras: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt Encriptar - + Logical Lóxica - + Primary Primaria - + GPT GPT - + Mountpoint already in use. Please select another one. Punto de montaxe xa en uso. Faga o favor de escoller outro + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Creando unha nova partición %1 en %2. - + The installer failed to create partition on disk '%1'. O instalador fallou ó crear a partición no disco '%1'. @@ -901,27 +1131,27 @@ O instalador pecharase e perderanse todos os cambios. CreatePartitionTableDialog - + Create Partition Table Crear Táboa de Particións - + Creating a new partition table will delete all existing data on the disk. Creando unha nova táboa de particións eliminará todos os datos existentes no disco. - + What kind of partition table do you want to create? Que tipo de táboa de particións desexa crear? - + Master Boot Record (MBR) Rexistro de Arranque Maestro (MBR) - + GUID Partition Table (GPT) Táboa de Particións GUID (GPT) @@ -929,22 +1159,22 @@ O instalador pecharase e perderanse todos os cambios. CreatePartitionTableJob - + Create new %1 partition table on %2. Crear unha nova táboa de particións %1 en %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Crear unha nova táboa de particións %1 en <strong>%2</strong>(%3) - + Creating new %1 partition table on %2. Creando nova táboa de partición %1 en %2. - + The installer failed to create a partition table on %1. O instalador fallou ó crear a táboa de partición en %1. @@ -952,45 +1182,41 @@ O instalador pecharase e perderanse todos os cambios. CreateUserJob - + Create user %1 Crear o usuario %1 - + Create user <strong>%1</strong>. Crear usario <strong>%1</strong> - - Creating user %1. - Creación do usuario %1. + + Preserving home directory + - - Sudoers dir is not writable. - O directorio sudoers non ten permisos de escritura. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Non foi posible crear o arquivo de sudoers. + + Configuring user %1 + - - Cannot chmod sudoers file. - Non se puideron cambiar os permisos do arquivo sudoers. - - - - Cannot open groups file for reading. - Non foi posible ler o arquivo grupos. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -998,22 +1224,22 @@ O instalador pecharase e perderanse todos os cambios. CreateVolumeGroupJob - + Create new volume group named %1. Crear un grupo de volume novo chamado %1. - + Create new volume group named <strong>%1</strong>. Crear un grupo de volume nome chamado <strong>%1</strong>. - + Creating new volume group named %1. A crear un grupo de volume novo chamado %1. - + The installer failed to create a volume group named '%1'. O instalador non foi quen de crear un grupo de volume chamado «%1». @@ -1021,18 +1247,18 @@ O instalador pecharase e perderanse todos os cambios. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Desactivar o grupo de volume chamado %1. - + Deactivate volume group named <strong>%1</strong>. Desactivar o grupo de volume chamado <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. O instalador non foi quen de desactivar un grupo de volume chamado %1. @@ -1040,22 +1266,22 @@ O instalador pecharase e perderanse todos os cambios. DeletePartitionJob - + Delete partition %1. Eliminar partición %1. - + Delete partition <strong>%1</strong>. Eliminar partición <strong>%1</strong>. - + Deleting partition %1. Eliminando partición %1 - + The installer failed to delete partition %1. O instalador fallou ó eliminar a partición %1 @@ -1063,46 +1289,46 @@ O instalador pecharase e perderanse todos os cambios. DeviceInfoWidget - - 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. - O tipo de <strong>táboa de partición</strong>no dispositivo de almacenamento escollido.<br><br>O único xeito de cambia-lo tipo de partición é borrar e volver a crear a táboa de partición dende o comenzo, isto destrúe todolos datos no dispositivo de almacenamento. <br> Este instalador manterá a táboa de partición actúal agás que escolla outra cousa explicitamente. <br> Se non está seguro, en sistemas modernos é preferibel GPT. - - - + This device has a <strong>%1</strong> partition table. O dispositivo ten <strong>%1</strong> una táboa de partición. - + 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. Este é un dispositivo de tipo <strong>loop</strong>. <br><br> É un pseudo-dispositivo que non ten táboa de partición que permita acceder aos ficheiros como un dispositivo de bloques. Este,modo de configuración normalmente so contén un sistema de ficheiros individual. - + 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. Este instalador <strong>non pode detectar unha táboa de partición </strong>no sistema de almacenamento seleccionado. <br><br>O dispositivo non ten táboa de particion ou a táboa de partición está corrompida ou é dun tipo descoñecido.<br>Este instalador poder crear una táboa de partición nova por vóstede, ben automaticamente ou a través de páxina de particionamento a man. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este é o tipo de táboa de partición recomendada para sistema modernos que empezan dende un sistema de arranque <strong>EFI</strong>. - + <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. <br><br>Esta táboa de partición so é recomendabel en sistemas vellos que empezan dende un sistema de arranque <strong>BIOS</strong>. GPT é recomendabel na meirande parte dos outros casos.<br><br><strong>Atención:</strong>A táboa de partición MBR é un estándar obsoleto da época do MS-DOS.<br>So pódense crear 4 particións <em>primarias</em>, e desas 4, una pode ser unha partición<em>extensa</em>, que pode conter muitas particións <em>lóxicas</em>. + + + 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. + O tipo de <strong>táboa de partición</strong>no dispositivo de almacenamento escollido.<br><br>O único xeito de cambia-lo tipo de partición é borrar e volver a crear a táboa de partición dende o comenzo, isto destrúe todolos datos no dispositivo de almacenamento. <br> Este instalador manterá a táboa de partición actúal agás que escolla outra cousa explicitamente. <br> Se non está seguro, en sistemas modernos é preferibel GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1111,17 +1337,17 @@ O instalador pecharase e perderanse todos os cambios. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escribila configuración LUKS para Dracut en %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omítese escribir a configuración LUKS para Dracut: A partición «/» non está cifrada - + Failed to open %1 Fallou ao abrir %1 @@ -1129,7 +1355,7 @@ O instalador pecharase e perderanse todos os cambios. DummyCppJob - + Dummy C++ Job Tarefa parva de C++ @@ -1137,123 +1363,167 @@ O instalador pecharase e perderanse todos os cambios. EditExistingPartitionDialog - + Edit Existing Partition Editar unha partición existente - - Content: - Contido: + + Con&tent: + - + &Keep &Gardar - + Format Formato - + Warning: Formatting the partition will erase all existing data. Atención: Dar formato á partición borrará tódolos datos existentes. - + &Mount Point: Punto de &montaxe: - + Si&ze: &Tamaño: - + MiB MiB - + Fi&le System: Sistema de Ficheiros: - + Flags: Bandeiras: - - Mountpoint already in use. Please select another one. - Punto de montaxe xa en uso. Faga o favor de escoller outro. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formulario - + En&crypt system En&criptar sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Frase de contrasinal - + Confirm passphrase Confirme a frase de contrasinal - + + Please enter the same passphrase in both boxes. Faga o favor de introducila a misma frase de contrasinal námbalas dúas caixas. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Poñela información da partición - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Instalar %1 nunha <strong>nova</strong> partición do sistema %2 - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Configure unha <strong>nova</strong> partición %2 con punto de montaxe <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 na partición do sistema %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Configurala partición %3 <strong>%1</strong> con punto de montaxe <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instalar o cargador de arranque en <strong>%1</strong>. - + Setting up mount points. Configuralos puntos de montaxe. @@ -1261,93 +1531,81 @@ O instalador pecharase e perderanse todos os cambios. FinishedPage - + Form Formulario - + &Restart now &Reiniciar agora. - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Todo feito.</h1><br/>%1 foi instalado na súa computadora.<br/>Agora pode reiniciar no seu novo sistema ou continuar a usalo entorno Live %2. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Fallou a instalación</h1><br/>%1 non se pudo instalar na sua computadora. <br/>A mensaxe de erro foi: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Fin + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Instalacion completa - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - Completouse a instalación de %1 + + Finish + Fin FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Dando formato a %1 con sistema de ficheiros %2. - + The installer failed to format partition %1 on disk '%2'. O instalador fallou cando formateaba a partición %1 no disco '%2'. @@ -1355,72 +1613,72 @@ O instalador pecharase e perderanse todos os cambios. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source está conectado a unha fonte de enerxía - + The system is not plugged in to a power source. O sistema non está conectado a unha fonte de enerxía. - + is connected to the Internet está conectado á Internet - + The system is not connected to the Internet. O sistema non está conectado á Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. O instalador non se está a executar con dereitos de administrador. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. A pantalla é demasiado pequena para mostrar o instalador. @@ -1428,7 +1686,7 @@ O instalador pecharase e perderanse todos os cambios. HostInfoJob - + Collecting information about your machine. @@ -1436,25 +1694,25 @@ O instalador pecharase e perderanse todos os cambios. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1462,7 +1720,7 @@ O instalador pecharase e perderanse todos os cambios. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1470,7 +1728,7 @@ O instalador pecharase e perderanse todos os cambios. InitramfsJob - + Creating initramfs. @@ -1478,17 +1736,17 @@ O instalador pecharase e perderanse todos os cambios. InteractiveTerminalPage - + Konsole not installed Konsole non está instalado - + Please install KDE Konsole and try again! Instale KDE Konsole e ténteo de novo! - + Executing script: &nbsp;<code>%1</code> Executando o script: &nbsp; <code>%1</code> @@ -1496,28 +1754,15 @@ O instalador pecharase e perderanse todos os cambios. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Seleccionado modelo de teclado a %1.<br/> - - - - Set keyboard layout to %1/%2. - Seleccionada a disposición do teclado a %1/%2. - - KeyboardQmlViewStep - + Keyboard Teclado @@ -1525,7 +1770,7 @@ O instalador pecharase e perderanse todos os cambios. KeyboardViewStep - + Keyboard Teclado @@ -1533,65 +1778,88 @@ O instalador pecharase e perderanse todos os cambios. LCLocaleDialog - + System locale setting Configuración da localización - + 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>. A configuración de localización afecta a linguaxe e o conxunto de caracteres dalgúns elementos da interface de usuario de liña de comandos. <br/>A configuración actúal é <strong>%1</strong>. - + &Cancel &Cancelar - + &OK &Ok + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulario - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Acepto os termos e condicións anteriores. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1599,7 +1867,7 @@ O instalador pecharase e perderanse todos os cambios. LicenseViewStep - + License Licenza @@ -1607,109 +1875,102 @@ O instalador pecharase e perderanse todos os cambios. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>dispositivo %1</strong><br/>por %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Controlador gráfico %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Engadido de navegador %1</strong><br/><font color="Grey"> de %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Códec %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paquete %1</strong><br/><font color="Grey">de %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - A linguaxe do sistema será establecida a %1. - - - - The numbers and dates locale will be set to %1. - A localización de números e datas será establecida a %1. - - - + Region: Rexión: - + Zone: Zona: - - + + &Change... &Cambio... - - - Set timezone to %1/%2.<br/> - Establecer a zona de tempo a %1/%2.<br/> - LocaleQmlViewStep - + Location Localización... + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Localización... @@ -1717,35 +1978,35 @@ O instalador pecharase e perderanse todos os cambios. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1753,116 +2014,130 @@ O instalador pecharase e perderanse todos os cambios. MachineIdJob - + Generate machine-id. Xerar o identificador da máquina. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Selección de pacotes. - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1870,7 +2145,7 @@ O instalador pecharase e perderanse todos os cambios. NotesQmlViewStep - + Notes @@ -1878,17 +2153,17 @@ O instalador pecharase e perderanse todos os cambios. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1896,260 +2171,317 @@ O instalador pecharase e perderanse todos os cambios. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short O contrasinal é demasiado curto - + Password is too long O contrasinal é demasiado longo - + Password is too weak O contrasinal é moi feble - + Memory allocation error when setting '%1' Erro de asignación de memoria ao configurar «%1» - + Memory allocation error Erro de asignación de memoria - + The password is the same as the old one O contrasinal é o mesmo que o anterior - + The password is a palindrome O contrasinal é un palíndromo - + The password differs with case changes only O contrasinal difire só no uso de maiúsculas - + The password is too similar to the old one O contrasinal é demasiado semellante ao anterior - + The password contains the user name in some form O contrasinal contén o nome do usuario ou unha variante - + The password contains words from the real name of the user in some form O contrasinal contén palabras do nome real do usuario ou unha variante - + The password contains forbidden words in some form O contrasinal contén palabras prohibidas ou unha variante - - The password contains less than %1 digits - O contrasinal contén menos de %1 díxitos - - - + The password contains too few digits O contrasinal contén moi poucos díxitos - - The password contains less than %1 uppercase letters - O contrasinal contén menos de %1 maiúsculas - - - + The password contains too few uppercase letters O contrasinal contén moi poucas maiúsculas - - - The password contains less than %1 lowercase letters - O contrasinal contén menos de %1 minúsculas + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters O contrasinal contén moi poucas minúsculas - - The password contains less than %1 non-alphanumeric characters - O contrasinal contén menos de %1 caracteres alfanuméricos - - - + The password contains too few non-alphanumeric characters O contrasinal contén moi poucos caracteres non alfanuméricos - - The password is shorter than %1 characters - O contrasinal ten menos de %1 caracteres - - - + The password is too short O contrasinal é moi curto - - The password is just rotated old one - O contrasinal é un anterior reutilizado - - - - The password contains less than %1 character classes - O contrasinal contén menos de %1 clases de caracteres - - - + The password does not contain enough character classes O contrasinal non contén suficientes clases de caracteres - - The password contains more than %1 same characters consecutively - O contrasinal contén máis de %1 caracteres iguais consecutivos - - - + The password contains too many same characters consecutively O contrasinal contén demasiados caracteres iguais consecutivos - - The password contains more than %1 characters of the same class consecutively - O contrasinal contén máis de %1 caracteres consecutivos da mesma clase - - - + The password contains too many characters of the same class consecutively O contrasinal contén demasiados caracteres da mesma clase consecutivos - - - The password contains monotonic sequence longer than %1 characters - O contrasinal contén unha secuencia monotónica de máis de %1 caracteres + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence O contrasinal contén unha secuencia de caracteres monotónica demasiado longa - + No password supplied Non se indicou o contrasinal - + Cannot obtain random numbers from the RNG device Non é posíbel obter números aleatorios do servizo de RNG - + Password generation failed - required entropy too low for settings Fallou a xeración do contrasinal - a entropía requirida é demasiado baixa para a configuración - + The password fails the dictionary check - %1 O contrasinal falla a comprobación do dicionario - %1 - + The password fails the dictionary check O contrasinal falla a comprobación do dicionario - + Unknown setting - %1 Configuración descoñecida - %1 - + Unknown setting Configuración descoñecida - + Bad integer value of setting - %1 Valor enteiro incorrecto de opción - %1 - + Bad integer value Valor enteiro incorrecto - + Setting %1 is not of integer type A opción %1 non é de tipo enteiro - + Setting is not of integer type A opción non é de tipo enteiro - + Setting %1 is not of string type A opción %1 non é de tipo cadea - + Setting is not of string type A opción non é de tipo cadea - + Opening the configuration file failed Non foi posíbel abrir o ficheiro de configuración - + The configuration file is malformed O ficheiro de configuración está mal escrito - + Fatal failure Fallo fatal - + Unknown error Erro descoñecido - + Password is empty @@ -2157,40 +2489,48 @@ O instalador pecharase e perderanse todos os cambios. PackageChooserPage - + Form Formulario - + Product Name - + TextLabel EtiquetaTexto - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2198,12 +2538,12 @@ O instalador pecharase e perderanse todos os cambios. PackageModel - + Name Nome - + Description Descripción @@ -2211,17 +2551,17 @@ O instalador pecharase e perderanse todos os cambios. Page_Keyboard - + Form Formulario - + Keyboard Model: Modelo de teclado. - + Type here to test your keyboard Teclee aquí para comproba-lo seu teclado. @@ -2229,96 +2569,96 @@ O instalador pecharase e perderanse todos os cambios. Page_UserSetup - + Form Formulario - + What is your name? Cal é o seu nome? - - What name do you want to use to log in? - Cal é o nome que quere usar para entrar? - - - - Choose a password to keep your account safe. - Escolla un contrasinal para mante-la sua conta segura. - - - - - <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> - <small>Entre o mesmo contrasinal dúas veces, deste xeito podese comprobar errores ó teclear. Un bo contrasinal debe conter un conxunto de letras, números e signos de puntuación, deberá ter como mínimo oito carácteres, e debe cambiarse a intervalos de tempo regulares.</small> - - - - What is the name of this computer? - Cal é o nome deste computador? - - - + Your Full Name - + + What name do you want to use to log in? + Cal é o nome que quere usar para entrar? + + + login - + + What is the name of this computer? + Cal é o nome deste computador? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nome usarase se fai o computador visible para outros nunha rede.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Escolla un contrasinal para mante-la sua conta segura. + + + + + <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> + <small>Entre o mesmo contrasinal dúas veces, deste xeito podese comprobar errores ó teclear. Un bo contrasinal debe conter un conxunto de letras, números e signos de puntuación, deberá ter como mínimo oito carácteres, e debe cambiarse a intervalos de tempo regulares.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Entrar automáticamente sen preguntar polo contrasinal. - + Use the same password for the administrator account. Empregar o mesmo contrasinal para a conta de administrador. - + Choose a password for the administrator account. Escoller un contrasinal para a conta de administrador. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduza o mesmo contrasinal dúas veces para comprobar que non houbo erros ao escribilo.</small> @@ -2326,42 +2666,42 @@ O instalador pecharase e perderanse todos os cambios. PartitionLabelsView - + Root Raíz - + Home Cartafol persoal - + Boot Arranque - + EFI system Sistema EFI - + Swap Intercambio - + New partition for %1 Nova partición para %1 - + New partition Nova partición - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2710,39 @@ O instalador pecharase e perderanse todos os cambios. PartitionModel - - + + Free Space Espazo libre - - + + New partition Nova partición - + Name Nome - + File System Sistema de ficheiros - + + File System Label + + + + Mount Point Punto de montaxe - + Size Tamaño @@ -2405,77 +2750,77 @@ O instalador pecharase e perderanse todos os cambios. PartitionPage - + Form Formulario - + Storage de&vice: &Dispositivo de almacenamento: - + &Revert All Changes &Reverter todos os cambios - + New Partition &Table Nova &táboa de particións - + Cre&ate Cre&ar - + &Edit &Editar - + &Delete Elimina&r - + New Volume Group Novo grupo de volumes - + Resize Volume Group Cambiar o tamaño do grupo de volumes - + Deactivate Volume Group Desactivar o grupo de volumes - + Remove Volume Group Retirar o grupo de volumes - + I&nstall boot loader on: I&nstalar o cargador de arranque en: - + Are you sure you want to create a new partition table on %1? Confirma que desexa crear unha táboa de particións nova en %1? - + Can not create new partition Non é posíbel crear a partición nova - + 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. A táboa de particións de %1 xa ten %2 particións primarias e non é posíbel engadir máis. Retire unha partición primaria e engada unha partición estendida. @@ -2483,117 +2828,107 @@ O instalador pecharase e perderanse todos os cambios. PartitionViewStep - + Gathering system information... A reunir a información do sistema... - + Partitions Particións - - Install %1 <strong>alongside</strong> another operating system. - Instalar %1 <strong>a carón</strong> doutro sistema operativo. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Limpar</strong> o disco e instalar %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Substituír</strong> unha partición por %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Particionamento <strong>manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instalar %1 <strong>a carón</strong> doutro sistema operativo no disco <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Limpar</strong> o disco <strong>%2</strong> (%3) e instalar %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Substituír</strong> unha partición do disco <strong>%2</strong> (%3) por %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particionamento <strong>manual</strong> do disco <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disco <strong>%1</strong> (%2) - - - + Current: Actual: - + After: Despois: - + No EFI system partition configured Non hai ningunha partición de sistema EFI configurada - - 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>esp</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. - É necesaria unha partición de sistema EFI para iniciar %1.<br/><br/>Para configurar unha partición de sistema EFI volva atrás e seleccione ou cree un sistema de ficheiros FAT32 coa bandeira <strong>esp</strong> activada e co punto de montaxe <strong>%2.<br/><br/>Pode continuar sen configurar unha partición de sistema EFI mais pode que o sistema non dea arrancado. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - A bandeira da partición de sistema EFI non está configurada + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - É necesaria unha partición de sistema EFI para iniciar %1.<br/><br/>Configurouse unha partición co punto de montaxe <strong>%2</strong> mais a súa bandeira <strong>esp</strong> non está conrfigurada.<br/>Para configurar a bandeira volva atrás e edite a partición.<br/><br/>Pode continuar sen configurar unha partición de sistema EFI mais pode que o sistema non dea arrancado. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted A partición de arranque non está cifrada - + 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. Configurouse unha partición de arranque separada xunto cunha partición raíz cifrada, mais a partición raíz non está cifrada.<br/><br/>Con este tipo de configuración preocupa a seguranza porque nunha partición sen cifrar grávanse ficheiros de sistema importantes.<br/>Pode continuar, se así o desexa, mais o desbloqueo do sistema de ficheiros producirase máis tarde durante o arranque do sistema.<br/>Para cifrar unha partición raíz volva atrás e créea de novo, seleccionando <strong>Cifrar</strong> na xanela de creación de particións. - + has at least one disk device available. - + There are no partitions to install on. @@ -2601,13 +2936,13 @@ O instalador pecharase e perderanse todos os cambios. PlasmaLnfJob - + Plasma Look-and-Feel Job Tarefa de aparencia e experiencia de Plasma - - + + Could not select KDE Plasma Look-and-Feel package Non foi posíbel seleccionar o paquete de aparencia e experiencia do Plasma de KDE @@ -2615,17 +2950,17 @@ O instalador pecharase e perderanse todos os cambios. PlasmaLnfPage - + Form Formulario - + 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. - + 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. Escolla unha aparencia e experiencia para o Escritorio Plasma de KDE. Tamén pode omitir este paso e configurar a aparencia e experiencia unha vez instalado o sistema. Ao premer nunha selección de aparencia e experiencia pode ver unha vista inmediata dela. @@ -2633,7 +2968,7 @@ O instalador pecharase e perderanse todos os cambios. PlasmaLnfViewStep - + Look-and-Feel Aparencia e experiencia @@ -2641,17 +2976,17 @@ O instalador pecharase e perderanse todos os cambios. PreserveFiles - + Saving files for later ... A gardar ficheiros para máis tarde... - + No files configured to save for later. Non hai ficheiros configurados que gardar para máis tarde - + Not all of the configured files could be preserved. Non foi posíbel manter todos os ficheiros configurados. @@ -2659,14 +2994,14 @@ O instalador pecharase e perderanse todos os cambios. ProcessResult - + There was no output from the command. A saída non produciu ningunha saída. - + Output: @@ -2675,52 +3010,52 @@ Saída: - + External command crashed. A orde externa fallou - + Command <i>%1</i> crashed. A orde <i>%1</i> fallou. - + External command failed to start. Non foi posíbel iniciar a orde externa. - + Command <i>%1</i> failed to start. Non foi posíbel iniciar a orde <i>%1</i>. - + Internal error when starting command. Produciuse un erro interno ao iniciar a orde. - + Bad parameters for process job call. Erro nos parámetros ao chamar o traballo - + External command failed to finish. A orde externa non se puido rematar. - + Command <i>%1</i> failed to finish in %2 seconds. A orde <i>%1</i> non se puido rematar en %2s segundos. - + External command finished with errors. A orde externa rematou con erros. - + Command <i>%1</i> finished with exit code %2. A orde <i>%1</i> rematou co código de erro %2. @@ -2728,89 +3063,94 @@ Saída: QObject - - Default Keyboard Model - Modelo de teclado predeterminado - - - - - Default - Predeterminado - - - - unknown - descoñecido - - - - extended - estendido - - - - unformatted - sen formatar - - - - swap - intercambio - - - - Unpartitioned space or unknown partition table - Espazo sen particionar ou táboa de particións descoñecida - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + descoñecido - - No description provided. - + + extended + estendido - - - - + + unformatted + sen formatar + + + + swap + intercambio + + + + + Default + Predeterminado + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Espazo sen particionar ou táboa de particións descoñecida + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2818,18 +3158,18 @@ Saída: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Retirar o grupo de volumes %1. - + Remove Volume Group named <strong>%1</strong>. Retirar o grupo de volumes chamado <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. O instalador non foi quen de retirar un grupo de volumes chamado «%1». @@ -2837,143 +3177,158 @@ Saída: ReplaceWidget - + Form Formulario - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Seleccione onde instalar %1.<br/><font color="red">Advertencia: </font>isto elimina todos os ficheiros da partición seleccionada. - + The selected item does not appear to be a valid partition. O elemento seleccionado non parece ser unha partición válida. - + %1 cannot be installed on empty space. Please select an existing partition. Non é posíbel instalar %1 nun espazo baleiro. Seleccione unha partición existente. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. Non é posíbel instalar %1 nunha partición estendida. Seleccione unha partición primaria ou lóxica existente. - + %1 cannot be installed on this partition. Non é posíbel instalar %1 nesta partición - + Data partition (%1) Partición de datos (%1) - + Unknown system partition (%1) Partición de sistema descoñecida (%1) - + %1 system partition (%2) %1 partición do sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partición %1 é demasiado pequena para %2. Seleccione unha partición cunha capacidade mínima de %3 GiB. - + <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. <strong>%2</strong><br/><br/>Non foi posíbel atopar ningunha partición de sistema EFI neste sistema. Recúe e empregue o particionamento manual para configurar %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 vai ser instalado en %2. <br/><font color="red">Advertencia: </font>vanse perder todos os datos da partición %2. - + The EFI system partition at %1 will be used for starting %2. A partición EFI do sistema en %1 será usada para iniciar %2. - + EFI system partition: Partición EFI do sistema: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job Traballo de mudanza de tamaño do sistema de ficheiros - + Invalid configuration Configuración incorrecta - + The file-system resize job has an invalid configuration and will not run. O traballo de mudanza do tamaño do sistema de ficheiros ten unha configuración incorrecta e non vai ser executado. - + KPMCore not Available KPMCore non está dispoñíbel - + Calamares cannot start KPMCore for the file-system resize job. Calamares non pode iniciar KPMCore para o traballo de mudanza do tamaño do sistema de ficheiros. - - - - - + + + + + Resize Failed Fallou a mudanza de tamaño - + The filesystem %1 could not be found in this system, and cannot be resized. Non foi posíbel atopar o sistema de ficheiros %1 neste sistema e non se pode mudar o seu tamaño. - + The device %1 could not be found in this system, and cannot be resized. Non foi posíbel atopar o dispositivo %1 neste sistema e non se pode mudar o seu tamaño. - - + + The filesystem %1 cannot be resized. Non é posíbel mudar o tamaño do sistema de ficheiros %1. - - + + The device %1 cannot be resized. Non é posíbel mudar o tamaño do dispositivo %1. - + The filesystem %1 must be resized, but cannot. Hai que mudar o tamaño do sistema de ficheiros %1 mais non é posíbel. - + The device %1 must be resized, but cannot Hai que mudar o tamaño do dispositivo %1 mais non é posíbel @@ -2981,22 +3336,22 @@ Saída: ResizePartitionJob - + Resize partition %1. Redimensionar partición %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. O instalador fallou a hora de reducir a partición %1 no disco '%2'. @@ -3004,7 +3359,7 @@ Saída: ResizeVolumeGroupDialog - + Resize Volume Group Cambiar o tamaño do grupo de volumes @@ -3012,18 +3367,18 @@ Saída: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Mudar o tamaño do grupo de volumes chamado %1 de %2 para %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Mudar o tamaño do grupo de volumes chamado <strong>%1</strong> de <strong>%2</strong> para <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. O instalador non foi quen de lle mudar o tamaño ao grupo de volumes chamado «%1». @@ -3031,53 +3386,25 @@ Saída: ResultsListDialog - + For best results, please ensure that this computer: Para os mellores resultados, por favor, asegúrese que este ordenador: - + System requirements Requisitos do sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este ordenador non satisfai os requerimentos mínimos ara a instalación de %1.<br/>A instalación non pode continuar. <a href="#details">Máis información...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este ordenador non satisfai algúns dos requisitos recomendados para instalar %1.<br/> A instalación pode continuar, pero pode que algunhas características sexan desactivadas. - - - - This program will ask you some questions and set up %2 on your computer. - Este programa faralle algunhas preguntas mentres prepara %2 no seu ordenador. - - ScanningDialog - + Scanning storage devices... A examinar os dispositivos de almacenamento... - + Partitioning Particionamento @@ -3085,29 +3412,29 @@ Saída: SetHostNameJob - + Set hostname %1 Hostname: %1 - + Set hostname <strong>%1</strong>. Configurar hostname <strong>%1</strong>. - + Setting hostname %1. Configurando hostname %1. + - Internal Error Erro interno - - + + Cannot write hostname to target system Non foi posíbel escreber o nome do servidor do sistema obxectivo @@ -3115,29 +3442,29 @@ Saída: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Configurar modelo de teclado a %1, distribución a %2-%3 - + Failed to write keyboard configuration for the virtual console. Houbo un fallo ao escribir a configuración do teclado para a consola virtual. - - - + + + Failed to write to %1 Non pode escribir en %1 - + Failed to write keyboard configuration for X11. Non foi posíbel escribir a configuración do teclado para X11. - + Failed to write keyboard configuration to existing /etc/default directory. Non foi posíbel escribir a configuración do teclado no directorio /etc/default existente. @@ -3145,82 +3472,82 @@ Saída: SetPartFlagsJob - + Set flags on partition %1. Configurar as bandeiras na partición %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Configurar as bandeiras na nova partición. - + Clear flags on partition <strong>%1</strong>. Limpar as bandeiras da partición <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Limpar as bandeiras da nova partición. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Marcar a partición <strong>%1</strong> coa bandeira <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Marcar a nova partición coa bandeira <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. A limpar as bandeiras da partición <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. A limpar as bandeiras da nova partición. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. A configurar as bandeiras <strong>%2</strong> na partición <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. A configurar as bandeiras <strong>%1</strong> na nova partición. - + The installer failed to set flags on partition %1. O instalador non foi quen de configurar as bandeiras na partición %1. @@ -3228,42 +3555,42 @@ Saída: SetPasswordJob - + Set password for user %1 Configurar contrasinal do usuario %1 - + Setting password for user %1. A configurar o contrasinal do usuario %1. - + Bad destination system path. Ruta incorrecta ao sistema de destino. - + rootMountPoint is %1 rootMountPoint é %1 - + Cannot disable root account. Non é posíbel desactivar a conta do superusuario. - + passwd terminated with error code %1. passwd terminou co código de erro %1. - + Cannot set password for user %1. Non é posíbel configurar o contrasinal do usuario %1. - + usermod terminated with error code %1. usermod terminou co código de erro %1. @@ -3271,45 +3598,82 @@ Saída: SetTimezoneJob - + Set timezone to %1/%2 Estabelecer a fuso horario de %1/%2 - + Cannot access selected timezone path. Non é posíbel acceder á ruta do fuso horario seleccionado. - + Bad path: %1 Ruta incorrecta: %1 - + Cannot set timezone. Non é posíbel estabelecer o fuso horario - + Link creation failed, target: %1; link name: %2 Fallou a creación da ligazón; destino: %1; nome da ligazón: %2 - + Cannot set timezone, Non é posíbel estabelecer o fuso horario, - + Cannot open /etc/timezone for writing Non é posíbel abrir /etc/timezone para escribir nel + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Non se puideron cambiar os permisos do arquivo sudoers. + + + + Cannot create sudoers file for writing. + Non foi posible crear o arquivo de sudoers. + + ShellProcessJob - + Shell Processes Job Traballo de procesos de consola @@ -3317,81 +3681,117 @@ Saída: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Ok - - This is an overview of what will happen once you start the install procedure. - Esta é unha vista xeral do que vai acontecer cando inicie o procedemento de instalación. + + &Yes + &Si - - - SummaryViewStep - - Summary - Resumo + + &No + &Non + + + + &Cancel + &Cancelar + + + + &Close + &Pechar TrackingInstallJob - + Installation feedback Opinións sobre a instalació - + Sending installation feedback. Enviar opinións sobre a instalación. - + Internal error in install-tracking. Produciuse un erro interno en install-tracking. - + HTTP request timed out. Esgotouse o tempo de espera de HTTP. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Información fornecida pola máquina - + Configuring machine feedback. Configuración das informacións fornecidas pola máquina. - - + + Error in machine feedback configuration. Produciuse un erro na configuración das información fornecidas pola máquina. - + Could not configure machine feedback correctly, script error %1. Non foi posíbel configurar correctamente as informacións fornecidas pola máquina; erro de script %1. - + Could not configure machine feedback correctly, Calamares error %1. Non foi posíbel configurar correctamente as informacións fornecidas pola máquin; erro de Calamares %1. @@ -3399,106 +3799,97 @@ Saída: TrackingPage - + Form Formulario - + Placeholder Comodín - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Ao seleccionar isto vostede <span style=" font-weight:600;">non envía ningunha información</span> sobre esta instalación.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Prema aquí para máis información sobre as opinións do usuario</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - O seguimento da instalación axuda a %1 a ver cantos usuarios ten, en que hardware instalan %1 (coas dúas últimas opcións de embaixo) e obter información continua sobre os aplicativos preferidos. Para ver o que se envía, prema na icona de axuda que hai a carón de cada zona. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Ao seleccionar isto vostede envía información sobre a súa instalación e hardware. Esta información <b>só se envía unha vez</b>, logo de rematar a instalación. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Ao seleccionar isto vostede envía información <b>periodicamente</b> sobre a súa instalación, hardware e aplicativos a %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Ao seleccionar isto vostede envía información <b>regularmente</b> sobre a súa instalación, hardware, aplicativos e patrón de uso a %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Opinións + + UmountJob + + + Unmount file systems. + Desmontar sistemas de ficheiros. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - O nome de usuario é demasiado longo. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - O nome do computador é demasiado curto. - - - - Your hostname is too long. - O nome do computador é demasiado longo. - - - - Your passwords do not match! - Os contrasinais non coinciden! + + Users + Usuarios UsersViewStep - + Users Usuarios @@ -3506,65 +3897,67 @@ Saída: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes Lista de volumes físicos - + Volume Group Name: Nome do grupo de volumes: - + Volume Group Type: Tipo do grupo de volumes: - + Physical Extent Size: Tamaño de extensión física: - + MiB MiB - + Total Size: Tamaño total: - + Used Size: Tamaño usado: - + Total Sectors: Sectores totais: - + Quantity of LVs: Cantidade de LV: @@ -3572,106 +3965,106 @@ Saída: WelcomePage - + Form Formulario - - + + Select application and system language + &About + &Acerca de + + + Open donations website - + &Donate - + Open help and support website + &Support + &Axuda + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Notas de publicación - - - &Known issues &Problemas coñecidos - - &Support - &Axuda + + Open release notes website + - - &About - &Acerca de + + &Release notes + &Notas de publicación - - <h1>Welcome to the %1 installer.</h1> - <h1>Benvido o instalador %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Reciba a benvida ao instalador Calamares para %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Reciba a benvida ao instalador Calamares para %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Benvido o instalador %1.</h1> + + + + %1 support + %1 axuda + + + About %1 setup - + About %1 installer Acerca do instalador %1 - + <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. - - - %1 support - %1 axuda - WelcomeQmlViewStep - + Welcome Benvido @@ -3679,31 +4072,157 @@ Saída: WelcomeViewStep - + Welcome Benvido + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Mostrar informes de depuración + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3711,86 +4230,283 @@ Saída: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelo de teclado. - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Teclee aquí para comproba-lo seu teclado. - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Cal é o seu nome? + + + + Your Full Name + + + + + What name do you want to use to log in? + Cal é o nome que quere usar para entrar? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Cal é o nome deste computador? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Escolla un contrasinal para mante-la sua conta segura. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Empregar o mesmo contrasinal para a conta de administrador. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_gu.ts b/lang/calamares_gu.ts index 0d52f549c..db6b4c990 100644 --- a/lang/calamares_gu.ts +++ b/lang/calamares_gu.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_he.ts b/lang/calamares_he.ts index a6a33ee28..cf4e2ab7d 100644 --- a/lang/calamares_he.ts +++ b/lang/calamares_he.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + ניהול הגדרות העיגון האוטומטי + + BootInfoWidget - + 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. <strong>סביבת האתחול</strong> של מערכת זו. <br><br> מערכות x86 ישנות יותר תומכות אך ורק ב־<strong>BIOS</strong>.<br> מערכות חדשות משתמשות בדרך כלל ב־<strong>EFI</strong>, אך עשוית להופיע כ־BIOS אם הן מופעלות במצב תאימות לאחור. - + 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. - מערכת זו הופעלה בתצורת אתחול <strong>EFI</strong>.<br><br> כדי להגדיר הפעלה מתצורת אתחול EFI, על אשף ההתקנה להתקין מנהל אתחול מערכת, לדוגמה <strong>GRUB</strong> או <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו היא אוטומטית, אלא אם כן העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה עליך לבחור זאת או להגדיר בעצמך. + מערכת זו הופעלה בסביבת אתחול <strong>EFI</strong>.<br><br> להגדרת הפעלה מסביבת אתחול EFI, על אשף ההתקנה להתקין מנהל אתחול מערכת, למשל <strong>GRUB</strong> או <strong>systemd-boot</strong> על <strong>מחיצת מערכת EFI</strong>. פעולה זו היא אוטומטית, אלא אם העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה יש לבחור זאת או להגדיר בעצמך. - + 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. - מערכת זו הופעלה בתצורת אתחול <strong>BIOS</strong>.<br><br> כדי להגדיר הפעלה מתצורת אתחול BIOS, על אשף ההתקנה להתקין מנהל אתחול מערכת, לדוגמה <strong>GRUB</strong>, בתחילת המחיצה או על ה־<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם כן תבחר להגדיר מחיצות באופן ידני, במקרה זה עליך להגדיר זאת בעצמך. + מערכת זו הופעלה בסביבת אתחול <strong>BIOS</strong>.<br><br> להגדרת הפעלה מסביבת אתחול BIOS, על אשף ההתקנה להתקין מנהל אתחול מערכת, למשל <strong>GRUB</strong>, בתחילת המחיצה או על ה־<strong>Master Boot Record</strong> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה יש להגדיר זאת בעצמך. BootLoaderModel - + Master Boot Record of %1 Master Boot Record של %1 - + Boot Partition - מחיצת טעינת המערכת Boot + מחיצת האתחול (Boot) - + System Partition מחיצת מערכת - + Do not install a boot loader לא להתקין מנהל אתחול מערכת - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page עמוד ריק @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage אחסון גלובלי - + JobQueue JobQueue - + Modules מודולים - + Type: סוג: - - + + none ללא - + Interface: מנשק: - - Tools - כלים + + Crashes Calamares, so that Dr. Konqui can look at it. + מקריס את Calamares כדי ש־Dr. Konqui יוכל לבחון אותו. - + + Reloads the stylesheet from the branding directory. + מרענן את גיליון העיצוב מתיקיית המיתוג. + + + + Uploads the session log to the configured pastebin. + מעלה את יומן ההפעלה ל־pastebin המוגדר. + + + + Send Session Log + שליחת קובץ היומן של ההפעלה + + + Reload Stylesheet טעינת גיליון הסגנון מחדש - + + Displays the tree of widget names in the log (for stylesheet debugging). + מציג את עץ שמות הווידג׳טים ביומן (לניפוי שגיאות בגיליונות עיצוב). + + + Widget Tree עץ וידג׳טים - + Debug information מידע על ניפוי שגיאות @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up הקמה - + Install התקנה @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) משימה נכשלה (%1) - + Programmed job failure was explicitly requested. הכשל במשימה המוגדרת התבקש במפורש. @@ -143,15 +171,15 @@ Calamares::JobThread - + Done - הסתיים + סיום Calamares::NamedJob - + Example job (%1) משימה לדוגמה (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. להפעיל את הפקודה ‚%1’ במערכת היעד. - + Run command '%1'. להפעיל את הפקודה ‚%1’. - + Running command %1 %2 הפקודה %1 %2 רצה @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. הפעולה %1 רצה. - + Bad working directory path נתיב תיקיית עבודה שגוי - + Working directory %1 for python job %2 is not readable. תיקיית העבודה %1 עבור משימת python‏ %2 אינה קריאה. - + Bad main script file קובץ תסריט הרצה ראשי לא תקין - + Main script file %1 for python job %2 is not readable. קובץ תסריט הרצה ראשי %1 עבור משימת python %2 לא קריא. - + Boost.Python error in job "%1". שגיאת Boost.Python במשימה „%1”. @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... בטעינה… - + QML Step <i>%1</i>. צעד QML‏ <i>%1</i>. - + Loading failed. הטעינה נכשלה… Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + בדיקת הדרישות למודול <i>%1</i> הושלמה. + - + Waiting for %n module(s). בהמתנה למודול אחד. @@ -238,7 +271,7 @@ - + (%n second(s)) ((שנייה אחת) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. בדיקת דרישות המערכת הושלמה. @@ -256,247 +289,241 @@ Calamares::ViewManager - - &Back - ה&קודם - - - - &Next - הב&א - - - - &Cancel - &ביטול - - - - Cancel setup without changing the system. - ביטול ההתקנה ללא שינוי המערכת. - - - - Cancel installation without changing the system. - ביטול התקנה ללא ביצוע שינוי במערכת. - - - + Setup Failed ההתקנה נכשלה - - Would you like to paste the install log to the web? - להדביק את יומן ההתקנה לאינטרנט? + + Installation Failed + ההתקנה נכשלה - - Install Log Paste URL - כתובת הדבקת יומן התקנה - - - - The upload was unsuccessful. No web-paste was done. - ההעלאה לא הצליחה. לא בוצעה הדבקה לאינטרנט. - - - - Calamares Initialization Failed - הפעלת Calamares נכשלה - - - - %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. - אין אפשרות להתקין את %1. ל־Calamares אין אפשרות לטעון את המודולים המוגדרים. מדובר בתקלה באופן בו ההפצה משתמשת ב־Calamares. - - - - <br/>The following modules could not be loaded: - <br/>לא ניתן לטעון את המודולים הבאים: - - - - Continue with installation? - להמשיך בהתקנה? - - - - 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> - תכנית ההתקנה של %1 עומדת לבצע שינויים בכונן הקשיח שלך לטובת התקנת %2.<br/><strong>לא תהיה לך אפשרות לבטל את השינויים האלה.</strong> - - - - &Set up now - להת&קין כעת - - - - &Set up - להת&קין - - - - &Install - הת&קנה - - - - Setup is complete. Close the setup program. - ההתקנה הושלמה. נא לסגור את תכנית ההתקנה. - - - - Cancel setup? - לבטל את ההתקנה? - - - - Cancel installation? - לבטל את ההתקנה? - - - - Do you really want to cancel the current setup process? -The setup program will quit and all changes will be lost. - לבטל את תהליך ההתקנה הנוכחי? -תכנית ההתקנה תצא וכל השינויים יאבדו. - - - - Do you really want to cancel the current install process? -The installer will quit and all changes will be lost. - לבטל את תהליך ההתקנה? -אשף ההתקנה ייסגר וכל השינויים יאבדו. - - - - - &Yes - &כן - - - - - &No - &לא - - - - &Close - &סגירה - - - - Continue with setup? - להמשיך בהתקנה? - - - - 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> - אשף ההתקנה של %1 הולך לבצע שינויים בכונן שלך לטובת התקנת %2.<br/><strong>לא תוכל לבטל את השינויים הללו.</strong> - - - - &Install now - להת&קין כעת - - - - Go &back - ח&זרה - - - - &Done - &סיום - - - - The installation is complete. Close the installer. - תהליך ההתקנה הושלם. נא לסגור את אשף ההתקנה. - - - + Error שגיאה - - Installation Failed - ההתקנה נכשלה + + &Yes + &כן + + + + &No + &לא + + + + &Close + &סגירה + + + + Install Log Paste URL + כתובת הדבקת יומן התקנה + + + + The upload was unsuccessful. No web-paste was done. + ההעלאה לא הצליחה. לא בוצעה הדבקה לאינטרנט. + + + + Install log posted to + +%1 + +Link copied to clipboard + יומן ההתקנה פורסם אל + +%1 + +הקישור הועתק ללוח הגזירים + + + + Calamares Initialization Failed + הפעלת Calamares נכשלה + + + + %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. + אין אפשרות להתקין את %1. ל־Calamares אין אפשרות לטעון את המודולים המוגדרים. מדובר בתקלה באופן בו ההפצה משתמשת ב־Calamares. + + + + <br/>The following modules could not be loaded: + <br/>לא ניתן לטעון את המודולים הבאים: + + + + Continue with setup? + להמשיך בהתקנה? + + + + Continue with installation? + להמשיך בהתקנה? + + + + 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> + תכנית ההתקנה של %1 עומדת לבצע שינויים בכונן הקשיח שלך לטובת התקנת %2.<br/><strong>לא תהיה לך אפשרות לבטל את השינויים האלה.</strong> + + + + 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> + אשף התקנת %1 עומד לבצע שינויים בכונן שלך לטובת התקנת %2.<br/><strong>לא תהיה אפשרות לבטל את השינויים הללו.</strong> + + + + &Set up now + להת&קין כעת + + + + &Install now + להת&קין כעת + + + + Go &back + ח&זרה + + + + &Set up + להת&קין + + + + &Install + הת&קנה + + + + Setup is complete. Close the setup program. + ההתקנה הושלמה. נא לסגור את תכנית ההתקנה. + + + + The installation is complete. Close the installer. + ההתקנה הושלמה. נא לסגור את אשף ההתקנה. + + + + Cancel setup without changing the system. + ביטול ההתקנה ללא ביצוע שינוי במערכת. + + + + Cancel installation without changing the system. + ביטול ההתקנה ללא ביצוע שינוי במערכת. + + + + &Next + &קדימה + + + + &Back + &אחורה + + + + &Done + &סיום + + + + &Cancel + &ביטול + + + + Cancel setup? + לבטל את ההתקנה? + + + + Cancel installation? + לבטל את ההתקנה? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + האם לבטל את תהליך ההתקנה הנוכחי? +אשף ההתקנה ייסגר וכל השינויים יאבדו. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + האם לבטל את תהליך ההתקנה הנוכחי? +אשף ההתקנה ייסגר וכל השינויים יאבדו. CalamaresPython::Helper - + Unknown exception type - טיפוס חריגה אינו מוכר + סוג חריגה לא מוכר - + unparseable Python error שגיאת Python לא ניתנת לניתוח - + unparseable Python traceback עקבה לאחור של Python לא ניתנת לניתוח - + Unfetchable Python error. שגיאת Python לא ניתנת לאחזור. - - CalamaresUtils - - - Install log posted to: -%1 - יומן ההתקנה פורסם בכתובת: -%1 - - CalamaresWindow - - &Back - ה&קודם - - - - &Next - הב&א - - - - &Cancel - &ביטול - - - + %1 Setup Program תכנית התקנת %1 - + %1 Installer - אשף התקנה של %1 + אשף התקנת %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + הגדרת תווית מערכת קבצים על %1. - - Show debug information - הצגת מידע ניפוי שגיאות + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + הגדרת תווית מערכת הקבצים <strong>%1</strong> למחיצה <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + אשף ההתקנה נכשל בעת עדכון טבלת המחיצות על כונן '%1'. CheckerContainer - + Gathering system information... נאסף מידע על המערכת… @@ -504,157 +531,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Form - - After: - לאחר: - - - - Boot loader location: - מיקום מנהל אתחול המערכת: - - - + Select storage de&vice: בחירת התקן א&חסון: - - - - + + + + Current: נוכחי: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>חלוקה ידנית למחיצות</strong><br/>באפשרותך ליצור או לשנות גודל מחיצות בעצמך. טבלת מחיצות מסוג GPT ו<strong>מחיצת ‎/boot מסוג fat32 בגודל 512 מ״ב היא הכרח להתקנות מסוג UEFI</strong>, ניתן להשתמש במחיצה קיימת מבלי לפרמט או ליצור אחת. + + After: + לאחר: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>הגדרת מחיצות באופן ידני</strong><br/>ניתן ליצור או לשנות את גודל המחיצות בעצמך. + + + Reuse %1 as home partition for %2. - להשתמש ב־%1 כמחיצת הבית (home) עבור %2. + שימוש ב־%1 כמחיצת הבית (home) עבור %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>ראשית יש לבחור מחיצה לכיווץ, לאחר מכן לגרור את הסרגל התחתון כדי לשנות את גודלה</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 תכווץ לכדי %2MiB ותיווצר מחיצה חדשה בגודל %3MiB עבור %4. - + + Boot loader location: + מיקום מנהל אתחול המערכת: + + + <strong>Select a partition to install on</strong> <strong>נא לבחור מחיצה כדי להתקין עליה</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. במערכת זו לא נמצאה מחיצת מערכת EFI. נא לחזור ולהשתמש ביצירת מחיצות באופן ידני כדי להגדיר את %1. - + The EFI system partition at %1 will be used for starting %2. - מחיצת מערכת ה־EFI שב־%1 תשמש עבור טעינת %2. + מחיצת מערכת EFI שב־%1 תשמש לטעינת %2. - + EFI system partition: מחיצת מערכת EFI: - + 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. לא נמצאה מערכת הפעלה על התקן אחסון זה. מה ברצונך לעשות?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>מחיקת כונן</strong><br/> פעולה זו <font color="red">תמחק</font> את כל המידע השמור על התקן האחסון הנבחר. - - 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. - בהתקן אחסון זה נמצאה %1. מה ברצונך לעשות?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - - - - No Swap - בלי החלפה - - - - Reuse Swap - שימוש מחדש בהחלפה - - - - Swap (no Hibernate) - החלפה (ללא תרדמת) - - - - Swap (with Hibernate) - החלפה (עם תרדמת) - - - - Swap to file - החלפה לקובץ - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>התקנה לצד</strong><br/> אשף ההתקנה יכווץ מחיצה כדי לפנות מקום לטובת %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>החלפת מחיצה</strong><br/> ביצוע החלפה של המחיצה ב־%1. - + + 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. + בהתקן אחסון זה נמצאה %1. מה ברצונך לעשות?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. + + + 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. כבר קיימת מערכת הפעלה על התקן האחסון הזה. כיצד להמשיך?<br/> ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. - + 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. ישנן מגוון מערכות הפעלה על התקן אחסון זה. איך להמשיך? <br/>ניתן לסקור ולאשר את בחירתך לפני ששינויים יתבצעו על התקן האחסון. + + + 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/> + בהתקן האחסון הזה כבר יש מערכת הפעלה אך טבלת המחיצות <strong>%1</strong> שונה מהנדרשת <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + אחת המחיצות של התקן האחסון הזה <strong>מעוגנת</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + התקן אחסון זה הוא חלק מהתקן <strong>RAID בלתי פעיל</strong>. + + + + No Swap + ללא החלפה + + + + Reuse Swap + שימוש מחדש בהחלפה + + + + Swap (no Hibernate) + החלפה (ללא תרדמת) + + + + Swap (with Hibernate) + החלפה (עם תרדמת) + + + + Swap to file + החלפה לקובץ + ClearMountsJob - + + Successfully unmounted %1. + הניתוק של %1 הצליח. + + + + Successfully disabled swap %1. + שטח ההחלפה %1 הושבת בהצלחה. + + + + Successfully cleared swap %1. + שטח ההחלפה %1 התפנה בהצלחה. + + + + Successfully closed mapper device %1. + התקן המיפוי %1 נסגר בהצלחה. + + + + Successfully disabled volume group %1. + קבוצת הכרכים %1 הושבתה בהצלחה. + + + Clear mounts for partitioning operations on %1 מחיקת נקודות עיגון עבור פעולות חלוקה למחיצות על %1. - + Clearing mounts for partitioning operations on %1. מתבצעת מחיקה של נקודות עיגון לטובת פעולות חלוקה למחיצות על %1. - + Cleared all mounts for %1 כל נקודות העיגון על %1 נמחקו. @@ -662,22 +729,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. מחיקת כל נקודות העיגון הזמניות. - + Clearing all temporary mounts. מבצע מחיקה של כל נקודות העיגון הזמניות. - - Cannot get list of temporary mounts. - לא ניתן לשלוף רשימה של כל נקודות העיגון הזמניות. - - - + Cleared all temporary mounts. בוצעה מחיקה של כל נקודות העיגון הזמניות. @@ -685,18 +747,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. לא ניתן להריץ את הפקודה. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. הפקודה פועלת בסביבת המארח ועליה לדעת מה נתיב השורש, אך לא צוין rootMountPoint. - + The command needs to know the user's name, but no username is defined. הפקודה צריכה לדעת מה שם המשתמש, אך לא הוגדר שם משתמש. @@ -704,100 +766,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - המחשב לא עומד ברף הדרישות המזערי להתקנת %1. <br/>להתקנה אין אפשרות להמשיך. <a href="#details">פרטים…</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - המחשב לא עומד ברף דרישות המינימום להתקנת %1. <br/>ההתקנה לא יכולה להמשיך. <a href="#details"> פרטים...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - המחשב לא עומד בחלק מרף דרישות המזערי להתקנת %1.<br/> ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - המחשב לא עומד בחלק מרף דרישות המינימום להתקנת %1.<br/> ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו. - - - - This program will ask you some questions and set up %2 on your computer. - תכנית זו תשאל אותך מספר שאלות ותתקין את %2 על המחשב שלך. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>ברוך בואך לתכנית ההתקנה Calamares עבור %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>ברוך בואך להתקנת %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>ברוך בואך להתקנת %1 עם Calamares.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>ברוך בואך להתקנת %1.</h1> - - - + Set keyboard model to %1.<br/> הגדרת דגם המקלדת בתור %1.<br/> - + Set keyboard layout to %1/%2. הגדרת פריסת לוח המקשים בתור %1/%2. - + + Set timezone to %1/%2. + הגדרת אזור הזמן לכדי %1/%2. + + + The system language will be set to %1. שפת המערכת תוגדר להיות %1. - + The numbers and dates locale will be set to %1. תבנית של המספרים והתאריכים של המיקום יוגדרו להיות %1. - - Set timezone to %1/%2.<br/> - הגדרת אזור זמן בתור %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - התקנת רשת. (מושבתת: תצורה שגויה) + התקנה מהרשת. (מושבתת: תצורה שגויה) - + Network Installation. (Disabled: Received invalid groups data) התקנה מהרשת. (מושבתת: המידע שהתקבל על קבוצות שגוי) - - Network Installation. (Disabled: internal error) - התקנת רשת. (מושבתת: שגיאה פנימית) + + Network Installation. (Disabled: Internal error) + התקנה מהרשת. (מושבתת: שגיאה פנימית) - + + Network Installation. (Disabled: No package list) + התקנה מהרשתץ (מושבתת: אין רשימת חבילות) + + + + Package selection + בחירת חבילות + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) התקנה מהרשת. (מושבתת: לא ניתן לקבל רשימות של חבילות תכנה, נא לבדוק את החיבור לרשת) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + המחשב לא עומד ברף הדרישות המזערי להתקנת %1. <br/>להתקנה אין אפשרות להמשיך. <a href="#details">פרטים…</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + המחשב לא עומד ברף דרישות המינימום להתקנת %1. <br/>ההתקנה לא יכולה להמשיך. <a href="#details"> פרטים...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + המחשב לא עומד בחלק מרף דרישות המזערי להתקנת %1.<br/> ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + המחשב לא עומד בחלק מרף דרישות המינימום להתקנת %1.<br/> ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו. + + + + This program will ask you some questions and set up %2 on your computer. + תכנית זו תשאל אותך מספר שאלות ותתקין את %2 על המחשב שלך. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>ברוך בואך לתכנית ההתקנה Calamares עבור %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>ברוך בואך להתקנת %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>ברוך בואך להתקנת %1 עם Calamares</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>ברוך בואך להתקנת %1</h1> + + + + Your username is too long. + שם המשתמש ארוך מדי. + + + + '%1' is not allowed as username. + אסור להשתמש ב־‚%1’ כשם משתמש. + + + + Your username must start with a lowercase letter or underscore. + שם המשתמש שלך חייב להתחיל באות קטנה או בקו תחתי. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + מותר להשתמש רק באותיות קטנות, ספרות, קווים תחתיים ומינוסים. + + + + Your hostname is too short. + שם המחשב קצר מדי. + + + + Your hostname is too long. + שם המחשב ארוך מדי. + + + + '%1' is not allowed as hostname. + אסור להשתמש ב־‚%1’ כשם מארח. + + + + Only letters, numbers, underscore and hyphen are allowed. + מותר להשתמש רק באותיות, ספרות, קווים תחתיים ומינוסים. + + + + Your passwords do not match! + הסיסמאות לא תואמות! + + + + OK! + בסדר! + + + + Setup Failed + ההתקנה נכשלה + + + + Installation Failed + ההתקנה נכשלה + + + + The setup of %1 did not complete successfully. + התקנת %1 לא הושלמה בהצלחה. + + + + The installation of %1 did not complete successfully. + התקנת %1 לא הושלמה בהצלחה. + + + + Setup Complete + ההתקנה הושלמה + + + + Installation Complete + ההתקנה הושלמה + + + + The setup of %1 is complete. + ההתקנה של %1 הושלמה. + + + + The installation of %1 is complete. + ההתקנה של %1 הושלמה. + + + + Package Selection + בחירת חבילות + + + + Please pick a product from the list. The selected product will be installed. + נא לבחור במוצר מהרשימה. המוצר הנבחר יותקן. + + + + Install option: <strong>%1</strong> + אפשרות התקנה: <strong>%1</strong> + + + + None + ללא + + + + Summary + סיכום + + + + This is an overview of what will happen once you start the setup procedure. + זו סקירה של מה שיקרה לאחר התחלת תהליך ההתקנה. + + + + This is an overview of what will happen once you start the install procedure. + להלן סקירת המאורעות שיתרחשו עם תחילת תהליך ההתקנה. + ContextualProcessJob - + Contextual Processes Job משימת תהליכי הקשר @@ -805,100 +1002,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition יצירת מחיצה - - MiB - MiB - - - - Partition &Type: - &סוג מחיצה: - - - - &Primary - &ראשי - - - - E&xtended - מ&ורחב - - - - Fi&le System: - מ&ערכת קבצים - - - - LVM LV name - שם כרך לוגי במנהל הכרכים הלוגיים - - - - Flags: - סימונים: - - - - &Mount Point: - נקודת &עיגון: - - - + Si&ze: גו&דל: - + + MiB + MiB + + + + Partition &Type: + &סוג מחיצה: + + + + Primar&y + &עיקרי + + + + E&xtended + מ&ורחבת + + + + Fi&le System: + מ&ערכת קבצים + + + + LVM LV name + שם כרך לוגי במנהל הכרכים הלוגיים + + + + &Mount Point: + נקודת &עיגון: + + + + Flags: + סימונים: + + + + Label for the filesystem + תווית למערכת הקבצים + + + + FS Label: + תווית מערכת הקבצים: + + + En&crypt ה&צפנה - + Logical - לוגי + לוגית - + Primary - ראשי + ראשית - + GPT GPT - + Mountpoint already in use. Please select another one. נקודת העיגון בשימוש. נא לבחור בנקודת עיגון אחרת. + + + Mountpoint must start with a <tt>/</tt>. + נקודת העיגון צריכה להיפתח ב־<tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + יצירת מחיצת %1MiB על גבי %3 (%2) עם הרשומות %4. + + + + Create new %1MiB partition on %3 (%2). + יצירת מחיצה חדשה בגודל %1MiB על גבי %3 ‏(%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. יצירת מחיצה חדשה בגודל %2MiB על גבי %4 (%3) עם מערכת הקבצים %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + יצירת מחיצה חדשה בגודל <strong>%1MiB</strong> על גבי <strong>%3</strong> (%2) עם הרשומות <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + יצירת מחיצה חדשה בגודל <strong>%1MiB</strong> על גבי <strong>%3</strong> ‏(%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. יצירת מחיצה חדשה בגודל <strong>%2MiB</strong> על גבי <strong>%4</strong> (%3) עם מערכת הקבצים <strong>%1</strong>. - + + Creating new %1 partition on %2. מוגדרת מחיצת %1 חדשה על %2. - + The installer failed to create partition on disk '%1'. אשף ההתקנה נכשל ביצירת מחיצה על הכונן ‚%1’. @@ -906,27 +1139,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table יצירת טבלת מחיצות - + Creating a new partition table will delete all existing data on the disk. יצירת טבלת מחיצות חדשה תמחק את כל המידע הקיים על הכונן. - + What kind of partition table do you want to create? איזה סוג של טבלת מחיצות ברצונך ליצור? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -934,22 +1167,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. יצירת טבלת מחיצות חדשה מסוג %1 על %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). יצירת טבלת מחיצות חדשה מסוג <strong>%1</strong> על <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. נוצרת טבלת מחיצות חדשה מסוג %1 על %2. - + The installer failed to create a partition table on %1. אשף ההתקנה נכשל בעת יצירת טבלת המחיצות על %1. @@ -957,45 +1190,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 יצירת משתמש %1 - + Create user <strong>%1</strong>. יצירת משתמש <strong>%1</strong>. - - Creating user %1. - נוצר משתמש %1. + + Preserving home directory + שימור תיקיית הבית - - Sudoers dir is not writable. - תיקיית מנהלי המערכת לא ניתנת לכתיבה. + + + Creating user %1 + המשתמש %1 נוצר - - Cannot create sudoers file for writing. - לא ניתן ליצור את קובץ מנהלי המערכת לכתיבה. + + Configuring user %1 + המשתמש %1 מוגדר - - Cannot chmod sudoers file. - לא ניתן לשנות את מאפייני קובץ מנהלי המערכת. - - - - Cannot open groups file for reading. - לא ניתן לפתוח את קובץ הקבוצות לקריאה. + + Setting file permissions + הרשאות הקובץ מוגדרות CreateVolumeGroupDialog - + Create Volume Group יצירת קבוצת כרכים @@ -1003,22 +1232,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. יצירת קבוצת כרכים חדשה בשם %1. - + Create new volume group named <strong>%1</strong>. יצירת קבוצת כרכים חדשה בשם <strong>%1</strong>. - + Creating new volume group named %1. נוצרת קבוצת כרכים חדשה בשם %1. - + The installer failed to create a volume group named '%1'. אשף ההתקנה נכשל ביצירת קבוצת כרכים בשם ‚%1’. @@ -1026,18 +1255,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. השבתת קבוצת כרכים בשם %1. - + Deactivate volume group named <strong>%1</strong>. השבתת קבוצת כרכים בשם <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. אשף ההתקנה נכשל בהשבתת קבוצת כרכים בשם %1. @@ -1045,69 +1274,69 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. מחיקת המחיצה %1. - + Delete partition <strong>%1</strong>. - מחק את מחיצה <strong>%1</strong>. + מחיקת המחיצה <strong>%1</strong>. - + Deleting partition %1. - מבצע מחיקה של מחיצה %1. + מחיקת המחיצה %1 מתבצעת. - + The installer failed to delete partition %1. - אשף ההתקנה נכשל בעת מחיקת מחיצה %1. + אשף ההתקנה נכשל במחיקת המחיצה %1. DeviceInfoWidget - - 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. - סוג <strong>טבלת המחיצות</strong> על התקן האחסון הנבחר.<br><br> הדרך היחידה לשנות את סוג טבלת המחיצות היא למחוק וליצור מחדש את טבלת המחיצות, אשר דורסת את כל המידע הקיים על התקן האחסון.<br> אשף ההתקנה ישמור את טבלת המחיצות הקיימת אלא אם כן תבחר אחרת במפורש.<br> במידה ואינך בטוח, במערכות מודרניות, GPT הוא הסוג המועדף. - - - + This device has a <strong>%1</strong> partition table. על התקן זה קיימת טבלת מחיצות <strong>%1</strong>. - + 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. זהו התקן מסוג <strong>loop</strong>.<br><br> זהו התקן מדמה ללא טבלת מחיצות אשר מאפשר גישה לקובץ כהתקן בלוק. תצורה מסוג זה בדרך כלל תכיל מערכת קבצים יחידה. - + 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. אשף ההתקנה <strong>אינו יכול לזהות את טבלת המחיצות</strong> על התקן האחסון הנבחר.<br><br> ההתקן הנבחר לא מכיל טבלת מחיצות, או שטבלת המחיצות הקיימת הושחתה או שסוג הטבלה אינו מוכר.<br> אשף התקנה זה יכול ליצור טבלת מחיצות חדשה עבורך אוטומטית או בדף הגדרת מחיצות באופן ידני. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br> זהו סוג טבלת מחיצות מועדף במערכות מודרניות, אשר מאותחלות ממחיצת טעינת מערכת <strong>EFI</strong>. - + <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. <br><br>סוג זה של טבלת מחיצות מומלץ לשימוש על מערכות ישנות אשר מאותחלות מסביבת טעינה <strong>BIOS</strong>. ברוב המקרים האחרים, GPT מומלץ לשימוש.<br><br><strong>אזהרה:</strong> תקן טבלת המחיצות של MBR מיושן מתקופת MS-DOS.<br> ניתן ליצור אך ורק 4 מחיצות <em>ראשיות</em>, מתוכן, אחת יכולה להיות מוגדרת כמחיצה <em>מורחבת</em>, אשר יכולה להכיל מחיצות <em>לוגיות</em>. + + + 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. + סוג <strong>טבלת המחיצות</strong> על התקן האחסון הנבחר.<br><br> הדרך היחידה לשנות את סוג טבלת המחיצות היא למחוק וליצור מחדש את טבלת המחיצות, אשר דורסת את כל המידע הקיים על התקן האחסון.<br> אשף ההתקנה ישמור את טבלת המחיצות הקיימת אלא אם כן תבחר אחרת במפורש.<br> במידה ואינך בטוח, במערכות מודרניות, GPT הוא הסוג המועדף. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1116,17 +1345,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 רשום הגדרות הצפנה LUKS עבור Dracut אל %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - דלג רישום הגדרות הצפנה LUKS עבור Dracut: מחיצת "/" לא תוצפן. + דילוג על רישום הגדרת LUKS עבור Dracut: מחיצת "/" אינה מוצפנת - + Failed to open %1 הפתיחה של %1 נכשלה. @@ -1134,7 +1363,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job משימת דמה של C++‎ @@ -1142,217 +1371,249 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition עריכת מחיצה קיימת - - Content: - תוכן: + + Con&tent: + &תוכן: - + &Keep לה&שאיר - + Format אתחול - + Warning: Formatting the partition will erase all existing data. אזהרה: אתחול המחיצה ימחק את כל המידע הקיים. - + &Mount Point: &נקודת עיגון: - + Si&ze: גו&דל: - + MiB MiB - + Fi&le System: מ&ערכת קבצים: - + Flags: סימונים: - - Mountpoint already in use. Please select another one. - נקודת העיגון בשימוש. נא לבחור בנקודת עיגון אחרת. + + Label for the filesystem + תווית למערכת הקבציםת + + + + FS Label: + תווית מערכת הקבצים: EncryptWidget - + Form Form - + En&crypt system ה&צפנת המערכת - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + נראה כי המערכת שלך לא תומכת בהצפנה באופן מיטבי כדי להצפין את כלל המערכת. אפשר להפעיל הצפנה אבל זה עלול לפגום בביצועים. + + + Passphrase מילת צופן - + Confirm passphrase אישור מילת צופן - + + Please enter the same passphrase in both boxes. נא להקליד את אותה מילת הצופן בשתי התיבות. + + ErrorDialog + + + Details: + פרטים: + + + + Would you like to paste the install log to the web? + להדביק את יומן ההתקנה לאינטרנט? + + FillGlobalStorageJob - + Set partition information הגדרת מידע עבור המחיצה - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + התקנת %1 על מחיצת מערכת <strong>חדשה</strong> מסוג %2 עם היכולות <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. התקנת %1 על מחיצת מערכת <strong>חדשה</strong> מסוג %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - הגדרת מחיצת מערכת <strong>חדשה</strong> מסוג %2 עם נקודת העיגון <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + הקמת מחיצת %2 <strong>חדשה</strong> עם נקודת העיגון <strong>%1</strong> והיכולות <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + הגדרת מחיצת מערכת <strong>חדשה</strong> מסוג %2 עם נקודת העיגון <strong>%1</strong> %3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + התקנת %2 על מחיצת מערכת %3 בשם <strong>%1</strong> עם היכולות <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + הקמת מחיצת %3 בשם <strong>%1</strong> עם נקודת העגינה <strong>%2</strong> והיכולות <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + הקמת מחיצת %3 בשם <strong>%1</strong> עם נקודת העגינה <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. התקנת %2 על מחיצת מערכת <strong>%1</strong> מסוג %3. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - התקן מחיצה מסוג %3 <strong>%1</strong> עם נקודת העיגון <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. התקנת מנהל אתחול מערכת על <strong>%1</strong>. - + Setting up mount points. - נקודות עיגון מוגדרות. + כעת בהגדרת נקודות העיגון. FinishedPage - + Form Form - + &Restart now ה&פעלה מחדש כעת - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>הכול הושלם.</h1><br/>ההתקנה של %1 למחשב שלך הושלמה.<br/>מעתה יתאפשר לך להשתמש במערכת החדשה שלך. - + <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> <html><head/><body><p>אם תיבה זו מסומנת, המערכת שלך תופעל מחדש מיידית עם הלחיצה על <span style="font-style:italic;">סיום</span> או עם סגירת תכנית ההתקנה.</p></body></html> - + <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. <h1>תהליך ההתקנה הסתיים.</h1><br/>%1 הותקן על המחשב שלך.<br/> כעת ניתן לאתחל את המחשב אל תוך המערכת החדשה שהותקנה, או להמשיך להשתמש בסביבה הנוכחית של %2. - + <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> <html><head/><body><p>אם תיבה זו מסומנת, המערכת שלך תופעל מחדש מיידית עם הלחיצה על <span style="font-style:italic;">סיום</span> או עם סגירת תכנית ההתקנה.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>ההתקנה נכשלה</h1><br/>ההתקנה של %1 במחשבך לא הושלמה.<br/>הודעת השגיאה הייתה: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ההתקנה נכשלה</h1><br/>%1 לא הותקן על מחשבך.<br/> הודעת השגיאה: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish סיום + + + FinishedViewStep - - Setup Complete - ההתקנה הושלמה - - - - Installation Complete - ההתקנה הושלמה - - - - The setup of %1 is complete. - התקנת %1 הושלמה. - - - - The installation of %1 is complete. - ההתקנה של %1 הושלמה. + + Finish + סיום FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. לאתחל את המחיצה %1 (מערכת קבצים: %2, גודל: %3 MiB) על גבי %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. אתחול מחיצה בגודל <strong>%3MiB</strong> בנתיב <strong>%1</strong> עם מערכת הקבצים <strong>%2</strong>. - + Formatting partition %1 with file system %2. - מאתחל מחיצה %1 עם מערכת קבצים %2. + כעת בפרמוט המחיצה %1 עם מערכת הקבצים %2. - + The installer failed to format partition %1 on disk '%2'. אשף ההתקנה נכשל בעת אתחול המחיצה %1 על הכונן ‚%2’. @@ -1360,72 +1621,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space יש לפחות %1 GiB פנויים בכונן - + There is not enough drive space. At least %1 GiB is required. נפח האחסון לא מספיק. נדרשים %1 GiB לפחות. - + has at least %1 GiB working memory יש לפחות %1 GiB זיכרון לעבודה - + The system does not have enough working memory. At least %1 GiB is required. כמות הזיכרון הנדרשת לפעולה אינה מספיקה. נדרשים %1 GiB לפחות. - + is plugged in to a power source מחובר לספק חשמל חיצוני - + The system is not plugged in to a power source. המערכת לא מחוברת לספק חשמל חיצוני. - + is connected to the Internet מחובר לאינטרנט - + The system is not connected to the Internet. המערכת לא מחוברת לאינטרנט. - + is running the installer as an administrator (root) ההתקנה מופעלת תחת חשבון מורשה ניהול (root) - + The setup program is not running with administrator rights. תכנית ההתקנה אינה פועלת עם הרשאות ניהול. - + The installer is not running with administrator rights. אשף ההתקנה לא רץ עם הרשאות מנהל. - + has a screen large enough to show the whole installer - יש מסך מספיק גדול כדי להציג את כל תכנית ההתקנה + המסך גדול מספיק להצגת כל אשף ההתקנה - + The screen is too small to display the setup program. המסך קטן מכדי להציג את תכנית ההתקנה. - + The screen is too small to display the installer. גודל המסך קטן מכדי להציג את תכנית ההתקנה. @@ -1433,7 +1694,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. נאספים נתונים על המכונה שלך. @@ -1441,25 +1702,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier מזהה מחזור משווק - + Could not create directories <code>%1</code>. לא ניתן ליצור תיקיות <code>%1</code>. - + Could not open file <code>%1</code>. לא ניתן לפתוח קובץ <code>%1</code>. - + Could not write to file <code>%1</code>. לא ניתן לכתוב לקובץ <code>%1</code>. @@ -1467,7 +1728,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. נוצר initramfs עם mkinitcpio. @@ -1475,7 +1736,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. נוצר initramfs. @@ -1483,17 +1744,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole לא מותקן - + Please install KDE Konsole and try again! נא להתקין את KDE Konsole ולנסות שוב! - + Executing script: &nbsp;<code>%1</code> הסקריפט מופעל: &nbsp; <code>%1</code> @@ -1501,28 +1762,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script סקריפט - - KeyboardPage - - - Set keyboard model to %1.<br/> - הגדרת דגם המקלדת בתור %1.<br/> - - - - Set keyboard layout to %1/%2. - הגדרת פריסת לוח המקשים בתור %1/%2. - - KeyboardQmlViewStep - + Keyboard מקלדת @@ -1530,7 +1778,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard מקלדת @@ -1538,73 +1786,96 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting הגדרות מיקום המערכת - + 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>. הגדרת מיקום המערכת משפיעה על השפה וקידוד התווים של חלק מרכיבי ממשקי שורת פקודה למשתמש. <br/> ההגדרה הנוכחית היא <strong>%1</strong>. - + &Cancel &ביטול - + &OK &אישור + + LOSHJob + + + Configuring encrypted swap. + מוגדר שטח החלפה מוצפן. + + + + No target system available. + אין מערכת יעד זמינה. + + + + No rootMountPoint is set. + לא הוגדרה נקודת עיגון לשורש. + + + + No configFilePath is set. + לא הוגדר נתיב קובץ הגדרות. + + LicensePage - + Form Form - + <h1>License Agreement</h1> <h1>הסכם רישוי</h1> - + I accept the terms and conditions above. התנאים וההגבלות שלמעלה מקובלים עלי. - + Please review the End User License Agreements (EULAs). נא לסקור בקפידה את הסכמי רישוי משתמש הקצה (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. תהליך התקנה זה יתקין תכנה קניינית שכפופה לתנאי רישוי. - + If you do not agree with the terms, the setup procedure cannot continue. - אם התנאים האלה אינם מקובלים עליך, אי אפשר להמשיך בתהליך ההתקנה. + אם התנאים האלה אינם מקובלים עליכם, אי אפשר להמשיך בתהליך ההתקנה. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. תהליך התקנה זה יכול להתקין תכנה קניינית שכפופה לתנאי רישוי כדי לספק תכונות נוספות ולשפר את חוויית המשתמש. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - אם תנאים אלו אינם מקובלים עליך, לא תותקן תכנה קניינית וייעשה שימוש בחלופות בקוד פתוח במקום. + אם התנאים הללו אינם מקובלים עליכם, תוכנה קניינית לא תותקן, ובמקומן יעשה שימוש בחלופות בקוד פתוח. LicenseViewStep - + License רישיון @@ -1612,109 +1883,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 כתובת: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>התקן %1</strong><br/> מאת %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>התקן תצוגה %1</strong><br/><font color="Grey"> מאת %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>תוסף לדפדפן %1</strong><br/><font color="Grey"> מאת %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>קידוד %1</strong><br/><font color="Grey"> מאת %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>חבילה %1</strong><br/><font color="Grey"> מאת %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">מאת %2</font> - + File: %1 קובץ: %1 - + + Hide license text + הסתרת מלל הרישיון + + + Show the license text להציג את טקסט הרישיון - + Open license agreement in browser. לפתוח את הסכם הרישוי בדפדפן. - - - Hide license text - הסתרת מלל הרישיון - LocalePage - - The system language will be set to %1. - שפת המערכת תוגדר להיות %1. - - - - The numbers and dates locale will be set to %1. - תבנית של המספרים והתאריכים של המיקום יוגדרו להיות %1. - - - + Region: - איזור: + מחוז: - + Zone: מיקום: - - + + &Change... ה&חלפה… - - - Set timezone to %1/%2.<br/> - הגדרת אזור זמן בתור %1/%2.<br/> - LocaleQmlViewStep - + Location מיקום + + LocaleTests + + + Quit + יציאה + + LocaleViewStep - + Location מיקום @@ -1722,35 +1986,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. קובץ מפתח ה־LUKS מוגדר. - - + + No partitions are defined. לא הוגדרו מחיצות. - - - + + + Encrypted rootfs setup error שגיאת התקנת מחיצת שורש מוצפנת - + Root partition %1 is LUKS but no passphrase has been set. מחיצת השורש %1 היא LUKS אבל לא הוגדרה מילת צופן. - + Could not create LUKS key file for root partition %1. לא ניתן ליצור קובץ מפתח LUKS למחיצת השורש %1. - + Could not configure LUKS key file on partition %1. לא ניתן להגדיר קובץ מפתח LUKS למחיצה %1. @@ -1758,124 +2022,140 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. לייצר מספר סידורי של המכונה. - + Configuration Error שגיאת הגדרות - + No root mount point is set for MachineId. לא הוגדרה נקודת עגינת שורש עבור מזהה מכונה (MachineId). + + Map + + + Timezone: %1 + אזור זמן: %1 + + + + 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. + נא לבחור את המיקום המועדף עליך במפה כדי שאשף ההתקנה יוכל להציע הגדרות מקומיות + ואזור זמן עבורך. ניתן להתאים את ההגדרות המוצעות למטה. ניתן לחפש במפה על ידי משיכה להזזתה ובכפתורים +/- כדי להתקרב/להתרחק + או להשתמש בגלילת העכבר לטובת שליטה בתקריב. + + NetInstallViewStep - - + Package selection בחירת חבילות - + Office software תכנה של כלים משרדיים - + Office package חבילת כלים משרדיים - + Browser software תכנה של דפדפן - + Browser package חבילת דפדפן - + Web browser דפדפן - + Kernel ליבה - + Services שירותים - + Login כניסה - + Desktop שולחן עבודה - + Applications יישומים - + Communication - + תקשורת - + Development - + פיתוח - + Office - + כלי משרד - + Multimedia - + מולטימדיה - + Internet - + אינטרנט - + Theming - + עיצוב - + Gaming - + משחקים - + Utilities - + כלים NotesQmlViewStep - + Notes הערות @@ -1883,17 +2163,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: מ&חזור: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>נא להקליד כאן מזהה מחזור למשווק. ערך זה יאוחסן במערכת היעד.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>הגדרות משווק</h1><p>Calamares ישתמש בהגדרות המשווק בעת הגדרת מערכת היעד.</p></body></html> @@ -1901,301 +2181,384 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration הגדרות משווק - + Set the OEM Batch Identifier to <code>%1</code>. הגדרת מזהה מחזור למשווק לערך <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + ניתן לבחור את האזור המועדף עליך או להשתמש בהגדרות בררת המחדל. + + + + + + Timezone: %1 + אזור זמן: %1 + + + + Select your preferred Zone within your Region. + נא לבחור את האזור המועדף במחוז שלך. + + + + Zones + אזורים + + + + You can fine-tune Language and Locale settings below. + ניתן לכוון את הגדרות השפה והמיקום להלן. + + PWQ - + Password is too short - הססמה קצרה מדי + הסיסמה קצרה מדי - + Password is too long - הססמה ארוכה מדי + הסיסמה ארוכה מדי - + Password is too weak - הססמה חלשה מדי + הסיסמה חלשה מדי - + Memory allocation error when setting '%1' שגיאת הקצאת זיכרון בעת הגדרת ‚%1’ - + Memory allocation error שגיאת הקצאת זיכרון - + The password is the same as the old one - הססמה זהה לישנה + הסיסמה הזו זהה לישנה - + The password is a palindrome - הססמה היא פלינדרום + הסיסמה היא פלינדרום - + The password differs with case changes only - מורכבות הססמה טמונה בשינויי סוגי אותיות בלבד + מורכבות הסיסמה טמונה בשינויי סוגי אותיות בלבד - + The password is too similar to the old one - הססמה דומה מדי לישנה + הסיסמה דומה מדי לישנה - + The password contains the user name in some form - הססמה מכילה את שם המשתמש בצורה כלשהי + הסיסמה מכילה את שם המשתמש בצורה כלשהי - + The password contains words from the real name of the user in some form - הססמה מכילה מילים מהשם האמתי של המשתמש בצורה זו או אחרת + הסיסמה מכילה מילים מהשם האמתי של המשתמש בצורה זו או אחרת - + The password contains forbidden words in some form - הססמה מכילה מילים אסורות בצורה כלשהי + הסיסמה מכילה מילים אסורות בצורה כלשהי - - The password contains less than %1 digits - הססמה מכילה פחות מ־%1 ספרות - - - + The password contains too few digits - הססמה לא מכילה מספיק ספרות + הסיסמה לא מכילה מספיק ספרות - - The password contains less than %1 uppercase letters - הססמה מכילה פחות מ־%1 אותיות גדולות - - - + The password contains too few uppercase letters - הססמה מכילה מעט מדי אותיות גדולות + הסיסמה מכילה מעט מדי אותיות גדולות + + + + The password contains fewer than %n lowercase letters + + הסיסמה מכילה פחות מאות אחת קטנה + הסיסמה מכילה פחות מ־%n אותיות קטנות + הסיסמה מכילה פחות מ־%n אותיות קטנות + הססמה מכילה פחות מ־%n אותיות קטנות + - - The password contains less than %1 lowercase letters - הססמה מכילה פחות מ־%1 אותיות קטנות - - - + The password contains too few lowercase letters - הססמה אינה מכילה מספיק אותיות קטנות + הסיסמה אינה מכילה מספיק אותיות קטנות - - The password contains less than %1 non-alphanumeric characters - הססמה מכילה פחות מ־%1 תווים שאינם אלפאנומריים - - - + The password contains too few non-alphanumeric characters - הססמה מכילה מעט מדי תווים שאינם אלפאנומריים + הסיסמה מכילה מעט מדי תווים שאינם אלפאנומריים - - The password is shorter than %1 characters - אורך הססמה קצר מ־%1 תווים - - - + The password is too short - הססמה קצרה מדי + הסיסמה קצרה מדי - - The password is just rotated old one - הססמה היא פשוט סיכול של ססמה קודמת - - - - The password contains less than %1 character classes - הססמה מכילה פחות מ־%1 סוגי תווים - - - + The password does not contain enough character classes - הססמה לא מכילה מספיק סוגי תווים + הסיסמה לא מכילה מספיק סוגי תווים - - The password contains more than %1 same characters consecutively - הססמה מכילה יותר מ־%1 תווים זהים ברצף - - - + The password contains too many same characters consecutively - הססמה מכילה יותר מדי תווים זהים ברצף + הסיסמה מכילה יותר מדי תווים זהים ברצף - - The password contains more than %1 characters of the same class consecutively - הססמה מכילה יותר מ־%1 תווים מאותו הסוג ברצף - - - + The password contains too many characters of the same class consecutively - הססמה מכילה יותר מדי תווים מאותו הסוג ברצף + הסיסמה מכילה יותר מדי תווים מאותו הסוג ברצף + + + + The password contains fewer than %n digits + + הסיסמה מכילה פחות מספרה + הסיסמה מכילה פחות מ־%n ספרות + הסיסמה מכילה פחות מ־%n ספרות + הסיסמה מכילה פחות מ־%n ספרות + + + + + The password contains fewer than %n uppercase letters + + הסיסמה מכילה פחות מאות גדולה אחת + הסיסמה מכילה פחות מ־%n אותיות גדולות + הסיסמה מכילה פחות מ־%n אותיות גדולות + הסיסמה מכילה פחות מ־%n אותיות גדולות + + + + + The password contains fewer than %n non-alphanumeric characters + + הסיסמה מכילה פחות מתו אחד שאינו אלפאנומרי + הסיסמה מכילה פחות מ־%n תווים שאינם אלפאנומריים + הסיסמה מכילה פחות מ־%n תווים שאינם אלפאנומריים + הסיסמה מכילה פחות מ־%n תווים שאינם אלפאנומריים + + + + + The password is shorter than %n characters + + הסיסמה קצרה מתו אחד + הסיסמה קצרה מ־%n תווים + הסיסמה קצרה מ־%n תווים + הסיסמה קצרה מ־%n תווים + - - The password contains monotonic sequence longer than %1 characters - הססמה מכילה רצף תווים מונוטוני של יותר מ־%1 תווים + + The password is a rotated version of the previous one + הסיסמה היא גרסה מעורבבת של הקודמת + + + + The password contains fewer than %n character classes + + הסיסמה מכילה פחות ממחלקת תווים אחת + הסיסמה מכילה פחות מ־%n מחלקות תווים + הסיסמה מכילה פחות מ־%n מחלקות תווים + הסיסמה מכילה פחות מ־%n מחלקות תווים + + + + + The password contains more than %n same characters consecutively + + הסיסמה מכילה למעלה מתו זהה ברצף + הסיסמה מכילה למעלה מ־%n תווים זהים ברצף + הסיסמה מכילה למעלה מ־%n תווים זהים ברצף + הסיסמה מכילה למעלה מ־%n תווים זהים ברצף + + + + + The password contains more than %n characters of the same class consecutively + + הסיסמה מכילה למעלה מתו אחד זהה ברצף + הסיסמה מכילה למעלה מ־%n תווים זהים ברצף + הסיסמה מכילה למעלה מ־%n תווים זהים ברצף + הסיסמה מכילה למעלה מ־%n תווים זהים ברצף + + + + + The password contains monotonic sequence longer than %n characters + + הסיסמה מכילה רצף מונוטוני ארוך מתו אחד + הסיסמה מכילה רצף מונוטוני ארוך מ־%n תווים + הסיסמה מכילה רצף מונוטוני ארוך מ־%n תווים + הסיסמה מכילה רצף מונוטוני ארוך מ־%n תווים + - + The password contains too long of a monotonic character sequence - הססמה מכילה רצף תווים מונוטוני ארוך מדי + הסיסמה מכילה רצף תווים מונוטוני ארוך מדי - + No password supplied - לא צוינה ססמה + לא צוינה סיסמה - + Cannot obtain random numbers from the RNG device לא ניתן לקבל מספרים אקראיים מהתקן ה־RNG - + Password generation failed - required entropy too low for settings - יצירת הססמה נכשלה - רמת האקראיות הנדרשת נמוכה ביחס להגדרות + יצירת הסיסמה נכשלה - רמת האקראיות הנדרשת נמוכה ביחס להגדרות - + The password fails the dictionary check - %1 - הססמה נכשלה במבחן המילון - %1 + הסיסמה נכשלה במבחן המילון - %1 - + The password fails the dictionary check - הססמה נכשלה במבחן המילון + הסיסמה נכשלה במבחן המילון - + Unknown setting - %1 הגדרה לא מוכרת - %1 - + Unknown setting הגדרה לא מוכרת - + Bad integer value of setting - %1 ערך מספרי שגוי להגדרה - %1 - + Bad integer value ערך מספרי שגוי - + Setting %1 is not of integer type ההגדרה %1 אינה מסוג מספר שלם - + Setting is not of integer type ההגדרה אינה מסוג מספר שלם - + Setting %1 is not of string type ההגדרה %1 אינה מסוג מחרוזת - + Setting is not of string type ההגדרה אינה מסוג מחרוזת - + Opening the configuration file failed פתיחת קובץ התצורה נכשלה - + The configuration file is malformed קובץ התצורה פגום - + Fatal failure כשל מכריע - + Unknown error שגיאה לא ידועה - + Password is empty - הססמה ריקה + שדה הסיסמה ריק PackageChooserPage - + Form Form - + Product Name שם המוצר - + TextLabel תווית טקסט - + Long Product Description תיאור ארוך של המוצר - + Package Selection בחירת חבילות - + Please pick a product from the list. The selected product will be installed. נא לבחור במוצר מהרשימה. המוצר הנבחר יותקן. + + PackageChooserQmlViewStep + + + Packages + חבילות + + PackageChooserViewStep - + Packages חבילות @@ -2203,12 +2566,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name שם - + Description תיאור @@ -2216,17 +2579,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Form - + Keyboard Model: דגם מקלדת: - + Type here to test your keyboard ניתן להקליד כאן כדי לבדוק את המקלדת שלך @@ -2234,139 +2597,139 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Form - + What is your name? מה שמך? - - What name do you want to use to log in? - איזה שם ברצונך שישמש אותך לכניסה? - - - - Choose a password to keep your account safe. - נא לבחור ססמה להגנה על חשבונך. - - - - - <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> - <small>יש להקליד את אותה הססמה פעמיים כדי שניתן יהיה לבדוק שגיאות הקלדה. ססמה טובה אמורה להכיל שילוב של אותיות, מספרים וסימני פיסוק, להיות באורך של שמונה תווים לפחות ויש להחליף אותה במרווחי זמן קבועים.</small> - - - - What is the name of this computer? - מהו השם של המחשב הזה? - - - + Your Full Name שם המלא - + + What name do you want to use to log in? + איזה שם ברצונך שישמש אותך לכניסה? + + + login כניסה - + + What is the name of this computer? + מהו השם של המחשב הזה? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>בשם זה ייעשה שימוש לטובת זיהוי מול מחשבים אחרים ברשת במידת הצורך.</small> - + Computer Name שם המחשב - - + + Choose a password to keep your account safe. + נא לבחור סיסמה להגנה על חשבונך. + + + + + <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> + <small>יש להקליד את אותה הסיסמה פעמיים כדי שניתן יהיה לבדוק שגיאות הקלדה. סיסמה טובה אמורה להכיל שילוב של אותיות, מספרים וסימני פיסוק, להיות באורך של שמונה תווים לפחות ויש להחליף אותה במרווחי זמן קבועים.</small> + + + + Password - ססמה + סיסמה - - + + Repeat Password - חזרה על הססמה + חזרה על הסיסמה - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - כשתיבה זו מסומנת, בדיקת אורך ססמה מתבצעת ולא תהיה לך אפשרות להשתמש בססמה חלשה. + כשתיבה זו מסומנת, בדיקת אורך סיסמה מתבצעת ולא תהיה לך אפשרות להשתמש בסיסמה חלשה. - + Require strong passwords. - לדרוש ססמאות חזקות. + לדרוש סיסמאות חזקות. - + Log in automatically without asking for the password. - כניסה אוטומטית מבלי לבקש ססמה. + כניסה אוטומטית מבלי להישאל על הסיסמה. - + Use the same password for the administrator account. - להשתמש באותה הססמה עבור חשבון המנהל. + להשתמש באותה הסיסמה עבור חשבון המנהל. - + Choose a password for the administrator account. - בחירת ססמה עבור חשבון המנהל. + בחירת סיסמה לחשבון המנהל. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - <small>עליך להקליד את אותה הססמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה.</small> + <small>יש להקליד את אותה הסיסמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה.</small> PartitionLabelsView - + Root מערכת הפעלה Root - + Home בית Home - + Boot טעינה Boot - + EFI system מערכת EFI - + Swap דפדוף Swap - + New partition for %1 מחיצה חדשה עבור %1 - + New partition מחיצה חדשה - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2375,34 +2738,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - זכרון פנוי + שטח פנוי - - + + New partition מחיצה חדשה - + Name שם - + File System מערכת קבצים - + + File System Label + תווית מערכת קבצים + + + Mount Point נקודת עיגון - + Size גודל @@ -2410,77 +2778,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Form - + Storage de&vice: ה&תקן זיכרון: - + &Revert All Changes &ביטול כל השינויים - + New Partition &Table &טבלת מחיצות חדשה - + Cre&ate י&צירה - + &Edit &עריכה - + &Delete מ&חיקה - + New Volume Group קבוצת כרכים חדשה - + Resize Volume Group שינוי גודל קבוצת כרכים - + Deactivate Volume Group השבתת קבוצת כרכים - + Remove Volume Group הסרת קבוצת כרכים - + I&nstall boot loader on: הת&קנת מנהל אתחול על: - + Are you sure you want to create a new partition table on %1? - ליצור טבלת מחיצות חדשה על %1? + האם ליצור טבלת מחיצות חדשה על %1? - + Can not create new partition לא ניתן ליצור מחיצה חדשה - + 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. לטבלת המחיצות על %1 כבר יש %2 מחיצות עיקריות ואי אפשר להוסיף עוד כאלה. נא להסיר מחיצה עיקרית אחת ולהוסיף מחיצה מורחבת במקום. @@ -2488,117 +2856,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... נאסף מידע על המערכת… - + Partitions מחיצות - - Install %1 <strong>alongside</strong> another operating system. - להתקין את %1 <strong>לצד</strong> מערכת הפעלה אחרת. + + Unsafe partition actions are enabled. + פעולות מחיצה מסוכנות פעילות. - - <strong>Erase</strong> disk and install %1. - <strong>למחוק</strong> את הכונן ולהתקין את %1. + + Partitioning is configured to <b>always</b> fail. + החלוקה למחיצות מוגדר כך ש<b>תמיד</b> תיכשל. - - <strong>Replace</strong> a partition with %1. - <strong>החלפת</strong> מחיצה עם %1. + + No partitions will be changed. + לא נערכו מחיצות. - - <strong>Manual</strong> partitioning. - להגדיר מחיצות באופן <strong>ידני</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - להתקין את %1 <strong>לצד</strong> מערכת הפעלה אחרת על כונן <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>למחוק</strong> את הכונן <strong>%2</strong> (%3) ולהתקין את %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>החלפת</strong> מחיצה על כונן <strong>%2</strong> (%3) ב־%1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - חלוקה למחיצות באופן <strong>ידני</strong> על כונן <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - כונן <strong>%1</strong> (%2) - - - + Current: נוכחי: - + After: לאחר: - + No EFI system partition configured לא הוגדרה מחיצת מערכת EFI - - 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>esp</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. - מחיצת מערכת EFI נדרשת כדי להפעיל את %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, עליך לחזור ולבחור או ליצור מערכת קבצים מסוג FAT32 עם סימון <strong>esp</strong> פעיל ועם נקודת עיגון <strong>%2</strong>.<br/><br/> ניתן להמשיך ללא הגדרת מחיצת מערכת EFI אך טעינת המערכת עשויה להיכשל. + + EFI system partition configured incorrectly + מחיצת המערכת EFI לא הוגדרה נכון - - EFI system partition flag not set - לא מוגדר סימון מחיצת מערכת EFI + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + מחיצת מערכת EFI נחוצה להפעלת %1. <br/><br/>כדי להפעיל מחיצת מערכת EFI, יש לחזור ולבחור או ליצור מערכת קבצים מתאימה. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה עם נקודת עיגון <strong>%2</strong> אך לא הוגדר סימון <strong>esp</strong>.<br/> כדי לסמן את המחיצה, עליך לחזור ולערוך את המחיצה.<br/><br/> ניתן להמשיך ללא הוספת הסימון אך טעינת המערכת עשויה להיכשל. + + The filesystem must be mounted on <strong>%1</strong>. + יש לעגן את מערכת הקבצים ב־<strong>%1</strong> - + + The filesystem must have type FAT32. + מערכת הקבצים חייבת להיות מסוג FAT32. + + + + The filesystem must be at least %1 MiB in size. + גודל מערכת הקבצים חייב להיות לפחות ‎%1 MIB. + + + + The filesystem must have flag <strong>%1</strong> set. + למערכת הקבצים חייב להיות מוגדר הדגלון <strong>%1</strong>. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + ניתן להמשיך ללא הקמת מחיצת מערכת EFI אך המערכת שלך לא תצליח להיטען. + + + Option to use GPT on BIOS אפשרות להשתמש ב־GPT או ב־BIOS - - 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. - טבלת מחיצות מסוג GPT היא האפשרות הטובה ביותר בכל המערכות. תכנית התקנה זו תומכת גם במערכות מסוג BIOS.<br/><br/>כדי להגדיר טבלת מחיצות מסוג GPT על גבי BIOS, (אם זה טרם בוצע) יש לחזור ולהגדיר את טבלת המחיצות ל־GPT, לאחר מכן יש ליצור מחיצה של 8 מ״ב ללא פירמוט עם הדגלון <strong>bios_grub</strong> פעיל.<br/><br/>מחיצה בלתי מפורמטת בגודל 8 מ״ב נחוצה לטובת הפעלת %1 על מערכת מסוג BIOS עם GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + טבלת מחיצות GPT היא האפשרות הטובה ביותר לכל המערכות. תוכנית התקנה זאת תומכת בהקמה שכזאת גם עבור מערכות BIOS.<br/><br/>כדי להגדיר טבלת מחיצות GPT על BIOS, (אם זה טרם בוצע) יש לחזור ולהגדיר את טבלת המחיצות ל־GPT, לאחר מכן ליצור מחיצה בלתי מפורמטת בגודל 8 מ״ב עם הדגלון <strong>%2</strong> פעיל.<br/><br/>מחיצה בלתי מפורמטת בגודל 8 מ״ב נחוצה להפעלת %1 על מערכת BIOS עם GPT. - + Boot partition not encrypted - מחיצת טעינת המערכת (Boot) אינה מוצפנת. + מחיצת האתחול (Boot) אינה מוצפנת - + 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. - מחיצת טעינה, boot, נפרדת הוגדרה יחד עם מחיצת מערכת ההפעלה, root, מוצפנת, אך מחיצת הטעינה לא הוצפנה.<br/><br/> ישנן השלכות בטיחותיות עם התצורה שהוגדרה, מכיוון שקבצי מערכת חשובים נשמרים על מחיצה לא מוצפנת.<br/>תוכל להמשיך אם תרצה, אך שחרור מערכת הקבצים יתרחש מאוחר יותר כחלק מטעינת המערכת.<br/>בכדי להצפין את מחיצת הטעינה, חזור וצור אותה מחדש, על ידי בחירה ב <strong>הצפן</strong> בחלונית יצירת המחיצה. + מחיצת אתחול, boot, נפרדת הוגדרה יחד עם מחיצת מערכת ההפעלה, root, מוצפנת, אך מחיצת האתחול לא הוצפנה.<br/><br/> ישנן השלכות בטיחותיות עם התצורה שהוגדרה, מכיוון שקובצי מערכת חשובים נשמרים על מחיצה לא מוצפנת.<br/>ניתן להמשיך אם זהו רצונך, אך שחרור מערכת הקבצים יתרחש מאוחר יותר כחלק מהאתחול.<br/>בכדי להצפין את מחיצת האתחול, יש לחזור וליצור אותה מחדש, על ידי בחירה ב <strong>הצפנה</strong> בחלונית יצירת המחיצה. - + has at least one disk device available. יש לפחות התקן כונן אחד זמין. - + There are no partitions to install on. אין מחיצות להתקין עליהן. @@ -2606,13 +2964,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job משימת מראה ותחושה של Plasma - - + + Could not select KDE Plasma Look-and-Feel package לא ניתן לבחור את חבילת המראה והתחושה של KDE Plasma. @@ -2620,17 +2978,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Form - + 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. נא לבחור מראה ותחושה לשולחן העבודה KDE Plasma. ניתן גם לדלג על השלב הזה ולהגדיר את המראה והתחושה לאחר סיום התקנת המערכת. לחיצה על בחירת מראה ותחושה תעניק לך תצוגה מקדימה בזמן אמת של המראה והתחושה שנבחרו. - + 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. נא לבחור מראה ותחושה עבור שולחן העבודה KDE Plasma. ניתן גם לדלג על השלב הזה ולהגדיר מראה ותחושה לאחר הקמת המערכת. בחירה בתצורת מראה ותחושה תעניק לך תצוגה מקדימה חיה של אותה התצורה. @@ -2638,7 +2996,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel מראה ותחושה @@ -2646,17 +3004,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... הקבצים נשמרים להמשך… - + No files configured to save for later. לא הוגדרו קבצים לשמירה בהמשך. - + Not all of the configured files could be preserved. לא ניתן לשמר את כל הקבצים שהוגדרו. @@ -2664,14 +3022,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. לא היה פלט מהפקודה. - + Output: @@ -2680,52 +3038,52 @@ Output: - + External command crashed. הפקודה החיצונית נכשלה. - + Command <i>%1</i> crashed. הפקודה <i>%1</i> קרסה. - + External command failed to start. הפעלת הפעולה החיצונית נכשלה. - + Command <i>%1</i> failed to start. הפעלת הפקודה <i>%1</i> נכשלה. - + Internal error when starting command. שגיאה פנימית בעת הפעלת פקודה. - + Bad parameters for process job call. פרמטרים לא תקינים עבור קריאת עיבוד פעולה. - + External command failed to finish. סיום הפקודה החיצונית נכשל. - + Command <i>%1</i> failed to finish in %2 seconds. הפקודה <i>%1</i> לא הסתיימה תוך %2 שניות. - + External command finished with errors. הפקודה החיצונית הסתיימה עם שגיאות. - + Command <i>%1</i> finished with exit code %2. הפקודה <i>%1</i> הסתיימה עם קוד היציאה %2. @@ -2733,89 +3091,95 @@ Output: QObject - - Default Keyboard Model - דגם מקלדת כבררת מחדל - - - - - Default - בררת מחדל - - - - unknown - לא ידוע - - - - extended - מורחבת - - - - unformatted - לא מאותחלת - - - - swap - דפדוף, swap - - - - Unpartitioned space or unknown partition table - הזכרון לא מחולק למחיצות או שטבלת המחיצות אינה מוכרת - - - - (no mount point) - (אין נקודת עגינה) - - - - Requirements checking for module <i>%1</i> is complete. - בדיקת הדרישות למודול <i>%1</i> הושלמה. - - - + %1 (%2) %1 (%2) - - No product - אין מוצר + + unknown + לא ידוע - - No description provided. - לא סופק תיאור. + + extended + מורחבת - - - - + + unformatted + לא מאותחלת + + + + swap + דפדוף swap + + + + + Default + בררת מחדל + + + + + + File not found הקובץ לא נמצא - + Path <pre>%1</pre> must be an absolute path. הנתיב <pre>%1</pre> חייב להיות נתיב מלא. - + + Directory not found + התיקייה לא נמצאה + + + + Could not create new random file <pre>%1</pre>. לא ניתן ליצור קובץ אקראי חדש <pre>%1</pre>. + + + No product + אין מוצר + + + + No description provided. + לא סופק תיאור. + + + + (no mount point) + (אין נקודת עגינה) + + + + Unpartitioned space or unknown partition table + השטח לא מחולק למחיצות או שטבלת המחיצות אינה מוכרת + + + + Recommended + + + <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> + <p>המחשב לא עומד בחלק מרף דרישות המזערי להתקנת %1.<br/> + ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו.</p> + RemoveUserJob - + Remove live user from target system הסרת משתמש חי ממערכת היעד @@ -2823,18 +3187,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. הסרת קבוצת כרכים בשם %1. - + Remove Volume Group named <strong>%1</strong>. הסרת קבוצת כרכים בשם <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. אשף ההתקנה נכשל בהסרת קבוצת כרכים בשם ‚%1’. @@ -2842,143 +3206,160 @@ Output: ReplaceWidget - + Form Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. בחר מיקום התקנת %1.<br/><font color="red">אזהרה: </font> הפעולה תמחק את כל הקבצים במחיצה שנבחרה. - + The selected item does not appear to be a valid partition. הפריט הנבחר איננו מחיצה תקינה. - + %1 cannot be installed on empty space. Please select an existing partition. - לא ניתן להתקין את %1 על זכרון ריק. אנא בחר מחיצה קיימת. + לא ניתן להתקין את %1 על שטח ריק. נא לבחור מחיצה קיימת. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. לא ניתן להתקין את %1 על מחיצה מורחבת. אנא בחר מחיצה ראשית או לוגית קיימת. - + %1 cannot be installed on this partition. לא ניתן להתקין את %1 על מחיצה זו. - + Data partition (%1) מחיצת מידע (%1) - + Unknown system partition (%1) מחיצת מערכת (%1) לא מוכרת - + %1 system partition (%2) %1 מחיצת מערכת (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/> גודל המחיצה %1 קטן מדי עבור %2. אנא בחר מחיצה עם קיבולת בנפח %3 GiB לפחות. - + <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. <strong>%2</strong><br/><br/> מחיצת מערכת EFI לא נמצאה באף מקום על המערכת. חזור בבקשה והשתמש ביצירת מחיצות באופן ידני בכדי להגדיר את %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 יותקן על %2. <br/><font color="red">אזהרה: </font>כל המידע אשר קיים במחיצה %2 יאבד. - + The EFI system partition at %1 will be used for starting %2. מחיצת מערכת EFI ב %1 תשמש עבור טעינת %2. - + EFI system partition: מחיצת מערכת EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>המחשב הזה לא עונה על רף הדרישות המזערי להתקנת %1.<br/> + ההתקנה לא יכולה להמשיך.</p> + + + + <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> + <p>המחשב לא עומד בחלק מרף דרישות המזערי להתקנת %1.<br/> + ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו.</p> + + ResizeFSJob - + Resize Filesystem Job משימת שינוי גודל מערכת קבצים - + Invalid configuration תצורה שגויה - + The file-system resize job has an invalid configuration and will not run. למשימת שינוי גודל מערכת הקבצים יש תצורה שגויה והיא לא תפעל. - + KPMCore not Available KPMCore לא זמין - + Calamares cannot start KPMCore for the file-system resize job. ל־Calamares אין אפשרות להתחיל את KPMCore עבור משימת שינוי גודל מערכת הקבצים. - - - - - + + + + + Resize Failed שינוי הגודל נכשל - + The filesystem %1 could not be found in this system, and cannot be resized. לא הייתה אפשרות למצוא את מערכת הקבצים %1 במערכת הזו, לכן לא ניתן לשנות את גודלה. - + The device %1 could not be found in this system, and cannot be resized. לא הייתה אפשרות למצוא את ההתקן %1 במערכת הזו, לכן לא ניתן לשנות את גודלו. - - + + The filesystem %1 cannot be resized. לא ניתן לשנות את גודל מערכת הקבצים %1. - - + + The device %1 cannot be resized. לא ניתן לשנות את גודל ההתקן %1. - + The filesystem %1 must be resized, but cannot. חובה לשנות את גודל מערכת הקבצים %1, אך לא ניתן. - + The device %1 must be resized, but cannot חובה לשנות את גודל ההתקן %1, אך לא ניתן. @@ -2986,30 +3367,30 @@ Output: ResizePartitionJob - + Resize partition %1. שינוי גודל המחיצה %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. שינוי גודל של מחיצה בגודל <strong>%2MiB</strong> בנתיב <strong>%1</strong> לכדי <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. משתנה הגודל של מחיצה %1 בגודל %2MiB לכדי %3MiB. - + The installer failed to resize partition %1 on disk '%2'. - תהליך ההתקנה נכשל בשינוי גודל המחיצה %1 על כונן '%2'. + אשף ההתקנה נכשל בשינוי גודל המחיצה %1 על כונן '%2'. ResizeVolumeGroupDialog - + Resize Volume Group שינוי גודל קבוצת כרכים @@ -3017,18 +3398,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. שינוי גודל קבוצת כרכים בשם %1 מ־%2 ל־%3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. שינוי גודל קבוצת כרכים בשם <strong>%1</strong> מ־<strong>%2</strong> ל־<strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. אשף ההתקנה נכשל בשינוי גודל קבוצת הכרכים בשם ‚%1’. @@ -3036,53 +3417,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: לקבלת התוצאות הטובות ביותר, נא לוודא כי מחשב זה: - + System requirements דרישות מערכת - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - המחשב לא עומד ברף הדרישות המזערי להתקנת %1. <br/>להתקנה אין אפשרות להמשיך. <a href="#details">פרטים…</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - המחשב לא עומד ברף דרישות המינימום להתקנת %1. <br/>ההתקנה לא יכולה להמשיך. <a href="#details"> פרטים...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - המחשב לא עומד בחלק מרף דרישות המזערי להתקנת %1.<br/> ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - המחשב לא עומד בחלק מרף דרישות המינימום להתקנת %1.<br/> ההתקנה יכולה להמשיך, אך יתכן כי חלק מהתכונות יושבתו. - - - - This program will ask you some questions and set up %2 on your computer. - תכנית זו תשאל אותך מספר שאלות ותתקין את %2 על המחשב שלך. - - ScanningDialog - + Scanning storage devices... התקני אחסון נסרקים… - + Partitioning חלוקה למחיצות @@ -3090,29 +3443,29 @@ Output: SetHostNameJob - + Set hostname %1 הגדרת שם מארח %1 - + Set hostname <strong>%1</strong>. הגדרת שם מארח <strong>%1</strong>. - + Setting hostname %1. - שם העמדה %1 מוגדר. + כעת בהגדרת שם המארח %1. + - Internal Error שגיאה פנימית - - + + Cannot write hostname to target system כתיבת שם העמדה למערכת היעד נכשלה @@ -3120,29 +3473,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 הגדר דגם מקלדת ל %1, פריסת לוח מקשים ל %2-%3 - + Failed to write keyboard configuration for the virtual console. נכשלה כתיבת הגדרת מקלדת למסוף הוירטואלי. - - - + + + Failed to write to %1 נכשלה כתיבה ל %1 - + Failed to write keyboard configuration for X11. נכשלה כתיבת הגדרת מקלדת עבור X11. - + Failed to write keyboard configuration to existing /etc/default directory. נכשלה כתיבת הגדרת מקלדת לתיקיה קיימת /etc/default. @@ -3150,125 +3503,125 @@ Output: SetPartFlagsJob - + Set flags on partition %1. הגדר סימונים על מחיצה %1. - + Set flags on %1MiB %2 partition. הגדרת דגלונים על מחיצה מסוג %2 בגודל %1MiB. - + Set flags on new partition. הגדרת סימונים על מחיצה חדשה. - + Clear flags on partition <strong>%1</strong>. מחיקת סימונים מהמחיצה <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. לבטל דגלונים על מחיצת <strong>%2</strong> בגודל %1MiB. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - סימון מחיצת <strong>%2</strong> בגודל %1MiB בתור <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - לבטל דגלונים על מחיצת <strong>%2</strong> בגודל %1MiB. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - הדגלונים <strong>%3</strong> על מחיצת <strong>%2</strong> בגודל %1MiB. - - - + Clear flags on new partition. מחק סימונים על המחיצה החדשה. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. סמן מחיצה <strong>%1</strong> כ <strong>%2</strong>. - - Flag new partition as <strong>%1</strong>. - סמן מחיצה חדשה כ <strong>%1</strong>. + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + סימון מחיצת <strong>%2</strong> בגודל %1MiB בתור <strong>%3</strong>. - + + Flag new partition as <strong>%1</strong>. + סימון המחיצה החדשה בתור <strong>%1</strong>. + + + Clearing flags on partition <strong>%1</strong>. מוחק סימונים על מחיצה <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + לבטל דגלונים על מחיצת <strong>%2</strong> בגודל %1MiB. + + + Clearing flags on new partition. מוחק סימונים על מחיצה חדשה. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. מגדיר סימונים <strong>%2</strong> על מחיצה <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + הדגלונים <strong>%3</strong> על מחיצת <strong>%2</strong> בגודל %1MiB. + + + Setting flags <strong>%1</strong> on new partition. מגדיר סימונים <strong>%1</strong> על מחיצה חדשה. - + The installer failed to set flags on partition %1. - תהליך ההתקנה נכשל בעת הצבת סימונים במחיצה %1. + אשף ההתקנה נכשל בהצבת סימונים במחיצה %1. SetPasswordJob - + Set password for user %1 הגדר סיסמה עבור משתמש %1 - + Setting password for user %1. - מגדיר סיסמה עבור משתמש %1. + כעת בהגדרת הסיסמה למשתמש %1. - + Bad destination system path. יעד נתיב המערכת לא תקין. - + rootMountPoint is %1 עיגון מחיצת מערכת ההפעלה, rootMountPoint, היא %1 - + Cannot disable root account. לא ניתן לנטרל את חשבון המנהל root. - + passwd terminated with error code %1. passwd הסתיימה עם שגיאת קוד %1. - + Cannot set password for user %1. לא ניתן להגדיר סיסמה עבור משתמש %1. - + usermod terminated with error code %1. פקודת שינוי מאפייני המשתמש, usermod, נכשלה עם קוד יציאה %1. @@ -3276,45 +3629,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 הגדרת אזור זמן ל %1/%2 - + Cannot access selected timezone path. לא ניתן לגשת לנתיב של אזור הזמן הנבחר. - + Bad path: %1 נתיב לא תקין: %1 - + Cannot set timezone. לא ניתן להגדיר את אזור הזמן. - + Link creation failed, target: %1; link name: %2 נכשלה יצירת קיצור דרך, מיקום: %1; שם קיצור הדרך: %2 - + Cannot set timezone, לא ניתן להגדיר את אזור הזמן, - + Cannot open /etc/timezone for writing לא ניתן לפתוח את /etc/timezone לכתיבה + + SetupGroupsJob + + + Preparing groups. + הקבוצות בהכנה. + + + + + Could not create groups in target system + לא ניתן למצוא קבוצות במערכת היעד + + + + These groups are missing in the target system: %1 + קבוצות אלו חסרות ממערכת היעד: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + הגדרת משתמשי <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + לא ניתן לשנות את מאפייני קובץ מנהלי המערכת. + + + + Cannot create sudoers file for writing. + לא ניתן ליצור את קובץ מנהלי המערכת לכתיבה. + + ShellProcessJob - + Shell Processes Job משימת תהליכי מעטפת @@ -3322,81 +3712,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - זו סקירה של מה שיקרה לאחר התחלת תהליך ההתקנה. + + &OK + &אישור - - This is an overview of what will happen once you start the install procedure. - להלן סקירת המאורעות שיתרחשו עם תחילת תהליך ההתקנה. + + &Yes + &כן - - - SummaryViewStep - - Summary - סיכום + + &No + &לא + + + + &Cancel + &ביטול + + + + &Close + &סגירה TrackingInstallJob - + Installation feedback משוב בנושא ההתקנה - + Sending installation feedback. שולח משוב בנושא ההתקנה. - + Internal error in install-tracking. שגיאה פנימית בעת התקנת תכונת המעקב. - + HTTP request timed out. בקשת HTTP חרגה מזמן ההמתנה המקסימאלי. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + משוב משתמש KDE + + + + Configuring KDE user feedback. + משוב המשתמש ב־KDE מוגדר. + + + + + Error in KDE user feedback configuration. + שגיאה בהגדרות משוב המשתמש ב־KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + לא ניתן להגדיר את משוב המשתמש ב־KDE כראוי, שגיאת סקריפט %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + לא ניתן להגדיר את משוב המשתמש ב־KDE כראוי, שגיאת Calamares‏ %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback משוב בנושא עמדת המחשב - + Configuring machine feedback. מגדיר משוב בנושא עמדת המחשב. - - + + Error in machine feedback configuration. שגיאה בעת הגדרת המשוב בנושא עמדת המחשב. - + Could not configure machine feedback correctly, script error %1. לא ניתן להגדיר את המשוב בנושא עמדת המחשב באופן תקין. שגיאת הרצה %1. - + Could not configure machine feedback correctly, Calamares error %1. לא ניתן להגדיר את המשוב בנושא עמדת המחשב באופן תקין. שגיאת Calamares %1. @@ -3404,106 +3830,97 @@ Output: TrackingPage - + Form Form - + Placeholder ממלא מקום - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>בחירה באפשרות זו, תוביל לכך <span style=" font-weight:600;">שלא יישלח מידע כלל</span> בנוגע ההתקנה שלך.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>ניתן ללחוץ כאן כדי <span style=" font-weight:600;">לא למסור כלל מידע</span> על ההתקנה שלך.</p></body></html> - + <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> - <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">לחץ כאן למידע נוסף אודות משוב מצד המשתמש</span></a></p></body></html> + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">יש ללחוץ כאן למידע נוסף על המשוב מצד המשתמשים</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - מעקב אחר ההתקנה מסייע ל־%1 לראות כמה משתמשים במוצר שלהם, על איזו חומרה מתבצעת ההתקנה של %1, בנוסף (לשתי האפשרויות הקודמות), קבלת מידע מתחדש על יישומים מועדפים. כדי לצפות בנתונים שיישלחו, נא לשלוח על סמל העזרה שליד כל אחד מהסעיפים. + + 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. + מעקב מסייע ל־%1 לראות מה תדירות ההתקנות, על איזו חומרה המערכת מותקנת ואילו יישומים בשימוש. כדי לצפות במה שיישלח, נא ללחוץ על סמל העזרה שליד כל אזור. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - בחירה באפשרות זו תוביל לשליחת מידע על ההתקנה והחומרה שלך. מידע זה <b>יישלח פעם אחת בלבד</b> לאחר סיום ההתקנה. + + 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. + בחירה באפשרות זו תוביל לשליחת מידע על ההתקנה והחומרה שלך. מידע זה יישלח <b>פעם אחת</b> בלבד לאחר סיום ההתקנה. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - בחירה באפשרות הזאת תוביל לשליחת מידע <b>מדי פעם בפעם</b> על ההתקנה, החומרה והיישומים שלך אל %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + בחירה באפשרות הזאת תוביל לשליחת מידע מדי פעם בפעם על ההתקנה ב<b>מערכת</b>, החומרה והיישומים שלך אל %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - בחירה באפשרות זו תוביל לשליחת מידע <b>באופן קבוע</b> על ההתקנה, החומרה, היישומים ודפוסי שימוש אל %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + בחירה באפשרות זו תוביל לשליחת מידע באופן קבוע על התקנת ה<b>משתמש</b>, החומרה, היישומים ודפוסי שימוש אל %1. TrackingViewStep - + Feedback משוב + + UmountJob + + + Unmount file systems. + ניתוק עיגון מערכות קבצים. + + + + No target system available. + אין מערכת יעד זמינה. + + + + No rootMountPoint is set. + לא הוגדרה נקודת עיגון לשורש. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>אם מחשב זה מיועד לשימוש לטובת למעלה ממשתמש אחד, ניתן ליצור מגוון חשבונות לאחר ההתקנה.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>אם מחשב זה מיועד לשימוש לטובת למעלה ממשתמש אחד, ניתן ליצור מגוון חשבונות לאחר ההתקנה.</small> + + + UsersQmlViewStep - - Your username is too long. - שם המשתמש ארוך מדי. - - - - Your username must start with a lowercase letter or underscore. - שם המשתמש שלך חייב להתחיל באות קטנה או בקו תחתי. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - מותר להשתמש רק באותיות קטנות, ספרות, קווים תחתיים ומינוסים. - - - - Only letters, numbers, underscore and hyphen are allowed. - מותר להשתמש רק באותיות, ספרות, קווים תחתיים ומינוסים. - - - - Your hostname is too short. - שם המחשב קצר מדי. - - - - Your hostname is too long. - שם המחשב ארוך מדי. - - - - Your passwords do not match! - הססמאות לא תואמות! + + Users + משתמשים UsersViewStep - + Users משתמשים @@ -3511,65 +3928,67 @@ Output: VariantModel - + Key + Column header for key/value מפתח - + Value + Column header for key/value ערך VolumeGroupBaseDialog - + Create Volume Group יצירת קבוצת כרכים - + List of Physical Volumes רשימת כרכים פיזיים - + Volume Group Name: שם קבוצת כרכים: - + Volume Group Type: סוג קבוצת כרכים: - + Physical Extent Size: גודל משטח פיזי: - + MiB MiB - + Total Size: גודל כולל: - + Used Size: גודל מנוצל: - + Total Sectors: סך כל המקטעים: - + Quantity of LVs: כמות הכרכים הלוגיים: @@ -3577,106 +3996,106 @@ Output: WelcomePage - + Form Form - - + + Select application and system language נא לבחור יישום ואת שפת המערכת + &About + על &אודות + + + Open donations website פתיחת אתר התרומות - + &Donate &תרומה - + Open help and support website פתיחת אתר העזרה והתמיכה + &Support + &תמיכה + + + Open issues and bug-tracking website פתיחת אתר התקלות והמעקב אחר באגים - Open release notes website - פתיחת האתר עם הערות המהדורה - - - - &Release notes - ה&ערות מהדורה - - - &Known issues &בעיות נפוצות - - &Support - &תמיכה + + Open release notes website + פתיחת האתר עם הערות המהדורה - - &About - על &אודות + + &Release notes + ה&ערות מהדורה - - <h1>Welcome to the %1 installer.</h1> - <h1>ברוך בואך להתקנת %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>ברוך בואך להתקנת %1 עם Calamares.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>ברוך בואך לתכנית ההתקנה Calamares עבור %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>ברוך בואך להתקנת %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>ברוך בואך להתקנת %1 עם Calamares.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>ברוך בואך להתקנת %1.</h1> + + + + %1 support + תמיכה ב־%1 + + + About %1 setup על אודות התקנת %1 - + About %1 installer על אודות התקנת %1 - + <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. - <h1>%1</h1><br/><strong>%2<br/>עבור %3</strong><br/><br/>כל הזכויות שמורות 2014‏-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>כל הזכויות שמורות 2017‏-2019 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> - דואגים לחופש התכנה. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - תמיכה ב־%1 + <h1>%1</h1><br/><strong>%2<br/>עבור %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> - דואגים לחירות התכנה. WelcomeQmlViewStep - + Welcome ברוך בואך @@ -3684,84 +4103,217 @@ Output: WelcomeViewStep - + Welcome ברוך בואך + + ZfsJob + + + Create ZFS pools and datasets + יצירת מאגרי ZFS וסדרות נתונים + + + + Failed to create zpool on + נכשלה יצירת מאגר zpool תחת + + + + Configuration Error + שגיאת הגדרות + + + + No partitions are available for ZFS. + אין מחיצות זמינות ל־ZFS. + + + + Internal data missing + הנתונים הפנימיים חסרים + + + + + Failed to create zpool + יצירת מאגר zpool נכשלה + + + + Failed to create dataset + יצירת סדרת הנתונים נכשלה + + + + The output was: + הפלט היה: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <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> - + דואגים לחירות התכנה. - + Back - + חזרה + + + + calamares-sidebar + + + Show debug information + הצגת מידע ניפוי שגיאות + + + + finishedq + + + Installation Completed + ההתקנה הושלמה + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 הותקן על המחשב שלך.<br/> + כעת ניתן לאתחל את המחשב אל תוך המערכת החדשה שלך, או להמשיך להשתמש בסביבה הניסיונית. + + + + Close Installer + סגירת אשף ההתקנה + + + + Restart System + הפעלת המערכת מחדש + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>יומן מלא של ההתקנה זמין בשם installation.log בתיקיית הבית של המשתמש Live.<br/> + יומן זה מועתק אל ‎/var/log/installation.log במערכת היעד.</p> + + + + finishedq@mobile + + + Installation Completed + ההתקנה הושלמה + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + על המחשב שלך בוצעה התקנה של %1.<br/> +  ניתן כעת להפעיל את המכשיר הזה מחדש. + + + + Close + סגירה + + + + Restart + הפעלה מחדש + + + + i18n + + + <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>. + <h1>שפות</h1> </br> + תבנית המערכת המקומית משפיעה על השפה ועל ערכת התווים של מגוון רכיבים במנשק המשתמש. ההגדרה הנוכחית היא <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>תבניות מקומיות</h1> </br> + הגדרות התבנית המקומית של המערכת תשפיע על תצורת המספרים והתאריכים. ההגדרה הנוכחית היא <strong>%1</strong>. + + + + Back + חזרה keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + כדי להפעיל תצוגה מקדימה של מקלדת יש לבחור בפריסה. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + דגם מקלדת: - - Refresh - - - - - + Layouts - + פריסות - - - Keyboard Layout - + + Type here to test your keyboard + ניתן להקליד כאן כדי לבדוק את המקלדת שלך - - Models - - - - + Variants - + הגוונים + + + localeq - - Test your keyboard - + + Change + החלפה notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3769,34 +4321,262 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice היא חבילת כלים משרדיים מקיפה וחופשית, משרתת מיליוני משתמשים ברחבי העולם. היא כוללת מגוון יישומים שהופכים אותה לחבילת הכלים המשרדיים הגמישה ביותר בשוק הקוד הפתוח.<br/> + אפשרות בררת המחדל. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + אם העדפתך היא שלא להתקין חבילת כלים משרדיים, אפשר לבחור באפשרות „ללא כלים משרדיים”. תמיד ניתן להוסיף כאלה (אף יותר מסוג אחד) בהמשך לאחר שהמערכת כבר מותקנת. + + + + No Office Suite + ללא כלים משרדיים + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + יצירת התקנה מצומצמת לשולחן העבודה, להסיר את כל היישומים העודפים ולהחליט מאוחר יותר מה מתאים להוסיף למערכת שלך. דוגמאות למה שלא יהיה בהתקנה שכזאת, למשל: לא תהיה חבילת כלים משרדיים (Office), לא יהיו נגני מדיה, אין מציגי תמונות או תמיכה בהדפסה. זה יהיה רק שולחן עבודה, מנהל קבצים, מנהל חבילות, עורך טקסט ודפדפן אינטרנט פשוט. + + + + Minimal Install + התקנה מצומצמת + + + + Please select an option for your install, or use the default: LibreOffice included. + נא לבחור אפשרות להתקנה שלך או להשתמש בבררת המחדל: LibreOffice כלול. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>זה קובץ QML לדוגמה, שמציג אפשרויות ב־RichText עם תוכן Flickable.</p> + + <p>QML עם RichText יכול להשתמש בתגיות HTML, תוכן Flickable הוא שימושי למסכי מגע.</p> + + <p><b>זה טקסט מודגש</b></p> + <p><i>זה טקסט נטוי</i></p> + <p><u>זה טקסט עם קו תחתי</u></p> + <p><center>טקסט זה ימורכז.</center></p> + <p><s>זה קו חוצה</s></p> + + <p>דוגמת קוד: + <code>ls -l /home</code></p> + + <p><b>רשימות:</b></p> + <ul> + <li>מערכות עם מעבדי אינטל</li> + <li>מערכות עם מעבדי AMD</li> + </ul> + + <p>פס הגלילה האנכי ניתן להתאמה, כרגע העובי שהוגדר עבורו הוא 10.</p> + + + + Back + חזרה + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + נא לבחור את שם המשתמש ואת פרטי הגישה שלך כדי להיכנס ולבצע פעולות ניהוליות. + + + + What is your name? + מה שמך? + + + + Your Full Name + שמך המלא + + + + What name do you want to use to log in? + איזה שם ברצונך שישמש אותך לכניסה? + + + + Login Name + שם הכניסה + + + + If more than one person will use this computer, you can create multiple accounts after installation. + אם במחשב זה יש יותר ממשתמש אחד, ניתן ליצור מגוון חשבונות לאחר ההתקנה. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + מותר להשתמש רק באותיות קטנות, ספרות, קווים תחתיים ומינוסים. + + + + root is not allowed as username. + אסור להשתמש ב־root כשם משתמש. + + + + What is the name of this computer? + מהו השם של המחשב הזה? + + + + Computer Name + שם המחשב + + + + This name will be used if you make the computer visible to others on a network. + השם הזה יהיה בשימוש אם המחשב הזה יהיה גלוי לשאר הרשת. + + + + localhost is not allowed as hostname. + אסור להשתמש ב־localhost כשם מארח. + + + + Choose a password to keep your account safe. + נא לבחור סיסמה להגנה על חשבונך. + + + + Password + סיסמה + + + + Repeat Password + חזרה על הסיסמה + + + + 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. + יש להקליד את אותה הסיסמה פעמיים כדי שניתן יהיה לבדוק שגיאות הקלדה. סיסמה טובה אמורה להכיל שילוב של אותיות, מספרים וסימני פיסוק, להיות באורך של שמונה תווים לפחות ויש להחליף אותה במרווחי זמן קבועים. + + + + Validate passwords quality + אימות איכות הסיסמאות + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + כשתיבה זו מסומנת, בדיקת אורך סיסמה מתבצעת ולא תהיה לך אפשרות להשתמש בסיסמה חלשה. + + + + Log in automatically without asking for the password + להיכנס אוטומטית מבלי לבקש סיסמה + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + מותר להשתמש באותיות, ספרות, קווים תחתונים ומינוסים, שני תווים ומעלה. + + + + Reuse user password as root password + להשתמש בסיסמת המשתמש גם בשביל משתמש העל (root) + + + + Use the same password for the administrator account. + להשתמש באותה הסיסמה בשביל חשבון המנהל. + + + + Choose a root password to keep your account safe. + נא לבחור סיסמה למשתמש העל (root) כדי להגן על חשבונך. + + + + Root Password + סיסמה למשתמש העל (root) + + + + Repeat Root Password + נא לחזור על סיסמת משתמש העל + + + + Enter the same password twice, so that it can be checked for typing errors. + נא להקליד את הסיסמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה. + + + + welcomeq + + + <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> + <h3>ברוך בואך לתכנית ההתקנה של %1 <quote>%2</quote></h3> + <p>תכנית זו תשאל אותך מספר שאלות ותתקין את %1 על המחשב שלך.</p> + + + About על אודות - + Support תמיכה - + Known issues בעיות נפוצות - + Release notes הערות מהדורה - + Donate תרומה diff --git a/lang/calamares_hi.ts b/lang/calamares_hi.ts index ed10182f7..e32c70897 100644 --- a/lang/calamares_hi.ts +++ b/lang/calamares_hi.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + स्वतः माउंट सेटिंग्स हेतु प्रबंधन + + BootInfoWidget - + 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. इस सिस्टम का <strong>बूट वातावरण</strong>।<br><br>पुराने x86 सिस्टम केवल <strong>BIOS</strong> का समर्थन करते हैं। आधुनिक सिस्टम आमतौर पर <strong>EFI</strong> का उपयोग करते हैं, लेकिन संगतता मोड में शुरू होने पर BIOS के रूप में दिखाई दे सकते हैं । - + 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. यह सिस्टम <strong>EFI</strong>बूट वातावरण के साथ शुरू किया गया।<br><br>EFI वातावरण से स्टार्टअप विन्यस्त करने के लिए इंस्टॉलर को <strong>GRUB</strong> या <strong>systemd-boot</strong> जैसे बूट लोडर अनुप्रयोग <strong>EFI सिस्टम विभाजन</strong>पर स्थापित करने जरूरी हैं। यह स्वत: होता है, परंतु अगर आप मैनुअल विभाजन करना चुनते है; तो आपको या तो इसे चुनना होगा या फिर खुद ही बनाना होगा। - + 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. - यह सिस्टम <strong>BIOS</strong>बूट वातावरण के साथ शुरू किया गया।<br><br>BIOS वातावरण से स्टार्टअप विन्यस्त करने के लिए इंस्टॉलर को <strong>GRUB</strong> जैसे बूट लोडर को, या तो विभाजन की शुरुआत में या फिर <strong>मास्टर बूट रिकॉर्ड</strong> पर विभाजन तालिका की शुरुआत में इंस्टॉल (सुझाया जाता है) करना होगा। यह स्वत: होता है, परंतु अगर आप मैनुअल विभाजन करना चुनते है; तो आपको इसे खुद ही बनाना होगा। + यह सिस्टम <strong>BIOS</strong>बूट वातावरण के साथ शुरू किया गया।<br><br>BIOS वातावरण से स्टार्टअप विन्यस्त करने के लिए इंस्टॉलर को <strong>GRUB</strong> जैसे बूट लोडर को, या तो विभाजन की शुरुआत में या फिर <strong>Master Boot Record</strong> पर विभाजन तालिका की शुरुआत में इंस्टॉल (सुझाया जाता है) करना होगा। यह स्वत: होता है, परंतु अगर आप मैनुअल विभाजन करना चुनते है; तो आपको इसे खुद ही बनाना होगा। BootLoaderModel - + Master Boot Record of %1 %1 का मास्टर बूट रिकॉर्ड - + Boot Partition बूट विभाजन - + System Partition सिस्टम विभाजन - + Do not install a boot loader बूट लोडर इंस्टॉल न करें - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page खाली पृष्ठ @@ -58,71 +66,91 @@ Calamares::DebugWindow - + Form रूप - + GlobalStorage ग्लोबल स्टोरेज - + JobQueue कार्य पंक्ति - + Modules मॉड्यूल - + Type: - प्रकार : + प्रकार - - + + none कुछ नहीं - + Interface: - इंटरफ़ेस : + अंतरफलक : - - Tools - साधन + + Crashes Calamares, so that Dr. Konqui can look at it. + Dr. Konqui द्वारा जाँच के लिए Calamares की कार्यप्रणाली निरस्त करने हेतु। - + + Reloads the stylesheet from the branding directory. + ब्रांड डायरेक्टरी से शैली पत्र पुनः लोड करने हेतु। + + + + Uploads the session log to the configured pastebin. + सत्र लॉग फाइल को विन्यस्त पेस्टबिन साइट पर अपलोड करने हेतु। + + + + Send Session Log + सत्र लॉग फाइल भेजें + + + Reload Stylesheet शैली पत्रक पुनः लोड करें - + + Displays the tree of widget names in the log (for stylesheet debugging). + (शैली दोषमार्जन हेतु) लॉग फाइल में विजेट नाम प्रदर्शन। + + + Widget Tree विजेट ट्री - + Debug information - डीबग जानकारी + डीबग संबंधी जानकारी Calamares::ExecutionViewStep - + Set up सेटअप - + Install इंस्टॉल करें @@ -130,28 +158,28 @@ Calamares::FailJob - + Job failed (%1) कार्य विफल रहा (%1) - + Programmed job failure was explicitly requested. - प्रोग्राम किए गए कार्य की विफलता स्पष्ट रूप से अनुरोध की गई थी। + प्रोग्राम किए गए कार्य की विफलता स्पष्ट रूप से अनुरोधित थी। Calamares::JobThread - + Done - पूर्ण हुआ + पूर्ण Calamares::NamedJob - + Example job (%1) उदाहरण कार्य (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - लक्षित सिस्टम में कमांड '%1' चलाएँ। + लक्षित सिस्टम पर कमांड '%1' चलाएँ। - + Run command '%1'. कमांड '%1' चलाएँ। - + Running command %1 %2 कमांड %1%2 चल रही हैं @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 चल रहा है। - + Bad working directory path कार्यरत फोल्डर का पथ गलत है - + Working directory %1 for python job %2 is not readable. - पाइथन कार्य %2 के लिए कार्यरत डायरेक्टरी %1 रीड करने योग्य नहीं है। + पाइथन कार्य %2 हेतु कार्यरत डायरेक्टरी %1 रीड योग्य नहीं है। - + Bad main script file - ख़राब मुख्य स्क्रिप्ट फ़ाइल + गलत मुख्य स्क्रिप्ट फ़ाइल - + Main script file %1 for python job %2 is not readable. - पाइथन कार्य %2 हेतु मुख्य स्क्रिप्ट फ़ाइल %1 रीड करने योग्य नहीं है। + पाइथन कार्य %2 हेतु मुख्य स्क्रिप्ट फ़ाइल %1 रीड योग्य नहीं है। - + Boost.Python error in job "%1". कार्य "%1" में Boost.Python त्रुटि। @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + लोड हो रहा है ... - + QML Step <i>%1</i>. - + QML चरण <i>%1</i>। - + Loading failed. - + लोड करना विफल रहा। Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + मॉड्यूल <i>%1</i> हेतु आवश्यकताओं की जाँच पूर्ण हुई। + - + Waiting for %n module(s). %n मॉड्यूल की प्रतीक्षा में। @@ -236,7 +269,7 @@ - + (%n second(s)) (%n सेकंड) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. सिस्टम हेतु आवश्यकताओं की जाँच पूर्ण हुई। @@ -252,246 +285,241 @@ Calamares::ViewManager - - &Back - वापस (&B) - - - - &Next - आगे (&N) - - - - &Cancel - रद्द करें (&C) - - - - Cancel setup without changing the system. - सिस्टम में बदलाव किये बिना सेटअप रद्द करें। - - - - Cancel installation without changing the system. - सिस्टम में बदलाव किये बिना इंस्टॉल रद्द करें। - - - + Setup Failed सेटअप विफल रहा - - Would you like to paste the install log to the web? - + + Installation Failed + इंस्टॉल विफल रहा। - + + Error + त्रुटि + + + + &Yes + हाँ (&Y) + + + + &No + नहीं (&N) + + + + &Close + बंद करें (&C) + + + Install Log Paste URL - + इंस्टॉल प्रक्रिया की लॉग फ़ाइल पेस्ट करें - + The upload was unsuccessful. No web-paste was done. - अपलोड असफल रहा। कोई वेब-पेस्ट नही किया गया। + अपलोड विफल रहा। इंटरनेट पर पेस्ट नहीं हो सका। - + + Install log posted to + +%1 + +Link copied to clipboard + यहाँ इंस्टॉल की लॉग फ़ाइल पेस्ट की गई + +%1 + +लिंक को क्लिपबोर्ड पर कॉपी किया गया + + + Calamares Initialization Failed Calamares का आरंभीकरण विफल रहा - + %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. - %1 को इनस्टॉल नहीं किया जा सका। Calamares सभी विन्यस्त मापांकों को लोड करने में विफल रहा। यह आपके लिनक्स वितरण द्वारा Calamares के उपयोग से संबंधित एक समस्या है। + %1 इंस्टॉल नहीं किया जा सका। Calamares सभी विन्यस्त मॉड्यूल लोड करने में विफल रहा। यह आपके लिनक्स वितरण द्वारा Calamares के उपयोग से संबंधित एक समस्या है। - + <br/>The following modules could not be loaded: - <br/>निम्नलिखित मापांक लोड नहीं हो सकें : + <br/>निम्नलिखित मॉड्यूल लोड नहीं हो सकें : - + + Continue with setup? + सेटअप करना जारी रखें? + + + Continue with installation? इंस्टॉल प्रक्रिया जारी रखें? - + 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> %2 सेटअप करने हेतु %1 सेटअप प्रोग्राम आपकी डिस्क में बदलाव करने वाला है।<br/><strong>आप इन बदलावों को पूर्ववत नहीं कर पाएंगे।</strong> - + + 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> + %2 इंस्टॉल करने के लिए %1 इंस्टॉलर आपकी डिस्क में बदलाव करने वाला है।<br/><strong>आप इन बदलावों को पूर्ववत नहीं कर पाएंगे।</strong> + + + &Set up now अभी सेटअप करें (&S) - + + &Install now + अभी इंस्टॉल करें (&I) + + + + Go &back + वापस जाएँ (&b) + + + &Set up सेटअप करें (&S) - + &Install इंस्टॉल करें (&I) - + Setup is complete. Close the setup program. सेटअप पूर्ण हुआ। सेटअप प्रोग्राम बंद कर दें। - + + The installation is complete. Close the installer. + इंस्टॉल पूर्ण हुआ।अब इंस्टॉलर को बंद करें। + + + + Cancel setup without changing the system. + सिस्टम में बदलाव किये बिना सेटअप रद्द करें। + + + + Cancel installation without changing the system. + सिस्टम में बदलाव किये बिना इंस्टॉल रद्द करें। + + + + &Next + आगे (&N) + + + + &Back + वापस (&B) + + + + &Done + हो गया (&D) + + + + &Cancel + रद्द करें (&C) + + + Cancel setup? सेटअप रद्द करें? - + Cancel installation? इंस्टॉल रद्द करें? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. क्या आप वाकई वर्तमान सेटअप प्रक्रिया रद्द करना चाहते हैं? सेटअप प्रोग्राम बंद हो जाएगा व सभी बदलाव नष्ट। - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. क्या आप वाकई वर्तमान इंस्टॉल प्रक्रिया रद्द करना चाहते हैं? इंस्टॉलर बंद हो जाएगा व सभी बदलाव नष्ट। - - - - &Yes - हाँ (&Y) - - - - - &No - नहीं (&N) - - - - &Close - बंद करें (&C) - - - - Continue with setup? - सेटअप करना जारी रखें? - - - - 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> - %2 इंस्टॉल करने हेतु %1 इंस्टॉलर आपकी डिस्क में बदलाव करने वाला है।<br/><strong>आप इन बदलावों को पूर्ववत नहीं कर पाएंगे।</strong> - - - - &Install now - अभी इंस्टॉल करें (&I) - - - - Go &back - वापस जाएँ (&b) - - - - &Done - हो गया (&D) - - - - The installation is complete. Close the installer. - इंस्टॉल पूर्ण हुआ।अब इंस्टॉलर को बंद करें। - - - - Error - त्रुटि - - - - Installation Failed - इंस्टॉल विफल रहा - CalamaresPython::Helper - + Unknown exception type - अपवाद का प्रकार अज्ञात + अपवाद का प्रकार अज्ञात है - + unparseable Python error अप्राप्य पाइथन त्रुटि - + unparseable Python traceback अप्राप्य पाइथन ट्रेसबैक - + Unfetchable Python error. - पहुँच से बाहर पाइथन त्रुटि। - - - - CalamaresUtils - - - Install log posted to: -%1 - + अप्राप्य पाइथन त्रुटि। CalamaresWindow - - &Back - वापस (&B) - - - - &Next - आगे (&N) - - - - &Cancel - रद्द करें (&C) - - - + %1 Setup Program %1 सेटअप प्रोग्राम - + %1 Installer %1 इंस्टॉलर + + + ChangeFilesystemLabelJob - - Show debug information - डीबग जानकारी दिखाएँ + + Set filesystem label on %1. + %1 हेतु फाइल सिस्टम उपनाम सेट करें। + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + <strong>%2</strong> विभाजन हेतु फाइल सिस्टम उपनाम <strong>%1</strong> सेट करें। + + + + The installer failed to update partition table on disk '%1'. + इंस्टॉलर द्वारा डिस्क '%1' पर विभाजन तालिका अपडेट करना विफल। CheckerContainer - + Gathering system information... सिस्टम की जानकारी प्राप्त की जा रही है... @@ -499,180 +527,215 @@ The installer will quit and all changes will be lost. ChoicePage - + Form रूप - - After: - बाद में : - - - - Boot loader location: - बूट लोडर का स्थान : - - - + Select storage de&vice: डिवाइस चुनें (&v): - - - - + + + + Current: मौजूदा : - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + बाद में: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>मैनुअल विभाजन</strong><br/> स्वयं विभाजन बनाएँ या उनका आकार बदलें। + + + Reuse %1 as home partition for %2. %2 के होम विभाजन के लिए %1 को पुनः उपयोग करें। - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - <strong>छोटा करने हेतु विभाजन चुनें, फिर नीचे bar से उसका आकर सेट करें</strong> + <strong>छोटा करने के लिए विभाजन चुनें, फिर नीचे bar से उसका आकर सेट करें</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 को छोटा करके %2MiB किया जाएगा व %4 हेतु %3MiB का एक नया विभाजन बनेगा। - - <strong>Select a partition to install on</strong> - <strong>इंस्टॉल हेतु विभाजन चुनें</strong> + + Boot loader location: + बूट लोडर का स्थान: - + + <strong>Select a partition to install on</strong> + <strong>इंस्टॉल के लिए विभाजन चुनें</strong> + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. इस सिस्टम पर कहीं भी कोई EFI सिस्टम विभाजन नहीं मिला। कृपया वापस जाएँ व %1 को सेट करने के लिए मैनुअल रूप से विभाजन करें। - + The EFI system partition at %1 will be used for starting %2. %1 वाले EFI सिस्टम विभाजन का उपयोग %2 को शुरू करने के लिए किया जाएगा। - + EFI system partition: EFI सिस्टम विभाजन: - + 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. इस डिवाइस पर लगता है कि कोई ऑपरेटिंग सिस्टम नहीं है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>डिस्क का सारा डाटा हटाएँ</strong><br/>इससे चयनित डिवाइस पर मौजूद सारा डाटा <font color="red">हटा</font>हो जाएगा। - - 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. - इस डिवाइस पर %1 है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - - - - No Swap - कोई स्वैप नहीं - - - - Reuse Swap - स्वैप पुनः उपयोग करें - - - - Swap (no Hibernate) - स्वैप (हाइबरनेशन/सिस्टम सुप्त रहित) - - - - Swap (with Hibernate) - स्वैप (हाइबरनेशन/सिस्टम सुप्त सहित) - - - - Swap to file - स्वैप फाइल बनाएं - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>साथ में इंस्टॉल करें</strong><br/>इंस्टॉलर %1 के लिए स्थान बनाने हेतु एक विभाजन को छोटा कर देगा। - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>विभाजन को बदलें</strong><br/>एक विभाजन को %1 से बदलें। - + + 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. + इस डिवाइस पर %1 है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। + + + 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. इस डिवाइस पर पहले से एक ऑपरेटिंग सिस्टम है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। - + 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. इस डिवाइस पर एक से अधिक ऑपरेटिंग सिस्टम है। आप क्या करना चाहेंगे?<br/>आप डिवाइस में किसी भी बदलाव से पहले उसकी समीक्षा व पुष्टि कर सकेंगे। + + + 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/> + इस संचय उपकरण पर पहले से ऑपरेटिंग सिस्टम है, परंतु <strong>%1</strong> विभाजन तालिका अपेक्षित <strong>%2</strong> से भिन्न है।<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + इस संचय उपकरण के विभाजनों में से कोई एक विभाजन <strong>माउंट</strong> है। + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + यह संचय उपकरण एक <strong>निष्क्रिय RAID</strong> उपकरण का हिस्सा है। + + + + No Swap + कोई स्वैप नहीं + + + + Reuse Swap + स्वैप पुनः उपयोग करें + + + + Swap (no Hibernate) + स्वैप (हाइबरनेशन/सिस्टम सुप्त रहित) + + + + Swap (with Hibernate) + स्वैप (हाइबरनेशन/सिस्टम सुप्त सहित) + + + + Swap to file + स्वैप फाइल बनाएं + ClearMountsJob - + + Successfully unmounted %1. + %1 को माउंट से हटाना सफल। + + + + Successfully disabled swap %1. + %1 स्वैप निष्क्रिय करना सफल। + + + + Successfully cleared swap %1. + %1 स्वैप रिक्त करना सफल। + + + + Successfully closed mapper device %1. + प्रतिचित्रण उपकरण %1 बंद करना सफल। + + + + Successfully disabled volume group %1. + वॉल्यूम समूह %1 निष्क्रिय करना सफल। + + + Clear mounts for partitioning operations on %1 %1 पर विभाजन कार्य हेतु माउंट हटाएँ - + Clearing mounts for partitioning operations on %1. %1 पर विभाजन कार्य हेतु माउंट हटाएँ जा रहे हैं। - + Cleared all mounts for %1 - %1 हेतु सभी माउंट हटा दिए गए + %1 के लिए सभी माउंट हटा दिए गए ClearTempMountsJob - + Clear all temporary mounts. सभी अस्थायी माउंट हटाएँ। - + Clearing all temporary mounts. सभी अस्थायी माउंट हटाएँ जा रहे हैं। - - Cannot get list of temporary mounts. - अस्थाई माउंट की सूची नहीं मिली। - - - + Cleared all temporary mounts. सभी अस्थायी माउंट हटा दिए गए। @@ -680,18 +743,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. कमांड चलाई नहीं जा सकी। - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. होस्ट वातावरण में कमांड हेतु रुट पथ जानना आवश्यक है परन्तु कोई रूट माउंट पॉइंट परिभाषित नहीं किया गया है। - + The command needs to know the user's name, but no username is defined. कमांड हेतु उपयोक्ता का नाम आवश्यक है परन्तु कोई नाम परिभाषित नहीं है। @@ -699,100 +762,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - यह कंप्यूटर %1 को सेटअप करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/>सेटअप जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - यह कंप्यूटर %1 को इंस्टॉल करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/>इंस्टॉल जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - यह कंप्यूटर %1 को सेटअप करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/>सेटअप जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ को निष्क्रिय किया जा सकता हैं। - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - यह कंप्यूटर %1 को इंस्टॉल करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/>इंस्टॉल जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ को निष्क्रिय किया जा सकता हैं। - - - - This program will ask you some questions and set up %2 on your computer. - यह प्रोग्राम एक प्रश्नावली के आधार पर आपके कंप्यूटर पर %2 को सेट करेगा। - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1 हेतु Calamares सेटअप में आपका स्वागत है।</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>%1 सेटअप में आपका स्वागत है।</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 के लिए Calamares इंस्टॉलर में आपका स्वागत है।</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 इंस्टॉलर में आपका स्वागत है।</h1> - - - + Set keyboard model to %1.<br/> कुंजीपटल का मॉडल %1 सेट करें।<br/> - + Set keyboard layout to %1/%2. कुंजीपटल का अभिन्यास %1/%2 सेट करें। - + + Set timezone to %1/%2. + समय क्षेत्र %1%2 सेट करें। + + + The system language will be set to %1. सिस्टम भाषा %1 सेट की जाएगी। - + The numbers and dates locale will be set to %1. संख्या व दिनांक स्थानिकी %1 सेट की जाएगी। - - Set timezone to %1/%2.<br/> - समय क्षेत्र %1%2 पर सेट करें।<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + नेटवर्क इंस्टॉल। (निष्क्रिय : गलत विन्यास) - + Network Installation. (Disabled: Received invalid groups data) नेटवर्क इंस्टॉल (निष्क्रिय है : प्राप्त किया गया समूह डाटा अमान्य है) - - Network Installation. (Disabled: internal error) - + + Network Installation. (Disabled: Internal error) + नेटवर्क इंस्टॉल। (निष्क्रिय : आंतरिक त्रुटि) - + + Network Installation. (Disabled: No package list) + नेटवर्क इंस्टॉल। (निष्क्रिय : पैकेज सूची अनुपलब्ध) + + + + Package selection + पैकेज चयन + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) नेटवर्क इंस्टॉल। (निष्क्रिय है : पैकेज सूची प्राप्त करने में असमर्थ, अपना नेटवर्क कनेक्शन जाँचें) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + यह कंप्यूटर %1 सेटअप करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/>सेटअप जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + यह कंप्यूटर %1 इंस्टॉल करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/>इंस्टॉल जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + यह कंप्यूटर %1 सेटअप करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/>सेटअप जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ निष्क्रिय कर दी जाएँगी। + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + यह कंप्यूटर %1 इंस्टॉल करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/>इंस्टॉल जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ निष्क्रिय कर दी जाएँगी। + + + + This program will ask you some questions and set up %2 on your computer. + यह प्रोग्राम प्रश्नावली के माध्यम से आपके कंप्यूटर पर %2 को सेट करेगा। + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>%1 हेतु Calamares सेटअप में आपका स्वागत है</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>%1 सेटअप में आपका स्वागत है</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>%1 हेतु Calamares इंस्टॉलर में आपका स्वागत है</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 इंस्टॉलर में आपका स्वागत है</h1> + + + + Your username is too long. + उपयोक्ता नाम बहुत लंबा है। + + + + '%1' is not allowed as username. + उपयोक्ता नाम के रूप में '%1' का उपयोग अस्वीकार्य है। + + + + Your username must start with a lowercase letter or underscore. + उपयोक्ता नाम का आरंभ केवल लोअरकेस अक्षर या अंडरस्कोर(-) से ही करें। + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + केवल लोअरकेस अक्षर, अंक, अंडरस्कोर(_) व हाइफ़न(-) ही स्वीकार्य हैं। + + + + Your hostname is too short. + होस्ट नाम बहुत छोटा है। + + + + Your hostname is too long. + होस्ट नाम बहुत लंबा है। + + + + '%1' is not allowed as hostname. + होस्ट नाम के रूप में '%1' का उपयोग अस्वीकार्य है। + + + + Only letters, numbers, underscore and hyphen are allowed. + केवल अक्षर, अंक, अंडरस्कोर(_) व हाइफ़न(-) ही स्वीकार्य हैं। + + + + Your passwords do not match! + आपके कूटशब्द मेल नहीं खाते! + + + + OK! + ठीक है! + + + + Setup Failed + सेटअप विफल + + + + Installation Failed + इंस्टॉल विफल + + + + The setup of %1 did not complete successfully. + %1 का सेटअप सफलतापूर्वक पूर्ण नहीं हुआ। + + + + The installation of %1 did not complete successfully. + %1 का इंस्टॉल सफलतापूर्वक पूर्ण नहीं हुआ। + + + + Setup Complete + सेटअप पूर्ण + + + + Installation Complete + इंस्टॉल पूर्ण + + + + The setup of %1 is complete. + %1 का सेटअप पूर्ण हुआ। + + + + The installation of %1 is complete. + %1 का इंस्टॉल पूर्ण हुआ। + + + + Package Selection + पैकेज चयन + + + + Please pick a product from the list. The selected product will be installed. + सूची में से वस्तु विशेष का चयन करें। चयनित वस्तु इंस्टॉल कर दी जाएगी। + + + + Install option: <strong>%1</strong> + इंस्टॉल विकल्प : <strong>%1</strong> + + + + None + कोई नहीं + + + + Summary + सारांश + + + + This is an overview of what will happen once you start the setup procedure. + यह एक अवलोकन है कि सेटअप प्रक्रिया आरंभ होने के उपरांत क्या होगा। + + + + This is an overview of what will happen once you start the install procedure. + यह अवलोकन है कि इंस्टॉल शुरू होने के बाद क्या होगा। + ContextualProcessJob - + Contextual Processes Job प्रासंगिक प्रक्रिया कार्य @@ -800,100 +998,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition एक विभाजन बनाएँ - - MiB - MiB - - - - Partition &Type: - विभाजन का प्रकार (&T): - - - - &Primary - मुख्य (&P) - - - - E&xtended - विस्तृत (&x) - - - - Fi&le System: - फ़ाइल सिस्टम (&l): - - - - LVM LV name - LVM LV का नाम - - - - Flags: - फ्लैग : - - - - &Mount Point: - माउंट पॉइंट (&M): - - - + Si&ze: आकार (&z): - + + MiB + MiB + + + + Partition &Type: + विभाजन का प्रकार (&T): + + + + Primar&y + मुख्य (&y) + + + + E&xtended + विस्तृत (&x) + + + + Fi&le System: + फ़ाइल सिस्टम (&l): + + + + LVM LV name + LVM LV का नाम + + + + &Mount Point: + माउंट पॉइंट (&M): + + + + Flags: + फ्लैग : + + + + Label for the filesystem + फाइल सिस्टम हेतु उपनाम + + + + FS Label: + फाइल सिस्टम उपनाम : + + + En&crypt एन्क्रिप्ट (&c) - + Logical तार्किक - + Primary मुख्य - + GPT GPT - + Mountpoint already in use. Please select another one. माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चुनें। + + + Mountpoint must start with a <tt>/</tt>. + माउंट पॉइंट का <tt>/</tt> से आरंभ होना आवश्यक है। + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + %3 (%2) पर %4 प्रविष्टि युक्त %1 एमबी का नया विभाजन बनाएँ। + + + + Create new %1MiB partition on %3 (%2). + %3 (%2) पर %1 एमबी का नया विभाजन बनाएँ। + + + Create new %2MiB partition on %4 (%3) with file system %1. फ़ाइल सिस्टम %1 के साथ %4 (%3) पर नया %2MiB का विभाजन बनाएँ। - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + <strong>%3</strong> (%2) पर <em>%4</em> प्रविष्टि युक्त <strong>%1 एमबी</strong> का नया विभाजन बनाएँ। + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + <strong>%3</strong> (%2) पर <strong>%1 एमबी</strong> का नया विभाजन बनाएँ। + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. फ़ाइल सिस्टम <strong>%1</strong> के साथ <strong>%4</strong> (%3) पर नया <strong>%2MiB</strong> का विभाजन बनाएँ। - + + Creating new %1 partition on %2. %2 पर नया %1 विभाजन बनाया जा रहा है। - + The installer failed to create partition on disk '%1'. इंस्टॉलर डिस्क '%1' पर विभाजन बनाने में विफल रहा। @@ -901,27 +1135,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table विभाजन तालिका बनाएँ - + Creating a new partition table will delete all existing data on the disk. नई विभाजन तालिका बनाने से डिस्क पर मौजूद सारा डाटा हट जाएगा। - + What kind of partition table do you want to create? आप किस तरह की विभाजन तालिका बनाना चाहते हैं? - + Master Boot Record (MBR) मास्टर बूट रिकॉर्ड (MBR) - + GUID Partition Table (GPT) GUID विभाजन तालिका (GPT) @@ -929,22 +1163,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. %2 पर नई %1 विभाजन तालिका बनाएँ। - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) पर नई <strong>%1</strong> विभाजन तालिका बनाएँ। - + Creating new %1 partition table on %2. %2 पर नई %1 विभाजन तालिका बनाई जा रही है। - + The installer failed to create a partition table on %1. इंस्टॉलर डिस्क '%1' पर विभाजन तालिका बनाने में विफल रहा। @@ -952,68 +1186,64 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 %1 उपयोक्ता बनाएँ - + Create user <strong>%1</strong>. <strong>%1</strong> उपयोक्ता बनाएँ। - - Creating user %1. - %1 उपयोक्ता बनाया जा रहा है। + + Preserving home directory + होम डायरेक्टरी अनुरक्षण - - Sudoers dir is not writable. - Sudoers डायरेक्टरी राइट करने योग्य नहीं है। + + + Creating user %1 + उपयोक्ता %1 बनाना जारी - - Cannot create sudoers file for writing. - राइट हेतु sudoers फ़ाइल नहीं बन सकती। + + Configuring user %1 + उपयोक्ता %1 विन्यास जारी - - Cannot chmod sudoers file. - sudoers फ़ाइल chmod नहीं की जा सकती। - - - - Cannot open groups file for reading. - रीड हेतु groups फ़ाइल खोली नहीं जा सकती। + + Setting file permissions + फाइल अनुमतियाँ सेट करना जारी CreateVolumeGroupDialog - + Create Volume Group - वॉल्यूम समूह बनाएँ + वॉल्यूम समूह बनाएं CreateVolumeGroupJob - + Create new volume group named %1. %1 नामक नया वॉल्यूम समूह बनाएं। - + Create new volume group named <strong>%1</strong>. <strong>%1</strong> नामक नया वॉल्यूम समूह बनाएं। - + Creating new volume group named %1. %1 नामक नया वॉल्यूम समूह बनाया जा रहा है। - + The installer failed to create a volume group named '%1'. इंस्टालर '%1' नामक वॉल्यूम समूह को बनाने में विफल रहा। @@ -1021,18 +1251,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. %1 नामक वॉल्यूम समूह को निष्क्रिय करें। - + Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> नामक वॉल्यूम समूह को निष्क्रिय करें। - + The installer failed to deactivate a volume group named %1. इंस्टॉलर %1 नामक वॉल्यूम समूह को निष्क्रिय करने में विफल रहा। @@ -1040,22 +1270,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. विभाजन %1 हटाएँ। - + Delete partition <strong>%1</strong>. विभाजन <strong>%1</strong> हटाएँ। - + Deleting partition %1. %1 विभाजन हटाया जा रहा है। - + The installer failed to delete partition %1. इंस्टॉलर विभाजन %1 को हटाने में विफल रहा । @@ -1063,46 +1293,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - चयनित डिवाइस पर <strong>विभाजन तालिका</strong> का प्रकार।<br><br>विभाजन तालिका का प्रकार केवल विभाजन तालिका को हटा दुबारा बनाकर ही किया जा सकता है, इससे डिस्क पर मौजूद सभी डाटा नहीं नष्ट हो जाएगा।<br>अगर आप कुछ अलग नहीं चुनते तो यह इंस्टॉलर वर्तमान विभाजन तालिका उपयोग करेगा।<br>अगर सुनिश्चित नहीं है तो नए व आधुनिक सिस्टम के लिए GPT चुनें। - - - + This device has a <strong>%1</strong> partition table. इस डिवाइस में <strong>%1</strong> विभाजन तालिका है। - + 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. यह एक <strong>लूप</strong> डिवाइस है।<br><br>इस छद्म-डिवाइस में कोई विभाजन तालिका नहीं है जो फ़ाइल को ब्लॉक डिवाइस के रूप में उपयोग कर सकें। इस तरह के सेटअप में केवल एक फ़ाइल सिस्टम होता है। - + 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. इंस्टॉलर को चयनित डिवाइस पर <strong>कोई विभाजन तालिका नहीं मिली</strong>।<br><br> डिवाइस पर विभाजन तालिका नहीं है या फिर जो है वो ख़राब है या उसका प्रकार अज्ञात है। <br>इंस्टॉलर एक नई विभाजन तालिका, स्वतः व मैनुअल दोनों तरह से बना सकता है। - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong>वातावरण से शुरू होने वाले आधुनिक सिस्टम के लिए यही विभाजन तालिका सुझाई जाती है। - + <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. <br><br>यह विभाजन तालिका केवल <strong>BIOS</strong>वातावरण से शुरू होने वाले पुराने सिस्टम के लिए ही सुझाई जाती है। बाकी सब के लिए GPT ही सबसे उपयुक्त है।<br><br><strong>चेतावनी:</strong> MBR विभाजन तालिका MS-DOS के समय की एक पुरानी तकनीक है।<br> इसमें केवल 4 <em>मुख्य</em> विभाजन बनाये जा सकते हैं, इनमें से एक <em>विस्तृत</em> हो सकता है व इसके अंदर भी कई <em>तार्किक</em> विभाजन हो सकते हैं। + + + 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. + चयनित डिवाइस पर <strong>विभाजन तालिका</strong> का प्रकार।<br><br>विभाजन तालिका का प्रकार केवल विभाजन तालिका को हटा दुबारा बनाकर ही किया जा सकता है, इससे डिस्क पर मौजूद सभी डाटा नहीं नष्ट हो जाएगा।<br>अगर आप कुछ अलग नहीं चुनते तो यह इंस्टॉलर वर्तमान विभाजन तालिका उपयोग करेगा।<br>अगर सुनिश्चित नहीं है तो नए व आधुनिक सिस्टम के लिए GPT चुनें। + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1111,17 +1341,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Dracut हेतु LUKS विन्यास %1 पर राइट करना - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut हेतु LUKS विन्यास %1 पर राइट करना छोड़ें : "/" विभाजन एन्क्रिप्टेड नहीं है - + Failed to open %1 %1 खोलने में विफल @@ -1129,7 +1359,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job डमी सी++ कार्य @@ -1137,123 +1367,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition मौजूदा विभाजन को संपादित करें - - Content: - सामग्री : + + Con&tent: + सामग्री (&t): - + &Keep रखें (&K) - + Format फॉर्मेट करें - + Warning: Formatting the partition will erase all existing data. चेतावनी: विभाजन फॉर्मेट करने से सारा मौजूदा डाटा मिट जायेगा। - + &Mount Point: माउंट पॉइंट (&M): - + Si&ze: आकार (&z): - + MiB MiB - + Fi&le System: फ़ाइल सिस्टम (&l): - + Flags: फ्लैग : - - Mountpoint already in use. Please select another one. - माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चुनें। + + Label for the filesystem + फाइल सिस्टम हेतु उपनाम + + + + FS Label: + फाइल सिस्टम उपनाम : EncryptWidget - + Form रूप - + En&crypt system सिस्टम एन्क्रिप्ट करें (&E) - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + आपके सिस्टम पर एन्क्रिप्शन हेतु समर्थन सम्पूर्ण सिस्टम एन्क्रिप्ट करने के लिए पर्याप्त नहीं है। इच्छा हो तो एन्क्रिप्शन सक्रिय करें परन्तु इससे कार्यक्षमता प्रभावित हो सकती है। + + + Passphrase कूटशब्द - + Confirm passphrase कूटशब्द की पुष्टि करें - + + Please enter the same passphrase in both boxes. कृपया दोनों स्थानों में समान कूटशब्द दर्ज करें। + + ErrorDialog + + + Details: + विवरण : + + + + Would you like to paste the install log to the web? + क्या आप इंस्टॉल प्रक्रिया की लॉग फ़ाइल इंटरनेट पर पेस्ट करना चाहेंगे ? + + FillGlobalStorageJob - + Set partition information विभाजन संबंधी जानकारी सेट करें - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <strong>नवीन</strong> सिस्टम विभाजन %2 पर %1 को <em>%3</em> विशेषताओं सहित इंस्टॉल करें। + + + Install %1 on <strong>new</strong> %2 system partition. <strong>नए</strong> %2 सिस्टम विभाजन पर %1 इंस्टॉल करें। - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - <strong>नया</strong> %2 विभाजन माउंट पॉइंट <strong>%1</strong> के साथ सेट करें। + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>नवीन</strong> %2 विभाजन को माउंट पॉइंट <strong>%1</strong> व <em>%3</em>विशेषताओं सहित सेट करें। - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + <strong>नवीन</strong> %2 विभाजन को माउंट पॉइंट <strong>%1</strong>%3 सहित सेट करें। + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + %3 सिस्टम विभाजन <strong>%1</strong> %2 को <em>%4</em> विशेषताओं सहित इंस्टॉल करें। + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + %3 विभाजन <strong>%1</strong> को माउंट पॉइंट <strong>%2</strong> व <em>%4</em>विशेषताओं सहित सेट करें। + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + %3 विभाजन <strong>%1</strong> माउंट पॉइंट <strong>%2</strong>%4 सहित सेट करें। + + + Install %2 on %3 system partition <strong>%1</strong>. %3 सिस्टम विभाजन <strong>%1</strong> पर %2 इंस्टॉल करें। - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - %3 विभाजन <strong>%1</strong> माउंट पॉइंट <strong>%2</strong> के साथ सेट करें। - - - + Install boot loader on <strong>%1</strong>. बूट लोडर <strong>%1</strong> पर इंस्टॉल करें। - + Setting up mount points. माउंट पॉइंट सेट किए जा रहे हैं। @@ -1261,93 +1535,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form रूप - + &Restart now अभी पुनः आरंभ करें (&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>सब हो गया।</h1><br/>आपके कंप्यूटर पर %1 को सेटअप कर दिया गया है।<br/>अब आप अपने नए सिस्टम का उपयोग कर सकते है। - + <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> <html><head/><body><p>यह विकल्प चयनित होने पर आपका सिस्टम तुरंत पुनः आरंभ हो जाएगा जब आप <span style="font-style:italic;">हो गया</span>पर क्लिक करेंगे या सेटअप प्रोग्राम को बंद करेंगे।</p></body></html> - + <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. <h1>सब हो गया।</h1><br/>आपके कंप्यूटर पर %1 इंस्टॉल हो चुका है।<br/>अब आप आपने नए सिस्टम को पुनः आरंभ कर सकते है, या फिर %2 लाइव वातावरण उपयोग करना जारी रखें। - + <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> <html><head/><body><p>यह विकल्प चयनित होने पर आपका सिस्टम तुरंत पुनः आरंभ हो जाएगा जब आप <span style="font-style:italic;">हो गया</span>पर क्लिक करेंगे या इंस्टॉलर बंद करेंगे।</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>सेटअप विफल रहा</h1><br/>%1 आपके कंप्यूटर पर सेटअप नहीं हुआ।<br/>त्रुटि संदेश : %2। - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>इंस्टॉल विफल रहा</h1><br/>%1 आपके कंप्यूटर पर इंस्टॉल नहीं हुआ।<br/>त्रुटि संदेश : %2। + + FinishedQmlViewStep + + + Finish + समाप्त + + FinishedViewStep - + Finish - समाप्त करें - - - - Setup Complete - सेटअप पूर्ण हुआ - - - - Installation Complete - इंस्टॉल पूर्ण हुआ - - - - The setup of %1 is complete. - %1 का सेटअप पूर्ण हुआ। - - - - The installation of %1 is complete. - %1 का इंस्टॉल पूर्ण हुआ। + समाप्त FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. विभाजन %1 (फ़ाइल सिस्टम: %2, आकार: %3 MiB) को %4 पर फॉर्मेट करें। - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. फ़ाइल सिस्टम <strong>%2</strong> के साथ <strong>%3MiB</strong> के विभाजन <strong>%1</strong> को फॉर्मेट करें। - + Formatting partition %1 with file system %2. फ़ाइल सिस्टम %2 के साथ विभाजन %1 को फॉर्मेट किया जा रहा है। - + The installer failed to format partition %1 on disk '%2'. इंस्टॉलर डिस्क '%2' पर विभाजन %1 को फॉर्मेट करने में विफल रहा। @@ -1355,72 +1617,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space कम-से-कम %1 GiB स्पेस ड्राइव पर उपलब्ध हो - + There is not enough drive space. At least %1 GiB is required. ड्राइव में पर्याप्त स्पेस नहीं है। कम-से-कम %1 GiB होना आवश्यक है। - + has at least %1 GiB working memory कम-से-कम %1 GiB मेमोरी उपलब्ध हो - + The system does not have enough working memory. At least %1 GiB is required. सिस्टम में पर्याप्त मेमोरी नहीं है। कम-से-कम %1 GiB होनी आवश्यक है। - + is plugged in to a power source पॉवर के स्रोत से कनेक्ट है - + The system is not plugged in to a power source. सिस्टम पॉवर के स्रोत से कनेक्ट नहीं है। - + is connected to the Internet इंटरनेट से कनेक्ट है - + The system is not connected to the Internet. सिस्टम इंटरनेट से कनेक्ट नहीं है। - + is running the installer as an administrator (root) - + इंस्टॉलर को प्रबंधक(रुट) के अंतर्गत चला रहा है - + The setup program is not running with administrator rights. सेटअप प्रोग्राम के पास प्रबंधक अधिकार नहीं है। - + The installer is not running with administrator rights. इंस्टॉलर के पास प्रबंधक अधिकार नहीं है। - + has a screen large enough to show the whole installer - + स्क्रीन का माप इंस्टॉलर को पूर्णतया प्रदर्शित करने में सक्षम हो - + The screen is too small to display the setup program. सेटअप प्रोग्राम प्रदर्शित करने हेतु स्क्रीन काफ़ी छोटी है। - + The screen is too small to display the installer. इंस्टॉलर प्रदर्शित करने हेतु स्क्रीन काफ़ी छोटी है। @@ -1428,7 +1690,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. मशीन की जानकारी एकत्रित की जा रही है। @@ -1436,25 +1698,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier OEM (मूल उपकरण निर्माता) बैच पहचानकर्ता - + Could not create directories <code>%1</code>. <code>%1</code> डायरेक्टरी बनाई नहीं जा सकीं। - + Could not open file <code>%1</code>. <code>%1</code> फाइल खोली नहीं जा सकीं। - + Could not write to file <code>%1</code>. <code>%1</code> फाइल पर राइट नहीं किया जा सका। @@ -1462,7 +1724,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. mkinitcpio के साथ initramfs बनाना। @@ -1470,7 +1732,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. initramfs बनाना। @@ -1478,17 +1740,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole इंस्टॉल नहीं है - + Please install KDE Konsole and try again! कृपया केडीई Konsole इंस्टॉल कर, पुनः प्रयास करें। - + Executing script: &nbsp;<code>%1</code> निष्पादित स्क्रिप्ट : &nbsp;<code>%1</code> @@ -1496,28 +1758,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script स्क्रिप्ट - - KeyboardPage - - - Set keyboard model to %1.<br/> - कुंजीपटल का मॉडल %1 सेट करें।<br/> - - - - Set keyboard layout to %1/%2. - कुंजीपटल का अभिन्यास %1/%2 सेट करें। - - KeyboardQmlViewStep - + Keyboard कुंजीपटल @@ -1525,7 +1774,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard कुंजीपटल @@ -1533,73 +1782,96 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting सिस्टम स्थानिकी सेटिंग्स - + 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>. सिस्टम स्थानिकी सेटिंग कमांड लाइन के कुछ उपयोक्ता अंतरफलक तत्वों की भाषा व अक्षर सेट पर असर डालती है।<br/>मौजूदा सेटिंग है <strong>%1</strong>। - + &Cancel रद्द करें (&C) - + &OK ठीक है (&O) + + LOSHJob + + + Configuring encrypted swap. + एन्क्रिप्टेड स्वैप का विन्यास जारी। + + + + No target system available. + लक्षित सिस्टम उपलब्ध नहीं है। + + + + No rootMountPoint is set. + rootMountPoint निर्धारित नहीं है। + + + + No configFilePath is set. + configFilePath निर्धारित नहीं है। + + LicensePage - + Form रूप - + <h1>License Agreement</h1> - + <h1>लाइसेंस अनुबंध</h1> - + I accept the terms and conditions above. मैं उपरोक्त नियम व शर्तें स्वीकार करता हूँ। - + Please review the End User License Agreements (EULAs). - + कृपया लक्षित उपयोक्ता लाइसेंस अनुबंधों (EULAs) की समीक्षा करें। - + This setup procedure will install proprietary software that is subject to licensing terms. - + यह सेटअप प्रक्रिया लाइसेंस शर्तों के अधीन अमुक्त सॉफ्टवेयर को इंस्टॉल करेगी। - + If you do not agree with the terms, the setup procedure cannot continue. - + यदि आप शर्तों से असहमत है, तो सेटअप प्रक्रिया जारी नहीं रखी जा सकती। - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + यह सेटअप प्रक्रिया अतिरिक्त सुविधाएँ प्रदान करने व उपयोक्ता अनुभव में वृद्धि हेतु लाइसेंस शर्तों के अधीन अमुक्त सॉफ्टवेयर को इंस्टॉल कर सकती है। - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + यदि आप शर्तों से असहमत है, तो अमुक्त सॉफ्टवेयर इंस्टाल नहीं किया जाएगा व उनके मुक्त विकल्प उपयोग किए जाएँगे। LicenseViewStep - + License लाइसेंस @@ -1607,109 +1879,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + यूआरएल : %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ड्राइवर</strong><br/>%2 द्वारा - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 ग्राफ़िक्स ड्राइवर</strong><br/><font color="Grey">%2 द्वारा</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 ब्राउज़र प्लगिन</strong><br/><font color="Grey">%2 द्वारा</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 कोडेक</strong><br/><font color="Grey">%2 द्वारा</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 पैकेज</strong><br/><font color="Grey">%2 द्वारा</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 द्वारा</font> - + File: %1 - + फ़ाइल : %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text लाइसेंस लेख छिपाएँ + + + Show the license text + लाइसेंस लेख दिखाएँ + + + + Open license agreement in browser. + लाइसेंस अनुबंध को ब्राउज़र में खोलें। + LocalePage - - The system language will be set to %1. - सिस्टम भाषा %1 सेट की जाएगी। - - - - The numbers and dates locale will be set to %1. - संख्या व दिनांक स्थानिकी %1 सेट की जाएगी। - - - + Region: क्षेत्र : - + Zone: ज़ोन : - - + + &Change... बदलें (&C)... - - - Set timezone to %1/%2.<br/> - समय क्षेत्र %1%2 पर सेट करें।<br/> - LocaleQmlViewStep - + Location स्थान + + LocaleTests + + + Quit + बंद करें + + LocaleViewStep - + Location स्थान @@ -1717,178 +1982,194 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - LUKS कुंजी फाइल विन्यस्त करना। + LUKS कुंजी फ़ाइल विन्यस्त करना। - - + + No partitions are defined. - कोई विभाजन परिभाषित नहीं हैं। + कोई विभाजन परिभाषित नहीं है। - - - + + + Encrypted rootfs setup error - एन्क्रिप्टेड rootfs सेटअप में त्रुटि + एन्क्रिप्टेड रुट फ़ाइल सिस्टम सेटअप करने में त्रुटि - + Root partition %1 is LUKS but no passphrase has been set. - रूट विभाजन %1 LUKS है, लेकिन कोई कूटशब्द सेट नहीं किया गया है। + रुट विभाजन %1, LUKS है परंतु कोई कूटशब्द सेट नहीं है। - + Could not create LUKS key file for root partition %1. - रूट विभाजन %1 हेतु LUKS कुंजी फाइल बनाने में विफल। + रुट विभाजन %1 हेतु LUKS कुंजी फ़ाइल बनाई नहीं जा सकी। - + Could not configure LUKS key file on partition %1. - + विभाजन %1 हेतु LUKS कुंजी फ़ाइल विन्यस्त नहीं हो सकी। MachineIdJob - + Generate machine-id. - मशीन-आईडी उत्पन्न करना। + मशीन-आईडी उत्पन्न करें। - + Configuration Error विन्यास त्रुटि - + No root mount point is set for MachineId. - + मशीन-आईडी हेतु कोई रुट माउंट पॉइंट सेट नहीं है। + + + + Map + + + Timezone: %1 + समय क्षेत्र : %1 + + + + 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. + कृपया मानचित्र पर अपना भौगोलिक स्थान चुनें ताकि इंस्टॉलर स्थानिकी + व समयक्षेत्र सेटिंग्स संबंधी सुझाव दे सके। माउस क्लिक द्वारा ड्रैग कर मानचित्र में खोजें + व नक़्शे का आकार परिवर्तन +/- बटन या माउस स्क्रॉल द्वारा करें। NetInstallViewStep - - + Package selection पैकेज चयन - + Office software - + ऑफिस सॉफ्टवेयर + + + + Office package + ऑफिस पैकेज + + + + Browser software + ब्राउज़र सॉफ्टवेयर + + + + Browser package + ब्राउज़र पैकेज + + + + Web browser + वेब ब्राउज़र + + + + Kernel + कर्नेल + + + + Services + सेवाएँ + + + + Login + लॉगिन + + + + Desktop + डेस्कटॉप + + + + Applications + अनुप्रयोग + + + + Communication + संचार + + + + Development + सॉफ्टवेयर विकास + + + + Office + ऑफिस + + + + Multimedia + मल्टीमीडिया + + + + Internet + इंटरनेट - Office package - + Theming + थीम - Browser software - + Gaming + खेल - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + साधन NotesQmlViewStep - + Notes - + नोट्स OEMPage - + Ba&tch: बैच (&t) : - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>यहां एक बैच-पहचानकर्ता दर्ज करें। इसे लक्षित सिस्टम में संचित किया जाएगा।</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM (मूल उपकरण निर्माता) विन्यास सेटिंग्स</h1><p>लक्षित सिस्टम को विन्यस्त करते समय Calamares OEM (मूल उपकरण निर्माता) सेटिंग्स का उपयोग करेगा।</p></body></html> @@ -1896,301 +2177,366 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration OEM (मूल उपकरण निर्माता) विन्यास सेटिंग्स - + Set the OEM Batch Identifier to <code>%1</code>. OEM (मूल उपकरण निर्माता) बैच पहचानकर्ता को <code>%1</code>पर सेट करें। + + Offline + + + Select your preferred Region, or use the default settings. + अपना इच्छित क्षेत्र चुनें या फिर डिफ़ॉल्ट सेटिंग्स उपयोग करें। + + + + + + Timezone: %1 + समय क्षेत्र : %1 + + + + Select your preferred Zone within your Region. + इच्छित क्षेत्र में भूभाग चुनें। + + + + Zones + भूभाग + + + + You can fine-tune Language and Locale settings below. + भाषा व स्थानिकी हेतु निम्नलिखित सेटिंग्स उपयोग करें। + + PWQ - + Password is too short - कूटशब्द काफ़ी छोटा है + कूटशब्द बहुत छोटा है - + Password is too long - कूटशब्द काफ़ी लंबा है + कूटशब्द बहुत लंबा है - + Password is too weak - कूटशब्द काफ़ी कमज़ोर है + कूटशब्द बहुत कमज़ोर है - + Memory allocation error when setting '%1' '%1' सेट करते समय मेमोरी आवंटन त्रुटि - + Memory allocation error मेमोरी आवंटन त्रुटि - + The password is the same as the old one यह कूटशब्द पुराने वाला ही है - + The password is a palindrome कूटशब्द एक विलोमपद है - + The password differs with case changes only इसमें और पिछले कूटशब्द में केवल lower/upper case का फर्क है - + The password is too similar to the old one यह कूटशब्द पुराने वाले जैसा ही है - + The password contains the user name in some form इस कूटशब्द में किसी रूप में उपयोक्ता नाम है - + The password contains words from the real name of the user in some form इस कूटशब्द में किसी रूप में उपयोक्ता के असली नाम के शब्द शामिल है - + The password contains forbidden words in some form इस कूटशब्द में किसी रूप में वर्जित शब्द है - - The password contains less than %1 digits - इस कूटशब्द में %1 से कम अंक हैं - - - + The password contains too few digits इस कूटशब्द में काफ़ी कम अंक हैं - - The password contains less than %1 uppercase letters - इस कूटशब्द में %1 से कम uppercase अक्षर हैं - - - + The password contains too few uppercase letters इस कूटशब्द में काफ़ी कम uppercase अक्षर हैं - - - The password contains less than %1 lowercase letters - इस कूटशब्द में %1 से कम lowercase अक्षर हैं + + + The password contains fewer than %n lowercase letters + + कूटशब्द में %n से कम लोअरकेस अक्षर हैं + कूटशब्द में %n से कम लोअरकेस अक्षर हैं + - + The password contains too few lowercase letters इस कूटशब्द में काफ़ी कम lowercase अक्षर हैं - - The password contains less than %1 non-alphanumeric characters - इस कूटशब्द में %1 से कम ऐसे अक्षर हैं जो अक्षरांक नहीं हैं - - - + The password contains too few non-alphanumeric characters इस कूटशब्द में काफ़ी कम अक्षरांक हैं - - The password is shorter than %1 characters - कूटशब्द %1 अक्षरों से छोटा है - - - + The password is too short - कूटशब्द काफ़ी छोटा है + कूटशब्द बहुत छोटा है - - The password is just rotated old one - यह कूटशब्द पुराने वाला ही है, बस घुमा रखा है - - - - The password contains less than %1 character classes - इस कूटशब्द में %1 से कम अक्षर classes हैं - - - + The password does not contain enough character classes इस कूटशब्द में नाकाफ़ी अक्षर classes हैं - - The password contains more than %1 same characters consecutively - कूटशब्द में %1 से अधिक समान अक्षर लगातार हैं - - - + The password contains too many same characters consecutively कूटशब्द में काफ़ी ज्यादा समान अक्षर लगातार हैं - - The password contains more than %1 characters of the same class consecutively - कूटशब्द में %1 से अधिक समान अक्षर classes लगातार हैं - - - + The password contains too many characters of the same class consecutively कूटशब्द में काफ़ी ज्यादा एक ही class के अक्षर लगातार हैं - - - The password contains monotonic sequence longer than %1 characters - कूटशब्द में %1 अक्षरों से लंबा monotonic अनुक्रम है + + + The password contains fewer than %n digits + + कूटशब्द में %n से कम अंक हैं + कूटशब्द में %n से कम अंक हैं + + + + + The password contains fewer than %n uppercase letters + + कूटशब्द में %n से कम अपरकेस अक्षर हैं + कूटशब्द में %n से कम अपरकेस अक्षर हैं + + + + + The password contains fewer than %n non-alphanumeric characters + + कूटशब्द में %n से कम ऐसे अक्षर हैं जो अक्षरांक नहीं हैं + कूटशब्द में %n से कम ऐसे अक्षर हैं जो अक्षरांक नहीं हैं + + + + + The password is shorter than %n characters + + कूटशब्द %n अक्षरों से लघु है + कूटशब्द %n अक्षरों से लघु है + - + + The password is a rotated version of the previous one + यह पूर्व कूटशब्द का क्रम विपरीत कर निर्मित है + + + + The password contains fewer than %n character classes + + कूटशब्द में %n से कम अक्षर वर्ग हैं + कूटशब्द में %n से कम अक्षर वर्ग हैं + + + + + The password contains more than %n same characters consecutively + + कूटशब्द में %n से अधिक समान अक्षर निरंतर प्रयुक्त हैं + कूटशब्द में %n से अधिक समान अक्षर निरंतर प्रयुक्त हैं + + + + + The password contains more than %n characters of the same class consecutively + + कूटशब्द में %n से अधिक समान अक्षर वर्ग निरंतर प्रयुक्त हैं + कूटशब्द में %n से अधिक समान अक्षर वर्ग निरंतर प्रयुक्त हैं + + + + + The password contains monotonic sequence longer than %n characters + + कूटशब्द में %n अक्षरों से दीर्घ समरूपी श्रृंखला है + कूटशब्द में %n अक्षरों से दीर्घ समरूपी श्रृंखला है + + + + The password contains too long of a monotonic character sequence कूटशब्द में काफ़ी बड़ा monotonic अनुक्रम है - + No password supplied कोई कूटशब्द नहीं दिया गया - + Cannot obtain random numbers from the RNG device RNG डिवाइस से यादृच्छिक अंक नहीं मिल सके - + Password generation failed - required entropy too low for settings - कूटशब्द बनाना विफल रहा - सेटिंग्स के लिए आवश्यक एन्ट्रापी काफ़ी कम है + कूटशब्द बनाना विफल रहा - सेटिंग्स के लिए आवश्यक entropy बहुत कम है - + The password fails the dictionary check - %1 कूटशब्द शब्दकोश की जाँच में विफल रहा - %1 - + The password fails the dictionary check कूटशब्द शब्दकोश की जाँच में विफल रहा - + Unknown setting - %1 अज्ञात सेटिंग- %1 - + Unknown setting अज्ञात सेटिंग - + Bad integer value of setting - %1 सेटिंग का गलत पूर्णांक मान - %1 - + Bad integer value गलत पूर्णांक मान - + Setting %1 is not of integer type सेटिंग %1 पूर्णांक नहीं है - + Setting is not of integer type सेटिंग पूर्णांक नहीं है - + Setting %1 is not of string type सेटिंग %1 स्ट्रिंग नहीं है - + Setting is not of string type सेटिंग स्ट्रिंग नहीं है - + Opening the configuration file failed विन्यास फ़ाइल खोलने में विफल - + The configuration file is malformed विन्यास फाइल ख़राब है - + Fatal failure गंभीर विफलता - + Unknown error अज्ञात त्रुटि - + Password is empty - पासवर्ड खाली है + कूटशब्द रिक्त है PackageChooserPage - + Form रूप - + Product Name - उत्पाद का नाम​ + वस्तु का नाम - + TextLabel TextLabel - + Long Product Description - लंबा उत्पाद विवरण + वस्तु का विस्तृत विवरण - + Package Selection पैकेज चयन - + Please pick a product from the list. The selected product will be installed. - कृप्या सूची से उत्पाद का चुनाव करें। चयनित उत्पाद इंस्टॉल किया जायेगा। + सूची में से वस्तु विशेष का चयन करें। चयनित वस्तु इंस्टॉल कर दी जाएगी। + + + + PackageChooserQmlViewStep + + + Packages + पैकेज PackageChooserViewStep - + Packages पैकेज @@ -2198,12 +2544,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name नाम - + Description विवरण @@ -2211,17 +2557,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form रूप - + Keyboard Model: कुंजीपटल का मॉडल - + Type here to test your keyboard अपना कुंजीपटल जाँचने के लिए यहां टाइप करें @@ -2229,96 +2575,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form रूप - + What is your name? आपका नाम क्या है? - + + Your Full Name + आपके पूरा नाम + + + What name do you want to use to log in? लॉग इन के लिए आप किस नाम का उपयोग करना चाहते हैं? - - Choose a password to keep your account safe. - अपना अकाउंट सुरक्षित रखने हेतु कूटशब्द चुनें। - - - - - <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> - <small>एक ही कूटशब्द दो बार दर्ज़ करें, ताकि उसे टाइप त्रुटि के लिए जांचा जा सके। एक उचित कूटशब्द में अक्षर, अंक व विराम चिन्हों का मेल होता है, उसमें कम-से-कम आठ अक्षर होने चाहिए, और उसे नियमित अंतराल पर बदलते रहना चाहिए।</small> - - - - What is the name of this computer? - इस कंप्यूटर का नाम ? - - - - Your Full Name - आपका पूरा नाम​ - - - + login लॉगिन - + + What is the name of this computer? + इस कंप्यूटर का नाम ? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>यदि आपका कंप्यूटर किसी नेटवर्क पर दृश्यमान होता है, तो यह नाम उपयोग किया जाएगा।</small> - + Computer Name - कंप्यूटर का नाम​ + कंप्यूटर का नाम - - + + Choose a password to keep your account safe. + अपना अकाउंट सुरक्षित रखने के लिए पासवर्ड चुनें । + + + + + <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> + <small>एक ही कूटशब्द दो बार दर्ज़ करें, ताकि उसे टाइप त्रुटि के लिए जांचा जा सके । एक अच्छे कूटशब्द में अक्षर, अंक व विराम चिन्हों का मेल होता है, उसमें कम-से-कम आठ अक्षर होने चाहिए, और उसे नियमित अंतराल पर बदलते रहना चाहिए।</small> + + + + Password कूटशब्द - - + + Repeat Password - कूटशब्द दोबारा दर्ज करें + कूटशब्द पुनः दर्ज करें - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - डब्बे को चिह्नित करने पर पासवर्ड की मज़बूती की जांच होगी ओर आप कमज़ोर पासवर्ड उपयोग नही कर पाएँगे। + यह बॉक्स टिक करने के परिणाम स्वरुप कूटशब्द-क्षमता की जाँच होगी व आप कमज़ोर कूटशब्द उपयोग नहीं कर पाएंगे। - + Require strong passwords. - मज़बूत पासवर्डस की आवश्यकता। + मज़बूत कूटशब्द आवश्यक हैं। - + Log in automatically without asking for the password. - कूटशब्द पूछे बिना स्वतः लॉग इन करें। + कूटशब्द बिना पूछे ही स्वतः लॉग इन करें। - + Use the same password for the administrator account. प्रबंधक अकाउंट के लिए भी यही कूटशब्द उपयोग करें। - + Choose a password for the administrator account. - प्रबंधक अकाउंट हेतु कूटशब्द चुनें। + प्रबंधक अकाउंट के लिए कूटशब्द चुनें। - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>समान कूटशब्द दो बार दर्ज करें, ताकि जाँच की जा सके कि कहीं टाइपिंग त्रुटि तो नहीं है।</small> @@ -2326,42 +2672,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root रुट - + Home होम - + Boot बूट - + EFI system EFI सिस्टम - + Swap स्वैप - + New partition for %1 %1 के लिए नया विभाजन - + New partition नया विभाजन - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2716,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - रिक्त स्पेस + खाली स्पेस - - + + New partition नया विभाजन - + Name नाम - + File System फ़ाइल सिस्टम - + + File System Label + फाइल सिस्टम उपनाम + + + Mount Point माउंट पॉइंट - + Size आकार @@ -2405,77 +2756,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form रूप - + Storage de&vice: - स्टोरेज डिवाइस (&v): + डिवाइस (&v): - + &Revert All Changes सभी बदलाव उलट दें (&R) - + New Partition &Table नई विभाजन तालिका (&T) - + Cre&ate बनाएँ (&a) - + &Edit संपादित करें (&E) - + &Delete हटाएँ (D) - + New Volume Group नया वॉल्यूम समूह - + Resize Volume Group वॉल्यूम समूह का आकार बदलें - + Deactivate Volume Group वॉल्यूम समूह को निष्क्रिय करें - + Remove Volume Group वॉल्यूम समूह को हटाएँ - + I&nstall boot loader on: बूट लोडर इंस्टॉल करें (&l) : - + Are you sure you want to create a new partition table on %1? क्या आप वाकई %1 पर एक नई विभाजन तालिका बनाना चाहते हैं? - + Can not create new partition नया विभाजन बनाया नहीं जा सका - + 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. %1 पर विभाजन तालिका में पहले से ही %2 मुख्य विभाजन हैं व और अधिक नहीं जोड़ें जा सकते। कृपया एक मुख्य विभाजन को हटाकर उसके स्थान पर एक विस्तृत विभाजन जोड़ें। @@ -2483,131 +2834,121 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... सिस्टम की जानकारी प्राप्त की जा रही है... - + Partitions विभाजन - - Install %1 <strong>alongside</strong> another operating system. - %1 को दूसरे ऑपरेटिंग सिस्टम <strong>के साथ</strong> इंस्टॉल करें। + + Unsafe partition actions are enabled. + विभाजन हेतु असुरक्षित कार्य सक्रिय हैं। - - <strong>Erase</strong> disk and install %1. - डिस्क का सारा डाटा<strong>हटाकर</strong> कर %1 इंस्टॉल करें। + + Partitioning is configured to <b>always</b> fail. + विभाजन प्रक्रिया <b>सदैव</b> विफल होने हेतु विन्यस्त है। - - <strong>Replace</strong> a partition with %1. - विभाजन को %1 से <strong>बदलें</strong>। + + No partitions will be changed. + किसी विभाजन में कोई परिवर्तन नहीं होगा। - - <strong>Manual</strong> partitioning. - <strong>मैनुअल</strong> विभाजन। - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - डिस्क <strong>%2</strong> (%3) पर %1 को दूसरे ऑपरेटिंग सिस्टम <strong>के साथ</strong> इंस्टॉल करें। - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - डिस्क <strong>%2</strong> (%3) <strong>erase</strong> कर %1 इंस्टॉल करें। - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - डिस्क <strong>%2</strong> (%3) के विभाजन को %1 से <strong>बदलें</strong>। - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - डिस्क <strong>%1</strong> (%2) पर <strong>मैनुअल</strong> विभाजन। - - - - Disk <strong>%1</strong> (%2) - डिस्क <strong>%1</strong> (%2) - - - + Current: मौजूदा : - + After: - बाद में : + बाद में: - + No EFI system partition configured कोई EFI सिस्टम विभाजन विन्यस्त नहीं है - - 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>esp</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. - %1 को शुरू करने हेतु EFI सिस्टम विभाजन ज़रूरी है।<br/><br/>EFI सिस्टम विभाजन को विन्यस्त करने के लिए, वापस जाएँ और चुनें या बनाएँ एक FAT32 फ़ाइल सिस्टम जिस पर <strong>esp</strong> flag चालू हो व माउंट पॉइंट <strong>%2</strong>हो।<br/><br/>आप बिना सेट भी आगे बढ़ सकते है पर सिस्टम चालू नहीं होगा। + + EFI system partition configured incorrectly + EFI सिस्टम विभाजन उचित रूप से विन्यस्त नहीं है - - EFI system partition flag not set - EFI सिस्टम विभाजन फ्लैग सेट नहीं है + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + %1 आरंभ करने हेतु EFI सिस्टम विभाजन आवश्यक है। <br/><br/> EFI सिस्टम विभाजन विन्यस्त करने हेतु, वापस जाएँ व एक उपयुक्त फाइल सिस्टम चुनें या बनाएँ। - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1 को शुरू करने हेतु EFI सिस्टम विभाजन ज़रूरी है।<br/><br/>विभाजन को माउंट पॉइंट <strong>%2</strong> के साथ विन्यस्त किया गया परंतु उसका <strong>esp</strong> फ्लैग सेट नहीं था।<br/> फ्लैग सेट करने के लिए, वापस जाएँ और विभाजन को edit करें।<br/><br/>आप बिना सेट भी आगे बढ़ सकते है पर सिस्टम चालू नहीं होगा। + + The filesystem must be mounted on <strong>%1</strong>. + फाइल सिस्टम का <strong>%1</strong> पर माउंट होना आवश्यक है। - + + The filesystem must have type FAT32. + फाइल सिस्टम का प्रकार FAT32 होना आवश्यक है। + + + + The filesystem must be at least %1 MiB in size. + फाइल सिस्टम का आकार कम-से-कम %1 एमबी होना आवश्यक है। + + + + The filesystem must have flag <strong>%1</strong> set. + फाइल सिस्टम पर <strong>%1</strong> फ्लैग सेट होना आवश्यक है। + + + + You can continue without setting up an EFI system partition but your system may fail to start. + आप बिना EFI सिस्टम विभाजन सेट करें भी प्रक्रिया जारी रख सकते हैं परन्तु सम्भवतः ऐसा करने से आपका सिस्टम आरंभ नहीं होगा। + + + Option to use GPT on BIOS - + BIOS पर GPT उपयोग करने के लिए विकल्प - - 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. - + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT विभाजन तालिका सभी सिस्टम हेतु सबसे उत्तम विकल्प है। यह इंस्टॉलर BIOS सिस्टम के सेटअप को भी समर्थन करता है। <br/><br/>BIOS पर GPT विभाजन तालिका को विन्यस्त करने हेतु, (यदि अब तक नहीं करा है) वापस जाकर विभाजन तालिका GPT पर सेट करें, फिर एक 8 MB का बिना फॉर्मेट हुआ विभाजन बनाएँ जिस पर <strong>%2</strong> का फ्लैग हो।<br/><br/>यह बिना फॉर्मेट हुआ 8 MB का विभाजन %1 को BIOS सिस्टम पर GPT के साथ आरंभ करने हेतु आवश्यक है। - + Boot partition not encrypted बूट विभाजन एन्क्रिप्टेड नहीं है - + 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. एन्क्रिप्टेड रुट विभाजन के साथ एक अलग बूट विभाजन भी सेट किया गया था, पर बूट विभाजन एन्क्रिप्टेड नहीं था।<br/><br/> इस तरह का सेटअप सुरक्षित नहीं होता क्योंकि सिस्टम फ़ाइल एन्क्रिप्टेड विभाजन पर होती हैं।<br/>आप चाहे तो जारी रख सकते है, पर फिर फ़ाइल सिस्टम बाद में सिस्टम स्टार्टअप के दौरान अनलॉक होगा।<br/> विभाजन को एन्क्रिप्ट करने के लिए वापस जाकर उसे दोबारा बनाएँ व विभाजन निर्माण विंडो में<strong>एन्क्रिप्ट</strong> चुनें। - + has at least one disk device available. कम-से-कम एक डिस्क डिवाइस उपलब्ध हो। - + There are no partitions to install on. - + इंस्टॉल हेतु कोई विभाजन नहीं हैं। PlasmaLnfJob - + Plasma Look-and-Feel Job प्लाज़्मा Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package KDE प्लाज़्मा का Look-and-Feel पैकेज चुना नहीं जा सका @@ -2615,17 +2956,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form रूप - + 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. कृपया केडीई प्लाज़्मा डेस्कटॉप के लिए एक look-and-feel चुनें। आप अभी इस चरण को छोड़ सकते हैं व सिस्टम सेटअप होने के उपरांत इसे सेट कर सकते हैं। look-and-feel विकल्पों पर क्लिक कर आप चयनित look-and-feel का तुरंत ही पूर्वावलोकन कर सकते हैं। - + 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. कृपया KDE प्लाज़्मा डेस्कटॉप के लिए एक look-and-feel चुनें। आप अभी इस चरण को छोड़ सकते हैं व सिस्टम इंस्टॉल हो जाने के बाद इसे सेट कर सकते हैं। look-and-feel विकल्पों पर क्लिक कर आप चयनित look-and-feel का तुरंत ही पूर्वावलोकन कर सकते हैं। @@ -2633,7 +2974,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2641,17 +2982,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... बाद के लिए फाइलों को संचित किया जा है... - + No files configured to save for later. बाद में संचित करने हेतु कोई फाइल विन्यस्त नहीं की गई है। - + Not all of the configured files could be preserved. विन्यस्त की गई सभी फाइलें संचित नहीं की जा सकी। @@ -2659,68 +3000,68 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. कमांड से कोई आउटपुट नहीं मिला। - + Output: -आउटपुट : +आउटपुट: - + External command crashed. बाह्य कमांड क्रैश हो गई। - + Command <i>%1</i> crashed. कमांड <i>%1</i> क्रैश हो गई। - + External command failed to start. बाह्य​ कमांड शुरू होने में विफल। - + Command <i>%1</i> failed to start. कमांड <i>%1</i> शुरू होने में विफल। - + Internal error when starting command. कमांड शुरू करते समय आंतरिक त्रुटि। - + Bad parameters for process job call. प्रक्रिया कार्य कॉल के लिए गलत मापदंड। - + External command failed to finish. बाहरी कमांड समाप्त करने में विफल। - + Command <i>%1</i> failed to finish in %2 seconds. कमांड <i>%1</i> %2 सेकंड में समाप्त होने में विफल। - + External command finished with errors. बाहरी कमांड त्रुटि के साथ समाप्त। - + Command <i>%1</i> finished with exit code %2. कमांड <i>%1</i> exit कोड %2 के साथ समाप्त। @@ -2728,89 +3069,95 @@ Output: QObject - - Default Keyboard Model - डिफ़ॉल्ट कुंजीपटल मॉडल - - - - - Default - डिफ़ॉल्ट - - - - unknown - अज्ञात - - - - extended - विस्तृत - - - - unformatted - फॉर्मेट नहीं हो रखा है - - - - swap - स्वैप - - - - Unpartitioned space or unknown partition table - अविभाजित स्पेस या अज्ञात विभाजन तालिका - - - - (no mount point) - (कोई माउंट पॉइंट नहीं) - - - - Requirements checking for module <i>%1</i> is complete. - मापांक <i>%1</i> हेतु आवश्यकताओं की जाँच पूर्ण हुई। - - - + %1 (%2) %1 (%2) - - No product - कोई उत्पाद नहीं + + unknown + अज्ञात - - No description provided. - कोई विवरण मौजूद नहीं + + extended + विस्तृत - - - - + + unformatted + फॉर्मेट नहीं हो रखा है + + + + swap + स्वैप + + + + + Default + डिफ़ॉल्ट + + + + + + File not found - फाइल नहीं मिली + फ़ाइल नहीं मिली - + Path <pre>%1</pre> must be an absolute path. - + फ़ाइल पथ <pre>%1</pre> निरपेक्ष होना चाहिए। - + + Directory not found + डायरेक्टरी नहीं मिली + + + + Could not create new random file <pre>%1</pre>. - + नवीन यादृच्छिक फ़ाइल <pre>%1</pre>नहीं बनाई जा सकी। + + + + No product + कोई वस्तु नहीं + + + + No description provided. + कोई विवरण प्रदान नहीं किया गया। + + + + (no mount point) + (कोई माउंट पॉइंट नहीं) + + + + Unpartitioned space or unknown partition table + अविभाजित स्पेस या अज्ञात विभाजन तालिका + + + + Recommended + + + <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> + <p>यह कंप्यूटर %1 सेटअप करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/> + सेटअप जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ निष्क्रिय कर दी जाएँगी।</p> RemoveUserJob - + Remove live user from target system लक्षित सिस्टम से लाइव उपयोक्ता को हटाना @@ -2818,18 +3165,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. %1 नामक वॉल्यूम समूह हटाएँ। - + Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> नामक वॉल्यूम समूह हटाएँ। - + The installer failed to remove a volume group named '%1'. इंस्टालर '%1' नामक वॉल्यूम समूह को हटाने में विफल रहा। @@ -2837,143 +3184,160 @@ Output: ReplaceWidget - + Form रूप - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - चुनें कि %1 को कहाँ इंस्टॉल करना है।<br/><font color="red">चेतावनी : </font> यह चयनित विभाजन पर मौजूद सभी फ़ाइलों को हटा देगा। + चुनें कि %1 को कहाँ इंस्टॉल करना है।<br/><font color="red">चेतावनी: </font> यह चयनित विभाजन पर मौजूद सभी फ़ाइलों को हटा देगा। - + The selected item does not appear to be a valid partition. चयनित आइटम एक मान्य विभाजन नहीं है। - + %1 cannot be installed on empty space. Please select an existing partition. - %1 को खाली स्पेस पर इंस्टॉल नहीं किया जा सकता। कृपया कोई मौजूदा विभाजन चुनें। + %1 को खाली स्पेस पर इंस्टॉल नहीं किया जा सकता।कृपया कोई मौजूदा विभाजन चुनें। - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 को विस्तृत विभाजन पर इंस्टॉल नहीं किया जा सकता। कृपया कोई मौजूदा मुख्य या तार्किक विभाजन चुनें। - + %1 cannot be installed on this partition. इस विभाजन पर %1 इंस्टॉल नहीं किया जा सकता। - + Data partition (%1) डाटा विभाजन (%1) - + Unknown system partition (%1) अज्ञात सिस्टम विभाजन (%1) - + %1 system partition (%2) %1 सिस्टम विभाजन (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - <strong>%4</strong><br/><br/>%2 के लिए विभाजन %1 काफ़ी छोटा है। कृपया कम-से-कम %3 GiB की क्षमता वाला कोई विभाजन चुनें। + <strong>%4</strong><br/><br/>%2 के लिए विभाजन %1 बहुत छोटा है।कृपया कम-से-कम %3 GiB की क्षमता वाला कोई विभाजन चुनें । - + <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. <strong>%2</strong><br/><br/>इस सिस्टम पर कहीं भी कोई EFI सिस्टम विभाजन नहीं मिला। कृपया वापस जाएँ व %1 को सेट करने के लिए मैनुअल रूप से विभाजन करें। - - - + + + <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. <strong>%3</strong><br/><br/>%2 पर %1 इंस्टॉल किया जाएगा।<br/><font color="red">चेतावनी : </font>विभाजन %2 पर मौजूद सारा डाटा हटा दिया जाएगा। - + The EFI system partition at %1 will be used for starting %2. %1 वाले EFI सिस्टम विभाजन का उपयोग %2 को शुरू करने के लिए किया जाएगा। - + EFI system partition: - EFI सिस्टम विभाजन : + EFI सिस्टम विभाजन: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>यह कंप्यूटर %1 को इंस्टॉल करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/> + इंस्टॉल जारी नहीं रखा जा सकता।</p> + + + + <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> + <p>यह कंप्यूटर %1 सेटअप करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/> + सेटअप जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ निष्क्रिय कर दी जाएँगी।</p> ResizeFSJob - + Resize Filesystem Job फ़ाइल सिस्टम कार्य का आकार बदलें - + Invalid configuration अमान्य विन्यास - + The file-system resize job has an invalid configuration and will not run. फाइल सिस्टम का आकार बदलने हेतु कार्य का विन्यास अमान्य है व यह नहीं चलेगा। - + KPMCore not Available KPMCore उपलब्ध नहीं है - + Calamares cannot start KPMCore for the file-system resize job. Calamares फाइल सिस्टम का आकार बदलने कार्य हेतु KPMCore को आरंभ नहीं कर सका। - - - - - + + + + + Resize Failed आकार बदलना विफल रहा - + The filesystem %1 could not be found in this system, and cannot be resized. इस सिस्टम पर फाइल सिस्टम %1 नहीं मिला, व उसका आकार बदला नहीं जा सकता। - + The device %1 could not be found in this system, and cannot be resized. इस सिस्टम पर डिवाइस %1 नहीं मिला, व उसका आकार बदला नहीं जा सकता। - - + + The filesystem %1 cannot be resized. फाइल सिस्टम %1 का आकार बदला नहीं जा सकता। - - + + The device %1 cannot be resized. डिवाइस %1 का आकार बदला नहीं जा सकता। - + The filesystem %1 must be resized, but cannot. फाइल सिस्टम %1 का आकार बदला जाना चाहिए लेकिन बदला नहीं जा सकता। - + The device %1 must be resized, but cannot डिवाइस %1 का आकार बदला जाना चाहिए लेकिन बदला नहीं जा सकता @@ -2981,22 +3345,22 @@ Output: ResizePartitionJob - + Resize partition %1. विभाजन %1 का आकार बदलें। - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> के <strong>%1</strong> विभाजन का आकार बदलकर <strong>%3MiB</strong> करें। - + Resizing %2MiB partition %1 to %3MiB. %2MiB के %1 विभाजन का आकार बदलकर %3MiB किया जा रहा है। - + The installer failed to resize partition %1 on disk '%2'. इंस्टॉलर डिस्क '%2' पर विभाजन %1 का आकर बदलने में विफल रहा। @@ -3004,7 +3368,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group वॉल्यूम समूह का आकार बदलें @@ -3012,18 +3376,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. %1 नामक वॉल्यूम समूह का आकार %2 से बदलकर %3 करें। - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> नामक वॉल्यूम समूह का आकार <strong>%2</strong> से बदलकर <strong>%3</strong> करें। - + The installer failed to resize a volume group named '%1'. इंस्टालर '%1' नाम के वॉल्यूम समूह का आकार बदलने में विफल रहा। @@ -3031,53 +3395,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: उत्तम परिणाम हेतु, कृपया सुनिश्चित करें कि यह कंप्यूटर : - + System requirements सिस्टम इंस्टॉल हेतु आवश्यकताएँ - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - यह कंप्यूटर %1 को सेटअप करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/>सेटअप जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - यह कंप्यूटर %1 को इंस्टॉल करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<br/>इंस्टॉल जारी नहीं रखा जा सकता।<a href="#details">विवरण...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - यह कंप्यूटर %1 को सेटअप करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/>सेटअप जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ को निष्क्रिय किया जा सकता हैं। - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - यह कंप्यूटर %1 को इंस्टॉल करने हेतु सुझाई गई आवश्यकताओं को पूरा नहीं करता।<br/>इंस्टॉल जारी रखा जा सकता है, लेकिन कुछ विशेषताएँ को निष्क्रिय किया जा सकता हैं। - - - - This program will ask you some questions and set up %2 on your computer. - यह प्रोग्राम एक प्रश्नावली के आधार पर आपके कंप्यूटर पर %2 को सेट करेगा। - - ScanningDialog - + Scanning storage devices... डिवाइस स्कैन किए जा रहे हैं... - + Partitioning विभाजन @@ -3085,29 +3421,29 @@ Output: SetHostNameJob - + Set hostname %1 होस्ट नाम %1 सेट करें। - + Set hostname <strong>%1</strong>. होस्ट नाम <strong>%1</strong> सेट करें। - + Setting hostname %1. होस्ट नाम %1 सेट हो रहा है। + - Internal Error आंतरिक त्रुटि - - + + Cannot write hostname to target system लक्षित सिस्टम पर होस्ट नाम लिखा नहीं जा सकता। @@ -3115,29 +3451,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 कुंजीपटल का मॉडल %1, अभिन्यास %2-%3 सेट करें। - + Failed to write keyboard configuration for the virtual console. वर्चुअल कंसोल हेतु कुंजीपटल की सेटिंग्स राइट करने में विफल रहा। - - - + + + Failed to write to %1 %1 पर राइट करने में विफल - + Failed to write keyboard configuration for X11. X11 हेतु कुंजीपटल की सेटिंग्स राइट करने में विफल रहा। - + Failed to write keyboard configuration to existing /etc/default directory. मौजूदा /etc /default डायरेक्टरी में कुंजीपटल की सेटिंग्स राइट करने में विफल रहा। @@ -3145,82 +3481,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. %1 विभाजन पर फ्लैग सेट करें। - + Set flags on %1MiB %2 partition. %1MiB के %2 विभाजन पर फ्लैग सेट करें। - + Set flags on new partition. नए विभाजन पर फ्लैग सेट करें। - + Clear flags on partition <strong>%1</strong>. <strong>%1</strong> विभाजन पर से फ्लैग हटाएँ। - + Clear flags on %1MiB <strong>%2</strong> partition. %1MiB के <strong>%2</strong> विभाजन पर से फ्लैग हटाएँ। - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - %1MiB के <strong>%2</strong> विभाजन पर <strong>%3</strong> का फ्लैग लगाएँ। - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - %1MiB के <strong>%2</strong> विभाजन पर से फ्लैग हटाएँ जा रहे हैं। - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - %1MiB के <strong>%2</strong> विभाजन पर फ्लैग <strong>%3</strong> सेट किए जा रहे हैं। - - - + Clear flags on new partition. नए विभाजन पर से फ्लैग हटाएँ। - + Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> विभाजन पर <strong>%2</strong> का फ्लैग लगाएँ। - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MiB के <strong>%2</strong> विभाजन पर <strong>%3</strong> का फ्लैग लगाएँ। + + + Flag new partition as <strong>%1</strong>. नए विभाजन पर<strong>%1</strong>का फ्लैग लगाएँ। - + Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> विभाजन पर से फ्लैग हटाएँ जा रहे हैं। - + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MiB के <strong>%2</strong> विभाजन पर से फ्लैग हटाएँ जा रहे हैं। + + + Clearing flags on new partition. नए विभाजन पर से फ्लैग हटाएँ जा रहे हैं। - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%1</strong> विभाजन पर फ्लैग <strong>%2</strong> सेट किए जा रहे हैं। - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + %1MiB के <strong>%2</strong> विभाजन पर फ्लैग <strong>%3</strong> सेट किए जा रहे हैं। + + + Setting flags <strong>%1</strong> on new partition. नए विभाजन पर फ्लैग <strong>%1</strong> सेट किए जा रहे हैं। - + The installer failed to set flags on partition %1. इंस्टॉलर विभाजन %1 पर फ्लैग सेट करने में विफल रहा। @@ -3228,42 +3564,42 @@ Output: SetPasswordJob - + Set password for user %1 उपयोक्ता %1 के लिए पासवर्ड सेट करें। - + Setting password for user %1. उपयोक्ता %1 के लिए पासवर्ड सेट किया जा रहा है। - + Bad destination system path. लक्ष्य का सिस्टम पथ गलत है। - + rootMountPoint is %1 रूट माउंट पॉइंट %1 है - + Cannot disable root account. रुट अकाउंट निष्क्रिय नहीं किया जा सकता । - + passwd terminated with error code %1. passwd त्रुटि कोड %1 के साथ समाप्त। - + Cannot set password for user %1. - उपयोक्ता %1 हेतु पासवर्ड सेट नहीं किया जा सकता। + उपयोक्ता %1 के लिए पासवर्ड सेट नहीं किया जा सकता। - + usermod terminated with error code %1. usermod त्रुटि कोड %1 के साथ समाप्त। @@ -3271,45 +3607,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 समय क्षेत्र %1%2 पर सेट करें - + Cannot access selected timezone path. चयनित समय क्षेत्र पथ तक पहुँचा नहीं जा सका। - + Bad path: %1 गलत पथ: %1 - + Cannot set timezone. समय क्षेत्र सेट नहीं हो सका। - + Link creation failed, target: %1; link name: %2 लिंक बनाना विफल, लक्ष्य: %1; लिंक का नाम: %2 - + Cannot set timezone, - समय क्षेत्र सेट नहीं हो सका, + समय क्षेत्र सेट नहीं हो सका। - + Cannot open /etc/timezone for writing - राइट करने हेतु /etc /timezone खोला नहीं जा सका + राइट करने हेतु /etc /timezone खोला नहीं जा सका। + + + + SetupGroupsJob + + + Preparing groups. + समूह तैयार करना जारी। + + + + + Could not create groups in target system + लक्षित सिस्टम में समूह तैयार करना विफल + + + + These groups are missing in the target system: %1 + लक्षित सिस्टम में समूह अनुपस्थित हैं : %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <pre>sudo</pre> उपयोक्ता हेतु विन्यास। + + + + Cannot chmod sudoers file. + sudoers फ़ाइल chmod नहीं की जा सकती। + + + + Cannot create sudoers file for writing. + राइट हेतु sudoers फ़ाइल नहीं बन सकती। ShellProcessJob - + Shell Processes Job शेल प्रक्रिया कार्य @@ -3317,188 +3690,215 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - यह एक अवलोकन है कि सेटअप प्रक्रिया आरंभ होने के उपरांत क्या होगा। + + &OK + ठीक है (&O) - - This is an overview of what will happen once you start the install procedure. - यह अवलोकन है कि इंस्टॉल शुरू होने के बाद क्या होगा। + + &Yes + हाँ (&Y) - - - SummaryViewStep - - Summary - सारांश + + &No + नहीं (&N) + + + + &Cancel + रद्द करें (&C) + + + + &Close + बंद करें (&C) TrackingInstallJob - + Installation feedback इंस्टॉल संबंधी प्रतिक्रिया - + Sending installation feedback. इंस्टॉल संबंधी प्रतिक्रिया भेजना। - + Internal error in install-tracking. इंस्टॉल-ट्रैकिंग में आंतरिक त्रुटि। - + HTTP request timed out. एचटीटीपी अनुरोध हेतु समय समाप्त। - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + केडीई उपयोक्ता प्रतिक्रिया + + + + Configuring KDE user feedback. + केडीई उपयोक्ता प्रतिक्रिया विन्यस्त करना। + + + + + Error in KDE user feedback configuration. + केडीई उपयोक्ता प्रतिक्रिया विन्यास में त्रुटि। + + + + Could not configure KDE user feedback correctly, script error %1. + केडीई उपयोक्ता प्रतिक्रिया सही रूप से विन्यस्त नहीं की जा सकी, स्क्रिप्ट त्रुटि %1। + + + + Could not configure KDE user feedback correctly, Calamares error %1. + केडीई उपयोक्ता प्रतिक्रिया विन्यस्त सही रूप से विन्यस्त नहीं की जा सकी, Calamares त्रुटि %1। + + + + TrackingMachineUpdateManagerJob + + Machine feedback मशीन संबंधी प्रतिक्रिया - + Configuring machine feedback. मशीन संबंधी प्रतिक्रिया विन्यस्त करना। - - + + Error in machine feedback configuration. मशीन संबंधी प्रतिक्रिया विन्यास में त्रुटि। - + Could not configure machine feedback correctly, script error %1. - मशीन प्रतिक्रिया को सही रूप से विन्यस्त नहीं किया जा सका, स्क्रिप्ट त्रुटि %1। + मशीन प्रतिक्रिया सही रूप से विन्यस्त नहीं की जा सकी, स्क्रिप्ट त्रुटि %1। - + Could not configure machine feedback correctly, Calamares error %1. - मशीन प्रतिक्रिया को सही रूप से विन्यस्त नहीं किया जा सका, Calamares त्रुटि %1। + मशीन प्रतिक्रिया को सही रूप से विन्यस्त नहीं की जा सकी, Calamares त्रुटि %1। TrackingPage - + Form रूप - + Placeholder प्लेसहोल्डर - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>इसे चयनित करने पर, आपके इंस्टॉल संबंधी <span style=" font-weight:600;">किसी प्रकार की कोई जानकारी नहीं </span>भेजी जाएँगी।</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>यहाँ क्लिक करने के उपरांत, आपके इंस्टॉल संबंधी <span style=" font-weight:600;">किसी प्रकार की कोई जानकारी नहीं </span>भेजी जाएँगी।</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">उपयोक्ता प्रतिक्रिया के बारे में अधिक जानकारी हेतु यहाँ क्लिक करें</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - इंस्टॉल की ट्रैकिंग करने से %1 को यह जानने में सहायता मिलती है कि उनके कितने उपयोक्ता हैं, वे किस हार्डवेयर पर %1 को इंस्टॉल करते हैं एवं (नीचे दिए अंतिम दो विकल्पों सहित), पसंदीदा अनुप्रयोगों के बारे में निरंतर जानकारी प्राप्त करते हैं। यह जानने हेतु कि क्या भेजा जाएगा, कृपया प्रत्येक क्षेत्र के साथ में दिए सहायता आइकन पर क्लिक करें। + + 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. + ट्रैकिंग द्वारा %1 को यह जानने में सहायता मिलती है कि कितनी बार व किस हार्डवेयर पर इंस्टॉल किया गया एवं कौन से अनुप्रयोग उपयोग किए गए। यह जानने हेतु कि क्या भेजा जाएगा, कृपया प्रत्येक के साथ दिए गए सहायता आइकन पर क्लिक करें। - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - इसे चयनित करने पर आपके इंस्टॉल व हार्डवेयर संबंधी जानकारी भेजी जाएँगी। यह जानकारी इंस्टॉल समाप्त हो जाने के उपरांत <b>केवल एक बार ही</b> भेजी जाएगी। + + 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. + इसे चयनित करने पर आपके इंस्टॉल व हार्डवेयर संबंधी जानकारी भेजी जाएँगी। यह जानकारी इंस्टॉल समाप्त हो जाने के उपरांत केवल <b>एक बार</b> ही भेजी जाएगी। - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - इसे चयनित करने पर आपके इंस्टॉल, हार्डवेयर व अनुप्रयोगों संबंधी जानकारी <b>समय-समय पर</b>, %1 को भेजी जाएँगी। + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + इसे चयनित करने पर आपके <b>मशीन</b> इंस्टॉल, हार्डवेयर व अनुप्रयोगों संबंधी जानकारी समय-समय पर, %1 को भेजी जाएँगी। - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - इसे चयनित करने पर आपके इंस्टॉल, हार्डवेयर, अनुप्रयोगों व उपयोक्ता प्रतिमानों संबंधी जानकारी <b>समय-समय पर</b>, %1 को भेजी जाएँगी। + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + इसे चयनित करने पर आपके <b>उपयोक्ता</b> इंस्टॉल, हार्डवेयर, अनुप्रयोगों व प्रतिमानों संबंधी जानकारी समय-समय पर, %1 को भेजी जाएँगी। TrackingViewStep - + Feedback प्रतिक्रिया + + UmountJob + + + Unmount file systems. + फ़ाइल सिस्टम माउंट से हटाना। + + + + No target system available. + लक्षित सिस्टम उपलब्ध नहीं है। + + + + No rootMountPoint is set. + rootMountPoint निर्धारित नहीं है। + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>यदि एक से अधिक व्यक्ति इस कंप्यूटर का उपयोग करेंगे, तो आप सेटअप के उपरांत एकाधिक अकाउंट बना सकते हैं।</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>यदि एक से अधिक व्यक्ति इस कंप्यूटर का उपयोग करेंगे, तो आप इंस्टॉल के उपरांत एकाधिक अकाउंट बना सकते हैं।</small> + + + UsersQmlViewStep - - Your username is too long. - आपका उपयोक्ता नाम काफ़ी लंबा है। - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - आपका होस्ट नाम काफ़ी छोटा है। - - - - Your hostname is too long. - आपका होस्ट नाम काफ़ी लंबा है। - - - - Your passwords do not match! - आपके कूटशब्द मेल नहीं खाते! + + Users + उपयोक्ता UsersViewStep - + Users उपयोक्ता @@ -3506,65 +3906,67 @@ Output: VariantModel - + Key - + Column header for key/value + कुंजी - + Value - + Column header for key/value + मान VolumeGroupBaseDialog - + Create Volume Group - वॉल्यूम समूह बनाएँ + वॉल्यूम समूह बनाएं - + List of Physical Volumes वॉल्यूम समूहों की सूची - + Volume Group Name: वॉल्यूम समूह का नाम : - + Volume Group Type: वॉल्यूम समूह का प्रकार : - + Physical Extent Size: डिस्क ब्लॉक की आकार सीमा : - + MiB MiB - + Total Size: कुल आकार : - + Used Size: प्रयुक्त आकार : - + Total Sectors: कुल सेक्टर : - + Quantity of LVs: तार्किक वॉल्यूम की मात्रा : @@ -3572,106 +3974,106 @@ Output: WelcomePage - + Form रूप - - + + Select application and system language - ऐप्लिकेशन व सिस्टम भाषा चुनें + अनुप्रयोग व सिस्टम भाषा चुनें - Open donations website - दान करने की वेबसाइट खोलें + &About + बारे में (&A) - - &Donate - &दान करें + + Open donations website + दान हेतु वेबसाइट खोलें + &Donate + दान करें (&D) + + + Open help and support website - मदद व सहायता की वेबसाइट खोलें + सहायता हेतु वेबसाइट खोलें + &Support + सहायता (&S) + + + Open issues and bug-tracking website समस्या व त्रुति निगरानी की वेबसाइट खोलें - Open release notes website - - - - - &Release notes - रिलीज़ नोट्स (&R) - - - &Known issues ज्ञात समस्याएँ (&K) - - &Support - सहायता (&S) + + Open release notes website + प्रकाशन नोट्स हेतु वेबसाइट खोलें - - &About - बारे में (&A) + + &Release notes + रिलीज़ नोट्स (&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 इंस्टॉलर में आपका स्वागत है।</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 के लिए Calamares इंस्टॉलर में आपका स्वागत है।</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 हेतु Calamares सेटअप में आपका स्वागत है।</h1> - + <h1>Welcome to %1 setup.</h1> <h1>%1 सेटअप में आपका स्वागत है।</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1 के लिए Calamares इंस्टॉलर में आपका स्वागत है।</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 इंस्टॉलर में आपका स्वागत है।</h1> + + + + %1 support + %1 सहायता + + + About %1 setup %1 सेटअप के बारे में - + About %1 installer %1 इंस्टॉलर के बारे में - + <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. - - - - - %1 support - %1 सहायता + <h1>%1</h1><br/><strong>%2<br/>के लिए %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/">ब्लू सिस्टम्स</a> - लिब्रेटिंग सॉफ्टवेयर द्वारा प्रायोजित है। WelcomeQmlViewStep - + Welcome स्वागत है @@ -3679,120 +4081,482 @@ Output: WelcomeViewStep - + Welcome स्वागत है + + ZfsJob + + + Create ZFS pools and datasets + ZFS पूल व डेटासेट सृजन + + + + Failed to create zpool on + यहाँ zpool का सृजन विफल + + + + Configuration Error + विन्यास त्रुटि + + + + No partitions are available for ZFS. + ZFS हेतु कोई विभाजन उपलब्ध नहीं है। + + + + Internal data missing + आतंरिक डेटा अनुपलब्ध + + + + + Failed to create zpool + zpool का सृजन विफल + + + + Failed to create dataset + डेटासेट का सृजन विफल + + + + The output was: + यह आउटपुट था : + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + के लिए %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/'>ब्लू सिस्टम्स</a> - + लिब्रेटिंग सॉफ्टवेयर द्वारा प्रायोजित है। - + Back - + वापस + + + + calamares-sidebar + + + Show debug information + डीबग संबंधी जानकारी दिखाएँ + + + + finishedq + + + Installation Completed + इंस्टॉल पूर्ण + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + आपके कंप्यूटर पर %1 इंस्टॉल हो चुका है।<br/> + अब आप नए सिस्टम को पुनः आरंभ, या फिर लाइव वातावरण उपयोग करना जारी रख सकते हैं। + + + + Close Installer + इंस्टॉलर बंद करें + + + + Restart System + सिस्टम पुनः आरंभ करें + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>इंस्टॉल प्रक्रिया की पूर्ण लॉग installation.log फाइल के रूप में लाइव उपयोक्ता की होम डायरेक्टरी में उपलब्ध है।<br/> + यह लॉग फाइल लक्षित सिस्टम में %1 पर भी कॉपी की गई है।</p> + + + + finishedq@mobile + + + Installation Completed + इंस्टॉल पूर्ण + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + आपके कंप्यूटर पर %1 इंस्टॉल हो चुका है।<br/> + अब आप उपकरण को पुनः आरंभ कर सकते हैं। + + + + Close + बंद करें + + + + Restart + पुनः आरंभ करें + + + + i18n + + + <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>. + <h1>भाषाएँ</h1></br> + सिस्टम स्थानिकी सेटिंग कमांड लाइन के कुछ उपयोक्ता अंतरफलक तत्वों की भाषा व अक्षर सेट पर असर डालती है।<br/>मौजूदा सेटिंग <strong>%1</strong>है। + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>स्थानिकी</h1> </br> + सिस्टम स्थानिकी सेटिंग संख्या व दिनांक के प्रारूप को प्रभावित करती है। वर्तमान सेटिंग <strong>%1</strong> है। + + + + Back + वापस keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + कुंजीपटल पूर्वावलोकन सक्रिय करने हेतु एक अभिन्यास चुनें। - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + कुंजीपटल का मॉडल - - Refresh - - - - - + Layouts - + अभिन्यास - - - Keyboard Layout - + + Type here to test your keyboard + अपना कुंजीपटल जाँचने के लिए यहाँ टाइप करें - - Models - - - - + Variants - + भिन्न रूप + + + localeq - - Test your keyboard - + + Change + बदलें notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - + <h3>%1</h3> + <p>ये उदाहरण रिलीज़ नोट्स हैं।</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + लिब्रे-ऑफिस एक सशक्त और निःशुल्क ऑफिस सॉफ्टवेयर है जिसका उपयोग दुनिया भर के लाखों लोग करते हैं। इसमें कई अनुप्रयोग सम्मिलित हैं जो इसे उपलब्ध विकल्पों में सबसे बहुमुखी निःशुल्क व मुक्त स्रोत ऑफिस सॉफ्टवेयर बनाते हैं।<br/> +डिफ़ॉल्ट विकल्प। + + + + LibreOffice + लिब्रे-ऑफिस + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + यदि आप ऑफिस सॉफ्टवेयर इंस्टॉल नहीं करना चाहते हैं, तो कोई ऑफिस सॉफ्टवेयर नहीं का विकल्प चुनें। आप आवश्यकता अनुसार बाद में अपने इंस्टॉल किए गए सिस्टम पर एक (या अधिक) ऐसे सॉफ्टवेयर जोड़ सकते हैं। + + + + No Office Suite + कोई ऑफिस सॉफ्टवेयर नहीं + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + एक संक्षिप्त डेस्कटॉप इंस्टॉल का सृजन करें, सभी अतिरिक्त अनुप्रयोग हटाएँ एवं इंस्टॉल उपरांत तय करें कि आप सिस्टम में कौन से सॉफ्टवेयर जोड़ना चाहते हैं। इस प्रकार के इंस्टॉल में उदाहरण के तौर पर कोई ऑफिस सॉफ्टवेयर, कोई मीडिया प्लेयर, कोई चित्र प्रदर्शक या प्रिंटर समर्थन नहीं होगा। इसमें केवल एक डेस्कटॉप, फाइल प्रबंधक, पैकेज प्रबंधक, लेख संपादक व सरल वेब-ब्राउज़र होगा। + + + + Minimal Install + संक्षिप्त इंस्टॉल + + + + Please select an option for your install, or use the default: LibreOffice included. + कृपया अपने इंस्टॉल हेतु एक विकल्प चुनें या फिर डिफ़ॉल्ट ही उपयोग करें : इसमें लिब्रे-ऑफिस सम्मिलित है। + + + + release_notes + + + <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> + <h3>%1</h3> + <p>यह एक उदाहरण QML फ़ाइल है, जो फ्लिक योग्य सामग्री युक्त रिच टेक्स्ट के विकल्प प्रदर्शित करती है।</p> + + <p>रिच टेक्स्ट के साथ QML एचटीएमएल टैग उपयोग कर सकता है, फ्लिक योग्य सामग्री टचस्क्रीन में उपयोगी होती है।</p> + + <p><b>यह बोल्ड टेक्स्ट है</b></p> + <p><i>यह तिरछा टेक्स्ट है</i></p> + <p><u>यह रेखांकित टेक्स्ट है</u></p> + <p><center>यह टेक्स्ट केंद्र-संरेखित होगा।</center></p> + <p><s>यह स्ट्राइकथ्रू है</s></p> + + <p>कोड उदाहरण : + <code>ls -l /home</code></p> + + <p><b>सूचियाँ :</b></p> + <ul> + <li>इंटेल सीपीयू सिस्टम</li> + <li>एएमडी सीपीयू सिस्टम</li> + </ul> + + <p>ऊर्ध्वाधर स्क्रॉलबार समायोज्य है, वर्तमान चौड़ाई 10 पर सेट है।</p> + + + + Back + वापस + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + लॉगिन एवं प्रशासक कार्यों हेतु उपयोक्ता नाम इत्यादि चुनें। + + + + What is your name? + आपका नाम क्या है? + + + + Your Full Name + आपका पूरा नाम + + + + What name do you want to use to log in? + लॉग इन के लिए आप किस नाम का उपयोग करना चाहते हैं? + + + + Login Name + लॉगिन नाम + + + + If more than one person will use this computer, you can create multiple accounts after installation. + यदि एक से अधिक व्यक्ति इस कंप्यूटर का उपयोग करेंगे, तो आप इंस्टॉल के उपरांत एकाधिक अकाउंट बना सकते हैं। + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + केवल लोअरकेस अक्षर, अंक, अंडरस्कोर(_) व हाइफ़न(-) ही स्वीकार्य हैं। + + + + root is not allowed as username. + उपयोक्ता नाम के रूप में root का उपयोग अस्वीकार्य है। + + + + What is the name of this computer? + इस कंप्यूटर का नाम ? + + + + Computer Name + कंप्यूटर का नाम + + + + This name will be used if you make the computer visible to others on a network. + यदि आपका कंप्यूटर किसी नेटवर्क पर दृश्यमान होता है, तो यह नाम उपयोग किया जाएगा। + + + + localhost is not allowed as hostname. + होस्ट नाम के रूप में localhost का उपयोग अस्वीकार्य है। + + + + Choose a password to keep your account safe. + अपना अकाउंट सुरक्षित रखने के लिए पासवर्ड चुनें । + + + + Password + कूटशब्द + + + + Repeat Password + कूटशब्द पुनः दर्ज करें + + + + 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. + एक ही कूटशब्द दो बार दर्ज़ करें, ताकि उसे टाइप त्रुटि हेतु जाँचा जा सके। एक अच्छे कूटशब्द में अक्षर, अंक व विराम चिन्हों का मेल होता है, उसमें कम-से-कम आठ अक्षर होने चाहिए, और उसे नियमित अंतराल पर बदलते रहना चाहिए। + + + + Validate passwords quality + कूटशब्द गुणवत्ता प्रमाणीकरण + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + यह बॉक्स टिक करने के परिणाम स्वरुप कूटशब्द-क्षमता की जाँच होगी व आप कमज़ोर कूटशब्द उपयोग नहीं कर पाएंगे। + + + + Log in automatically without asking for the password + कूटशब्द बिना पूछे ही स्वतः लॉग इन करें + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + केवल अक्षर, अंक, अंडरस्कोर व हाइफ़न ही स्वीकार्य हैं, परन्तु केवल दो अक्षर ही ऐसे हो सकते हैं। + + + + Reuse user password as root password + रुट कूटशब्द हेतु भी उपयोक्ता कूटशब्द उपयोग करें + + + + Use the same password for the administrator account. + प्रबंधक अकाउंट के लिए भी यही कूटशब्द उपयोग करें। + + + + Choose a root password to keep your account safe. + अकाउंट सुरक्षा हेतु रुट कूटशब्द चुनें। + + + + Root Password + रुट कूटशब्द + + + + Repeat Root Password + रुट कूटशब्द पुनः दर्ज करें + + + + Enter the same password twice, so that it can be checked for typing errors. + समान कूटशब्द दो बार दर्ज करें, ताकि टाइपिंग त्रुटि हेतु जाँच की जा सकें। welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>%1 <quote>%2</quote>इंस्टॉलर में आपका स्वागत है</h3> + <p>यह प्रोग्राम प्रश्नावली के माध्यम से आपके कंप्यूटर पर %1 को सेट करेगा।</p> - + About - + बारे में - + Support - + सहायता - + Known issues - + ज्ञात समस्याएँ - + Release notes - + रिलीज़ नोट्स - + Donate - + दान करें diff --git a/lang/calamares_hr.ts b/lang/calamares_hr.ts index cedd88a10..876ef3906 100644 --- a/lang/calamares_hr.ts +++ b/lang/calamares_hr.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Upravljajte postavkama automatskog montiranja + + BootInfoWidget - + 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. <strong>Boot okruženje</strong> sustava.<br><br>Stariji x86 sustavi jedino podržavaju <strong>BIOS</strong>.<br>Noviji sustavi uglavnom koriste <strong>EFI</strong>, ali mogu podržavati i BIOS ako su pokrenuti u načinu kompatibilnosti. - + 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. Ovaj sustav koristi <strong>EFI</strong> okruženje.<br><br>Za konfiguriranje pokretanja iz EFI okruženja, ovaj instalacijski program mora uvesti boot učitavač, kao što je <strong>GRUB</strong> ili <strong>systemd-boot</strong> na <strong>EFI particiju</strong>. To se odvija automatski, osim ako ste odabrali ručno particioniranje. U tom slučaju to ćete morati odabrati ili stvoriti sami. - + 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. Ovaj sustav koristi <strong>BIOS</strong> okruženje.<br><br>Za konfiguriranje pokretanja iz BIOS okruženja, ovaj instalacijski program mora uvesti boot učitavač, kao što je <strong>GRUB</strong>, ili na početku particije ili na <strong>Master Boot Record</strong> blizu početka particijske tablice (preporučen način). To se odvija automatski, osim ako ste odabrali ručno particioniranje. U tom slučaju to ćete morati napraviti sami. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record od %1 - + Boot Partition Boot particija - + System Partition Particija sustava - + Do not install a boot loader Nemoj instalirati boot učitavač - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Prazna stranica @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Oblik - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Moduli - + Type: Tip: - - + + none nijedan - + Interface: Sučelje: - - Tools - Alati + + Crashes Calamares, so that Dr. Konqui can look at it. + Ruši Calamares, tako da ga dr. Konqui može pogledati. - + + Reloads the stylesheet from the branding directory. + Ponovno učitava tablicu stilova iz branding direktorija + + + + Uploads the session log to the configured pastebin. + Učitaj zapisnik sesije u konfigurirani pastebin. + + + + Send Session Log + Učitaj zapisnik sesije + + + Reload Stylesheet Ponovno učitaj stilsku tablicu - + + Displays the tree of widget names in the log (for stylesheet debugging). + Prikazuje stablo imena dodataka u zapisniku (za otklanjanje pogrešaka u tablici stilova). + + + Widget Tree Stablo widgeta - + Debug information Debug informacija @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Postaviti - + Install Instaliraj @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Posao nije uspio (%1) - + Programmed job failure was explicitly requested. Programski neuspjeh posla je izričito zatražen. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Gotovo @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Primjer posla (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Izvrši naredbu '%1' u ciljnom sustavu. - + Run command '%1'. Izvrši naredbu '%1'. - + Running command %1 %2 Izvršavam naredbu %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Izvodim %1 operaciju. - + Bad working directory path Krivi put do radnog direktorija - + Working directory %1 for python job %2 is not readable. Radni direktorij %1 za python zadatak %2 nije čitljiv. - + Bad main script file Kriva glavna datoteka skripte - + Main script file %1 for python job %2 is not readable. Glavna skriptna datoteka %1 za python zadatak %2 nije čitljiva. - + Boost.Python error in job "%1". Boost.Python greška u zadatku "%1". @@ -210,34 +238,39 @@ Calamares::QmlViewStep - + Loading ... Učitavanje ... - + QML Step <i>%1</i>. QML korak <i>%1</i>. - + Loading failed. Učitavanje nije uspjelo. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Provjera zahtjeva za modul <i>%1</i> je dovršena. + - + Waiting for %n module(s). - Čekam %1 modul(a). - Čekam %1 modul(a). - Čekam %1 modul(a). + Čekam %n modul(a). + Čekam %n modul(a). + Čekam %n modul(a). - + (%n second(s)) (%n sekunda(e)) @@ -246,7 +279,7 @@ - + System-requirements checking is complete. Provjera zahtjeva za instalaciju sustava je dovršena. @@ -254,247 +287,241 @@ Calamares::ViewManager - - &Back - &Natrag - - - - &Next - &Sljedeće - - - - &Cancel - &Odustani - - - - Cancel setup without changing the system. - Odustanite od instalacije bez promjena na sustavu. - - - - Cancel installation without changing the system. - Odustanite od instalacije bez promjena na sustavu. - - - + Setup Failed Instalacija nije uspjela - - Would you like to paste the install log to the web? - Želite li objaviti dnevnik instaliranja na web? + + Installation Failed + Instalacija nije uspjela - + + Error + Greška + + + + &Yes + &Da + + + + &No + &Ne + + + + &Close + &Zatvori + + + Install Log Paste URL URL za objavu dnevnika instaliranja - + The upload was unsuccessful. No web-paste was done. Objava dnevnika instaliranja na web nije uspjela. - + + Install log posted to + +%1 + +Link copied to clipboard + Instaliraj zapisnik objavljen na + +%1 + +Veza je kopirana u međuspremnik + + + Calamares Initialization Failed Inicijalizacija Calamares-a nije uspjela - + %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. %1 se ne može se instalirati. Calamares nije mogao učitati sve konfigurirane module. Ovo je problem s načinom na koji se Calamares koristi u distribuciji. - + <br/>The following modules could not be loaded: <br/>Sljedeći moduli se nisu mogli učitati: - + + Continue with setup? + Nastaviti s postavljanjem? + + + Continue with installation? Nastaviti sa instalacijom? - + 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> Instalacijski program %1 će izvršiti promjene na vašem disku kako bi postavio %2. <br/><strong>Ne možete poništiti te promjene.</strong> - + + 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> + %1 instalacijski program će napraviti promjene na disku kako bi instalirao %2.<br/><strong>Nećete moći vratiti te promjene.</strong> + + + &Set up now &Postaviti odmah - + + &Install now + &Instaliraj sada + + + + Go &back + Idi &natrag + + + &Set up &Postaviti - + &Install &Instaliraj - + Setup is complete. Close the setup program. Instalacija je završena. Zatvorite instalacijski program. - + + The installation is complete. Close the installer. + Instalacija je završena. Zatvorite instalacijski program. + + + + Cancel setup without changing the system. + Odustanite od instalacije bez promjena na sustavu. + + + + Cancel installation without changing the system. + Odustanite od instalacije bez promjena na sustavu. + + + + &Next + &Sljedeće + + + + &Back + &Natrag + + + + &Done + &Gotovo + + + + &Cancel + &Odustani + + + Cancel setup? Prekinuti instalaciju? - + Cancel installation? Prekinuti instalaciju? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Stvarno želite prekinuti instalacijski proces? Instalacijski program će izaći i sve promjene će biti izgubljene. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Stvarno želite prekinuti instalacijski proces? Instalacijski program će izaći i sve promjene će biti izgubljene. - - - - &Yes - &Da - - - - - &No - &Ne - - - - &Close - &Zatvori - - - - Continue with setup? - Nastaviti s postavljanjem? - - - - 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> - %1 instalacijski program će napraviti promjene na disku kako bi instalirao %2.<br/><strong>Nećete moći vratiti te promjene.</strong> - - - - &Install now - &Instaliraj sada - - - - Go &back - Idi &natrag - - - - &Done - &Gotovo - - - - The installation is complete. Close the installer. - Instalacija je završena. Zatvorite instalacijski program. - - - - Error - Greška - - - - Installation Failed - Instalacija nije uspjela - CalamaresPython::Helper - + Unknown exception type Nepoznati tip iznimke - + unparseable Python error unparseable Python greška - + unparseable Python traceback unparseable Python traceback - + Unfetchable Python error. Nedohvatljiva Python greška. - - CalamaresUtils - - - Install log posted to: -%1 - Dnevnik instaliranja je objavljen na: -%1 - - CalamaresWindow - - &Back - &Natrag - - - - &Next - &Sljedeće - - - - &Cancel - &Odustani - - - + %1 Setup Program %1 instalacijski program - + %1 Installer %1 Instalacijski program + + + ChangeFilesystemLabelJob - - Show debug information - Prikaži debug informaciju + + Set filesystem label on %1. + Postavi oznaku datotečnog sustava na %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Postavi oznaku datotečnog sustava <strong>%1</strong> na particiju <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Instalacijski program nije uspio nadograditi particijsku tablicu na disku '%1'. CheckerContainer - + Gathering system information... Skupljanje informacija o sustavu... @@ -502,157 +529,197 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. ChoicePage - + Form Oblik - - After: - Poslije: - - - - Boot loader location: - Lokacija boot učitavača: - - - + Select storage de&vice: Odaberi uređaj za spremanje: - - - - + + + + Current: Trenutni: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Ručno particioniranje</strong><br/>Možete sami kreirati ili promijeniti veličinu particija. Potrebno je imati GPT tablicu particija i <strong>FAT32 particiju /boot veličine 512MB za UEFI instalacije</strong>; moguće je koristiti postojeću ili stvoriti novu. + + After: + Poslije: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Ručno particioniranje</strong><br/>Možete sami stvoriti ili promijeniti veličine particija. + + + Reuse %1 as home partition for %2. Koristi %1 kao home particiju za %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Odaberite particiju za smanjivanje, te povlačenjem donjeg pokazivača odaberite promjenu veličine</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 će se smanjiti na %2MB i stvorit će se nova %3MB particija za %4. - + + Boot loader location: + Lokacija boot učitavača: + + + <strong>Select a partition to install on</strong> <strong>Odaberite particiju za instalaciju</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI particija ne postoji na ovom sustavu. Vratite se natrag i koristite ručno particioniranje da bi ste postavili %1. - + The EFI system partition at %1 will be used for starting %2. EFI particija na %1 će se koristiti za pokretanje %2. - + EFI system partition: EFI particija: - + 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. Izgleda da na ovom disku nema operacijskog sustava. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Obriši disk</strong><br/>To će <font color="red">obrisati</font> sve podatke na odabranom disku. - - 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. - Ovaj disk ima %1. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - - - - No Swap - Bez swap-a - - - - Reuse Swap - Iskoristi postojeći swap - - - - Swap (no Hibernate) - Swap (bez hibernacije) - - - - Swap (with Hibernate) - Swap (sa hibernacijom) - - - - Swap to file - Swap datoteka - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instaliraj uz postojeće</strong><br/>Instalacijski program će smanjiti particiju da bi napravio mjesto za %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zamijeni particiju</strong><br/>Zamijenjuje particiju sa %1. - + + 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. + Ovaj disk ima %1. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. + + + 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. Ovaj disk već ima operacijski sustav. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. - + 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. Ovaj disk ima više operacijskih sustava. Što želite učiniti?<br/>Moći ćete provjeriti i potvrditi vaš odabir prije bilo kakvih promjena na disku. + + + 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/> + Ovaj uređaj za pohranu već ima operativni sustav, ali njegova particijska tablica <strong>%1</strong> razlikuje se od potrebne <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Ovaj uređaj za pohranu ima <strong>montiranu</strong> jednu od particija. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Ovaj uređaj za pohranu je dio <strong>neaktivnog RAID</strong> uređaja. + + + + No Swap + Bez swap-a + + + + Reuse Swap + Iskoristi postojeći swap + + + + Swap (no Hibernate) + Swap (bez hibernacije) + + + + Swap (with Hibernate) + Swap (sa hibernacijom) + + + + Swap to file + Swap datoteka + ClearMountsJob - + + Successfully unmounted %1. + Uspješno demontiran %1. + + + + Successfully disabled swap %1. + Uspješno onemogućen swap %1. + + + + Successfully cleared swap %1. + Uspješno obrisan swap %1. + + + + Successfully closed mapper device %1. + Uspješno zatvoren device mapper %1. + + + + Successfully disabled volume group %1. + Volume grupa %1 je uspješno onemogućena. + + + Clear mounts for partitioning operations on %1 Ukloni montiranja za operacije s particijama na %1 - + Clearing mounts for partitioning operations on %1. Uklanjam montiranja za operacija s particijama na %1. - + Cleared all mounts for %1 Uklonjena sva montiranja za %1 @@ -660,22 +727,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. ClearTempMountsJob - + Clear all temporary mounts. Ukloni sva privremena montiranja. - + Clearing all temporary mounts. Uklanjam sva privremena montiranja. - - Cannot get list of temporary mounts. - Ne mogu dohvatiti popis privremenih montiranja. - - - + Cleared all temporary mounts. Uklonjena sva privremena montiranja. @@ -683,18 +745,18 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. CommandList - - + + Could not run command. Ne mogu pokrenuti naredbu. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Naredba se pokreće u okruženju domaćina i treba znati korijenski put, međutim, rootMountPoint nije definiran. - + The command needs to know the user's name, but no username is defined. Naredba treba znati ime korisnika, ali nije definirano korisničko ime. @@ -702,100 +764,235 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Ovo računalo ne zadovoljava minimalne zahtjeve za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ovo računalo ne zadovoljava minimalne uvijete za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Računalo ne zadovoljava neke od preporučenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke značajke možda neće biti dostupne. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Računalo ne zadovoljava neke od preporučenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke značajke možda neće biti dostupne. - - - - This program will ask you some questions and set up %2 on your computer. - Ovaj program će vam postaviti neka pitanja i instalirati %2 na vaše računalo. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Dobrodošli u Calamares instalacijski program za %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Dobrodošli u %1 instalacijski program.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - Dobrodošli u Calamares instalacijski program za %1. - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Dobrodošli u %1 instalacijski program.</h1> - - - + Set keyboard model to %1.<br/> Postavi model tipkovnice na %1.<br/> - + Set keyboard layout to %1/%2. Postavi raspored tipkovnice na %1%2. - + + Set timezone to %1/%2. + Postavi vremesku zonu na %1%2. + + + The system language will be set to %1. Jezik sustava će se postaviti na %1. - + The numbers and dates locale will be set to %1. - Jezična shema brojeva i datuma će se postaviti na %1. + Regionalne postavke brojeva i datuma će se postaviti na %1. - - Set timezone to %1/%2.<br/> - Postavi vremesku zonu na %1%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Mrežna instalacija. (Onemogućeno: Neispravna konfiguracija) - + Network Installation. (Disabled: Received invalid groups data) Mrežna instalacija. (Onemogućeno: Primanje nevažećih podataka o grupama) - - Network Installation. (Disabled: internal error) - Mrežna instalacija. (Onemogućeno: unutarnja pogreška) + + Network Installation. (Disabled: Internal error) + Mrežna instalacija. (Onemogućeno: Interna pogreška) - + + Network Installation. (Disabled: No package list) + Mrežna instalacija. (Onemogućeno: nedostaje lista paketa) + + + + Package selection + Odabir paketa + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Mrežna instalacija. (Onemogućeno: Ne mogu dohvatiti listu paketa, provjerite da li ste spojeni na mrežu) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Ovo računalo ne zadovoljava minimalne zahtjeve za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Ovo računalo ne zadovoljava minimalne uvijete za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Računalo ne zadovoljava neke od preporučenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke značajke možda neće biti dostupne. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Računalo ne zadovoljava neke od preporučenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke značajke možda neće biti dostupne. + + + + This program will ask you some questions and set up %2 on your computer. + Ovaj program će vam postaviti neka pitanja i instalirati %2 na vaše računalo. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Dobrodošli u Calamares instalacijski program za %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Dobrodošli u %1 instalacijski program</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Dobrodošli u Calamares instalacijski program za %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Dobrodošli u %1 instalacijski program</h1> + + + + Your username is too long. + Vaše korisničko ime je predugačko. + + + + '%1' is not allowed as username. + '%1' nije dopušteno kao korisničko ime. + + + + Your username must start with a lowercase letter or underscore. + Vaše korisničko ime mora započeti malim slovom ili donjom crtom. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Dopuštena su samo mala slova, brojevi, donja crta i crtica. + + + + Your hostname is too short. + Ime računala je kratko. + + + + Your hostname is too long. + Ime računala je predugačko. + + + + '%1' is not allowed as hostname. + '%1' nije dopušteno kao ime računala. + + + + Only letters, numbers, underscore and hyphen are allowed. + Dopuštena su samo slova, brojevi, donja crta i crtica. + + + + Your passwords do not match! + Lozinke se ne podudaraju! + + + + OK! + OK! + + + + Setup Failed + Instalacija nije uspjela + + + + Installation Failed + Instalacija nije uspjela + + + + The setup of %1 did not complete successfully. + Postavljanje %1 nije uspješno završilo. + + + + The installation of %1 did not complete successfully. + Instalacija %1 nije uspješno završila. + + + + Setup Complete + Instalacija je završena + + + + Installation Complete + Instalacija je završena + + + + The setup of %1 is complete. + Instalacija %1 je završena. + + + + The installation of %1 is complete. + Instalacija %1 je završena. + + + + Package Selection + Odabir paketa + + + + Please pick a product from the list. The selected product will be installed. + Molimo odaberite proizvod s popisa. Izabrani proizvod će biti instaliran. + + + + Install option: <strong>%1</strong> + Opcija instalacije: <strong>%1</strong> + + + + None + Nijedan + + + + Summary + Sažetak + + + + This is an overview of what will happen once you start the setup procedure. + Ovo je prikaz događaja koji će uslijediti jednom kad počne instalacijska procedura. + + + + This is an overview of what will happen once you start the install procedure. + Ovo je prikaz događaja koji će uslijediti jednom kad počne instalacijska procedura. + ContextualProcessJob - + Contextual Processes Job Posao kontekstualnih procesa @@ -803,100 +1000,136 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. CreatePartitionDialog - + Create a Partition Stvori particiju - - MiB - MiB - - - - Partition &Type: - Tip &particije: - - - - &Primary - &Primarno - - - - E&xtended - P&roduženo - - - - Fi&le System: - Da&totečni sustav: - - - - LVM LV name - LVM LV ime - - - - Flags: - Oznake: - - - - &Mount Point: - &Točke montiranja: - - - + Si&ze: Ve&ličina: - + + MiB + MiB + + + + Partition &Type: + Tip &particije: + + + + Primar&y + Primarn&i + + + + E&xtended + P&roduženo + + + + Fi&le System: + Da&totečni sustav: + + + + LVM LV name + LVM LV ime + + + + &Mount Point: + &Točke montiranja: + + + + Flags: + Oznake: + + + + Label for the filesystem + Oznaka za datotečni sustav + + + + FS Label: + Oznaka datotečnog sustava: + + + En&crypt Ši&friraj - + Logical Logično - + Primary Primarno - + GPT GPT - + Mountpoint already in use. Please select another one. Točka montiranja se već koristi. Odaberite drugu. + + + Mountpoint must start with a <tt>/</tt>. + Točka postavljanja mora početi s <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Stvori novu %1MiB particiju na %3 (%2) s unosima %4. + + + + Create new %1MiB partition on %3 (%2). + Stvori novu %1MiB particiju na %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Stvori novu %2MB particiju na %4 (%3) s datotečnim sustavom %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Stvori novu <strong>%1MiB</strong> particiju na <strong>%3</strong> (%2) sa unosima <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Stvori novu <strong>%1MiB</strong> particiju na <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Stvori novu <strong>%2MB</strong> particiju na <strong>%4</strong> (%3) s datotečnim sustavom <strong>%1</strong>. - + + Creating new %1 partition on %2. Stvaram novu %1 particiju na %2. - + The installer failed to create partition on disk '%1'. Instalacijski program nije uspio stvoriti particiju na disku '%1'. @@ -904,27 +1137,27 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. CreatePartitionTableDialog - + Create Partition Table Stvori particijsku tablicu - + Creating a new partition table will delete all existing data on the disk. Stvaranje nove particijske tablice će izbrisati postojeće podatke na disku. - + What kind of partition table do you want to create? Koju vrstu particijske tablice želite stvoriti? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -932,22 +1165,22 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. CreatePartitionTableJob - + Create new %1 partition table on %2. Stvori novu %1 particijsku tablicu na %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Stvori novu <strong>%1</strong> particijsku tablicu na <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Stvaram novu %1 particijsku tablicu na %2. - + The installer failed to create a partition table on %1. Instalacijski program nije uspio stvoriti particijsku tablicu na %1. @@ -955,45 +1188,41 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. CreateUserJob - + Create user %1 Stvori korisnika %1 - + Create user <strong>%1</strong>. Stvori korisnika <strong>%1</strong>. - - Creating user %1. - Stvaram korisnika %1. + + Preserving home directory + Očuvanje home direktorija - - Sudoers dir is not writable. - Po sudoers direktoriju nije moguće spremati. + + + Creating user %1 + Stvaram korisnika %1 - - Cannot create sudoers file for writing. - Ne mogu stvoriti sudoers datoteku za pisanje. + + Configuring user %1 + Konfiguriranje korisnika %1 - - Cannot chmod sudoers file. - Ne mogu chmod sudoers datoteku. - - - - Cannot open groups file for reading. - Ne mogu otvoriti groups datoteku za čitanje. + + Setting file permissions + Postavljanje dozvola za datoteke CreateVolumeGroupDialog - + Create Volume Group Stvori volume grupu @@ -1001,22 +1230,22 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. CreateVolumeGroupJob - + Create new volume group named %1. Stvori novu volume grupu pod nazivom %1. - + Create new volume group named <strong>%1</strong>. Stvori novu volume grupu pod nazivom <strong>%1</strong>. - + Creating new volume group named %1. Stvaram novu volume grupu pod nazivom %1. - + The installer failed to create a volume group named '%1'. Instalacijski program nije uspio stvoriti volume grupu pod nazivom '%1'. @@ -1024,18 +1253,18 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deaktiviraj volume grupu pod nazivom %1. - + Deactivate volume group named <strong>%1</strong>. Deaktiviraj volume grupu pod nazivom <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Instalacijski program nije uspio deaktivirati volume grupu pod nazivom %1. @@ -1043,22 +1272,22 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. DeletePartitionJob - + Delete partition %1. Obriši particiju %1. - + Delete partition <strong>%1</strong>. Obriši particiju <strong>%1</strong>. - + Deleting partition %1. Brišem particiju %1. - + The installer failed to delete partition %1. Instalacijski program nije uspio izbrisati particiju %1. @@ -1066,46 +1295,46 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. DeviceInfoWidget - - 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. - Tip <strong>particijske tablice</strong> na odabranom disku.<br><br>Jedini način da bi ste promijenili tip particijske tablice je da obrišete i iznova stvorite particijsku tablicu. To će uništiiti sve podatke na disku.<br>Instalacijski program će zadržati postojeću particijsku tablicu osim ako ne odaberete drugačije.<br>Ako niste sigurni, na novijim sustavima GPT je preporučena particijska tablica. - - - + This device has a <strong>%1</strong> partition table. Ovaj uređaj ima <strong>%1</strong> particijsku tablicu. - + 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. Ovo je <strong>loop</strong> uređaj.<br><br>To je pseudo uređaj koji nema particijsku tablicu koja omogučava pristup datotekama kao na block uređajima. Taj način postave obično sadrži samo jedan datotečni sustav. - + 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. Instalacijski program <strong>ne može detektirati particijsku tablicu</strong> na odabranom disku.<br><br>Uređaj ili nema particijsku tablicu ili je particijska tablica oštečena ili nepoznatog tipa.<br>Instalacijski program može stvoriti novu particijsku tablicu, ili automatski, ili kroz ručno particioniranje. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>To je preporučeni tip particijske tablice za moderne sustave koji se koristi za <strong> EFI </strong> boot okruženje. - + <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. <br><br>Ovaj oblik particijske tablice je preporučen samo za starije sustave počevši od <strong>BIOS</strong> boot okruženja. GPT je preporučen u većini ostalih slučaja. <br><br><strong>Upozorenje:</strong> MBR particijska tablica je zastarjela iz doba MS-DOS standarda.<br>Samo 4 <em>primarne</em> particije se mogu kreirati i od tih 4, jedna može biti <em>proširena</em> particija, koja može sadržavati mnogo <em>logičkih</em> particija. + + + 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. + Tip <strong>particijske tablice</strong> na odabranom disku.<br><br>Jedini način da bi ste promijenili tip particijske tablice je da obrišete i iznova stvorite particijsku tablicu. To će uništiiti sve podatke na disku.<br>Instalacijski program će zadržati postojeću particijsku tablicu osim ako ne odaberete drugačije.<br>Ako niste sigurni, na novijim sustavima GPT je preporučena particijska tablica. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1114,17 +1343,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Zapisujem LUKS konfiguraciju za Dracut na %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Preskačem pisanje LUKS konfiguracije za Dracut: "/" particija nije kriptirana - + Failed to open %1 Neuspješno otvaranje %1 @@ -1132,7 +1361,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. DummyCppJob - + Dummy C++ Job Lažni C++ posao @@ -1140,123 +1369,167 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. EditExistingPartitionDialog - + Edit Existing Partition Uredi postojeću particiju - - Content: - Sadržaj: + + Con&tent: + Sad&ržaj: - + &Keep &Zadrži - + Format Formatiraj - + Warning: Formatting the partition will erase all existing data. Upozorenje: Formatiranje particije će izbrisati sve postojeće podatke. - + &Mount Point: &Točka montiranja: - + Si&ze: Ve&ličina: - + MiB MiB - + Fi&le System: Da&totečni sustav: - + Flags: Oznake: - - Mountpoint already in use. Please select another one. - Točka montiranja se već koristi. Odaberite drugu. + + Label for the filesystem + Oznaka za datotečni sustav + + + + FS Label: + Oznaka datotečnog sustava: EncryptWidget - + Form Oblik - + En&crypt system Ši&friraj sustav - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Čini se da vaš sustav ne podržava enkripciju dovoljno dobro za šifriranje cijelog sustava. Možete omogućiti enkripciju, ali performanse mogu patiti. + + + Passphrase Lozinka - + Confirm passphrase Potvrdi lozinku - + + Please enter the same passphrase in both boxes. Molimo unesite istu lozinku u oba polja. + + ErrorDialog + + + Details: + Detalji: + + + + Would you like to paste the install log to the web? + Želite li objaviti dnevnik instaliranja na web? + + FillGlobalStorageJob - + Set partition information Postavi informacije o particiji - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Instaliraj %1 na <strong>novu</strong> %2 sistemsku particiju sa značajkama <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Instaliraj %1 na <strong>novu</strong> %2 sistemsku particiju. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Postavi <strong>novu</strong> %2 particiju s točkom montiranja <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Postavi <strong>novu</strong> %2 particiju s točkom montiranja <strong>%1</strong> i značajkama <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Postavi <strong>novu</strong> %2 particiju s točkom montiranja <strong>%1</strong> %3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Instaliraj %2 na %3 sistemsku particiju <strong>%1</strong> sa značajkama <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Postavi %3 particiju <strong>%1</strong> s točkom montiranja <strong>%2</strong> i značajkama <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Postavi %3 particiju <strong>%1</strong> s točkom montiranja <strong>%2</strong> %4. + + + Install %2 on %3 system partition <strong>%1</strong>. Instaliraj %2 na %3 sistemsku particiju <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Postavi %3 particiju <strong>%1</strong> s točkom montiranja <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instaliraj boot učitavač na <strong>%1</strong>. - + Setting up mount points. Postavljam točke montiranja. @@ -1264,93 +1537,81 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. FinishedPage - + Form Oblik - + &Restart now &Ponovno pokreni sada - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Gotovo.</h1><br/>%1 je instaliran na vaše računalo.<br/>Sada možete koristiti vaš novi sustav. - + <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> <html><head/><body><p>Kada je odabrana ova opcija, vaš sustav će se ponovno pokrenuti kada kliknete na <span style="font-style:italic;">Gotovo</span> ili zatvorite instalacijski program.</p></body></html> - + <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. <h1>Gotovo.</h1><br/>%1 je instaliran na vaše računalo.<br/>Sada možete ponovno pokrenuti računalo ili nastaviti sa korištenjem %2 live okruženja. - + <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> <html><head/><body><p>Kada je odabrana ova opcija, vaš sustav će se ponovno pokrenuti kada kliknete na <span style="font-style:italic;">Gotovo</span> ili zatvorite instalacijski program.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Instalacija nije uspijela</h1><br/>%1 nije instaliran na vaše računalo.<br/>Greška: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalacija nije uspijela</h1><br/>%1 nije instaliran na vaše računalo.<br/>Greška: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Završi + + + FinishedViewStep - - Setup Complete - Instalacija je završena - - - - Installation Complete - Instalacija je završena - - - - The setup of %1 is complete. - Instalacija %1 je završena. - - - - The installation of %1 is complete. - Instalacija %1 je završena. + + Finish + Završi FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatiraj particiju %1 (datotečni sustav: %2, veličina: %3 MB) na %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatiraj <strong>%3MB</strong>particiju <strong>%1</strong> na datotečni sustav <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatiraj particiju %1 na datotečni sustav %2. - + The installer failed to format partition %1 on disk '%2'. Instalacijski program nije uspio formatirati particiju %1 na disku '%2'. @@ -1358,72 +1619,72 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. GeneralRequirements - + has at least %1 GiB available drive space ima barem %1 GB dostupne slobodne memorije na disku - + There is not enough drive space. At least %1 GiB is required. Nema dovoljno prostora na disku. Potrebno je najmanje %1 GB. - + has at least %1 GiB working memory ima barem %1 GB radne memorije - + The system does not have enough working memory. At least %1 GiB is required. Ovaj sustav nema dovoljno radne memorije. Potrebno je najmanje %1 GB. - + is plugged in to a power source je spojeno na izvor struje - + The system is not plugged in to a power source. Ovaj sustav nije spojen na izvor struje. - + is connected to the Internet je spojeno na Internet - + The system is not connected to the Internet. Ovaj sustav nije spojen na internet. - + is running the installer as an administrator (root) pokreće instalacijski program kao administrator (root) - + The setup program is not running with administrator rights. Instalacijski program nije pokrenut sa administratorskim dozvolama. - + The installer is not running with administrator rights. Instalacijski program nije pokrenut sa administratorskim dozvolama. - + has a screen large enough to show the whole installer ima zaslon dovoljno velik da može prikazati cijeli instalacijski program - + The screen is too small to display the setup program. Zaslon je premalen za prikaz instalacijskog programa. - + The screen is too small to display the installer. Zaslon je premalen za prikaz instalacijskog programa. @@ -1431,7 +1692,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. HostInfoJob - + Collecting information about your machine. Prikupljanje podataka o vašem stroju. @@ -1439,25 +1700,25 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. IDJob - - + + + - OEM Batch Identifier OEM serijski identifikator - + Could not create directories <code>%1</code>. Nije moguće stvoriti direktorije <code>%1</code>. - + Could not open file <code>%1</code>. Nije moguće otvoriti datoteku <code>%1</code>. - + Could not write to file <code>%1</code>. Nije moguće pisati u datoteku <code>%1</code>. @@ -1465,7 +1726,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. InitcpioJob - + Creating initramfs with mkinitcpio. Stvaranje initramfs s mkinitcpio. @@ -1473,7 +1734,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. InitramfsJob - + Creating initramfs. Stvaranje initramfs. @@ -1481,17 +1742,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. InteractiveTerminalPage - + Konsole not installed Terminal nije instaliran - + Please install KDE Konsole and try again! Molimo vas da instalirate KDE terminal i pokušajte ponovno! - + Executing script: &nbsp;<code>%1</code> Izvršavam skriptu: &nbsp;<code>%1</code> @@ -1499,28 +1760,15 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. InteractiveTerminalViewStep - + Script Skripta - - KeyboardPage - - - Set keyboard model to %1.<br/> - Postavi model tipkovnice na %1.<br/> - - - - Set keyboard layout to %1/%2. - Postavi raspored tipkovnice na %1%2. - - KeyboardQmlViewStep - + Keyboard Tipkovnica @@ -1528,7 +1776,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. KeyboardViewStep - + Keyboard Tipkovnica @@ -1536,65 +1784,88 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. LCLocaleDialog - + System locale setting - Postavke jezične sheme sustava + Regionalne postavke sustava - + 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>. - Jezična shema sustava ima efekt na jezični i znakovni skup za neke komandno linijske elemente sučelja.<br/>Trenutačna postavka je <strong>%1</strong>. + Regionalne postavke sustava imaju efekt na jezični i znakovni skup za neke elemente korisničkog sučelja naredbenog retka.<br/>Trenutne postavke su <strong>%1</strong>. - + &Cancel &Odustani - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Konfiguriranje šifriranog swapa. + + + + No target system available. + Ciljni sustav nije dostupan. + + + + No rootMountPoint is set. + Nije postavljen rootMountPoint. + + + + No configFilePath is set. + ConfigFilePath nije postavljen. + + LicensePage - + Form Oblik - + <h1>License Agreement</h1> <h1>Licencni ugovor</h1> - + I accept the terms and conditions above. Prihvaćam gore navedene uvjete i odredbe. - + Please review the End User License Agreements (EULAs). Pregledajte Ugovore o licenci za krajnjeg korisnika (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. U ovom postupku postavljanja instalirat će se vlasnički softver koji podliježe uvjetima licenciranja. - + If you do not agree with the terms, the setup procedure cannot continue. Ako se ne slažete sa uvjetima, postupak postavljanja ne može se nastaviti. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Ovaj postupak postavljanja može instalirati vlasnički softver koji podliježe uvjetima licenciranja kako bi se pružile dodatne značajke i poboljšalo korisničko iskustvo. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ako se ne slažete s uvjetima, vlasnički softver neće biti instaliran, a umjesto njega će se koristiti alternative otvorenog koda. @@ -1602,7 +1873,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. LicenseViewStep - + License Licence @@ -1610,109 +1881,102 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 upravljački program</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafički upravljački program</strong><br/><font color="Grey">od %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 dodatak preglednika</strong><br/><font color="Grey">od %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">od %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paket</strong><br/><font color="Grey">od %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">od %2</font> - + File: %1 Datoteka: %1 - + + Hide license text + Sakrij tekst licence + + + Show the license text Prikaži tekst licence - + Open license agreement in browser. Otvori licencni ugovor u pregledniku. - - - Hide license text - Sakrij tekst licence - LocalePage - - The system language will be set to %1. - Jezik sustava će se postaviti na %1. - - - - The numbers and dates locale will be set to %1. - Jezična shema brojeva i datuma će se postaviti na %1. - - - + Region: Regija: - + Zone: Zona: - - + + &Change... &Promijeni... - - - Set timezone to %1/%2.<br/> - Postavi vremesku zonu na %1%2.<br/> - LocaleQmlViewStep - + Location Lokacija + + LocaleTests + + + Quit + izađi + + LocaleViewStep - + Location Lokacija @@ -1720,35 +1984,35 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. LuksBootKeyFileJob - + Configuring LUKS key file. Konfiguriranje LUKS ključne datoteke. - - + + No partitions are defined. Nema definiranih particija. - - - + + + Encrypted rootfs setup error Pogreška postavljanja šifriranog rootfs-a - + Root partition %1 is LUKS but no passphrase has been set. Root particija %1 je LUKS, ali nije postavljena zaporka. - + Could not create LUKS key file for root partition %1. Nije moguće kreirati LUKS ključnu datoteku za root particiju %1. - + Could not configure LUKS key file on partition %1. Nije moguće konfigurirati datoteku LUKS ključevima na particiji %1. @@ -1756,124 +2020,140 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. MachineIdJob - + Generate machine-id. Generiraj ID računala. - + Configuration Error Greška konfiguracije - + No root mount point is set for MachineId. Nijedna točka montiranja nije postavljena za MachineId. + + Map + + + Timezone: %1 + Vremenska zona: %1 + + + + 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. + Odaberite željenu lokaciju na karti da bi instalacijski program predložio regiju +i postavke vremenske zone za vas. Možete doraditi predložene postavke u nastavku. Kartu pretražujete pomicanjem miša +te korištenjem tipki +/- ili skrolanjem miša za zumiranje. + + NetInstallViewStep - - + Package selection Odabir paketa - + Office software Uredski softver - + Office package Uredski paket - + Browser software Preglednici - + Browser package Paket preglednika - + Web browser Web preglednik - + Kernel Kernel - + Services Servisi - + Login Prijava - + Desktop Radna površina - + Applications Aplikacije - + Communication - + Komunikacija - + Development - + Razvoj - + Office - + Ured - + Multimedia - + Multimedija - + Internet - + Internet - + Theming - + Izgled - + Gaming - + Igranje - + Utilities - + Alati NotesQmlViewStep - + Notes Bilješke @@ -1881,17 +2161,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. OEMPage - + Ba&tch: Se&rija: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Ovdje unesite identifikator serije. To će biti pohranjeno u ciljnom sustavu.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM konfiguracija</h1><p>Calamares će koristiti OEM postavke tijekom konfiguriranja ciljnog sustava.</p></body></html> @@ -1899,260 +2179,326 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. OEMViewStep - + OEM Configuration OEM konfiguracija - + Set the OEM Batch Identifier to <code>%1</code>. Postavite OEM identifikator serije na <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Odaberite željenu regiju ili upotrijebite zadane postavke. + + + + + + Timezone: %1 + Vremenska zona: %1 + + + + Select your preferred Zone within your Region. + Odaberite željenu zonu unutar svoje regije. + + + + Zones + Zone + + + + You can fine-tune Language and Locale settings below. + Dolje možete fino prilagoditi postavke jezika i regionalne postavke. + + PWQ - + Password is too short Lozinka je prekratka - + Password is too long Lozinka je preduga - + Password is too weak Lozinka je preslaba - + Memory allocation error when setting '%1' Pogreška u dodjeli memorije prilikom postavljanja '%1' - + Memory allocation error Pogreška u dodjeli memorije - + The password is the same as the old one Lozinka je ista prethodnoj - + The password is a palindrome Lozinka je palindrom - + The password differs with case changes only Lozinka se razlikuje samo u promjenama velikog i malog slova - + The password is too similar to the old one Lozinka je slična prethodnoj - + The password contains the user name in some form Lozinka u nekoj formi sadrži korisničko ime - + The password contains words from the real name of the user in some form Lozinka u nekoj formi sadrži stvarno ime korisnika - + The password contains forbidden words in some form Lozinka u nekoj formi sadrži zabranjene rijeći - - The password contains less than %1 digits - Lozinka sadrži manje od %1 brojeva - - - + The password contains too few digits Lozinka sadrži premalo brojeva - - The password contains less than %1 uppercase letters - Lozinka sadrži manje od %1 velikih slova - - - + The password contains too few uppercase letters Lozinka sadrži premalo velikih slova - - - The password contains less than %1 lowercase letters - Lozinka sadrži manje od %1 malih slova + + + The password contains fewer than %n lowercase letters + + Lozinka sadrži manje od %n malog slova + Lozinka sadrži manje od %n malih slova + Lozinka sadrži manje od %n malih slova + - + The password contains too few lowercase letters Lozinka sadrži premalo malih slova - - The password contains less than %1 non-alphanumeric characters - Lozinka sadrži manje od %1 ne-alfanumeričkih znakova. - - - + The password contains too few non-alphanumeric characters Lozinka sadrži premalo ne-alfanumeričkih znakova - - The password is shorter than %1 characters - Lozinka je kraća od %1 znakova - - - + The password is too short Lozinka je prekratka - - The password is just rotated old one - Lozinka je jednaka rotiranoj prethodnoj - - - - The password contains less than %1 character classes - Lozinka sadrži manje od %1 razreda znakova - - - + The password does not contain enough character classes Lozinka ne sadrži dovoljno razreda znakova - - The password contains more than %1 same characters consecutively - Lozinka sadrži više od %1 uzastopnih znakova - - - + The password contains too many same characters consecutively Lozinka sadrži previše uzastopnih znakova - - The password contains more than %1 characters of the same class consecutively - Lozinka sadrži više od %1 uzastopnih znakova iz istog razreda - - - + The password contains too many characters of the same class consecutively Lozinka sadrži previše uzastopnih znakova iz istog razreda - - - The password contains monotonic sequence longer than %1 characters - Lozinka sadrži monotonu sekvencu dužu od %1 znakova + + + The password contains fewer than %n digits + + Lozinka sadrži manje od %n znaka + Lozinka sadrži manje od %n znakova + Lozinka sadrži manje od %n znakova + + + + + The password contains fewer than %n uppercase letters + + Lozinka sadrži manje od %n velikog slova + Lozinka sadrži manje od %n velikih slova + Lozinka sadrži manje od %n velikih slova + + + + + The password contains fewer than %n non-alphanumeric characters + + Lozinka sadrži manje od %n ne-alfanumeričkog znaka + Lozinka sadrži manje od %n ne-alfanumeričkih znakova + Lozinka sadrži manje od %n ne-alfanumeričkih znakova + + + + + The password is shorter than %n characters + + Lozinka je kraća od %n znaka + Lozinka je kraća od %n znakova + Lozinka je kraća od %n znakova + - + + The password is a rotated version of the previous one + Lozinka je rotirana verzija prethodne + + + + The password contains fewer than %n character classes + + Lozinka sadrži manje od %n razreda znakova + Lozinka sadrži manje od %n razreda znakova + Lozinka sadrži manje od %n razreda znakova + + + + + The password contains more than %n same characters consecutively + + Lozinka sadrži više od %n uzastopnog znaka + Lozinka sadrži više od %n uzastopnih znakova + Lozinka sadrži više od %n uzastopnih znakova + + + + + The password contains more than %n characters of the same class consecutively + + Lozinka sadrži više od %n uzastopnog znaka iz istog razreda + Lozinka sadrži više od %n uzastopnih znakova iz istog razreda + Lozinka sadrži više od %n uzastopnih znakova iz istog razreda + + + + + The password contains monotonic sequence longer than %n characters + + Lozinka sadrži monotonu sekvencu dužu od %n znaka + Lozinka sadrži monotonu sekvencu dužu od %n znakova + Lozinka sadrži monotonu sekvencu dužu od %n znakova + + + + The password contains too long of a monotonic character sequence Lozinka sadrži previše monotonu sekvencu znakova - + No password supplied Nema isporučene lozinke - + Cannot obtain random numbers from the RNG device Ne mogu dobiti slučajne brojeve od RNG uređaja - + Password generation failed - required entropy too low for settings Generiranje lozinke nije uspjelo - potrebna entropija je premala za postavke - + The password fails the dictionary check - %1 Nije uspjela provjera rječnika za lozinku - %1 - + The password fails the dictionary check Nije uspjela provjera rječnika za lozinku - + Unknown setting - %1 Nepoznate postavke - %1 - + Unknown setting Nepoznate postavke - + Bad integer value of setting - %1 Loša cjelobrojna vrijednost postavke - %1 - + Bad integer value Loša cjelobrojna vrijednost - + Setting %1 is not of integer type Postavka %1 nije cjelobrojnog tipa - + Setting is not of integer type Postavka nije cjelobrojnog tipa - + Setting %1 is not of string type Postavka %1 nije tipa znakovnog niza - + Setting is not of string type Postavka nije tipa znakovnog niza - + Opening the configuration file failed Nije uspjelo otvaranje konfiguracijske datoteke - + The configuration file is malformed Konfiguracijska datoteka je oštećena - + Fatal failure Fatalna pogreška - + Unknown error Nepoznata greška - + Password is empty Lozinka je prazna @@ -2160,40 +2506,48 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PackageChooserPage - + Form Oblik - + Product Name Ime proizvoda - + TextLabel OznakaTeksta - + Long Product Description Dugi opis proizvoda - + Package Selection Odabir paketa - + Please pick a product from the list. The selected product will be installed. Molimo odaberite proizvod s popisa. Izabrani proizvod će biti instaliran. + + PackageChooserQmlViewStep + + + Packages + Paketi + + PackageChooserViewStep - + Packages Paketi @@ -2201,12 +2555,12 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PackageModel - + Name Ime - + Description Opis @@ -2214,17 +2568,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. Page_Keyboard - + Form Oblik - + Keyboard Model: Tip tipkovnice: - + Type here to test your keyboard Ovdje testiraj tipkovnicu @@ -2232,96 +2586,96 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. Page_UserSetup - + Form Oblik - + What is your name? Koje je tvoje ime? - - What name do you want to use to log in? - Koje ime želite koristiti za prijavu? - - - - Choose a password to keep your account safe. - Odaberite lozinku da bi račun bio siguran. - - - - - <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> - <small>Unesite istu lozinku dvaput, tako da bi se provjerile eventualne pogreške prilikom upisa. Dobra lozinka sadrži kombinaciju slova, brojki i interpunkcija, trebala bi biti dugačka najmanje osam znakova i trebala bi se mijenjati u redovitim intervalima.</small> - - - - What is the name of this computer? - Koje je ime ovog računala? - - - + Your Full Name Vaše puno ime - + + What name do you want to use to log in? + Koje ime želite koristiti za prijavu? + + + login prijava - + + What is the name of this computer? + Koje je ime ovog računala? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ovo ime će se koristiti ako odaberete da je računalo vidljivo ostalim korisnicima na mreži.</small> - + Computer Name Ime računala - - + + Choose a password to keep your account safe. + Odaberite lozinku da bi račun bio siguran. + + + + + <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> + <small>Unesite istu lozinku dvaput, tako da bi se provjerile eventualne pogreške prilikom upisa. Dobra lozinka sadrži kombinaciju slova, brojki i interpunkcija, trebala bi biti dugačka najmanje osam znakova i trebala bi se mijenjati u redovitim intervalima.</small> + + + + Password Lozinka - - + + Repeat Password Ponovite lozinku - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kad je ovaj okvir potvrđen, bit će napravljena provjera jakosti lozinke te nećete moći koristiti slabu lozinku. - + Require strong passwords. Zahtijeva snažne lozinke. - + Log in automatically without asking for the password. Automatska prijava bez traženja lozinke. - + Use the same password for the administrator account. Koristi istu lozinku za administratorski račun. - + Choose a password for the administrator account. Odaberi lozinku za administratorski račun. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Unesite istu lozinku dvaput, tako da bi se provjerile eventualne pogreške prilikom upisa.</small> @@ -2329,42 +2683,42 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI sustav - + Swap Swap - + New partition for %1 Nova particija za %1 - + New partition Nova particija - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2373,34 +2727,39 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PartitionModel - - + + Free Space Slobodni prostor - - + + New partition Nova particija - + Name Ime - + File System Datotečni sustav - + + File System Label + Oznaka datotečnog sustava + + + Mount Point Točka montiranja - + Size Veličina @@ -2408,77 +2767,77 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PartitionPage - + Form Oblik - + Storage de&vice: Uređaj za sp&remanje: - + &Revert All Changes &Poništi sve promjene - + New Partition &Table Nova particijska &tablica - + Cre&ate Kre&iraj - + &Edit &Uredi - + &Delete &Izbriši - + New Volume Group Nova volume grupa - + Resize Volume Group Promijenite veličinu volume grupe - + Deactivate Volume Group Deaktiviraj volume grupu - + Remove Volume Group Ukloni volume grupu - + I&nstall boot loader on: I&nstaliraj boot učitavač na: - + Are you sure you want to create a new partition table on %1? Jeste li sigurni da želite stvoriti novu particijsku tablicu na %1? - + Can not create new partition Ne mogu stvoriti novu particiju - + 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. Particijska tablica %1 već ima %2 primarne particije i nove se više ne mogu dodati. Molimo vas da uklonite jednu primarnu particiju i umjesto nje dodate proširenu particiju. @@ -2486,117 +2845,107 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PartitionViewStep - + Gathering system information... Skupljanje informacija o sustavu... - + Partitions Particije - - Install %1 <strong>alongside</strong> another operating system. - Instaliraj %1 <strong>uz postojeći</strong> operacijski sustav. + + Unsafe partition actions are enabled. + Nesigurne radnje na particijama su omogućene. - - <strong>Erase</strong> disk and install %1. - <strong>Obriši</strong> disk i instaliraj %1. + + Partitioning is configured to <b>always</b> fail. + Particioniranje je konfigurirano tako da <b>uvijek</b> ne uspije. - - <strong>Replace</strong> a partition with %1. - <strong>Zamijeni</strong> particiju s %1. + + No partitions will be changed. + Nijedna particija neće biti promijenjena. - - <strong>Manual</strong> partitioning. - <strong>Ručno</strong> particioniranje. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instaliraj %1 <strong>uz postojeći</strong> operacijski sustav na disku <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Obriši</strong> disk <strong>%2</strong> (%3) i instaliraj %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Zamijeni</strong> particiju na disku <strong>%2</strong> (%3) s %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Ručno</strong> particioniram disk <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Trenutni: - + After: Poslije: - + No EFI system partition configured EFI particija nije konfigurirana - - 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>esp</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. - EFI particija je potrebna za pokretanje %1.<br/><br/>Da bi ste konfigurirali EFI particiju, idite natrag i odaberite ili stvorite FAT32 datotečni sustav s omogućenom <strong>esp</strong> oznakom i točkom montiranja <strong>%2</strong>.<br/><br/>Možete nastaviti bez postavljanja EFI particije, ali vaš sustav se možda neće moći pokrenuti. + + EFI system partition configured incorrectly + EFI particija nije ispravno konfigurirana - - EFI system partition flag not set - Oznaka EFI particije nije postavljena + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Za pokretanje %1 potrebna je EFI particija. <br/><br/>Za konfiguriranje EFI sistemske particije, vratite se i odaberite ili kreirajte odgovarajući datotečni sustav. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - EFI particija je potrebna za pokretanje %1.<br><br/>Particija je konfigurirana s točkom montiranja <strong>%2</strong> ali njezina <strong>esp</strong> oznaka nije postavljena.<br/>Za postavljanje oznake, vratite se i uredite postavke particije.<br/><br/>Možete nastaviti bez postavljanja oznake, ali vaš sustav se možda neće moći pokrenuti. + + The filesystem must be mounted on <strong>%1</strong>. + Datotečni sustav mora biti montiran na <strong>%1</strong>. - + + The filesystem must have type FAT32. + Datotečni sustav mora biti FAT32. + + + + The filesystem must be at least %1 MiB in size. + Datotečni sustav mora biti veličine od najmanje %1 MiB. + + + + The filesystem must have flag <strong>%1</strong> set. + Datotečni sustav mora imati postavljenu oznaku <strong>%1</strong>. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Možete nastaviti bez postavljanja EFI particije, ali vaš se sustav možda neće pokrenuti. + + + Option to use GPT on BIOS Mogućnost korištenja GPT-a na BIOS-u - - 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. - GPT tablica particija je najbolja opcija za sve sustave. Ovaj instalacijski program podržava takvo postavljanje i za BIOS sustave. <br/><br/>Da biste konfigurirali GPT particijsku tablicu za BIOS sustave, (ako to već nije učinjeno) vratite se natrag i postavite particijsku tablicu na GPT, a zatim stvorite neformatiranu particiju od 8 MB s omogućenom zastavicom <strong>bios_grub</strong>. <br/><br/>Neformirana particija od 8 MB potrebna je za pokretanje %1 na BIOS sustavu s GPT-om. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT tablica particija je najbolja opcija za sve sustave. Ovaj instalacijski program podržava takvo postavljanje i za BIOS sustave. <br/><br/>Da biste konfigurirali GPT particijsku tablicu za BIOS sustave, (ako to već nije učinjeno) vratite se natrag i postavite particijsku tablicu na GPT, a zatim stvorite neformatiranu particiju od 8 MB s omogućenom oznakom <strong>%2</strong>. <br/><br/>Neformirana particija od 8 MB potrebna je za pokretanje %1 na BIOS sustavu s GPT-om. - + Boot partition not encrypted Boot particija nije kriptirana - + 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. Odvojena boot particija je postavljena zajedno s kriptiranom root particijom, ali boot particija nije kriptirana.<br/><br/>Zabrinuti smo za vašu sigurnost jer su važne datoteke sustava na nekriptiranoj particiji.<br/>Možete nastaviti ako želite, ali datotečni sustav će se otključati kasnije tijekom pokretanja sustava.<br/>Da bi ste kriptirali boot particiju, vratite se natrag i napravite ju, odabirom opcije <strong>Kriptiraj</strong> u prozoru za stvaranje prarticije. - + has at least one disk device available. ima barem jedan disk dostupan. - + There are no partitions to install on. Ne postoje particije na koje bi se instalirao sustav. @@ -2604,13 +2953,13 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PlasmaLnfJob - + Plasma Look-and-Feel Job Posao plasma izgleda - - + + Could not select KDE Plasma Look-and-Feel package Ne mogu odabrati paket KDE Plasma izgled @@ -2618,17 +2967,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PlasmaLnfPage - + Form Oblik - + 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. Odaberite izgled KDE Plasme. Možete također preskočiti ovaj korak i konfigurirati izgled jednom kada sustav bude instaliran. Odabirom izgleda dobit ćete pregled uživo tog izgleda. - + 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. Odaberite izgled KDE Plasme. Možete također preskočiti ovaj korak i konfigurirati izgled jednom kada sustav bude instaliran. Odabirom izgleda dobit ćete pregled uživo tog izgleda. @@ -2636,7 +2985,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PlasmaLnfViewStep - + Look-and-Feel Izgled @@ -2644,17 +2993,17 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. PreserveFiles - + Saving files for later ... Spremanje datoteka za kasnije ... - + No files configured to save for later. Nema datoteka konfiguriranih za spremanje za kasnije. - + Not all of the configured files could be preserved. Nije moguće sačuvati sve konfigurirane datoteke. @@ -2662,14 +3011,14 @@ Instalacijski program će izaći i sve promjene će biti izgubljene. ProcessResult - + There was no output from the command. Nema izlazne informacije od naredbe. - + Output: @@ -2678,52 +3027,52 @@ Izlaz: - + External command crashed. Vanjska naredba je prekinula s radom. - + Command <i>%1</i> crashed. Naredba <i>%1</i> je prekinula s radom. - + External command failed to start. Vanjska naredba nije uspješno pokrenuta. - + Command <i>%1</i> failed to start. Naredba <i>%1</i> nije uspješno pokrenuta. - + Internal error when starting command. Unutrašnja greška pri pokretanju naredbe. - + Bad parameters for process job call. Krivi parametri za proces poziva posla. - + External command failed to finish. Vanjska naredba se nije uspjela izvršiti. - + Command <i>%1</i> failed to finish in %2 seconds. Naredba <i>%1</i> nije uspjela završiti za %2 sekundi. - + External command finished with errors. Vanjska naredba je završila sa pogreškama. - + Command <i>%1</i> finished with exit code %2. Naredba <i>%1</i> je završila sa izlaznim kodom %2. @@ -2731,89 +3080,95 @@ Izlaz: QObject - - Default Keyboard Model - Zadani oblik tipkovnice - - - - - Default - Zadano - - - - unknown - nepoznato - - - - extended - prošireno - - - - unformatted - nije formatirano - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Ne particionirani prostor ili nepoznata particijska tablica - - - - (no mount point) - (nema točke montiranja) - - - - Requirements checking for module <i>%1</i> is complete. - Provjera zahtjeva za modul <i>%1</i> je dovršena. - - - + %1 (%2) %1 (%2) - - No product - Nema proizvoda + + unknown + nepoznato - - No description provided. - Nije naveden opis. + + extended + prošireno - - - - + + unformatted + nije formatirano + + + + swap + swap + + + + + Default + Zadano + + + + + + File not found Datoteka nije pronađena - + Path <pre>%1</pre> must be an absolute path. Putanja <pre>%1</pre> mora biti apsolutna putanja. - + + Directory not found + Direktorij nije pronađen + + + + Could not create new random file <pre>%1</pre>. Ne mogu stvoriti slučajnu datoteku <pre>%1</pre>. + + + No product + Nema proizvoda + + + + No description provided. + Nije naveden opis. + + + + (no mount point) + (nema točke montiranja) + + + + Unpartitioned space or unknown partition table + Ne particionirani prostor ili nepoznata particijska tablica + + + + Recommended + + + <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> + <p>Ovo računalo ne zadovoljava neke preporučene zahtjeve za instalaciju %1.<br/> +Postavljanje se može nastaviti, ali neke će značajke možda biti onemogućene.</p> + RemoveUserJob - + Remove live user from target system Uklonite live korisnika iz ciljnog sustava @@ -2821,18 +3176,18 @@ Izlaz: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Ukloni volume grupu pod nazivom %1. - + Remove Volume Group named <strong>%1</strong>. Ukloni volume grupu pod nazivom <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Instalacijski program nije uspio ukloniti volume grupu pod nazivom '%1'. @@ -2840,143 +3195,160 @@ Izlaz: ReplaceWidget - + Form Oblik - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Odaberite gdje želite instalirati %1.<br/><font color="red">Upozorenje: </font>to će obrisati sve datoteke na odabranoj particiji. - + The selected item does not appear to be a valid partition. Odabrana stavka se ne ćini kao ispravna particija. - + %1 cannot be installed on empty space. Please select an existing partition. %1 ne može biti instaliran na prazni prostor. Odaberite postojeću particiju. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 se ne može instalirati na proširenu particiju. Odaberite postojeću primarnu ili logičku particiju. - + %1 cannot be installed on this partition. %1 se ne može instalirati na ovu particiju. - + Data partition (%1) Podatkovna particija (%1) - + Unknown system partition (%1) Nepoznata particija sustava (%1) - + %1 system partition (%2) %1 particija sustava (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Particija %1 je premala za %2. Odaberite particiju kapaciteta od najmanje %3 GiB. - + <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. - <strong>%2</strong><br/><br/>EFI particijane postoji na ovom sustavu. Vratite se natrag i koristite ručno particioniranje za postavljane %1. + <strong>%2</strong><br/><br/>EFI particija ne postoji na ovom sustavu. Vratite se natrag i koristite ručno particioniranje za postavljane %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 će biti instaliran na %2.<br/><font color="red">Upozorenje: </font>svi podaci na particiji %2 će biti izgubljeni. - + The EFI system partition at %1 will be used for starting %2. EFI particija na %1 će se koristiti za pokretanje %2. - + EFI system partition: EFI particija: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Ovo računalo ne zadovoljava minimalne zahtjeve za instalaciju %1.<br/> +Instalacija se ne može nastaviti.</p> + + + + <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> + <p>Ovo računalo ne zadovoljava neke preporučene zahtjeve za postavljanje %1.<br/> +Postavljanje se može nastaviti, ali neke će značajke možda biti onemogućene.</p> + + ResizeFSJob - + Resize Filesystem Job Promjena veličine datotečnog sustava - + Invalid configuration Nevažeća konfiguracija - + The file-system resize job has an invalid configuration and will not run. Promjena veličine datotečnog sustava ima nevažeću konfiguraciju i neće se pokrenuti. - + KPMCore not Available KPMCore nije dostupan - + Calamares cannot start KPMCore for the file-system resize job. Calamares ne može pokrenuti KPMCore za promjenu veličine datotečnog sustava. - - - - - + + + + + Resize Failed Promjena veličine nije uspjela - + The filesystem %1 could not be found in this system, and cannot be resized. - Datotečni sustav % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. + Datotečni sustav %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. - + The device %1 could not be found in this system, and cannot be resized. - Uređaj % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. + Uređaj %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. - - + + The filesystem %1 cannot be resized. Datotečnom sustavu %1 se ne može promijeniti veličina. - - + + The device %1 cannot be resized. Uređaju %1 se ne može promijeniti veličina. - + The filesystem %1 must be resized, but cannot. Datotečnom sustavu %1 se ne može promijeniti veličina iako bi se trebala. - + The device %1 must be resized, but cannot Uređaju %1 se ne može promijeniti veličina iako bi se trebala. @@ -2984,22 +3356,22 @@ Izlaz: ResizePartitionJob - + Resize partition %1. Promijeni veličinu particije %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Promijeni veličinu od <strong>%2MB</strong> particije <strong>%1</strong> na <strong>%3MB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Mijenjam veličinu od %2MB particije %1 na %3MB. - + The installer failed to resize partition %1 on disk '%2'. Instalacijski program nije uspio promijeniti veličinu particije %1 na disku '%2'. @@ -3007,7 +3379,7 @@ Izlaz: ResizeVolumeGroupDialog - + Resize Volume Group Promijenite veličinu volume grupe @@ -3015,18 +3387,18 @@ Izlaz: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Promijeni veličinu volume grupi pod nazivom %1 sa %2 na %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Promijeni veličinu volume grupi pod nazivom <strong>%1</strong> sa <strong>%2</strong> na <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Instalacijski program nije uspio promijeniti veličinu volume grupi pod nazivom '%1'. @@ -3034,53 +3406,25 @@ Izlaz: ResultsListDialog - + For best results, please ensure that this computer: Za najbolje rezultate, pobrinite se da ovo računalo: - + System requirements Zahtjevi sustava - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Ovo računalo ne zadovoljava minimalne zahtjeve za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ovo računalo ne zadovoljava minimalne uvijete za instalaciju %1.<br/>Instalacija se ne može nastaviti.<a href="#details">Detalji...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Računalo ne zadovoljava neke od preporučenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke značajke možda neće biti dostupne. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Računalo ne zadovoljava neke od preporučenih uvjeta za instalaciju %1.<br/>Instalacija se može nastaviti, ali neke značajke možda neće biti dostupne. - - - - This program will ask you some questions and set up %2 on your computer. - Ovaj program će vam postaviti neka pitanja i instalirati %2 na vaše računalo. - - ScanningDialog - + Scanning storage devices... Tražim dostupne uređaje za spremanje... - + Partitioning Particioniram @@ -3088,29 +3432,29 @@ Izlaz: SetHostNameJob - + Set hostname %1 Postavi ime računala %1 - + Set hostname <strong>%1</strong>. Postavi ime računala <strong>%1</strong>. - + Setting hostname %1. Postavljam ime računala %1. + - Internal Error Unutarnja pogreška - - + + Cannot write hostname to target system Ne mogu zapisati ime računala na ciljni sustav. @@ -3118,29 +3462,29 @@ Izlaz: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Postavi model tpkovnice na %1, raspored na %2-%3 - + Failed to write keyboard configuration for the virtual console. Neuspješno pisanje konfiguracije tipkovnice za virtualnu konzolu. - - - + + + Failed to write to %1 Neuspješno pisanje na %1 - + Failed to write keyboard configuration for X11. Neuspješno pisanje konfiguracije tipkovnice za X11. - + Failed to write keyboard configuration to existing /etc/default directory. Neuspješno pisanje konfiguracije tipkovnice u postojeći /etc/default direktorij. @@ -3148,82 +3492,82 @@ Izlaz: SetPartFlagsJob - + Set flags on partition %1. Postavi oznake na particiji %1. - + Set flags on %1MiB %2 partition. Postavi oznake na %1MB %2 particiji. - + Set flags on new partition. Postavi oznake na novoj particiji. - + Clear flags on partition <strong>%1</strong>. Obriši oznake na particiji <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Obriši oznake na %1MB <strong>%2</strong> particiji. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Označi %1MB <strong>%2</strong> particiju kao <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Brišem oznake na %1MB <strong>%2</strong> particiji. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Postavljam oznake <strong>%3</strong> na %1MB <strong>%2</strong> particiji. - - - + Clear flags on new partition. Obriši oznake na novoj particiji. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Označi particiju <strong>%1</strong> kao <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Označi %1MB <strong>%2</strong> particiju kao <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Označi novu particiju kao <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Brišem oznake na particiji <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Brišem oznake na %1MB <strong>%2</strong> particiji. + + + Clearing flags on new partition. Brišem oznake na novoj particiji. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Postavljam oznake <strong>%2</strong> na particiji <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Postavljam oznake <strong>%3</strong> na %1MB <strong>%2</strong> particiji. + + + Setting flags <strong>%1</strong> on new partition. Postavljam oznake <strong>%1</strong> na novoj particiji. - + The installer failed to set flags on partition %1. Instalacijski program nije uspio postaviti oznake na particiji %1. @@ -3231,42 +3575,42 @@ Izlaz: SetPasswordJob - + Set password for user %1 Postavi lozinku za korisnika %1 - + Setting password for user %1. Postavljam lozinku za korisnika %1. - + Bad destination system path. Loš odredišni put sustava. - + rootMountPoint is %1 Root točka montiranja je %1 - + Cannot disable root account. Ne mogu onemogućiti root račun. - + passwd terminated with error code %1. passwd je prekinut s greškom %1. - + Cannot set password for user %1. Ne mogu postaviti lozinku za korisnika %1. - + usermod terminated with error code %1. usermod je prekinut s greškom %1. @@ -3274,45 +3618,82 @@ Izlaz: SetTimezoneJob - + Set timezone to %1/%2 Postavi vremesku zonu na %1%2 - + Cannot access selected timezone path. Ne mogu pristupiti odabranom putu do vremenske zone. - + Bad path: %1 Loš put: %1 - + Cannot set timezone. Ne mogu postaviti vremesku zonu. - + Link creation failed, target: %1; link name: %2 Kreiranje linka nije uspjelo, cilj: %1; ime linka: %2 - + Cannot set timezone, Ne mogu postaviti vremensku zonu, - + Cannot open /etc/timezone for writing Ne mogu otvoriti /etc/timezone za pisanje + + SetupGroupsJob + + + Preparing groups. + Pripremam grupe + + + + + Could not create groups in target system + Nije moguće stvoriti grupe na ciljnom sustavu + + + + These groups are missing in the target system: %1 + Ove grupe nedostaju na ciljnom sustavu: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Konfiguriranje <pre>sudo</pre> korisnika + + + + Cannot chmod sudoers file. + Ne mogu chmod sudoers datoteku. + + + + Cannot create sudoers file for writing. + Ne mogu stvoriti sudoers datoteku za pisanje. + + ShellProcessJob - + Shell Processes Job Posao shell procesa @@ -3320,81 +3701,117 @@ Izlaz: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Ovo je prikaz događaja koji će uslijediti jednom kad počne instalacijska procedura. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Ovo je prikaz događaja koji će uslijediti jednom kad počne instalacijska procedura. + + &Yes + &Da - - - SummaryViewStep - - Summary - Sažetak + + &No + &Ne + + + + &Cancel + &Odustani + + + + &Close + &Zatvori TrackingInstallJob - + Installation feedback Povratne informacije o instalaciji - + Sending installation feedback. Šaljem povratne informacije o instalaciji - + Internal error in install-tracking. Interna pogreška prilikom praćenja instalacije. - + HTTP request timed out. HTTP zahtjev je istekao - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Povratne informacije korisnika KDE-a + + + + Configuring KDE user feedback. + Konfiguriranje povratnih informacija korisnika KDE-a. + + + + + Error in KDE user feedback configuration. + Pogreška u konfiguraciji povratnih informacija korisnika KDE-a. + + + + Could not configure KDE user feedback correctly, script error %1. + Ne mogu ispravno konfigurirati povratne informacije korisnika KDE-a; pogreška skripte %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Ne mogu ispravno konfigurirati povratne informacije korisnika KDE-a; greška Calamares instalacijskog programa %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Povratna informacija o uređaju - + Configuring machine feedback. Konfiguriram povratnu informaciju o uređaju. - - + + Error in machine feedback configuration. Greška prilikom konfiguriranja povratne informacije o uređaju. - + Could not configure machine feedback correctly, script error %1. Ne mogu ispravno konfigurirati povratnu informaciju o uređaju, greška skripte %1. - + Could not configure machine feedback correctly, Calamares error %1. Ne mogu ispravno konfigurirati povratnu informaciju o uređaju, Calamares greška %1. @@ -3402,106 +3819,97 @@ Izlaz: TrackingPage - + Form Oblik - + Placeholder Rezervirano mjesto - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Odabirom ove opcije <span style=" font-weight:600;">ne će se slati nikakve informacije</span>o vašoj instalaciji.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Kliknite ovdje da uopće ne šaljete<span style=" font-weight:600;"> nikakve podatke</span> o vašoj instalaciji.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klikni ovdje za više informacija o korisničkoj povratnoj informaciji</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Praćenje instalacije pomaže %1 da vidi koliko ima korisnika, na koji hardver instalira %1 i (s posljednjim opcijama ispod) da dobije kontinuirane informacije o preferiranim aplikacijama. Kako bi vidjeli što se šalje molimo vas da kliknete na ikonu pomoći pokraj svake opcije. + + 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. + Praćenje pomaže %1 vidjeti koliko često se instalira, na kojem je hardveru instaliran i koje se aplikacije koriste. Da biste vidjeli što će biti poslano, kliknite ikonu pomoći pored svakog područja. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Odabirom ove opcije slat ćete informacije vezane za instalaciju i vaš hardver. Informacija <b>će biti poslana samo jednom</b>nakon što završi instalacija. + + 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. + Odabirom ove opcije poslat ćete podatke o svojoj instalaciji i hardveru. Ove će informacije biti poslane <b>samo jednom</b> nakon završetka instalacije. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Odabirom ove opcije slat će se <b>periodična</b>informacija prema %1 o vašoj instalaciji, hardveru i aplikacijama. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Odabirom ove opcije periodično ćete slati podatke o instalaciji vašeg <b>računala</b>, hardveru i aplikacijama na %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Odabirom ove opcije slat će se <b>redovna</b>informacija prema %1 o vašoj instalaciji, hardveru, aplikacijama i uzorci upotrebe. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Odabirom ove opcije redovito ćete slati podatke o vašoj <b>korisničkoj</b> instalaciji, hardveru, aplikacijama i obrascima upotrebe aplikacija na %1. TrackingViewStep - + Feedback Povratna informacija + + UmountJob + + + Unmount file systems. + Odmontiraj datotečne sustave. + + + + No target system available. + Ciljni sustav nije dostupan. + + + + No rootMountPoint is set. + Nije postavljena root točka moniranja. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ako će više osoba koristiti ovo računalo, možete postaviti više korisničkih računa poslije instalacije.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ako će više osoba koristiti ovo računalo, možete postaviti više korisničkih računa poslije instalacije.</small> + + + UsersQmlViewStep - - Your username is too long. - Vaše korisničko ime je predugačko. - - - - Your username must start with a lowercase letter or underscore. - Vaše korisničko ime mora započeti malim slovom ili podvlakom. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Dopuštena su samo mala slova, brojevi, podvlake i crtice. - - - - Only letters, numbers, underscore and hyphen are allowed. - Dopuštena su samo slova, brojevi, podvlake i crtice. - - - - Your hostname is too short. - Ime računala je kratko. - - - - Your hostname is too long. - Ime računala je predugačko. - - - - Your passwords do not match! - Lozinke se ne podudaraju! + + Users + Korisnici UsersViewStep - + Users Korisnici @@ -3509,65 +3917,67 @@ Izlaz: VariantModel - + Key + Column header for key/value Ključ - + Value + Column header for key/value Vrijednost VolumeGroupBaseDialog - + Create Volume Group Stvori volume grupu - + List of Physical Volumes List of Physical Volumes - + Volume Group Name: Ime volume grupe: - + Volume Group Type: Tip volume grupe: - + Physical Extent Size: Physical Extent Size: - + MiB MiB - + Total Size: Ukupna veličina: - + Used Size: Iskorištena veličina - + Total Sectors: Ukupni broj sektora: - + Quantity of LVs: Količina LVs-ova: @@ -3575,106 +3985,106 @@ Izlaz: WelcomePage - + Form Oblik - - + + Select application and system language Odaberite program i jezik sustava + &About + &O programu + + + Open donations website Otvorite web mjesto za donacije - + &Donate &Doniraj - + Open help and support website Otvorite web mjesto za pomoć i podršku + &Support + &Podrška + + + Open issues and bug-tracking website Otvorene web mjesto za praćenje bugova i poteškoća - Open release notes website - Otvorite web mjesto s bilješkama izdanja - - - - &Release notes - &Napomene o izdanju - - - &Known issues &Poznati problemi - - &Support - &Podrška + + Open release notes website + Otvorite web mjesto s bilješkama izdanja - - &About - &O programu + + &Release notes + &Napomene o izdanju - - <h1>Welcome to the %1 installer.</h1> - <h1>Dobrodošli u %1 instalacijski program.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - Dobrodošli u Calamares instalacijski program za %1. - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Dobrodošli u Calamares instalacijski program za %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Dobrodošli u %1 instalacijski program.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + Dobrodošli u Calamares instalacijski program za %1. + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Dobrodošli u %1 instalacijski program.</h1> + + + + %1 support + %1 podrška + + + About %1 setup O %1 instalacijskom programu - + About %1 installer O %1 instalacijskom programu - + <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. - <h1>%1</h1><br/><strong>%2<br/>za %3</strong><br/><br/>Autorska prava 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorska prava 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/> Hvala <a href="https://calamares.io/team/">Calamares timu</a> i <a href="https://www.transifex.com/calamares/calamares/">Calamares timu za prevođenje</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> sponzorira <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 podrška + <h1>%1</h1><br/><strong>%2<br/>za %3</strong><br/><br/>Autorska prava 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorska prava 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> Hvala <a href="https://calamares.io/team/">Calamares timu</a> i <a href="https://www.transifex.com/calamares/calamares/">Calamares timu za prevođenje</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> sponzorira <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Dobrodošli @@ -3682,84 +4092,217 @@ Izlaz: WelcomeViewStep - + Welcome Dobrodošli + + ZfsJob + + + Create ZFS pools and datasets + Stvorite ZFS pool-ove i skupove podataka + + + + Failed to create zpool on + Nije uspjelo kreiranje zpool-a na + + + + Configuration Error + Greška konfiguracije + + + + No partitions are available for ZFS. + Nisu dostupne particije za ZFS. + + + + Internal data missing + Nedostaju interni podaci + + + + + Failed to create zpool + Nije uspjelo kreiranje zpool-a + + + + Failed to create dataset + Nije uspjelo kreiranje skupova podataka + + + + The output was: + Izlaz je bio: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> +<strong>%2<br/> +za %3</strong><br/><br/> +Autorska prava 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> +Autorska prava 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> +Hvala <a href='https://calamares.io/team/'>Calamares timu</a> +i <a href='https://www.transifex.com/calamares/calamares/'>Calamares +timu za prevođenje</a>.<br/><br/> +<a href='https://calamares.io/'>Calamares</a> +sponzorira <br/> +<a href='http://www.blue-systems.com/'>Blue Systems</a> - +Liberating Software. - + Back - + Natrag + + + + calamares-sidebar + + + Show debug information + Prikaži debug informaciju + + + + finishedq + + + Installation Completed + Instalacija je završila + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 je instaliran na vaše računalo.<br/> + Možete ponovno pokrenuti vaš novi sustav ili nastaviti koristiti trenutno okruženje. + + + + Close Installer + Zatvori instalacijski program + + + + Restart System + Ponovno pokretanje sustava + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Potpuni zapisnik instalacije dostupan je kao installation.log u home direktoriju Live korisnika.<br/> + Ovaj se zapisnik kopira u /var/log/installation.log ciljnog sustava.</p> + + + + finishedq@mobile + + + Installation Completed + Instalacija je završila + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 je instaliran na vaše računalo.<br/> + Možete ponovno pokrenuti vaš uređaj. + + + + Close + Zatvori + + + + Restart + Ponovno pokreni + + + + i18n + + + <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>. + <h1>Postavke jezika</h1></br> +Jezične postavke sustava utječu na skup jezika i znakova za neke elemente korisničkog sučelja naredbenog retka. Trenutne postavke su <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Postavke regije</h1></br> +Postavke regije utječu na format brojeva i datuma. Trenutne postavke su <strong>%1</strong>. + + + + Back + Natrag keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Da biste aktivirali pregled tipkovnice, odaberite raspored iste. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Tip tipkovnice: - - Refresh - - - - - + Layouts - + Rasporedi - - - Keyboard Layout - + + Type here to test your keyboard + Ovdje testiraj tipkovnicu - - Models - - - - + Variants - + Varijante + + + localeq - - Test your keyboard - + + Change + Promijeni notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3767,34 +4310,261 @@ Izlaz: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice je moćan i besplatan uredski paket koji koriste milijuni ljudi diljem svijeta. Uključuje nekoliko aplikacija koje ga čine najsvestranijim besplatnim uredskim paketom otvorenog koda na tržištu.<br/> + Zadana opcija. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Ako ne želite instalirati uredski paket, samo odaberite "bez uredskog paketa". Uvijek možete po potrebi dodati jedan (ili više) njih kasnije na svoj sustav. + + + + No Office Suite + Bez uredskog paketa + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Napravite minimalnu instalaciju na radnoj površini, uklonite sve dodatne aplikacije i kasnije odlučite što želite dodati svom sustavu. Primjeri onoga što neće biti u takvoj instalaciji, neće biti uredskog paketa, nema media playera, nema preglednika slika ili podrške za ispis. Bit će to samo radna površina, preglednik datoteka, upravitelj paketa, uređivač teksta i jednostavan web-preglednik. + + + + Minimal Install + Minimalna instalacija + + + + Please select an option for your install, or use the default: LibreOffice included. + Odaberite opciju za instalaciju ili upotrijebite zadano: LibreOffice uključen. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Ovo je primjer QML datoteke, koja prikazuje opcije u RichText-u sa sadržajem koji se može kliknuti. + <p>QML s RichText može koristiti HTML oznake, sadržaj koji se može kliknuti koristan je za zaslone osjetljive na dodir.</p> + + <p><b>Ovo je podebljani tekst</b></p> + <p><i>Ovo je kurzivni tekst</i></p> + <p><u>Ovo je podvučeni tekst</u></p> + <p><center>Ovaj će tekst biti poravnan u sredini.</center></p> + <p><s>Ovo je precrtano</s></p> + + <p>Primjer koda: + <code>ls -l /home</code></p> + + <p><b>Liste:</b></p> + <ul> + <li>Intel CPU sustavi</li> + <li>AMD CPU sustavi</li> + </ul> + + <p>Okomita traka za pomicanje je podesiva, trenutna širina je postavljena na 10.</p> + + + + Back + Natrag + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Odaberite svoje korisničko ime i vjerodajnice za prijavu i izvršavanje administracijskih zadataka + + + + What is your name? + Koje je tvoje ime? + + + + Your Full Name + Vaše puno ime + + + + What name do you want to use to log in? + Koje ime želite koristiti za prijavu? + + + + Login Name + Korisničko ime + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Ako će više korisnika koristiti ovo računalo, nakon instalacije možete otvoriti više računa. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Dopuštena su samo mala slova, brojevi, donja crta i crtica. + + + + root is not allowed as username. + root nije dozvoljeno korisničko ime. + + + + What is the name of this computer? + Koje je ime ovog računala? + + + + Computer Name + Ime računala + + + + This name will be used if you make the computer visible to others on a network. + Ovo će se ime upotrebljavati ako računalo učinite vidljivim drugima na mreži. + + + + localhost is not allowed as hostname. + localhost nije dozvoljeno ime računala. + + + + Choose a password to keep your account safe. + Odaberite lozinku da bi račun bio siguran. + + + + Password + Lozinka + + + + Repeat Password + Ponovite lozinku + + + + 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. + Dvaput unesite istu lozinku kako biste je mogli provjeriti ima li pogrešaka u tipkanju. Dobra lozinka sadržavat će mješavinu slova, brojeva i interpunkcije, treba imati najmanje osam znakova i treba je mijenjati u redovitim intervalima. + + + + Validate passwords quality + Provjerite kvalitetu lozinki + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Kad je ovaj okvir potvrđen, bit će napravljena provjera jakosti lozinke te nećete moći koristiti slabu lozinku. + + + + Log in automatically without asking for the password + Automatska prijava bez traženja lozinke + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Dopuštena su samo slova, brojevi, donja crta i crtica i to kao najmanje dva znaka + + + + Reuse user password as root password + Upotrijebite lozinku korisnika kao root lozinku + + + + Use the same password for the administrator account. + Koristi istu lozinku za administratorski račun. + + + + Choose a root password to keep your account safe. + Odaberite root lozinku da biste zaštitili svoj račun. + + + + Root Password + Root lozinka + + + + Repeat Root Password + Ponovite root lozinku + + + + Enter the same password twice, so that it can be checked for typing errors. + Dvaput unesite istu lozinku kako biste mogli provjeriti ima li pogrešaka u tipkanju. + + + + welcomeq + + + <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> + <h3>Dobrodošli u %1<quote>%2</quote> instalacijski program</h3> +<p>Ovaj program će vas pitati neka pitanja i pripremiti %1 na vašem računalu.</p> + + + About O programu - + Support Podrška - + Known issues Poznati problemi - + Release notes Bilješke o izdanju - + Donate Doniraj diff --git a/lang/calamares_hr_HR.ts b/lang/calamares_hr_HR.ts deleted file mode 100644 index 3bc2d2379..000000000 --- a/lang/calamares_hr_HR.ts +++ /dev/null @@ -1,2490 +0,0 @@ - - - - - AlongsidePage - - - Choose partition to shrink: - - - - - Allocate drive space by dragging the divider below: - - - - - With this operation, the partition <b>%1</b> which contains %4 will be shrunk to %2MB and a new %3MB partition will be created for %5. - - - - - ApplyProgressDetailsWidgetBase - - - Save - - - - - Open in External Browser - - - - - ApplyProgressDialogWidgetBase - - - Operations and Jobs - - - - - Time Elapsed - - - - - Total Time: 00:00:00 - - - - - Operation: %p% - - - - - Status - - - - - Total: %p% - - - - - Base - - - Installer - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Welcome</span></p></body></html> - - - - - Location - - - - - License Approval - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Installation</span></p></body></html> - - - - - Install System - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Configuration</span></p></body></html> - - - - - Reboot - - - - - Language - - - - - User Info - - - - - Summary - - - - - Keyboard - - - - - Disk Setup - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#343434;">Preparation</span></p></body></html> - - - - - BootLoaderModel - - - Master Boot Record of %1 - - - - - Boot Partition - - - - - System Partition - - - - - Calamares::InstallationViewStep - - - Install - - - - - Calamares::JobThread - - - Done - - - - - Calamares::ProcessJob - - - Run command %1 - - - - - External command crashed - - - - - Command %1 crashed. -Output: -%2 - - - - - External command failed to start - - - - - Command %1 failed to start. - - - - - Internal error when starting command - - - - - Bad parameters for process job call. - - - - - External command failed to finish - - - - - Command %1 failed to finish in %2s. -Output: -%3 - - - - - External command finished with errors - - - - - Command %1 finished with exit code %2. -Output: -%3 - - - - - Calamares::PythonJob - - - Run script %1 - - - - - Bad working directory path - - - - - Working directory %1 for python job %2 is not readable. - - - - - Bad main script file - - - - - Main script file %1 for python job %2 is not readable. - - - - - Boost.Python error in job "%1". - - - - - Calamares::ViewManager - - - &Back - - - - - &Next - - - - - &Quit - - - - - Error - - - - - Installation Failed - - - - - CalamaresPython::Helper - - - Unknown exception type - - - - - unparseable Python error - - - - - unparseable Python traceback - - - - - Unfetchable Python error. - - - - - CalamaresWindow - - - %1 Installer - - - - - CheckFileSystemJob - - - Checking file system on partition %1. - - - - - The file system check on partition %1 failed. - - - - - ChoicePage - - - This computer currently does not seem to have an operating system on it. What would you like to do? - - - - - <b>Erase disk and install %1</b><br/><font color="red">Warning: </font>This will delete all of your programs, documents, photos, music, and any other files. - - - - - This computer currently has %1 on it. What would you like to do? - - - - - <b>Install %2 alongside %1</b><br/>Documents, music and other personal files will be kept. You can choose which operating system you want each time the computer starts up. - - - - - <b>Replace %1 with %2</b><br/><font color="red">Warning: </font>This will erase the whole disk and delete all of your %1 programs, documents, photos, music, and any other files. - - - - - This computer already has an operating system on it. What would you like to do? - - - - - <b>Install %1 alongside your current operating system</b><br/>Documents, music and other personal files will be kept. You can choose which operating system you want each time the computer starts up. - - - - - - <b>Erase disk and install %1</b><br/><font color="red">Warning: </font>This will delete all of your Windows 7 programs, documents, photos, music, and any other files. - - - - - This computer currently has multiple operating systems on it. What would you like to do? - - - - - <b>Install %1 alongside your current operating systems</b><br/>Documents, music and other personal files will be kept. You can choose which operating system you want each time the computer starts up. - - - - - <b>Something else</b><br/>You can create or resize partitions yourself, or choose multiple partitions for %1. - - - - - ConfigurePageAdvanced - - - Permissions - - - - - Allow applying operations without administrator privileges - - - - - Backend - - - - - Active backend: - - - - - Units - - - - - Preferred unit: - - - - - Byte - - - - - KiB - - - - - MiB - - - - - GiB - - - - - TiB - - - - - PiB - - - - - EiB - - - - - ConfigurePageFileSystemColors - - - File Systems - - - - - luks: - - - - - ntfs: - - - - - ext2: - - - - - ext3: - - - - - ext4: - - - - - btrfs: - - - - - linuxswap: - - - - - fat16: - - - - - fat32: - - - - - zfs: - - - - - reiserfs: - - - - - reiser4: - - - - - hpfs: - - - - - jfs - - - - - hfs: - - - - - hfsplus: - - - - - ufs: - - - - - xfs: - - - - - ocfs2: - - - - - extended: - - - - - unformatted: - - - - - unknown: - - - - - exfat: - - - - - nilfs2: - - - - - lvm2 pv: - - - - - ConfigurePageGeneral - - - Partition Alignment - - - - - Use cylinder based alignment (Windows XP compatible) - - - - - Sector alignment: - - - - - sectors - - - - - Align partitions per default - - - - - Logging - - - - - Hide messages below: - - - - - Debug - - - - - Information - - - - - Warning - - - - - Error - - - - - File Systems - - - - - Default file system: - - - - - Shredding - - - - - Overwrite with: - - - - - Random data - - - - - Zeros - - - - - CreatePartitionDialog - - - Create a Partition - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - F&ile System: - - - - - &Mount Point: - - - - - / - - - - - /boot - - - - - /home - - - - - /opt - - - - - /usr - - - - - /var - - - - - Si&ze: - - - - - MB - - - - - Logical - - - - - Primary - - - - - GPT - - - - - CreatePartitionJob - - - Create partition (file system: %1, size: %2 MB) on %3. - - - - - The installer failed to create partition on disk '%1'. - - - - - Could not open device '%1'. - - - - - Could not open partition table. - - - - - The installer failed to create file system on partition %1. - - - - - The installer failed to update partition table on disk '%1'. - - - - - CreatePartitionTableDialog - - - Create Partition Table - - - - - Creating a new partition table will delete all existing data on the disk. - - - - - What kind of partition table do you want to create? - - - - - Master Boot Record (MBR) - - - - - GUID Partition Table (GPT) - - - - - CreatePartitionTableJob - - - Create partition table - - - - - The installer failed to create a partition table on %1. - - - - - Could not open device %1. - - - - - CreatePartitionTableWidgetBase - - - Choose the type of partition table you want to create: - - - - - GPT - - - - - MS-Dos - - - - - (icon) - - - - - <b>Warning:</b> This will destroy all data on the device! - - - - - CreateUserJob - - - Create user %1 - - - - - Sudoers dir is not writable. - - - - - Cannot create sudoers file for writing. - - - - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. - - - - - Cannot create user %1. - - - - - useradd terminated with error code %1. - - - - - Cannot set full name for user %1. - - - - - chfn terminated with error code %1. - - - - - Cannot set home directory ownership for user %1. - - - - - chown terminated with error code %1. - - - - - DecryptLuksDialogWidgetBase - - - &Name: - - - - - &Passphrase: - - - - - DeletePartitionJob - - - Delete partition %1 - - - - - The installer failed to delete partition %1. - - - - - Partition (%1) and device (%2) do not match. - - - - - Could not open device %1. - - - - - Could not open partition table. - - - - - DeviceModel - - - %1 - %2 (%3) - - - - - DevicePropsWidgetBase - - - Partition table: - - - - - Cylinder alignment - - - - - Sector based alignment - - - - - Capacity: - - - - - Total sectors: - - - - - Cylinders/Heads/Sectors: - - - - - Logical sector size: - - - - - Physical sector size: - - - - - Cylinder size: - - - - - Primaries/Max: - - - - - SMART status: - - - - - More... - - - - - EditExistingPartitionDialog - - - Edit Existing Partition - - - - - Content: - - - - - Keep - - - - - Format - - - - - Warning: Formatting the partition will erase all existing data. - - - - - &Mount Point: - - - - - / - - - - - /boot - - - - - /home - - - - - /opt - - - - - /usr - - - - - /var - - - - - Size: - - - - - EditMountOptionsDialogWidgetBase - - - Edit Mount Options - - - - - Edit the mount options for this file system: - - - - - EditMountPointDialogWidgetBase - - - Path: - - - - - Select... - - - - - Type: - - - - - Options: - - - - - Read-only - - - - - Users can mount and unmount - - - - - No automatic mount - - - - - No update of file access times - - - - - Synchronous access - - - - - No update of directory access times - - - - - No binary execution - - - - - Update access times relative to modification - - - - - More... - - - - - Dump Frequency: - - - - - Pass Number: - - - - - Device Node - - - - - UUID - - - - - Label - - - - - Identify by: - - - - - EraseDiskPage - - - Select drive: - - - - - Before: - - - - - After: - - - - - FileSystemSupportDialogWidgetBase - - - This table shows which file systems are supported and which specific operations can be performed on them. -Some file systems need external tools to be installed for them to be supported. But not all operations can be performed on all file systems, even if all required tools are installed. Please see the documentation for details. - - - - - File System - - - - - Create - - - - - Grow - - - - - Shrink - - - - - Move - - - - - Copy - - - - - Check - - - - - Read Label - - - - - Write Label - - - - - Read Usage - - - - - Backup - - - - - Restore - - - - - Support Tools - - - - - Rescan Support - @action:button - - - - - FillGlobalStorageJob - - - Set partition information - - - - - Failed to find path for boot loader - - - - - FormatPartitionJob - - - Format partition %1 (file system: %2, size: %3 MB) on %4. - - - - - The installer failed to format partition %1 on disk '%2'. - - - - - Could not open device '%1'. - - - - - Could not open partition table. - - - - - The installer failed to create file system on partition %1. - - - - - The installer failed to update partition table on disk '%1'. - - - - - GreetingPage - - - <h1>Welcome to the %1 installer.</h1><br/>This program will ask you some questions and set up %2 on your computer. - - - - - GreetingViewStep - - - Welcome - - - - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - - - KeyboardViewStep - - - Keyboard - - - - - LocalePage - - - Region: - - - - - Zone: - - - - - Set timezone to %1/%2.<br/> - - - - - LocaleViewStep - - - Loading location data... - - - - - Location - - - - - MainWindowBase - - - KDE Partition Manager - @title:window - - - - - Devices - @title:window - - - - - Pending Operations - @title:window - - - - - Information - @title:window - - - - - Log Output - @title:window - - - - - MoveFileSystemJob - - - Move file system of partition %1. - - - - - Could not open file system on partition %1 for moving. - - - - - Could not create target for moving file system on partition %1. - - - - - Moving of partition %1 failed, changes have been rolled back. - - - - - Moving of partition %1 failed. Roll back of the changes have failed. - - - - - Updating boot sector after the moving of partition %1 failed. - - - - - The logical sector sizes in the source and target for copying are not the same. This is currently unsupported. - - - - - Source and target for copying do not overlap: Rollback is not required. - - - - - - Could not open device %1 to rollback copying. - - - - - Page_Keyboard - - - Form - - - - - Keyboard Model: - - - - - Type here to test your keyboard - - - - - Page_UserSetup - - - Form - - - - - What is your name? - - - - - What name do you want to use to log in? - - - - - - - - font-weight: normal - - - - - <small>If more than one person will use this computer, you can set up multiple accounts after installation.</small> - - - - - Choose a password to keep your account safe. - - - - - <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> - - - - - What is the name of this computer? - - - - - <small>This name will be used if you make the computer visible to others on a network.</small> - - - - - Choose a password for the administrator account. - - - - - <small>Enter the same password twice, so that it can be checked for typing errors.</small> - - - - - Log in automatically - - - - - Require my password to log in - - - - - PartPropsWidgetBase - - - File system: - @label:listbox - - - - - Label: - @label - - - - - This file system does not support setting a label. - @label - - - - - Recreate existing file system - @action:button - - - - - Mount point: - @label - - - - - Partition type: - @label - - - - - Status: - @label - - - - - UUID: - @label - - - - - Size: - @label - - - - - Available: - @label partition capacity available - - - - - Used: - @label partition capacity used - - - - - First sector: - @label - - - - - Last sector: - @label - - - - - Number of sectors: - @label - - - - - Flags: - @label - - - - - PartitionManagerWidgetBase - - - KDE Partition Manager - @title:window - - - - - Partition - - - - - Type - - - - - Mount Point - - - - - Label - - - - - UUID - - - - - Size - - - - - Used - - - - - Available - - - - - First Sector - - - - - Last Sector - - - - - Number of Sectors - - - - - Flags - - - - - PartitionModel - - - Free Space - - - - - New partition - - - - - Name - - - - - File System - - - - - Mount Point - - - - - Size - - - - - PartitionPage - - - Form - - - - - &Disk: - - - - - &Revert All Changes - - - - - New Partition &Table - - - - - &Create - - - - - &Edit - - - - - &Delete - - - - - &Install boot loader on: - - - - - Are you sure you want to create a new partition table on %1? - - - - - PartitionViewStep - - - Gathering system information... - - - - - Partitions - - - - - Before: - - - - - After: - - - - - PreparePage - - - For best results, please ensure that this computer: - - - - - This computer does not satisfy the minimum requirements for installing %1. -Installation cannot continue. - - - - - This computer does not satisfy some of the recommended requirements for installing %1. -Installation can continue, but some features might be disabled. - - - - - PrepareViewStep - - - Gathering system information... - - - - - has at least %1 GB available drive space - - - - - has at least %1 GB working memory - - - - - is plugged in to a power source - - - - - is connected to the Internet - - - - - Prepare - - - - - ProgressTreeModel - - - Prepare - - - - - Finish - - - - - QObject - - - Default Keyboard Model - - - - - - Default - - - - - ReleaseDialog - - - KDE Release Builder - - - - - Application - - - - - Name: - - - - - &Version: - - - - - Repository and Revision - - - - - &Checkout From: - - - - - trunk - - - - - branches - - - - - tags - - - - - Ta&g/Branch: - - - - - &SVN Access: - - - - - anonsvn - - - - - https - - - - - svn+ssh - - - - - &User: - - - - - Options - - - - - Get &Documentation - - - - - Get &Translations - - - - - C&reate Tag - - - - - S&kip translations below completion: - - - - - % - - - - - Create Tar&ball - - - - - Apply &fixes - - - - - ResizeFileSystemJob - - - Resize file system on partition %1. - - - - - Parted failed to resize filesystem. - - - - - Failed to resize filesystem. - - - - - ResizePartitionJob - - - Resize partition %1. - - - - - - The installer failed to resize partition %1 on disk '%2'. - - - - - Could not open device '%1'. - - - - - SetHostNameJob - - - Set hostname %1 - - - - - - Internal Error - - - - - Cannot write hostname to target system - - - - - SetPartGeometryJob - - - Update geometry of partition %1. - - - - - Failed to change the geometry of the partition. - - - - - SetPasswordJob - - - Set password for user %1 - - - - - Bad destination system path. - - - - - rootMountPoint is %1 - - - - - Cannot set password for user %1. - - - - - usermod terminated with error code %1. - - - - - SetTimezoneJob - - - Set timezone to %1/%2 - - - - - Cannot access selected timezone path. - - - - - Bad path: %1 - - - - - Cannot set timezone. - - - - - Link creation failed, target: %1; link name: %2 - - - - - SizeDetailsWidgetBase - - - First sector: - @label:listbox - - - - - Last sector: - @label:listbox - - - - - Align partition - - - - - SizeDialogWidgetBase - - - Partition type: - @label:listbox - - - - - Primary - - - - - Extended - - - - - Logical - - - - - File system: - @label:listbox - - - - - Label: - @label - - - - - This file system does not support setting a label. - @label - - - - - Minimum size: - @label - - - - - Maximum size: - @label - - - - - Free space before: - @label:listbox - - - - - Size: - @label:listbox - - - - - Free space after: - @label:listbox - - - - - SmartDialogWidgetBase - - - SMART status: - - - - - Model: - - - - - Serial number: - - - - - Firmware revision: - - - - - Temperature: - - - - - Bad sectors: - - - - - Powered on for: - - - - - Power cycles: - - - - - Id - - - - - Attribute - - - - - Failure Type - - - - - Update Type - - - - - Worst - - - - - Current - - - - - Threshold - - - - - Raw - - - - - Assessment - - - - - Value - - - - - Overall assessment: - - - - - Self tests: - - - - - SummaryViewStep - - - Summary - - - - - TreeLogBase - - - Sev. - @title:column Severity of a log entry / log level. Text must be very short. - - - - - Severity - - - - - Time - @title:column a time stamp of a log entry - - - - - Message - @title:column the text message of a log entry - - - - - UsersPage - - - Your username contains an invalid character '%1' - - - - - Your username contains invalid characters! - - - - - Your hostname contains an invalid character '%1' - - - - - Your hostname contains invalid characters! - - - - - - Your passwords do not match! - - - - - UsersViewStep - - - Users - - - - diff --git a/lang/calamares_hu.ts b/lang/calamares_hu.ts index 8971023f6..f3ba3e1ef 100644 --- a/lang/calamares_hu.ts +++ b/lang/calamares_hu.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. A rendszer <strong>indító környezete.</strong> <br><br>Régebbi x86 alapú rendszerek csak <strong>BIOS</strong><br>-t támogatják. A modern rendszerek gyakran <strong>EFI</strong>-t használnak, de lehet, hogy BIOS-ként látható ha kompatibilitási módban fut az indító környezet. - + 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. A rendszer <strong>EFI</strong> indító környezettel lett indítva.<br><br>Annak érdekében, hogy az EFI környezetből indíthassunk a telepítőnek telepítenie kell a rendszerbetöltő alkalmazást pl. <strong>GRUB</strong> vagy <strong>systemd-boot</strong> az <strong>EFI Rendszer Partíción.</strong> Ez automatikus kivéve ha kézi partícionálást választottál ahol neked kell kiválasztani vagy létrehozni. - + 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. A rendszer <strong>BIOS</strong> környezetből lett indítva. <br><br>Azért, hogy el lehessen indítani a rendszert egy BIOS környezetből a telepítőnek telepítenie kell egy indító környezetet mint pl. <strong>GRUB</strong>. Ez telepíthető a partíció elejére vagy a <strong>Master Boot Record</strong>-ba. javasolt a partíciós tábla elejére (javasolt). Ez automatikus kivéve ha te kézi partícionálást választottál ahol neked kell telepíteni. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Mester Boot Record - %1 - + Boot Partition Indító partíció - + System Partition Rendszer Partíció - + Do not install a boot loader Ne telepítsen rendszerbetöltőt - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Üres oldal @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Adatlap - + GlobalStorage Tárolás - + JobQueue Feladatok - + Modules Modulok - + Type: Típus: - - + + none semelyik - + Interface: Interfész: - - Tools - Eszközök + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet Stílusok újratöltése - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree Modul- fa - + Debug information Hibakeresési információk @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Összeállítás - + Install Telepít @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Művelet nem sikerült (%1) - + Programmed job failure was explicitly requested. Kifejezetten kért programozott műveleti hiba. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Kész @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Mintapélda (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. '%1' parancs futtatása a cél rendszeren. - + Run command '%1'. '%1' parancs futtatása. - + Running command %1 %2 Parancs futtatása %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Futó %1 műveletek. - + Bad working directory path Rossz munkakönyvtár útvonal - + Working directory %1 for python job %2 is not readable. Munkakönyvtár %1 a python folyamathoz %2 nem olvasható. - + Bad main script file Rossz alap script fájl - + Main script file %1 for python job %2 is not readable. Alap script fájl %1 a python folyamathoz %2 nem olvasható. - + Boost.Python error in job "%1". Boost. Python hiba ebben a folyamatban "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Betöltés ... - + QML Step <i>%1</i>. QML lépés <i>%1</i>. - + Loading failed. A betöltés sikertelen. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Követelmények ellenőrzése a <i>%1</i>modulhoz kész. + - + Waiting for %n module(s). Várakozás a %n modulokra. @@ -236,7 +269,7 @@ - + (%n second(s)) (%n másodperc) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. Rendszerkövetelmények ellenőrzése kész. @@ -252,246 +285,237 @@ Calamares::ViewManager - - &Back - &Vissza - - - - &Next - &Következő - - - - &Cancel - &Mégse - - - - Cancel setup without changing the system. - Telepítés megszakítása a rendszer módosítása nélkül. - - - - Cancel installation without changing the system. - Kilépés a telepítőből a rendszer megváltoztatása nélkül. - - - + Setup Failed Telepítési hiba - - Would you like to paste the install log to the web? - + + Installation Failed + Telepítés nem sikerült - + + Error + Hiba + + + + &Yes + &Igen + + + + &No + &Nem + + + + &Close + &Bezár + + + Install Log Paste URL Telepítési napló beillesztési URL-je. - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed A Calamares előkészítése meghiúsult - + %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. A(z) %1 nem telepíthető. A Calamares nem tudta betölteni a konfigurált modulokat. Ez a probléma abból fakad, ahogy a disztribúció a Calamarest használja. - + <br/>The following modules could not be loaded: <br/>A következő modulok nem tölthetőek be: - + + Continue with setup? + Folytatod a telepítéssel? + + + Continue with installation? Folytatja a telepítést? - + 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> A %1 telepítő változtatásokat fog végrehajtani a lemezen a %2 telepítéséhez. <br/><strong>Ezután már nem tudja visszavonni a változtatásokat.</strong> - + + 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> + A %1 telepítő változtatásokat fog elvégezni, hogy telepítse a következőt: %2.<br/><strong>A változtatások visszavonhatatlanok lesznek.</strong> + + + &Set up now &Telepítés most - + + &Install now + &Telepítés most + + + + Go &back + Menj &vissza + + + &Set up &Telepítés - + &Install &Telepítés - + Setup is complete. Close the setup program. Telepítés sikerült. Zárja be a telepítőt. - + + The installation is complete. Close the installer. + A telepítés befejeződött, Bezárhatod a telepítőt. + + + + Cancel setup without changing the system. + Telepítés megszakítása a rendszer módosítása nélkül. + + + + Cancel installation without changing the system. + Kilépés a telepítőből a rendszer megváltoztatása nélkül. + + + + &Next + &Következő + + + + &Back + &Vissza + + + + &Done + &Befejez + + + + &Cancel + &Mégse + + + Cancel setup? Megszakítja a telepítést? - + Cancel installation? Abbahagyod a telepítést? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Valóban megszakítod a telepítési eljárást? A telepítő ki fog lépni és minden változtatás elveszik. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Biztos abba szeretnéd hagyni a telepítést? Minden változtatás elveszik, ha kilépsz a telepítőből. - - - - &Yes - &Igen - - - - - &No - &Nem - - - - &Close - &Bezár - - - - Continue with setup? - Folytatod a telepítéssel? - - - - 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> - A %1 telepítő változtatásokat fog elvégezni, hogy telepítse a következőt: %2.<br/><strong>A változtatások visszavonhatatlanok lesznek.</strong> - - - - &Install now - &Telepítés most - - - - Go &back - Menj &vissza - - - - &Done - &Befejez - - - - The installation is complete. Close the installer. - A telepítés befejeződött, Bezárhatod a telepítőt. - - - - Error - Hiba - - - - Installation Failed - Telepítés nem sikerült - CalamaresPython::Helper - + Unknown exception type Ismeretlen kivétel típus - + unparseable Python error nem egyeztethető Python hiba - + unparseable Python traceback nem egyeztethető Python visszakövetés - + Unfetchable Python error. Összehasonlíthatatlan Python hiba. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Vissza - - - - &Next - &Következő - - - - &Cancel - &Mégse - - - + %1 Setup Program %1 Program telepítése - + %1 Installer %1 Telepítő + + + ChangeFilesystemLabelJob - - Show debug information - Hibakeresési információk mutatása + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + A telepítő nem tudta frissíteni a partíciós táblát a %1 lemezen. CheckerContainer - + Gathering system information... Rendszerinformációk gyűjtése... @@ -499,157 +523,197 @@ Minden változtatás elveszik, ha kilépsz a telepítőből. ChoicePage - + Form Adatlap - - After: - Utána: - - - - Boot loader location: - Rendszerbetöltő helye: - - - + Select storage de&vice: Válassz tároló eszközt: - - - - + + + + Current: Aktuális: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Utána: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manuális partícionálás</strong><br/>Létrehozhat vagy átméretezhet partíciókat. + + + Reuse %1 as home partition for %2. %1 partíció használata mint home partíció a %2 -n - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Válaszd ki a partíciót amit zsugorítani akarsz és egérrel méretezd át.</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 zsugorítva lesz %2MiB -re és új %3MiB partíció lesz létrehozva itt %4. - + + Boot loader location: + Rendszerbetöltő helye: + + + <strong>Select a partition to install on</strong> <strong>Válaszd ki a telepítésre szánt partíciót </strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nem található EFI partíció a rendszeren. Menj vissza a manuális partícionáláshoz és állíts be %1. - + The EFI system partition at %1 will be used for starting %2. A %1 EFI rendszer partíció lesz használva %2 indításához. - + EFI system partition: EFI rendszerpartíció: - + 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. Úgy tűnik ezen a tárolóeszközön nincs operációs rendszer. Mit szeretnél csinálni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Lemez törlése</strong><br/>Ez <font color="red">törölni</font> fogja a lemezen levő összes adatot. - - 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. - Ezen a tárolóeszközön %1 található. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - - - - No Swap - Swap nélkül - - - - Reuse Swap - Swap újrahasználata - - - - Swap (no Hibernate) - Swap (nincs hibernálás) - - - - Swap (with Hibernate) - Swap (hibernálással) - - - - Swap to file - Swap fájlba - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Meglévő mellé telepíteni</strong><br/>A telepítő zsugorítani fogja a partíciót, hogy elférjen a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>A partíció lecserélése</strong> a következővel: %1. - + + 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. + Ezen a tárolóeszközön %1 található. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. + + + 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. Ez a tárolóeszköz már tartalmaz egy operációs rendszert. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. - + 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. A tárolóeszközön több operációs rendszer található. Mit szeretnél tenni?<br/>Lehetőséged lesz átnézni és megerősíteni a választásod mielőtt bármilyen változtatás történik a tárolóeszközön. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + Swap nélkül + + + + Reuse Swap + Swap újrahasználata + + + + Swap (no Hibernate) + Swap (nincs hibernálás) + + + + Swap (with Hibernate) + Swap (hibernálással) + + + + Swap to file + Swap fájlba + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 %1 csatolás törlése partícionáláshoz - + Clearing mounts for partitioning operations on %1. %1 csatolás törlése partícionáláshoz - + Cleared all mounts for %1 %1 minden csatolása törölve @@ -657,22 +721,17 @@ Minden változtatás elveszik, ha kilépsz a telepítőből. ClearTempMountsJob - + Clear all temporary mounts. Minden ideiglenes csatolás törlése - + Clearing all temporary mounts. Minden ideiglenes csatolás törlése - - Cannot get list of temporary mounts. - Nem lehet lekérni az ideiglenes csatolási listát - - - + Cleared all temporary mounts. Minden ideiglenes csatolás törölve @@ -680,18 +739,18 @@ Minden változtatás elveszik, ha kilépsz a telepítőből. CommandList - - + + Could not run command. A parancsot nem lehet futtatni. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. A parancs a gazdakörnyezetben fut, és ismernie kell a gyökér útvonalát, de nincs rootMountPoint megadva. - + The command needs to know the user's name, but no username is defined. A parancsnak tudnia kell a felhasználónevet, de az nincs megadva. @@ -699,101 +758,236 @@ Minden változtatás elveszik, ha kilépsz a telepítőből. Config - + + Set keyboard model to %1.<br/> + Billentyűzet típus beállítása %1.<br/> + + + + Set keyboard layout to %1/%2. + Billentyűzet kiosztás beállítása %1/%2. + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + A rendszer területi beállítása %1. + + + + The numbers and dates locale will be set to %1. + A számok és dátumok területi beállítása %1. + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + Hálózati Telepítés. (Letiltva: Hibás adat csoportok fogadva) + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Csomag választása + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Hálózati telepítés. (Kikapcsolva: A csomagokat nem lehet letölteni, ellenőrizd a hálózati kapcsolatot) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez. <br/>A telepítés nem folytatható. <a href="#details">Részletek...</a> - + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez.<br/> Telepítés nem folytatható. <a href="#details">Részletek...</a> - + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. Ez a számítógép nem felel meg néhány követelménynek a %1 telepítéséhez. <br/>A telepítés folytatható de előfordulhat néhány képesség nem lesz elérhető. - + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez.<br/>Telepítés folytatható de néhány tulajdonság valószínűleg nem lesz elérhető. - + This program will ask you some questions and set up %2 on your computer. Ez a program fel fog tenni néhány kérdést és %2 -t telepíti a számítógépre. - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Üdvözli önt a Calamares telepítő itt %1!</h1> + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + - <h1>Welcome to %1 setup.</h1> - <h1>Köszöntjük a %1 telepítőben!</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Üdvözlet a Calamares %1 telepítőjében.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Üdvözlet a %1 telepítőben.</h1> - - - - Set keyboard model to %1.<br/> - Billentyűzet típus beállítása %1.<br/> - - - - Set keyboard layout to %1/%2. - Billentyűzet kiosztás beállítása %1/%2. - - - - The system language will be set to %1. - A rendszer területi beállítása %1. - - - - The numbers and dates locale will be set to %1. - A számok és dátumok területi beállítása %1. - - - - Set timezone to %1/%2.<br/> - Időzóna beállítása %1/%2.<br/> - - - - Network Installation. (Disabled: Incorrect configuration) + <h1>Welcome to the Calamares installer for %1</h1> - - Network Installation. (Disabled: Received invalid groups data) - Hálózati Telepítés. (Letiltva: Hibás adat csoportok fogadva) - - - - Network Installation. (Disabled: internal error) + + <h1>Welcome to the %1 installer</h1> - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Hálózati telepítés. (Kikapcsolva: A csomagokat nem lehet letölteni, ellenőrizd a hálózati kapcsolatot) + + Your username is too long. + A felhasználónév túl hosszú. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + A hálózati név túl rövid. + + + + Your hostname is too long. + A hálózati név túl hosszú. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + A két jelszó nem egyezik! + + + + OK! + + + + + Setup Failed + Telepítési hiba + + + + Installation Failed + Telepítés nem sikerült + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Telepítés Sikerült + + + + Installation Complete + A telepítés befejeződött. + + + + The setup of %1 is complete. + A telepítésből %1 van kész. + + + + The installation of %1 is complete. + A %1 telepítése elkészült. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Összefoglalás + + + + This is an overview of what will happen once you start the setup procedure. + Összefoglaló arról mi fog történni a telepítés során. + + + + This is an overview of what will happen once you start the install procedure. + Ez áttekintése annak, hogy mi fog történni, ha megkezded a telepítést. ContextualProcessJob - + Contextual Processes Job Környezetfüggő folyamatok feladat @@ -801,100 +995,136 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> CreatePartitionDialog - + Create a Partition Partíció Létrehozása - - MiB - MiB - - - - Partition &Type: - Partíció &típus: - - - - &Primary - &Elsődleges - - - - E&xtended - K&iterjesztett - - - - Fi&le System: - Fájlrendszer: - - - - LVM LV name - LVM LV név - - - - Flags: - Zászlók: - - - - &Mount Point: - &Csatolási pont: - - - + Si&ze: Mé&ret: - + + MiB + MiB + + + + Partition &Type: + Partíció &típus: + + + + Primar&y + + + + + E&xtended + K&iterjesztett + + + + Fi&le System: + Fájlrendszer: + + + + LVM LV name + LVM LV név + + + + &Mount Point: + &Csatolási pont: + + + + Flags: + Zászlók: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt Titkosítás - + Logical Logikai - + Primary Elsődleges - + GPT GPT - + Mountpoint already in use. Please select another one. A csatolási pont már használatban van. Kérlek, válassz másikat. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. Új partíció létrehozása %2MiB partíción a %4 (%3) %1 fájlrendszerrel - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Új <strong>%2MiB </strong>partíció létrehozása itt <strong>%4</strong> (%3) fájlrendszer típusa <strong>%1</strong>. - + + Creating new %1 partition on %2. Új %1 partíció létrehozása a következőn: %2. - + The installer failed to create partition on disk '%1'. A telepítő nem tudta létrehozni a partíciót ezen a lemezen '%1'. @@ -902,27 +1132,27 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> CreatePartitionTableDialog - + Create Partition Table Partíciós tábla létrehozása - + Creating a new partition table will delete all existing data on the disk. Új partíciós tábla létrehozásával az összes létező adat törlődni fog a lemezen. - + What kind of partition table do you want to create? Milyen típusú partíciós táblát szeretnél létrehozni? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partíciós Tábla (GPT) @@ -930,22 +1160,22 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> CreatePartitionTableJob - + Create new %1 partition table on %2. Új %1 partíciós tábla létrehozása a következőn: %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Új <strong>%1 </strong> partíciós tábla létrehozása a következőn: <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Új %1 partíciós tábla létrehozása a következőn: %2. - + The installer failed to create a partition table on %1. A telepítőnek nem sikerült létrehoznia a partíciós táblát a lemezen %1. @@ -953,45 +1183,41 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> CreateUserJob - + Create user %1 %1 nevű felhasználó létrehozása - + Create user <strong>%1</strong>. <strong>%1</strong> nevű felhasználó létrehozása. - - Creating user %1. - %1 nevű felhasználó létrehozása + + Preserving home directory + - - Sudoers dir is not writable. - Sudoers mappa nem írható. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Nem lehet sudoers fájlt létrehozni írásra. + + Configuring user %1 + - - Cannot chmod sudoers file. - Nem lehet a sudoers fájlt "chmod" -olni. - - - - Cannot open groups file for reading. - Nem lehet a groups fájlt megnyitni olvasásra. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group Kötetcsoport létrehozása @@ -999,22 +1225,22 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> CreateVolumeGroupJob - + Create new volume group named %1. Új kötetcsoport létrehozása: %1. - + Create new volume group named <strong>%1</strong>. Új kötetcsoport létrehozása: <strong>%1</strong>. - + Creating new volume group named %1. Új kötetcsoport létrehozása: %1. - + The installer failed to create a volume group named '%1'. A telepítő nem tudta létrehozni a kötetcsoportot: „%1”. @@ -1022,18 +1248,18 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. A kötetcsoport deaktiválása: %1. - + Deactivate volume group named <strong>%1</strong>. Kötetcsoport deaktiválása: <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. A telepítőnek nem sikerült deaktiválnia a kötetcsoportot: %1. @@ -1041,22 +1267,22 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> DeletePartitionJob - + Delete partition %1. %1 partíció törlése - + Delete partition <strong>%1</strong>. A következő partíció törlése: <strong>%1</strong>. - + Deleting partition %1. %1 partíció törlése - + The installer failed to delete partition %1. A telepítő nem tudta törölni a %1 partíciót. @@ -1064,46 +1290,46 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> DeviceInfoWidget - - 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. - A <strong>partíciós tábla</strong> típusa a kiválasztott tárolóeszközön.<br><br>Az egyetlen lehetőség a partíciós tábla változtatására ha töröljük és újra létrehozzuk a partíciós táblát, ami megsemmisít minden adatot a tárolóeszközön.<br>A telepítő megtartja az aktuális partíciós táblát ha csak másképp nem döntesz.<br>Ha nem vagy benne biztos a legtöbb modern rendszernél GPT az elterjedt. - - - + This device has a <strong>%1</strong> partition table. Az ezköz tartalmaz egy <strong>%1</strong> partíciós táblát. - + 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. A választott tárolóeszköz egy <strong>loop</strong> eszköz.<br><br>Ez nem egy partíciós tábla, ez egy pszeudo eszköz ami lehetővé teszi a hozzáférést egy fájlhoz, úgy mint egy blokk eszköz. Ez gyakran csak egy fájlrendszert tartalmaz. - + 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. A telepítő <strong>nem talált partíciós táblát</strong> a választott tárolóeszközön.<br><br> Az eszköz nem tartalmaz partíciós táblát vagy sérült vagy ismeretlen típusú.<br> A telepítő létre tud hozni újat automatikusan vagy te magad kézi partícionálással. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ez az ajánlott partíciós tábla típus modern rendszerekhez ami <strong>EFI</strong> indító környezettel indul. - + <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. <br><br>Ez a partíciós tábla típus régebbi rendszerekhez javasolt amik <strong>BIOS</strong> indító környezetből indulnak. Legtöbb esetben azonban GPT használata javasolt. <br><strong>Figyelem:</strong> az MSDOS partíciós tábla egy régi sztenderd lényeges korlátozásokkal. <br>Maximum 4 <em>elsődleges</em> partíció hozható létre és abból a 4-ből egy lehet <em>kiterjesztett</em> partíció. + + + 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. + A <strong>partíciós tábla</strong> típusa a kiválasztott tárolóeszközön.<br><br>Az egyetlen lehetőség a partíciós tábla változtatására ha töröljük és újra létrehozzuk a partíciós táblát, ami megsemmisít minden adatot a tárolóeszközön.<br>A telepítő megtartja az aktuális partíciós táblát ha csak másképp nem döntesz.<br>Ha nem vagy benne biztos a legtöbb modern rendszernél GPT az elterjedt. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 – (%2) @@ -1112,17 +1338,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Dracut LUKS konfiguráció mentése ide %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut LUKS konfiguráció mentésének kihagyása: "/" partíció nincs titkosítva. - + Failed to open %1 Hiba történt %1 megnyitásakor @@ -1130,7 +1356,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> DummyCppJob - + Dummy C++ Job Teszt C++ job @@ -1138,123 +1364,167 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> EditExistingPartitionDialog - + Edit Existing Partition Meglévő partíció szerkesztése - - Content: - Tartalom: + + Con&tent: + - + &Keep &megtart - + Format Formázás - + Warning: Formatting the partition will erase all existing data. Figyelem: A partíció formázása az összes meglévő adatot törölni fogja. - + &Mount Point: &Csatolási pont: - + Si&ze: &méret: - + MiB MiB - + Fi&le System: &fájlrendszer - + Flags: Zászlók: - - Mountpoint already in use. Please select another one. - A csatolási pont már használatban van. Kérlek, válassz másikat. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Adatlap - + En&crypt system Rendszer titkosítása - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Jelszó - + Confirm passphrase Jelszó megerősítés - + + Please enter the same passphrase in both boxes. Írd be ugyanazt a jelmondatot mindkét dobozban. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Partíció információk beállítása - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. %1 telepítése az <strong>új</strong> %2 partícióra. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - <strong>Új</strong> %2 partíció beállítása <strong>%1</strong> csatolási ponttal. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. %2 telepítése %3 <strong>%1</strong> rendszer partícióra. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - %3 partíció beállítása <strong>%1</strong> <strong>%2</strong> csatolási ponttal. - - - + Install boot loader on <strong>%1</strong>. Rendszerbetöltő telepítése ide <strong>%1</strong>. - + Setting up mount points. Csatlakozási pontok létrehozása @@ -1262,93 +1532,81 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> FinishedPage - + Form Adatlap - + &Restart now Új&raindítás most - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Minden kész.</h1><br/>%1 telepítve lett a számítógépére. <br/>Most már használhatja az új rendszert. - + <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> <html><head/><body><p>Ezt bejelölve a rendszer újra fog indulni amikor a <span style="font-style:italic;">Kész</span> gombra kattint vagy bezárja a telepítőt.</p></body></html> - + <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. <h1>Sikeres művelet.</h1><br/>%1 telepítve lett a számítógépére.<br/>Újraindítás után folytathatod az %2 éles környezetben. - + <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> <html><head/><body><p>Ezt bejelölve a rendszer újra fog indulni amikor a <span style="font-style:italic;">Kész</span>gombra kattint vagy bezárja a telepítőt.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Telepítés nem sikerült</h1><br/>%1 nem lett telepítve a számítógépére. <br/>A hibaüzenet: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>A telepítés hibába ütközött.</h1><br/>%1 nem lett telepítve a számítógépre.<br/>A hibaüzenet: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Befejezés + + + FinishedViewStep - - Setup Complete - Telepítés Sikerült - - - - Installation Complete - A telepítés befejeződött. - - - - The setup of %1 is complete. - A telepítésből %1 van kész. - - - - The installation of %1 is complete. - A %1 telepítése elkészült. + + Finish + Befejezés FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Partíció formázása %1 (fájlrendszer: %2, méret: %3 MiB) itt %4 - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> <strong>%1</strong> partíció formázása <strong>%2</strong> fájlrendszerrel. - + Formatting partition %1 with file system %2. %1 partíció formázása %2 fájlrendszerrel. - + The installer failed to format partition %1 on disk '%2'. A telepítő nem tudta formázni a %1 partíciót a %2 lemezen. @@ -1356,72 +1614,72 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> GeneralRequirements - + has at least %1 GiB available drive space legalább %1 GiB lemezterület elérhető - + There is not enough drive space. At least %1 GiB is required. Nincs elég lemezterület. Legalább %1 GiB szükséges. - + has at least %1 GiB working memory legalább %1 GiB memória elérhető - + The system does not have enough working memory. At least %1 GiB is required. A rendszer nem tartalmaz elég memóriát. Legalább %1 GiB szükséges. - + is plugged in to a power source csatlakoztatva van külső áramforráshoz - + The system is not plugged in to a power source. A rendszer nincs csatlakoztatva külső áramforráshoz - + is connected to the Internet csatlakozik az internethez - + The system is not connected to the Internet. A rendszer nem csatlakozik az internethez. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. A telepítő program nem adminisztrátori joggal fut. - + The installer is not running with administrator rights. A telepítő nem adminisztrátori jogokkal fut. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. A képernyő mérete túl kicsi a telepítő program megjelenítéséhez. - + The screen is too small to display the installer. A képernyőméret túl kicsi a telepítő megjelenítéséhez. @@ -1429,7 +1687,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> HostInfoJob - + Collecting information about your machine. @@ -1437,25 +1695,25 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> IDJob - - + + + - OEM Batch Identifier OEM Batch azonosító - + Could not create directories <code>%1</code>. Nem sikerült létrehozni a könyvtárakat <code>%1</code>. - + Could not open file <code>%1</code>. Sikertelen fájl megnyitás <code>%1</code>. - + Could not write to file <code>%1</code>. Sikertelen fájl írás <code>%1</code>. @@ -1463,7 +1721,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> InitcpioJob - + Creating initramfs with mkinitcpio. initramfs létrehozása mkinitcpio utasítással. @@ -1471,7 +1729,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> InitramfsJob - + Creating initramfs. initramfs létrehozása. @@ -1479,17 +1737,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> InteractiveTerminalPage - + Konsole not installed Konsole nincs telepítve - + Please install KDE Konsole and try again! Kérlek telepítsd a KDE Konsole-t és próbáld újra! - + Executing script: &nbsp;<code>%1</code> Script végrehajása: &nbsp;<code>%1</code> @@ -1497,28 +1755,15 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> InteractiveTerminalViewStep - + Script Szkript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Billentyűzet típus beállítása %1.<br/> - - - - Set keyboard layout to %1/%2. - Billentyűzet kiosztás beállítása %1/%2. - - KeyboardQmlViewStep - + Keyboard Billentyűzet @@ -1526,7 +1771,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> KeyboardViewStep - + Keyboard Billentyűzet @@ -1534,65 +1779,88 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> LCLocaleDialog - + System locale setting Területi beállítások - + 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>. A nyelvi beállítás kihat a nyelvi és karakter beállításokra a parancssori elemeknél.<br/>A jelenlegi beállítás <strong>%1</strong>. - + &Cancel &Mégse - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Titkosított swap konfigurálása. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Adatlap - + <h1>License Agreement</h1> - + <h1>Licenszszerződés</h1> - + I accept the terms and conditions above. Elfogadom a fentebbi felhasználási feltételeket. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1600,7 +1868,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> LicenseViewStep - + License Licensz @@ -1608,109 +1876,102 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/> %2 -ból/ -ből - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikus driver</strong><br/><font color="Grey">%2 -ból/ -ből</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 böngésző plugin</strong><br/><font color="Grey">%2 -ból/ -ből</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">%2 -ból/ -ből</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 csomag</strong><br/><font color="Grey" >%2 -ból/ -ből</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">%2 -ból/ -ből</font> - + File: %1 - + + Hide license text + Licensz szöveg elrejtése + + + Show the license text - + Open license agreement in browser. - - - Hide license text - Licensz szöveg elrejtése - LocalePage - - The system language will be set to %1. - A rendszer területi beállítása %1. - - - - The numbers and dates locale will be set to %1. - A számok és dátumok területi beállítása %1. - - - + Region: Régió: - + Zone: Zóna: - - + + &Change... &Változtat... - - - Set timezone to %1/%2.<br/> - Időzóna beállítása %1/%2.<br/> - LocaleQmlViewStep - + Location Hely + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Hely @@ -1718,35 +1979,35 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> LuksBootKeyFileJob - + Configuring LUKS key file. LUKS kulcs fájl konfigurálása. - - + + No partitions are defined. Nincsenek partíciók definiálva. - - - + + + Encrypted rootfs setup error Titkosított rootfs telepítési hiba - + Root partition %1 is LUKS but no passphrase has been set. A %1 root partíció LUKS de beállítva nincs kulcs. - + Could not create LUKS key file for root partition %1. Nem sikerült létrehozni a LUKS kulcs fájlt a %1 root partícióhoz - + Could not configure LUKS key file on partition %1. @@ -1754,116 +2015,130 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> MachineIdJob - + Generate machine-id. Gépazonosító előállítása. - + Configuration Error Konfigurációs hiba - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Csomag választása - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Böngésző - + Kernel - + Kernel - + Services - + Szolgáltatások - + Login - + Bejelentkezés - + Desktop - + Asztal - + Applications - + Alkalmazások - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1871,7 +2146,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> NotesQmlViewStep - + Notes @@ -1879,17 +2154,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> OEMPage - + Ba&tch: Ba&amp;tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Gépelje ide a batch azonosítót. Ez a célrendszeren lesz tárolva.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM konfiguráció</h1> <p>A Calamares az OEM beállításokat fogja használni a célrendszer konfigurációjához.</p></body></html> @@ -1897,260 +2172,317 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> OEMViewStep - + OEM Configuration OEM konfiguráció - + Set the OEM Batch Identifier to <code>%1</code>. Állítsa az OEM Batch azonosítót erre: <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Túl rövid jelszó - + Password is too long Túl hosszú jelszó - + Password is too weak A jelszó túl gyenge - + Memory allocation error when setting '%1' Memóriafoglalási hiba a(z) „%1” beállításakor - + Memory allocation error Memóriafoglalási hiba - + The password is the same as the old one A jelszó ugyanaz, mint a régi - + The password is a palindrome A jelszó egy palindrom - + The password differs with case changes only A jelszó csak kis- és nagybetűben tér el - + The password is too similar to the old one A jelszó túlságosan hasonlít a régire - + The password contains the user name in some form A jelszó tartalmazza felhasználónevet valamilyen formában - + The password contains words from the real name of the user in some form A jelszó tartalmazza a felhasználó valódi nevét valamilyen formában - + The password contains forbidden words in some form A jelszó tiltott szavakat tartalmaz valamilyen formában - - The password contains less than %1 digits - A jelszó kevesebb mint %1 számjegyet tartalmaz - - - + The password contains too few digits A jelszó túl kevés számjegyet tartalmaz - - The password contains less than %1 uppercase letters - A jelszó kevesebb mint %1 nagybetűt tartalmaz - - - + The password contains too few uppercase letters A jelszó túl kevés nagybetűt tartalmaz - - - The password contains less than %1 lowercase letters - A jelszó kevesebb mint %1 kisbetűt tartalmaz + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters A jelszó túl kevés kisbetűt tartalmaz - - The password contains less than %1 non-alphanumeric characters - A jelszó kevesebb mint %1 nem alfanumerikus karaktert tartalmaz - - - + The password contains too few non-alphanumeric characters A jelszó túl kevés nem alfanumerikus karaktert tartalmaz - - The password is shorter than %1 characters - A jelszó rövidebb mint %1 karakter - - - + The password is too short A jelszó túl rövid - - The password is just rotated old one - A jelszó egy újra felhasznált régi jelszó - - - - The password contains less than %1 character classes - A jelszó kevesebb mint %1 karaktert tartalmaz - - - + The password does not contain enough character classes A jelszó nem tartalmaz elég karakterosztályt - - The password contains more than %1 same characters consecutively - A jelszó több mint %1 egyező karaktert tartalmaz egymás után - - - + The password contains too many same characters consecutively A jelszó túl sok egyező karaktert tartalmaz egymás után - - The password contains more than %1 characters of the same class consecutively - A jelszó több mint %1 karaktert tartalmaz ugyanabból a karakterosztályból egymás után - - - + The password contains too many characters of the same class consecutively A jelszó túl sok karaktert tartalmaz ugyanabból a karakterosztályból egymás után - - - The password contains monotonic sequence longer than %1 characters - A jelszó %1 karakternél hosszabb monoton sorozatot tartalmaz + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence A jelszó túl hosszú monoton karaktersorozatot tartalmaz - + No password supplied Nincs jelszó megadva - + Cannot obtain random numbers from the RNG device Nem nyerhetőek ki véletlenszámok az RNG eszközből - + Password generation failed - required entropy too low for settings A jelszó előállítás meghiúsult – a szükséges entrópia túl alacsony a beállításokhoz - + The password fails the dictionary check - %1 A jelszó megbukott a szótárellenőrzésen – %1 - + The password fails the dictionary check A jelszó megbukott a szótárellenőrzésen - + Unknown setting - %1 Ismeretlen beállítás – %1 - + Unknown setting Ismeretlen beállítás - + Bad integer value of setting - %1 Hibás egész érték a beállításnál – %1 - + Bad integer value Hibás egész érték - + Setting %1 is not of integer type A(z) %1 beállítás nem egész típusú - + Setting is not of integer type A beállítás nem egész típusú - + Setting %1 is not of string type A(z) %1 beállítás nem karakterlánc típusú - + Setting is not of string type A beállítás nem karakterlánc típusú - + Opening the configuration file failed A konfigurációs fájl megnyitása meghiúsult - + The configuration file is malformed A konfigurációs fájl rosszul formázott - + Fatal failure Végzetes hiba - + Unknown error Ismeretlen hiba - + Password is empty @@ -2158,40 +2490,48 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PackageChooserPage - + Form Adatlap - + Product Name - + TextLabel Szöveges címke - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2199,12 +2539,12 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PackageModel - + Name Név - + Description Leírás @@ -2212,17 +2552,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> Page_Keyboard - + Form Adatlap - + Keyboard Model: Billentyűzet modell: - + Type here to test your keyboard Gépelj itt a billentyűzet teszteléséhez @@ -2230,96 +2570,96 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> Page_UserSetup - + Form Adatlap - + What is your name? Mi a neved? - - What name do you want to use to log in? - Milyen felhasználónévvel szeretnél bejelentkezni? - - - - Choose a password to keep your account safe. - Adj meg jelszót a felhasználói fiókod védelmére. - - - - - <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> - <small>Írd be a jelszót kétszer így ellenőrizve lesznek a gépelési hibák. A jó jelszó tartalmazzon kis és nagy betűket, számokat és legalább 8 karakter hosszúságú. Ajánlott megváltoztatni rendszeres időközönként.</small> - - - - What is the name of this computer? - Mi legyen a számítógép neve? - - - + Your Full Name - + + What name do you want to use to log in? + Milyen felhasználónévvel szeretnél bejelentkezni? + + + login - + + What is the name of this computer? + Mi legyen a számítógép neve? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ez a név lesz használva ha a számítógép látható a hálózaton.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Adj meg jelszót a felhasználói fiókod védelmére. + + + + + <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> + <small>Írd be a jelszót kétszer így ellenőrizve lesznek a gépelési hibák. A jó jelszó tartalmazzon kis és nagy betűket, számokat és legalább 8 karakter hosszúságú. Ajánlott megváltoztatni rendszeres időközönként.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Jelszó megkérdezése nélküli automatikus bejelentkezés. - + Use the same password for the administrator account. Ugyanaz a jelszó használata az adminisztrátor felhasználóhoz. - + Choose a password for the administrator account. Adj meg jelszót az adminisztrátor felhasználói fiókhoz. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Írd be a jelszót kétszer így ellenőrizve lesznek a gépelési hibák.</small> @@ -2327,42 +2667,42 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI rendszer - + Swap Swap - + New partition for %1 Új partíció %1 -ra/ -re - + New partition Új partíció - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2711,39 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PartitionModel - - + + Free Space Szabad terület - - + + New partition Új partíció - + Name Név - + File System Fájlrendszer - + + File System Label + + + + Mount Point Csatolási pont - + Size Méret @@ -2406,77 +2751,77 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PartitionPage - + Form Adatlap - + Storage de&vice: Eszköz: - + &Revert All Changes &Módosítások visszavonása - + New Partition &Table Új partíciós &tábla - + Cre&ate &Létrehozás - + &Edit &Szerkeszt - + &Delete &Töröl - + New Volume Group Új kötetcsoport - + Resize Volume Group Kötetcsoport átméretezése - + Deactivate Volume Group Kötetcsoport deaktiválása - + Remove Volume Group Kötetcsoport eltávolítása - + I&nstall boot loader on: Rendszerbetöltő &telepítése ide: - + Are you sure you want to create a new partition table on %1? Biztos vagy benne, hogy létrehozol egy új partíciós táblát itt %1 ? - + Can not create new partition Nem hozható létre új partíció - + 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. A(z) %1 lemezen lévő partíciós táblában már %2 elsődleges partíció van, és több nem adható hozzá. Helyette távolítson el egy elsődleges partíciót, és adjon hozzá egy kiterjesztett partíciót. @@ -2484,117 +2829,107 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PartitionViewStep - + Gathering system information... Rendszerinformációk gyűjtése... - + Partitions Partíciók - - Install %1 <strong>alongside</strong> another operating system. - %1 telepítése más operációs rendszer <strong>mellé</strong> . + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Lemez törlés</strong>és %1 telepítés. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>A partíció lecserélése</strong> a következővel: %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Kézi</strong> partícionálás. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - %1 telepítése más operációs rendszer <strong>mellé</strong> a <strong>%2</strong> (%3) lemezen. - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>%2 lemez törlése</strong> (%3) és %1 telepítés. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>A partíció lecserélése</strong> a <strong>%2</strong> lemezen(%3) a következővel: %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Kézi</strong> telepítés a <strong>%1</strong> (%2) lemezen. - - - - Disk <strong>%1</strong> (%2) - Lemez <strong>%1</strong> (%2) - - - + Current: Aktuális: - + After: Utána: - + No EFI system partition configured Nincs EFI rendszer partíció beállítva - - 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>esp</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. - EFI rendszerpartíciónak léteznie kell %1 indításához.<br/><br/> Az EFI rendszer beállításához lépj vissza és hozz létre FAT32 fájlrendszert <strong>esp</strong> zászlóval és <strong>%2</strong> csatolási ponttal beállítva.<br/><br/> Folytathatod a telepítést EFI rendszerpartíció létrehozása nélkül is, de lehet, hogy a rendszer nem indul majd. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - EFI partíciós zászló nincs beállítva + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - EFI rendszerpartíciónak léteznie kell %1 indításához.<br/><br/> A csatolási pont <strong>%2</strong> beállítása sikerült a partíción de a zászló nincs beállítva. A beálíltásához lépj vissza szerkeszteni a partíciót..<br/><br/> Folytathatod a telepítést zászló beállítása nélkül is, de lehet, hogy a rendszer nem indul el majd. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Indító partíció nincs titkosítva - + 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. Egy külön indító partíció lett beállítva egy titkosított root partícióval, de az indító partíció nincs titkosítva.br/><br/>Biztonsági aggályok merülnek fel ilyen beállítás mellet, mert fontos fájlok nem titkosított partíción vannak tárolva. <br/>Ha szeretnéd, folytathatod így, de a fájlrendszer zárolása meg fog történni az indítás után. <br/> Az indító partíció titkosításához lépj vissza és az újra létrehozáskor válaszd a <strong>Titkosít</strong> opciót. - + has at least one disk device available. legalább egy lemez eszköz elérhető. - + There are no partitions to install on. @@ -2602,13 +2937,13 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma kinézet feladat - - + + Could not select KDE Plasma Look-and-Feel package A KDE Plasma kinézeti csomag nem válaszható ki @@ -2616,17 +2951,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PlasmaLnfPage - + Form Adatlap - + 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. Kérem válasszon kinézetet a KDE Plasma felülethez, Kihagyhatja ezt a lépést és konfigurálhatja a kinézetet a rendszer telepítése után. A listában a kinézetet kiválasztva egy élő előnézetet fog látni az adott témáról. - + 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. Válasszon egy kinézetet a KDE Plasma asztali környezethez. Ki is hagyhatja ezt a lépést, és beállíthatja a kinézetet, ha a telepítés elkészült. A kinézetválasztóra kattintva élő előnézetet kaphat a kinézetről. @@ -2634,7 +2969,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PlasmaLnfViewStep - + Look-and-Feel Kinézet @@ -2642,17 +2977,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> PreserveFiles - + Saving files for later ... Fájlok mentése későbbre … - + No files configured to save for later. Nincsenek fájlok beállítva elmentésre későbbre - + Not all of the configured files could be preserved. Nem az összes beállított fájl örízhető meg. @@ -2660,14 +2995,14 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> ProcessResult - + There was no output from the command. A parancsnak nem volt kimenete. - + Output: @@ -2676,52 +3011,52 @@ Kimenet: - + External command crashed. Külső parancs összeomlott. - + Command <i>%1</i> crashed. Parancs <i>%1</i> összeomlott. - + External command failed to start. A külső parancsot nem sikerült elindítani. - + Command <i>%1</i> failed to start. A(z) <i>%1</i> parancsot nem sikerült elindítani. - + Internal error when starting command. Belső hiba a parancs végrehajtásakor. - + Bad parameters for process job call. Hibás paraméterek a folyamat hívásához. - + External command failed to finish. Külső parancs nem fejeződött be. - + Command <i>%1</i> failed to finish in %2 seconds. A(z) <i>%1</i> parancsot nem sikerült befejezni %2 másodperc alatt. - + External command finished with errors. A külső parancs hibával fejeződött be. - + Command <i>%1</i> finished with exit code %2. A(z) <i>%1</i> parancs hibakóddal lépett ki: %2. @@ -2729,89 +3064,94 @@ Kimenet: QObject - - Default Keyboard Model - Alapértelmezett billentyűzet - - - - - Default - Alapértelmezett - - - - unknown - ismeretlen - - - - extended - kiterjesztett - - - - unformatted - formázatlan - - - - swap - Swap - - - - Unpartitioned space or unknown partition table - Nem particionált, vagy ismeretlen partíció - - - - (no mount point) - (nincs csatolási pont) - - - - Requirements checking for module <i>%1</i> is complete. - Követelmények ellenőrzése a <i>%1</i>modulhoz kész. - - - + %1 (%2) %1 (%2) - - No product - + + unknown + ismeretlen - - No description provided. - + + extended + kiterjesztett - - - - + + unformatted + formázatlan + + + + swap + Swap + + + + + Default + Alapértelmezett + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + (nincs csatolási pont) + + + + Unpartitioned space or unknown partition table + Nem particionált, vagy ismeretlen partíció + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system Éles felhasználó eltávolítása a cél rendszerből @@ -2819,18 +3159,18 @@ Kimenet: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. A kötetcsoport eltávolítása: %1. - + Remove Volume Group named <strong>%1</strong>. Kötetcsoport eltávolítása: <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. A telepítő nem tudta eltávolítani a kötetcsoportot: „%1”. @@ -2838,143 +3178,158 @@ Kimenet: ReplaceWidget - + Form Adatlap - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Válaszd ki az telepítés helyét %1.<br/><font color="red">Figyelmeztetés: </font>minden fájl törölve lesz a kiválasztott partíción. - + The selected item does not appear to be a valid partition. A kiválasztott elem nem tűnik érvényes partíciónak. - + %1 cannot be installed on empty space. Please select an existing partition. %1 nem telepíthető, kérlek válassz egy létező partíciót. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nem telepíthető a kiterjesztett partícióra. Kérlek, válassz egy létező elsődleges vagy logikai partíciót. - + %1 cannot be installed on this partition. Nem lehet telepíteni a következőt %1 erre a partícióra. - + Data partition (%1) Adat partíció (%1) - + Unknown system partition (%1) Ismeretlen rendszer partíció (%1) - + %1 system partition (%2) %1 rendszer partíció (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partíció %1 túl kicsi a következőhöz %2. Kérlek, válassz egy legalább %3 GB- os partíciót. - + <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. <strong>%2</strong><br/><br/>Az EFI rendszerpartíció nem található a rendszerben. Kérlek, lépj vissza és állítsd be manuális partícionálással %1- et. - - - + + + <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. <strong>%3</strong><br/><br/>%1 installálva lesz a következőre: %2.<br/><font color="red">Figyelmeztetés: </font>a partíción %2 minden törölve lesz. - + The EFI system partition at %1 will be used for starting %2. A %2 indításához az EFI rendszer partíciót használja a következőn: %1 - + EFI system partition: EFI rendszer partíció: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job Fájlrendszer átméretezési feladat - + Invalid configuration Érvénytelen konfiguráció - + The file-system resize job has an invalid configuration and will not run. A fájlrendszer átméretezési feladat konfigurációja érvénytelen, és nem fog futni. - + KPMCore not Available A KPMCore nem érhető el - + Calamares cannot start KPMCore for the file-system resize job. A Calamares nem tudja elindítani a KPMCore-t a fájlrendszer átméretezési feladathoz. - - - - - + + + + + Resize Failed Az átméretezés meghiúsult - + The filesystem %1 could not be found in this system, and cannot be resized. A(z) %1 fájlrendszer nem található a rendszeren, és nem méretezhető át. - + The device %1 could not be found in this system, and cannot be resized. A(z) %1 eszköz nem található a rendszeren, és nem méretezhető át. - - + + The filesystem %1 cannot be resized. A(z) %1 fájlrendszer nem méretezhető át. - - + + The device %1 cannot be resized. A(z) %1 eszköz nem méretezhető át. - + The filesystem %1 must be resized, but cannot. A(z) %1 fájlrendszert át kell méretezni, de nem lehet. - + The device %1 must be resized, but cannot A(z) %1 eszközt át kell méretezni, de nem lehet @@ -2982,22 +3337,22 @@ Kimenet: ResizePartitionJob - + Resize partition %1. A %1 partíció átméretezése. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong><strong>%1</strong> partíció átméretezése erre <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. %1 partíción %2MiB átméretezése erre %3MiB. - + The installer failed to resize partition %1 on disk '%2'. A telepítő nem tudta átméretezni a(z) %1 partíciót a(z) '%2' lemezen. @@ -3005,7 +3360,7 @@ Kimenet: ResizeVolumeGroupDialog - + Resize Volume Group Kötetcsoport átméretezése @@ -3013,18 +3368,18 @@ Kimenet: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. A(z) %1 kötet átméretezése ekkoráról: %2, ekkorára: %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. A(z) <strong>%1</strong> kötet átméretezése ekkoráról: <strong>%2</strong>, ekkorára: <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. A telepítő nem tudta átméretezni a kötetcsoportot: „%1”. @@ -3032,54 +3387,25 @@ Kimenet: ResultsListDialog - + For best results, please ensure that this computer: A legjobb eredményért győződjünk meg, hogy ez a számítógép: - + System requirements Rendszer követelmények - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez. <br/>A telepítés nem folytatható. <a href="#details">Részletek...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez.<br/> -Telepítés nem folytatható. <a href="#details">Részletek...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Ez a számítógép nem felel meg néhány követelménynek a %1 telepítéséhez. <br/>A telepítés folytatható de előfordulhat néhány képesség nem lesz elérhető. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Ez a számítógép nem felel meg a minimum követelményeknek a %1 telepítéséhez.<br/>Telepítés folytatható de néhány tulajdonság valószínűleg nem lesz elérhető. - - - - This program will ask you some questions and set up %2 on your computer. - Ez a program fel fog tenni néhány kérdést és %2 -t telepíti a számítógépre. - - ScanningDialog - + Scanning storage devices... Eszközök keresése... - + Partitioning Partícionálás @@ -3087,29 +3413,29 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> SetHostNameJob - + Set hostname %1 Hálózati név beállítása a %1 -en - + Set hostname <strong>%1</strong>. Hálózati név beállítása a következőhöz: <strong>%1</strong>. - + Setting hostname %1. Hálózati név beállítása a %1 -hez + - Internal Error Belső hiba - - + + Cannot write hostname to target system Nem lehet a hálózati nevet írni a célrendszeren @@ -3117,29 +3443,29 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Billentyűzet beállítása %1, elrendezés %2-%3 - + Failed to write keyboard configuration for the virtual console. Hiba történt a billentyűzet virtuális konzolba való beállításakor - - - + + + Failed to write to %1 Hiba történt %1 -re történő íráskor - + Failed to write keyboard configuration for X11. Hiba történt a billentyűzet X11- hez való beállításakor - + Failed to write keyboard configuration to existing /etc/default directory. Hiba történt a billentyűzet konfiguráció alapértelmezett /etc/default mappába valló elmentésekor. @@ -3147,82 +3473,82 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> SetPartFlagsJob - + Set flags on partition %1. Zászlók beállítása a partíción %1. - + Set flags on %1MiB %2 partition. flags beállítása a %1MiB %2 partíción. - + Set flags on new partition. Jelzők beállítása az új partíción. - + Clear flags on partition <strong>%1</strong>. Zászlók törlése a partíción: <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. flags eltávolítása a %1MiB <strong>%2</strong> partíción. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Flag %1MiB <strong>%2</strong> partíción mint <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Flag-ek eltávolítása a %1MiB <strong>%2</strong> partíción. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Flag-ek beállítása <strong>%3</strong> a %1MiB <strong>%2</strong> partíción. - - - + Clear flags on new partition. Jelzők törlése az új partíción. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Zászlók beállítása <strong>%1</strong> ,mint <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Flag %1MiB <strong>%2</strong> partíción mint <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Jelző beállítása mint <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Zászlók törlése a partíción: <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Flag-ek eltávolítása a %1MiB <strong>%2</strong> partíción. + + + Clearing flags on new partition. jelzők törlése az új partíción. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Zászlók beállítása <strong>%2</strong> a <strong>%1</strong> partíción. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Flag-ek beállítása <strong>%3</strong> a %1MiB <strong>%2</strong> partíción. + + + Setting flags <strong>%1</strong> on new partition. Jelzők beállítása az új <strong>%1</strong> partíción. - + The installer failed to set flags on partition %1. A telepítőnek nem sikerült a zászlók beállítása a partíción %1. @@ -3230,42 +3556,42 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> SetPasswordJob - + Set password for user %1 %1 felhasználó jelszó beállítása - + Setting password for user %1. %1 felhasználói jelszó beállítása - + Bad destination system path. Rossz célrendszer elérési út - + rootMountPoint is %1 rootMountPoint is %1 - + Cannot disable root account. A root account- ot nem lehet inaktiválni. - + passwd terminated with error code %1. passwd megszakítva %1 hibakóddal. - + Cannot set password for user %1. Nem lehet a %1 felhasználó jelszavát beállítani. - + usermod terminated with error code %1. usermod megszakítva %1 hibakóddal. @@ -3273,45 +3599,82 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> SetTimezoneJob - + Set timezone to %1/%2 Időzóna beállítása %1/%2 - + Cannot access selected timezone path. A választott időzóna útvonal nem hozzáférhető. - + Bad path: %1 Rossz elérési út: %1 - + Cannot set timezone. Nem lehet az időzónát beállítani. - + Link creation failed, target: %1; link name: %2 Link létrehozása nem sikerült: %1, link év: %2 - + Cannot set timezone, Nem lehet beállítani az időzónát . - + Cannot open /etc/timezone for writing Nem lehet megnyitni írásra: /etc/timezone + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Nem lehet a sudoers fájlt "chmod" -olni. + + + + Cannot create sudoers file for writing. + Nem lehet sudoers fájlt létrehozni írásra. + + ShellProcessJob - + Shell Processes Job Parancssori folyamatok feladat @@ -3319,81 +3682,117 @@ Telepítés nem folytatható. <a href="#details">Részletek...</a> SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Összefoglaló arról mi fog történni a telepítés során. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Ez áttekintése annak, hogy mi fog történni, ha megkezded a telepítést. + + &Yes + &Igen - - - SummaryViewStep - - Summary - Összefoglalás + + &No + &Nem + + + + &Cancel + &Mégse + + + + &Close + &Bezár TrackingInstallJob - + Installation feedback Visszajelzés a telepítésről - + Sending installation feedback. Telepítési visszajelzés küldése. - + Internal error in install-tracking. Hiba a telepítő nyomkövetésben. - + HTTP request timed out. HTTP kérés ideje lejárt. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Gépi visszajelzés - + Configuring machine feedback. Gépi visszajelzés konfigurálása. - - + + Error in machine feedback configuration. Hiba a gépi visszajelzés konfigurálásában. - + Could not configure machine feedback correctly, script error %1. Gépi visszajelzés konfigurálása nem megfelelő, script hiba %1. - + Could not configure machine feedback correctly, Calamares error %1. Gépi visszajelzés konfigurálása nem megfelelő,. Calamares hiba %1. @@ -3402,106 +3801,97 @@ Calamares hiba %1. TrackingPage - + Form Adatlap - + Placeholder Helytartó - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Ezt kiválasztva te<span style=" font-weight:600;">nem tudsz küldeni információt</span>a telepítésről.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;"> Kattints ide bővebb információért a felhasználói visszajelzésről </span></a></p></body><head/></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - A telepítés nyomkövetése %1 segít látni, hogy hány felhasználója van, milyen eszközre , %1 és (az alábbi utolsó két opcióval), folyamatosan kapunk információt az előnyben részesített alkalmazásokról. Hogy lásd mi lesz elküldve kérlek kattints a súgó ikonra a mező mellett. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Ezt kiválasztva információt fogsz küldeni a telepítésről és a számítógépről. Ez az információ <b>csak egyszer lesz </b>elküldve telepítés után. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Ezt kiválasztva információt fogsz küldeni <b>időközönként</b> a telepítésről, számítógépről, alkalmazásokról ide %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Ezt kiválasztva<b> rendszeresen</b> fogsz információt küldeni a telepítésről, számítógépről, alkalmazásokról és használatukról ide %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Visszacsatolás + + UmountJob + + + Unmount file systems. + Fájlrendszerek leválasztása. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ha egynél több személy használja a számítógépet akkor létrehozhat több felhasználói fiókot telepítés után.</small> + + + UsersQmlViewStep - - Your username is too long. - A felhasználónév túl hosszú. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - A hálózati név túl rövid. - - - - Your hostname is too long. - A hálózati név túl hosszú. - - - - Your passwords do not match! - A két jelszó nem egyezik! + + Users + Felhasználók UsersViewStep - + Users Felhasználók @@ -3509,65 +3899,67 @@ Calamares hiba %1. VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Érték VolumeGroupBaseDialog - + Create Volume Group Kötetcsoport létrehozása - + List of Physical Volumes Fizikai kötetek listája - + Volume Group Name: Kötetcsoport neve: - + Volume Group Type: Kötetcsoport típusa: - + Physical Extent Size: Fizikai kiterjedés mérete: - + MiB MiB - + Total Size: Teljes méret: - + Used Size: Használt méret: - + Total Sectors: Szektorok összesen: - + Quantity of LVs: Logkai kötetek száma: @@ -3575,106 +3967,106 @@ Calamares hiba %1. WelcomePage - + Form Adatlap - - + + Select application and system language + &About + &Névjegy + + + Open donations website - + &Donate - + Open help and support website + &Support + &Támogatás + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Kiadási megjegyzések - - - &Known issues &Ismert hibák - - &Support - &Támogatás + + Open release notes website + - - &About - &Névjegy + + &Release notes + &Kiadási megjegyzések - - <h1>Welcome to the %1 installer.</h1> - <h1>Üdvözlet a %1 telepítőben.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Üdvözlet a Calamares %1 telepítőjében.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Üdvözli önt a Calamares telepítő itt %1!</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Köszöntjük a %1 telepítőben!</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Üdvözlet a Calamares %1 telepítőjében.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Üdvözlet a %1 telepítőben.</h1> + + + + %1 support + %1 támogatás + + + About %1 setup A %1 telepítőről. - + About %1 installer A %1 telepítőről - + <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. - - - %1 support - %1 támogatás - WelcomeQmlViewStep - + Welcome Üdvözlet @@ -3682,31 +4074,157 @@ Calamares hiba %1. WelcomeViewStep - + Welcome Üdvözlet + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Konfigurációs hiba + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Hibakeresési információk mutatása + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3714,86 +4232,283 @@ Calamares hiba %1. keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Billentyűzet modell: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Gépelj itt a billentyűzet teszteléséhez - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Mi a neved? + + + + Your Full Name + + + + + What name do you want to use to log in? + Milyen felhasználónévvel szeretnél bejelentkezni? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Mi legyen a számítógép neve? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Adj meg jelszót a felhasználói fiókod védelmére. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Ugyanaz a jelszó használata az adminisztrátor felhasználóhoz. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_i18n.qrc.in b/lang/calamares_i18n.qrc.in new file mode 100644 index 000000000..dd7931e09 --- /dev/null +++ b/lang/calamares_i18n.qrc.in @@ -0,0 +1,9 @@ + + + + +@calamares_i18n_qrc_content@ + + diff --git a/lang/calamares_id.ts b/lang/calamares_id.ts index 572a83db8..dd45e866f 100644 --- a/lang/calamares_id.ts +++ b/lang/calamares_id.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Kelola pengaturan mount otomatis + + BootInfoWidget - + 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. <strong>Lingkungan boot</strong> pada sistem ini.<br><br>Sistem x86 kuno hanya mendukung <strong>BIOS</strong>.<br>Sistem moderen biasanya menggunakan <strong>EFI</strong>, tapi mungkin juga tampak sebagai BIOS jika dimulai dalam mode kompatibilitas. - + 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. - Sistem ini telah dimulai dengan lingkungan boot <strong>EFI</strong>.<br><br>Untuk mengkonfigurasi startup dari lingkungan EFI, installer ini seharusnya memaparkan sebuah aplikasi boot loader, seperti <strong>GRUB</strong> atau <strong>systemd-boot</strong> pada sebuah <strong>EFI System Partition</strong>. Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus memilihnya atau menciptakannya pada milikmu. + Sistem ini telah dimulai dengan lingkungan boot <strong>EFI</strong>.<br><br>Untuk mengkonfigurasi startup dari lingkungan EFI, installer ini seharusnya memaparkan sebuah aplikasi boot loader, seperti <strong>GRUB</strong> atau <strong>systemd-boot</strong> pada sebuah <strong>EFI System Partition</strong>. Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam kasus ini kamu harus memilihnya atau menciptakannya sendiri. - + 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. - Sistem ini dimulai dengan sebuah lingkungan boot <strong>BIOS</strong>.<br><br>Untuk mengkonfigurasi startup dari sebuah lingkungan BIOS, installer ini seharusnya memasang sebuah boot loader, seperti <strong>GRUB</strong>, baik di awal partisi atau pada <strong>Master Boot Record</strong> di dekat awalan tabel partisi (yang disukai). Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus menyetelnya pada milikmu. + Sistem ini dimulai dengan sebuah lingkungan boot <strong>BIOS</strong>.<br><br>Untuk mengkonfigurasi startup dari sebuah lingkungan BIOS, installer ini harus memasang sebuah boot loader, seperti <strong>GRUB</strong>, baik di awal partisi atau pada <strong>Master Boot Record</strong> di dekat awalan tabel partisi (yang disukai). Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus menyetelnya sendiri. BootLoaderModel - + Master Boot Record of %1 Master Boot Record %1 - + Boot Partition Partisi Boot - + System Partition Partisi Sistem - + Do not install a boot loader Jangan instal boot loader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Halaman Kosong @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Isian - + GlobalStorage PenyimpananGlobal - + JobQueue AntrianTugas - + Modules Modul - + Type: Tipe: - - + + none tidak ada - + Interface: Antarmuka: - - Tools - Alat - - - - Reload Stylesheet + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + Unggah catatan sesi ke pastebin yang telah dikonfigurasi. + + + + Send Session Log + Kirim Catatan Sesi + + + + Reload Stylesheet + Muat ulang Lembar gaya + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Informasi debug @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Instal @@ -130,20 +158,20 @@ Calamares::FailJob - + Job failed (%1) - + Pekerjaan gagal (%1) - + Programmed job failure was explicitly requested. - + Kegagalan pekerjaan diprogram diminta secara eksplisit. Calamares::JobThread - + Done Selesai @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - + Contoh pekerjaan (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Jalankan perintah '%1' pada sistem target. - + Run command '%1'. - + Jalankan perintah '%1'. - + Running command %1 %2 Menjalankan perintah %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Menjalankan %1 operasi. - + Bad working directory path Jalur lokasi direktori tidak berjalan baik - + Working directory %1 for python job %2 is not readable. Direktori kerja %1 untuk penugasan python %2 tidak dapat dibaca. - + Bad main script file Berkas skrip utama buruk - + Main script file %1 for python job %2 is not readable. Berkas skrip utama %1 untuk penugasan python %2 tidak dapat dibaca. - + Boost.Python error in job "%1". Boost.Python mogok dalam penugasan "%1". @@ -210,285 +238,281 @@ Calamares::QmlViewStep - + Loading ... - + Memuat ... - + QML Step <i>%1</i>. - + QML Langkah <i>%1</i>. - + Loading failed. - + Gagal memuat. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). - - + + Menunggu %n modul(). - + (%n second(s)) - - + + (%n detik()) - + System-requirements checking is complete. - + Pengecekan kebutuhan sistem telah selesai. Calamares::ViewManager - - &Back - &Kembali - - - - &Next - &Berikutnya - - - - &Cancel - &Batal - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Batalkan instalasi tanpa mengubah sistem yang ada. - - - + Setup Failed - + Pengaturan Gagal - - Would you like to paste the install log to the web? - + + Installation Failed + Instalasi Gagal - + + Error + Kesalahan + + + + &Yes + &Ya + + + + &No + &Tidak + + + + &Close + &Tutup + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Inisialisasi Calamares Gagal - + %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. %1 tidak dapat terinstal. Calamares tidak dapat memuat seluruh modul konfigurasi. Terdapat masalah dengan Calamares karena sedang digunakan oleh distribusi. - + <br/>The following modules could not be loaded: <br/>Modul berikut tidak dapat dimuat. - - Continue with installation? - + + Continue with setup? + Lanjutkan dengan setelan ini? - + + Continue with installation? + Lanjutkan instalasi? + + + 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> - + + 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> + Installer %1 akan membuat perubahan ke disk Anda untuk memasang %2.<br/><strong>Anda tidak dapat membatalkan perubahan tersebut.</strong> + + + &Set up now - + + &Install now + &Instal sekarang + + + + Go &back + &Kembali + + + &Set up - + &Install &Instal - + Setup is complete. Close the setup program. - + Setup selesai. Tutup program setup. - + + The installation is complete. Close the installer. + Instalasi sudah lengkap. Tutup installer. + + + + Cancel setup without changing the system. + Batalkan setup tanpa mengubah sistem. + + + + Cancel installation without changing the system. + Batalkan instalasi tanpa mengubah sistem yang ada. + + + + &Next + &Berikutnya + + + + &Back + &Kembali + + + + &Done + &Selesai + + + + &Cancel + &Batal + + + Cancel setup? - + Batalkan setup? - + Cancel installation? Batalkan instalasi? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Apakah Anda benar-benar ingin membatalkan proses instalasi ini? Instalasi akan ditutup dan semua perubahan akan hilang. - - - - &Yes - &Ya - - - - - &No - &Tidak - - - - &Close - &Tutup - - - - Continue with setup? - Lanjutkan dengan setelan ini? - - - - 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> - Installer %1 akan membuat perubahan ke disk Anda untuk memasang %2.<br/><strong>Anda tidak dapat membatalkan perubahan tersebut.</strong> - - - - &Install now - &Instal sekarang - - - - Go &back - &Kembali - - - - &Done - &Kelar - - - - The installation is complete. Close the installer. - Instalasi sudah lengkap. Tutup installer. - - - - Error - Kesalahan - - - - Installation Failed - Instalasi Gagal - CalamaresPython::Helper - + Unknown exception type Tipe pengecualian tidak dikenal - + unparseable Python error tidak dapat mengurai pesan kesalahan Python - + unparseable Python traceback tidak dapat mengurai penelusuran balik Python - + Unfetchable Python error. Tidak dapat mengambil pesan kesalahan Python. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Kembali - - - - &Next - &Berikutnya - - - - &Cancel - &Batal - - - + %1 Setup Program - + %1 Installer Installer %1 + + + ChangeFilesystemLabelJob - - Show debug information - Tampilkan informasi debug + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Pemasang gagal memperbarui tabel partisi pada disk '%1'. CheckerContainer - + Gathering system information... Mengumpulkan informasi sistem... @@ -496,157 +520,197 @@ Instalasi akan ditutup dan semua perubahan akan hilang. ChoicePage - + Form Isian - - After: - Setelah: - - - - Boot loader location: - Lokasi Boot loader: - - - + Select storage de&vice: Pilih perangkat penyimpanan: - - - - + + + + Current: Saat ini: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Setelah: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Pemartisian manual</strong><br/>Anda bisa membuat atau mengubah ukuran partisi. + + + Reuse %1 as home partition for %2. Gunakan kembali %1 sebagai partisi home untuk %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Pilih sebuah partisi untuk diiris, kemudian seret bilah di bawah untuk mengubah ukuran</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Lokasi Boot loader: + + + <strong>Select a partition to install on</strong> <strong>Pilih sebuah partisi untuk memasang</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Sebuah partisi sistem EFI tidak ditemukan pada sistem ini. Silakan kembali dan gunakan pemartisian manual untuk mengeset %1. - + The EFI system partition at %1 will be used for starting %2. Partisi sistem EFI di %1 akan digunakan untuk memulai %2. - + EFI system partition: Partisi sistem EFI: - + 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. Tampaknya media penyimpanan ini tidak mengandung sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Hapus disk</strong><br/>Aksi ini akan <font color="red">menghapus</font> semua berkas yang ada pada media penyimpanan terpilih. - - 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. - Media penyimpanan ini mengandung %1. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instal berdampingan dengan</strong><br/>Installer akan mengiris sebuah partisi untuk memberi ruang bagi %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ganti sebuah partisi</strong><br/> Ganti partisi dengan %1. - + + 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. + Media penyimpanan ini mengandung %1. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. + + + 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. Media penyimpanan ini telah mengandung sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. - + 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. Media penyimpanan ini telah mengandung beberapa sistem operasi. Apa yang hendak Anda lakukan?<br/>Anda dapat menelaah dan mengkonfirmasi pilihan Anda sebelum dilakukan perubahan pada media penyimpanan. + + + 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/> + Perngkat penyimpanan ini sudah terdapat sistem operasi, tetapi tabel partisi <strong>%1</strong>berbeda dari yang dibutuhkan <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Perangkat penyimpanan ini terdapat partisi yang <strong>terpasang</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Perangkat penyimpanan ini merupakan bagian dari sebuah <strong>perangkat RAID yang tidak aktif</strong>. + + + + No Swap + Tidak pakai SWAP + + + + Reuse Swap + Gunakan kembali SWAP + + + + Swap (no Hibernate) + Swap (tanpa hibernasi) + + + + Swap (with Hibernate) + Swap (dengan hibernasi) + + + + Swap to file + Swap ke file + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Lepaskan semua kaitan untuk operasi pemartisian pada %1 - + Clearing mounts for partitioning operations on %1. Melepas semua kaitan untuk operasi pemartisian pada %1 - + Cleared all mounts for %1 Semua kaitan dilepas untuk %1 @@ -654,22 +718,17 @@ Instalasi akan ditutup dan semua perubahan akan hilang. ClearTempMountsJob - + Clear all temporary mounts. Lepaskan semua kaitan sementara. - + Clearing all temporary mounts. Melepaskan semua kaitan sementara. - - Cannot get list of temporary mounts. - Tidak bisa mendapatkan daftar kaitan sementara. - - - + Cleared all temporary mounts. Semua kaitan sementara dilepas. @@ -677,18 +736,18 @@ Instalasi akan ditutup dan semua perubahan akan hilang. CommandList - - + + Could not run command. Tidak dapat menjalankan perintah - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Perintah berjalan di lingkungan host dan perlu diketahui alur root-nya, tetapi bukan rootMountPoint yang ditentukan. - + The command needs to know the user's name, but no username is defined. Perintah perlu diketahui nama si pengguna, tetapi bukan nama pengguna yang ditentukan. @@ -696,102 +755,236 @@ Instalasi akan ditutup dan semua perubahan akan hilang. Config - + + Set keyboard model to %1.<br/> + Setel model papan ketik ke %1.<br/> + + + + Set keyboard layout to %1/%2. + Setel tata letak papan ketik ke %1/%2. + + + + Set timezone to %1/%2. + Terapkan zona waktu ke %1/%2 + + + + The system language will be set to %1. + Bahasa sistem akan disetel ke %1. + + + + The numbers and dates locale will be set to %1. + Nomor dan tanggal lokal akan disetel ke %1. + + + + Network Installation. (Disabled: Incorrect configuration) + Pemasangan jaringan. (Dimatikan: Konfigurasi yang tidak sesuai) + + + + Network Installation. (Disabled: Received invalid groups data) + Instalasi jaringan. (Menonaktifkan: Penerimaan kelompok data yang tidak sah) + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Pemilihan paket + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Instalasi Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Komputer ini tidak memenuhi syarat minimum untuk memasang %1. -Installer tidak dapat dilanjutkan. <a href=" + Komputer ini tidak memenuhi syarat minimum untuk memasang %1.<br/>Instalasi tidak dapat dilanjutkan. <a href="#details">Lebih rinci...</a> - + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. Komputer ini tidak memenuhi beberapa syarat yang dianjurkan untuk memasang %1. Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. - + This program will ask you some questions and set up %2 on your computer. Program ini akan mengajukan beberapa pertanyaan dan menyetel %2 pada komputer Anda. - - <h1>Welcome to the Calamares setup program for %1.</h1> + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Selamat datang ke program Calamares untuk %1</h1> + + + + <h1>Welcome to %1 setup</h1> - <h1>Welcome to %1 setup.</h1> + <h1>Welcome to the Calamares installer for %1</h1> - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Selamat datang di Calamares installer untuk %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Selamat datang di installer %1.</h1> - - - - Set keyboard model to %1.<br/> - Setel model papan ketik ke %1.<br/> - - - - Set keyboard layout to %1/%2. - Setel tata letak papan ketik ke %1/%2. - - - - The system language will be set to %1. - Bahasa sistem akan disetel ke %1. - - - - The numbers and dates locale will be set to %1. - Nomor dan tanggal lokal akan disetel ke %1. - - - - Set timezone to %1/%2.<br/> - Setel zona waktu ke %1/%2.<br/> - - - - Network Installation. (Disabled: Incorrect configuration) + + <h1>Welcome to the %1 installer</h1> - - Network Installation. (Disabled: Received invalid groups data) - Instalasi jaringan. (Menonaktifkan: Penerimaan kelompok data yang tidak sah) + + Your username is too long. + Nama pengguna Anda terlalu panjang. - - Network Installation. (Disabled: internal error) + + '%1' is not allowed as username. + '%1' tidak diperbolehkan sebagai nama pengguna. + + + + Your username must start with a lowercase letter or underscore. + Nama penggunamu harus diawali dengan huruf kecil atau garis bawah. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Instalasi Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu) + + Your hostname is too short. + Hostname Anda terlalu pendek. + + + + Your hostname is too long. + Hostname Anda terlalu panjang. + + + + '%1' is not allowed as hostname. + '%1' tidak diperbolehkan sebagai hostname. + + + + Only letters, numbers, underscore and hyphen are allowed. + Hanya huruf, angka, garis bawah, dan tanda penghubung yang diperbolehkan. + + + + Your passwords do not match! + Sandi Anda tidak sama! + + + + OK! + + + + + Setup Failed + Pengaturan Gagal + + + + Installation Failed + Instalasi Gagal + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Instalasi Lengkap + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + Instalasi %1 telah lengkap. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Ikhtisar + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + Berikut adalah tinjauan mengenai yang akan terjadi setelah Anda memulai prosedur instalasi. ContextualProcessJob - + Contextual Processes Job Memproses tugas kontekstual @@ -799,100 +992,136 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. CreatePartitionDialog - + Create a Partition Buat Partisi - - MiB - MiB - - - - Partition &Type: - Partisi & Tipe: - - - - &Primary - &Utama - - - - E&xtended - E&xtended - - - - Fi&le System: - Sistem Berkas: - - - - LVM LV name - Nama LV LVM - - - - Flags: - Tanda: - - - - &Mount Point: - &Titik Kait: - - - + Si&ze: Uku&ran: - + + MiB + MiB + + + + Partition &Type: + Partisi & Tipe: + + + + Primar&y + + + + + E&xtended + E&xtended + + + + Fi&le System: + Sistem Berkas: + + + + LVM LV name + Nama LV LVM + + + + &Mount Point: + &Titik Kait: + + + + Flags: + Tanda: + + + + Label for the filesystem + Label untuk filesystem + + + + FS Label: + Label FS: + + + En&crypt Enkripsi - + Logical Logikal - + Primary Utama - + GPT GPT - + Mountpoint already in use. Please select another one. Titik-kait sudah digunakan. Silakan pilih yang lainnya. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Membuat partisi %1 baru di %2. - + The installer failed to create partition on disk '%1'. Installer gagal untuk membuat partisi di disk '%1'. @@ -900,27 +1129,27 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. CreatePartitionTableDialog - + Create Partition Table Buat Tabel Partisi - + Creating a new partition table will delete all existing data on the disk. Membuat tabel partisi baru akan menghapus data pada disk yang ada. - + What kind of partition table do you want to create? Apa jenis tabel partisi yang ingin Anda buat? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -928,22 +1157,22 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. CreatePartitionTableJob - + Create new %1 partition table on %2. Membuat tabel partisi %1 baru di %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Membuat tabel partisi <strong>%1</strong> baru di <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Membuat tabel partisi %1 baru di %2. - + The installer failed to create a partition table on %1. Installer gagal membuat tabel partisi pada %1. @@ -951,45 +1180,41 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. CreateUserJob - + Create user %1 Buat pengguna %1 - + Create user <strong>%1</strong>. Buat pengguna <strong>%1</strong>. - - Creating user %1. - Membuat pengguna %1. + + Preserving home directory + - - Sudoers dir is not writable. - Direktori sudoers tidak dapat ditulis. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Tidak dapat membuat berkas sudoers untuk ditulis. + + Configuring user %1 + - - Cannot chmod sudoers file. - Tidak dapat chmod berkas sudoers. - - - - Cannot open groups file for reading. - Tidak dapat membuka berkas groups untuk dibaca. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1222,22 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. CreateVolumeGroupJob - + Create new volume group named %1. Ciptakan grup volume baru bernama %1. - + Create new volume group named <strong>%1</strong>. Ciptakan grup volume baru bernama <strong>%1</strong>. - + Creating new volume group named %1. Menciptakan grup volume baru bernama %1. - + The installer failed to create a volume group named '%1'. Installer gagal menciptakan sebuah grup volume bernama '%1'. @@ -1020,18 +1245,18 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Nonaktifkan grup volume bernama %1. - + Deactivate volume group named <strong>%1</strong>. Nonaktifkan grup volume bernama <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Installer gagal menonaktifkan sebuah grup volume bernama %1. @@ -1039,22 +1264,22 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. DeletePartitionJob - + Delete partition %1. Hapus partisi %1. - + Delete partition <strong>%1</strong>. Hapus partisi <strong>%1</strong> - + Deleting partition %1. Menghapus partisi %1. - + The installer failed to delete partition %1. Installer gagal untuk menghapus partisi %1. @@ -1062,46 +1287,46 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. DeviceInfoWidget - - 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. - Tipe dari <strong>tabel partisi</strong> pada perangkat penyimpanan terpilih.<br><br>Satu-satunya cara untuk mengubah tabel partisi adalah dengan menyetip dan menciptakan ulang tabel partisi dari awal, yang melenyapkan semua data pada perangkat penyimpanan.<br>Installer ini akan menjaga tabel partisi saat ini kecuali kamu secara gamblang memilih sebaliknya.<br>Jika tidak yakin, pada sistem GPT modern lebih disukai. - - - + This device has a <strong>%1</strong> partition table. Perangkai in memiliki sebuah tabel partisi <strong>%1</strong>. - + 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. Ini adalah sebuah perangkat <strong>loop</strong>.<br><br>Itu adalah sebuah pseudo-device dengan tiada tabel partisi yang membuat sebuah file dapat diakses sebagai perangkat blok. Ini jenis set yang biasanya hanya berisi filesystem tunggal. - + 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. Installer <strong>tidak bisa mendeteksi tabel partisi apapun</strong> pada media penyimpanan terpilih.<br><br>Mungkin media ini tidak memiliki tabel partisi, atau tabel partisi yang ada telah korup atau tipenya tidak dikenal.<br>Installer dapat membuatkan partisi baru untuk Anda, baik secara otomatis atau melalui laman pemartisian manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ini adalah tipe tabel partisi yang dianjurkan untuk sistem modern yang dimulai dengan <strong>EFI</strong> boot environment. - + <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. <br><br>Tipe tabel partisi ini adalah hanya baik pada sistem kuno yang mulai dari sebuah lingkungan boot <strong>BIOS</strong>. GPT adalah yang dianjurkan dalam beberapa kasus lainnya.<br><br><strong>Peringatan:</strong> tabel partisi MBR adalah sebuah standar era MS-DOS usang.<br>Hanya 4 partisi <em>primary</em> yang mungkin dapat diciptakan, dan yang 4, salah satu yang bisa dijadikan sebuah partisi <em>extended</em>, yang mana terdapat berisi beberapa partisi <em>logical</em>. + + + 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. + Tipe dari <strong>tabel partisi</strong> pada perangkat penyimpanan terpilih.<br><br>Satu-satunya cara untuk mengubah tabel partisi adalah dengan menyetip dan menciptakan ulang tabel partisi dari awal, yang melenyapkan semua data pada perangkat penyimpanan.<br>Installer ini akan menjaga tabel partisi saat ini kecuali kamu secara gamblang memilih sebaliknya.<br>Jika tidak yakin, pada sistem GPT modern lebih disukai. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1335,17 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Tulis konfigurasi LUKS untuk Dracut ke %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Lewati penulisan konfigurasi LUKS untuk Dracut: partisi "/" tidak dienkripsi - + Failed to open %1 Gagal membuka %1 @@ -1128,7 +1353,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. DummyCppJob - + Dummy C++ Job Tugas C++ Kosong @@ -1136,123 +1361,167 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. EditExistingPartitionDialog - + Edit Existing Partition Sunting Partisi yang Ada - - Content: - Isi: + + Con&tent: + - + &Keep &Pertahankan - + Format Format - + Warning: Formatting the partition will erase all existing data. Peringatan: Memformat partisi akan menghapus semua data yang ada. - + &Mount Point: Lokasi Mount: - + Si&ze: Uku&ran: - + MiB MiB - + Fi&le System: Sis&tem Berkas: - + Flags: Bendera: - - Mountpoint already in use. Please select another one. - Titik-kait sudah digunakan. Silakan pilih yang lainnya. + + Label for the filesystem + Label untuk filesystem + + + + FS Label: + Label FS: EncryptWidget - + Form Formulir - + En&crypt system &Sistem enkripsi - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Kata Sandi - + Confirm passphrase Konfirmasi kata sandi - + + Please enter the same passphrase in both boxes. Silakan masukkan kata sandi yang sama di kedua kotak. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Maukah anda menempelkan log instalasi ke situs? + + FillGlobalStorageJob - + Set partition information Tetapkan informasi partisi - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Instal %1 pada partisi sistem %2 <strong>baru</strong> - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Setel partisi %2 <strong>baru</strong> dengan tempat kait <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Instal %2 pada sistem partisi %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Setel partisi %3 <strong>%1</strong> dengan tempat kait <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instal boot loader di <strong>%1</strong>. - + Setting up mount points. Menyetel tempat kait. @@ -1260,93 +1529,81 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. FinishedPage - + Form Formulir - + &Restart now Mulai ulang seka&rang - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Selesai.</h1><br>%1 sudah terinstal di komputer Anda.<br/>Anda dapat memulai ulang ke sistem baru atau lanjut menggunakan lingkungan Live %2. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalasi Gagal</h1><br/>%1 tidak bisa diinstal pada komputermu.<br/>Pesan galatnya adalah: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Selesai + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Instalasi Lengkap - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - Instalasi %1 telah lengkap. + + Finish + Selesai FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format partisi %1 (file system: %2, ukuran %3 MiB) pada %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Memformat partisi %1 dengan sistem berkas %2. - + The installer failed to format partition %1 on disk '%2'. Installer gagal memformat partisi %1 pada disk '%2'.'%2'. @@ -1354,72 +1611,72 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source terhubung dengan sumber listrik - + The system is not plugged in to a power source. Sistem tidak terhubung dengan sumber listrik. - + is connected to the Internet terkoneksi dengan internet - + The system is not connected to the Internet. Sistem tidak terkoneksi dengan internet. - + is running the installer as an administrator (root) - + menjalankan installer sebagai administrator (root) - + The setup program is not running with administrator rights. - + Installer tidak dijalankan dengan kewenangan administrator. - + The installer is not running with administrator rights. Installer tidak dijalankan dengan kewenangan administrator. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Layar terlalu kecil untuk menampilkan installer. @@ -1427,7 +1684,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1692,25 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Tidak dapat membuka berkas <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,33 +1718,33 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. InitcpioJob - + Creating initramfs with mkinitcpio. - + Membuat initramfs menggunakan mkinitcpio. InitramfsJob - + Creating initramfs. - + Membuat initramfs. InteractiveTerminalPage - + Konsole not installed Konsole tidak terinstal - + Please install KDE Konsole and try again! Silahkan instal KDE Konsole dan ulangi lagi! - + Executing script: &nbsp;<code>%1</code> Mengeksekusi skrip: &nbsp;<code>%1</code> @@ -1495,28 +1752,15 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. InteractiveTerminalViewStep - + Script Skrip - - KeyboardPage - - - Set keyboard model to %1.<br/> - Setel model papan ketik ke %1.<br/> - - - - Set keyboard layout to %1/%2. - Setel tata letak papan ketik ke %1/%2. - - KeyboardQmlViewStep - + Keyboard Papan Ketik @@ -1524,7 +1768,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. KeyboardViewStep - + Keyboard Papan Ketik @@ -1532,65 +1776,88 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. LCLocaleDialog - + System locale setting Setelan lokal sistem - + 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>. Pengaturan system locale berpengaruh pada bahasa dan karakter pada beberapa elemen antarmuka Command Line. <br/>Pengaturan saat ini adalah <strong>%1</strong>. - + &Cancel &Batal - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Isian - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Saya menyetujui segala persyaratan di atas. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1865,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. LicenseViewStep - + License Lisensi @@ -1606,109 +1873,102 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver grafis</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin peramban</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paket</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + File: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text - + Sembunyikan teks lisensi + + + + Show the license text + Tampilkan lisensi teks + + + + Open license agreement in browser. + Buka perjanjian lisensi di peramban LocalePage - - The system language will be set to %1. - Bahasa sistem akan disetel ke %1. - - - - The numbers and dates locale will be set to %1. - Nomor dan tanggal lokal akan disetel ke %1. - - - + Region: Wilayah: - + Zone: Zona: - - + + &Change... &Ubah... - - - Set timezone to %1/%2.<br/> - Setel zona waktu ke %1/%2.<br/> - LocaleQmlViewStep - + Location Lokasi + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Lokasi @@ -1716,152 +1976,166 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. LuksBootKeyFileJob - + Configuring LUKS key file. - + Mengkonfigurasi file kunci LUKS - - + + No partitions are defined. - + Tidak ada partisi yang didefinisikan. - - - + + + Encrypted rootfs setup error - + Kesalahan penyiapan rootfs yang terenkripsi - + Root partition %1 is LUKS but no passphrase has been set. - + Partisi root %1 merupakan LUKS tetapi frasa sandi tidak ditetapkan - + Could not create LUKS key file for root partition %1. - + Tidak dapat membuat file kunci LUKS untuk partisi root %1 - + Could not configure LUKS key file on partition %1. - + Tidak dapat mengkonfigurasi file kunci LUKS pada partisi %1 MachineIdJob - + Generate machine-id. Menghasilkan machine-id. - + Configuration Error - + Kesalahan Konfigurasi - + No root mount point is set for MachineId. - + Tidak ada titik pemasangan root yang disetel untuk MachineId. + + + + Map + + + Timezone: %1 + Zona Waktu: %1 + + + + 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. + Mohon untuk memilih preferensi lokasi anda yang berada di peta agar pemasang dapat menyarankan pengaturan lokal dan zona waktu untuk anda. Anda dapat menyetel setelan yang disarankan dibawah berikut. Cari dengan menyeret peta.untuk memindahkan dan menggunakan tombol +/- guna memper-besar/kecil atau gunakan guliran tetikus untuk zooming. NetInstallViewStep - - + Package selection Pemilihan paket - + Office software - + Perangkat lunak perkantoran - + Office package - + Paket perkantoran - + Browser software - + Perangkat lunak peramban - + Browser package - + Paket peramban - + Web browser - + Peramban web - + Kernel - + Kernel - + Services - + Servis - + Login - + Masuk - + Desktop - + Desktop - + Applications - + Aplikasi - + Communication - + Komunikasi - + Development - + Pengembangan - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2143,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. NotesQmlViewStep - + Notes @@ -1877,17 +2151,17 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2169,308 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Zona Waktu: %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Kata sandi terlalu pendek - + Password is too long Kata sandi terlalu panjang - + Password is too weak kata sandi terlalu lemah - + Memory allocation error when setting '%1' Kesalahan alokasi memori saat menyetel '%1' - + Memory allocation error Kesalahan alokasi memori - + The password is the same as the old one Kata sandi sama dengan yang lama - + The password is a palindrome Kata sandi palindrom - + The password differs with case changes only Kata sandi berbeda hanya dengan perubahan huruf saja - + The password is too similar to the old one Kata sandi terlalu mirip dengan yang lama - + The password contains the user name in some form Kata sandi berisi nama pengguna dalam beberapa form - + The password contains words from the real name of the user in some form Kata sandi berisi kata-kata dari nama asli pengguna dalam beberapa form - + The password contains forbidden words in some form Password mengandung kata yang dilarang pada beberapa bagian form - - The password contains less than %1 digits - Password setidaknya berisi 1 digit karakter - - - + The password contains too few digits Kata sandi terkandung terlalu sedikit digit - - The password contains less than %1 uppercase letters - Kata sandi terkandung kurang dari %1 huruf besar - - - + The password contains too few uppercase letters Kata sandi terkandung terlalu sedikit huruf besar - - - The password contains less than %1 lowercase letters - Kata sandi terkandung kurang dari %1 huruf kecil + + + The password contains fewer than %n lowercase letters + + + - + The password contains too few lowercase letters Kata sandi terkandung terlalu sedikit huruf kecil - - The password contains less than %1 non-alphanumeric characters - Kata sandi terkandung kurang dari %1 karakter non-alfanumerik - - - + The password contains too few non-alphanumeric characters Kata sandi terkandung terlalu sedikit non-alfanumerik - - The password is shorter than %1 characters - Kata sandi terlalu pendek dari %1 karakter - - - + The password is too short Password terlalu pendek - - The password is just rotated old one - Kata sandi hanya terotasi satu kali - - - - The password contains less than %1 character classes - Kata sandi terkandung kurang dari %1 kelas karakter - - - + The password does not contain enough character classes Kata sandi tidak terkandung kelas karakter yang cukup - - The password contains more than %1 same characters consecutively - Kata sandi terkandung lebih dari %1 karakter berurutan yang sama - - - + The password contains too many same characters consecutively Kata sandi terkandung terlalu banyak karakter berurutan yang sama - - The password contains more than %1 characters of the same class consecutively - Kata sandi terkandung lebih dari %1 karakter dari kelas berurutan yang sama - - - + The password contains too many characters of the same class consecutively Kata sandi terkandung terlalu banyak karakter dari kelas berurutan yang sama - - - The password contains monotonic sequence longer than %1 characters - Kata sandi terkandung rangkaian monoton yang lebih panjang dari %1 karakter + + + The password contains fewer than %n digits + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + The password is shorter than %n characters + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + The password contains more than %n same characters consecutively + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + The password contains too long of a monotonic character sequence Kata sandi terkandung rangkaian karakter monoton yang panjang - + No password supplied Tidak ada kata sandi yang dipasok - + Cannot obtain random numbers from the RNG device Tidak dapat memperoleh angka acak dari piranti RNG - + Password generation failed - required entropy too low for settings Penghasilan kata sandi gagal - entropi yang diperlukan terlalu rendah untuk pengaturan - + The password fails the dictionary check - %1 Kata sandi gagal memeriksa kamus - %1 - + The password fails the dictionary check Kata sandi gagal memeriksa kamus - + Unknown setting - %1 Pengaturan tidak diketahui - %1 - + Unknown setting pengaturan tidak diketahui - + Bad integer value of setting - %1 Nilai bilangan bulat buruk dari pengaturan - %1 - + Bad integer value Nilai integer jelek - + Setting %1 is not of integer type Pengaturan %1 tidak termasuk tipe integer - + Setting is not of integer type Pengaturan tidak termasuk tipe integer - + Setting %1 is not of string type Pengaturan %1 tidak termasuk tipe string - + Setting is not of string type Pengaturan tidak termasuk tipe string - + Opening the configuration file failed Ada kesalahan saat membuka berkas konfigurasi - + The configuration file is malformed Kesalahan format pada berkas konfigurasi - + Fatal failure Kegagalan fatal - + Unknown error Ada kesalahan yang tidak diketahui - + Password is empty @@ -2156,40 +2478,48 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PackageChooserPage - + Form Formulir - + Product Name - + TextLabel Label teks - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2527,12 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PackageModel - + Name Nama - + Description Deskripsi @@ -2210,17 +2540,17 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. Page_Keyboard - + Form Isian - + Keyboard Model: Model Papan Ketik: - + Type here to test your keyboard Ketik di sini untuk mencoba papan ketik Anda @@ -2228,96 +2558,96 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. Page_UserSetup - + Form Isian - + What is your name? Siapa nama Anda? - - What name do you want to use to log in? - Nama apa yang ingin Anda gunakan untuk log in? - - - - Choose a password to keep your account safe. - Pilih sebuah kata sandi untuk menjaga keamanan akun Anda. - - - - - <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> - <small>Ketik kata sandi yang sama dua kali, supaya kesalahan pengetikan dapat diketahui. Sebuah kata sandi yang bagus berisi campuran dari kata, nomor dan tanda bada, sebaiknya memiliki panjang paling sedikit delapan karakter, dan sebaiknya diganti dalam interval yang teratur.</small> - - - - What is the name of this computer? - Apakah nama dari komputer ini? - - - + Your Full Name - + + What name do you want to use to log in? + Nama apa yang ingin Anda gunakan untuk log in? + + + login - + + What is the name of this computer? + Apakah nama dari komputer ini? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Nama ini akan digunakan jika anda membuat komputer ini terlihat oleh orang lain dalam sebuah jaringan.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Pilih sebuah kata sandi untuk menjaga keamanan akun Anda. + + + + + <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> + <small>Ketik kata sandi yang sama dua kali, supaya kesalahan pengetikan dapat diketahui. Sebuah kata sandi yang bagus berisi campuran dari kata, nomor dan tanda bada, sebaiknya memiliki panjang paling sedikit delapan karakter, dan sebaiknya diganti dalam interval yang teratur.</small> + + + + Password - - + + Repeat Password - + Ulangi Kata Sandi - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Ketikan kotak ini dicentang, pengecekan kekuatan kata sandi akan dilakukan dan anda tidak akan dapat menggunakan kata sandi yang lemah. - + Require strong passwords. - + Log in automatically without asking for the password. Log in otomatis tanpa menanyakan sandi. - + Use the same password for the administrator account. Gunakan sandi yang sama untuk akun administrator. - + Choose a password for the administrator account. Pilih sebuah kata sandi untuk akun administrator. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ketik kata sandi yang sama dua kali, supaya kesalahan pengetikan dapat diketahui.</small> @@ -2325,42 +2655,42 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PartitionLabelsView - + Root Root - + Home Beranda - + Boot Boot - + EFI system Sistem EFI - + Swap Swap - + New partition for %1 Partisi baru untuk %1 - + New partition Partisi baru - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2699,39 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PartitionModel - - + + Free Space Ruang Kosong - - + + New partition Partisi baru - + Name Nama - + File System Berkas Sistem - + + File System Label + + + + Mount Point Lokasi Mount - + Size Ukuran @@ -2404,77 +2739,77 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PartitionPage - + Form Isian - + Storage de&vice: Media penyim&panan: - + &Revert All Changes &Pulihkan Semua Perubahan - + New Partition &Table Partisi Baru & Tabel - + Cre&ate Mem&buat - + &Edit &Sunting - + &Delete &Hapus - + New Volume Group Grup Volume Baru - + Resize Volume Group Ubah-ukuran Grup Volume - + Deactivate Volume Group Nonaktifkan Grup Volume - + Remove Volume Group Hapus Grup Volume - + I&nstall boot loader on: I&nstal boot loader di: - + Are you sure you want to create a new partition table on %1? Apakah Anda yakin ingin membuat tabel partisi baru pada %1? - + Can not create new partition Tidak bisa menciptakan partisi baru. - + 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. Partisi tabel pada %1 sudah memiliki %2 partisi primer, dan tidak ada lagi yang bisa ditambahkan. Silakan hapus salah satu partisi primer dan tambahkan sebuah partisi extended, sebagai gantinya. @@ -2482,117 +2817,107 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PartitionViewStep - + Gathering system information... Mengumpulkan informasi sistem... - + Partitions - Paritsi + Partisi - - Install %1 <strong>alongside</strong> another operating system. - Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Hapus</strong> diska dan instal %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Ganti</strong> partisi dengan %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Partisi <strong>manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain di disk <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Hapus</strong> diska <strong>%2</strong> (%3) dan instal %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Ganti</strong> partisi pada diska <strong>%2</strong> (%3) dengan %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Partisi Manual</strong> pada diska <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Saat ini: - + After: Sesudah: - + No EFI system partition configured Tiada partisi sistem EFI terkonfigurasi - - 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>esp</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. - Sebuah partisi sistem EFI perlu memulai %1.<br/><br/>Untuk mengkonfigurasi sebuah partisi sistem EFI, pergi mundur dan pilih atau ciptakan sebuah filesystem FAT32 dengan bendera <strong>esp</strong> yang difungsikan dan titik kait <strong>%2</strong>.<br/><br/>Kamu bisa melanjutkan tanpa menyetel sebuah partisi sistem EFI tapi sistemmu mungkin gagal memulai. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Bendera partisi sistem EFI tidak disetel + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Sebuah partisi sistem EFI perlu memulai %1.<br/><br/>Sebuah partisi telah dikonfigurasi dengan titik kait <strong>%2</strong> tapi bendera <strong>esp</strong> tersebut tidak disetel.<br/>Untuk mengeset bendera, pergi mundur dan editlah partisi.<br/><br/>Kamu bisa melanjutkan tanpa menyetel bendera tapi sistemmu mungkin gagal memulai. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Partisi boot tidak dienkripsi - + 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. Sebuah partisi tersendiri telah terset bersama dengan sebuah partisi root terenkripsi, tapi partisi boot tidak terenkripsi.<br/><br/>Ada kekhawatiran keamanan dengan jenis setup ini, karena file sistem penting tetap pada partisi tak terenkripsi.<br/>Kamu bisa melanjutkan jika kamu menghendaki, tapi filesystem unlocking akan terjadi nanti selama memulai sistem.<br/>Untuk mengenkripsi partisi boot, pergi mundur dan menciptakannya ulang, memilih <strong>Encrypt</strong> di jendela penciptaan partisi. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2925,13 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package Tidak bisa memilih KDE Plasma Look-and-Feel package @@ -2614,17 +2939,17 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PlasmaLnfPage - + Form Formulir - + 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. - + 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. Silakan pilih sebuah look-and-feel untuk KDE Plasma Desktop. Anda juga dapat melewati langkah ini dan konfigurasi look-and-feel setelah sistem terinstal. Mengeklik pilihan look-and-feel akan memberi Anda pratinjau langsung pada look-and-feel tersebut. @@ -2632,7 +2957,7 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PlasmaLnfViewStep - + Look-and-Feel Lihat-dan-Rasakan @@ -2640,17 +2965,17 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. PreserveFiles - + Saving files for later ... Menyimpan file untuk kemudian... - + No files configured to save for later. Tiada file yang dikonfigurasi untuk penyimpanan nanti. - + Not all of the configured files could be preserved. Tidak semua file yang dikonfigurasi dapat dipertahankan. @@ -2658,14 +2983,14 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. ProcessResult - + There was no output from the command. Tidak ada keluaran dari perintah. - + Output: @@ -2674,52 +2999,52 @@ Keluaran: - + External command crashed. Perintah eksternal rusak. - + Command <i>%1</i> crashed. Perintah <i>%1</i> mogok. - + External command failed to start. Perintah eksternal gagal dimulai - + Command <i>%1</i> failed to start. Perintah <i>%1</i> gagal dimulai. - + Internal error when starting command. Terjadi kesalahan internal saat menjalankan perintah. - + Bad parameters for process job call. Parameter buruk untuk memproses panggilan tugas, - + External command failed to finish. Perintah eksternal gagal diselesaikan . - + Command <i>%1</i> failed to finish in %2 seconds. Perintah <i>%1</i> gagal untuk diselesaikan dalam %2 detik. - + External command finished with errors. Perintah eksternal diselesaikan dengan kesalahan . - + Command <i>%1</i> finished with exit code %2. Perintah <i>%1</i> diselesaikan dengan kode keluar %2. @@ -2727,89 +3052,94 @@ Keluaran: QObject - - Default Keyboard Model - Model Papan Ketik Standar - - - - - Default - Standar - - - - unknown - tidak diketahui: - - - - extended - extended - - - - unformatted - tidak terformat: - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Ruang tidak terpartisi atau tidak diketahui tabel partisinya - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + tidak diketahui: - - No description provided. - + + extended + extended - - - - + + unformatted + tidak terformat: + + + + swap + swap + + + + + Default + Standar + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Ruang tidak terpartisi atau tidak diketahui tabel partisinya + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2817,18 +3147,18 @@ Keluaran: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Hapus Grup Volume bernama %1. - + Remove Volume Group named <strong>%1</strong>. Hapus Grup Volume bernama <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Installer gagal menghapus sebuah grup volume bernama '%1'. @@ -2836,143 +3166,158 @@ Keluaran: ReplaceWidget - + Form Isian - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Pilih tempat instalasi %1.<br/><font color="red">Peringatan: </font>hal ini akan menghapus semua berkas di partisi terpilih. - + The selected item does not appear to be a valid partition. Item yang dipilih tidak tampak seperti partisi yang valid. - + %1 cannot be installed on empty space. Please select an existing partition. %1 tidak dapat diinstal di ruang kosong. Mohon pilih partisi yang tersedia. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 tidak bisa diinstal pada Partisi Extended. Mohon pilih Partisi Primary atau Logical yang tersedia. - + %1 cannot be installed on this partition. %1 tidak dapat diinstal di partisi ini. - + Data partition (%1) Partisi data (%1) - + Unknown system partition (%1) Partisi sistem tidak dikenal (%1) - + %1 system partition (%2) Partisi sistem %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partisi %1 teralu kecil untuk %2. Mohon pilih partisi dengan kapasitas minimal %3 GiB. - + <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. <strong>%2</strong><br/><br/>Tidak ditemui adanya Partisi EFI pada sistem ini. Mohon kembali dan gunakan Pemartisi Manual untuk set up %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 akan diinstal pada %2.<br/><font color="red">Peringatan: </font>seluruh data %2 akan hilang. - + The EFI system partition at %1 will be used for starting %2. Partisi EFI pada %1 akan digunakan untuk memulai %2. - + EFI system partition: Partisi sistem EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job Tugas Ubah-ukuran Filesystem - + Invalid configuration Konfigurasi taksah - + The file-system resize job has an invalid configuration and will not run. Tugas pengubahan ukuran filesystem mempunyai sebuah konfigurasi yang taksah dan tidak akan berjalan. - + KPMCore not Available KPMCore tidak Tersedia - + Calamares cannot start KPMCore for the file-system resize job. Calamares gak bisa menjalankan KPMCore untuk tugas pengubahan ukuran filesystem. - - - - - + + + + + Resize Failed Pengubahan Ukuran, Gagal - + The filesystem %1 could not be found in this system, and cannot be resized. Filesystem %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya. - + The device %1 could not be found in this system, and cannot be resized. Perangkat %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya. - - + + The filesystem %1 cannot be resized. Filesystem %1 gak bisa diubahukurannya. - - + + The device %1 cannot be resized. Perangkat %1 gak bisa diubahukurannya. - + The filesystem %1 must be resized, but cannot. Filesystem %1 mestinya bisa diubahukurannya, namun gak bisa. - + The device %1 must be resized, but cannot Perangkat %1 mestinya bisa diubahukurannya, namun gak bisa. @@ -2980,22 +3325,22 @@ Keluaran: ResizePartitionJob - + Resize partition %1. Ubah ukuran partisi %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Installer gagal untuk merubah ukuran partisi %1 pada disk '%2'. @@ -3003,7 +3348,7 @@ Keluaran: ResizeVolumeGroupDialog - + Resize Volume Group Ubah-ukuran Grup Volume @@ -3011,18 +3356,18 @@ Keluaran: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Ubah ukuran grup volume bernama %1 dari %2 ke %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ubah ukuran grup volume bernama <strong>%1</strong> dari <strong>%2</strong> ke %3<strong>. - + The installer failed to resize a volume group named '%1'. Installer gagal mengubah ukuran sebuah grup volume bernama '%1'. @@ -3030,55 +3375,25 @@ Keluaran: ResultsListDialog - + For best results, please ensure that this computer: Untuk hasil terbaik, mohon pastikan bahwa komputer ini: - + System requirements Kebutuhan sistem - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Komputer ini tidak memenuhi syarat minimum untuk memasang %1. -Installer tidak dapat dilanjutkan. <a href=" - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Komputer ini tidak memenuhi beberapa syarat yang dianjurkan untuk memasang %1. -Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. - - - - This program will ask you some questions and set up %2 on your computer. - Program ini akan mengajukan beberapa pertanyaan dan menyetel %2 pada komputer Anda. - - ScanningDialog - + Scanning storage devices... Memeriksa media penyimpanan... - + Partitioning Mempartisi @@ -3086,29 +3401,29 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. SetHostNameJob - + Set hostname %1 Pengaturan hostname %1 - + Set hostname <strong>%1</strong>. Atur hostname <strong>%1</strong>. - + Setting hostname %1. Mengatur hostname %1. + - Internal Error Kesalahan Internal - - + + Cannot write hostname to target system Tidak dapat menulis nama host untuk sistem target @@ -3116,29 +3431,29 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Model papan ketik ditetapkan ke %1, tata letak ke %2-%3 - + Failed to write keyboard configuration for the virtual console. Gagal menulis konfigurasi keyboard untuk virtual console. - - - + + + Failed to write to %1 Gagal menulis ke %1. - + Failed to write keyboard configuration for X11. Gagal menulis konfigurasi keyboard untuk X11. - + Failed to write keyboard configuration to existing /etc/default directory. Gagal menulis konfigurasi keyboard ke direktori /etc/default yang ada. @@ -3146,82 +3461,82 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. SetPartFlagsJob - + Set flags on partition %1. Setel bendera pada partisi %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Setel bendera pada partisi baru. - + Clear flags on partition <strong>%1</strong>. Bersihkan bendera pada partisi <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Bersihkan bendera pada partisi baru. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Benderakan partisi <strong>%1</strong> sebagai <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Benderakan partisi baru sebagai <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Membersihkan bendera pada partisi <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Membersihkan bendera pada partisi baru. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Menyetel bendera <strong>%2</strong> pada partisi <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Menyetel bendera <strong>%1</strong> pada partisi baru. - + The installer failed to set flags on partition %1. Installer gagal menetapkan bendera pada partisi %1. @@ -3229,42 +3544,42 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. SetPasswordJob - + Set password for user %1 Setel sandi untuk pengguna %1 - + Setting password for user %1. Mengatur sandi untuk pengguna %1. - + Bad destination system path. Jalur lokasi sistem tujuan buruk. - + rootMountPoint is %1 rootMountPoint adalah %1 - + Cannot disable root account. Tak bisa menonfungsikan akun root. - + passwd terminated with error code %1. passwd terhenti dengan kode galat %1. - + Cannot set password for user %1. Tidak dapat menyetel sandi untuk pengguna %1. - + usermod terminated with error code %1. usermod dihentikan dengan kode kesalahan %1. @@ -3272,45 +3587,82 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. SetTimezoneJob - + Set timezone to %1/%2 Setel zona waktu ke %1/%2 - + Cannot access selected timezone path. Tidak dapat mengakses jalur lokasi zona waktu yang dipilih. - + Bad path: %1 Jalur lokasi buruk: %1 - + Cannot set timezone. Tidak dapat menyetel zona waktu. - + Link creation failed, target: %1; link name: %2 Pembuatan tautan gagal, target: %1; nama tautan: %2 - + Cannot set timezone, Tidak bisa menetapkan zona waktu. - + Cannot open /etc/timezone for writing Tidak bisa membuka /etc/timezone untuk penulisan + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Tidak dapat chmod berkas sudoers. + + + + Cannot create sudoers file for writing. + Tidak dapat membuat berkas sudoers untuk ditulis. + + ShellProcessJob - + Shell Processes Job Pekerjaan yang diselesaikan oleh shell @@ -3318,81 +3670,117 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Berikut adalah tinjauan mengenai yang akan terjadi setelah Anda memulai prosedur instalasi. + + &Yes + &Ya - - - SummaryViewStep - - Summary - Ikhtisar + + &No + &Tidak + + + + &Cancel + &Batal + + + + &Close + &Tutup TrackingInstallJob - + Installation feedback Umpan balik instalasi. - + Sending installation feedback. Mengirim umpan balik installasi. - + Internal error in install-tracking. Galat intern di pelacakan-instalasi. - + HTTP request timed out. Permintaan waktu HTTP habis. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Mesin umpan balik - + Configuring machine feedback. Mengkonfigurasi mesin umpan balik. - - + + Error in machine feedback configuration. Galat di konfigurasi mesin umpan balik. - + Could not configure machine feedback correctly, script error %1. Tidak dapat mengkonfigurasi mesin umpan balik dengan benar, naskah galat %1 - + Could not configure machine feedback correctly, Calamares error %1. Tidak dapat mengkonfigurasi mesin umpan balik dengan benar, Calamares galat %1. @@ -3400,106 +3788,97 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. TrackingPage - + Form Formulir - + Placeholder Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Dengan memilih ini, Anda akan mengirim <span style=" font-weight:600;">tidak ada informasi di </span> tentang instalasi Anda. </p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klik disini untuk informasi lebih lanjut tentang umpan balik pengguna </span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Instal bantuan pelacakan %1 untuk melihat berapa banyak pengguna memiliki, piranti keras apa yang mereka instal %1 dan (dengan dua pilihan terakhir), dapatkan informasi berkelanjutan tentang aplikasi yang disukai. Untuk melihat apa yang akan dikirim, silakan klik ikon bantuan ke beberapa area selanjtunya. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Dengan memilih ini Anda akan mengirim informasi tentang instalasi dan piranti keras Anda. Informasi ini hanya akan <b>dikirim sekali</b> setelah instalasi selesai. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Dengan memilih ini anda akan <b> secara berkala</b> mengirim informasi tentang instalasi, piranti keras dan aplikasi Anda, ke %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Dengan memilih ini anda akan<b>secara teratur</b> mengirim informasi tentang instalasi, piranti keras, aplikasi dan pola pemakaian Anda, ke %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Umpan balik + + UmountJob + + + Unmount file systems. + Lepaskan sistem berkas. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Nama pengguna Anda terlalu panjang. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Hostname Anda terlalu pendek. - - - - Your hostname is too long. - Hostname Anda terlalu panjang. - - - - Your passwords do not match! - Sandi Anda tidak sama! + + Users + Pengguna UsersViewStep - + Users Pengguna @@ -3507,65 +3886,67 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Nilai VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes Daftar dari Volume Fisik - + Volume Group Name: Nama Grup Volume: - + Volume Group Type: Tipe Grup Volume: - + Physical Extent Size: Ukuran Luas Fisik: - + MiB MiB - + Total Size: Total Ukuran: - + Used Size: Ukuran Terpakai: - + Total Sectors: Total Sektor: - + Quantity of LVs: Kuantitas LV: @@ -3573,106 +3954,106 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. WelcomePage - + Form Isian - - + + Select application and system language + &About + &Tentang + + + Open donations website - + &Donate - + Open help and support website + &Support + &Dukungan + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Catatan rilis - - - &Known issues &Isu-isu yang diketahui - - &Support - &Dukungan + + Open release notes website + - - &About - &Tentang + + &Release notes + &Catatan rilis - - <h1>Welcome to the %1 installer.</h1> - <h1>Selamat datang di installer %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Selamat datang di Calamares installer untuk %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Selamat datang di Calamares installer untuk %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Selamat datang di installer %1.</h1> + + + + %1 support + Dukungan %1 + + + About %1 setup - + About %1 installer Tentang installer %1 - + <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. - - - - - %1 support - Dukungan %1 + <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Hak cipta 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Hak cipta 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Terimakasih kepada <a href="https://calamares.io/team/">Tim Calamares</a>dan <a href="https://www.transifex.com/calamares/calamares/">Tim penerjemah Calamares </a>.<br/><br/><a href="https://calamares.io/">Calamares</a>pengembangan disponsori oleh <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Selamat Datang @@ -3680,31 +4061,168 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. WelcomeViewStep - + Welcome Selamat Datang + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Kesalahan Konfigurasi + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. + <h1>%1</h1><br/> + <strong>%2<br/> + for %3</strong><br/><br/> + Hak cipta 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Hak cipta 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Terimakasih kepada <a href='https://calamares.io/team/'>Tim Calamares</a> + dan <a href='https://www.transifex.com/calamares/calamares/'>Tim penerjemah + Calamares</a><br/><br/> + <a href='https://calamares.io/'>Calamares</a> + pengembangan disponsori oleh<br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a>- + Liberating Software. + + + + Back + + + + + calamares-sidebar + + + Show debug information + Tampilkan informasi debug + + + + finishedq + + + Installation Completed - + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3712,86 +4230,283 @@ Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Model Papan Ketik: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Ketik di sini untuk mencoba papan ketik Anda - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Siapa nama Anda? + + + + Your Full Name + + + + + What name do you want to use to log in? + Nama apa yang ingin Anda gunakan untuk log in? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + root tidak boleh digunakan sebagai nama pengguna. + + + + What is the name of this computer? + Apakah nama dari komputer ini? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Pilih sebuah kata sandi untuk menjaga keamanan akun Anda. + + + + Password + + + + + Repeat Password + Ulangi Kata Sandi + + + + 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. + + + + + Validate passwords quality + Validasi kualitas kata sandi + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Ketikan kotak ini dicentang, pengecekan kekuatan kata sandi akan dilakukan dan anda tidak akan dapat menggunakan kata sandi yang lemah. + + + + Log in automatically without asking for the password + Masuk ke dalam sesi secara otomatis tanpa menanyakan kata sandi + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Hanya huruf, angka, garis bawah, dan tanda hubung yang diperbolehkan, minimal dua karakter. + + + + Reuse user password as root password + Gunakan kata sandi pengguna sebagai kata sandi root + + + + Use the same password for the administrator account. + Gunakan sandi yang sama untuk akun administrator. + + + + Choose a root password to keep your account safe. + + + + + Root Password + Kata Sandi Root + + + + Repeat Root Password + Ulangi Kata Sandi + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_ie.ts b/lang/calamares_ie.ts new file mode 100644 index 000000000..90f623268 --- /dev/null +++ b/lang/calamares_ie.ts @@ -0,0 +1,4509 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + + + + + 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. + + + + + 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. + + + + + BootLoaderModel + + + Master Boot Record of %1 + MBR del %1 + + + + Boot Partition + Partition de inicialisation + + + + System Partition + Partition del sistema + + + + Do not install a boot loader + Ne installar un bootloader + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Blanc págine + + + + Calamares::DebugWindow + + + Form + Redimensionar un gruppe de tomes + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + Modules + + + + Type: + Tip: + + + + + none + + + + + Interface: + + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + + + + + Debug information + + + + + Calamares::ExecutionViewStep + + + Set up + Configurar + + + + Install + Installar + + + + Calamares::FailJob + + + Job failed (%1) + Tache ne successat (%1) + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + Finit + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + Cargante... + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + (%n second(s)) + + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + Configuration ne successat + + + + Installation Failed + Installation ne successat + + + + Error + Errore + + + + &Yes + &Yes + + + + &No + &No + + + + &Close + C&luder + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + Continuar li configuration? + + + + Continue with installation? + Continuar li installation? + + + + 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> + + + + + 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> + + + + + &Set up now + &Configurar nu + + + + &Install now + &Installar nu + + + + Go &back + Ear &retro + + + + &Set up + &Configurar + + + + &Install + &Installar + + + + Setup is complete. Close the setup program. + Configuration es completat. Ples cluder li configurator. + + + + The installation is complete. Close the installer. + Installation es completat. Ples cluder li installator. + + + + Cancel setup without changing the system. + Anullar li configuration sin modificationes del sistema. + + + + Cancel installation without changing the system. + Anullar li installation sin modificationes del sistema. + + + + &Next + &Sequent + + + + &Back + &Retro + + + + &Done + &Finir + + + + &Cancel + A&nullar + + + + Cancel setup? + Anullar li configuration? + + + + Cancel installation? + Anullar li installation? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + Ínconosset tip de exception + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Setup Program + Configiration de %1 + + + + %1 Installer + Installator de %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + Redimensionar un gruppe de tomes + + + + Select storage de&vice: + + + + + + + + Current: + Actual: + + + + After: + Pos: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + Localisation del bootloader: + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + Partition de sistema EFI: + + + + 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. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + Sin swap + + + + Reuse Swap + Reusar un swap + + + + Swap (no Hibernate) + Swap (sin hivernation) + + + + Swap (with Hibernate) + Swap (con hivernation) + + + + Swap to file + Swap in un file + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Selection de paccages + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Benevenit al configurator Calamares por %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Benevenit al configurator de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Benevenit al installator Calamares por %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Benevenit al installator de %1</h1> + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + Configuration ne successat + + + + Installation Failed + Installation ne successat + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Configuration es completat + + + + Installation Complete + Installation es completat + + + + The setup of %1 is complete. + Li configuration de %1 es completat. + + + + The installation of %1 is complete. + Li installation de %1 es completat. + + + + Package Selection + Selection de paccages + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Resume + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + Crear un partition + + + + Si&ze: + &Grandore: + + + + MiB + Mio + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + E&xtendet + + + + Fi&le System: + Sistema de fi&les: + + + + LVM LV name + Gruppe (LV) de LVM + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + &Ciffrar + + + + Logical + Logic + + + + Primary + Primari + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + Creante un nov partition de %1 sur %2. + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + Crear li tabelle de partitiones + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + Master Boot Record (MBR) + + + + GUID Partition Table (GPT) + Tabelle GUID (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + Crear un nov tabelle de partitiones %1 sur %2. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + Crear un nov tabelle de partitiones <strong>%1</strong> sur <strong>%2</strong> (%3). + + + + Creating new %1 partition table on %2. + Creante un nov tabelle de partitiones %1 sur %2. + + + + The installer failed to create a partition table on %1. + Li installator ne successat crear un tabelle de partitiones sur %1. + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + Crear un gruppe de tomes + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + 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. + + + + + 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. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <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. + + + + + 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. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + Ne successat aperter %1 + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Con&tent: + + + + + &Keep + &Retener + + + + Format + Formate + + + + Warning: Formatting the partition will erase all existing data. + + + + + &Mount Point: + + + + + Si&ze: + &Grandore: + + + + MiB + Mio + + + + Fi&le System: + Sistema de fi&les: + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + Redimensionar un gruppe de tomes + + + + En&crypt system + &Ciffrar li sistema + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + Redimensionar un gruppe de tomes + + + + &Restart now + &Reiniciar nu + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + Finir + + + + FinishedViewStep + + + Finish + Finir + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + Creante initramfs med mkinitcpio. + + + + InitramfsJob + + + Creating initramfs. + Creante initramfs. + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole ne es installat + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + Scripte + + + + KeyboardQmlViewStep + + + Keyboard + Tastatura + + + + KeyboardViewStep + + + Keyboard + Tastatura + + + + LCLocaleDialog + + + System locale setting + + + + + 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>. + + + + + &Cancel + A&nullar + + + + &OK + &OK + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + Redimensionar un gruppe de tomes + + + + <h1>License Agreement</h1> + <h1>Acorde de licentie</h1> + + + + I accept the terms and conditions above. + Yo accepta li termines e condiciones ad-supra. + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + Licentie + + + + LicenseWidget + + + URL: %1 + URL: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>Driver de %1</strong><br/>de %2 + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>Driver de grafica %1</strong><br/><font color="Grey">de %2</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>Plugin de navigator «%1»</strong><br/><font color="Grey">de %2</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>Codec de %1</strong><br/><font color="Grey">de %2</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>Paccage «%1»</strong><br/><font color="Grey">de %2</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">de %2</font> + + + + File: %1 + File: %1 + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + Region: + + + + Zone: + Zone: + + + + + &Change... + &Modificar... + + + + LocaleQmlViewStep + + + Location + Localisation + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + Localisation + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + Null partition es definit. + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + Generar li machine-id. + + + + Configuration Error + Errore de configuration + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + Zone horari: %1 + + + + 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. + + + + + NetInstallViewStep + + + Package selection + Selection de paccages + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + Nucleo + + + + Services + Servicios + + + + Login + + + + + Desktop + + + + + Applications + Applicationes + + + + Communication + Communication + + + + Development + + + + + Office + Officie + + + + Multimedia + + + + + Internet + + + + + Theming + Temas + + + + Gaming + Ludes + + + + Utilities + Utensiles + + + + NotesQmlViewStep + + + Notes + Notes + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + Configuration de OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Zone horari: %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + Li contrasigne es tro curt + + + + Password is too long + Li contrasigne es tro long + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + Ínconosset errore + + + + Password is empty + Li contrasigne es vacui + + + + PackageChooserPage + + + Form + Redimensionar un gruppe de tomes + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + Selection de paccages + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + Paccages + + + + PackageChooserViewStep + + + Packages + Paccages + + + + PackageModel + + + Name + Nómine + + + + Description + Descrition + + + + Page_Keyboard + + + Form + Redimensionar un gruppe de tomes + + + + Keyboard Model: + Modelle de tastatura: + + + + Type here to test your keyboard + Tippa ti-ci por provar vor tastatura + + + + Page_UserSetup + + + Form + Redimensionar un gruppe de tomes + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + login + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + + + + + Choose a password to keep your account safe. + + + + + + <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> + + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + Hem + + + + Boot + Inicie + + + + EFI system + Sistema EFI + + + + Swap + Swap + + + + New partition for %1 + + + + + New partition + Nov partition + + + + %1 %2 + size[number] filesystem[name] + + + + + PartitionModel + + + + Free Space + Líber spacie + + + + + New partition + Nov partition + + + + Name + Nómine + + + + File System + Sistema de files + + + + File System Label + + + + + Mount Point + Monte-punctu + + + + Size + Grandore + + + + PartitionPage + + + Form + Redimensionar un gruppe de tomes + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + Nov &tabelle de partitiones + + + + Cre&ate + Cre&ar + + + + &Edit + &Modificar + + + + &Delete + &Remover + + + + New Volume Group + Nov gruppe de tomes + + + + Resize Volume Group + Redimensionar li gruppe + + + + Deactivate Volume Group + Desactivar li gruppe + + + + Remove Volume Group + Remover li gruppe de tomes + + + + I&nstall boot loader on: + I&nstallar li bootloader sur: + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + Partitiones + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + Actual: + + + + After: + Pos: + + + + No EFI system partition configured + Null partition del sistema EFI es configurat + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + Ne existe disponibil partitiones por installation. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + Redimensionar un gruppe de tomes + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + Aspecte e conduida + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + ínconosset + + + + extended + + + + + unformatted + + + + + swap + + + + + + Default + Predefinit + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + Redimensionar un gruppe de tomes + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <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. + + + + + + + <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. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + Partition de sistema EFI: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + KPMCore ne es disponibil + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + Redimension ne successat + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + Redimensionar li partition %1. + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + Redimensionar li gruppe de tomes + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + Gerer partitiones + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + Intern errore + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + Modelle del tastatura: %1, li arangeament: %2-%3 + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + passwd ha terminat con code %1. + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Assignar li zone horari: %1/%2 + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &OK + + + + &Yes + &Yes + + + + &No + &No + + + + &Cancel + A&nullar + + + + &Close + C&luder + + + + TrackingInstallJob + + + Installation feedback + Response al installation + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + Redimensionar un gruppe de tomes + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + Response + + + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + Usatores + + + + UsersViewStep + + + Users + Usatores + + + + VariantModel + + + Key + Column header for key/value + Clave + + + + Value + Column header for key/value + Valore + + + + VolumeGroupBaseDialog + + + Create Volume Group + Crear un gruppe de tomes + + + + List of Physical Volumes + Liste de fisic tomes + + + + Volume Group Name: + Nómine de gruppe: + + + + Volume Group Type: + Tip de gruppe: + + + + Physical Extent Size: + + + + + MiB + Mio + + + + Total Size: + Total grandore: + + + + Used Size: + Usat grandore: + + + + Total Sectors: + Total sectores: + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + Redimensionar un gruppe de tomes + + + + + Select application and system language + Selecter li application e li lingue del sistema + + + + &About + &Pri + + + + Open donations website + Aperter li website por donationes + + + + &Donate + &Donar + + + + Open help and support website + Aperter li website de auxilie e suporte + + + + &Support + &Suporte + + + + Open issues and bug-tracking website + Aperter li website de control de defectes + + + + &Known issues + &Conosset problemas + + + + Open release notes website + Aperter li website con notes por ti-ci version + + + + &Release notes + &Notes del version + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>Benevenit al configurator Calamares por %1.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>Benevenit al configurator de %1.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Benevenit al installator Calamares por %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Benevenit al installator de %1.</h1> + + + + %1 support + Suporte de %1 + + + + About %1 setup + Pri li configurator de %1 + + + + About %1 installer + Pri li installator de %1 + + + + <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. + <h1>%1</h1><br/><strong>%2<br/>por %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/>Mersí al <a href="https://calamares.io/team/">equip de Calamares</a> e li <a href="https://www.transifex.com/calamares/calamares/">equip de traduction de Calamares</a>.<br/><br/>Developation de <a href="https://calamares.io/">Calamares</a> es suportet de <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - «Liberating Software». + + + + WelcomeQmlViewStep + + + Welcome + Benevenit + + + + WelcomeViewStep + + + Welcome + Benevenit + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Errore de configuration + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + Retro + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + Retro + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + Modelle de tastatura: + + + + Layouts + Arangeamentes + + + + Type here to test your keyboard + Tippa ti-ci por provar vor tastatura + + + + Variants + Variantes + + + + localeq + + + Change + Modificar + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + Retro + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + Pri + + + + Support + Suporte + + + + Known issues + Conosset problemas + + + + Release notes + Notes del version + + + + Donate + Donar + + + diff --git a/lang/calamares_is.ts b/lang/calamares_is.ts index 311875695..8d0947c4b 100644 --- a/lang/calamares_is.ts +++ b/lang/calamares_is.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Aðalræsifærsla (MBR) %1 - + Boot Partition Ræsidisksneið - + System Partition Kerfisdisksneið - + Do not install a boot loader Ekki setja upp ræsistjóra - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Auð síða @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Eyðublað - + GlobalStorage VíðværGeymsla - + JobQueue Vinnuröð - + Modules Forritseiningar - + Type: Tegund: - - + + none ekkert - + Interface: Viðmót: - - Tools - Verkfæri + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet Endurhlaða stílblað - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree Greinar viðmótshluta - + Debug information Villuleitarupplýsingar @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Setja upp - + Install Setja upp @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Verk mistókst (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Búið @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Keyri skipun %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Keyri %1 aðgerð. - + Bad working directory path Röng slóð á vinnumöppu - + Working directory %1 for python job %2 is not readable. Vinnslumappa %1 fyrir python-verkið %2 er ekki lesanleg. - + Bad main script file Röng aðal-skriftuskrá - + Main script file %1 for python job %2 is not readable. Aðal-skriftuskrá %1 fyrir python-verkið %2 er ekki lesanleg. - + Boost.Python error in job "%1". Boost.Python villa í verkinu "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Til baka - - - - &Next - &Næst - - - - &Cancel - &Hætta við - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Hætta við uppsetningu ánþess að breyta kerfinu. - - - + Setup Failed Uppsetning mistókst - - Would you like to paste the install log to the web? - + + Installation Failed + Uppsetning mistókst - + + Error + Villa + + + + &Yes + &Já + + + + &No + &Nei + + + + &Close + &Loka + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Calamares uppsetning mistókst - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + Halda áfram með uppsetningu? + + + Continue with installation? Halda áfram með uppsetningu? - + 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> - + + 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> + %1 uppsetningarforritið er um það bil að gera breytingar á diskinum til að setja upp %2.<br/><strong>Þú munt ekki geta afturkallað þessar breytingar.</strong> + + + &Set up now &Setja upp núna - + + &Install now + Setja &inn núna + + + + Go &back + Fara til &baka + + + &Set up &Setja upp - + &Install &Setja upp - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Uppsetning er lokið. Lokaðu uppsetningarforritinu. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Hætta við uppsetningu ánþess að breyta kerfinu. + + + + &Next + &Næst + + + + &Back + &Til baka + + + + &Done + &Búið + + + + &Cancel + &Hætta við + + + Cancel setup? Hætta við uppsetningu? - + Cancel installation? Hætta við uppsetningu? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Viltu virkilega að hætta við núverandi uppsetningarferli? Uppsetningarforritið mun hætta og allar breytingar tapast. - - - - &Yes - &Já - - - - - &No - &Nei - - - - &Close - &Loka - - - - Continue with setup? - Halda áfram með uppsetningu? - - - - 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> - %1 uppsetningarforritið er um það bil að gera breytingar á diskinum til að setja upp %2.<br/><strong>Þú munt ekki geta afturkallað þessar breytingar.</strong> - - - - &Install now - Setja &inn núna - - - - Go &back - Fara til &baka - - - - &Done - &Búið - - - - The installation is complete. Close the installer. - Uppsetning er lokið. Lokaðu uppsetningarforritinu. - - - - Error - Villa - - - - Installation Failed - Uppsetning mistókst - CalamaresPython::Helper - + Unknown exception type Óþekkt tegund fráviks - + unparseable Python error óþáttanleg Python villa - + unparseable Python traceback óþáttanleg Python reki - + Unfetchable Python error. Ósækjanleg Python villa. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Til baka - - - - &Next - &Næst - - - - &Cancel - &Hætta við - - - + %1 Setup Program - + %1 Installer %1 uppsetningarforrit + + + ChangeFilesystemLabelJob - - Show debug information - Birta villuleitarupplýsingar + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Uppsetningarforritinu mistókst að uppfæra disksneiðatöflu á diski '%1'. CheckerContainer - + Gathering system information... Söfnun kerfis upplýsingar... @@ -498,157 +522,197 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. ChoicePage - + Form Eyðublað - - After: - Eftir: - - - - Boot loader location: - Staðsetning ræsistjóra - - - + Select storage de&vice: Veldu geymslu tæ&ki: - - - - + + + + Current: Núverandi: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Eftir: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Handvirk disksneiðing</strong><br/>Þú getur búið til eða breytt stærð disksneiða sjálft. + + + Reuse %1 as home partition for %2. Endurnota %1 sem heimasvæðis disksneið fyrir %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Veldu disksneið til að minnka, dragðu síðan botnstikuna til að breyta stærðinni</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Staðsetning ræsistjóra + + + <strong>Select a partition to install on</strong> <strong>Veldu disksneið til að setja upp á </strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. EFI kerfisdisksneið er hvergi að finna á þessu kerfi. Farðu til baka og notaðu handvirka skiptingu til að setja upp %1. - + The EFI system partition at %1 will be used for starting %2. EFI kerfisdisksneið á %1 mun verða notuð til að ræsa %2. - + EFI system partition: EFI kerfisdisksneið: - + 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. Þetta geymslu tæki hefur mörg stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Eyða disk</strong><br/>Þetta mun <font color="red">eyða</font> öllum gögnum á þessu valdna geymslu tæki. - - 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. - Þetta geymslu tæki hefur %1 á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Setja upp samhliða</strong><br/>Uppsetningarforritið mun minnka disksneið til að búa til pláss fyrir %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Skipta út disksneið</strong><br/>Skiptir disksneið út með %1. - + + 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. + Þetta geymslu tæki hefur %1 á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. + + + 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. Þetta geymslu tæki hefur stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. - + 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. Þetta geymslu tæki hefur mörg stýrikerfi á sér. Hvað viltu gera?<br/>Þú verður að vera fær um að yfirfara og staðfesta val þitt áður en breytingar eru gerðar til geymslu tæki. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Hreinsaði alla tengipunkta fyrir %1 @@ -656,22 +720,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. ClearTempMountsJob - + Clear all temporary mounts. Hreinsa alla bráðabirgðatengipunkta. - + Clearing all temporary mounts. Hreinsa alla bráðabirgðatengipunkta. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. Hreinsaði alla bráðabirgðatengipunkta. @@ -679,18 +738,18 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. CommandList - - + + Could not run command. Gat ekki keyrt skipun. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -698,100 +757,235 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur ekki haldið áfram. <a href="#details">Upplýsingar...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur haldið áfram, en sumir eiginleikar gætu verið óvirk. - - - - This program will ask you some questions and set up %2 on your computer. - Þetta forrit mun spyrja þig nokkurra spurninga og setja upp %2 á tölvunni þinni. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Velkomin til Calamares uppsetningarforritið fyrir %1</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Velkomin í %1 uppsetninguna.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Velkomin til Calamares uppsetningar fyrir %1</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Velkomin í %1 uppsetningarforritið.</h1> - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. Tungumál kerfisins verður sett sem %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - Setja tímabelti sem %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Valdir pakkar + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur ekki haldið áfram. <a href="#details">Upplýsingar...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur haldið áfram, en sumir eiginleikar gætu verið óvirk. + + + + This program will ask you some questions and set up %2 on your computer. + Þetta forrit mun spyrja þig nokkurra spurninga og setja upp %2 á tölvunni þinni. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Notandanafnið þitt er of langt. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Notandanafnið þitt er of stutt. + + + + Your hostname is too long. + Notandanafnið þitt er of langt. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Lykilorð passa ekki! + + + + OK! + + + + + Setup Failed + Uppsetning mistókst + + + + Installation Failed + Uppsetning mistókst + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Uppsetningu lokið + + + + Installation Complete + Uppsetningu lokið + + + + The setup of %1 is complete. + Uppsetningu á %1 er lokið. + + + + The installation of %1 is complete. + Uppsetningu á %1 er lokið. + + + + Package Selection + Valdir pakkar + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Yfirlit + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + Þetta er yfirlit yfir það sem mun gerast þegar þú byrjar að setja upp aðferð. + ContextualProcessJob - + Contextual Processes Job @@ -799,100 +993,136 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. CreatePartitionDialog - + Create a Partition Búa til disksneið - - MiB - MiB - - - - Partition &Type: - &Tegund disksneiðar: - - - - &Primary - &Aðal - - - - E&xtended - Útví&kkuð - - - - Fi&le System: - Skráa&kerfi: - - - - LVM LV name - LVM LV nafn - - - - Flags: - Flögg: - - - - &Mount Point: - Tengi&punktur: - - - + Si&ze: St&ærð: - + + MiB + MiB + + + + Partition &Type: + &Tegund disksneiðar: + + + + Primar&y + + + + + E&xtended + Útví&kkuð + + + + Fi&le System: + Skráa&kerfi: + + + + LVM LV name + LVM LV nafn + + + + &Mount Point: + Tengi&punktur: + + + + Flags: + Flögg: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt &Dulrita - + Logical Rökleg - + Primary Aðal - + GPT GPT - + Mountpoint already in use. Please select another one. Tengipunktur er þegar í notkun. Veldu einhvern annan. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Búa til nýja %1 disksneiðatöflu á %2. - + The installer failed to create partition on disk '%1'. Uppsetningarforritinu mistókst að búa til disksneið á diski '%1'. @@ -900,27 +1130,27 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. CreatePartitionTableDialog - + Create Partition Table Búa til disksneiðatöflu - + Creating a new partition table will delete all existing data on the disk. Gerð nýrrar disksneiðatöflu mun eyða öllum gögnum á diskinum. - + What kind of partition table do you want to create? Hverning disksneiðstöflu langar þig til að búa til? - + Master Boot Record (MBR) Aðalræsifærsla (MBR) - + GUID Partition Table (GPT) GUID disksneiðatafla (GPT) @@ -928,22 +1158,22 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. CreatePartitionTableJob - + Create new %1 partition table on %2. Búa til nýja %1 disksneiðatöflu á %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Búa til nýja <strong>%1</strong> disksneiðatöflu á <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Búa til nýja %1 disksneiðatöflu á %2. - + The installer failed to create a partition table on %1. Uppsetningarforritinu mistókst að búa til disksneiðatöflu á diski '%1'. @@ -951,45 +1181,41 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. CreateUserJob - + Create user %1 Búa til notanda %1 - + Create user <strong>%1</strong>. Búa til notanda <strong>%1</strong>. - - Creating user %1. - Bý til notanda %1. + + Preserving home directory + - - Sudoers dir is not writable. - Sudoers dir er ekki skrifanleg. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Get ekki búið til sudoers skrá til að lesa. + + Configuring user %1 + - - Cannot chmod sudoers file. - Get ekki chmod sudoers skrá. - - - - Cannot open groups file for reading. - Get ekki opnað hópa skrá til að lesa. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1223,22 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1020,18 +1246,18 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1039,22 +1265,22 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. DeletePartitionJob - + Delete partition %1. Eyða disksneið %1. - + Delete partition <strong>%1</strong>. Eyða disksneið <strong>%1</strong>. - + Deleting partition %1. Eyði disksneið %1. - + The installer failed to delete partition %1. Uppsetningarforritinu mistókst að eyða disksneið %1. @@ -1062,46 +1288,46 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. Þetta tæki hefur <strong>%1</strong> sniðtöflu. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1336,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Skrifa LUKS stillingar fyrir Dracut til %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 Tókst ekki að opna %1 @@ -1128,7 +1354,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1136,123 +1362,167 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. EditExistingPartitionDialog - + Edit Existing Partition Breyta fyrirliggjandi disksneið - - Content: - Innihald: + + Con&tent: + - + &Keep &Halda - + Format Forsníða - + Warning: Formatting the partition will erase all existing data. Aðvörun: Ef disksneiðin er forsniðin munu öll gögn eyðast. - + &Mount Point: Tengi&punktur: - + Si&ze: St&ærð: - + MiB MiB - + Fi&le System: Skráaker&fi: - + Flags: Flögg: - - Mountpoint already in use. Please select another one. - Tengipunktur er þegar í notkun. Veldu einhvern annan. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Eyðublað - + En&crypt system &Dulrita kerfi - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Lykilorð - + Confirm passphrase Staðfesta lykilorð - + + Please enter the same passphrase in both boxes. Vinsamlegast sláðu inn sama lykilorðið í báða kassana. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Setja upplýsingar um disksneið - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Setja upp %1 á <strong>nýja</strong> %2 disk sneiðingu. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Setja upp <strong>nýtt</strong> %2 snið með tengipunkti <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Setja upp %2 á %3 disk sneiðingu <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Setja upp %3 snið <strong>%1</strong> með tengipunkti <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Setja ræsistjórann upp á <strong>%1</strong>. - + Setting up mount points. Set upp tengipunkta. @@ -1260,93 +1530,81 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. FinishedPage - + Form Eyðublað - + &Restart now &Endurræsa núna - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Allt klárt.</h1><br/>%1 hefur verið sett upp á tölvunni þinni.<br/>Þú getur nú endurræst í nýja kerfið, eða halda áfram að nota %2 Lifandi umhverfi. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Ljúka + + + FinishedViewStep - - Setup Complete - Uppsetningu lokið - - - - Installation Complete - Uppsetningu lokið - - - - The setup of %1 is complete. - Uppsetningu á %1 er lokið. - - - - The installation of %1 is complete. - Uppsetningu á %1 er lokið. + + Finish + Ljúka FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Forsníða disksneið %1 með %2 skráakerfinu. - + The installer failed to format partition %1 on disk '%2'. Uppsetningarforritinu mistókst að forsníða disksneið %1 á diski '%2'. @@ -1354,72 +1612,72 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source er í sambandi við aflgjafa - + The system is not plugged in to a power source. Kerfið er ekki í sambandi við aflgjafa. - + is connected to the Internet er tengd við Internetið - + The system is not connected to the Internet. Kerfið er ekki tengd við internetið. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Uppsetningarforritið er ekki keyrandi með kerfisstjóraheimildum. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Skjárinn er of lítill til að birta uppsetningarforritið. @@ -1427,7 +1685,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1693,25 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1719,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1727,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. InitramfsJob - + Creating initramfs. @@ -1477,17 +1735,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. InteractiveTerminalPage - + Konsole not installed Konsole ekki uppsett - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1495,28 +1753,15 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. InteractiveTerminalViewStep - + Script Skrifta - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard Lyklaborð @@ -1524,7 +1769,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. KeyboardViewStep - + Keyboard Lyklaborð @@ -1532,65 +1777,88 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. LCLocaleDialog - + System locale setting Staðfærsla kerfisins stilling - + 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>. - + &Cancel &Hætta við - + &OK &Í lagi + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Eyðublað - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Ég samþykki skilyrði leyfissamningsins hér að ofan. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1866,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. LicenseViewStep - + License Notkunarleyfi @@ -1606,109 +1874,102 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 rekill</strong><br/>hjá %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakki</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">frá %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Tungumál kerfisins verður sett sem %1. - - - - The numbers and dates locale will be set to %1. - - - - + Region: Hérað: - + Zone: Svæði: - - + + &Change... &Breyta... - - - Set timezone to %1/%2.<br/> - Setja tímabelti sem %1/%2.<br/> - LocaleQmlViewStep - + Location Staðsetning + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Staðsetning @@ -1716,35 +1977,35 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2013,130 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Valdir pakkar - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2144,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. NotesQmlViewStep - + Notes @@ -1877,17 +2152,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2170,317 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Lykilorðið þitt er of stutt - + Password is too long Lykilorðið þitt er of langt - + Password is too weak Lykilorðið þitt er of veikt - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short Lykilorðið er of stutt - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error Óþekkt villa - + Password is empty @@ -2156,40 +2488,48 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PackageChooserPage - + Form Eyðublað - + Product Name - + TextLabel - + Long Product Description - + Package Selection Valdir pakkar - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + Pakkar + + PackageChooserViewStep - + Packages Pakkar @@ -2197,12 +2537,12 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PackageModel - + Name Heiti - + Description Lýsing @@ -2210,17 +2550,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Page_Keyboard - + Form Eyðublað - + Keyboard Model: Lyklaborðs tegund: - + Type here to test your keyboard Skrifaðu hér til að prófa lyklaborðið @@ -2228,96 +2568,96 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Page_UserSetup - + Form Eyðublað - + What is your name? Hvað heitir þú? - - What name do you want to use to log in? - Hvaða nafn vilt þú vilt nota til að skrá þig inn? - - - - Choose a password to keep your account safe. - Veldu lykilorð til að halda reikningnum þínum öruggum. - - - - - <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> - <small>Sláðu inn sama lykilorðið tvisvar, þannig að það geta verið athugað fyrir innsláttarvillur. Góð lykilorð mun innihalda blöndu af stöfum, númerum og greinarmerki, ætti að vera að minnsta kosti átta stafir að lengd, og ætti að vera breytt með reglulegu millibili.</small> - - - - What is the name of this computer? - Hvað er nafnið á þessari tölvu? - - - + Your Full Name - + + What name do you want to use to log in? + Hvaða nafn vilt þú vilt nota til að skrá þig inn? + + + login - + + What is the name of this computer? + Hvað er nafnið á þessari tölvu? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Þetta nafn verður notað ef þú gerir tölvuna sýnilega öðrum á neti.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Veldu lykilorð til að halda reikningnum þínum öruggum. + + + + + <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> + <small>Sláðu inn sama lykilorðið tvisvar, þannig að það geta verið athugað fyrir innsláttarvillur. Góð lykilorð mun innihalda blöndu af stöfum, númerum og greinarmerki, ætti að vera að minnsta kosti átta stafir að lengd, og ætti að vera breytt með reglulegu millibili.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Skrá inn sjálfkrafa án þess að biðja um lykilorð. - + Use the same password for the administrator account. Nota sama lykilorð fyrir kerfisstjóra reikning. - + Choose a password for the administrator account. Veldu lykilorð fyrir kerfisstjóra reikning. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Sláðu sama lykilorð tvisvar, þannig að það er hægt að yfirfara innsláttarvillur.</small> @@ -2325,42 +2665,42 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PartitionLabelsView - + Root Rót - + Home Heimasvæði - + Boot Ræsisvæði - + EFI system EFI-kerfi - + Swap Swap diskminni - + New partition for %1 Ný disksneið fyrir %1 - + New partition Ný disksneið - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2709,39 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PartitionModel - - + + Free Space Laust pláss - - + + New partition Ný disksneið - + Name Heiti - + File System Skráakerfi - + + File System Label + + + + Mount Point Tengipunktur - + Size Stærð @@ -2404,77 +2749,77 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PartitionPage - + Form Eyðublað - + Storage de&vice: Geymslu tæ&ki: - + &Revert All Changes &Afturkalla allar breytingar - + New Partition &Table Ný disksneiðatafla - + Cre&ate Útbú&a - + &Edit &Breyta - + &Delete &Eyða - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Ertu viss um að þú viljir búa til nýja disksneið á %1? - + Can not create new partition - + 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. @@ -2482,117 +2827,107 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PartitionViewStep - + Gathering system information... Söfnun kerfis upplýsingar... - + Partitions Disksneiðar - - Install %1 <strong>alongside</strong> another operating system. - Setja upp %1 <strong>ásamt</strong> ásamt öðru stýrikerfi. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Eyða</strong> disk og setja upp %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Skipta út</strong> disksneið með %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Handvirk</strong> disksneiðaskipting. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Uppsetning %1 <strong>með</strong> öðru stýrikerfi á disk <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Eyða</strong> disk <strong>%2</strong> (%3) og setja upp %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Skipta út</strong> disksneið á diski <strong>%2</strong> (%3) með %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Handvirk</strong> disksneiðaskipting á diski <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Diskur <strong>%1</strong> (%2) - - - + Current: Núverandi: - + After: Eftir: - + No EFI system partition configured Ekkert EFI kerfisdisksneið stillt - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2935,13 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2614,17 +2949,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PlasmaLnfPage - + Form Eyðublað - + 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. - + 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. @@ -2632,7 +2967,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PlasmaLnfViewStep - + Look-and-Feel Útlit og hegðun @@ -2640,17 +2975,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. PreserveFiles - + Saving files for later ... Vista skrár fyrir seinna ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2658,65 +2993,65 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2724,89 +3059,94 @@ Output: QObject - - Default Keyboard Model - Sjálfgefin tegund lyklaborðs - - - - - Default - Sjálfgefið - - - - unknown - óþekkt - - - - extended - útvíkkuð - - - - unformatted - ekki forsniðin - - - - swap - swap diskminni - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - (enginn tengipunktur) - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + óþekkt - - No description provided. - + + extended + útvíkkuð - - - - + + unformatted + ekki forsniðin + + + + swap + swap diskminni + + + + + Default + Sjálfgefið + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + (enginn tengipunktur) + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2814,18 +3154,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2833,143 +3173,158 @@ Output: ReplaceWidget - + Form Eyðublað - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Veldu hvar á að setja upp %1.<br/><font color="red">Aðvörun: </font>þetta mun eyða öllum skrám á valinni disksneið. - + The selected item does not appear to be a valid partition. Valið atriði virðist ekki vera gild disksneið. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. %1 er hægt að setja upp á þessari disksneið. - + Data partition (%1) Gagnadisksneið (%1) - + Unknown system partition (%1) Óþekkt kerfisdisksneið (%1) - + %1 system partition (%2) %1 kerfisdisksneið (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Disksneið %1 er of lítil fyrir %2. Vinsamlegast veldu disksneið með að lámark %3 GiB. - + <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. <strong>%2</strong><br/><br/>EFI kerfisdisksneið er hvergi að finna á þessu kerfi. Vinsamlegast farðu til baka og notaðu handvirka skiptingu til að setja upp %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 mun vera sett upp á %2.<br/><font color="red">Aðvörun: </font>öll gögn á disksneið %2 mun verða eytt. - + The EFI system partition at %1 will be used for starting %2. EFI kerfis stýring á %1 mun vera notuð til að byrja %2. - + EFI system partition: EFI kerfisdisksneið: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2977,22 +3332,22 @@ Output: ResizePartitionJob - + Resize partition %1. Breyti stærð disksneiðar %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Uppsetningarforritinu mistókst að breyta stærð disksneiðar %1 á diski '%2'. @@ -3000,7 +3355,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3008,18 +3363,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3027,53 +3382,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Fyrir bestu niðurstöður, skaltu tryggja að þessi tölva: - + System requirements Kerfiskröfur - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur ekki haldið áfram. <a href="#details">Upplýsingar...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Þessi tölva uppfyllir ekki lágmarkskröfur um uppsetningu %1.<br/>Uppsetningin getur haldið áfram, en sumir eiginleikar gætu verið óvirk. - - - - This program will ask you some questions and set up %2 on your computer. - Þetta forrit mun spyrja þig nokkurra spurninga og setja upp %2 á tölvunni þinni. - - ScanningDialog - + Scanning storage devices... Skönnun geymslu tæki... - + Partitioning Partasneiðing @@ -3081,29 +3408,29 @@ Output: SetHostNameJob - + Set hostname %1 Setja vélarheiti %1 - + Set hostname <strong>%1</strong>. Setja vélarheiti <strong>%1</strong>. - + Setting hostname %1. Stilla vélarheiti %1. + - Internal Error Innri Villa - - + + Cannot write hostname to target system @@ -3111,29 +3438,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 Tókst ekki að skrifa %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3141,82 +3468,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. Uppsetningarforritinu mistókst að setja flögg á disksneið %1. @@ -3224,42 +3551,42 @@ Output: SetPasswordJob - + Set password for user %1 Gerðu lykilorð fyrir notanda %1 - + Setting password for user %1. Geri lykilorð fyrir notanda %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. Ekki er hægt að aftengja kerfisstjóra reikning. - + passwd terminated with error code %1. - + Cannot set password for user %1. Get ekki sett lykilorð fyrir notanda %1. - + usermod terminated with error code %1. usermod endaði með villu kóðann %1. @@ -3267,45 +3594,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Setja tímabelti til %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. Get ekki sett tímasvæði. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, Get ekki sett tímasvæði, - + Cannot open /etc/timezone for writing Get ekki opnað /etc/timezone til að skrifa. + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Get ekki chmod sudoers skrá. + + + + Cannot create sudoers file for writing. + Get ekki búið til sudoers skrá til að lesa. + + ShellProcessJob - + Shell Processes Job @@ -3313,81 +3677,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Í lagi - - This is an overview of what will happen once you start the install procedure. - Þetta er yfirlit yfir það sem mun gerast þegar þú byrjar að setja upp aðferð. + + &Yes + &Já - - - SummaryViewStep - - Summary - Yfirlit + + &No + &Nei + + + + &Cancel + &Hætta við + + + + &Close + &Loka TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3395,106 +3795,97 @@ Output: TrackingPage - + Form Eyðublað - + Placeholder Frátökueining - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + Aftengja skráarkerfi. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Notandanafnið þitt er of langt. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Notandanafnið þitt er of stutt. - - - - Your hostname is too long. - Notandanafnið þitt er of langt. - - - - Your passwords do not match! - Lykilorð passa ekki! + + Users + Notendur UsersViewStep - + Users Notendur @@ -3502,65 +3893,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB MiB - + Total Size: Heildar stærð: - + Used Size: Notuð stærð: - + Total Sectors: - + Quantity of LVs: @@ -3568,106 +3961,106 @@ Output: WelcomePage - + Form Eyðublað - - + + Select application and system language Veldu tungumál forrits og kerfis + &About + &Um + + + Open donations website - + &Donate Styr&kja - + Open help and support website + &Support + &Stuðningur + + + Open issues and bug-tracking website - Open release notes website - Opna vefsvæði með upplýsingum um útgáfuna - - - - &Release notes - &Um útgáfu - - - &Known issues &Þekktir gallar - - &Support - &Stuðningur + + Open release notes website + Opna vefsvæði með upplýsingum um útgáfuna - - &About - &Um + + &Release notes + &Um útgáfu - - <h1>Welcome to the %1 installer.</h1> - <h1>Velkomin í %1 uppsetningarforritið.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Velkomin til Calamares uppsetningar fyrir %1</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Velkomin til Calamares uppsetningarforritið fyrir %1</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Velkomin í %1 uppsetninguna.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Velkomin til Calamares uppsetningar fyrir %1</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Velkomin í %1 uppsetningarforritið.</h1> + + + + %1 support + %1 stuðningur + + + About %1 setup Um %1 uppsetninguna - + About %1 installer Um %1 uppsetningarforrrit - + <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. - - - %1 support - %1 stuðningur - WelcomeQmlViewStep - + Welcome Velkomin(n) @@ -3675,31 +4068,157 @@ Output: WelcomeViewStep - + Welcome Velkomin(n) + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Birta villuleitarupplýsingar + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3707,86 +4226,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Lyklaborðs tegund: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Skrifaðu hér til að prófa lyklaborðið - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Hvað heitir þú? + + + + Your Full Name + + + + + What name do you want to use to log in? + Hvaða nafn vilt þú vilt nota til að skrá þig inn? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Hvað er nafnið á þessari tölvu? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Veldu lykilorð til að halda reikningnum þínum öruggum. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Nota sama lykilorð fyrir kerfisstjóra reikning. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_it_IT.ts b/lang/calamares_it_IT.ts index 608c62556..a9529e851 100644 --- a/lang/calamares_it_IT.ts +++ b/lang/calamares_it_IT.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Gestisci le impostazioni di mount automatico + + BootInfoWidget - + 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. L'<strong>ambiente di avvio</strong> di questo sistema. <br><br>I vecchi sistemi x86 supportano solo <strong>BIOS</strong>. <bt>I sistemi moderni normalmente usano <strong>EFI</strong> ma possono anche apparire come sistemi BIOS se avviati in modalità compatibile. - + 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. Il sistema è stato avviato con un ambiente di boot <strong>EFI</strong>.<br><br>Per configurare l'avvio da un ambiente EFI, il programma d'installazione deve inserire un boot loader come <strong>GRUB</strong> o <strong>systemd-boot</strong> su una <strong>EFI System Partition</strong>. Ciò avviene automaticamente, a meno che non si scelga il partizionamento manuale che permette di scegliere un proprio boot loader personale. - + 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. ll sistema è stato avviato con un ambiente di boot <strong>BIOS</strong>.<br><br>Per configurare l'avvio da un ambiente BIOS, il programma d'installazione deve installare un boot loader come <strong>GRUB</strong> all'inizio di una partizione o nel <strong>Master Boot Record</strong> vicino all'origine della tabella delle partizioni (preferito). Ciò avviene automaticamente, a meno che non si scelga il partizionamento manuale che permette di fare una configurazione personale. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record di %1 - + Boot Partition Partizione di avvio - + System Partition Partizione di sistema - + Do not install a boot loader Non installare un boot loader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Pagina Vuota @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Modulo - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Moduli - + Type: Tipo: - - + + none nessuna - + Interface: Interfaccia: - - Tools - Strumenti + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + Ricarica il foglio di stile dalla cartella del marchio. + + + + Uploads the session log to the configured pastebin. + Carica i registri di sessione nel pastebin configurato. + + + + Send Session Log + Invia registro di sessione + + + Reload Stylesheet Ricarica il foglio di stile - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree Albero dei Widget - + Debug information Informazioni di debug @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - Installazione + Impostazione - + Install Installa @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Operazione fallita (%1) - + Programmed job failure was explicitly requested. Il fallimento dell'operazione programmata è stato richiesto esplicitamente. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Fatto @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Operazione d'esempio (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - Esegui il comando '%1' sul sistema di destinazione + Esegui il comando '%1' nel sistema di destinazione - + Run command '%1'. - Esegui il comando '1%' + Esegui il comando '1%'. - + Running command %1 %2 Comando in esecuzione %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Operazione %1 in esecuzione. - + Bad working directory path Il percorso della cartella corrente non è corretto - + Working directory %1 for python job %2 is not readable. La cartella corrente %1 per l'attività di Python %2 non è accessibile. - + Bad main script file File dello script principale non valido - + Main script file %1 for python job %2 is not readable. Il file principale dello script %1 per l'attività di python %2 non è accessibile. - + Boost.Python error in job "%1". Errore da Boost.Python nell'operazione "%1". @@ -210,41 +238,46 @@ Calamares::QmlViewStep - + Loading ... Caricamento ... - + QML Step <i>%1</i>. - QML Progresso <i>%1</i>. + Passaggio QML <i>%1</i>. - + Loading failed. Caricamento fallito. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Il controllo dei requisiti per il modulo <i>%1</i> è completo. + - + Waiting for %n module(s). In attesa del(i) modulo(i) %n. - In attesa del(i) modulo(i) %n. + In attesa di %n modulo(i). - + (%n second(s)) (%n secondo) - (%n secondi) + (%n secondo(i)) - + System-requirements checking is complete. Il controllo dei requisiti di sistema è completo. @@ -252,246 +285,236 @@ Calamares::ViewManager - - &Back - &Indietro - - - - &Next - &Avanti - - - - &Cancel - &Annulla - - - - Cancel setup without changing the system. - Annulla l'installazione senza modificare il computer - - - - Cancel installation without changing the system. - Annullare l'installazione senza modificare il sistema. - - - + Setup Failed Installazione fallita - - Would you like to paste the install log to the web? - Vuoi incollare il log di installazione nel web? + + Installation Failed + Installazione non riuscita + + + + Error + Errore + + + + &Yes + &Si + + + + &No + &No + + + + &Close + &Chiudi + + + + Install Log Paste URL + URL di copia del log d'installazione + + + + The upload was unsuccessful. No web-paste was done. + Il caricamento è fallito. Non è stata fatta la copia sul web. + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + Inizializzazione di Calamares fallita - Install Log Paste URL - Incolla URL Log di Installazione - - - - The upload was unsuccessful. No web-paste was done. - Il caricamento è fallito. Non è stato eseguito web-paste. - - - - Calamares Initialization Failed - Inizializzazione di Calamares Fallita - - - %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. - %1 non può essere installato. Calamares non è stato in grado di caricare tutti i moduli configurati. Questo è un problema del modo in cui Calamares viene utilizzato dalla distribuzione. + %1 non può essere installato. Calamares non ha potuto caricare tutti i moduli configurati. Questo è un problema del modo in cui Calamares viene utilizzato dalla distribuzione. - + <br/>The following modules could not be loaded: - <br/>Non è stato possibile caricare il seguente modulo: + <br/>I seguenti moduli non possono essere caricati: - + + Continue with setup? + Procedere con la configurazione? + + + Continue with installation? Continuare l'installazione? - + 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> - Il %1 programma di installazione sta per fare dei cambiamenti sul tuo disco per installare %2. Non sarà possibile annullare questi cambiamenti. + Il programma d'installazione %1 sta per modificare il disco di per installare %2. Non sarà possibile annullare queste modifiche. - + + 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> + Il programma d'installazione %1 sta per eseguire delle modifiche al tuo disco per poter installare %2.<br/><strong> Non sarà possibile annullare tali modifiche.</strong> + + + &Set up now &Installa adesso - + + &Install now + &Installa adesso + + + + Go &back + &Indietro + + + &Set up &Installazione - + &Install &Installa - + Setup is complete. Close the setup program. - Installazione completata. Chiudere il programma di installazione. + Installazione completata. Chiudere il programma d'installazione. - + + The installation is complete. Close the installer. + L'installazione è terminata. Chiudere il programma d'installazione. + + + + Cancel setup without changing the system. + Annulla l'installazione senza modificare il sistema. + + + + Cancel installation without changing the system. + Annullare l'installazione senza modificare il sistema. + + + + &Next + &Avanti + + + + &Back + &Indietro + + + + &Done + &Fatto + + + + &Cancel + &Annulla + + + Cancel setup? Annullare l'installazione? - + Cancel installation? Annullare l'installazione? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - Vuoi davvero annullare il processo di installazione? Il programma di installazione verrrà terminato e tutti i cambiamenti verranno persi. + Si vuole annullare veramente il processo di installazione? Il programma d'installazione verrà terminato e tutti i cambiamenti saranno persi. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Si vuole davvero annullare l'installazione in corso? Il programma d'installazione sarà terminato e tutte le modifiche andranno perse. - - - - &Yes - &Si - - - - - &No - &No - - - - &Close - &Chiudi - - - - Continue with setup? - Procedere con la configurazione? - - - - 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> - Il programma d'installazione %1 sta per eseguire delle modifiche al tuo disco per poter installare %2.<br/><strong> Non sarà possibile annullare tali modifiche.</strong> - - - - &Install now - &Installa adesso - - - - Go &back - &Indietro - - - - &Done - &Fatto - - - - The installation is complete. Close the installer. - L'installazione è terminata. Chiudere il programma d'installazione. - - - - Error - Errore - - - - Installation Failed - Installazione non riuscita - CalamaresPython::Helper - + Unknown exception type Tipo di eccezione sconosciuto - + unparseable Python error Errore Python non definibile - + unparseable Python traceback Traceback Python non definibile - + Unfetchable Python error. Errore di Python non definibile. - - CalamaresUtils - - - Install log posted to: -%1 - Log di installazione caricato: -%1 - - CalamaresWindow - - &Back - &Indietro - - - - &Next - &Avanti - - - - &Cancel - &Annulla - - - + %1 Setup Program - %1 Programma di installazione + %1 Programma d'installazione - + %1 Installer %1 Programma di installazione + + + ChangeFilesystemLabelJob - - Show debug information - Mostra le informazioni di debug + + Set filesystem label on %1. + Imposta l'etichetta del filesystem a %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Il programma di installazione non è riuscito ad aggiornare la tabella delle partizioni sul disco '%1'. CheckerContainer - + Gathering system information... Raccolta delle informazioni di sistema... @@ -499,157 +522,197 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse ChoicePage - + Form Modulo - - After: - Dopo: - - - - Boot loader location: - Posizionamento del boot loader: - - - + Select storage de&vice: Selezionare un dispositivo di me&moria: - - - - + + + + Current: Corrente: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Dopo: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Partizionamento manuale</strong><br/>Si possono creare o ridimensionare le partizioni manualmente. + + + Reuse %1 as home partition for %2. Riutilizzare %1 come partizione home per &2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selezionare una partizione da ridurre, trascina la barra inferiore per ridimensionare</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 sarà ridotta a %2MiB ed una nuova partizione di %3MiB sarà creata per %4 - + + Boot loader location: + Posizionamento del boot loader: + + + <strong>Select a partition to install on</strong> <strong>Selezionare la partizione sulla quale si vuole installare</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Impossibile trovare una partizione EFI di sistema. Si prega di tornare indietro ed effettuare un partizionamento manuale per configurare %1. - + The EFI system partition at %1 will be used for starting %2. La partizione EFI di sistema su %1 sarà usata per avviare %2. - + EFI system partition: Partizione EFI di sistema: - + 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. Questo dispositivo di memoria non sembra contenere alcun sistema operativo. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Cancellare disco</strong><br/>Questo <font color="red">cancellerà</font> tutti i dati attualmente presenti sul dispositivo di memoria. - - 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. - Questo dispositivo di memoria ha %1. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - - - - No Swap - No Swap - - - - Reuse Swap - Riutilizza Swap - - - - Swap (no Hibernate) - Swap (senza ibernazione) - - - - Swap (with Hibernate) - Swap (con ibernazione) - - - - Swap to file - Swap su file - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installare a fianco</strong><br/>Il programma di installazione ridurrà una partizione per dare spazio a %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Sostituire una partizione</strong><br/>Sostituisce una partizione con %1. - + + 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. + Questo dispositivo di memoria ha %1. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. + + + 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. Questo dispositivo di memoria contenere già un sistema operativo. Come si vuole procedere?<br/>Si potranno comunque rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. - + 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. Questo dispositivo di memoria contenere diversi sistemi operativi. Come si vuole procedere?<br/>Comunque si potranno rivedere e confermare le scelte prima di apportare i cambiamenti al dispositivo. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + No Swap + + + + Reuse Swap + Riutilizza Swap + + + + Swap (no Hibernate) + Swap (senza ibernazione) + + + + Swap (with Hibernate) + Swap (con ibernazione) + + + + Swap to file + Swap su file + ClearMountsJob - + + Successfully unmounted %1. + %1 smontata correttamente. + + + + Successfully disabled swap %1. + Swap %1 disabilitata correttamente. + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Rimuovere i punti di mount per operazioni di partizionamento su %1 - + Clearing mounts for partitioning operations on %1. Rimozione dei punti di mount per le operazioni di partizionamento su %1. - + Cleared all mounts for %1 Rimossi tutti i punti di mount per %1 @@ -657,22 +720,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse ClearTempMountsJob - + Clear all temporary mounts. Rimuovere tutti i punti di mount temporanei. - + Clearing all temporary mounts. Rimozione di tutti i punti di mount temporanei. - - Cannot get list of temporary mounts. - Non è possibile ottenere la lista dei punti di mount temporanei. - - - + Cleared all temporary mounts. Rimossi tutti i punti di mount temporanei. @@ -680,18 +738,18 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse CommandList - - + + Could not run command. Impossibile eseguire il comando. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Il comando viene eseguito nell'ambiente host e richiede il percorso di root ma nessun rootMountPoint (punto di montaggio di root) è definito. - + The command needs to know the user's name, but no username is defined. Il comando richiede il nome utente, nessun nome utente definito. @@ -699,100 +757,235 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Questo computer non soddisfa i requisiti minimi per l'installazione di %1.<br/>L'installazione non può continuare. <a href="#details">Dettagli...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Questo computer non soddisfa i requisiti minimi per installare %1. <br/>L'installazione non può proseguire. <a href="#details">Dettagli...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Questo computer non soddisfa alcuni requisiti raccomandati per l'installazione di %1.<br/>L'installazione può continuare, ma alcune funzionalità potrebbero essere disabilitate. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Questo computer non soddisfa alcuni requisiti consigliati per l'installazione di %1. <br/>L'installazione può proseguire ma alcune funzionalità potrebbero non essere disponibili. - - - - This program will ask you some questions and set up %2 on your computer. - Questo programma chiederà alcune informazioni e configurerà %2 sul computer. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Benvenuto nel programma di installazione Calamares di %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Benvenuto nell'installazione di %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Benvenuti nel programma di installazione Calamares per %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Benvenuto nel programma d'installazione di %1.</h1> - - - + Set keyboard model to %1.<br/> Impostare il modello di tastiera a %1.<br/> - + Set keyboard layout to %1/%2. - Impostare il layout della tastiera a %1%2. + Impostare il layout della tastiera a %1/%2. - + + Set timezone to %1/%2. + Imposta fuso orario a %1/%2. + + + The system language will be set to %1. La lingua di sistema sarà impostata a %1. - + The numbers and dates locale will be set to %1. I numeri e le date locali saranno impostati a %1. - - - Set timezone to %1/%2.<br/> - Imposta il fuso orario a %1%2.<br/> - - - - Network Installation. (Disabled: Incorrect configuration) - Installazione di rete. (Disabilitato: Configurazione scorretta) - - - - Network Installation. (Disabled: Received invalid groups data) - Installazione di rete. (Disabilitata: Ricevuti dati non validi dei gruppi) - - - - Network Installation. (Disabled: internal error) - - + Network Installation. (Disabled: Incorrect configuration) + Installazione di rete. (Disabilitato: Configurazione non valida) + + + + Network Installation. (Disabled: Received invalid groups data) + Installazione di rete. (Disabilitata: Ricevuti dati dei gruppi non validi) + + + + Network Installation. (Disabled: Internal error) + Installazione di rete (disabilitata: errore interno) + + + + Network Installation. (Disabled: No package list) + Installazione di rete (disabilitata: nessun elenco di pacchetti) + + + + Package selection + Selezione del pacchetto + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Installazione di rete. (Disabilitata: impossibile recuperare le liste dei pacchetti, controllare la connessione di rete) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Questo computer non soddisfa i requisiti minimi per la configurazione di %1.<br/>La configurazione non può continuare. <a href="#details">Dettagli...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Questo computer non soddisfa i requisiti minimi per installare %1. <br/>L'installazione non può continuare. <a href="#details">Dettagli...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Questo computer non soddisfa alcuni requisiti raccomandati per la configurazione di %1.<br/>La configurazione può continuare ma alcune funzionalità potrebbero essere disabilitate. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Questo computer non soddisfa alcuni requisiti consigliati per l'installazione di %1.<br/>L'installazione può continuare ma alcune funzionalità potrebbero non essere disponibili. + + + + This program will ask you some questions and set up %2 on your computer. + Questo programma chiederà alcune informazioni e configurerà %2 sul computer. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + Benvenuto nel programma di installazione Calamares di %1 + + + + <h1>Welcome to %1 setup</h1> + Benvenuto nell'installazione di %1 + + + + <h1>Welcome to the Calamares installer for %1</h1> + Benvenuto nel programma di installazione Calamares di %1 + + + + <h1>Welcome to the %1 installer</h1> + Benvenuto nel programma di installazione di %1 + + + + Your username is too long. + Il nome utente è troppo lungo. + + + + '%1' is not allowed as username. + '%1' non è consentito come nome utente. + + + + Your username must start with a lowercase letter or underscore. + Il tuo username deve iniziare con una lettera minuscola o un trattino basso. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Solo lettere minuscole, numeri, trattini e trattini bassi sono permessi. + + + + Your hostname is too short. + Hostname è troppo corto. + + + + Your hostname is too long. + Hostname è troppo lungo. + + + + '%1' is not allowed as hostname. + '%1' non è consentito come nome host. + + + + Only letters, numbers, underscore and hyphen are allowed. + Solo lettere, numeri, trattini e trattini bassi sono permessi. + + + + Your passwords do not match! + Le password non corrispondono! + + + + OK! + OK! + + + + Setup Failed + Installazione fallita + + + + Installation Failed + Installazione non riuscita + + + + The setup of %1 did not complete successfully. + La configurazione di %1 non è stata completata correttamente. + + + + The installation of %1 did not complete successfully. + L'installazione di %1 non è stata completata correttamente. + + + + Setup Complete + Installazione completata + + + + Installation Complete + Installazione completata + + + + The setup of %1 is complete. + L'installazione di %1 è completa + + + + The installation of %1 is complete. + L'installazione di %1 è completata. + + + + Package Selection + Selezione del Pacchetto + + + + Please pick a product from the list. The selected product will be installed. + Si prega di scegliere un prodotto dalla lista. Il prodotto selezionato verrà installato. + + + + Install option: <strong>%1</strong> + Opzione di installazione: <strong>%1</strong> + + + + None + Nessuno + + + + Summary + Riepilogo + + + + This is an overview of what will happen once you start the setup procedure. + Questa è una panoramica di quello che succederà una volta avviata la procedura di configurazione. + + + + This is an overview of what will happen once you start the install procedure. + Una panoramica delle modifiche che saranno effettuate una volta avviata la procedura di installazione. + ContextualProcessJob - + Contextual Processes Job Job dei processi contestuali @@ -800,100 +993,136 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse CreatePartitionDialog - + Create a Partition Creare una partizione - - MiB - MiB - - - - Partition &Type: - &Tipo di partizione: - - - - &Primary - &Primaria - - - - E&xtended - E&stesa - - - - Fi&le System: - Fi&le System: - - - - LVM LV name - Nome LV di LVM - - - - Flags: - Flag: - - - - &Mount Point: - Punto di &mount: - - - + Si&ze: Dimen&sione: - + + MiB + MiB + + + + Partition &Type: + &Tipo di partizione: + + + + Primar&y + Primar&ia + + + + E&xtended + E&stesa + + + + Fi&le System: + Fi&le System: + + + + LVM LV name + Nome LV di LVM + + + + &Mount Point: + Punto di &mount: + + + + Flags: + Flag: + + + + Label for the filesystem + Etichetta per il filesystem + + + + FS Label: + Etichetta FS: + + + En&crypt Cr&iptare - + Logical Logica - + Primary Primaria - + GPT GPT - + Mountpoint already in use. Please select another one. Il punto di mount è già in uso. Sceglierne un altro. + + + Mountpoint must start with a <tt>/</tt>. + Il punto di mount deve iniziare con un <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Crea nuova partizione di %1MiB su %3 (%2) con voci %4. + + + + Create new %1MiB partition on %3 (%2). + Crea nuova partizione di %1MiB su %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - Crea una nuova partizione da %2MiB su %4 (%3) con file system %1 + Crea una nuova partizione da %2MiB su %4 (%3) con file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Crea nuova partizione di <strong>%1MiB</strong> su <strong>%3</strong> (%2) con voci <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Creare nuova partizione di <strong>%1MiB</strong> su <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - Creare nuova partizione di <strong>%2MiB</strong> su <strong>%4</strong> (%3) con file system <strong>%1</strong>. + Crea una nuova partizione di <strong>%2MiB</strong> su <strong>%4</strong> (%3) con file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Creazione della nuova partizione %1 su %2. - + The installer failed to create partition on disk '%1'. Il programma di installazione non è riuscito a creare la partizione sul disco '%1'. @@ -901,27 +1130,27 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse CreatePartitionTableDialog - + Create Partition Table Creare la tabella delle partizioni - + Creating a new partition table will delete all existing data on the disk. La creazione di una nuova tabella delle partizioni cancellerà tutti i dati esistenti sul disco. - + What kind of partition table do you want to create? Che tipo di tabella delle partizioni vuoi creare? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) Tavola delle Partizioni GUID (GPT) @@ -929,22 +1158,22 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse CreatePartitionTableJob - + Create new %1 partition table on %2. Creare una nuova tabella delle partizioni %1 su %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creare una nuova tabella delle partizioni <strong>%1</strong> su <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Creazione della nuova tabella delle partizioni %1 su %2. - + The installer failed to create a partition table on %1. Il programma di installazione non è riuscito a creare una tabella delle partizioni su %1. @@ -952,45 +1181,41 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse CreateUserJob - + Create user %1 Creare l'utente %1 - + Create user <strong>%1</strong>. Creare l'utente <strong>%1</strong> - - Creating user %1. + + Preserving home directory + + + + + + Creating user %1 Creazione utente %1. - - Sudoers dir is not writable. - La cartella sudoers non è scrivibile. + + Configuring user %1 + Configurazione utente %1 - - Cannot create sudoers file for writing. - Impossibile creare il file sudoers in scrittura. - - - - Cannot chmod sudoers file. - Impossibile eseguire chmod sul file sudoers. - - - - Cannot open groups file for reading. - Impossibile aprire il file groups in lettura. + + Setting file permissions + Impostazione permessi file CreateVolumeGroupDialog - + Create Volume Group Crea Gruppo di Volumi @@ -998,41 +1223,41 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse CreateVolumeGroupJob - + Create new volume group named %1. Crea un nuovo gruppo di volumi denominato %1. - + Create new volume group named <strong>%1</strong>. Crea un nuovo gruppo di volumi denominato <strong>%1</strong>. - + Creating new volume group named %1. Creazione del nuovo gruppo di volumi denominato %1. - + The installer failed to create a volume group named '%1'. - Il programma di installazione non è riuscito a creare un gruppo di volumi denominato '%1'. + Il programma d'installazione non è riuscito a creare un gruppo di volumi denominato '%1'. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - Disattiva gruppo di volumi denominato %1. + Disattiva il gruppo di volumi denominato %1. - + Deactivate volume group named <strong>%1</strong>. Disattiva gruppo di volumi denominato <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Il programma di installazione non è riuscito a disattivare il gruppo di volumi denominato %1. @@ -1040,22 +1265,22 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse DeletePartitionJob - + Delete partition %1. Cancellare la partizione %1. - + Delete partition <strong>%1</strong>. Cancellare la partizione <strong>%1</strong>. - + Deleting partition %1. Cancellazione partizione %1. - + The installer failed to delete partition %1. Il programma di installazione non è riuscito a cancellare la partizione %1. @@ -1063,46 +1288,46 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse DeviceInfoWidget - - 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. - Il tipo di <strong>tabella delle partizioni</strong> attualmente presente sul dispositivo di memoria selezionato.<br><br>L'unico modo per cambiare il tipo di tabella delle partizioni è quello di cancellarla e ricrearla da capo, distruggendo tutti i dati sul dispositivo.<br>Il programma di installazione conserverà l'attuale tabella a meno che no si scelga diversamente.<br>Se non si è sicuri, sui sistemi moderni si preferisce GPT. - - - + This device has a <strong>%1</strong> partition table. Questo dispositivo ha una tabella delle partizioni <strong>%1</strong>. - + 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. Questo è un dispositivo <strong>loop</strong>.<br><br>E' uno pseudo-dispositivo senza tabella delle partizioni che rende un file accessibile come block device. Questo tipo di configurazione contiene normalmente solo un singolo filesystem. - + 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. Il programma d'installazione <strong>non riesce a rilevare una tabella delle partizioni</strong> sul dispositivo di memoria selezionato.<br><br>Il dispositivo o non ha una tabella delle partizioni o questa è corrotta, oppure è di tipo sconosciuto.<br>Il programma può creare una nuova tabella delle partizioni, automaticamente o attraverso la sezione del partizionamento manuale. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Questo è il tipo raccomandato di tabella delle partizioni per i sistemi moderni che si avviano da un ambiente di boot <strong>EFI</strong>. - + <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. <br><br>Questo tipo di tabella delle partizioni è consigliabile solo su sistemi più vecchi che si avviano da un ambiente di boot <strong>BIOS</strong>. GPT è raccomandato nella maggior parte degli altri casi.<br><br><strong>Attenzione:</strong> la tabella delle partizioni MBR è uno standar obsoleto dell'era MS-DOS.<br>Solo 4 partizioni <em>primarie</em> possono essere create e di queste 4 una può essere una partizione <em>estesa</em>, che può a sua volta contenere molte partizioni <em>logiche</em>. + + + 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. + Il tipo di <strong>tabella delle partizioni</strong> attualmente presente sul dispositivo di memoria selezionato.<br><br>L'unico modo per cambiare il tipo di tabella delle partizioni è quello di cancellarla e ricrearla da capo, distruggendo tutti i dati sul dispositivo.<br>Il programma di installazione conserverà l'attuale tabella a meno che no si scelga diversamente.<br>Se non si è sicuri, sui sistemi moderni si preferisce GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1111,17 +1336,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Scrittura della configurazione LUKS per Dracut su %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Salto scrittura della configurazione LUKS per Dracut: la partizione "/" non è criptata - + Failed to open %1 Impossibile aprire %1 @@ -1129,7 +1354,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse DummyCppJob - + Dummy C++ Job Processo Dummy C++ @@ -1137,123 +1362,167 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse EditExistingPartitionDialog - + Edit Existing Partition Modifica la partizione esistente - - Content: - Contenuto: + + Con&tent: + Con&tenuto: - + &Keep &Mantenere - + Format Formattare - + Warning: Formatting the partition will erase all existing data. Attenzione: la formattazione della partizione cancellerà tutti i dati! - + &Mount Point: Punto di &Mount: - + Si&ze: Di&mensione: - + MiB MiB - + Fi&le System: Fi&le System: - + Flags: Flag: - - Mountpoint already in use. Please select another one. - Il punto di mount è già in uso. Sceglierne un altro. + + Label for the filesystem + Etichetta per il filesystem + + + + FS Label: + Etichetta FS: EncryptWidget - + Form Modulo - + En&crypt system Cr&iptare il sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Frase di accesso - + Confirm passphrase Confermare frase di accesso - + + Please enter the same passphrase in both boxes. Si prega di immettere la stessa frase di accesso in entrambi i riquadri. + + ErrorDialog + + + Details: + Dettagli: + + + + Would you like to paste the install log to the web? + Si vuole mettere il log di installazione sul web? + + FillGlobalStorageJob - + Set partition information Impostare informazioni partizione - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Installare %1 sulla <strong>nuova</strong> partizione di sistema %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Impostare la <strong>nuova</strong> %2 partizione con punto di mount <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Installare %2 sulla partizione di sistema %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Impostare la partizione %3 <strong>%1</strong> con punto di montaggio <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Installare il boot loader su <strong>%1</strong>. - + Setting up mount points. Impostazione dei punti di mount. @@ -1261,93 +1530,81 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse FinishedPage - + Form Modulo - + &Restart now &Riavviare ora - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Tutto eseguito.</h1><br/>%1 è stato configurato sul tuo computer.<br/>Adesso puoi iniziare a utilizzare il tuo nuovo sistema. - + <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> <html><head/><body><p>Quando questa casella è selezionata, il tuo computer verrà riavviato immediatamente quando clicchi su <span style="font-style:italic;">Finito</span> oppure chiudi il programma di setup.</p></body></html> - + <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. <h1>Tutto fatto.</ h1><br/>%1 è stato installato sul computer.<br/>Ora è possibile riavviare il sistema, o continuare a utilizzare l'ambiente Live di %2 . - + <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> <html><head/><body><p>Quando questa casella è selezionata, il tuo sistema si riavvierà immediatamente quando clicchi su <span style="font-style:italic;">Fatto</span> o chiudi il programma di installazione.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installazione fallita</h1><br/>%1 non è stato installato sul tuo computer.<br/>Il messaggio di errore è: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installazione Fallita</h1><br/>%1 non è stato installato sul tuo computer.<br/>Il messaggio di errore è: %2 - FinishedViewStep + FinishedQmlViewStep - + Finish Termina + + + FinishedViewStep - - Setup Complete - Installazione completata - - - - Installation Complete - Installazione completata - - - - The setup of %1 is complete. - L'installazione di %1 è completa - - - - The installation of %1 is complete. - L'installazione di %1 è completata. + + Finish + Termina FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatta la partitione %1 (file system: %2, dimensione: %3 MiB) su %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatta la partizione <strong>%1</strong> di dimensione <strong>%3MiB </strong> con il file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formattazione della partizione %1 con file system %2. - + The installer failed to format partition %1 on disk '%2'. Il programma di installazione non è riuscito a formattare la partizione %1 sul disco '%2'. @@ -1355,72 +1612,72 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse GeneralRequirements - + has at least %1 GiB available drive space ha almeno %1 GiB di spazio disponibile - + There is not enough drive space. At least %1 GiB is required. Non c'è abbastanza spazio sul disco. E' richiesto almeno %1 GiB - + has at least %1 GiB working memory ha almeno %1 GiB di memoria - + The system does not have enough working memory. At least %1 GiB is required. Il sistema non ha abbastanza memoria. E' richiesto almeno %1 GiB - + is plugged in to a power source è collegato a una presa di alimentazione - + The system is not plugged in to a power source. Il sistema non è collegato a una presa di alimentazione. - + is connected to the Internet è connesso a Internet - + The system is not connected to the Internet. Il sistema non è connesso a internet. - + is running the installer as an administrator (root) sta eseguendo il programma di installazione come amministratore (root) - + The setup program is not running with administrator rights. Il programma di installazione non è stato lanciato con i permessi di amministratore. - + The installer is not running with administrator rights. Il programma di installazione non è stato avviato con i diritti di amministrazione. - + has a screen large enough to show the whole installer ha uno schermo abbastanza grande da mostrare l'intero programma di installazione - + The screen is too small to display the setup program. Lo schermo è troppo piccolo per mostrare il programma di installazione - + The screen is too small to display the installer. Schermo troppo piccolo per mostrare il programma d'installazione. @@ -1428,7 +1685,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse HostInfoJob - + Collecting information about your machine. Raccogliendo informazioni sulla tua macchina. @@ -1436,25 +1693,25 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse IDJob - - + + + - OEM Batch Identifier Codice Batch OEM - + Could not create directories <code>%1</code>. Impossibile creare le cartelle <code>%1</code>. - + Could not open file <code>%1</code>. Impossibile aprire il file <code>%1</code>. - + Could not write to file <code>%1</code>. Impossibile scrivere sul file <code>%1</code>. @@ -1462,7 +1719,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse InitcpioJob - + Creating initramfs with mkinitcpio. Sto creando initramfs con mkinitcpio. @@ -1470,7 +1727,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse InitramfsJob - + Creating initramfs. Sto creando initramfs. @@ -1478,17 +1735,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse InteractiveTerminalPage - + Konsole not installed Konsole non installata - + Please install KDE Konsole and try again! Si prega di installare KDE Konsole e riprovare! - + Executing script: &nbsp;<code>%1</code> Esecuzione script: &nbsp;<code>%1</code> @@ -1496,28 +1753,15 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Impostare il modello di tastiera a %1.<br/> - - - - Set keyboard layout to %1/%2. - Impostare il layout della tastiera a %1%2. - - KeyboardQmlViewStep - + Keyboard Tastiera @@ -1525,7 +1769,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse KeyboardViewStep - + Keyboard Tastiera @@ -1533,65 +1777,88 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse LCLocaleDialog - + System locale setting Impostazioni di localizzazione del sistema - + 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>. Le impostazioni di localizzazione del sistema influenzano la lingua e il set di caratteri per alcuni elementi di interfaccia da linea di comando. <br/>L'impostazione attuale è <strong>%1</strong>. - + &Cancel &Annulla - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Configurazione per lo swap cifrato. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Modulo - + <h1>License Agreement</h1> <h1>Accordo di Licenza</h1> - + I accept the terms and conditions above. Accetto i termini e le condizioni sopra indicati. - + Please review the End User License Agreements (EULAs). Si prega di leggere l'Accordo di Licenza per l'Utente Finale (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. Questa procedura di configurazione installerà software proprietario che è soggetto ai termini di licenza. - + If you do not agree with the terms, the setup procedure cannot continue. Se non accetti i termini, la procedura di configurazione non può continuare. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Questa procedura di configurazione installerà software proprietario sottoposto a termini di licenza, per fornire caratteristiche aggiuntive e migliorare l'esperienza utente. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se non se ne accettano i termini, il software proprietario non verrà installato e al suo posto saranno utilizzate alternative open source. @@ -1599,7 +1866,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse LicenseViewStep - + License Licenza @@ -1607,109 +1874,102 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>da %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver video</strong><br/><font color="Grey">da %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin del browser</strong><br/><font color="Grey">da %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">da %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pacchetto</strong><br/><font color="Grey">da %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">da %2</font> - + File: %1 File: %1 - + + Hide license text + Nascondi il testo della licenza + + + Show the license text Mostra il testo della licenza - + Open license agreement in browser. Apri l'accordo di licenza nel browser. - - - Hide license text - Nascondi il testo della licenza - LocalePage - - The system language will be set to %1. - La lingua di sistema sarà impostata a %1. - - - - The numbers and dates locale will be set to %1. - I numeri e le date locali saranno impostati a %1. - - - + Region: Area: - + Zone: Zona: - - + + &Change... &Cambia... - - - Set timezone to %1/%2.<br/> - Imposta il fuso orario a %1%2.<br/> - LocaleQmlViewStep - + Location Posizione + + LocaleTests + + + Quit + Esci + + LocaleViewStep - + Location Posizione @@ -1717,35 +1977,35 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse LuksBootKeyFileJob - + Configuring LUKS key file. Configurazione in corso del file chiave LUKS. - - + + No partitions are defined. Non è stata specificata alcuna partizione. - - - + + + Encrypted rootfs setup error Errore nella configurazione del rootfs crittato - + Root partition %1 is LUKS but no passphrase has been set. La partizione root %1 è LUKS ma non sono state configurate passphrase. - + Could not create LUKS key file for root partition %1. Impossibile creare il file chiave LUKS per la partizione root %1. - + Could not configure LUKS key file on partition %1. Impossibile configurare il file chiave LUKS per la partizione %1. @@ -1753,124 +2013,138 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse MachineIdJob - + Generate machine-id. Genera machine-id. - + Configuration Error Errore di Configurazione - + No root mount point is set for MachineId. Non è impostato alcun punto di montaggio root per MachineId + + Map + + + Timezone: %1 + Fuso orario: %1 + + + + 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. + Seleziona la tua posizione sulla mappa in modo che il programma di installazione possa suggerirti la localizzazione e le impostazioni del fuso orario. Puoi modificare le impostazioni suggerite nella parte in basso. Trascina la mappa per spostarti e usa i pulsanti +/- oppure la rotella del mouse per ingrandire o rimpicciolire. + + NetInstallViewStep - - + Package selection Selezione del pacchetto - + Office software Software per ufficio - + Office package Pacchetto per ufficio - + Browser software Software navigazione web - + Browser package Pacchetto navigazione web - + Web browser Browser web - + Kernel Kernel - + Services Servizi - + Login Accesso - + Desktop Ambiente desktop - + Applications Applicazioni - + Communication - + Comunicazione - + Development - + Sviluppo - + Office - + Ufficio - + Multimedia - + Multimedia - + Internet - + Internet - + Theming - + Personalizzazione tema - + Gaming - + Giochi - + Utilities - + Utilità NotesQmlViewStep - + Notes Note @@ -1878,17 +2152,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse OEMPage - + Ba&tch: Lo&amp;tto - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Inserire un identificatore per il lotto. Questo verrà salvato nel sistema di destinazione.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configurazione OEM</h1><p>Calamares userà le impostazioni OEM nella configurazione del sistema di destinazione.</p></body></html> @@ -1896,260 +2170,317 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse OEMViewStep - + OEM Configuration Configurazione OEM - + Set the OEM Batch Identifier to <code>%1</code>. Impostare l'Identificatore del Lotto OEM a <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Fuso orario: %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + Zone + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Password troppo corta - + Password is too long Password troppo lunga - + Password is too weak Password troppo debole - + Memory allocation error when setting '%1' Errore di allocazione della memoria quando si imposta '%1' - + Memory allocation error Errore di allocazione di memoria - + The password is the same as the old one La password coincide con la precedente - + The password is a palindrome La password è un palindromo - + The password differs with case changes only La password differisce solo per lettere minuscole e maiuscole - + The password is too similar to the old one La password è troppo simile a quella precedente - + The password contains the user name in some form La password contiene il nome utente in qualche campo - + The password contains words from the real name of the user in some form La password contiene parti del nome utente reale in qualche campo - + The password contains forbidden words in some form La password contiene parole vietate in alcuni campi - - The password contains less than %1 digits - La password contiene meno di %1 cifre - - - + The password contains too few digits La password contiene poche cifre - - The password contains less than %1 uppercase letters - La password contiene meno di %1 lettere maiuscole - - - + The password contains too few uppercase letters La password contiene poche lettere maiuscole - - - The password contains less than %1 lowercase letters - La password contiene meno di %1 lettere minuscole + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters La password contiene poche lettere minuscole - - The password contains less than %1 non-alphanumeric characters - La password contiene meno di %1 caratteri non alfanumerici - - - + The password contains too few non-alphanumeric characters La password contiene pochi caratteri non alfanumerici - - The password is shorter than %1 characters - La password ha meno di %1 caratteri - - - + The password is too short La password è troppo corta - - The password is just rotated old one - La password è solo una rotazione della precedente - - - - The password contains less than %1 character classes - La password contiene meno di %1 classi di caratteri - - - + The password does not contain enough character classes La password non contiene classi di caratteri sufficienti - - The password contains more than %1 same characters consecutively - La password contiene più di %1 caratteri uguali consecutivi - - - + The password contains too many same characters consecutively La password contiene troppi caratteri uguali consecutivi - - The password contains more than %1 characters of the same class consecutively - La password contiene più di %1 caratteri consecutivi della stessa classe - - - + The password contains too many characters of the same class consecutively La password contiene molti caratteri consecutivi della stessa classe - - - The password contains monotonic sequence longer than %1 characters - La password contiene una sequenza monotona più lunga di %1 caratteri + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence La password contiene una sequenza di caratteri monotona troppo lunga - + No password supplied Nessuna password fornita - + Cannot obtain random numbers from the RNG device Impossibile ottenere numeri casuali dal dispositivo RNG - + Password generation failed - required entropy too low for settings Generazione della password fallita - entropia richiesta troppo bassa per le impostazioni - + The password fails the dictionary check - %1 La password non supera il controllo del dizionario - %1 - + The password fails the dictionary check La password non supera il controllo del dizionario - + Unknown setting - %1 Impostazioni sconosciute - %1 - + Unknown setting Impostazione sconosciuta - + Bad integer value of setting - %1 Valore intero non valido per l'impostazione - %1 - + Bad integer value Valore intero non valido - + Setting %1 is not of integer type Impostazione %1 non è di tipo intero - + Setting is not of integer type Impostazione non è di tipo intero - + Setting %1 is not of string type Impostazione %1 non è di tipo stringa - + Setting is not of string type Impostazione non è di tipo stringa - + Opening the configuration file failed Apertura del file di configurazione fallita - + The configuration file is malformed Il file di configurazione non è corretto - + Fatal failure Errore fatale - + Unknown error Errore sconosciuto - + Password is empty Password vuota @@ -2157,40 +2488,48 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PackageChooserPage - + Form Modulo - + Product Name Nome Prodotto - + TextLabel TextLabel - + Long Product Description Descrizione Estesa del Prodotto - + Package Selection Selezione del Pacchetto - + Please pick a product from the list. The selected product will be installed. Si prega di scegliere un prodotto dalla lista. Il prodotto selezionato verrà installato. + + PackageChooserQmlViewStep + + + Packages + Pacchetti + + PackageChooserViewStep - + Packages Pacchetti @@ -2198,12 +2537,12 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PackageModel - + Name Nome - + Description Descrizione @@ -2211,17 +2550,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Page_Keyboard - + Form Modulo - + Keyboard Model: Modello della tastiera: - + Type here to test your keyboard Digitare qui per provare la tastiera @@ -2229,96 +2568,96 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse Page_UserSetup - + Form Modulo - + What is your name? Qual è il tuo nome? - - What name do you want to use to log in? - Quale nome usare per l'autenticazione? - - - - Choose a password to keep your account safe. - Scegliere una password per rendere sicuro il tuo account. - - - - - <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> - <small>Inserire la password due volte per controllare eventuali errori di battitura. Una buona password contiene lettere, numeri e segni di punteggiatura. Deve essere lunga almeno otto caratteri e dovrebbe essere cambiata a intervalli regolari.</small> - - - - What is the name of this computer? - Qual è il nome di questo computer? - - - + Your Full Name Nome Completo - + + What name do you want to use to log in? + Quale nome usare per l'autenticazione? + + + login accesso - + + What is the name of this computer? + Qual è il nome di questo computer? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Questo nome sarà usato se rendi visibile il computer ad altre persone in una rete.</small> - + Computer Name Nome Computer - - + + Choose a password to keep your account safe. + Scegliere una password per rendere sicuro il tuo account. + + + + + <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> + <small>Inserire la password due volte per controllare eventuali errori di battitura. Una buona password contiene lettere, numeri e segni di punteggiatura. Deve essere lunga almeno otto caratteri e dovrebbe essere cambiata a intervalli regolari.</small> + + + + Password Password - - + + Repeat Password Ripetere Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Quando questa casella è selezionata, la robustezza della password viene verificata e non sarà possibile utilizzare password deboli. - + Require strong passwords. È richiesta una password robusta. - + Log in automatically without asking for the password. Accedere automaticamente senza chiedere la password. - + Use the same password for the administrator account. Usare la stessa password per l'account amministratore. - + Choose a password for the administrator account. Scegliere una password per l'account dell'amministratore. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Inserire la password due volte per controllare eventuali errori di battitura.</small> @@ -2326,42 +2665,42 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system Sistema EFI - + Swap Swap - + New partition for %1 Nuova partizione per %1 - + New partition Nuova partizione - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2709,39 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PartitionModel - - + + Free Space Spazio disponibile - - + + New partition Nuova partizione - + Name Nome - + File System File System - + + File System Label + + + + Mount Point Punto di mount - + Size Dimensione @@ -2405,77 +2749,77 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PartitionPage - + Form Modulo - + Storage de&vice: Dispositivo di me&moria: - + &Revert All Changes &Annulla tutte le modifiche - + New Partition &Table Nuova &Tabella delle partizioni - + Cre&ate Crea - + &Edit &Modificare - + &Delete &Cancellare - + New Volume Group Nuovo Gruppo di Volumi - + Resize Volume Group RIdimensiona Gruppo di Volumi - + Deactivate Volume Group Disattiva Gruppo di Volumi - + Remove Volume Group Rimuovi Gruppo di Volumi - + I&nstall boot loader on: I&nstalla boot loader su: - + Are you sure you want to create a new partition table on %1? Si è sicuri di voler creare una nuova tabella delle partizioni su %1? - + Can not create new partition Impossibile creare nuova partizione - + 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. La tabella delle partizioni su %1 contiene già %2 partizioni primarie, non se ne possono aggiungere altre. Rimuovere una partizione primaria e aggiungere una partizione estesa invece. @@ -2483,117 +2827,107 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PartitionViewStep - + Gathering system information... Raccolta delle informazioni di sistema... - + Partitions Partizioni - - Install %1 <strong>alongside</strong> another operating system. - Installare %1 <strong>a fianco</strong> di un altro sistema operativo. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Cancellare</strong> il disco e installare %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Sostituire</strong> una partizione con %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Partizionamento <strong>manuale</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Installare %1 <strong>a fianco</strong> di un altro sistema operativo sul disco<strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Cancellare</strong> il disco <strong>%2</strong> (%3) e installa %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Sostituire</strong> una partizione sul disco <strong>%2</strong> (%3) con %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Partizionamento <strong>manuale</strong> sul disco <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disco <strong>%1</strong> (%2) - - - + Current: Corrente: - + After: Dopo: - + No EFI system partition configured Nessuna partizione EFI di sistema è configurata - - 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>esp</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. - Una partizione EFI di sistema è necessaria per avviare %1.<br/><br/>Per configurare una partizione EFI di sistema, tornare indietro e selezionare o creare un filesystem FAT32 con il flag <strong>esp</strong> abilitato e un punto di mount <strong>%2</strong>.<br/><br/>Si può continuare senza configurare una partizione EFI ma il sistema rischia di non avviarsi. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Il flag della partizione EFI di sistema non è impostato. + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Una partizione EFI di sistema è necessaria per avviare %1.<br/><br/>Una partizione è stata configurata con punto di mount <strong>%2</strong> ma il relativo flag <strong>esp</strong> non è impostato.<br/>Per impostare il flag, tornare indietro e modificare la partizione.<br/><br/>Si può continuare senza impostare il flag ma il sistema rischia di non avviarsi. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + Opzione per usare GPT su BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted Partizione di avvio non criptata - + 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. E' stata configurata una partizione di avvio non criptata assieme ad una partizione root criptata. <br/><br/>Ci sono problemi di sicurezza con questo tipo di configurazione perchè dei file di sistema importanti sono tenuti su una partizione non criptata.<br/>Si può continuare se lo si desidera ma dopo ci sarà lo sblocco del file system, durante l'avvio del sistema.<br/>Per criptare la partizione di avvio, tornare indietro e ricrearla, selezionando <strong>Criptare</strong> nella finestra di creazione della partizione. - + has at least one disk device available. ha almeno un'unità disco disponibile. - + There are no partitions to install on. Non ci sono partizioni su cui installare. @@ -2601,13 +2935,13 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PlasmaLnfJob - + Plasma Look-and-Feel Job Job di Plasma Look-and-Feel - - + + Could not select KDE Plasma Look-and-Feel package Impossibile selezionare il pacchetto di KDE Plasma Look-and-Feel @@ -2615,17 +2949,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PlasmaLnfPage - + Form Modulo - + 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. Scegliere il tema per l'ambiente desktop KDE Plasma. Si può anche saltare questa scelta e configurare il tema dopo aver installato il sistema. Cliccando su selezione del tema, ne sarà mostrata un'anteprima. - + 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. Scegliere il tema per il desktop KDE Plasma. Si può anche saltare questa scelta e configurare il tema dopo aver installato il sistema. Cliccando su selezione del tema, ne sarà mostrata un'anteprima dal vivo. @@ -2633,7 +2967,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2641,17 +2975,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse PreserveFiles - + Saving files for later ... Salvataggio dei file per dopo ... - + No files configured to save for later. Nessun file configurato per dopo. - + Not all of the configured files could be preserved. Non tutti i file configurati possono essere preservati. @@ -2659,13 +2993,13 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno perse ProcessResult - + There was no output from the command. Non c'era output dal comando. - + Output: @@ -2674,53 +3008,53 @@ Output: - + External command crashed. Il comando esterno si è arrestato. - + Command <i>%1</i> crashed. Il comando <i>%1</i> si è arrestato. - + External command failed to start. Il comando esterno non si è avviato. - + Command <i>%1</i> failed to start. Il comando %1 non si è avviato. - + Internal error when starting command. Errore interno all'avvio del comando. - + Bad parameters for process job call. Parametri errati per elaborare la chiamata al job. - + External command failed to finish. Il comando esterno non è stato portato a termine. - + Command <i>%1</i> failed to finish in %2 seconds. Il comando <i>%1</i> non è stato portato a termine in %2 secondi. - + External command finished with errors. Il comando esterno è terminato con errori. - + Command <i>%1</i> finished with exit code %2. Il comando <i>%1</i> è terminato con codice di uscita %2. @@ -2728,89 +3062,94 @@ Output: QObject - - Default Keyboard Model - Modello tastiera di default - - - - - Default - Default - - - - unknown - sconosciuto - - - - extended - estesa - - - - unformatted - non formattata - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Spazio non partizionato o tabella delle partizioni sconosciuta - - - - (no mount point) - (nessun mount point) - - - - Requirements checking for module <i>%1</i> is complete. - Il controllo dei requisiti per il modulo <i>%1</i> è completo. - - - + %1 (%2) %1 (%2) - - No product - Nessun prodotto + + unknown + sconosciuto - - No description provided. - Non è stata fornita alcuna descrizione. + + extended + estesa - - - - + + unformatted + non formattata + + + + swap + swap + + + + + Default + Default + + + + + + File not found File non trovato - + Path <pre>%1</pre> must be an absolute path. Il percorso <pre>%1</pre> deve essere un percorso assoluto. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. Impossibile creare un nuovo file random <pre>%1</pre>. + + + No product + Nessun prodotto + + + + No description provided. + Non è stata fornita alcuna descrizione. + + + + (no mount point) + (nessun mount point) + + + + Unpartitioned space or unknown partition table + Spazio non partizionato o tabella delle partizioni sconosciuta + + + + Recommended + + + <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> + Questo computer non soddisfa alcuni requisiti raccomandati per poter installare %1. L'installazione può continuare, ma alcune funzionalità potrebbero essere disabilitate. + RemoveUserJob - + Remove live user from target system Rimuovi l'utente live dal sistema di destinazione @@ -2818,18 +3157,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Rimuovi Gruppo di Volumi denominato %1. - + Remove Volume Group named <strong>%1</strong>. Rimuovi gruppo di volumi denominato <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Il programma di installazione non è riuscito a rimuovere il gruppo di volumi denominato '%1'. @@ -2837,143 +3176,158 @@ Output: ReplaceWidget - + Form Modulo - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selezionare dove installare %1.<br/><font color="red">Attenzione: </font>questo eliminerà tutti i file dalla partizione selezionata. - + The selected item does not appear to be a valid partition. L'elemento selezionato non sembra essere una partizione valida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 non può essere installato su spazio non partizionato. Si prega di selezionare una partizione esistente. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 non può essere installato su una partizione estesa. Si prega di selezionare una partizione primaria o logica esistente. - + %1 cannot be installed on this partition. %1 non può essere installato su questa partizione. - + Data partition (%1) Partizione dati (%1) - + Unknown system partition (%1) Partizione di sistema sconosciuta (%1) - + %1 system partition (%2) %1 partizione di sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>La partizione %1 è troppo piccola per %2. Si prega di selezionare una partizione con capacità di almeno %3 GiB. - + <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. <strong>%2</strong><br/><br/>Nessuna partizione EFI di sistema rilevata. Si prega di tornare indietro e usare il partizionamento manuale per configurare %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 sarà installato su %2.<br/><font color="red">Attenzione: </font>tutti i dati sulla partizione %2 saranno persi. - + The EFI system partition at %1 will be used for starting %2. La partizione EFI di sistema a %1 sarà usata per avviare %2. - + EFI system partition: Partizione EFI di sistema: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + Questo computer non soddisfa i requisiti minimi per poter installare %1. L'installazione non può continuare. + + + + <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> + Questo computer non soddisfa alcuni requisiti raccomandati per poter installare %1. L'installazione può continuare, ma alcune funzionalità potrebbero essere disabilitate. + + ResizeFSJob - + Resize Filesystem Job Operazione di ridimensionamento del Filesystem - + Invalid configuration Configurazione non valida - + The file-system resize job has an invalid configuration and will not run. L'operazione di ridimensionamento del file-system ha una configurazione non valida e non verrà effettuata. - + KPMCore not Available KPMCore non Disponibile - + Calamares cannot start KPMCore for the file-system resize job. Calamares non riesce ad avviare KPMCore per ridimensionare il file-system. - - - - - + + + + + Resize Failed Ridimensionamento fallito. - + The filesystem %1 could not be found in this system, and cannot be resized. Il filesystem %1 non è stato trovato su questo sistema, e non può essere ridimensionato. - + The device %1 could not be found in this system, and cannot be resized. Il dispositivo %1 non è stato trovato su questo sistema, e non può essere ridimensionato. - - + + The filesystem %1 cannot be resized. Il filesystem %1 non può essere ridimensionato. - - + + The device %1 cannot be resized. Il dispositivo %1 non può essere ridimensionato. - + The filesystem %1 must be resized, but cannot. Il filesystem %1 deve essere ridimensionato, ma non è possibile farlo. - + The device %1 must be resized, but cannot Il dispositivo %1 deve essere ridimensionato, non è possibile farlo @@ -2981,22 +3335,22 @@ Output: ResizePartitionJob - + Resize partition %1. Ridimensionare la partizione %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ridimensionare la partizione <strong>%1</strong> da <strong>%2MiB</strong> a <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Sto ridimensionando la partizione %1 di dimensione %2MiB a %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Il programma di installazione non è riuscito a ridimensionare la partizione %1 sul disco '%2'. @@ -3004,7 +3358,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group RIdimensiona Gruppo di Volumi @@ -3012,18 +3366,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Ridimensiona il gruppo di volumi con nome %1 da %2 a %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ridimensiona il gruppo di volumi con nome <strong>%1</strong> da <strong>%2</strong> a <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Il programma di installazione non è riuscito a ridimensionare un volume di gruppo di nome '%1' @@ -3031,53 +3385,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Per ottenere prestazioni ottimali, assicurarsi che questo computer: - + System requirements Requisiti di sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Questo computer non soddisfa i requisiti minimi per l'installazione di %1.<br/>L'installazione non può continuare. <a href="#details">Dettagli...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Questo computer non soddisfa i requisiti minimi per installare %1. <br/>L'installazione non può proseguire. <a href="#details">Dettagli...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Questo computer non soddisfa alcuni requisiti raccomandati per l'installazione di %1.<br/>L'installazione può continuare, ma alcune funzionalità potrebbero essere disabilitate. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Questo computer non soddisfa alcuni requisiti consigliati per l'installazione di %1. <br/>L'installazione può proseguire ma alcune funzionalità potrebbero non essere disponibili. - - - - This program will ask you some questions and set up %2 on your computer. - Questo programma chiederà alcune informazioni e configurerà %2 sul computer. - - ScanningDialog - + Scanning storage devices... Rilevamento dei dispositivi di memoria... - + Partitioning Partizionamento @@ -3085,29 +3411,29 @@ Output: SetHostNameJob - + Set hostname %1 Impostare hostname %1 - + Set hostname <strong>%1</strong>. Impostare hostname <strong>%1</strong>. - + Setting hostname %1. Impostare hostname %1. + - Internal Error Errore interno - - + + Cannot write hostname to target system Impossibile scrivere l'hostname nel sistema di destinazione @@ -3115,29 +3441,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Imposta il modello di tastiera a %1, con layout %2-%3 - + Failed to write keyboard configuration for the virtual console. Impossibile scrivere la configurazione della tastiera per la console virtuale. - - - + + + Failed to write to %1 Impossibile scrivere su %1 - + Failed to write keyboard configuration for X11. Impossibile scrivere la configurazione della tastiera per X11. - + Failed to write keyboard configuration to existing /etc/default directory. Impossibile scrivere la configurazione della tastiera nella cartella /etc/default. @@ -3145,82 +3471,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. Impostare i flag sulla partizione: %1. - + Set flags on %1MiB %2 partition. Impostare le flag sulla partizione %2 da %1MiB. - + Set flags on new partition. Impostare i flag sulla nuova partizione. - + Clear flags on partition <strong>%1</strong>. Rimuovere i flag sulla partizione <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Rimuovere le flag dalla partizione <strong>%2</strong> da %1MiB. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Flag della partizione <strong>%2</strong> da %1MiB impostate come <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Rimozione delle flag sulla partizione <strong>%2</strong> da %1MiB in corso. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Impostazione delle flag <strong>%3</strong> sulla partizione <strong>%2</strong> da %1MiB in corso. - - - + Clear flags on new partition. Rimuovere i flag dalla nuova partizione. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Flag di partizione <strong>%1</strong> come <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Flag della partizione <strong>%2</strong> da %1MiB impostate come <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Flag della nuova partizione come <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Rimozione dei flag sulla partizione <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Rimozione delle flag sulla partizione <strong>%2</strong> da %1MiB in corso. + + + Clearing flags on new partition. Rimozione dei flag dalla nuova partizione. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Impostazione dei flag <strong>%2</strong> sulla partizione <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Impostazione delle flag <strong>%3</strong> sulla partizione <strong>%2</strong> da %1MiB in corso. + + + Setting flags <strong>%1</strong> on new partition. Impostazione dei flag <strong>%1</strong> sulla nuova partizione. - + The installer failed to set flags on partition %1. Impossibile impostare i flag sulla partizione %1. @@ -3228,42 +3554,42 @@ Output: SetPasswordJob - + Set password for user %1 Impostare la password per l'utente %1 - + Setting password for user %1. Impostare la password per l'utente %1. - + Bad destination system path. Percorso di destinazione del sistema errato. - + rootMountPoint is %1 punto di mount per root è %1 - + Cannot disable root account. Impossibile disabilitare l'account di root. - + passwd terminated with error code %1. passwd è terminato con codice di errore %1. - + Cannot set password for user %1. Impossibile impostare la password per l'utente %1. - + usermod terminated with error code %1. usermod si è chiuso con codice di errore %1. @@ -3271,45 +3597,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Impostare il fuso orario su %1%2 - + Cannot access selected timezone path. Impossibile accedere al percorso della timezone selezionata. - + Bad path: %1 Percorso errato: %1 - + Cannot set timezone. Impossibile impostare il fuso orario. - + Link creation failed, target: %1; link name: %2 Impossibile creare il link, destinazione: %1; nome del link: %2 - + Cannot set timezone, Impossibile impostare il fuso orario, - + Cannot open /etc/timezone for writing Impossibile aprire il file /etc/timezone in scrittura + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Impossibile eseguire chmod sul file sudoers. + + + + Cannot create sudoers file for writing. + Impossibile creare il file sudoers in scrittura. + + ShellProcessJob - + Shell Processes Job Job dei processi della shell @@ -3317,81 +3680,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Questa è una panoramica di quello che succederà una volta avviata la procedura di configurazione. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Una panoramica delle modifiche che saranno effettuate una volta avviata la procedura di installazione. + + &Yes + &Si - - - SummaryViewStep - - Summary - Riepilogo + + &No + &No + + + + &Cancel + &Annulla + + + + &Close + &Chiudi TrackingInstallJob - + Installation feedback Valutazione dell'installazione - + Sending installation feedback. Invio della valutazione dell'installazione. - + Internal error in install-tracking. Errore interno in install-tracking. - + HTTP request timed out. La richiesta HTTP è scaduta. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Riscontro dell'utente di KDE + + + + Configuring KDE user feedback. + Sto configurando il riscontro dell'utente di KDE + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Valutazione automatica - + Configuring machine feedback. Configurazione in corso della valutazione automatica. - - + + Error in machine feedback configuration. Errore nella configurazione della valutazione automatica. - + Could not configure machine feedback correctly, script error %1. Non è stato possibile configurare correttamente la valutazione automatica, errore dello script %1. - + Could not configure machine feedback correctly, Calamares error %1. Non è stato possibile configurare correttamente la valutazione automatica, errore di Calamares %1. @@ -3399,106 +3798,97 @@ Output: TrackingPage - + Form Modulo - + Placeholder Segnaposto - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Selezionando questo, non verrà inviata <span style=" font-weight:600;">alcuna informazione</span> relativa alla propria installazione.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Cliccare qui per maggiori informazioni sulla valutazione degli utenti</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Il tracciamento dell'installazione aiuta %1 a capire quanti utenti vengono serviti, su quale hardware si installa %1 e (con le ultime due opzioni sotto), a ricevere continue informazioni sulle applicazioni preferite. Per vedere cosa verrà inviato, cliccare sull'icona di aiuto accanto ad ogni area. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Selezionando questa opzione saranno inviate informazioni relative all'installazione e all'hardware. I dati saranno <b>inviati solo una volta</b> al termine dell'installazione. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Selezionando questa opzione saranno inviate <b>periodicamente</b> informazioni sull'installazione, l'hardware e le applicazioni, a %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Selezionando questa opzione verranno inviate <b>regolarmente</b> informazioni sull'installazione, l'hardware, le applicazioni e i modi di utilizzo, a %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Valutazione + + UmountJob + + + Unmount file systems. + Smonta i file system. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo la configurazione.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se più di una persona utilizzerà questo computer, puoi creare ulteriori account dopo l'installazione.</small> + + + UsersQmlViewStep - - Your username is too long. - Il nome utente è troppo lungo. - - - - Your username must start with a lowercase letter or underscore. - Il tuo username deve iniziare con una lettera minuscola o un trattino basso. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Solo lettere minuscole, numeri, trattini e trattini bassi sono permessi. - - - - Only letters, numbers, underscore and hyphen are allowed. - Solo lettere, numeri, trattini e trattini bassi sono permessi. - - - - Your hostname is too short. - Hostname è troppo corto. - - - - Your hostname is too long. - Hostname è troppo lungo. - - - - Your passwords do not match! - Le password non corrispondono! + + Users + Utenti UsersViewStep - + Users Utenti @@ -3506,65 +3896,67 @@ Output: VariantModel - + Key + Column header for key/value Chiave - + Value + Column header for key/value Valore VolumeGroupBaseDialog - + Create Volume Group Crea Gruppo di Volumi - + List of Physical Volumes Lista dei volumi fisici - + Volume Group Name: Nome Volume Group: - + Volume Group Type: Tipo Volume Group: - + Physical Extent Size: Dimensione fisica dell'estensione: - + MiB MiB - + Total Size: Dimensione totale: - + Used Size: Dimensione utilizzata: - + Total Sectors: Totale Settori: - + Quantity of LVs: Numero di LV: @@ -3572,106 +3964,106 @@ Output: WelcomePage - + Form Modulo - - + + Select application and system language Selezionare lingua per l'applicazione e il sistema + &About + &Informazioni su + + + Open donations website Apri il sito web per le donazioni - + &Donate &Donazioni - + Open help and support website Apri il sito web per l'aiuto ed il supporto + &Support + &Supporto + + + Open issues and bug-tracking website Apri il sito per la gestione di problemi e bug - Open release notes website - Apri il sito web delle note di rilascio - - - - &Release notes - &Note di rilascio - - - &Known issues &Problemi conosciuti - - &Support - &Supporto + + Open release notes website + Apri il sito web delle note di rilascio - - &About - &Informazioni su + + &Release notes + &Note di rilascio - - <h1>Welcome to the %1 installer.</h1> - <h1>Benvenuto nel programma d'installazione di %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Benvenuti nel programma di installazione Calamares per %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Benvenuto nel programma di installazione Calamares di %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Benvenuto nell'installazione di %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Benvenuti nel programma di installazione Calamares per %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Benvenuto nel programma d'installazione di %1.</h1> + + + + %1 support + supporto %1 + + + About %1 setup Informazioni sul sistema di configurazione %1 - + About %1 installer Informazioni sul programma di installazione %1 - + <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. - - - - - %1 support - supporto %1 + <h1>%1</h1><br/><strong>%2<br/>per %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/>Grazie al <a href="https://calamares.io/team/">Team di Calamares </a> ed al <a href="https://www.transifex.com/calamares/calamares/">team dei traduttori di Calamares</a>.<br/><br/>Lo sviluppo di <a href="https://calamares.io/">Calamares</a> è sponsorizzato da <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Benvenuti @@ -3679,84 +4071,201 @@ Output: WelcomeViewStep - + Welcome Benvenuti + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Errore di Configurazione + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + Indietro + + + + calamares-sidebar + + + Show debug information + Mostra le informazioni di debug + + + + finishedq + + + Installation Completed + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + Indietro + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modello della tastiera: - - Refresh - - - - - + Layouts - + Schemi - - - Keyboard Layout - + + Type here to test your keyboard + Digitare qui per provare la tastiera - - Models - - - - + Variants - + Varianti + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3764,34 +4273,261 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Questo è un file QML di esempio, che mostra le opzioni in RichText con contenuto scorrevole</p> + + <p>QML con RichText può utilizzare tag HTML, il contenuto scorrevole è utile per i touchscreen.</p> + + <p><b>Questo è un testo in grassetto</b></p> + <p><i>Questo è un testo in corsivo</i></p> + <p><u>Questo è un testo sottolineato</u></p> + <p><center>Questo testo sarà allineato al centro.</center></p> + <p><s>Questo è un testo barrato</s></p> + + <p>Esempio di codice: + <code>ls -l /home</code></p> + + <p><b>Liste:</b></p> + <ul> + <li>Sistemi con CPU Intel</li> + <li>Sistemi con CPU AMD</li> + </ul> + + <p>La barra di scorrimento verticale è regolabile, la larghezza corrente è impostata a 10.</p> + + + + Back + Indietro + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Qual è il tuo nome? + + + + Your Full Name + Nome Completo + + + + What name do you want to use to log in? + Quale nome usare per l'autenticazione? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Solo lettere minuscole, numeri, trattini e trattini bassi sono permessi. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Qual è il nome di questo computer? + + + + Computer Name + Nome Computer + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Scegliere una password per rendere sicuro il tuo account. + + + + Password + Password + + + + Repeat Password + Ripetere Password + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Quando questa casella è selezionata, la robustezza della password viene verificata e non sarà possibile utilizzare password deboli. + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Usare la stessa password per l'account amministratore. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + <h3>Benvenuti al programma d'installazione %1 <quote>%2</quote></h3> +<p> + + + About Informazioni su - + Support Supporto - + Known issues Problemi conosciuti - + Release notes Note di rilascio - + Donate Donazioni diff --git a/lang/calamares_uz.ts b/lang/calamares_ja-Hira.ts similarity index 72% rename from lang/calamares_uz.ts rename to lang/calamares_ja-Hira.ts index d7559589a..2798da7fa 100644 --- a/lang/calamares_uz.ts +++ b/lang/calamares_ja-Hira.ts @@ -1,20 +1,28 @@ - + + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,39 +238,44 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). - + (%n second(s)) - + System-requirements checking is complete. @@ -250,244 +283,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -495,157 +519,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -653,22 +717,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -676,18 +735,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -695,100 +754,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -796,100 +990,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -897,27 +1127,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -925,22 +1155,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -948,45 +1178,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -994,22 +1220,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1017,18 +1243,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1036,22 +1262,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1059,46 +1285,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1107,17 +1333,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1125,7 +1351,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1133,123 +1359,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1257,93 +1527,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1351,72 +1609,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1424,7 +1682,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1432,25 +1690,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1458,7 +1716,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1466,7 +1724,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1474,17 +1732,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1492,28 +1750,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1521,7 +1766,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1529,65 +1774,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1595,7 +1863,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1603,109 +1871,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1713,35 +1974,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1749,116 +2010,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1866,7 +2141,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1874,17 +2149,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1892,260 +2167,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + The password is shorter than %n characters + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + The password contains more than %n same characters consecutively + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2153,40 +2476,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2194,12 +2525,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2207,17 +2538,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2225,96 +2556,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2322,42 +2653,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2366,34 +2697,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2401,77 +2737,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2479,117 +2815,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2597,13 +2923,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2611,17 +2937,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2629,7 +2955,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2637,17 +2963,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2655,65 +2981,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2721,89 +3047,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2811,18 +3142,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2830,143 +3161,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2974,22 +3320,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2997,7 +3343,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3005,18 +3351,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3024,53 +3370,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3078,29 +3396,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3108,29 +3426,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3138,82 +3456,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3221,42 +3539,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3264,45 +3582,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3310,81 +3665,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3392,106 +3783,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3499,65 +3881,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3565,106 +3949,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3672,31 +4056,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3704,86 +4214,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_ja.ts b/lang/calamares_ja.ts index a9c836da8..1926116e6 100644 --- a/lang/calamares_ja.ts +++ b/lang/calamares_ja.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + 自動マウント設定を管理する + + BootInfoWidget - + 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. このシステムの <strong>ブート環境。</strong><br><br>古いx86システムは<strong>BIOS</strong>のみサポートしています。<br>最近のシステムは通常<strong>EFI</strong>を使用しますが、互換モードが起動できる場合はBIOSが現れる場合もあります。 - + 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. - このシステムは<strong>EFI</strong> ブート環境で起動しました。<br><br>EFI環境からの起動について設定するためには、<strong>EFI システムパーティション</strong>に <strong>GRUB</strong> あるいは <strong>systemd-boot</strong> といったブートローダーアプリケーションを配置しなければなりません。手動によるパーティショニングを選択する場合、EFI システムパーティションを選択あるいは作成しなければなりません。そうでない場合は、この操作は自動的に行われます。 + このシステムは<strong>EFI</strong> ブート環境で起動しました。<br><br>EFI環境からの起動を設定するには、<strong>EFI システムパーティション</strong>に <strong>GRUB</strong> や <strong>systemd-boot</strong> などのブートローダーアプリケーションを配置する必要があります。手動パーティショニングを選択しなければ、これは自動的に行われます。手動パーティショニングを選択する場合は、選択するか、自分で作成する必要があります。 - + 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. - このシステムは <strong>BIOS</strong> ブート環境で起動しました。<br><br> BIOS環境からの起動について設定するためには、パーティションの開始位置あるいはパーティションテーブルの開始位置の近く (推奨) にある<strong>マスターブートレコード</strong>に <strong>GRUB</strong> のようなブートローダーをインストールしなければなりません。手動によるパーティショニングを選択する場合はユーザー自身で設定しなければなりません。そうでない場合は、この操作は自動的に行われます。 + このシステムは <strong>BIOS</strong> ブート環境で起動されました。<br><br>BIOS 環境からの起動を設定するため、このインストーラーはパーティションの先頭またはパーティションテーブルの先頭近くの<strong>マスターブートレコード</strong>に、<strong>GRUB</strong> などのブートローダーをインストールする必要があります(推奨)。手動パーティションニングを選択しない限り、これは自動的に行われます。手動パーティションニングを選択した場合は、自分で設定する必要があります。 BootLoaderModel - + Master Boot Record of %1 %1 のマスターブートレコード - + Boot Partition ブートパーティション - + System Partition システムパーティション - + Do not install a boot loader ブートローダーをインストールしません - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page 空白のページ @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage グローバルストレージ - + JobQueue ジョブキュー - + Modules モジュール - + Type: Type: - - + + none なし - + Interface: インターフェース: - - Tools - ツール + + Crashes Calamares, so that Dr. Konqui can look at it. + Calamares をクラッシュさせ、Dr. Konqui で見られるようにする。 - + + Reloads the stylesheet from the branding directory. + ブランディングディレクトリからスタイルシートをリロードする。 + + + + Uploads the session log to the configured pastebin. + 設定されたペーストビンにセッションログをアップロードする。 + + + + Send Session Log + セッションログを送信 + + + Reload Stylesheet スタイルシートを再読み込む - + + Displays the tree of widget names in the log (for stylesheet debugging). + ログにウィジェット名のツリーを表示する(スタイルシートのデバッグ用)。 + + + Widget Tree ウィジェットツリー - + Debug information デバッグ情報 @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up セットアップ - + Install インストール @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) ジョブに失敗 (%1) - + Programmed job failure was explicitly requested. 要求されたジョブは失敗しました。 @@ -143,7 +171,7 @@ Calamares::JobThread - + Done 完了 @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) ジョブの例 (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. ターゲットシステムでコマンド '%1' を実行。 - + Run command '%1'. コマンド '%1' を実行。 - + Running command %1 %2 コマンド %1 %2 を実行しています @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 操作を実行しています。 - + Bad working directory path 不正なワーキングディレクトリパス - + Working directory %1 for python job %2 is not readable. - python ジョブ %2 において作業ディレクトリ %1 が読み込めません。 + python ジョブ %2 の作業ディレクトリ %1 が読み取れません。 - + Bad main script file 不正なメインスクリプトファイル - + Main script file %1 for python job %2 is not readable. python ジョブ %2 におけるメインスクリプトファイル %1 が読み込めません。 - + Boost.Python error in job "%1". ジョブ "%1" での Boost.Python エラー。 @@ -210,39 +238,44 @@ Calamares::QmlViewStep - + Loading ... ロードしています... - + QML Step <i>%1</i>. QML ステップ <i>%1</i>。 - + Loading failed. ロードが失敗しました。 Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + モジュール <i>%1</i> に必要なパッケージの確認が完了しました。 + - + Waiting for %n module(s). %n 個のモジュールを待機しています。 - + (%n second(s)) (%n 秒(s)) - + System-requirements checking is complete. 要求されるシステムの確認を終了しました。 @@ -250,247 +283,241 @@ Calamares::ViewManager - - &Back - 戻る (&B) - - - - &Next - 次へ (&N) - - - - &Cancel - 中止 (&C) - - - - Cancel setup without changing the system. - システムを変更することなくセットアップを中断します。 - - - - Cancel installation without changing the system. - システムを変更しないでインストールを中止します。 - - - + Setup Failed セットアップに失敗しました。 - - Would you like to paste the install log to the web? - インストールログをWebに貼り付けますか? + + Installation Failed + インストールに失敗 - + + Error + エラー + + + + &Yes + はい (&Y) + + + + &No + いいえ (&N) + + + + &Close + 閉じる (&C) + + + Install Log Paste URL インストールログを貼り付けるURL - + The upload was unsuccessful. No web-paste was done. アップロードは失敗しました。 ウェブへの貼り付けは行われませんでした。 - + + Install log posted to + +%1 + +Link copied to clipboard + インストールログをこちらに送信しました + +%1 + +クリップボードにリンクをコピーしました + + + Calamares Initialization Failed Calamares によるインストールに失敗しました。 - + %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. %1 をインストールできません。Calamares はすべてのモジュールをロードすることをできませんでした。これは、Calamares のこのディストリビューションでの使用法による問題です。 - + <br/>The following modules could not be loaded: <br/>以下のモジュールがロードできませんでした。: - + + Continue with setup? + セットアップを続行しますか? + + + Continue with installation? インストールを続行しますか? - + 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> %1 のセットアッププログラムは %2 のセットアップのためディスクの内容を変更します。<br/><strong>これらの変更は取り消しできません。</strong> - + + 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> + %1 インストーラーは %2 をインストールするためディスクの内容を変更しようとしています。<br/><strong>これらの変更は取り消せません。</strong> + + + &Set up now セットアップしています (&S) - + + &Install now + 今すぐインストール (&I) + + + + Go &back + 戻る (&B) + + + &Set up セットアップ (&S) - + &Install インストール (&I) - + Setup is complete. Close the setup program. セットアップが完了しました。プログラムを閉じます。 - + + The installation is complete. Close the installer. + インストールが完了しました。インストーラーを閉じます。 + + + + Cancel setup without changing the system. + システムを変更することなくセットアップを中断します。 + + + + Cancel installation without changing the system. + システムを変更しないでインストールを中止します。 + + + + &Next + 次へ (&N) + + + + &Back + 戻る (&B) + + + + &Done + 実行 (&D) + + + + &Cancel + 中止 (&C) + + + Cancel setup? セットアップを中止しますか? - + Cancel installation? インストールを中止しますか? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 本当に現在のセットアップのプロセスを中止しますか? すべての変更が取り消されます。 - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 本当に現在の作業を中止しますか? すべての変更が取り消されます。 - - - - &Yes - はい (&Y) - - - - - &No - いいえ (&N) - - - - &Close - 閉じる (&C) - - - - Continue with setup? - セットアップを続行しますか? - - - - 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> - %1 インストーラーは %2 をインストールするためディスクの内容を変更しようとしています。<br/><strong>これらの変更は取り消せません。</strong> - - - - &Install now - 今すぐインストール (&I) - - - - Go &back - 戻る (&B) - - - - &Done - 実行 (&D) - - - - The installation is complete. Close the installer. - インストールが完了しました。インストーラーを閉じます。 - - - - Error - エラー - - - - Installation Failed - インストールに失敗 - CalamaresPython::Helper - + Unknown exception type 不明な例外型 - + unparseable Python error 解析不能なPythonエラー - + unparseable Python traceback 解析不能な Python トレースバック - + Unfetchable Python error. 取得不能なPythonエラー。 - - CalamaresUtils - - - Install log posted to: -%1 - インストールログの投稿先: -%1 - - CalamaresWindow - - &Back - 戻る (&B) - - - - &Next - 次へ (&N) - - - - &Cancel - 中止 (&C) - - - + %1 Setup Program %1 セットアッププログラム - + %1 Installer %1 インストーラー + + + ChangeFilesystemLabelJob - - Show debug information - デバッグ情報を表示 + + Set filesystem label on %1. + ファイルシステムのラベルを %1 に設定する。 + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + ファイルシステムのラベル <strong>%1</strong> をパーティション <strong>%2</strong> に設定する。 + + + + The installer failed to update partition table on disk '%1'. + インストーラーはディスク '%1' 上のパーティションテーブルのアップデートに失敗しました。 CheckerContainer - + Gathering system information... システム情報を取得しています... @@ -498,180 +525,215 @@ The installer will quit and all changes will be lost. ChoicePage - + Form フォーム - - After: - 後: - - - - Boot loader location: - ブートローダーの場所: - - - + Select storage de&vice: ストレージデバイスを選択 (&V): - - - - + + + + Current: 現在: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>手動パーティショニング</strong> <br/>自分でパーティションを作成するかサイズを変更できます。GPTパーティションテーブルと <strong>fat32 512MB の /bootパーティションがUEFIインストールには必須です。</strong>フォーマットせずに既存のものを使用するか、新たに作成してください。 + + After: + 後: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>手動パーティション</strong><br/>パーティションを自分で作成またはサイズ変更することができます。 + + + Reuse %1 as home partition for %2. %1 を %2 のホームパーティションとして再利用する - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>縮小するパーティションを選択し、下のバーをドラッグしてサイズを変更して下さい</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - %1 は %2MiB に縮小され新たに %4 に %3MiB のパーティションが作成されます。 + %1 は %2MiB に縮小され、%4 に新しい %3MiB のパーティションが作成されます。 - + + Boot loader location: + ブートローダーの場所: + + + <strong>Select a partition to install on</strong> <strong>インストールするパーティションの選択</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. システムにEFIシステムパーティションが存在しません。%1 のセットアップのため、元に戻り、手動パーティショニングを使用してください。 - + The EFI system partition at %1 will be used for starting %2. - %1 上のEFIシステムパーテイションは %2 のスタートに使用されます。 + %1 の EFI システム パーティションは、%2 の起動に使用されます。 - + EFI system partition: EFI システムパーティション: - + 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. このストレージデバイスにはオペレーティングシステムが存在しないようです。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ディスクの消去</strong><br/>選択したストレージデバイス上のデータがすべて <font color="red">削除</font>されます。 - - 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. - このストレージデバイスには %1 が存在します。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - - - - No Swap - スワップを使用しない - - - - Reuse Swap - スワップを再利用 - - - - Swap (no Hibernate) - スワップ(ハイバーネートなし) - - - - Swap (with Hibernate) - スワップ(ハイバーネート) - - - - Swap to file - ファイルにスワップ - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>共存してインストール</strong><br/>インストーラは %1 用の空きスペースを確保するため、パーティションを縮小します。 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>パーティションの置換</strong><br/>パーティションを %1 に置き換えます。 - + + 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. + このストレージデバイスには %1 が存在します。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 + + + 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. このストレージデバイスにはすでにオペレーティングシステムが存在します。何を行いますか?<br/>ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 - + 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. このストレージデバイスには複数のオペレーティングシステムが存在します。何を行いますか?<br />ストレージデバイスに対する変更を行う前に、変更点をレビューし、確認することができます。 + + + 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/> + このストレージデバイスにはすでにオペレーティングシステムがインストールされていますが、パーティションテーブル <strong>%1</strong> は必要な <strong>%2</strong> とは異なります。<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + このストレージデバイスにはパーティションの1つが<strong>マウントされています</strong>。 + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + このストレージデバイスは<strong>非アクティブなRAID</strong>デバイスの一部です。 + + + + No Swap + スワップを使用しない + + + + Reuse Swap + スワップを再利用 + + + + Swap (no Hibernate) + スワップ(ハイバーネートなし) + + + + Swap (with Hibernate) + スワップ(ハイバーネート) + + + + Swap to file + ファイルにスワップ + ClearMountsJob - - Clear mounts for partitioning operations on %1 - %1 のパーティション操作のため、マウントを解除 + + Successfully unmounted %1. + %1 を正常にアンマウントしました。 - + + Successfully disabled swap %1. + スワップ %1 を正常に無効にしました。 + + + + Successfully cleared swap %1. + スワップ %1 を正常にクリアしました。 + + + + Successfully closed mapper device %1. + マッパーデバイス %1 を正常に閉じました。 + + + + Successfully disabled volume group %1. + ボリュームグループ %1 を正常に無効にしました。 + + + + Clear mounts for partitioning operations on %1 + %1 のパーティション操作のため、マウントを解除する + + + Clearing mounts for partitioning operations on %1. %1 のパーティション操作のため、マウントを解除しています。 - + Cleared all mounts for %1 - %1 のすべてのマウントを解除 + %1 のすべてのマウントを解除しました ClearTempMountsJob - + Clear all temporary mounts. - すべての一時的なマウントをクリア + すべての一時的なマウントをクリアする - + Clearing all temporary mounts. すべての一時的なマウントをクリアしています。 - - Cannot get list of temporary mounts. - 一時的なマウントのリストを取得できません。 - - - + Cleared all temporary mounts. すべての一時的なマウントを解除しました。 @@ -679,18 +741,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. コマンドを実行できませんでした。 - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. コマンドがホスト環境で実行される際、rootのパスの情報が必要になりますが、root のマウントポイントが定義されていません。 - + The command needs to know the user's name, but no username is defined. ユーザー名が必要ですが、定義されていません。 @@ -698,100 +760,236 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - このコンピュータは %1 をセットアップするための最低要件を満たしていません。<br/>セットアップは続行できません。 <a href="#details">詳細...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - このコンピュータは %1 をインストールするための最低要件を満たしていません。<br/>インストールは続行できません。<a href="#details">詳細...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - このコンピュータは、 %1 をセットアップするための推奨条件をいくつか満たしていません。<br/>インストールは続行しますが、一部の機能が無効になる場合があります。 - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - このコンピュータは、 %1 をインストールするための推奨条件をいくつか満たしていません。<br/>インストールは続行しますが、一部の機能が無効になる場合があります。 - - - - This program will ask you some questions and set up %2 on your computer. - このプログラムはあなたにいくつか質問をして、コンピュータに %2 を設定します。 - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1 Calamares セットアッププログラムにようこそ</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>%1 セットアップへようこそ</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 Calamares インストーラーにようこそ</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 インストーラーへようこそ。</h1> - - - + Set keyboard model to %1.<br/> キーボードのモデルを %1 に設定する。<br/> - + Set keyboard layout to %1/%2. キーボードのレイアウトを %1/%2 に設定する。 - + + Set timezone to %1/%2. + タイムゾーンを %1/%2 に設定する。 + + + The system language will be set to %1. - システムの言語を %1 に設定します。 + システムの言語を %1 に設定する。 - + The numbers and dates locale will be set to %1. - 数字と日付のロケールを %1 に設定します。 + 数値と日付のロケールを %1 に設定する。 - - Set timezone to %1/%2.<br/> - タイムゾーンを %1/%2 に設定する。<br/> - - - + Network Installation. (Disabled: Incorrect configuration) ネットワークインストール。(無効: 不正な設定) - + Network Installation. (Disabled: Received invalid groups data) ネットワークインストール (不可: 無効なグループデータを受け取りました) - - Network Installation. (Disabled: internal error) - ネットワークインストール。(無効: 内部エラー) + + Network Installation. (Disabled: Internal error) + ネットワークインストール(無効: 内部エラー) - + + Network Installation. (Disabled: No package list) + ネットワークインストール(無効: パッケージリストなし) + + + + Package selection + パッケージの選択 + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) ネットワークインストール。(無効: パッケージリストを取得できません。ネットワーク接続を確認してください。) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + このコンピューターは %1 をセットアップするための最低要件を満たしていません。<br/>セットアップは続行できません。 <a href="#details">詳細...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + このコンピューターは %1 をインストールするための最低要件を満たしていません。<br/>インストールは続行できません。<a href="#details">詳細...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + このコンピューターは、 %1 をセットアップするための推奨条件をいくつか満たしていません。<br/>インストールは続行しますが、一部の機能が無効になる場合があります。 + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + このコンピューターは、 %1 をインストールするための推奨条件をいくつか満たしていません。<br/>インストールは続行しますが、一部の機能が無効になる場合があります。 + + + + This program will ask you some questions and set up %2 on your computer. + このプログラムはあなたにいくつか質問をして、コンピューターに %2 を設定します。 + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>%1 のCalamaresセットアッププログラムへようこそ</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>%1 のセットアップへようこそ</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>%1 のCalamaresインストーラーへようこそ</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 インストーラーへようこそ</h1> + + + + Your username is too long. + ユーザー名が長すぎます。 + + + + '%1' is not allowed as username. + '%1' はユーザー名として許可されていません。 + + + + Your username must start with a lowercase letter or underscore. + ユーザー名はアルファベットの小文字または _ で始めてください。 + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 使用できるのはアルファベットの小文字と数字と _ と - だけです。 + + + + Your hostname is too short. + ホスト名が短すぎます。 + + + + Your hostname is too long. + ホスト名が長過ぎます。 + + + + '%1' is not allowed as hostname. + '%1' はホスト名として許可されていません。 + + + + Only letters, numbers, underscore and hyphen are allowed. + 使用できるのはアルファベットと数字と _ と - だけです。 + + + + Your passwords do not match! + パスワードが一致していません! + + + + OK! + OK! + + + + Setup Failed + セットアップに失敗しました。 + + + + Installation Failed + インストールに失敗 + + + + The setup of %1 did not complete successfully. + %1 のセットアップは正常に完了しませんでした。 + + + + The installation of %1 did not complete successfully. + %1 のインストールは正常に完了しませんでした。 + + + + Setup Complete + セットアップが完了しました + + + + Installation Complete + インストールが完了 + + + + + The setup of %1 is complete. + %1 のセットアップが完了しました。 + + + + The installation of %1 is complete. + %1 のインストールは完了です。 + + + + Package Selection + パッケージの選択 + + + + Please pick a product from the list. The selected product will be installed. + リストから製品を選んでください。選択した製品がインストールされます。 + + + + Install option: <strong>%1</strong> + インストールオプション: <strong>%1</strong> + + + + None + なし + + + + Summary + 要約 + + + + This is an overview of what will happen once you start the setup procedure. + これは、セットアップ開始後に行うことの概要です。 + + + + This is an overview of what will happen once you start the install procedure. + これは、インストール開始後に行うことの概要です。 + ContextualProcessJob - + Contextual Processes Job コンテキストプロセスジョブ @@ -799,128 +997,164 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition パーティションの生成 - - MiB - MiB - - - - Partition &Type: - パーティションの種類 (&T): - - - - &Primary - プライマリ (&P) - - - - E&xtended - 拡張 (&X) - - - - Fi&le System: - ファイルシステム (&L): - - - - LVM LV name - LVMのLV名 - - - - Flags: - フラグ: - - - - &Mount Point: - マウントポイント (&M) - - - + Si&ze: サイズ (&Z) - + + MiB + MiB + + + + Partition &Type: + パーティションの種類 (&T): + + + + Primar&y + プライマリ (&Y) + + + + E&xtended + 拡張 (&X) + + + + Fi&le System: + ファイルシステム (&L): + + + + LVM LV name + LVMのLV名 + + + + &Mount Point: + マウントポイント (&M) + + + + Flags: + フラグ: + + + + Label for the filesystem + ファイルシステムのラベル + + + + FS Label: + FSラベル: + + + En&crypt 暗号化 (&C) - + Logical 論理 - + Primary プライマリ - + GPT GPT - + Mountpoint already in use. Please select another one. マウントポイントは既に使用されています。他を選択してください。 + + + Mountpoint must start with a <tt>/</tt>. + マウントポイントは <tt>/</tt> で開始する必要があります。 + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + %3 (%2) にエントリ %4 の新しい %1MiB パーティションを作成する。 + + + + Create new %1MiB partition on %3 (%2). + %3 (%2) に新しい %1MiB パーティションを作成する。 + + + Create new %2MiB partition on %4 (%3) with file system %1. - %4 (%3) に新たにファイルシステム %1 の %2MiB のパーティションが作成されます。 + %4 (%3) にファイルシステム %1 の新しい %2MiB パーティションを作成する。 - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + <strong>%3</strong> (%2) にエントリ <em>%4</em> の新しい <strong>%1MiB</strong> パーティションを作成する。 + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + <strong>%3</strong> (%2) に新しい <strong>%1MiB</strong> パーティションを作成する。 + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - Create new <strong>%4</strong> (%3) に新たにファイルシステム<strong>%1</strong>の <strong>%2MiB</strong> のパーティションが作成されます。 + <strong>%4</strong> (%3) にファイルシステム <strong>%1</strong> の新しい <strong>%2MiB</strong> パーティションを作成する。 - + + Creating new %1 partition on %2. - %2 に新しく %1 パーティションを作成しています。 + %2 に新しい %1 パーティションを作成しています。 - + The installer failed to create partition on disk '%1'. - インストーラーはディスク '%1' にパーティションを作成することに失敗しました。 + インストーラーはディスク '%1' にパーティションを作成できませんでした。 CreatePartitionTableDialog - + Create Partition Table パーティションテーブルの作成 - + Creating a new partition table will delete all existing data on the disk. - パーティションテーブルを作成することによって、ディスク上のデータがすべて削除されます。 + 新しいパーティションテーブルを作成すると、ディスク上の既存のデータがすべて削除されます。 - + What kind of partition table do you want to create? どの種類のパーティションテーブルを作成しますか? - + Master Boot Record (MBR) マスターブートレコード (MBR) - + GUID Partition Table (GPT) GUID パーティションテーブル (GPT) @@ -928,68 +1162,64 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - %2 に新しく %1 パーティションテーブルを作成 + %2 に新しい %1 パーティションテーブルを作成する。 - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - <strong>%2</strong> (%3) に新しく <strong>%1</strong> パーティションテーブルを作成 + <strong>%2</strong> (%3) に新しい <strong>%1</strong> パーティションテーブルを作成する。 - + Creating new %1 partition table on %2. - %2 に新しく %1 パーティションテーブルを作成しています。 + %2 に新しい %1 パーティションテーブルを作成しています。 - + The installer failed to create a partition table on %1. - インストーラーは%1 へのパーティションテーブルの作成に失敗しました。 + インストーラーは %1 のパーティションテーブル作成に失敗しました。 CreateUserJob - + Create user %1 ユーザー %1 を作成 - + Create user <strong>%1</strong>. - ユーザー <strong>%1</strong> を作成。 + ユーザー <strong>%1</strong> を作成する。 - - Creating user %1. - ユーザー %1 を作成しています。 + + Preserving home directory + ホームディレクトリを保持する - - Sudoers dir is not writable. - sudoers ディレクトリは書き込み可能ではありません。 + + + Creating user %1 + ユーザー %1 を作成しています - - Cannot create sudoers file for writing. - sudoersファイルを作成できません。 + + Configuring user %1 + ユーザー %1 を設定しています - - Cannot chmod sudoers file. - sudoersファイルの権限を変更できません。 - - - - Cannot open groups file for reading. - groups ファイルを読み込めません。 + + Setting file permissions + ファイルのアクセス権限を設定しています CreateVolumeGroupDialog - + Create Volume Group ボリュームグループの作成 @@ -997,41 +1227,41 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - 新しいボリュームグループ %1 を作成。 + 新しいボリュームグループ %1 を作成する。 - + Create new volume group named <strong>%1</strong>. - 新しいボリュームグループ <strong>%1</strong> を作成。 + 新しいボリュームグループ <strong>%1</strong> を作成する。 - + Creating new volume group named %1. - 新しいボリュームグループ %1 を作成。 + 新しいボリュームグループ %1 を作成しています。 - + The installer failed to create a volume group named '%1'. - インストーラーは新しいボリュームグループ '%1' の作成に失敗しました。 + インストーラーはボリュームグループ名 '%1' の作成に失敗しました。 DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. ボリュームグループ %1 を無効化 - + Deactivate volume group named <strong>%1</strong>. ボリュームグループ <strong>%1</strong> を無効化。 - + The installer failed to deactivate a volume group named %1. インストーラーはボリュームグループ %1 の無効化に失敗しました。 @@ -1039,22 +1269,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. パーティション %1 の削除 - + Delete partition <strong>%1</strong>. パーティション <strong>%1</strong> の削除 - + Deleting partition %1. パーティション %1 を削除しています。 - + The installer failed to delete partition %1. インストーラーはパーティション %1 の削除に失敗しました。 @@ -1062,46 +1292,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - 選択したストレージデバイスにおける<strong> パーティションテーブル </strong> の種類。 <br><br> パーティションテーブルの種類を変更する唯一の方法は、パーティションテーブルを消去し、最初から再作成を行うことですが、この操作はストレージ上のすべてのデータを破壊します。 <br> このインストーラーは、他の種類へ明示的に変更ししない限り、現在のパーティションテーブルが保持されます。よくわからない場合、最近のシステムではGPTが推奨されます。 - - - + This device has a <strong>%1</strong> partition table. このデバイスのパーティションテーブルは <strong>%1</strong> です。 - + 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. - このデバイスは<strong>ループ</strong> デバイスです。<br><br> ブロックデバイスとしてふるまうファイルを作成する、パーティションテーブルを持たない仮想デバイスです。このセットアップの種類は通常単一のファイルシステムで構成されます。 + このデバイスは<strong>ループ</strong> デバイスです。<br><br> ブロックデバイスとしてアクセスできるファイルを作成する、パーティションテーブルを持たない仮想デバイスです。この種のセットアップは通常、単一のファイルシステムで構成されます。 - + 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. - インストーラが、選択したストレージデバイス上の<strong>パーティションテーブルを検出することができません。</strong><br><br>デバイスにはパーティションテーブルが存在しないか、パーティションテーブルが未知のタイプまたは破損しています。<br>このインストーラーでは、自動であるいは、パーティションページによって手動で、新しいパーティションテーブルを作成することができます。 + インストーラーが、選択したストレージデバイス上の<strong>パーティションテーブルを検出できません。</strong><br><br>デバイスのパーティションテーブルが存在しないか、破損しているか、タイプが不明です。<br>このインストーラーは、自動的に、または手動パーティショニングページを介して、新しいパーティションテーブルを作成できます。 - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>これは <strong>EFI</strong> ブート環境から起動する現在のシステムで推奨されるパーティションテーブルの種類です。 - + <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. <br><br>このパーティションテーブルの種類は<strong>BIOS</strong> ブート環境から起動する古いシステムにおいてのみ推奨されます。他のほとんどの場合ではGPTが推奨されます。<br><br><strong>警告:</strong> MBR パーティションテーブルは時代遅れのMS-DOS時代の標準です。<br>作成できる<em>プライマリ</em>パーティションは4つだけです。そのうち1つは<em>拡張</em>パーティションになることができ、そこには多くの<em>論理</em>パーティションを含むことができます。 + + + 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. + 選択したストレージデバイスにおける<strong> パーティションテーブル </strong> の種類。 <br><br> パーティションテーブルの種類を変更する唯一の方法は、パーティションテーブルを消去し、最初から再作成を行うことですが、この操作はストレージ上のすべてのデータを破壊します。 <br> このインストーラーは、他の種類へ明示的に変更ししない限り、現在のパーティションテーブルが保持されます。よくわからない場合、最近のシステムではGPTが推奨されます。 + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1340,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Dracut のためのLUKS設定を %1 に書き込む - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut のためのLUKS設定の書き込みをスキップ: "/" パーティションは暗号化されません。 - + Failed to open %1 %1 を開くのに失敗しました @@ -1128,7 +1358,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1136,123 +1366,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition パーティションの編集 - - Content: - 内容: + + Con&tent: + コンテンツ (&T): - + &Keep 保持 (&K) - + Format フォーマット - + Warning: Formatting the partition will erase all existing data. 警告: パーティションのフォーマットはすべてのデータを消去します。 - + &Mount Point: マウントポイント (&M) - + Si&ze: サイズ (&Z): - + MiB MiB - + Fi&le System: ファイルシステム (&L) - + Flags: フラグ: - - Mountpoint already in use. Please select another one. - マウントポイントは既に使用されています。他を選択してください。 + + Label for the filesystem + ファイルシステムのラベル + + + + FS Label: + FSラベル: EncryptWidget - + Form フォーム - + En&crypt system システムを暗号化 (&C) - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + お使いのシステムはシステム全体を暗号化するのに十分な暗号化をサポートしていないようです。暗号化を有効にすることはできますが、パフォーマンスが低下する可能性があります。 + + + Passphrase パスフレーズ - + Confirm passphrase パスフレーズの確認 - + + Please enter the same passphrase in both boxes. 両方のボックスに同じパスフレーズを入力してください。 + + ErrorDialog + + + Details: + 詳細: + + + + Would you like to paste the install log to the web? + インストールログをWebに貼り付けますか? + + FillGlobalStorageJob - + Set partition information パーティション情報の設定 - - - Install %1 on <strong>new</strong> %2 system partition. - <strong>新しい</strong> %2 システムパーティションに %1 をインストール。 - - - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - マウントポイント <strong>%1</strong> に<strong>新しく</strong> %2 パーティションをセットアップする。 - - - - Install %2 on %3 system partition <strong>%1</strong>. - %3 システムパーティション <strong>%1</strong> に%2 をインストール。 - - - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - パーティション <strong>%1</strong> マウントポイント <strong>%2</strong> に %3 をセットアップする。 - - Install boot loader on <strong>%1</strong>. - <strong>%1</strong> にブートローダーをインストール + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <strong>新規の</strong> %2 システムパーティション (機能 <em>%3</em>) に %1 をインストールする - + + Install %1 on <strong>new</strong> %2 system partition. + <strong>新規の</strong> %2 システムパーティションに %1 をインストールする。 + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>新規の</strong> %2 パーティション (マウントポイント <strong>%1</strong>、機能 <em>%3</em>) をセットアップする。 + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + <strong>新規の</strong> %2 パーティション (マウントポイント <strong>%1</strong> %3) をセットアップする。 + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + %3 システムパーティション <strong>%1</strong> (機能 <em>%4</em>) に %2 をインストールする。 + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + パーティション %3 <strong>%1</strong> (マウントポイント <strong>%2</strong>、機能 <em>%4</em>) をセットアップする。 + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + %3 パーティション <strong>%1</strong> (マウントポイント <strong>%2</strong> %4) をセットアップする。 + + + + Install %2 on %3 system partition <strong>%1</strong>. + %3 システムパーティション <strong>%1</strong> に%2 をインストールする。 + + + + Install boot loader on <strong>%1</strong>. + <strong>%1</strong> にブートローダーをインストールする。 + + + Setting up mount points. マウントポイントを設定する。 @@ -1260,94 +1534,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form フォーム - + &Restart now 今すぐ再起動 (&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - <h1>すべて完了しました。</h1><br/>%1 はコンピュータにセットアップされました。<br/>今から新しいシステムを開始することができます。 + <h1>すべて完了しました。</h1><br/>%1 はコンピューターにセットアップされました。<br/>今から新しいシステムを開始することができます。 - + <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> <html><head/><body><p>このボックスをチェックすると、 <span style="font-style:italic;">実行</span>をクリックするかプログラムを閉じると直ちにシステムが再起動します。</p></body></html> - + <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. <h1>すべて完了しました。</h1><br/>%1 がコンピューターにインストールされました。<br/>再起動して新しいシステムを使用することもできますし、%2 ライブ環境の使用を続けることもできます。 - + <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> <html><head/><body><p>このボックスをチェックすると、 <span style="font-style:italic;">実行</span>をクリックするかインストーラーを閉じると直ちにシステムが再起動します。</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - <h1>セットアップに失敗しました。</h1><br/>%1 はコンピュータにセットアップされていません。<br/>エラーメッセージ: %2 + <h1>セットアップに失敗しました。</h1><br/>%1 はコンピューターにセットアップされていません。<br/>エラーメッセージ: %2 - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - <h1>インストールに失敗しました</h1><br/>%1 はコンピュータにインストールされませんでした。<br/>エラーメッセージ: %2. + <h1>インストールに失敗しました</h1><br/>%1 はコンピューターにインストールされませんでした。<br/>エラーメッセージ: %2. + + + + FinishedQmlViewStep + + + Finish + 終了 FinishedViewStep - + Finish 終了 - - - Setup Complete - セットアップが完了しました - - - - Installation Complete - インストールが完了 - - - - - The setup of %1 is complete. - %1 のセットアップが完了しました。 - - - - The installation of %1 is complete. - %1 のインストールは完了です。 - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 のパーティション %1 (ファイルシステム: %2、サイズ: %3 MiB) をフォーマットする。 - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> のパーティション <strong>%1</strong> をファイルシステム <strong>%2</strong> でフォーマットする。 - + Formatting partition %1 with file system %2. ファイルシステム %2 でパーティション %1 をフォーマットしています。 - + The installer failed to format partition %1 on disk '%2'. インストーラーはディスク '%2' 上のパーティション %1 のフォーマットに失敗しました。 @@ -1355,122 +1616,122 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space 利用可能な容量が少なくとも %1 GiB - + There is not enough drive space. At least %1 GiB is required. 空き容量が十分ではありません。少なくとも %1 GiB 必要です。 - + has at least %1 GiB working memory %1 GiB以降のメモリーがあります - + The system does not have enough working memory. At least %1 GiB is required. 十分なメモリがありません。少なくとも %1 GiB 必要です。 - + is plugged in to a power source 電源が接続されていること - + The system is not plugged in to a power source. システムに電源が接続されていません。 - + is connected to the Internet インターネットに接続されていること - + The system is not connected to the Internet. システムはインターネットに接続されていません。 - + is running the installer as an administrator (root) は管理者(root)としてインストーラーを実行しています - + The setup program is not running with administrator rights. セットアッププログラムは管理者権限で実行されていません。 - + The installer is not running with administrator rights. インストーラーは管理者権限で実行されていません。 - + has a screen large enough to show the whole installer にはインストーラー全体を表示できる大きさの画面があります - + The screen is too small to display the setup program. - セットアップを表示のは画面が小さすぎます。 + 画面が小さすぎてセットアッププログラムを表示できません。 - + The screen is too small to display the installer. - インストーラーを表示するためには、画面が小さすぎます。 + 画面が小さすぎてインストーラーを表示できません。 HostInfoJob - + Collecting information about your machine. - マシンの情報を収集しています。 + お使いのマシンの情報を収集しています。 IDJob - - + + + - OEM Batch Identifier OEMのバッチID - + Could not create directories <code>%1</code>. - <code>%1</code>のフォルダを作成されませんでした。 + ディレクトリ <code>%1</code> を作成できませんでした。 + + + + Could not open file <code>%1</code>. + ファイル <code>%1</code> を開けませんでした。 - Could not open file <code>%1</code>. - <code>%1</code>のファイルを開くられませんでした。 - - - Could not write to file <code>%1</code>. - ファイル <code>%1</code>に書き込めません。 + ファイル <code>%1</code> に書き込めませんでした。 InitcpioJob - + Creating initramfs with mkinitcpio. - mkinitcpioとinitramfsを作成しています。 + mkinitcpio と initramfs を作成しています。 InitramfsJob - + Creating initramfs. initramfsを作成しています。 @@ -1478,17 +1739,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsoleがインストールされていません - + Please install KDE Konsole and try again! KDE Konsole をインストールして再度試してください! - + Executing script: &nbsp;<code>%1</code> スクリプトの実行: &nbsp;<code>%1</code> @@ -1496,28 +1757,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script スクリプト - - KeyboardPage - - - Set keyboard model to %1.<br/> - キーボードのモデルを %1 に設定する。<br/> - - - - Set keyboard layout to %1/%2. - キーボードのレイアウトを %1/%2 に設定する。 - - KeyboardQmlViewStep - + Keyboard キーボード @@ -1525,7 +1773,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard キーボード @@ -1533,65 +1781,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting システムのロケールの設定 - + 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>. システムロケールの設定はコマンドラインやインターフェースでの言語や文字の表示に影響をおよぼします。<br/>現在の設定 <strong>%1</strong>. - + &Cancel 中止 (&C) - + &OK 了解 (&O) + + LOSHJob + + + Configuring encrypted swap. + 暗号化したswapを設定しています。 + + + + No target system available. + 使用可能なターゲットシステムがありません。 + + + + No rootMountPoint is set. + rootMountPoint が設定されていません。 + + + + No configFilePath is set. + configFilePath が設定されていません。 + + LicensePage - + Form フォーム - + <h1>License Agreement</h1> <h1>ライセンス契約</h1> - + I accept the terms and conditions above. 上記の項目及び条件に同意します。 - + Please review the End User License Agreements (EULAs). エンドユーザーライセンス契約(EULA)を確認してください。 - + This setup procedure will install proprietary software that is subject to licensing terms. このセットアップ手順では、ライセンス条項の対象となるプロプライエタリソフトウェアをインストールします。 - + If you do not agree with the terms, the setup procedure cannot continue. 条件に同意しない場合はセットアップ手順を続行できません。 - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. このセットアップ手順では、追加機能を提供し、ユーザーエクスペリエンスを向上させるために、ライセンス条項の対象となるプロプライエタリソフトウェアをインストールできます。 - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 条件に同意しない場合はプロプライエタリソフトウェアがインストールされず、代わりにオープンソースの代替ソフトウェアが使用されます。 @@ -1599,7 +1870,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License ライセンス @@ -1607,109 +1878,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ドライバー</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 グラフィックドライバー</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 ブラウザプラグイン</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 パッケージ</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 ファイル: %1 - + + Hide license text + ライセンステキストを非表示 + + + Show the license text ライセンステキストを表示 - + Open license agreement in browser. ブラウザでライセンス契約を開く。 - - - Hide license text - ライセンステキストを非表示 - LocalePage - - The system language will be set to %1. - システムの言語を %1 に設定します。 - - - - The numbers and dates locale will be set to %1. - 数字と日付のロケールを %1 に設定します。 - - - + Region: 地域: - + Zone: ゾーン: - - + + &Change... 変更 (&C)... - - - Set timezone to %1/%2.<br/> - タイムゾーンを %1/%2 に設定する。<br/> - LocaleQmlViewStep - + Location ロケーション + + LocaleTests + + + Quit + 終了 + + LocaleViewStep - + Location ロケーション @@ -1717,35 +1981,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. LUKSキーファイルを設定しています。 - - + + No partitions are defined. パーティションが定義されていません。 - - - + + + Encrypted rootfs setup error - 暗号化したrootfsセットアップエラー + 暗号化された rootfs のセットアップエラー - + Root partition %1 is LUKS but no passphrase has been set. ルートパーティション %1 はLUKSですが、パスワードが設定されていません。 - + Could not create LUKS key file for root partition %1. ルートパーティション %1 のLUKSキーファイルを作成できませんでした。 - + Could not configure LUKS key file on partition %1. パーティション %1 でLUKSキーファイルを設定できませんでした。 @@ -1753,124 +2017,141 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. machine-id の生成 - + Configuration Error コンフィグレーションエラー - + No root mount point is set for MachineId. マシンIDにルートマウントポイントが設定されていません。 + + Map + + + Timezone: %1 + タイムゾーン: %1 + + + + 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. + インストーラーがロケールとタイムゾーンの設定を提案できるように、 +マップ上の適切な場所を選択してください。 以下の推奨設定を調整できます。 +ドラッグして移動し、+ /-ボタンでズームインまたはズームアウトしてマップを検索するか、 +マウスのスクロールを使用してズームします。 + + NetInstallViewStep - - + Package selection パッケージの選択 - + Office software オフィスソフトウェア - + Office package オフィスパッケージ - + Browser software ブラウザソフトウェア - + Browser package ブラウザパッケージ - + Web browser ウェブブラウザ - + Kernel カーネル - + Services サービス - + Login ログイン - + Desktop デスクトップ - + Applications アプリケーション - + Communication - + コミュニケーション - + Development - + 開発 - + Office - + オフィス - + Multimedia - + マルチメディア - + Internet - + インターネット - + Theming - + テーマ - + Gaming - + ゲーム - + Utilities - + ユーティリティー NotesQmlViewStep - + Notes ノート @@ -1878,17 +2159,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - バッチ (&) + バッチ (&t) - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>ここにバッチIDを入力してください。これはターゲットシステムに保存されます。</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEMの設定</h1><p>Calamaresはターゲットシステムの設定中にOEMの設定を使用します。</p></body></html> @@ -1896,260 +2177,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration OEMの設定 - + Set the OEM Batch Identifier to <code>%1</code>. OEMのバッチIDを <code>%1</code> に設定してください。 + + Offline + + + Select your preferred Region, or use the default settings. + 希望する地域を選択するか、デフォルトの設定を使用してください。 + + + + + + Timezone: %1 + タイムゾーン: %1 + + + + Select your preferred Zone within your Region. + 地域内の優先ゾーンを選択してください。 + + + + Zones + ゾーン + + + + You can fine-tune Language and Locale settings below. + 以下の言語とロケールの設定を微調整できます。 + + PWQ - + Password is too short パスワードが短すぎます - + Password is too long パスワードが長すぎます - + Password is too weak パスワードが弱すぎます - + Memory allocation error when setting '%1' '%1' の設定の際にメモリーアロケーションエラーが発生しました - + Memory allocation error メモリーアロケーションエラー - + The password is the same as the old one パスワードが以前のものと同じです。 - + The password is a palindrome パスワードが回文です - + The password differs with case changes only パスワードの変更が大文字、小文字の変更のみです - + The password is too similar to the old one パスワードが以前のものと酷似しています - + The password contains the user name in some form パスワードにユーザー名が含まれています - + The password contains words from the real name of the user in some form パスワードにユーザーの実名が含まれています - + The password contains forbidden words in some form - パスワードに禁句が含まれています + パスワードに禁止されている単語が含まれています - - The password contains less than %1 digits - パスワードに含まれている数字が %1 字以下です - - - + The password contains too few digits パスワードに含まれる数字の数が少なすぎます - - The password contains less than %1 uppercase letters - パスワードに含まれている大文字が %1 字以下です - - - + The password contains too few uppercase letters パスワードに含まれる大文字の数が少なすぎます - - - The password contains less than %1 lowercase letters - パスワードに含まれている小文字が %1 字以下です + + + The password contains fewer than %n lowercase letters + + パスワードに含まれる小文字が %n 未満です + - + The password contains too few lowercase letters パスワードに含まれる小文字の数が少なすぎます - - The password contains less than %1 non-alphanumeric characters - パスワードに含まれる非アルファベット文字が %1 字以下です - - - + The password contains too few non-alphanumeric characters パスワードに含まれる非アルファベット文字の数が少なすぎます - - The password is shorter than %1 characters - パスワードの長さが %1 字より短いです - - - + The password is too short パスワードが短すぎます - - The password is just rotated old one - パスワードが古いものの使いまわしです - - - - The password contains less than %1 character classes - パスワードに含まれている文字クラスは %1 以下です。 - - - + The password does not contain enough character classes パスワードには十分な文字クラスが含まれていません - - The password contains more than %1 same characters consecutively - パスワードで同じ文字が %1 字以上連続しています。 - - - + The password contains too many same characters consecutively パスワードで同じ文字を続けすぎています - - The password contains more than %1 characters of the same class consecutively - パスワードで同じ文字クラスが %1 以上連続しています。 - - - + The password contains too many characters of the same class consecutively パスワードで同じ文字クラスの文字を続けすぎています - - - The password contains monotonic sequence longer than %1 characters - パスワードに %1 文字以上の単調な文字列が含まれています + + + The password contains fewer than %n digits + + パスワードに含まれる数字の桁数が %n 未満です + + + + + The password contains fewer than %n uppercase letters + + パスワードに含まれる大文字が %n 未満です + + + + + The password contains fewer than %n non-alphanumeric characters + + パスワードに含まれる英数字以外の文字が %n 未満です + + + + + The password is shorter than %n characters + + パスワードに含まれる文字が %n 未満です + - + + The password is a rotated version of the previous one + このパスワードは以前のものを再利用しています + + + + The password contains fewer than %n character classes + + パスワードに含まれる文字の種類が %n 未満です + + + + + The password contains more than %n same characters consecutively + + パスワードに同じ文字が %n 以上連続して含まれています + + + + + The password contains more than %n characters of the same class consecutively + + パスワードに同じ種類の文字が %n 以上連続して含まれています + + + + + The password contains monotonic sequence longer than %n characters + + パスワードに単調なシーケンスが %n 文字より多く含まれています + + + + The password contains too long of a monotonic character sequence パスワードに限度を超えた単調な文字列が含まれています - + No password supplied パスワードがありません - + Cannot obtain random numbers from the RNG device RNGデバイスから乱数を取得できません - + Password generation failed - required entropy too low for settings - パスワード生成に失敗 - 設定のためのエントロピーが低すぎます + パスワードの生成に失敗しました - 設定に必要なエントロピーが低すぎます - + The password fails the dictionary check - %1 パスワードの辞書チェックに失敗しました - %1 - + The password fails the dictionary check パスワードの辞書チェックに失敗しました - + Unknown setting - %1 未設定- %1 - + Unknown setting 未設定 - + Bad integer value of setting - %1 不適切な設定値 - %1 - + Bad integer value 不適切な設定値 - + Setting %1 is not of integer type 設定値 %1 は整数ではありません - + Setting is not of integer type 設定値は整数ではありません - + Setting %1 is not of string type 設定値 %1 は文字列ではありません - + Setting is not of string type 設定値は文字列ではありません - + Opening the configuration file failed 設定ファイルが開けませんでした - + The configuration file is malformed 設定ファイルが不正な形式です - + Fatal failure 致命的な失敗 - + Unknown error 未知のエラー - + Password is empty パスワードが空です @@ -2157,40 +2486,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form フォーム - + Product Name 製品名 - + TextLabel テキストラベル - + Long Product Description 製品の詳しい説明 - + Package Selection パッケージの選択 - + Please pick a product from the list. The selected product will be installed. リストから製品を選んでください。選択した製品がインストールされます。 + + PackageChooserQmlViewStep + + + Packages + パッケージ + + PackageChooserViewStep - + Packages パッケージ @@ -2198,12 +2535,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name 名前 - + Description 説明 @@ -2211,17 +2548,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form フォーム - + Keyboard Model: キーボードモデル: - + Type here to test your keyboard ここでタイプしてキーボードをテストしてください @@ -2229,96 +2566,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form フォーム - + What is your name? あなたの名前は何ですか? - - What name do you want to use to log in? - ログイン時に使用する名前は何ですか? - - - - Choose a password to keep your account safe. - アカウントを安全に使うため、パスワードを選択してください - - - - - <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> - <small>確認のため、同じパスワードを2回入力して下さい。8文字以上で、アルファベット・数字・句読点を混ぜたものにすれば強いパスワードになります。パスワードは定期的に変更してください。</small> - - - - What is the name of this computer? - このコンピュータの名前は何ですか? - - - + Your Full Name あなたのフルネーム - + + What name do you want to use to log in? + ログイン時に使用する名前は何ですか? + + + login ログイン - + + What is the name of this computer? + このコンピューターの名前は何ですか? + + + <small>This name will be used if you make the computer visible to others on a network.</small> - <small>ネットワーク上からコンピュータが見えるようにする場合、この名前が使用されます。</small> + <small>ネットワーク上からコンピューターが見えるようにする場合、この名前が使用されます。</small> - + Computer Name - コンピュータの名前 + コンピューターの名前 - - + + Choose a password to keep your account safe. + アカウントを安全に使うため、パスワードを選択してください + + + + + <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> + <small>確認のため、同じパスワードを2回入力して下さい。8文字以上で、アルファベット・数字・句読点を混ぜたものにすれば強いパスワードになります。パスワードは定期的に変更してください。</small> + + + + Password パスワード - - + + Repeat Password パスワードを再度入力 - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. このボックスをオンにするとパスワードの強度チェックが行われ、弱いパスワードを使用できなくなります。 - + Require strong passwords. 強いパスワードを要求する。 - + Log in automatically without asking for the password. パスワードを尋ねずに自動的にログインする。 - + Use the same password for the administrator account. 管理者アカウントと同じパスワードを使用する。 - + Choose a password for the administrator account. 管理者アカウントのパスワードを選択する。 - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>入力ミスを確認することができるように、同じパスワードを 2 回入力します。</small> @@ -2326,42 +2663,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI システム - + Swap スワップ - + New partition for %1 新しいパーティション %1 - + New partition 新しいパーティション - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2707,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space 空き領域 - - + + New partition 新しいパーティション - + Name 名前 - + File System ファイルシステム - + + File System Label + ファイルシステムのラベル + + + Mount Point マウントポイント - + Size サイズ @@ -2405,195 +2747,185 @@ The installer will quit and all changes will be lost. PartitionPage - + Form フォーム - + Storage de&vice: ストレージデバイス (&V): - + &Revert All Changes すべての変更を元に戻す (&R) - + New Partition &Table 新しいパーティションテーブル (&T) - + Cre&ate 作成 (&A) - + &Edit 編集 (&E) - + &Delete 削除 (&D) - + New Volume Group 新しいボリュームグループ - + Resize Volume Group ボリュームグループのサイズ変更 - + Deactivate Volume Group ボリュームグループの無効化 - + Remove Volume Group ボリュームグループの消去 - + I&nstall boot loader on: ブートローダーインストール先: - + Are you sure you want to create a new partition table on %1? %1 に新しいパーティションテーブルを作成します。よろしいですか? - + Can not create new partition 新しいパーティションを作成できません - + 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. - %1 上のパーティションテーブルには既にプライマリパーティション %2 が配置されており、追加することができません。プライマリパーティションを消去して代わりに拡張パーティションを追加してください。 + %1 のパーティションテーブルにはすでに %2 個のプライマリパーティションがあり、これ以上追加できません。代わりに1つのプライマリパーティションを削除し、拡張パーティションを追加してください。 PartitionViewStep - + Gathering system information... システム情報を取得しています... - + Partitions パーティション - - Install %1 <strong>alongside</strong> another operating system. - 他のオペレーティングシステムに<strong>共存して</strong> %1 をインストール。 + + Unsafe partition actions are enabled. + 安全でないパーティションアクションが有効になります。 - - <strong>Erase</strong> disk and install %1. - ディスクを<strong>消去</strong>し %1 をインストール。 + + Partitioning is configured to <b>always</b> fail. + パーティショニングが<b>常に</b>失敗するように設定されています。 - - <strong>Replace</strong> a partition with %1. - パーティションを %1 に<strong>置き換える。</strong> + + No partitions will be changed. + パーティションは変更されません。 - - <strong>Manual</strong> partitioning. - <strong>手動</strong>でパーティションを設定する。 - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - ディスク <strong>%2</strong> (%3) 上ののオペレーティングシステムと<strong>共存</strong>して %1 をインストール。 - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - ディスク <strong>%2</strong> (%3) を<strong>消去して</strong> %1 をインストール。 - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - ディスク <strong>%2</strong> (%3) 上のパーティションを %1 に<strong>置き換える。</strong> - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - ディスク <strong>%1</strong> (%2) に <strong>手動で</strong>パーティショニングする。 - - - - Disk <strong>%1</strong> (%2) - ディスク <strong>%1</strong> (%2) - - - + Current: 現在: - + After: 変更後: - + No EFI system partition configured EFI システムパーティションが設定されていません - - 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>esp</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. - %1 を起動するためにはEFI システムパ ーティションが必要です。<br/><br/> EFI システムパーティションを設定するためには、元に戻って、マウントポイント<strong>%2</strong>で<strong>esp</strong>フラグを設定したFAT32ファイルシステムを選択するか作成します。<br/><br/>EFI システムパ ーティションの設定をせずに続行することはできますが、その場合はシステムの起動に失敗することになるかもしれません。 + + EFI system partition configured incorrectly + EFI システムパーティションが正しく設定されていません - - EFI system partition flag not set - EFI システムパーティションのフラグが設定されていません + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + %1 を起動するには EFI システムパーティションが必要です。<br/><br/>EFI システムパーティションを設定するには、戻って適切なファイルシステムを選択または作成してください。 - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1 を起動するためにはEFI システムパ ーティションが必要です。<br/><br/>パーティションはマウントポイント<strong>%2</strong>に設定されていますが、<strong>esp</strong> フラグが設定されていません。<br/>フラグを設定するには、元に戻ってパーティションを編集してください。<br/><br/>フラグの設定をせずに続けることはできますが、その場合、システムの起動に失敗することになるかもしれません。 + + The filesystem must be mounted on <strong>%1</strong>. + ファイルシステムは <strong>%1</strong> にマウントする必要があります。 - + + The filesystem must have type FAT32. + ファイルシステムのタイプは FAT32 にする必要があります。 + + + + The filesystem must be at least %1 MiB in size. + ファイルシステムのサイズは最低でも %1 MiB である必要があります。 + + + + The filesystem must have flag <strong>%1</strong> set. + ファイルシステムにはフラグ <strong>%1</strong> を設定する必要があります。 + + + + You can continue without setting up an EFI system partition but your system may fail to start. + EFI システムパーティションを設定しなくても続行できますが、システムが起動しない場合があります。 + + + Option to use GPT on BIOS - BIOSでGPTを使用するためのオプション + BIOS で GPT を使用するためのオプション - - 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. - GPTパーティションテーブルは、すべてのシステムに最適なオプションです。このインストーラーは、BIOSシステムのこのようなセットアップもサポートしています。<br/><br/>BIOSでGPTパーティションテーブルを設定するには(まだ行っていない場合)、前に戻ってパーティションテーブルをGPTに設定し、<strong>bios_grub</strong>フラグを有効にして 8 MB の未フォーマットのパーティションを作成します。GPTに設定したBIOSシステムで %1 を起動するには、未フォーマットの 8 MB パーティションが必要です。 + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT パーティションテーブルは、すべてのシステムに最適なオプションです。このインストーラーは、BIOS システムのそのようなセットアップもサポートします。<br/><br/>BIOS で GPT パーティションテーブルを設定するには(まだ設定していない場合は)、戻ってパーティションテーブルを GPT に設定し、<strong>%2</strong> フラグを有効にした 8 MB の未フォーマットパーティションを作成します。<br/><br/>GPT を使用する BIOS システムで %1 を開始するには、未フォーマットの 8 MB のパーティションが必要です。 - + Boot partition not encrypted ブートパーティションが暗号化されていません - + 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. - ブートパーティションは暗号化されたルートパーティションとともにセットアップされましたが、ブートパーティションは暗号化されていません。<br/><br/>重要なシステムファイルが暗号化されていないパーティションに残されているため、このようなセットアップは安全上の懸念があります。<br/>セットアップを続行することはできますが、後でシステムの起動中にファイルシステムが解除されるおそれがあります。<br/>ブートパーティションを暗号化させるには、前の画面に戻って、再度パーティションを作成し、パーティション作成ウィンドウ内で<strong>Encrypt</strong> (暗号化) を選択してください。 + ブートパーティションは暗号化されたルートパーティションとともにセットアップされましたが、ブートパーティションは暗号化されていません。<br/><br/>重要なシステムファイルが暗号化されていないパーティションに残されているため、このようなセットアップは安全上の懸念があります。<br/>セットアップを続行することはできますが、後でシステムの起動中にファイルシステムが解除されます。<br/>ブートパーティションを暗号化させるには、前の画面に戻って、再度パーティションを作成し、パーティション作成ウィンドウ内で<strong>Encrypt</strong> (暗号化) を選択してください。 - + has at least one disk device available. - 少なくとも1枚のディスクは使用可能。 + は少なくとも1つのディスクデバイスを利用可能です。 - + There are no partitions to install on. インストールするパーティションがありません。 @@ -2601,13 +2933,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package KDE Plasma の Look-and-Feel パッケージを選択できませんでした @@ -2615,25 +2947,25 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form フォーム - + 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. KDE Plasma デスクトップの外観を選んでください。この作業はスキップでき、インストール後に外観を設定することができます。外観を選択し、クリックすることにより外観のプレビューが表示されます。 - + 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. - KDE Plasma デスクトップの外観を選んでください。この作業はスキップでき、インストール後に外観を設定することができます。外観を選択し、クリックすることにより外観のプレビューが表示されます。 + KDE Plasma デスクトップの外観を選んでください。この作業をスキップして、インストール後に外観を設定することもできます。外観の選択をクリックすると、外観のプレビューが表示されます。 PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2641,17 +2973,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... 後でファイルを保存する... - + No files configured to save for later. - 保存するための設定ファイルがありません。 + 後で保存するよう設定されたファイルがありません。 - + Not all of the configured files could be preserved. 設定ファイルはすべて保護されるわけではありません。 @@ -2659,14 +2991,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. コマンドから出力するものがありませんでした。 - + Output: @@ -2675,52 +3007,52 @@ Output: - + External command crashed. 外部コマンドがクラッシュしました。 - + Command <i>%1</i> crashed. コマンド <i>%1</i> がクラッシュしました。 - + External command failed to start. 外部コマンドの起動に失敗しました。 - + Command <i>%1</i> failed to start. コマンド <i>%1</i> の起動に失敗しました。 - + Internal error when starting command. コマンドが起動する際に内部エラーが発生しました。 - + Bad parameters for process job call. ジョブ呼び出しにおける不正なパラメータ - + External command failed to finish. 外部コマンドの終了に失敗しました。 - + Command <i>%1</i> failed to finish in %2 seconds. コマンド<i>%1</i> %2 秒以内に終了することに失敗しました。 - + External command finished with errors. 外部のコマンドがエラーで停止しました。 - + Command <i>%1</i> finished with exit code %2. コマンド <i>%1</i> が終了コード %2 で終了しました。. @@ -2728,89 +3060,95 @@ Output: QObject - - Default Keyboard Model - デフォルトのキーボードモデル - - - - - Default - デフォルト - - - - unknown - 不明 - - - - extended - 拡張 - - - - unformatted - 未フォーマット - - - - swap - スワップ - - - - Unpartitioned space or unknown partition table - パーティションされていない領域または未知のパーティションテーブル - - - - (no mount point) - (マウントポイントなし) - - - - Requirements checking for module <i>%1</i> is complete. - モジュール <i>%1</i> に必要なパッケージの確認が完了しました。 - - - + %1 (%2) %1 (%2) - - No product - 製品がありません。 + + unknown + 不明 - - No description provided. - 説明はありません。 + + extended + 拡張 - - - - + + unformatted + 未フォーマット + + + + swap + スワップ + + + + + Default + デフォルト + + + + + + File not found ファイルが見つかりません - + Path <pre>%1</pre> must be an absolute path. パス <pre>%1</pre> は絶対パスにしてください。 - + + Directory not found + ディレクトリが見つかりません + + + + Could not create new random file <pre>%1</pre>. 新しいランダムファイル <pre>%1</pre> を作成できませんでした。 + + + No product + 製品がありません。 + + + + No description provided. + 説明はありません。 + + + + (no mount point) + (マウントポイントなし) + + + + Unpartitioned space or unknown partition table + パーティションされていない領域または未知のパーティションテーブル + + + + Recommended + + + <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> + <p>このコンピューターは %1 をセットアップするための推奨要件の一部を満たしていません。<br/> +セットアップは続行できますが、一部の機能が無効になる可能性があります。</p> + RemoveUserJob - + Remove live user from target system ターゲットシステムからliveユーザーを消去 @@ -2818,18 +3156,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. ボリュームグループ %1 の消去。 - + Remove Volume Group named <strong>%1</strong>. ボリュームグループ <strong>%1</strong> の消去。 - + The installer failed to remove a volume group named '%1'. インストーラーは新しいボリュームグループ '%1' の消去に失敗しました。 @@ -2837,143 +3175,160 @@ Output: ReplaceWidget - + Form フォーム - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 をインストールする場所を選択します。<br/><font color="red">警告: </font>選択したパーティション内のすべてのファイルが削除されます。 - + The selected item does not appear to be a valid partition. 選択した項目は有効なパーティションではないようです。 - + %1 cannot be installed on empty space. Please select an existing partition. %1 は空き領域にインストールすることはできません。既存のパーティションを選択してください。 - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 は拡張パーティションにインストールできません。既存のプライマリまたは論理パーティションを選択してください。 - + %1 cannot be installed on this partition. %1 はこのパーティションにインストールできません。 - + Data partition (%1) データパーティション (%1) - + Unknown system partition (%1) 不明なシステムパーティション (%1) - + %1 system partition (%2) %1 システムパーティション (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>パーティション %1 は、%2 には小さすぎます。少なくとも %3 GB 以上のパーティションを選択してください。 - + <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. <strong>%2</strong><br/><br/>EFI システムパーティションがシステムに見つかりません。%1 を設定するために一旦戻って手動パーティショニングを使用してください。 - - - + + + <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. <strong>%3</strong><br/><br/>%1 は %2 にインストールされます。<br/><font color="red">警告: </font>パーティション %2 のすべてのデータは失われます。 - + The EFI system partition at %1 will be used for starting %2. %1 上の EFI システムパーティションは %2 開始時に使用されます。 - + EFI system partition: EFI システムパーティション: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>このコンピューターは %1 をインストールするための最小要件を満たしていません。<br/> +インストールを続行できません。</p> + + + + <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> + <p>このコンピューターは、%1をセットアップするための推奨要件の一部を満たしていません。<br/> +セットアップは続行できますが、一部の機能が無効になる可能性があります。</p> + + ResizeFSJob - + Resize Filesystem Job ファイルシステム ジョブのサイズ変更 - + Invalid configuration 不当な設定 - + The file-system resize job has an invalid configuration and will not run. - ファイルシステムのサイズ変更ジョブが不当な設定であるため、作動しません。 + ファイルシステムのサイズ変更ジョブの設定が無効です。実行しません。 - + KPMCore not Available KPMCore は利用できません - + Calamares cannot start KPMCore for the file-system resize job. Calamares はファイエウシステムのサイズ変更ジョブのため KPMCore を開始することができません。 - - - - - + + + + + Resize Failed サイズ変更に失敗しました - + The filesystem %1 could not be found in this system, and cannot be resized. ファイルシステム %1 がシステム内に見つけられなかったため、サイズ変更ができません。 - + The device %1 could not be found in this system, and cannot be resized. デバイス %1 がシステム内に見つけられなかったため、サイズ変更ができません。 - - + + The filesystem %1 cannot be resized. ファイルシステム %1 のサイズ変更ができません。 - - + + The device %1 cannot be resized. デバイス %1 のサイズ変更ができません。 - + The filesystem %1 must be resized, but cannot. ファイルシステム %1 はサイズ変更が必要ですが、できません。 - + The device %1 must be resized, but cannot デバイス %1 はサイズ変更が必要ですが、できません。 @@ -2981,22 +3336,22 @@ Output: ResizePartitionJob - + Resize partition %1. パーティション %1 のサイズを変更する。 - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> のパーティション <strong>%1</strong> を <strong>%3MiB</strong>にサイズ変更。 - + Resizing %2MiB partition %1 to %3MiB. %2MiB のパーティション %1 を %3MiB にサイズ変更しています。 - + The installer failed to resize partition %1 on disk '%2'. インストーラが、ディスク '%2' でのパーティション %1 のリサイズに失敗しました。 @@ -3004,7 +3359,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group ボリュームグループのサイズ変更 @@ -3012,18 +3367,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. ボリュームグループ %1 を %2 から %3 にサイズ変更。 - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. ボリュームグループ <strong>%1</strong> を <strong>%2</strong> から <strong>%3</strong> にサイズ変更。 - + The installer failed to resize a volume group named '%1'. インストーラーはボリュームグループ '%1' のサイズ変更に失敗しました。 @@ -3031,53 +3386,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - 良好な結果を得るために、このコンピュータについて以下の項目を確認してください: + 良好な結果を得るために、このコンピューターについて以下の項目を確認してください: - + System requirements システム要件 - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - このコンピュータは %1 をセットアップするための最低要件を満たしていません。<br/>セットアップは続行できません。 <a href="#details">詳細...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - このコンピュータは %1 をインストールするための最低要件を満たしていません。<br/>インストールは続行できません。<a href="#details">詳細...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - このコンピュータは、 %1 をセットアップするための推奨条件をいくつか満たしていません。<br/>インストールは続行しますが、一部の機能が無効になる場合があります。 - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - このコンピュータは、 %1 をインストールするための推奨条件をいくつか満たしていません。<br/>インストールは続行しますが、一部の機能が無効になる場合があります。 - - - - This program will ask you some questions and set up %2 on your computer. - このプログラムはあなたにいくつか質問をして、コンピュータに %2 を設定します。 - - ScanningDialog - + Scanning storage devices... ストレージデバイスをスキャンしています... - + Partitioning パーティショニング @@ -3085,29 +3412,29 @@ Output: SetHostNameJob - + Set hostname %1 ホスト名 %1 の設定 - + Set hostname <strong>%1</strong>. ホスト名 <strong>%1</strong> を設定する。 - + Setting hostname %1. ホスト名 %1 を設定しています。 + - Internal Error 内部エラー - - + + Cannot write hostname to target system ターゲットとするシステムにホスト名を書き込めません @@ -3115,29 +3442,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 キーボードのモデルを %1 に、レイアウトを %2-%3に設定 - + Failed to write keyboard configuration for the virtual console. 仮想コンソールでのキーボード設定の書き込みに失敗しました。 - - - + + + Failed to write to %1 %1 への書き込みに失敗しました - + Failed to write keyboard configuration for X11. X11 のためのキーボード設定の書き込みに失敗しました。 - + Failed to write keyboard configuration to existing /etc/default directory. 現存する /etc/default ディレクトリへのキーボード設定の書き込みに失敗しました。 @@ -3145,82 +3472,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. パーティション %1 にフラグを設定する。 - + Set flags on %1MiB %2 partition. %1MiB %2 パーティションにフラグを設定する。 - + Set flags on new partition. 新しいパーティションにフラグを設定する。 - + Clear flags on partition <strong>%1</strong>. パーティション <strong>%1</strong> 上のフラグを消去。 - + Clear flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> パーティション上のフラグを消去。 - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - %1MiB <strong>%2</strong> パーティションに <strong>%3</strong> フラグを設定する。 - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - %1MiB <strong>%2</strong> パーティション上のフラグを消去しています。 - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - %1MiB <strong>%2</strong> パーティションに <strong>%3</strong> フラグを設定しています。 - - - + Clear flags on new partition. 新しいパーティション上のフラグを消去。 - + Flag partition <strong>%1</strong> as <strong>%2</strong>. パーティション <strong>%1</strong> に <strong>%2</strong>フラグを設定する。 - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MiB <strong>%2</strong> パーティションに <strong>%3</strong> フラグを設定する。 + + + Flag new partition as <strong>%1</strong>. 新しいパーティションに <strong>%1</strong> フラグを設定する。 - + Clearing flags on partition <strong>%1</strong>. パーティション <strong>%1</strong> のフラグを消去しています。 - + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MiB <strong>%2</strong> パーティション上のフラグを消去しています。 + + + Clearing flags on new partition. 新しいパーティション上のフラグを消去しています。 - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. パーティション <strong>%1</strong> に <strong>%2</strong> フラグを設定する。 - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + %1MiB <strong>%2</strong> パーティションに <strong>%3</strong> フラグを設定しています。 + + + Setting flags <strong>%1</strong> on new partition. 新しいパーティションに <strong>%1</strong> フラグを設定しています。 - + The installer failed to set flags on partition %1. インストーラーはパーティション %1 上のフラグの設定に失敗しました。 @@ -3228,42 +3555,42 @@ Output: SetPasswordJob - + Set password for user %1 ユーザ %1 のパスワード設定 - + Setting password for user %1. ユーザ %1 のパスワードを設定しています。 - + Bad destination system path. 不正なシステムパス。 - + rootMountPoint is %1 root のマウントポイントは %1 。 - + Cannot disable root account. rootアカウントを使用することができません。 - + passwd terminated with error code %1. passwd がエラーコード %1 のため終了しました。 - + Cannot set password for user %1. ユーザ %1 のパスワードは設定できませんでした。 - + usermod terminated with error code %1. エラーコード %1 によりusermodが停止しました。 @@ -3271,45 +3598,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 タイムゾーンを %1/%2 に設定 - + Cannot access selected timezone path. 選択したタイムゾーンのパスにアクセスできません。 - + Bad path: %1 不正なパス: %1 - + Cannot set timezone. タイムゾーンを設定できません。 - + Link creation failed, target: %1; link name: %2 リンクの作成に失敗しました、ターゲット: %1 ; リンク名: %2 - + Cannot set timezone, タイムゾーンを設定できません, - + Cannot open /etc/timezone for writing /etc/timezone を開くことができません + + SetupGroupsJob + + + Preparing groups. + グループを準備しています。 + + + + + Could not create groups in target system + ターゲットシステムにグループを作成できませんでした + + + + These groups are missing in the target system: %1 + これらのグループはターゲットシステムにありません: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <pre>sudo</pre> ユーザーを設定する。 + + + + Cannot chmod sudoers file. + sudoersファイルの権限を変更できません。 + + + + Cannot create sudoers file for writing. + sudoersファイルを作成できません。 + + ShellProcessJob - + Shell Processes Job シェルプロセスジョブ @@ -3317,81 +3681,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - これはセットアップを開始した時に起こることの概要です。 + + &OK + 了解 (&O) - - This is an overview of what will happen once you start the install procedure. - これはインストールを開始した時に起こることの概要です。 + + &Yes + はい (&Y) - - - SummaryViewStep - - Summary - 要約 + + &No + いいえ (&N) + + + + &Cancel + 中止 (&C) + + + + &Close + 閉じる (&C) TrackingInstallJob - + Installation feedback インストールのフィードバック - + Sending installation feedback. インストールのフィードバックを送信 - + Internal error in install-tracking. インストールトラッキング中の内部エラー - + HTTP request timed out. HTTPリクエストがタイムアウトしました。 - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDEのユーザーフィードバック + + + + Configuring KDE user feedback. + KDEのユーザーフィードバックを設定しています。 + + + + + Error in KDE user feedback configuration. + KDEのユーザーフィードバックの設定でエラー。 + + + + Could not configure KDE user feedback correctly, script error %1. + KDEのユーザーフィードバックを正しく設定できませんでした。スクリプトエラー %1。 + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDEのユーザーフィードバックを正しく設定できませんでした。Calamaresエラー %1。 + + + + TrackingMachineUpdateManagerJob + + Machine feedback マシンフィードバック - + Configuring machine feedback. マシンフィードバックの設定 - - + + Error in machine feedback configuration. マシンフィードバックの設定中のエラー - + Could not configure machine feedback correctly, script error %1. マシンフィードバックの設定が正確にできませんでした、スクリプトエラー %1。 - + Could not configure machine feedback correctly, Calamares error %1. マシンフィードバックの設定が正確にできませんでした、Calamares エラー %1。 @@ -3399,106 +3799,97 @@ Output: TrackingPage - + Form フォーム - + Placeholder プレースホルダー - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>これを選択すると、インストール時の情報を <span style=" font-weight:600;">全く送信しなく</span> なります。</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>インストールに関する情報を <span style=" font-weight:600;">送信しない</span> 場合はここをクリック。</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ユーザーフィードバックについての詳しい情報については、ここをクリックしてください</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - インストールトラッキングは %1 にとって、どれだけのユーザーが どのハードに %1 をインストールするのか (下記の2つのオプション)、どのようなアプリケーションが好まれているのかについての情報を把握することの補助を行っています。 どのような情報が送信されているのか確認したい場合は、以下の各エリアのヘルプのアイコンをクリックして下さい。 + + 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. + 追跡することにより、%1 はインストールの頻度、インストールされているハードウェア、使用されているアプリケーションを確認できます。送信内容を確認するには、各エリアの横にあるヘルプアイコンをクリックしてください。 - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - インストールやハードウェアの情報を送信します。この情報はインストール終了後 <b> 1回だけ送信されます</b> 。 + + 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. + これを選択すると、インストールとハードウェアに関する情報が送信されます。この情報は、インストールの完了後に<b>1度だけ</b>送信されます。 - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - これを選択すると、インストール、ハードウェア、およびアプリケーションに関する情報を<b>定期的に</b> %1 に送信します。 + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + これを選択すると、<b>マシン</b>のインストール、ハードウェア、アプリケーションに関する情報が定期的に %1 に送信されます。 - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - これを選択すると、インストール、ハードウェア、アプリケーション、および使用パターンに関する情報を<b>毎回</b> %1 に送信します。 + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + これを選択すると、<b>ユーザーの</b>インストール、ハードウェア、アプリケーション、アプリケーションの使用パターンに関する情報が定期的に %1 に送信されます。 TrackingViewStep - + Feedback フィードバック + + UmountJob + + + Unmount file systems. + ファイルシステムをアンマウント。 + + + + No target system available. + 使用可能なターゲットシステムがありません。 + + + + No rootMountPoint is set. + rootMountPoint が設定されていません。 + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - <small>もし複数の人間がこのコンピュータを使用する場合、セットアップの後で複数のアカウントを作成できます。</small> + <small>複数の人がこのコンピューターを使用する場合は、セットアップ後に複数のアカウントを作成できます。</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - <small>もし複数の人間がこのコンピュータを使用する場合、インストールの後で複数のアカウントを作成できます。</small> + <small>複数の人がこのコンピューターを使用する場合は、インストール後に複数のアカウントを作成できます。</small> + + + UsersQmlViewStep - - Your username is too long. - ユーザー名が長すぎます。 - - - - Your username must start with a lowercase letter or underscore. - ユーザー名はアルファベットの小文字または _ で始めてください。 - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - 使用できるのはアルファベットの小文字と数字と _ と - だけです。 - - - - Only letters, numbers, underscore and hyphen are allowed. - 使用できるのはアルファベットと数字と _ と - だけです。 - - - - Your hostname is too short. - ホスト名が短すぎます。 - - - - Your hostname is too long. - ホスト名が長過ぎます。 - - - - Your passwords do not match! - パスワードが一致していません! + + Users + ユーザー情報 UsersViewStep - + Users ユーザー情報 @@ -3506,65 +3897,67 @@ Output: VariantModel - + Key + Column header for key/value キー - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group ボリュームグループの作成 - + List of Physical Volumes 物理ボリュームのリスト - + Volume Group Name: ボリュームグループの名称: - + Volume Group Type: ボリュームグループのタイプ: - + Physical Extent Size: 物理拡張サイズ: - + MiB MiB - + Total Size: すべてのサイズ: - + Used Size: 使用済みのサイズ: - + Total Sectors: すべてのセクター: - + Quantity of LVs: LVs の容量: @@ -3572,106 +3965,106 @@ Output: WelcomePage - + Form フォーム - - + + Select application and system language アプリケーション及び言語の選択 + &About + 説明 (&A) + + + Open donations website 寄付サイトを開く - + &Donate 寄付する(&D) - + Open help and support website サポートサイトを開く + &Support + サポート (&S) + + + Open issues and bug-tracking website issue 及び bug-track のサイトを開く - Open release notes website - リリースノートのウェブサイトを開く - - - - &Release notes - リリースノート (&R) - - - &Known issues 既知の問題 (&K) - - &Support - サポート (&S) + + Open release notes website + リリースノートのウェブサイトを開く - - &About - 説明 (&A) + + &Release notes + リリースノート (&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 インストーラーへようこそ。</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 Calamares インストーラーにようこそ</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 Calamares セットアッププログラムにようこそ</h1> - + <h1>Welcome to %1 setup.</h1> <h1>%1 セットアップへようこそ</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1 Calamares インストーラーにようこそ</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 インストーラーへようこそ。</h1> + + + + %1 support + %1 サポート + + + About %1 setup %1 セットアップについて - + About %1 installer %1 インストーラーについて - + <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. - <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-2019 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. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 サポート + <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. WelcomeQmlViewStep - + Welcome ようこそ @@ -3679,84 +4072,217 @@ Output: WelcomeViewStep - + Welcome ようこそ + + ZfsJob + + + Create ZFS pools and datasets + ZFS プールとデータセットを作成 + + + + Failed to create zpool on + 以下への zpool の作成に失敗 + + + + Configuration Error + コンフィグレーションエラー + + + + No partitions are available for ZFS. + ZFS に使用できるパーティションがありません。 + + + + Internal data missing + 内部データがありません + + + + + Failed to create zpool + zpool の作成に失敗しました + + + + Failed to create dataset + データセットの作成に失敗しました + + + + The output was: + 出力は次のとおり: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <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. - + Back - + 戻る + + + + calamares-sidebar + + + Show debug information + デバッグ情報を表示 + + + + finishedq + + + Installation Completed + インストールが完了しました + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 がコンピューターにインストールされました。<br/> + 再起動して新しいシステムを使用するか、ライブ環境をこのまま使用することができます。 + + + + Close Installer + インストーラーを閉じる + + + + Restart System + システムを再起動 + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>インストールの完全なログは、ライブユーザーのホームディレクトリにある installation.log として入手できます。<br/> + このログは、ターゲットシステムの /var/log/installation.log にコピーされます。</p> + + + + finishedq@mobile + + + Installation Completed + インストールが完了しました + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 がコンピューターにインストールされました。<br/> + これでデバイスを再起動できます。 + + + + Close + 閉じる + + + + Restart + 再起動 + + + + i18n + + + <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>. + <h1>言語</h1> </br> +システムロケールの設定は、一部のコマンドラインユーザーインターフェイスの言語と文字セットに影響します。現在の設定は <strong>%1</strong> です。 + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>ロケール</h1> </br> + システムのロケール設定は、数値と日付の形式に影響を及ぼします。現在の設定は <strong>%1</strong> です。 + + + + Back + 戻る keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + キーボードプレビューをアクティブにするには、レイアウトを選択してください。 - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + キーボードモデル: - - Refresh - - - - - + Layouts - + レイアウト - - - Keyboard Layout - + + Type here to test your keyboard + ここでタイプしてキーボードをテストしてください - - Models - - - - + Variants - + バリアント + + + localeq - - Test your keyboard - + + Change + 変更 notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3764,34 +4290,262 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice は強力かつフリーなオフィススイートで、世界中の何百万人もの人々に使用されています。これには市場で最も用途が広いフリーかつオープンソースのアプリケーションが含まれています。<br/> + デフォルトオプション。 - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + オフィススイートをインストールしたくない場合は、「オフィススイートなし」を選択するだけです。必要になれば、後からいつでも1つ(もしくはそれ以上を)システムに追加できます。 + + + + No Office Suite + オフィススイートなし + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + 最小限のデスクトップインストールを作成し、余分なアプリケーションをすべて削除して、システムに追加するものを後で決定します。このようなインストールで含まれないものの例は、オフィススイート、メディアプレーヤー、画像ビューア、印刷サポートです。デスクトップはファイルブラウザー、パッケージマネージャー、テキストエディター、シンプルなウェブブラウザーになります。 + + + + Minimal Install + 最小インストール + + + + Please select an option for your install, or use the default: LibreOffice included. + インストールのオプションを選択するか、デフォルト(LibreOffice が含まれます)を使用してください。 + + + + release_notes + + + <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> + <h3>%1</h3> + <p>これはQMLファイルの例で、Flickableコンテンツを含むRichTextのオプションを示しています。</p> + + <p>RichTextを備えたQMLはHTMLタグを使用でき、Flickableコンテンツはタッチスクリーンに役立ちます。</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>垂直スクロールバーは調整可能で、現在の幅は10に設定されています。</p> + + + + Back + 戻る + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + ログインして管理者タスクを実行するには、ユーザー名と資格情報を選択してください + + + + What is your name? + あなたの名前は何ですか? + + + + Your Full Name + あなたのフルネーム + + + + What name do you want to use to log in? + ログイン時に使用する名前は何ですか? + + + + Login Name + ログイン名 + + + + If more than one person will use this computer, you can create multiple accounts after installation. + 複数のユーザーがこのコンピューターを使用する場合は、インストール後に複数のアカウントを作成できます。 + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 使用できるのはアルファベットの小文字と数字と _ と - だけです。 + + + + root is not allowed as username. + root はユーザー名として許可されていません。 + + + + What is the name of this computer? + このコンピューターの名前は何ですか? + + + + Computer Name + コンピューターの名前 + + + + This name will be used if you make the computer visible to others on a network. + この名前は、コンピューターをネットワーク上の他のユーザーに表示する場合に使用されます。 + + + + localhost is not allowed as hostname. + localhost はユーザー名として許可されていません。 + + + + Choose a password to keep your account safe. + アカウントを安全に使うため、パスワードを選択してください + + + + Password + パスワード + + + + Repeat Password + パスワードを再度入力 + + + + 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. + 同じパスワードを2回入力して、入力エラーをチェックできるようにします。適切なパスワードは文字、数字、句読点が混在する8文字以上のもので、定期的に変更する必要があります。 + + + + Validate passwords quality + パスワードの品質を検証する + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + このボックスをオンにするとパスワードの強度チェックが行われ、弱いパスワードを使用できなくなります。 + + + + Log in automatically without asking for the password + パスワードを要求せずに自動的にログインする + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + 使用できるのはアルファベットと数字と _ と - で、2文字以上必要です。 + + + + Reuse user password as root password + rootパスワードとしてユーザーパスワードを再利用する + + + + Use the same password for the administrator account. + 管理者アカウントと同じパスワードを使用する。 + + + + Choose a root password to keep your account safe. + アカウントを安全に保つために、rootパスワードを選択してください。 + + + + Root Password + rootパスワード + + + + Repeat Root Password + rootパスワードを再入力 + + + + Enter the same password twice, so that it can be checked for typing errors. + 同じパスワードを2回入力して、入力エラーをチェックできるようにします。 + + + + welcomeq + + + <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> + <h3>%1 <quote>%2</quote> インストーラーへようこそ</h3> + <p>このプログラムはいくつかの質問を行い、コンピューターに %1 をセットアップします。</p> + + + About About - + Support サポート - + Known issues 既知の問題点 - + Release notes リリースノート - + Donate 寄付 diff --git a/lang/calamares_kk.ts b/lang/calamares_kk.ts index 7c7958065..4b00ab06c 100644 --- a/lang/calamares_kk.ts +++ b/lang/calamares_kk.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools - Саймандар + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Жөндеу ақпараты @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Орнату @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Дайын @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - А&ртқа - - - - &Next - &Алға - - - - &Cancel - Ба&с тарту - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &Алға + + + + &Back + А&ртқа + + + + &Done + + + + + &Cancel + Ба&с тарту + + + Cancel setup? - + Cancel installation? Орнатудан бас тарту керек пе? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - А&ртқа - - - - &Next - &Алға - - - - &Cancel - Ба&с тарту - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI жүйелік бөлімі: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel Ба&с тарту - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI жүйелік бөлімі: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + Ба&с тарту + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! - + + Users + Пайдаланушылар UsersViewStep - + Users Пайдаланушылар @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + %1 қолдауы + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - %1 қолдауы - WelcomeQmlViewStep - + Welcome Қош келдіңіз @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome Қош келдіңіз + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_kn.ts b/lang/calamares_kn.ts index f28e0fae6..d73bff139 100644 --- a/lang/calamares_kn.ts +++ b/lang/calamares_kn.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools - ಉಪಕರಣಗಳು + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install ಸ್ಥಾಪಿಸು @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - ಹಿಂದಿನ - - - - &Next - ಮುಂದಿನ - - - - &Cancel - ರದ್ದುಗೊಳಿಸು - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + ಅನುಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ - + + Error + ದೋಷ + + + + &Yes + ಹೌದು + + + + &No + ಇಲ್ಲ + + + + &Close + ಮುಚ್ಚಿರಿ + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + ಮುಂದಿನ + + + + &Back + ಹಿಂದಿನ + + + + &Done + + + + + &Cancel + ರದ್ದುಗೊಳಿಸು + + + Cancel setup? - + Cancel installation? ಅನುಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಮಾಡುವುದೇ? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - ಹೌದು - - - - - &No - ಇಲ್ಲ - - - - &Close - ಮುಚ್ಚಿರಿ - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - ದೋಷ - - - - Installation Failed - ಅನುಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - ಹಿಂದಿನ - - - - &Next - ಮುಂದಿನ - - - - &Cancel - ರದ್ದುಗೊಳಿಸು - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: ಪ್ರಸಕ್ತ: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + ಅನುಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - ಪ್ರಾಥಮಿಕ - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel ರದ್ದುಗೊಳಿಸು - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: ಪ್ರಸಕ್ತ: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. - + + &Yes + ಹೌದು - - - SummaryViewStep - - Summary - + + &No + ಇಲ್ಲ + + + + &Cancel + ರದ್ದುಗೊಳಿಸು + + + + &Close + ಮುಚ್ಚಿರಿ TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_ko.ts b/lang/calamares_ko.ts index c21696cba..2f504899f 100644 --- a/lang/calamares_ko.ts +++ b/lang/calamares_ko.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + 자동 마운트 설정 관리 + + BootInfoWidget - + 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. 이 시스템의 <strong>부트 환경</strong>입니다. <br> <br> 오래된 x86 시스템은 <strong>BIOS</strong>만을 지원합니다. <br> 최근 시스템은 주로 <strong>EFI</strong>를 사용하지만, 호환 모드로 시작한 경우 BIOS로 나타날 수도 있습니다. - + 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. 이 시스템은 <strong>EFI</strong> 부트 환경에서 시동되었습니다. <br> <br> EFI 환경에서의 시동에 대해 설정하려면, <strong>EFI 시스템 파티션</strong>에 <strong>GRUB</strong>나 <strong>systemd-boot</strong>와 같은 부트 로더 애플리케이션을 배치해야 합니다. 이 과정은 자동으로 진행됩니다. 단, 수동 파티셔닝을 선택할 경우, EFI 시스템 파티션을 직접 선택 또는 작성해야 합니다. - + 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. 이 시스템은 <strong>BIOS 부트 환경</strong>에서 시동되었습니다. <br> <br> BIOS 환경에서의 시동에 대해 설정하려면, 파티션의 시작 위치 또는 파티션 테이블의 시작 위치 근처(권장)에 있는 <strong>마스터 부트 레코드</strong>에 <strong>GRUB</strong>과 같은 부트 로더를 설치해야 합니다. 이 과정은 자동으로 진행됩니다. 단, 수동 파티셔닝을 선택할 경우, 사용자가 직접 설정을 해야 합니다. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1의 마스터 부트 레코드 - + Boot Partition 부트 파티션 - + System Partition 시스템 파티션 - + Do not install a boot loader 부트로더를 설치하지 않습니다 - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page 빈 페이지 @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form 형식 - + GlobalStorage 전역 스토리지 - + JobQueue 작업 대기열 - + Modules 모듈 - + Type: 유형: - - + + none 없음 - + Interface: 인터페이스: - - Tools - 도구 + + Crashes Calamares, so that Dr. Konqui can look at it. + Dr. Konqui를 통해 조사할 수 있도록 Calamares를 충돌시킵니다. - + + Reloads the stylesheet from the branding directory. + 브랜딩 디렉터리에서 스타일 시트를 다시 불러옵니다. + + + + Uploads the session log to the configured pastebin. + 세션 로그를 구성된 pastebin에 업로드합니다. + + + + Send Session Log + 세션 로그 보내기 + + + Reload Stylesheet 스타일시트 새로고침 - + + Displays the tree of widget names in the log (for stylesheet debugging). + 로그에 위젯 이름의 트리를 표시합니다 (스타일시트 디버깅 용). + + + Widget Tree 위젯 트리 - + Debug information 디버그 정보 @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up 설정 - + Install 설치 @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) (%1) 작업 실패 - + Programmed job failure was explicitly requested. 프로그래밍된 작업 실패가 명시적으로 요청되었습니다. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done 완료 @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) 작업 예제 (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. 대상 시스템에서 '%1' 명령을 실행합니다. - + Run command '%1'. '%1' 명령을 실행합니다. - + Running command %1 %2 명령 %1 %2 실행중 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 명령을 실행중 - + Bad working directory path 잘못된 작업 디렉터리 경로 - + Working directory %1 for python job %2 is not readable. 파이썬 작업 %2에 대한 작업 디렉터리 %1을 읽을 수 없습니다. - + Bad main script file 잘못된 주 스크립트 파일 - + Main script file %1 for python job %2 is not readable. 파이썬 작업 %2에 대한 주 스크립트 파일 %1을 읽을 수 없습니다. - + Boost.Python error in job "%1". 작업 "%1"에서 Boost.Python 오류 @@ -210,39 +238,44 @@ Calamares::QmlViewStep - + Loading ... 로딩 중 ... - + QML Step <i>%1</i>. QML 단계 <i>%1</i>. - + Loading failed. 로딩하지 못했습니다. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <i>%1</i> 모듈에 대한 요구사항 검사가 완료되었습니다. + - + Waiting for %n module(s). %n 모듈(들)을 기다리는 중. - + (%n second(s)) (%n 초) - + System-requirements checking is complete. 시스템 요구사항 검사가 완료 되었습니다. @@ -250,247 +283,241 @@ Calamares::ViewManager - - &Back - 뒤로 (&B) - - - - &Next - 다음 (&N) - - - - &Cancel - 취소 (&C) - - - - Cancel setup without changing the system. - 시스템을 변경 하지 않고 설치를 취소합니다. - - - - Cancel installation without changing the system. - 시스템 변경 없이 설치를 취소합니다. - - - + Setup Failed 설치 실패 - - Would you like to paste the install log to the web? - 설치 로그를 웹에 붙여넣으시겠습니까? + + Installation Failed + 설치 실패 - + + Error + 오류 + + + + &Yes + 예(&Y) + + + + &No + 아니오(&N) + + + + &Close + 닫기(&C) + + + Install Log Paste URL 로그 붙여넣기 URL 설치 - + The upload was unsuccessful. No web-paste was done. 업로드에 실패했습니다. 웹 붙여넣기가 수행되지 않았습니다. - + + Install log posted to + +%1 + +Link copied to clipboard + 설치 게시한 로그가 아래 위치에 업로드되었습니다. + +%1 + +링크가 클립보드에 복사되었습니다. + + + Calamares Initialization Failed - Calamares 초기화 실패 + Calamares 초기화에 실패했습니다 - + %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. - %1 가 설치될 수 없습니다. Calamares가 모든 구성된 모듈을 불러올 수 없었습니다. 이것은 Calamares가 분포에 의해 사용되는 방식에서 비롯된 문제입니다. + %1 가 설치될 수 없습니다. Calamares가 모든 구성된 모듈을 불러올 수 없었습니다. 이것은 Calamares가 배포판에서 사용되는 방식에서 발생한 문제입니다. - + <br/>The following modules could not be loaded: 다음 모듈 불러오기 실패: - + + Continue with setup? + 설치를 계속하시겠습니까? + + + Continue with installation? 설치를 계속하시겠습니까? - + 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> %1 설치 프로그램이 %2을(를) 설정하기 위해 디스크를 변경하려고 하는 중입니다.<br/><strong>이러한 변경은 취소할 수 없습니다.</strong> - + + 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> + %1 설치 관리자가 %2를 설치하기 위해 사용자의 디스크의 내용을 변경하려고 합니다. <br/> <strong>이 변경 작업은 되돌릴 수 없습니다.</strong> + + + &Set up now 지금 설치 (&S) - + + &Install now + 지금 설치 (&I) + + + + Go &back + 뒤로 이동 (&b) + + + &Set up 설치 (&S) - + &Install 설치(&I) - + Setup is complete. Close the setup program. 설치가 완료 되었습니다. 설치 프로그램을 닫습니다. - + + The installation is complete. Close the installer. + 설치가 완료되었습니다. 설치 관리자를 닫습니다. + + + + Cancel setup without changing the system. + 시스템을 변경 하지 않고 설치를 취소합니다. + + + + Cancel installation without changing the system. + 시스템 변경 없이 설치를 취소합니다. + + + + &Next + 다음 (&N) + + + + &Back + 뒤로 (&B) + + + + &Done + 완료 (&D) + + + + &Cancel + 취소 (&C) + + + Cancel setup? 설치를 취소 하시겠습니까? - + Cancel installation? 설치를 취소하시겠습니까? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 현재 설정 프로세스를 취소하시겠습니까? 설치 프로그램이 종료되고 모든 변경 내용이 손실됩니다. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 정말로 현재 설치 프로세스를 취소하시겠습니까? 설치 관리자가 종료되며 모든 변경은 반영되지 않습니다. - - - - &Yes - 예(&Y) - - - - - &No - 아니오(&N) - - - - &Close - 닫기(&C) - - - - Continue with setup? - 설치를 계속하시겠습니까? - - - - 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> - %1 인스톨러가 %2를 설치하기 위해 사용자의 디스크의 내용을 변경하려고 합니다. <br/> <strong>이 변경 작업은 되돌릴 수 없습니다.</strong> - - - - &Install now - 지금 설치 (&I) - - - - Go &back - 뒤로 이동 (&b) - - - - &Done - 완료 (&D) - - - - The installation is complete. Close the installer. - 설치가 완료되었습니다. 설치 관리자를 닫습니다. - - - - Error - 오류 - - - - Installation Failed - 설치 실패 - CalamaresPython::Helper - + Unknown exception type 알 수 없는 예외 유형 - + unparseable Python error 구문 분석할 수 없는 파이썬 오류 - + unparseable Python traceback 구문 분석할 수 없는 파이썬 역추적 정보 - + Unfetchable Python error. 가져올 수 없는 파이썬 오류 - - CalamaresUtils - - - Install log posted to: -%1 - 설치 로그 게시 위치: -%1 - - CalamaresWindow - - &Back - 뒤로 (&B) - - - - &Next - 다음 (&N) - - - - &Cancel - 취소 (&C) - - - + %1 Setup Program %1 설치 프로그램 - + %1 Installer %1 설치 관리자 + + + ChangeFilesystemLabelJob - - Show debug information - 디버그 정보 보기 + + Set filesystem label on %1. + 파일시스템 레이블을 %1로 지정합니다. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + <strong>%1</strong> 파일시스템 레이블을 <strong>%2</strong> 파티션으로 설정하십시오. + + + + The installer failed to update partition table on disk '%1'. + 설치 관리자가 디스크 '%1'의 파티션 테이블을 업데이트하지 못했습니다. CheckerContainer - + Gathering system information... 시스템 정보 수집 중... @@ -498,157 +525,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form 형식 - - After: - 이후: - - - - Boot loader location: - 부트 로더 위치 : - - - + Select storage de&vice: 저장 장치 선택 (&v) - - - - + + + + Current: 현재: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + 이후: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>수동 파티션 작업</strong><br/>직접 파티션을 만들거나 크기를 조정할 수 있습니다. + + + Reuse %1 as home partition for %2. %2의 홈 파티션으로 %1을 재사용합니다. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>축소할 파티션을 선택한 다음 하단 막대를 끌어 크기를 조정합니다.</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1이 %2MiB로 축소되고 %4에 대해 새 %3MiB 파티션이 생성됩니다. - + + Boot loader location: + 부트 로더 위치 : + + + <strong>Select a partition to install on</strong> <strong>설치할 파티션을 선택합니다.</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 이 시스템에서는 EFI 시스템 파티션을 찾을 수 없습니다. 돌아가서 수동 파티션 작업을 사용하여 %1을 설정하세요. - + The EFI system partition at %1 will be used for starting %2. %1의 EFI 시스템 파티션은 %2의 시작으로 사용될 것입니다. - + EFI system partition: EFI 시스템 파티션: - + 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. 이 저장 장치에는 운영 체제가없는 것 같습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>디스크 지우기</strong><br/>그러면 선택한 저장 장치에 현재 있는 모든 데이터가 <font color="red">삭제</font>됩니다. - - 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. - 이 저장 장치에 %1이 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - - - - No Swap - 스왑 없음 - - - - Reuse Swap - 스왑 재사용 - - - - Swap (no Hibernate) - 스왑 (최대 절전모드 아님) - - - - Swap (with Hibernate) - 스왑 (최대 절전모드 사용) - - - - Swap to file - 파일로 스왑 - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>함께 설치</strong><br/>설치 관리자가 파티션을 축소하여 %1 공간을 확보합니다. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>파티션 바꾸기</strong><br/>파티션을 %1로 바꿉니다. - + + 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. + 이 저장 장치에 %1이 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. + + + 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. 이 저장 장치에는 이미 운영 체제가 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. - + 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. 이 저장 장치에는 여러 개의 운영 체제가 있습니다. 무엇을하고 싶으십니까?<br/>저장 장치를 변경하기 전에 선택 사항을 검토하고 확인할 수 있습니다. + + + 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/> + 이 스토리지 장치에는 이미 운영 체제가 설치되어 있으나 <strong>%1</strong> 파티션 테이블이 필요로 하는 <strong>%2</strong>와 다릅니다.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + 이 스토리지 장치는 하나 이상의 <strong>마운트된</strong> 파티션을 갖고 있습니다. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + 이 스토리지 장치는 <strong>비활성화된 RAID</strong> 장치의 일부입니다. + + + + No Swap + 스왑 없음 + + + + Reuse Swap + 스왑 재사용 + + + + Swap (no Hibernate) + 스왑 (최대 절전모드 아님) + + + + Swap (with Hibernate) + 스왑 (최대 절전모드 사용) + + + + Swap to file + 파일로 스왑 + ClearMountsJob - + + Successfully unmounted %1. + %1 경로를 성공적으로 마운트 해제했습니다. + + + + Successfully disabled swap %1. + %1 스왑을 성공적으로 비활성화했습니다. + + + + Successfully cleared swap %1. + %1 스왑을 성공적으로 지웠습니다. + + + + Successfully closed mapper device %1. + %1 매퍼 장치를 성공적으로 닫았습니다. + + + + Successfully disabled volume group %1. + %1 볼륨 그룹을 성공적으로 비활성화했습니다. + + + Clear mounts for partitioning operations on %1 파티셔닝 작업을 위해 %1의 마운트를 모두 해제합니다 - + Clearing mounts for partitioning operations on %1. 파티셔닝 작업을 위해 %1의 마운트를 모두 해제하는 중입니다. - + Cleared all mounts for %1 %1의 모든 마운트가 해제되었습니다. @@ -656,22 +723,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. 모든 임시 마운트들을 해제합니다 - + Clearing all temporary mounts. 모든 임시 마운트들이 해제하는 중입니다. - - Cannot get list of temporary mounts. - 임시 마운트들의 목록을 가져올 수 없습니다. - - - + Cleared all temporary mounts. 모든 임시 마운트들이 해제되었습니다. @@ -679,18 +741,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. 명령을 실행할 수 없습니다. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. 이 명령은 호스트 환경에서 실행되며 루트 경로를 알아야하지만, rootMountPoint가 정의되지 않았습니다. - + The command needs to know the user's name, but no username is defined. 이 명령은 사용자 이름을 알아야 하지만, username이 정의되지 않았습니다. @@ -698,100 +760,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - 이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/>설치를 계속할 수 없습니다.<a href="#details">세부 정보...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - 이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/>설치를 계속할 수 없습니다. <a href="#details">세부 사항입니다...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - 이 컴퓨터는 %1 설치를 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/>설치를 계속할 수는 있지만 일부 기능을 사용하지 않도록 설정할 수도 있습니다. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - 이 컴퓨터는 %1 설치를 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/>설치를 계속할 수 있지만 일부 기능을 사용하지 않도록 설정할 수 있습니다. - - - - This program will ask you some questions and set up %2 on your computer. - 이 프로그램은 몇 가지 질문을 하고 컴퓨터에 %2을 설정합니다. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1에 대한 Calamares 설정 프로그램에 오신 것을 환영합니다.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>%1 설치에 오신 것을 환영합니다.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1을 위한 Calamares 설치 관리자에 오신 것을 환영합니다.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 설치 관리자에 오신 것을 환영합니다.</h1> - - - + Set keyboard model to %1.<br/> 키보드 모델을 %1로 설정합니다.<br/> - + Set keyboard layout to %1/%2. 키보드 레이아웃을 %1/%2로 설정합니다. - + + Set timezone to %1/%2. + 표준시간대를 %1/%2로 설정합니다. + + + The system language will be set to %1. 시스템 언어가 %1로 설정됩니다. - + The numbers and dates locale will be set to %1. 숫자와 날짜 로케일이 %1로 설정됩니다. - - Set timezone to %1/%2.<br/> - 표준시간대를 %1/%2로 설정합니다.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) 네트워크 설치. (사용안함: 잘못된 환경설정) - + Network Installation. (Disabled: Received invalid groups data) 네트워크 설치. (불가: 유효하지 않은 그룹 데이터를 수신했습니다) - - Network Installation. (Disabled: internal error) - + + Network Installation. (Disabled: Internal error) + 네트워크 설치. (비활성화됨: 내부 오류) - + + Network Installation. (Disabled: No package list) + 네트워크 설치. (비활성화됨: 패키지 목록 없음) + + + + Package selection + 패키지 선택 + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) 네트워크 설치. (불가: 패키지 목록을 가져올 수 없습니다. 네트워크 연결을 확인해주세요) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + 이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/>설치를 계속할 수 없습니다.<a href="#details">세부 정보...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + 이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/>설치를 계속할 수 없습니다. <a href="#details">세부 사항입니다...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + 이 컴퓨터는 %1 설치를 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/>설치를 계속할 수는 있지만 일부 기능을 사용하지 않도록 설정할 수도 있습니다. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + 이 컴퓨터는 %1 설치를 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/>설치를 계속할 수 있지만 일부 기능을 사용하지 않도록 설정할 수 있습니다. + + + + This program will ask you some questions and set up %2 on your computer. + 이 프로그램은 몇 가지 질문을 하고 컴퓨터에 %2을 설정합니다. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1> 깔라마레스 설치 프로그램 %1에 오신 것을 환영합니다</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>%1 설치에 오신 것을 환영합니다</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>깔라마레스 설치 관리자 %1에 오신 것을 환영합니다</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 설치 관리자에 오신 것을 환영합니다</h1> + + + + Your username is too long. + 사용자 이름이 너무 깁니다. + + + + '%1' is not allowed as username. + '%1'은 사용자 이름으로 허용되지 않습니다. + + + + Your username must start with a lowercase letter or underscore. + 사용자 이름은 소문자 또는 밑줄로 시작해야 합니다. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 소문자, 숫자, 밑줄 및 하이픈만 허용됩니다. + + + + Your hostname is too short. + 호스트 이름이 너무 짧습니다. + + + + Your hostname is too long. + 호스트 이름이 너무 깁니다. + + + + '%1' is not allowed as hostname. + '%1'은 호스트 이름으로 허용되지 않습니다. + + + + Only letters, numbers, underscore and hyphen are allowed. + 문자, 숫자, 밑줄 및 하이픈만 허용됩니다. + + + + Your passwords do not match! + 암호가 일치하지 않습니다! + + + + OK! + 확인! + + + + Setup Failed + 설정 실패 + + + + Installation Failed + 설치 실패 + + + + The setup of %1 did not complete successfully. + %1 설정이 제대로 완료되지 않았습니다. + + + + The installation of %1 did not complete successfully. + %1 설치가 제대로 완료되지 않았습니다. + + + + Setup Complete + 설정 완료 + + + + Installation Complete + 설치 완료 + + + + The setup of %1 is complete. + %1 설정이 완료되었습니다. + + + + The installation of %1 is complete. + %1 설치가 완료되었습니다. + + + + Package Selection + 패키지 선택 + + + + Please pick a product from the list. The selected product will be installed. + 목록에서 제품을 선택하십시오. 선택한 제품이 설치됩니다. + + + + Install option: <strong>%1</strong> + 설치 옵션: <strong>%1</strong> + + + + None + 없음 + + + + Summary + 요약 + + + + This is an overview of what will happen once you start the setup procedure. + 설정 절차를 시작하면 어떻게 되는지 간략히 설명합니다. + + + + This is an overview of what will happen once you start the install procedure. + 설치 절차를 시작하면 어떻게 되는지 간략히 설명합니다. + ContextualProcessJob - + Contextual Processes Job 컨텍스트 프로세스 작업 @@ -799,128 +996,164 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition 파티션 생성 - - MiB - MiB - - - - Partition &Type: - 파티션 유형 (&T): - - - - &Primary - 주 파티션 (&P) - - - - E&xtended - 확장 파티션 (&E) - - - - Fi&le System: - 파일 시스템 (&l): - - - - LVM LV name - LVM 논리 볼륨 이름 - - - - Flags: - 플래그: - - - - &Mount Point: - 마운트 위치 (&M): - - - + Si&ze: 크기(&z): - + + MiB + MiB + + + + Partition &Type: + 파티션 유형 (&T): + + + + Primar&y + 기본(&Y) + + + + E&xtended + 확장 파티션 (&E) + + + + Fi&le System: + 파일 시스템 (&l): + + + + LVM LV name + LVM 논리 볼륨 이름 + + + + &Mount Point: + 마운트 위치 (&M): + + + + Flags: + 플래그: + + + + Label for the filesystem + 파일시스템 레이블 + + + + FS Label: + 파일시스템 레이블: + + + En&crypt 암호화 (&c) - + Logical 논리 파티션 - + Primary 파티션 - + GPT GPT - + Mountpoint already in use. Please select another one. 마운트 위치가 이미 사용 중입니다. 다른 위치를 선택해주세요. + + + Mountpoint must start with a <tt>/</tt>. + 마운트 위치는 <tt>/</tt>로 시작해야 합니다. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + %4 항목이 있는 %3(%2)에 %1MiB 크기의 새 파티션을 만듭니다. + + + + Create new %1MiB partition on %3 (%2). + %3(%2)에 %1MiB 크기의 새 파티션을 만듭니다. + + + Create new %2MiB partition on %4 (%3) with file system %1. %1 파일 시스템으로 %4(%3)에 새 %2MiB 파티션을 만듭니다. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + <em>%4</em> 항목이 있는 <strong>%3</strong>(%2)에 <strong>%1MiB</strong> 크기의 새 파티션을 만듭니다. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + <strong>%3</strong>(%2)에 <strong>%1MiB</strong> 크기의 새 파티션을 만듭니다. + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%1</strong> 파일 시스템으로 <strong>%4</strong> (%3)에 새 <strong>%2MiB</strong> 파티션을 만듭니다. - + + Creating new %1 partition on %2. %2에 새로운 %1 파티션 테이블을 만드는 중입니다. - + The installer failed to create partition on disk '%1'. - 디스크 '%1'에 파티션을 생성하지 못했습니다. + 설치 관리자가 디스크 '%1'에 파티션을 생성하지 못했습니다. CreatePartitionTableDialog - + Create Partition Table 파티션 테이블을 만듭니다 - + Creating a new partition table will delete all existing data on the disk. 새로운 파티션 테이블의 생성은 디스크에 있는 모든 데이터를 지울 것입니다. - + What kind of partition table do you want to create? 만들고자 하는 파티션 테이블의 종류는 무엇인가요? - + Master Boot Record (MBR) 마스터 부트 레코드 (MBR) - + GUID Partition Table (GPT) GUID 파티션 테이블 (GPT) @@ -928,22 +1161,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. %2에 %1 파티션 테이블을 만듭니다. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong>에 새로운 <strong>%1</strong> 파티션 테이블을 만듭니다 (%3). - + Creating new %1 partition table on %2. %2에 새로운 %1 파티션 테이블을 만드는 중입니다. - + The installer failed to create a partition table on %1. 설치 관리자가 %1에 파티션 테이블을 만들지 못했습니다. @@ -951,45 +1184,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 %1 사용자를 만듭니다 - + Create user <strong>%1</strong>. <strong>%1</strong>사용자를 만듭니다 . - - Creating user %1. - %1 사용자를 만드는 중입니다. + + Preserving home directory + 홈 디렉터리 보존 - - Sudoers dir is not writable. - Sudoers 디렉터리가 쓰기 금지되어 있습니다. + + + Creating user %1 + %1 사용자 생성 중 - - Cannot create sudoers file for writing. - sudoers 파일을 만들 수가 없습니다. + + Configuring user %1 + %1 사용자 설정 중 - - Cannot chmod sudoers file. - sudoers 파일의 권한을 변경할 수 없습니다. - - - - Cannot open groups file for reading. - groups 파일을 읽을 수가 없습니다. + + Setting file permissions + 파일 권한 설정 CreateVolumeGroupDialog - + Create Volume Group 볼륨 그룹 생성 @@ -997,22 +1226,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. %1로 이름 지정된 새 볼륨 그룹을 생성합니다. - + Create new volume group named <strong>%1</strong>. <strong>%1</strong>로 이름 지정된 새 볼륨 그룹을 생성중입니다. - + Creating new volume group named %1. %1로 이름 지정된 새 볼륨 그룹을 생성중입니다. - + The installer failed to create a volume group named '%1'. 설치 관리자가 '%1'로 이름 지정된 볼륨 그룹을 생성하지 못했습니다. @@ -1020,41 +1249,41 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. %1로 이름 지정된 볼륨 그룹을 비활성화합니다. - + Deactivate volume group named <strong>%1</strong>. <strong>%1</strong>로 이름 지정된 볼륨 그룹을 비활성화합니다. - + The installer failed to deactivate a volume group named %1. - %1로 이름 지정된 볼륨 그룹을 비활성화하지 못했습니다. + 설치 관리자가 %1로 이름 지정된 볼륨 그룹을 비활성화하지 못했습니다. DeletePartitionJob - + Delete partition %1. %1 파티션을 지웁니다. - + Delete partition <strong>%1</strong>. <strong>%1</strong> 파티션을 지웁니다. - + Deleting partition %1. %1 파티션을 지우는 중입니다. - + The installer failed to delete partition %1. 설치 관리자가 %1 파티션을 지우지 못했습니다. @@ -1062,46 +1291,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - 선택한 저장 장치의 <strong>파티션 테이블</strong> 유형입니다.<br><br>파티션 테이블 유형을 변경하는 유일한 방법은 파티션 테이블을 처음부터 지우고 재생성하는 것입니다. 이렇게 하면 스토리지 디바이스의 모든 데이터가 삭제됩니다.<br>달리 선택하지 않으면 이 설치 관리자는 현재 파티션 테이블을 유지합니다.<br>확실하지 않은 경우 최신 시스템에서는 GPT가 선호됩니다. - - - + This device has a <strong>%1</strong> partition table. 이 장치는 <strong>%1</strong> 파티션 테이블을 갖고 있습니다. - + 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. 이것은 <strong>루프</strong> 장치입니다.<br><br>파티션 테이블이 없는 사이비 장치이므로 파일을 블록 장치로 액세스할 수 있습니다. 이러한 종류의 설정은 일반적으로 단일 파일 시스템만 포함합니다. - + 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. 이 설치 관리자는 선택한 저장 장치에서 <strong>파티션 테이블을 검색할 수 없습니다.</strong><br><br>장치에 파티션 테이블이 없거나 파티션 테이블이 손상되었거나 알 수 없는 유형입니다.<br>이 설치 관리자는 자동으로 또는 수동 파티션 페이지를 통해 새 파티션 테이블을 생성할 수 있습니다. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>EFI</strong> 부팅 환경에서 시작하는 최신 시스템에 권장되는 파티션 테이블 유형입니다. - + <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. <br><br>이 파티션 테이블 유형은 <strong>BIOS</strong> 부팅 환경에서 시작하는 이전 시스템에만 권장됩니다. GPT는 대부분의 다른 경우에 권장됩니다.<br><br><strong>경고 : </strong>MBR 파티션 테이블은 구식 MS-DOS 표준입니다.<br><em>기본</em> 파티션은 4개만 생성할 수 있으며, 이 4개 중 1개는 <em>확장</em> 파티션일 수 있으며, 이 파티션에는 여러 개의 <em>논리</em> 파티션이 포함될 수 있습니다. + + + 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. + 선택한 저장 장치의 <strong>파티션 테이블</strong> 유형입니다.<br><br>파티션 테이블 유형을 변경하는 유일한 방법은 파티션 테이블을 처음부터 지우고 재생성하는 것입니다. 이렇게 하면 스토리지 디바이스의 모든 데이터가 삭제됩니다.<br>달리 선택하지 않으면 이 설치 관리자는 현재 파티션 테이블을 유지합니다.<br>확실하지 않은 경우 최신 시스템에서는 GPT가 선호됩니다. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1339,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Dracut에 대한 LUKS 설정을 %1에 쓰기 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut에 대한 LUKS 설정 쓰기 건너뛰기 : "/" 파티션이 암호화되지 않음 - + Failed to open %1 %1을 열지 못했습니다 @@ -1128,7 +1357,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job C++ 더미 작업 @@ -1136,123 +1365,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition 기존 파티션을 수정합니다 - - Content: - 내용 : + + Con&tent: + 내용(&t): - + &Keep 유지 (&K) - + Format 포맷 - + Warning: Formatting the partition will erase all existing data. 경고: 파티션을 포맷하는 것은 모든 데이터를 지울 것입니다. - + &Mount Point: 마운트 위치 (&M): - + Si&ze: 크기 (&z): - + MiB MiB - + Fi&le System: 파일 시스템 (&l): - + Flags: 플래그: - - Mountpoint already in use. Please select another one. - 마운트 위치가 이미 사용 중입니다. 다른 위치를 선택해주세요. + + Label for the filesystem + 파일시스템 레이블 + + + + FS Label: + 파일시스템 레이블: EncryptWidget - + Form 형식 - + En&crypt system 암호화 시스템 (&c) - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + 전체 시스템을 암호화할 만큼 충분히 암호화를 지원하지 않는 것 같습니다. 암호화를 활성화할 수 있지만 성능이 저하될 수 있습니다. + + + Passphrase 암호 - + Confirm passphrase 암호 확인 - + + Please enter the same passphrase in both boxes. 암호와 암호 확인 상자에 동일한 값을 입력해주세요. + + ErrorDialog + + + Details: + 상세: + + + + Would you like to paste the install log to the web? + 설치 로그를 웹에 붙여넣으시겠습니까? + + FillGlobalStorageJob - + Set partition information 파티션 정보 설정 - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <em>%3</em> 기능이 있는 <strong>새</strong> %2 시스템 파티션에 %1을(를) 설치합니다. + + + Install %1 on <strong>new</strong> %2 system partition. <strong>새</strong> %2 시스템 파티션에 %1를설치합니다. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - 마운트 위치 <strong>%1</strong>을 사용하여 <strong>새</strong> 파티션 %2를 설정합니다. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + 마운트 위치 <strong>%1</strong> 및 기능 <em>%3</em>(으)로 <strong>새</strong> %2 파티션을 설정합니다. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + 마운트 위치 <strong>%1</strong>%3(으)로 <strong>새</strong> %2 파티션을 지정합니다. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + <em>%4</em> 기능이 있는 %3 시스템 파티션 <strong>%1</strong>에 %2을(를) 설치합니다. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + 마운트 위치 <strong>%2</strong> 및 기능 <em>%4</em>(으)로 %3 파티션 <strong>%1</strong>을(를) 지정합니다. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + 마운트 위치 <strong>%2</strong>%4으로 %3 파티션 <strong>%1</strong>을(를) 지정합니다. + + + Install %2 on %3 system partition <strong>%1</strong>. 시스템 파티션 <strong>%1</strong>의 %3에 %2를 설치합니다. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - <strong>%2</strong> 마운트 위치를 사용하여 파티션 <strong>%1</strong>의 %3 을 설정합니다. - - - + Install boot loader on <strong>%1</strong>. <strong>%1</strong>에 부트 로더를 설치합니다. - + Setting up mount points. 마운트 위치를 설정 중입니다. @@ -1260,93 +1533,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form 형식 - + &Restart now 지금 재시작 (&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>모두 완료.</h1><br/>%1이 컴퓨터에 설정되었습니다.<br/>이제 새 시스템을 사용할 수 있습니다. - + <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> <html><head/><body><p>이 확인란을 선택하면 <span style="font-style:italic;">완료</span>를 클릭하거나 설치 프로그램을 닫으면 시스템이 즉시 다시 시작됩니다.</p></body></html> - + <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. <h1>모두 완료되었습니다.</h1><br/>%1이 컴퓨터에 설치되었습니다.<br/>이제 새 시스템으로 다시 시작하거나 %2 라이브 환경을 계속 사용할 수 있습니다. - + <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> <html><head/><body><p>이 확인란을 선택하면 <span style="font-style:italic;">완료</span>를 클릭하거나 설치 관리자를 닫으면 시스템이 즉시 다시 시작됩니다.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>설치 실패</h1><br/>%1이 컴퓨터에 설정되지 않았습니다.<br/>오류 메시지 : %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>설치에 실패했습니다.</h1><br/>%1이 컴퓨터에 설치되지 않았습니다.<br/>오류 메시지는 %2입니다. - FinishedViewStep + FinishedQmlViewStep - + Finish 완료 + + + FinishedViewStep - - Setup Complete - 설치 완료 - - - - Installation Complete - 설치 완료 - - - - The setup of %1 is complete. - %1 설치가 완료되었습니다. - - - - The installation of %1 is complete. - %1의 설치가 완료되었습니다. + + Finish + 완료 FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. %4의 %1 포맷 파티션(파일 시스템: %2, 크기: %3 MiB) - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%3MiB</strong> 파티션 <strong>%1</strong>을 파일 시스템 <strong>%2</strong>로 포맷합니다. - + Formatting partition %1 with file system %2. %1 파티션을 %2 파일 시스템으로 포맷하는 중입니다. - + The installer failed to format partition %1 on disk '%2'. 설치 관리자가 '%2' 디스크에 있는 %1 파티션을 포맷하지 못했습니다. @@ -1354,80 +1615,80 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space %1 GiB 이상의 사용 가능한 드라이브 공간이 있음 - + There is not enough drive space. At least %1 GiB is required. 드라이브 공간이 부족합니다. %1 GiB 이상이 필요합니다. - + has at least %1 GiB working memory %1 GiB 이상의 작동 메모리가 있습니다. - + The system does not have enough working memory. At least %1 GiB is required. 시스템에 충분한 작동 메모리가 없습니다. %1 GiB 이상이 필요합니다. - + is plugged in to a power source 전원 공급이 연결되어 있습니다 - + The system is not plugged in to a power source. 이 시스템은 전원 공급이 연결되어 있지 않습니다 - + is connected to the Internet 인터넷에 연결되어 있습니다 - + The system is not connected to the Internet. 이 시스템은 인터넷에 연결되어 있지 않습니다. - + is running the installer as an administrator (root) - 설치 프로그램을 관리자(루트)로 실행 중입니다 + 설치 관리자를 관리자(루트)로 실행 중입니다 - + The setup program is not running with administrator rights. 설치 프로그램이 관리자 권한으로 실행되고 있지 않습니다. - + The installer is not running with administrator rights. 설치 관리자가 관리자 권한으로 동작하고 있지 않습니다. - + has a screen large enough to show the whole installer - 전체 설치 프로그램을 표시할 수 있을 만큼 큰 화면이 있습니다 + 전체 설치 관리자를 표시할 수 있을 만큼 큰 화면이 있습니다 - + The screen is too small to display the setup program. 화면이 너무 작아서 설정 프로그램을 표시할 수 없습니다. - + The screen is too small to display the installer. - 설치 관리자를 표시하기에 화면이 너무 작습니다. + 설치 관리자를 표시하기에는 화면이 너무 작습니다. HostInfoJob - + Collecting information about your machine. 컴퓨터에 대한 정보를 수집하는 중입니다. @@ -1435,25 +1696,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier OEM 배치 식별자 - + Could not create directories <code>%1</code>. - <code>%1</code> 디렉토리를 생성할 수 없습니다. + <code>%1</code> 디렉터리를 생성할 수 없습니다. - + Could not open file <code>%1</code>. <code>%1</code> 파일을 열 수 없습니다. - + Could not write to file <code>%1</code>. <code>%1</code> 파일에 쓸 수 없습니다. @@ -1461,7 +1722,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. mkinitcpio를 사용하여 initramfs 만드는 중. @@ -1469,7 +1730,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. initramfs를 만드는 중. @@ -1477,17 +1738,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole이 설치되지 않았음 - + Please install KDE Konsole and try again! KDE Konsole을 설치한 후에 다시 시도해주세요! - + Executing script: &nbsp;<code>%1</code> 스크립트 실행: &nbsp;<code>%1</code> @@ -1495,28 +1756,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script 스크립트 - - KeyboardPage - - - Set keyboard model to %1.<br/> - 키보드 모델을 %1로 설정합니다.<br/> - - - - Set keyboard layout to %1/%2. - 키보드 레이아웃을 %1/%2로 설정합니다. - - KeyboardQmlViewStep - + Keyboard 키보드 @@ -1524,7 +1772,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard 키보드 @@ -1532,65 +1780,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting 시스템 로케일 설정 - + 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>. 시스템 로케일 설정은 일부 명령줄 사용자 인터페이스 요소의 언어 및 문자 집합에 영향을 줍니다.<br/>현재 설정은 <strong>%1</strong>입니다. - + &Cancel 취소 (&C) - + &OK 확인 (&O) + + LOSHJob + + + Configuring encrypted swap. + 암호화된 스왑 구성 중. + + + + No target system available. + 대상 시스템을 사용할 수 없습니다. + + + + No rootMountPoint is set. + 루트마운트위치가 지정되지 않았습니다. + + + + No configFilePath is set. + 구성파일경로가 지정되지 않았습니다. + + LicensePage - + Form 형식 - + <h1>License Agreement</h1> <h1>라이센스 계약</h1> - + I accept the terms and conditions above. 상기 계약 조건을 모두 동의합니다. - + Please review the End User License Agreements (EULAs). 최종 사용자 사용권 계약(EULA)을 검토하십시오. - + This setup procedure will install proprietary software that is subject to licensing terms. 이 설정 절차에서는 라이센스 조건에 해당하는 독점 소프트웨어를 설치합니다. - + If you do not agree with the terms, the setup procedure cannot continue. 약관에 동의하지 않으면 설치 절차를 계속할 수 없습니다. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. 이 설치 절차는 추가 기능을 제공하고 사용자 환경을 향상시키기 위해 라이선스 조건에 따라 독점 소프트웨어를 설치할 수 있습니다. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 조건에 동의하지 않으면 독점 소프트웨어가 설치되지 않으며 대신 오픈 소스 대체 소프트웨어가 사용됩니다. @@ -1598,7 +1869,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License 라이센스 @@ -1606,109 +1877,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 드라이버</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 그래픽 드라이버</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 브라우저 플러그인</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 코덱</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 패키지</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 파일: %1 - + + Hide license text + 라이센스 텍스트 숨기기 + + + Show the license text 라이센스 텍스트 표시 - + Open license agreement in browser. 브라우저에서 라이센스 계약 열기 - - - Hide license text - 라이센스 텍스트 숨기기 - LocalePage - - The system language will be set to %1. - 시스템 언어가 %1로 설정됩니다. - - - - The numbers and dates locale will be set to %1. - 숫자와 날짜 로케일이 %1로 설정됩니다. - - - + Region: 지역 : - + Zone: 표준시간대 : - - + + &Change... 변경 (&C)... - - - Set timezone to %1/%2.<br/> - 표준시간대를 %1/%2로 설정합니다.<br/> - LocaleQmlViewStep - + Location 위치 + + LocaleTests + + + Quit + 종료 + + LocaleViewStep - + Location 위치 @@ -1716,35 +1980,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. LUKS 키 파일 구성 중. - - + + No partitions are defined. 파티션이 정의되지 않았습니다. - - - + + + Encrypted rootfs setup error 암호화된 rootfs 설정 오류 - + Root partition %1 is LUKS but no passphrase has been set. 루트 파티션 %1이(가) LUKS이지만 암호가 설정되지 않았습니다. - + Could not create LUKS key file for root partition %1. 루트 파티션 %1에 대한 LUKS 키 파일을 생성할 수 없습니다. - + Could not configure LUKS key file on partition %1. 파티션 %1에 LUKS 키 파일을 설정할 수 없습니다. @@ -1752,124 +2016,140 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. machine-id를 생성합니다. - + Configuration Error 구성 오류 - + No root mount point is set for MachineId. MachineId에 대해 설정된 루트 마운트 지점이 없습니다. + + Map + + + Timezone: %1 + 표준시간대: %1 + + + + 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. + 설치 관리자가 로케일 및 시간대 설정을 제안할 수 있도록 지도에서 원하는 위치를 선택하십시오. + 아래에 제시된 설정을 미세 조정할 수 있습니다. 마우스를 끌어서 이동하고 확대/축소하려면 +/- 버튼을 사용하거나 + 확대/축소하려면 마우스를 스크롤하여 지도를 검색하십시오. + + NetInstallViewStep - - + Package selection 패키지 선택 - + Office software 오피스 소프트웨어 - + Office package 오피스 패키지 - + Browser software 브라우저 소프트웨어 - + Browser package 브라우저 패키지 - + Web browser 웹 브라우저 - + Kernel 커널 - + Services 서비스 - + Login 로그인 - + Desktop 데스크탑 - + Applications 애플리케이션 - + Communication - + 통신 - + Development - + 개발 - + Office - + 오피스 - + Multimedia - + 멀티미디어 - + Internet - + 인터넷 - + Theming - + 테마 - + Gaming - + 게임 - + Utilities - + 유틸리티 NotesQmlViewStep - + Notes 노트 @@ -1877,278 +2157,326 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: 배치(&T): - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>여기에 배치 식별자를 입력합니다. 대상 시스템에 저장됩니다.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - <html><head/><body><h1>OEM 구성</h1> <p>Calamares는 대상 시스템을 구성하는 동안 OEM 설정을 사용합니다.</p></body></html> + <html><head/><body><h1>OEM 구성</h1> <p>깔라마레스는 대상 시스템을 구성하는 동안 OEM 설정을 사용합니다.</p></body></html> OEMViewStep - + OEM Configuration OEM 구성 - + Set the OEM Batch Identifier to <code>%1</code>. OEM 배치 식별자를 <code>%1</code>로 설정합니다. + + Offline + + + Select your preferred Region, or use the default settings. + 원하는 지역을 선택하거나, 기본 설정을 사용하십시오. + + + + + + Timezone: %1 + 표준시간대: %1 + + + + Select your preferred Zone within your Region. + 선호하는 표준시간대와 지역을 선택하세요. + + + + Zones + 표준시간대 + + + + You can fine-tune Language and Locale settings below. + 아래에서 언어 및 로케일을 상세하게 설정할 수 있습니다. + + PWQ - + Password is too short 암호가 너무 짧습니다 - + Password is too long 암호가 너무 깁니다 - + Password is too weak 암호가 너무 취약합니다 - + Memory allocation error when setting '%1' '%1'을 설정하는 중 메모리 할당 오류 - + Memory allocation error 메모리 할당 오류 - + The password is the same as the old one 암호가 이전과 같습니다 - + The password is a palindrome 암호가 앞뒤로 동일해 보이는 단어입니다 - + The password differs with case changes only 암호가 대소문자만 다릅니다 - + The password is too similar to the old one 암호가 이전 암호와 너무 유사합니다 - + The password contains the user name in some form 암호가 사용자 이름의 일부를 포함하고 있습니다. - + The password contains words from the real name of the user in some form 암호가 사용자 실명의 일부를 포함하고 있습니다 - + The password contains forbidden words in some form 암호가 금지된 단어를 포함하고 있습니다 - - The password contains less than %1 digits - 암호가 %1개 미만의 숫자를 포함하고 있습니다 - - - + The password contains too few digits 암호가 너무 적은 개수의 숫자들을 포함하고 있습니다 - - The password contains less than %1 uppercase letters - 암호가 %1개 미만의 대문자를 포함하고 있습니다 - - - + The password contains too few uppercase letters 암호가 너무 적은 개수의 대문자를 포함하고 있습니다 - - - The password contains less than %1 lowercase letters - 암호가 %1개 미만의 소문자를 포함하고 있습니다 + + + The password contains fewer than %n lowercase letters + + 암호에 %n자 미만의 소문자가 있습니다 + - + The password contains too few lowercase letters 암호가 너무 적은 개수의 소문자를 포함하고 있습니다 - - The password contains less than %1 non-alphanumeric characters - 암호가 %1개 미만의 영숫자가 아닌 문자를 포함하고 있습니다 - - - + The password contains too few non-alphanumeric characters 암호가 너무 적은 개수의 영숫자가 아닌 문자를 포함하고 있습니다 - - The password is shorter than %1 characters - 암호가 %1 문자보다 짧습니다 - - - + The password is too short 암호가 너무 짧습니다 - - The password is just rotated old one - 암호가 이전 암호로 바뀌었습니다 - - - - The password contains less than %1 character classes - 암호에 포함된 문자 클래스가 %1개 미만입니다 - - - + The password does not contain enough character classes 암호에 문자 클래스가 충분하지 않습니다 - - The password contains more than %1 same characters consecutively - 암호에 동일 문자가 %1개 이상 연속해 있습니다 - - - + The password contains too many same characters consecutively 암호에 너무 많은 동일 문자가 연속해 있습니다 - - The password contains more than %1 characters of the same class consecutively - 암호에 동일 문자 클래스가 %1개 이상 연속해 있습니다. - - - + The password contains too many characters of the same class consecutively 암호에 동일 문자 클래스가 너무 많이 연속해 있습니다. - - - The password contains monotonic sequence longer than %1 characters - 암호에 %1개 이상의 단순 문자열이 포함되어 있습니다 + + + The password contains fewer than %n digits + + 암호에 %n자 미만의 숫자가 포함되어 있습니다 + + + + + The password contains fewer than %n uppercase letters + + 암호에 %n자 미만의 대문자가 포함되어 있습니 + + + + + The password contains fewer than %n non-alphanumeric characters + + 암호에 %n자 미만의 영숫자가 아닌 문자가 포함되어 있습니 + + + + + The password is shorter than %n characters + + 암호가 %n자보다 짧습니다 + - + + The password is a rotated version of the previous one + 암호는 이전 암호의 순환 버전입니다 + + + + The password contains fewer than %n character classes + + 암호에 %n개 미만의 문자 클래스가 포함되어 있습니다 + + + + + The password contains more than %n same characters consecutively + + 암호에 연속적으로 %n자 이상의 동일한 문자가 있습니다 + + + + + The password contains more than %n characters of the same class consecutively + + 암호에 연속적으로 동일한 클래스의 %n자 이상이 포함되어 있습니다 + + + + + The password contains monotonic sequence longer than %n characters + + 암호에 %n자보다 긴 단조로운 시퀀스가 포함되어 있습니다 + + + + The password contains too long of a monotonic character sequence 암호에 너무 길게 단순 문자열이 포함되어 있습니다 - + No password supplied 암호가 제공 되지 않음 - + Cannot obtain random numbers from the RNG device RNG 장치에서 임의의 번호를 가져올 수 없습니다. - + Password generation failed - required entropy too low for settings 암호 생성 실패 - 설정에 필요한 엔트로피가 너무 작음 - + The password fails the dictionary check - %1 암호가 사전 검사에 실패했습니다 - %1 - + The password fails the dictionary check 암호가 사전 검사에 실패했습니다. - + Unknown setting - %1 설정되지 않음 - %1 - + Unknown setting 설정되지 않음 - + Bad integer value of setting - %1 설정의 잘못된 정수 값 - %1 - + Bad integer value 잘못된 정수 값 - + Setting %1 is not of integer type 설정값 %1은 정수 유형이 아닙니다. - + Setting is not of integer type 설정값이 정수 형식이 아닙니다 - + Setting %1 is not of string type 설정값 %1은 문자열 유형이 아닙니다. - + Setting is not of string type 설정값이 문자열 유형이 아닙니다. - + Opening the configuration file failed 구성 파일을 열지 못했습니다. - + The configuration file is malformed 구성 파일의 형식이 잘못되었습니다. - + Fatal failure 치명적인 실패 - + Unknown error 알 수 없는 오류 - + Password is empty 비밀번호가 비어 있습니다 @@ -2156,40 +2484,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form 형식 - + Product Name 제품 이름 - + TextLabel TextLabel - + Long Product Description 긴 제품 설명 - + Package Selection 패키지 선택 - + Please pick a product from the list. The selected product will be installed. 목록에서 제품을 선택하십시오. 선택한 제품이 설치됩니다. + + PackageChooserQmlViewStep + + + Packages + 패키지 + + PackageChooserViewStep - + Packages 패키지 @@ -2197,12 +2533,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name 이름 - + Description 설명 @@ -2210,17 +2546,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form 형식 - + Keyboard Model: 키보드 모델: - + Type here to test your keyboard 키보드를 테스트하기 위해 여기에 입력하세요 @@ -2228,96 +2564,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form 형식 - + What is your name? 이름이 무엇인가요? - - What name do you want to use to log in? - 로그인할 때 사용할 이름은 무엇인가요? - - - - Choose a password to keep your account safe. - 사용자 계정의 보안을 유지하기 위한 암호를 선택하세요. - - - - - <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> - <small>확인을 위해 암호를 두번 입력해 주세요. 올바른 암호에는 문자, 숫자 및 구두점이 혼합되어 있으며 최소 8자 이상이어야 하며 정기적으로 변경해야 합니다.</small> - - - - What is the name of this computer? - 이 컴퓨터의 이름은 무엇인가요? - - - + Your Full Name 전체 이름 - + + What name do you want to use to log in? + 로그인할 때 사용할 이름은 무엇인가요? + + + login 로그인 - + + What is the name of this computer? + 이 컴퓨터의 이름은 무엇인가요? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>이 이름은 컴퓨터가 네트워크의 다른 사용자에게 표시되도록 할 때 사용됩니다.</small> - + Computer Name 컴퓨터 이름 - - + + Choose a password to keep your account safe. + 사용자 계정의 보안을 유지하기 위한 암호를 선택하세요. + + + + + <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> + <small>확인을 위해 암호를 두번 입력해 주세요. 올바른 암호에는 문자, 숫자 및 구두점이 혼합되어 있으며 최소 8자 이상이어야 하며 정기적으로 변경해야 합니다.</small> + + + + Password 비밀번호 - - + + Repeat Password 비밀번호 반복 - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. 이 확인란을 선택하면 비밀번호 강도 검사가 수행되며 불충분한 비밀번호를 사용할 수 없습니다. - + Require strong passwords. 강력한 비밀번호가 필요합니다. - + Log in automatically without asking for the password. 암호를 묻지 않고 자동으로 로그인합니다. - + Use the same password for the administrator account. 관리자 계정에 대해 같은 암호를 사용합니다. - + Choose a password for the administrator account. 관리자 계정을 위한 암호를 선택하세요. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>입력 오류를 검사하기 위해 암호를 똑같이 두번 입력하세요.</small> @@ -2325,42 +2661,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root 루트 - + Home - + Boot 부트 - + EFI system EFI 시스템 - + Swap 스왑 - + New partition for %1 %1에 대한 새로운 파티션 - + New partition 새로운 파티션 - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2705,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space 여유 공간 - - + + New partition 새로운 파티션 - + Name 이름 - + File System 파일 시스템 - + + File System Label + 파일 시스템 레이블 + + + Mount Point 마운트 위치 - + Size 크기 @@ -2404,77 +2745,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form 형식 - + Storage de&vice: 저장 장치 (&v): - + &Revert All Changes 모든 변경 되돌리기 (&R) - + New Partition &Table 새 파티션 테이블 (&T) - + Cre&ate 생성 (&a) - + &Edit 수정 (&E) - + &Delete 삭제 (&D) - + New Volume Group 새 볼륨 그룹 - + Resize Volume Group 볼륨 그룹 크기변경 - + Deactivate Volume Group 볼륨 그룹 비활성화 - + Remove Volume Group 볼륨 그룹 제거 - + I&nstall boot loader on: 부트로더 설치 위치 (&l) : - + Are you sure you want to create a new partition table on %1? %1에 새 파티션 테이블을 생성하시겠습니까? - + Can not create new partition 새로운 파티션을 만들 수 없습니다 - + 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. %1의 파티션 테이블에는 이미 %2 기본 파티션이 있으므로 더 이상 추가할 수 없습니다. 대신 기본 파티션 하나를 제거하고 확장 파티션을 추가하세요. @@ -2482,117 +2823,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... 시스템 정보 수집 중... - + Partitions 파티션 - - Install %1 <strong>alongside</strong> another operating system. - %1을 다른 운영 체제와 <strong>함께</strong> 설치합니다. + + Unsafe partition actions are enabled. + 안전하지 않은 파티션 작업이 활성화되었습니다. - - <strong>Erase</strong> disk and install %1. - 디스크를 <strong>지우고</strong> %1을 설치합니다. + + Partitioning is configured to <b>always</b> fail. + 파티셔닝이 <b>항상</b> 실패하도록 구성되어 있습니다. - - <strong>Replace</strong> a partition with %1. - 파티션을 %1로 <strong>바꿉니다</strong>. + + No partitions will be changed. + 파티션 없음은 변경될 것입니다. - - <strong>Manual</strong> partitioning. - <strong>수동</strong> 파티션 작업 - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - 디스크 <strong>%2</strong> (%3)에 다른 운영 체제와 <strong>함께</strong> %1을 설치합니다. - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - 디스크 <strong>%2</strong> (%3)를 <strong>지우고</strong> %1을 설치합니다. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - 디스크 <strong>%2</strong> (%3)의 파티션을 %1로 <strong>바꿉니다</strong>. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - 디스크 <strong>%1</strong> (%2) 의 <strong>수동</strong> 파티션 작업입니다. - - - - Disk <strong>%1</strong> (%2) - 디스크 <strong>%1</strong> (%2) - - - + Current: 현재: - + After: 이후: - + No EFI system partition configured EFI 시스템 파티션이 설정되지 않았습니다 - - 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>esp</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. - %1를 시작하려면 EFI 시스템 파티션이 필요합니다.<br/><br/>EFI 시스템 파티션을 구성하려면 돌아가서 <strong>esp</strong> 플래그를 사용하도록 설정한 FAT32 파일 시스템을 선택하거나 생성하여 <strong>%2</strong> 위치를 마운트합니다.<br/><br/>EFI 시스템 파티션을 설정하지 않고 계속할 수 있지만 시스템이 시작되지 않을 수 있습니다. + + EFI system partition configured incorrectly + EFI 시스템 파티션이 잘못 구성됨 - - EFI system partition flag not set - EFI 시스템 파티션 플래그가 설정되지 않았습니다 + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + %1을(를) 시작하려면 EFI 시스템 파티션이 필요합니다.<br/><br/>EFI 시스템 파티션을 구성하려면 돌아가서 적절한 파일 시스템을 선택하거나 생성하십시오. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1를 시작하려면 EFI 시스템 파티션이 필요합니다.<br/><br/><strong>%2</strong> 마운트 위치로 파티션이 구성되었지만 해당 <strong>esp</strong> 플래그가 설정되지 않았습니다.<br/>플래그를 설정하려면 돌아가서 파티션을 편집합니다.<br/><br/>플래그를 설정하지 않고 계속할 수 있지만 시스템이 시작되지 않을 수 있습니다. + + The filesystem must be mounted on <strong>%1</strong>. + 파일 시스템은 <strong>%1</strong>에 마운트되어야 합니다. - + + The filesystem must have type FAT32. + 파일 시스템에는 FAT32 유형이 있어야 합니다. + + + + The filesystem must be at least %1 MiB in size. + 파일 시스템의 크기는 %1MiB 이상이어야 합니다. + + + + The filesystem must have flag <strong>%1</strong> set. + 파일 시스템에 플래그 <strong>%1</strong> 세트가 있어야 합니다. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + EFI 시스템 파티션을 설정하지 않고 계속할 수 있지만 시스템이 시작되지 않을 수 있습니다. + + + Option to use GPT on BIOS - + BIOS에서 GPT를 사용하는 옵션 - - 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. - + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT 파티션 테이블은 모든 시스템에 가장 적합한 옵션입니다. 이 설치 관리자는 BIOS 시스템에 대한 이러한 설정도 지원합니다.<br/><br/>BIOS에서 GPT 파티션 테이블을 구성하려면(아직 수행하지 않은 경우) 돌아가서 파티션 테이블을 GPT로 설정한 다음 <strong>%2</strong> 플래그가 활성화된 8MB의 포맷되지 않은 파티션을 생성하십시오.<br/><br/>GPT가 있는 BIOS 시스템에서 %1을(를) 시작하려면 포맷되지 않은 8MB 파티션이 필요합니다. - + Boot partition not encrypted 부트 파티션이 암호화되지 않았습니다 - + 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. 암호화된 루트 파티션과 함께 별도의 부팅 파티션이 설정되었지만 부팅 파티션은 암호화되지 않았습니다.<br/><br/>중요한 시스템 파일은 암호화되지 않은 파티션에 보관되기 때문에 이러한 설정과 관련하여 보안 문제가 있습니다.<br/>원하는 경우 계속할 수 있지만 나중에 시스템을 시작하는 동안 파일 시스템 잠금이 해제됩니다.<br/>부팅 파티션을 암호화하려면 돌아가서 다시 생성하여 파티션 생성 창에서 <strong>암호화</strong>를 선택합니다. - + has at least one disk device available. 하나 이상의 디스크 장치를 사용할 수 있습니다. - + There are no partitions to install on. 설치를 위한 파티션이 없습니다. @@ -2600,13 +2931,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job 플라즈마 모양과 느낌 작업 - - + + Could not select KDE Plasma Look-and-Feel package KDE 플라즈마 모양과 느낌 패키지를 선택할 수 없습니다 @@ -2614,17 +2945,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form 형식 - + 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. KDE Plasma Desktop의 모양과 느낌을 선택하세요. 시스템을 설정한 후 이 단계를 건너뛰고 모양과 느낌을 구성할 수도 있습니다. 모양과 느낌 선택을 클릭하면 해당 모양을 미리 볼 수 있습니다. - + 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. KDE Plasma Desktop의 모양과 느낌을 선택하세요. 또한 시스템이 설치되면 이 단계를 건너뛰고 모양과 느낌을 구성할 수도 있습니다. 모양과 느낌 선택을 클릭하면 해당 모양을 미리 볼 수 있습니다. @@ -2632,7 +2963,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2640,17 +2971,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... 나중을 위해 파일들을 저장하는 중... - + No files configured to save for later. 나중을 위해 저장될 설정된 파일들이 없습니다. - + Not all of the configured files could be preserved. 모든 설정된 파일들이 보존되는 것은 아닙니다. @@ -2658,14 +2989,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. 명령으로부터 아무런 출력이 없습니다. - + Output: @@ -2674,52 +3005,52 @@ Output: - + External command crashed. 외부 명령이 실패했습니다. - + Command <i>%1</i> crashed. <i>%1</i> 명령이 실패했습니다. - + External command failed to start. 외부 명령을 시작하지 못했습니다. - + Command <i>%1</i> failed to start. <i>%1</i> 명령을 시작하지 못했습니다. - + Internal error when starting command. 명령을 시작하는 중에 내부 오류가 발생했습니다. - + Bad parameters for process job call. 프로세스 작업 호출에 대한 잘못된 매개 변수입니다. - + External command failed to finish. 외부 명령을 완료하지 못했습니다. - + Command <i>%1</i> failed to finish in %2 seconds. <i>%1</i> 명령을 %2초 안에 완료하지 못했습니다. - + External command finished with errors. 외부 명령이 오류와 함께 완료되었습니다. - + Command <i>%1</i> finished with exit code %2. <i>%1</i> 명령이 종료 코드 %2와 함께 완료되었습니다. @@ -2727,89 +3058,95 @@ Output: QObject - - Default Keyboard Model - 기본 키보드 모델 - - - - - Default - 기본 - - - - unknown - 알 수 없음 - - - - extended - 확장됨 - - - - unformatted - 포맷되지 않음 - - - - swap - 스왑 - - - - Unpartitioned space or unknown partition table - 분할되지 않은 공간 또는 알 수 없는 파티션 테이블입니다. - - - - (no mount point) - (마운트 위치 없음) - - - - Requirements checking for module <i>%1</i> is complete. - <i>%1</i> 모듈에 대한 요구사항 검사가 완료되었습니다. - - - + %1 (%2) %1 (%2) - - No product - 제품 없음 + + unknown + 알 수 없음 - - No description provided. - 설명이 제공되지 않았습니다. + + extended + 확장됨 - - - - + + unformatted + 포맷되지 않음 + + + + swap + 스왑 + + + + + Default + 기본 + + + + + + File not found 파일을 찾을 수 없음 - + Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> 경로는 절대 경로여야 합니다. - + + Directory not found + 디렉터리를 찾을 수 없습니다 + + + + Could not create new random file <pre>%1</pre>. 새 임의 파일 <pre>%1</pre>을(를) 만들 수 없습니다. + + + No product + 제품 없음 + + + + No description provided. + 설명이 제공되지 않았습니다. + + + + (no mount point) + (마운트 위치 없음) + + + + Unpartitioned space or unknown partition table + 분할되지 않은 공간 또는 알 수 없는 파티션 테이블입니다. + + + + Recommended + + + <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> + <p>이 컴퓨터는 %1 설정을 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/> + 설치를 계속할 수 있지만 일부 기능이 비활성화되었을 수 있습니다.</p> + RemoveUserJob - + Remove live user from target system 대상 시스템에서 라이브 사용자 제거 @@ -2817,18 +3154,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. %1로 이름 지정된 볼륨 그룹을 제거합니다. - + Remove Volume Group named <strong>%1</strong>. <strong>%1</strong>로 이름 지정된 볼륨 그룹을 제거합니다. - + The installer failed to remove a volume group named '%1'. 설치 관리자가 '%1'이라는 볼륨 그룹을 제거하지 못했습니다. @@ -2836,143 +3173,160 @@ Output: ReplaceWidget - + Form 형식 - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1을 설치할 위치를 선택합니다.<br/><font color="red">경고: </font>선택한 파티션의 모든 파일이 삭제됩니다. - + The selected item does not appear to be a valid partition. 선택된 항목은 유효한 파티션으로 표시되지 않습니다. - + %1 cannot be installed on empty space. Please select an existing partition. %1은 빈 공간에 설치될 수 없습니다. 존재하는 파티션을 선택해주세요. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1은 확장 파티션에 설치될 수 없습니다. 주 파티션 혹은 논리 파티션을 선택해주세요. - + %1 cannot be installed on this partition. %1은 이 파티션에 설치될 수 없습니다. - + Data partition (%1) 데이터 파티션 (%1) - + Unknown system partition (%1) 알 수 없는 시스템 파티션 (%1) - + %1 system partition (%2) %1 시스템 파티션 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>%1 파티션이 %2에 비해 너무 작습니다. 용량이 %3 GiB 이상인 파티션을 선택하십시오. - + <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. <strong>%2</strong><br/><br/>이 시스템에서는 EFI 시스템 파티션을 찾을 수 없습니다. 돌아가서 수동 파티션 작업을 사용하여 %1을 설정하세요. - - - + + + <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. <strong>%3</strong><br/><br/>%1이 %2에 설치됩니다.<br/><font color="red">경고: </font>%2 파티션의 모든 데이터가 손실됩니다. - + The EFI system partition at %1 will be used for starting %2. %1의 EFI 시스템 파티션은 %2의 시작으로 사용될 것입니다. - + EFI system partition: EFI 시스템 파티션: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/> + 설치를 계속할 수 없습니다.</p> + + + + <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> + <p>이 컴퓨터는 %1 설정을 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/> + 설치를 계속할 수 있지만 일부 기능이 비활성화되었을 수 있습니다.</p> + + ResizeFSJob - + Resize Filesystem Job 파일시스템 작업 크기조정 - + Invalid configuration 잘못된 설정 - + The file-system resize job has an invalid configuration and will not run. 파일 시스템 크기 조정 작업에 잘못된 설정이 있으며 실행되지 않습니다. - + KPMCore not Available KPMCore 사용할 수 없음 - + Calamares cannot start KPMCore for the file-system resize job. Calamares는 파일 시스템 크기 조정 작업을 위해 KPMCore를 시작할 수 없습니다. - - - - - + + + + + Resize Failed 크기조정 실패 - + The filesystem %1 could not be found in this system, and cannot be resized. 이 시스템에서 파일 시스템 %1를 찾을 수 없으므로 크기를 조정할 수 없습니다. - + The device %1 could not be found in this system, and cannot be resized. %1 장치를 이 시스템에서 찾을 수 없으며 크기를 조정할 수 없습니다. - - + + The filesystem %1 cannot be resized. 파일 시스템 %1의 크기를 조정할 수 없습니다. - - + + The device %1 cannot be resized. %1 장치의 크기를 조정할 수 없습니다. - + The filesystem %1 must be resized, but cannot. 파일 시스템 %1의 크기를 조정해야 하지만 조정할 수 없습니다. - + The device %1 must be resized, but cannot %1 장치의 크기를 조정해야 하지만 조정할 수 없습니다. @@ -2980,30 +3334,30 @@ Output: ResizePartitionJob - + Resize partition %1. %1 파티션 크기조정 - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MiB</strong> 파티션 <strong>%1</strong>의 크기를 <strong>%3MiB</strong>로 조정합니다. - + Resizing %2MiB partition %1 to %3MiB. %2MiB 파티션 %1의 크기를 %3MiB로 조정합니다. - + The installer failed to resize partition %1 on disk '%2'. - 섪치 프로그램이 디스크 '%2'에서 파티션 %1의 크기를 조정하지 못했습니다. + 설치 관리자가 '%2' 디스크에 있는 %1 파티션의 크기를 조정하지 못했습니다. ResizeVolumeGroupDialog - + Resize Volume Group 볼륨 그룹 크기조정 @@ -3011,72 +3365,44 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. %1 볼륨 그룹의 크기를 %2에서 %3으로 조정합니다 - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong>로 이름 지정된 볼륨 그룹의 크기를 <strong>%2</strong>에서 <strong>%3</strong>로 조정합니다. - + The installer failed to resize a volume group named '%1'. - 설치 프로그램이 '%1'로 이름 지정된 볼륨 그룹의 크기를 조정하지 못했습니다. + 설치 관리자가 '%1' 볼륨 그룹의 크기를 조정하지 못했습니다. ResultsListDialog - + For best results, please ensure that this computer: 최상의 결과를 얻으려면 이 컴퓨터가 다음 사항을 충족해야 합니다. - + System requirements 시스템 요구 사항 - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - 이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/>설치를 계속할 수 없습니다.<a href="#details">세부 정보...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - 이 컴퓨터는 %1 설치를 위한 최소 요구 사항을 충족하지 않습니다.<br/>설치를 계속할 수 없습니다. <a href="#details">세부 사항입니다...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - 이 컴퓨터는 %1 설치를 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/>설치를 계속할 수는 있지만 일부 기능을 사용하지 않도록 설정할 수도 있습니다. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - 이 컴퓨터는 %1 설치를 위한 권장 요구 사항 중 일부를 충족하지 않습니다.<br/>설치를 계속할 수 있지만 일부 기능을 사용하지 않도록 설정할 수 있습니다. - - - - This program will ask you some questions and set up %2 on your computer. - 이 프로그램은 몇 가지 질문을 하고 컴퓨터에 %2을 설정합니다. - - ScanningDialog - + Scanning storage devices... 저장 장치 검색 중... - + Partitioning 파티션 작업 @@ -3084,29 +3410,29 @@ Output: SetHostNameJob - + Set hostname %1 호스트 이름을 %1로 설정합니다 - + Set hostname <strong>%1</strong>. 호스트 이름을 <strong>%1</strong>로 설정합니다. - + Setting hostname %1. 호스트 이름을 %1로 설정하는 중입니다. + - Internal Error 내부 오류 - - + + Cannot write hostname to target system 시스템의 호스트 이름을 저장할 수 없습니다 @@ -3114,29 +3440,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 키보드 모델을 %1로 설정하고, 레이아웃을 %2-%3으로 설정합니다 - + Failed to write keyboard configuration for the virtual console. 가상 콘솔을 위한 키보드 설정을 저장할 수 없습니다. - - - + + + Failed to write to %1 %1에 쓰기를 실패했습니다 - + Failed to write keyboard configuration for X11. X11에 대한 키보드 설정을 저장하지 못했습니다. - + Failed to write keyboard configuration to existing /etc/default directory. /etc/default 디렉터리에 키보드 설정을 저장하지 못했습니다. @@ -3144,125 +3470,125 @@ Output: SetPartFlagsJob - + Set flags on partition %1. 파티션 %1에 플래그를 설정합니다. - + Set flags on %1MiB %2 partition. %1MiB %2 파티션에 플래그 설정. - + Set flags on new partition. 새 파티션에 플래그를 설정합니다. - + Clear flags on partition <strong>%1</strong>. 파티션 <strong>%1</strong>에서 플래그를 지웁니다. - + Clear flags on %1MiB <strong>%2</strong> partition. %1MiB <strong>%2</strong> 파티션에서 플래그를 지웁니다. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - %1MiB <strong>%2</strong> 파티션을 <strong>%3</strong>으로 플래그합니다. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - %1MiB <strong>%2</strong> 파티션에서 플래그를 지우는 중입니다. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - %1MiB <strong>%2</strong> 파티션에서 플래그 <strong>%3</strong>을 설정합니다. - - - + Clear flags on new partition. 새 파티션에서 플래그를 지웁니다. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. 파티션 <strong>%1</strong>을 <strong>%2</strong>로 플래그 지정합니다. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MiB <strong>%2</strong> 파티션을 <strong>%3</strong>으로 플래그합니다. + + + Flag new partition as <strong>%1</strong>. 파티션을 <strong>%1</strong>로 플래그 지정합니다 - + Clearing flags on partition <strong>%1</strong>. 파티션 <strong>%1</strong>에서 플래그를 지우는 중입니다. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MiB <strong>%2</strong> 파티션에서 플래그를 지우는 중입니다. + + + Clearing flags on new partition. 새 파티션에서 플래그를 지우는 중입니다. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. 파티션 <strong>%1</strong>에 플래그를 .<strong>%2</strong>로 설정합니다. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + %1MiB <strong>%2</strong> 파티션에서 플래그 <strong>%3</strong>을 설정합니다. + + + Setting flags <strong>%1</strong> on new partition. 새 파티션에서 플래그를 <strong>%1</strong>으로 설정합니다. - + The installer failed to set flags on partition %1. - 설치 프로그램이 파티션 %1에서 플래그를 설정하지 못했습니다.. + 설치 관리자가 %1 파티션의 플래그를 설정하지 못했습니다. SetPasswordJob - + Set password for user %1 %1 사용자에 대한 암호를 설정합니다 - + Setting password for user %1. %1 사용자의 암호를 설정하는 중입니다 - + Bad destination system path. 잘못된 대상 시스템 경로입니다. - + rootMountPoint is %1 루트마운트위치는 %1입니다. - + Cannot disable root account. root 계정을 비활성화 할 수 없습니다. - + passwd terminated with error code %1. passwd가 %1 오류 코드로 종료되었습니다. - + Cannot set password for user %1. %1 사용자에 대한 암호를 설정할 수 없습니다. - + usermod terminated with error code %1. usermod가 %1 오류 코드로 종료되었습니다 @@ -3270,45 +3596,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 표준시간대를 %1/%2로 설정합니다 - + Cannot access selected timezone path. 선택된 표준시간대 경로에 접근할 수 없습니다. - + Bad path: %1 잘못된 경로: %1 - + Cannot set timezone. 표준 시간대를 설정할 수 없습니다. - + Link creation failed, target: %1; link name: %2 링크 생성 실패, 대상: %1; 링크 이름: %2 - + Cannot set timezone, 표준시간대를 설정할 수 없습니다, - + Cannot open /etc/timezone for writing /etc/timezone을 쓰기를 위해 열 수 없습니다. + + SetupGroupsJob + + + Preparing groups. + 그룹 준비 중. + + + + + Could not create groups in target system + 대상 시스템에서 그룹을 만들 수 없습니다 + + + + These groups are missing in the target system: %1 + 다음 그룹이 대상 시스템에 없습니다: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <pre>sudo</pre> 사용자를 구성하십시오. + + + + Cannot chmod sudoers file. + sudoers 파일의 권한을 변경할 수 없습니다. + + + + Cannot create sudoers file for writing. + sudoers 파일을 쓸 수 없습니다. + + ShellProcessJob - + Shell Processes Job 셸 처리 작업 @@ -3316,188 +3679,215 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - 설치 절차를 시작하면 어떻게 되는지 간략히 설명합니다. + + &OK + 확인(&O) - - This is an overview of what will happen once you start the install procedure. - 설치 절차를 시작하면 어떻게 되는지 간략히 설명합니다. + + &Yes + 예(&Y) - - - SummaryViewStep - - Summary - 요약 + + &No + 아니오(&N) + + + + &Cancel + 취소(&C) + + + + &Close + 닫기(&C) TrackingInstallJob - + Installation feedback 설치 피드백 - + Sending installation feedback. 설치 피드백을 보내는 중입니다. - + Internal error in install-tracking. 설치 추적중 내부 오류 - + HTTP request timed out. HTTP 요청 시간이 만료되었습니다. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE 사용자 의견 + + + + Configuring KDE user feedback. + KDE 사용자 의견을 설정하는 중입니다. + + + + + Error in KDE user feedback configuration. + KDE 사용자 의견 설정 중에 오류가 발생했습니다. + + + + Could not configure KDE user feedback correctly, script error %1. + KDE 사용자 피드백을 올바르게 구성할 수 없습니다, 스크립트 오류 %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE 사용자 피드백을 올바르게 구성할 수 없습니다. Calamares 오류 %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback 시스템 피드백 - + Configuring machine feedback. 시스템 피드백을 설정하는 중입니다. - - + + Error in machine feedback configuration. 시스템 피드백 설정 중에 오류가 발생했습니다. - + Could not configure machine feedback correctly, script error %1. 시스템 피드백을 정확하게 설정할 수 없습니다, %1 스크립트 오류. - + Could not configure machine feedback correctly, Calamares error %1. - 시스템 피드백을 정확하게 설정할 수 없습니다, %1 깔라마레스 오류. + 시스템 피드백을 정확하게 설정할 수 없습니다, Calamares의 %1 오류입니다. TrackingPage - + Form 형식 - + Placeholder 자리 표시자 - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>이 옵션을 선택하면 <span style=" font-weight:600;">설치에 대한 정보가</span> 전혀 전송되지 않습니다.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>설치에 대한 <span style=" font-weight:600;">정보를 전혀 보내지 않으려면</span> 여기를 클릭하십시오.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">사용자 피드백에 대한 자세한 정보를 보려면 여기를 클릭하세요.</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - 설치 추적 기능을 사용하면 %1의 사용자 수, %1에 설치하는 하드웨어 (아래 마지막 두 옵션), 기본 응용 프로그램에 대한 지속적인 정보를 얻을 수 있습니다. 전송할 내용을 보려면 각 영역 옆에있는 도움말 아이콘을 클릭하십시오. + + 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. + 트래킹을 통해 %1이(가) 얼마나 자주 설치되는지, 어떤 하드웨어에 설치되어 있고 어떤 응용 프로그램이 사용되는지 확인할 수 있습니다. 전송할 내용을 보려면 각 영역 옆에 있는 도움말 아이콘을 클릭하십시오. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - 이 옵션을 선택하면 설치 및 하드웨어에 대한 정보가 전송됩니다. 이 정보는 설치가 완료된 후 <b>한 번만 전송</b>됩니다 + + 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. + 이 옵션을 선택하면 설치 및 하드웨어에 대한 정보가 전송됩니다. 이 정보는 설치가 완료된 후 <b>한 번만</b> 전송됩니다. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - 이 옵션을 선택하면 <b>주기적으로</b> 설치, 하드웨어 및 응용 프로그램에 대한 정보를 %1로 전송합니다. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + 이 옵션을 선택하면 <b>컴퓨터</b> 설치, 하드웨어 및 응용 프로그램에 대한 정보를 %1에게 주기적으로 보냅니다. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - 이 옵션을 선택하면 <b>정기적으로</b> 설치, 하드웨어, 응용 프로그램 및 사용 패턴에 대한 정보를 %1로 전송합니다. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + 이를 선택하면 <b>사용자</b> 설치, 하드웨어, 응용 프로그램 및 응용 프로그램 사용 패턴에 대한 정보를 정기적으로 %1에게 보냅니다. TrackingViewStep - + Feedback 피드백 + + UmountJob + + + Unmount file systems. + 파일시스템을 마운트 해제합니다. + + + + No target system available. + 대상 시스템을 사용할 수 없습니다. + + + + No rootMountPoint is set. + 루트 마운트 경로가 지정되지 않았습니다. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>둘 이상의 사용자가 이 컴퓨터를 사용할 경우, 설정 후 계정을 여러 개 만들 수 있습니다.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>둘 이상의 사용자가 이 컴퓨터를 사용할 경우 설치 후 계정을 여러 개 만들 수 있습니다.</small> + + + UsersQmlViewStep - - Your username is too long. - 사용자 이름이 너무 깁니다. - - - - Your username must start with a lowercase letter or underscore. - 사용자 이름은 소문자 또는 밑줄로 시작해야 합니다. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - 소문자, 숫자, 밑줄 및 하이픈만 허용됩니다. - - - - Only letters, numbers, underscore and hyphen are allowed. - 문자, 숫자, 밑줄 및 하이픈만 허용됩니다. - - - - Your hostname is too short. - 호스트 이름이 너무 짧습니다. - - - - Your hostname is too long. - 호스트 이름이 너무 깁니다. - - - - Your passwords do not match! - 암호가 일치하지 않습니다! + + Users + 사용자 UsersViewStep - + Users 사용자 @@ -3505,65 +3895,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group 볼륨 그룹 생성 - + List of Physical Volumes 물리 볼륨 목록 - + Volume Group Name: 볼륨 그룹 이름 : - + Volume Group Type: 볼륨 그룹 유형 : - + Physical Extent Size: 물리 확장 크기 : - + MiB MiB - + Total Size: 전체 크기 : - + Used Size: 사용된 크기 : - + Total Sectors: 전체 섹터 : - + Quantity of LVs: LVs의 용량 @@ -3571,106 +3963,106 @@ Output: WelcomePage - + Form 형식 - - + + Select application and system language 응용 프로그램 및 시스템 언어 선택 + &About + 정보 (&A) + + + Open donations website 기부 웹 사이트열기 - + &Donate 기부(&D) - + Open help and support website 도움말 및 지원 웹 사이트 열기 + &Support + 지원 (&S) + + + Open issues and bug-tracking website 문제 및 버그 추적 웹 사이트 열기 - Open release notes website - 릴리스 노트 웹 사이트 열기 - - - - &Release notes - 출시 정보 (&R) - - - &Known issues 알려진 문제점 (&K) - - &Support - 지원 (&S) + + Open release notes website + 릴리스 노트 웹 사이트 열기 - - &About - 정보 (&A) + + &Release notes + 출시 정보 (&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 설치 관리자에 오신 것을 환영합니다.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1을 위한 Calamares 설치 관리자에 오신 것을 환영합니다.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1에 대한 Calamares 설정 프로그램에 오신 것을 환영합니다.</h1> + <h1>%1용 Calamares 설정 프로그램에 오신 것을 환영합니다.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>%1 설치에 오신 것을 환영합니다.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1용 Calamares 설치 관리자에 오신 것을 환영합니다.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 설치 관리자에 오신 것을 환영합니다.</h1> + + + + %1 support + %1 지원 + + + About %1 setup %1 설치 정보 - + About %1 installer %1 설치 관리자에 대하여 - + <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. - - - - - %1 support - %1 지원 + <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/><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. WelcomeQmlViewStep - + Welcome 환영합니다 @@ -3678,84 +4070,217 @@ Output: WelcomeViewStep - + Welcome 환영합니다 + + ZfsJob + + + Create ZFS pools and datasets + ZFS pool 및 데이터세트 만들기 + + + + Failed to create zpool on + zpool 만들기 실패함: + + + + Configuration Error + 구성 오류 + + + + No partitions are available for ZFS. + 파티션 없음을 ZFS로 사용할 수 있습니다. + + + + Internal data missing + 내부 데이터가 누락되었습니다 + + + + + Failed to create zpool + zpool을 만들지 못했습니다 + + + + Failed to create dataset + 데이터세트를 만들지 못했습니다 + + + + The output was: + 출력은 다음과 같음: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <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/> + <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. - + Back - + 뒤로 + + + + calamares-sidebar + + + Show debug information + 디버그 정보 보기 + + + + finishedq + + + Installation Completed + 설치 완료 + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1이(가) 컴퓨터에 설치되었습니다.<br/> + 이제 새 시스템으로 다시 시작하거나 라이브 환경을 계속 사용할 수 있습니다. + + + + Close Installer + 설치 관리자 닫기 + + + + Restart System + 시스템 재시작 + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>설치의 전체 로그는 라이브 사용자의 홈 디렉토리에 installation.log로 제공됩니다.<br/> + 이 로그는 대상 시스템의 /var/log/installation.log에 복사됩니다.</p> + + + + finishedq@mobile + + + Installation Completed + 설치 완료 + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1이(가) 컴퓨터에 설치되었습니다.<br/> + 이제 사용자의 장치를 다시 시작할 수 있습니다. + + + + Close + 닫기 + + + + Restart + 다시 시작 + + + + i18n + + + <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>. + <h1>언어</h1> </br> + 시스템 로케일 설정은 일부 명령줄 사용자 인터페이스 요소에 대한 언어 및 문자 집합에 영향을 줍니다. 현재 설정은 <strong>%1</strong>입니다. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>로케일</h1> </br> + 시스템 로케일 설정은 숫자 및 날짜 형식에 영향을 줍니다. 현재 설정은 <strong>%1</strong>입니다. + + + + Back + 뒤로 keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + 키보드 미리보기를 활성화하려면 레이아웃을 선택하세요. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + 키보드 모델: - - Refresh - - - - - + Layouts - + 레이아웃 - - - Keyboard Layout - + + Type here to test your keyboard + 키보드를 테스트하기 위해 여기에 입력하세요 - - Models - - - - + Variants - + 변형 + + + localeq - - Test your keyboard - + + Change + 변경 notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3763,34 +4288,262 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + 리브레오피스는 전 세계 수백만 명의 사람들이 사용하는 강력한 무료 오피스 제품군입니다. 여기에는 시장에서 가장 다재다능한 무료 및 오픈소스 오피스 제품군이 되는 여러 응용 프로그램이 포함되어 있습니다.<br/> + 기본 옵션입니다. - + + LibreOffice + 리브레오피스 + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Office 제품군을 설치하지 않으려면 Office 제품군 없음을 선택하면 됩니다. 필요에 따라 나중에 설치된 시스템에 언제든지 하나(또는 그 이상)를 추가할 수 있습니다. + + + + No Office Suite + 오피스 제품군 없음 + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + 최소한의 데스크탑 설치를 만들고 모든 추가 응용프로그램을 제거한 다음 나중에 시스템에 추가할 항목을 결정하십시오. 이러한 설치에는 데스크탑, 파일 브라우저, 패키지 관리자, 텍스트 편집기 및 간단한 웹 브라우저 등이 포함되며, 포함되지 않는 항목에는 Office 제품군, 미디어 플레이어, 이미지 뷰어 또는 인쇄 지원 등이 있습니다 + + + + Minimal Install + 최소 설치 + + + + Please select an option for your install, or use the default: LibreOffice included. + 설치 옵션을 선택하거나 기본값인 리브레오피스 포함을 사용하십시오. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>이 예제 QML 파일은 Flickable 컨텐츠가 있는 RichText의 옵션을 표시합니다.</p> + + <p>RichText가 포함된 QML은 HTML 태그를 사용할 수 있으며 Flickable 콘텐츠는 터치 스크린에 유용합니다.</p> + + <p><b>굵은 텍스트입니다</b></p> + <p><i>기울임꼴 텍스트입니다</i></p> + <p><u>밑줄이 그어진 텍스트입니다</u></p> + <p><center>이 텍스트는 가운데 정렬됩니다.</center></p> + <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> + + + + Back + 뒤로 + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + 로그인 및 관리자 작업을 수행하려면 사용자 이름과 자격 증명을 선택하세요 + + + + What is your name? + 이름이 무엇인가요? + + + + Your Full Name + 전체 이름 + + + + What name do you want to use to log in? + 로그인할 때 사용할 이름은 무엇인가요? + + + + Login Name + 로그인 이름 + + + + If more than one person will use this computer, you can create multiple accounts after installation. + 다수의 사용자가 이 컴퓨터를 사용하는 경우, 설치를 마친 후에 여러 계정을 만들 수 있습니다. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 소문자, 숫자, 밑줄 및 하이픈만 허용됩니다. + + + + root is not allowed as username. + root는 사용자 이름으로 허용되지 않습니다. + + + + What is the name of this computer? + 이 컴퓨터의 이름은 무엇인가요? + + + + Computer Name + 컴퓨터 이름 + + + + This name will be used if you make the computer visible to others on a network. + 이 이름은 네트워크의 다른 사용자가 이 컴퓨터를 볼 수 있게 하는 경우에 사용됩니다. + + + + localhost is not allowed as hostname. + localhost는 호스트 이름으로 허용되지 않습니다. + + + + Choose a password to keep your account safe. + 사용자 계정의 보안을 유지하기 위한 암호를 선택하세요. + + + + Password + 비밀번호 + + + + Repeat Password + 비밀번호 반복 + + + + 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. + 입력 오류를 확인할 수 있도록 동일한 암호를 두 번 입력합니다. 올바른 암호에는 문자, 숫자 및 구두점이 혼합되어 있으며 길이는 8자 이상이어야 하며 정기적으로 변경해야 합니다. + + + + Validate passwords quality + 암호 품질 검증 + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + 이 확인란을 선택하면 비밀번호 강도 검사가 수행되며 불충분한 비밀번호를 사용할 수 없습니다. + + + + Log in automatically without asking for the password + 암호를 묻지 않고 자동으로 로그인합니다 + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + 문자, 숫자, 밑줄 및 하이픈만 허용되며, 최소 2자 이상이어야 합니다. + + + + Reuse user password as root password + 사용자 암호를 루트 암호로 재사용합니다 + + + + Use the same password for the administrator account. + 관리자 계정에 대해 같은 암호를 사용합니다. + + + + Choose a root password to keep your account safe. + 당신의 계정을 안전하게 보호하기 위해서 루트 암호를 선택하세요. + + + + Root Password + 루트 암호 + + + + Repeat Root Password + 루트 암호 확인 + + + + Enter the same password twice, so that it can be checked for typing errors. + 입력 오류를 확인하기 위해서 동일한 암호를 두번 입력해주세요. + + + + welcomeq + + + <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> + <h3>%1 <quote>%2</quote> 설치 관리자에 오신 것을 환영합니다</h3> + <p>이 프로그램은 당신에게 몇 가지 질문을 하고 %1을(를) 컴퓨터에 설치할 것입니다.</p> + + + About Calamares에 대하여 - + Support 지원 - + Known issues 알려진 이슈들 - + Release notes 릴리즈 노트 - + Donate 기부 diff --git a/lang/calamares_lo.ts b/lang/calamares_lo.ts index 5b3df5cde..61a9eb42e 100644 --- a/lang/calamares_lo.ts +++ b/lang/calamares_lo.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,39 +238,44 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). - + (%n second(s)) - + System-requirements checking is complete. @@ -250,244 +283,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -495,157 +519,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -653,22 +717,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -676,18 +735,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -695,100 +754,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -796,100 +990,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -897,27 +1127,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -925,22 +1155,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -948,45 +1178,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -994,22 +1220,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1017,18 +1243,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1036,22 +1262,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1059,46 +1285,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1107,17 +1333,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1125,7 +1351,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1133,123 +1359,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1257,93 +1527,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1351,72 +1609,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1424,7 +1682,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1432,25 +1690,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1458,7 +1716,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1466,7 +1724,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1474,17 +1732,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1492,28 +1750,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1521,7 +1766,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1529,65 +1774,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1595,7 +1863,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1603,109 +1871,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1713,35 +1974,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1749,116 +2010,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1866,7 +2141,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1874,17 +2149,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1892,260 +2167,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + The password is shorter than %n characters + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + The password contains more than %n same characters consecutively + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2153,40 +2476,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2194,12 +2525,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2207,17 +2538,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2225,96 +2556,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2322,42 +2653,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2366,34 +2697,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2401,77 +2737,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2479,117 +2815,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2597,13 +2923,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2611,17 +2937,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2629,7 +2955,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2637,17 +2963,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2655,65 +2981,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2721,89 +3047,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2811,18 +3142,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2830,143 +3161,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2974,22 +3320,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2997,7 +3343,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3005,18 +3351,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3024,53 +3370,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3078,29 +3396,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3108,29 +3426,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3138,82 +3456,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3221,42 +3539,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3264,45 +3582,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3310,81 +3665,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3392,106 +3783,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3499,65 +3881,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3565,106 +3949,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3672,31 +4056,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3704,86 +4214,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_lt.ts b/lang/calamares_lt.ts index 74e053533..c18e4a0a0 100644 --- a/lang/calamares_lt.ts +++ b/lang/calamares_lt.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Tvarkyti automatinio prijungimo nustatymus + + BootInfoWidget - + 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. Šios sistemos <strong>paleidimo aplinka</strong>.<br><br>Senesnės x86 sistemos palaiko tik <strong>BIOS</strong>.<br>Šiuolaikinės sistemos, dažniausiai, naudoja <strong>EFI</strong>, tačiau, jeigu jos yra paleistos suderinamumo veiksenoje, taip pat gali būti rodomos kaip BIOS. - + 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. Ši sistema buvo paleista su <strong>EFI</strong> paleidimo aplinka.<br><br>Tam, kad sukonfigūruotų paleidimą iš EFI aplinkos, ši diegimo programa, <strong>EFI sistemos skaidinyje</strong>, privalo išskleisti paleidyklės programą, kaip, pavyzdžiui, <strong>GRUB</strong> ar <strong>systemd-boot</strong>. Tai vyks automatiškai, nebent pasirinksite rankinį skaidymą ir tokiu atveju patys turėsite pasirinkti arba sukurti skaidinį. - + 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. Ši sistema buvo paleista su <strong>BIOS</strong> paleidimo aplinka.<br><br>Tam, kad sukonfigūruotų paleidimą iš BIOS aplinkos, ši diegimo programa, arba skaidinio pradžioje, arba <strong>Paleidimo įraše (MBR)</strong>, šalia skaidinių lentelės pradžios (pageidautina), privalo įdiegti paleidyklę, kaip, pavyzdžiui, <strong>GRUB</strong>. Tai vyks automatiškai, nebent pasirinksite rankinį skaidymą ir tokiu atveju, viską turėsite nusistatyti patys. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1 paleidimo įrašas (MBR) - + Boot Partition Paleidimo skaidinys - + System Partition Sistemos skaidinys - + Do not install a boot loader Nediegti paleidyklės - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Tuščias puslapis @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Forma - + GlobalStorage VisuotinisKaupiklis - + JobQueue UžduotiesEilė - + Modules Moduliai - + Type: Tipas: - - + + none nėra - + Interface: Sąsaja: - - Tools - Įrankiai + + Crashes Calamares, so that Dr. Konqui can look at it. + Užstrigdina Calamares, kad Dr. Konqui galėtų pažiūrėti kas nutiko. - + + Reloads the stylesheet from the branding directory. + Iš naujo įkelia stilių aprašą iš prekių ženklo katalogo. + + + + Uploads the session log to the configured pastebin. + Išsiunčia seanso žurnalą į sukonfigūruotą įdėjimų dėklą. + + + + Send Session Log + Siųsti seanso žurnalą + + + Reload Stylesheet Iš naujo įkelti stilių aprašą - + + Displays the tree of widget names in the log (for stylesheet debugging). + Rodo žurnale valdiklių pavadinimų medį (stilių aprašo derinimui). + + + Widget Tree Valdiklių medis - + Debug information Derinimo informacija @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Sąranka - + Install Diegimas @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Užduotis patyrė nesėkmę (%1) - + Programmed job failure was explicitly requested. Užprogramuota užduoties nesėkmė buvo aiškiai užklausta. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Atlikta @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Pavyzdinė užduotis (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Paleisti paskirties sistemoje komandą „%1“. - + Run command '%1'. Paleisti komandą „%1“. - + Running command %1 %2 Vykdoma komanda %1 %2 @@ -177,58 +205,63 @@ Calamares::PythonJob - + Running %1 operation. Vykdoma %1 operacija. - + Bad working directory path Netinkama darbinio katalogo vieta - + Working directory %1 for python job %2 is not readable. Darbinis %1 python katalogas dėl %2 užduoties yra neskaitomas - + Bad main script file Prastas pagrindinio skripto failas - + Main script file %1 for python job %2 is not readable. Pagrindinis scenarijus %1 dėl python %2 užduoties yra neskaitomas - + Boost.Python error in job "%1". - Boost.Python klaida užduotyje "%1". + Boost.Python klaida užduotyje „%1“. Calamares::QmlViewStep - + Loading ... Įkeliama... - + QML Step <i>%1</i>. QML <i>%1</i> žingsnis. - + Loading failed. Įkėlimas nepavyko. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Reikalavimų tikrinimas <i>%1</i> moduliui yra užbaigtas. + - + Waiting for %n module(s). Laukiama %n modulio. @@ -238,7 +271,7 @@ - + (%n second(s)) (%n sekundė) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. Sistemos reikalavimų tikrinimas yra užbaigtas. @@ -256,247 +289,241 @@ Calamares::ViewManager - - &Back - &Atgal - - - - &Next - &Toliau - - - - &Cancel - A&tsisakyti - - - - Cancel setup without changing the system. - Atsisakyti sąrankos, nieko sistemoje nekeičiant. - - - - Cancel installation without changing the system. - Atsisakyti diegimo, nieko sistemoje nekeičiant. - - - + Setup Failed Sąranka patyrė nesėkmę - - Would you like to paste the install log to the web? - Ar norėtumėte įdėti diegimo žurnalą į saityną? + + Installation Failed + Diegimas nepavyko - + + Error + Klaida + + + + &Yes + &Taip + + + + &No + &Ne + + + + &Close + &Užverti + + + Install Log Paste URL Diegimo žurnalo įdėjimo URL - + The upload was unsuccessful. No web-paste was done. Įkėlimas buvo nesėkmingas. Nebuvo atlikta jokio įdėjimo į saityną. - + + Install log posted to + +%1 + +Link copied to clipboard + Diegimo žurnalas paskelbtas į + +%1 + +Nuoroda nukopijuota į iškarpinę + + + Calamares Initialization Failed Calamares inicijavimas nepavyko - + %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. Nepavyksta įdiegti %1. Calamares nepavyko įkelti visų sukonfigūruotų modulių. Tai yra problema, susijusi su tuo, kaip distribucija naudoja diegimo programą Calamares. - + <br/>The following modules could not be loaded: <br/>Nepavyko įkelti šių modulių: - + + Continue with setup? + Tęsti sąranką? + + + Continue with installation? Tęsti diegimą? - + 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> %1 sąrankos programa, siekdama nustatyti %2, ketina atlikti pakeitimus diske.<br/><strong>Šių pakeitimų nebegalėsite atšaukti.</strong> - + + 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> + %1 diegimo programa, siekdama įdiegti %2, ketina atlikti pakeitimus diske.<br/><strong>Šių pakeitimų nebegalėsite atšaukti.</strong> + + + &Set up now Nu&statyti dabar - + + &Install now + Į&diegti dabar + + + + Go &back + &Grįžti + + + &Set up Nu&statyti - + &Install Į&diegti - + Setup is complete. Close the setup program. Sąranka užbaigta. Užverkite sąrankos programą. - + + The installation is complete. Close the installer. + Diegimas užbaigtas. Užverkite diegimo programą. + + + + Cancel setup without changing the system. + Atsisakyti sąrankos, nieko sistemoje nekeičiant. + + + + Cancel installation without changing the system. + Atsisakyti diegimo, nieko sistemoje nekeičiant. + + + + &Next + &Toliau + + + + &Back + &Atgal + + + + &Done + A&tlikta + + + + &Cancel + A&tsisakyti + + + Cancel setup? Atsisakyti sąrankos? - + Cancel installation? Atsisakyti diegimo? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Ar tikrai norite atsisakyti dabartinio sąrankos proceso? Sąrankos programa užbaigs darbą ir visi pakeitimai bus prarasti. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ar tikrai norite atsisakyti dabartinio diegimo proceso? Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. - - - - &Yes - &Taip - - - - - &No - &Ne - - - - &Close - &Užverti - - - - Continue with setup? - Tęsti sąranką? - - - - 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> - %1 diegimo programa, siekdama įdiegti %2, ketina atlikti pakeitimus diske.<br/><strong>Šių pakeitimų nebegalėsite atšaukti.</strong> - - - - &Install now - Į&diegti dabar - - - - Go &back - &Grįžti - - - - &Done - A&tlikta - - - - The installation is complete. Close the installer. - Diegimas užbaigtas. Užverkite diegimo programą. - - - - Error - Klaida - - - - Installation Failed - Diegimas nepavyko - CalamaresPython::Helper - + Unknown exception type Nežinomas išimties tipas - + unparseable Python error Nepalyginama Python klaida - + unparseable Python traceback Nepalyginamas Python atsekimas - + Unfetchable Python error. Neatgaunama Python klaida. - - CalamaresUtils - - - Install log posted to: -%1 - Diegimo žurnalas paskelbtas į: -%1 - - CalamaresWindow - - &Back - &Atgal - - - - &Next - &Toliau - - - - &Cancel - A&tsisakyti - - - + %1 Setup Program %1 sąrankos programa - + %1 Installer %1 diegimo programa + + + ChangeFilesystemLabelJob - - Show debug information - Rodyti derinimo informaciją + + Set filesystem label on %1. + Nustatyti failų sistemos etiketę ties %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Nustatyti failų sistemos etiketę <strong>%1</strong> skaidiniui <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Diegimo programai nepavyko atnaujinti skaidinių lentelės diske '%1'. CheckerContainer - + Gathering system information... Renkama sistemos informacija... @@ -504,157 +531,197 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. ChoicePage - + Form Forma - - After: - Po: - - - - Boot loader location: - Paleidyklės vieta: - - - + Select storage de&vice: Pasirinkite atminties įr&enginį: - - - - + + + + Current: Dabartinis: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Rankinis skaidymas</strong><br/>Galite patys kurti skaidinius arba keisti jų dydžius. UEFI diegimui diskas privalo turėti GPT skaidinių lentelę ir <strong>fat32 512Mb /boot skaidinį</strong>, kuris gali būti senas ir nesuženklintas arba sukurtas naujai. + + After: + Po: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Rankinis skaidymas</strong><br/>Galite patys kurti ar keisti skaidinių dydžius. + + + Reuse %1 as home partition for %2. Pakartotinai naudoti %1 kaip namų skaidinį, skirtą %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Pasirinkite, kurį skaidinį sumažinti, o tuomet vilkite juostą, kad pakeistumėte skaidinio dydį</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 bus sumažintas iki %2MiB ir naujas %3MiB skaidinys bus sukurtas sistemai %4. - + + Boot loader location: + Paleidyklės vieta: + + + <strong>Select a partition to install on</strong> <strong>Pasirinkite kuriame skaidinyje įdiegti</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Šioje sistemoje niekur nepavyko rasti EFI skaidinio. Prašome grįžti ir naudoti rankinį skaidymą, kad nustatytumėte %1. - + The EFI system partition at %1 will be used for starting %2. %2 paleidimui bus naudojamas EFI sistemos skaidinys, esantis ties %1. - + EFI system partition: EFI sistemos skaidinys: - + 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. Atrodo, kad šiame įrenginyje nėra operacinės sistemos. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Ištrinti diską</strong><br/>Tai <font color="red">ištrins</font> visus, pasirinktame atminties įrenginyje, esančius duomenis. - - 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. - Šiame atminties įrenginyje jau yra %1. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - - - - No Swap - Be sukeitimų skaidinio - - - - Reuse Swap - Iš naujo naudoti sukeitimų skaidinį - - - - Swap (no Hibernate) - Sukeitimų skaidinys (be užmigdymo) - - - - Swap (with Hibernate) - Sukeitimų skaidinys (su užmigdymu) - - - - Swap to file - Sukeitimų failas - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Įdiegti šalia</strong><br/>Diegimo programa sumažins skaidinį, kad atlaisvintų vietą sistemai %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Pakeisti skaidinį</strong><br/>Pakeičia skaidinį ir įrašo %1. - + + 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. + Šiame atminties įrenginyje jau yra %1. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. + + + 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. Šiame atminties įrenginyje jau yra operacinė sistema. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. - + 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. Šiame atminties įrenginyje jau yra kelios operacinės sistemos. Ką norėtumėte daryti?<br/>Prieš atliekant bet kokius pakeitimus atminties įrenginyje, jūs galėsite apžvelgti ir patvirtinti savo pasirinkimus. + + + 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/> + Šiame atminties įrenginyje jau yra operacinė sistema, bet skaidinių lentelė <strong>%1</strong> yra kitokia nei reikiama <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Vienas iš šio atminties įrenginio skaidinių yra <strong>prijungtas</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Šis atminties įrenginys yra <strong>neaktyvaus RAID</strong> įrenginio dalis. + + + + No Swap + Be sukeitimų skaidinio + + + + Reuse Swap + Iš naujo naudoti sukeitimų skaidinį + + + + Swap (no Hibernate) + Sukeitimų skaidinys (be užmigdymo) + + + + Swap (with Hibernate) + Sukeitimų skaidinys (su užmigdymu) + + + + Swap to file + Sukeitimų failas + ClearMountsJob - + + Successfully unmounted %1. + %1 sėkmingai atjungtas. + + + + Successfully disabled swap %1. + Sukeitimų sritis %1 sėkmingai išjungta. + + + + Successfully cleared swap %1. + Sukeitimų sritis %1 sėkmingai išvalyta. + + + + Successfully closed mapper device %1. + Atvaizdavimo įrenginys %1 sėkmingai užvertas. + + + + Successfully disabled volume group %1. + Tomų grupė %1 sėkmingai išjungta. + + + Clear mounts for partitioning operations on %1 Išvalyti prijungimus, siekiant atlikti skaidymo operacijas skaidiniuose %1 - + Clearing mounts for partitioning operations on %1. Išvalomi prijungimai, siekiant atlikti skaidymo operacijas skaidiniuose %1. - + Cleared all mounts for %1 Visi %1 prijungimai išvalyti @@ -662,22 +729,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. ClearTempMountsJob - + Clear all temporary mounts. Išvalyti visus laikinuosius prijungimus. - + Clearing all temporary mounts. Išvalomi visi laikinieji prijungimai. - - Cannot get list of temporary mounts. - Nepavyksta gauti laikinųjų prijungimų sąrašo. - - - + Cleared all temporary mounts. Visi laikinieji prijungimai išvalyti. @@ -685,18 +747,18 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. CommandList - - + + Could not run command. Nepavyko paleisti komandos. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komanda yra vykdoma serverio aplinkoje ir turi žinoti šaknies kelią, tačiau nėra apibrėžtas joks rootMountPoint. - + The command needs to know the user's name, but no username is defined. Komanda turi žinoti naudotojo vardą, tačiau nebuvo apibrėžtas joks naudotojo vardas. @@ -704,100 +766,235 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Šis kompiuteris netenkina minimalių %1 nustatymo reikalavimų.<br/>Sąranka negali būti tęsiama. <a href="#details">Išsamiau...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Šis kompiuteris netenkina minimalių %1 diegimo reikalavimų.<br/>Diegimas negali būti tęsiamas. <a href="#details">Išsamiau...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Šis kompiuteris netenkina kai kurių %1 nustatymui rekomenduojamų reikalavimų.<br/>Sąranką galima tęsti, tačiau kai kurios funkcijos gali būti išjungtos. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Šis kompiuteris netenkina kai kurių %1 diegimui rekomenduojamų reikalavimų.<br/>Diegimą galima tęsti, tačiau kai kurios funkcijos gali būti išjungtos. - - - - This program will ask you some questions and set up %2 on your computer. - Programa užduos kelis klausimus ir padės įsidiegti %2. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Jus sveikina Calamares sąrankos programa, skirta %1 sistemai.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Jus sveikina %1 sąranka.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Jus sveikina Calamares diegimo programa, skirta %1 sistemai.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Jus sveikina %1 diegimo programa.</h1> - - - + Set keyboard model to %1.<br/> Nustatyti klaviatūros modelį kaip %1.<br/> - + Set keyboard layout to %1/%2. Nustatyti klaviatūros išdėstymą kaip %1/%2. - + + Set timezone to %1/%2. + Nustatyti laiko juostą į %1/%2. + + + The system language will be set to %1. Sistemos kalba bus nustatyta į %1. - + The numbers and dates locale will be set to %1. Skaičių ir datų lokalė bus nustatyta į %1. - - Set timezone to %1/%2.<br/> - Nustatyti laiko juostą kaip %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Tinklo diegimas. (Išjungtas: Neteisinga konfigūracija) - + Network Installation. (Disabled: Received invalid groups data) Tinklo diegimas. (Išjungtas: Gauti neteisingi grupių duomenys) - - Network Installation. (Disabled: internal error) - Tinklo diegimas. (Išjungtas: vidinė klaida) + + Network Installation. (Disabled: Internal error) + Tinklo diegimas. (Išjungtas: Vidinė klaida) - + + Network Installation. (Disabled: No package list) + Tinklo diegimas. (Išjungtas: Nėra paketų sąrašo) + + + + Package selection + Paketų pasirinkimas + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Tinklo diegimas. (Išjungta: Nepavyksta gauti paketų sąrašus, patikrinkite savo tinklo ryšį) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Šis kompiuteris netenkina minimalių %1 nustatymo reikalavimų.<br/>Sąranka negali būti tęsiama. <a href="#details">Išsamiau...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Šis kompiuteris netenkina minimalių %1 diegimo reikalavimų.<br/>Diegimas negali būti tęsiamas. <a href="#details">Išsamiau...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Šis kompiuteris netenkina kai kurių %1 nustatymui rekomenduojamų reikalavimų.<br/>Sąranką galima tęsti, tačiau kai kurios funkcijos gali būti išjungtos. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Šis kompiuteris netenkina kai kurių %1 diegimui rekomenduojamų reikalavimų.<br/>Diegimą galima tęsti, tačiau kai kurios funkcijos gali būti išjungtos. + + + + This program will ask you some questions and set up %2 on your computer. + Programa užduos kelis klausimus ir padės įsidiegti %2. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + </h1>Jus sveikina Calamares sąrankos programa, skirta %1 sistemai.</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Jus sveikina %1 sąranka</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Jus sveikina Calamares diegimo programa, skirta %1 sistemai</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Jus sveikina %1 diegimo programa</h1> + + + + Your username is too long. + Jūsų naudotojo vardas yra pernelyg ilgas. + + + + '%1' is not allowed as username. + „%1“ neleidžiama naudoti kaip naudotojo vardą. + + + + Your username must start with a lowercase letter or underscore. + Jūsų naudotojo vardas privalo prasidėti mažąja raide arba pabraukimo brūkšniu. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Yra leidžiamos tik mažosios raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. + + + + Your hostname is too short. + Jūsų kompiuterio vardas yra pernelyg trumpas. + + + + Your hostname is too long. + Jūsų kompiuterio vardas yra pernelyg ilgas. + + + + '%1' is not allowed as hostname. + „%1“ neleidžiama naudoti kaip kompiuterio vardą. + + + + Only letters, numbers, underscore and hyphen are allowed. + Yra leidžiamos tik raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. + + + + Your passwords do not match! + Jūsų slaptažodžiai nesutampa! + + + + OK! + Gerai! + + + + Setup Failed + Sąranka patyrė nesėkmę + + + + Installation Failed + Diegimas nepavyko + + + + The setup of %1 did not complete successfully. + %1 sąranka nebuvo užbaigta sėkmingai. + + + + The installation of %1 did not complete successfully. + %1 nebuvo užbaigtas sėkmingai. + + + + Setup Complete + Sąranka užbaigta + + + + Installation Complete + Diegimas užbaigtas + + + + The setup of %1 is complete. + %1 sąranka yra užbaigta. + + + + The installation of %1 is complete. + %1 diegimas yra užbaigtas. + + + + Package Selection + Paketų pasirinkimas + + + + Please pick a product from the list. The selected product will be installed. + Pasirinkite iš sąrašo produktą. Pasirinktas produktas bus įdiegtas. + + + + Install option: <strong>%1</strong> + Diegimo parinktis: <strong>%1</strong> + + + + None + Nėra + + + + Summary + Suvestinė + + + + This is an overview of what will happen once you start the setup procedure. + Tai yra apžvalga to, kas įvyks, prasidėjus sąrankos procedūrai. + + + + This is an overview of what will happen once you start the install procedure. + Tai yra apžvalga to, kas įvyks, prasidėjus diegimo procedūrai. + ContextualProcessJob - + Contextual Processes Job Konteksto procesų užduotis @@ -805,100 +1002,136 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. CreatePartitionDialog - + Create a Partition Sukurti skaidinį - - MiB - MiB - - - - Partition &Type: - Skaidinio tipas: - - - - &Primary - &Pirminis - - - - E&xtended - Iš&plėstinė - - - - Fi&le System: - Fai&lų sistema: - - - - LVM LV name - LVM LV pavadinimas - - - - Flags: - Vėliavėlės: - - - - &Mount Point: - &Prijungimo vieta: - - - + Si&ze: D&ydis: - + + MiB + MiB + + + + Partition &Type: + Skaidinio tipas: + + + + Primar&y + Pir&minis + + + + E&xtended + Iš&plėstinė + + + + Fi&le System: + Fai&lų sistema: + + + + LVM LV name + LVM LV pavadinimas + + + + &Mount Point: + &Prijungimo vieta: + + + + Flags: + Vėliavėlės: + + + + Label for the filesystem + Failų sistemos etiketė + + + + FS Label: + FS etiketė: + + + En&crypt Užši&fruoti - + Logical Loginis - + Primary Pirminis - + GPT GPT - + Mountpoint already in use. Please select another one. Prijungimo taškas jau yra naudojamas. Prašome pasirinkti kitą. + + + Mountpoint must start with a <tt>/</tt>. + Prijungimo taškas privalo prasidėti simboliu <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Sukurti naują %1MiB skaidinį ties %3 (%2) su įrašais %4. + + + + Create new %1MiB partition on %3 (%2). + Sukurti naują %1MiB skaidinį ties %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Sukurti naują %2MiB skaidinį diske %4 (%3) su %1 failų sistema. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Sukurti naują <strong>%1MiB</strong> skaidinį ties <strong>%3</strong> (%2) su įrašais <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Sukurti naują <strong>%1MiB</strong> skaidinį ties <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Sukurti naują <strong>%2MiB</strong> skaidinį diske <strong>%4</strong> (%3) su <strong>%1</strong> failų sistema. - + + Creating new %1 partition on %2. Kuriamas naujas %1 skaidinys ties %2. - + The installer failed to create partition on disk '%1'. Diegimo programai nepavyko sukurti skaidinio diske '%1'. @@ -906,27 +1139,27 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. CreatePartitionTableDialog - + Create Partition Table Sukurti skaidinių lentelę - + Creating a new partition table will delete all existing data on the disk. Naujos skaidinių lentelės kūrimas ištrins visus, diske esančius, duomenis. - + What kind of partition table do you want to create? Kokio tipo skaidinių lentelę norite sukurti? - + Master Boot Record (MBR) Paleidimo Įrašas (MBR) - + GUID Partition Table (GPT) GUID Skaidinių lentelė (GPT) @@ -934,22 +1167,22 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. CreatePartitionTableJob - + Create new %1 partition table on %2. Sukurti naują %1 skaidinių lentelę ties %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Sukurti naują <strong>%1</strong> skaidinių lentelę diske <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Kuriama nauja %1 skaidinių lentelė ties %2. - + The installer failed to create a partition table on %1. Diegimo programai nepavyko %1 sukurti skaidinių lentelės. @@ -957,45 +1190,41 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. CreateUserJob - + Create user %1 Sukurti naudotoją %1 - + Create user <strong>%1</strong>. Sukurti naudotoją <strong>%1</strong>. - - Creating user %1. - Kuriamas naudotojas %1. + + Preserving home directory + Išsaugomas namų katalogas - - Sudoers dir is not writable. - Nepavyko įrašymui sukurti katalogo sudoers. + + + Creating user %1 + Kuriamas naudotojas %1 - - Cannot create sudoers file for writing. - Nepavyko įrašymui sukurti failo sudoers. + + Configuring user %1 + Konfigūruojamas naudotojas %1 - - Cannot chmod sudoers file. - Nepavyko pritaikyti chmod failui sudoers. - - - - Cannot open groups file for reading. - Nepavyko skaitymui atverti grupių failo. + + Setting file permissions + Nustatomi failų leidimai CreateVolumeGroupDialog - + Create Volume Group Sukurti tomų grupę @@ -1003,22 +1232,22 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. CreateVolumeGroupJob - + Create new volume group named %1. Sukurti naują tomų grupę, pavadinimu %1. - + Create new volume group named <strong>%1</strong>. Sukurti naują tomų grupę, pavadinimu <strong>%1</strong>. - + Creating new volume group named %1. Kuriama nauja tomų grupė, pavadinimu %1. - + The installer failed to create a volume group named '%1'. Diegimo programai nepavyko sukurti tomų grupės pavadinimu „%1“. @@ -1026,41 +1255,41 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Pasyvinti tomų grupę, pavadinimu %1. - + Deactivate volume group named <strong>%1</strong>. Pasyvinti tomų grupę, pavadinimu <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. - Diegimo programai nepavyko pasyvinti tomų grupės, pavadinimu "%1". + Diegimo programai nepavyko pasyvinti tomų grupės, pavadinimu „%1“. DeletePartitionJob - + Delete partition %1. Ištrinti skaidinį %1. - + Delete partition <strong>%1</strong>. Ištrinti skaidinį <strong>%1</strong>. - + Deleting partition %1. Ištrinamas skaidinys %1. - + The installer failed to delete partition %1. Diegimo programai nepavyko ištrinti skaidinio %1. @@ -1068,46 +1297,46 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. DeviceInfoWidget - - 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. - Pasirinktame atminties įrenginyje esančios, <strong>skaidinių lentelės</strong> tipas.<br><br>Vienintelis būdas kaip galima pakeisti skaidinių lentelės tipą yra ištrinti ir iš naujo sukurti skaidinių lentelę, kas savo ruožtu ištrina visus atminties įrenginyje esančius duomenis.<br>Ši diegimo programa paliks esamą skaidinių lentelę, nebent aiškiai pasirinksite kitaip.<br>Jeigu nesate tikri, šiuolaikinėse sistemose pirmenybė yra teikiama GPT tipui. - - - + This device has a <strong>%1</strong> partition table. Šiame įrenginyje yra <strong>%1</strong> skaidinių lentelė. - + 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. Tai yra <strong>ciklo</strong> įrenginys.<br><br>Tai pseudo-įrenginys be skaidinių lentelės, kuris failą padaro prieinamą kaip bloko įrenginį. Tokio tipo sąrankoje, dažniausiai, yra tik viena failų sistema. - + 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. Šiai diegimo programai, pasirinktame atminties įrenginyje, <strong>nepavyko aptikti skaidinių lentelės</strong>.<br><br>Arba įrenginyje nėra skaidinių lentelės, arba ji yra pažeista, arba nežinomo tipo.<br>Ši diegimo programa gali jums sukurti skaidinių lentelę automatiškai arba per rankinio skaidymo puslapį. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Tai yra rekomenduojamas skaidinių lentelės tipas, skirtas šiuolaikinėms sistemoms, kurios yra paleidžiamos iš <strong>EFI</strong> paleidimo aplinkos. - + <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. <br><br>Šį skaidinių lentelės tipą yra patartina naudoti tik senesnėse sistemose, kurios yra paleidžiamos iš <strong>BIOS</strong> paleidimo aplinkos. Visais kitais atvejais yra rekomenduojamas GPT tipas.<br><strong>Įspėjimas:</strong> MBR skaidinių lentelė yra pasenusio MS-DOS eros standarto.<br>Gali būti kuriami tik 4 <em>pirminiai</em> skaidiniai, o iš tų 4, vienas gali būti <em>išplėstas</em> skaidinys, kuriame savo ruožtu gali būti daug <em>loginių</em> skaidinių. + + + 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. + Pasirinktame atminties įrenginyje esančios, <strong>skaidinių lentelės</strong> tipas.<br><br>Vienintelis būdas kaip galima pakeisti skaidinių lentelės tipą yra ištrinti ir iš naujo sukurti skaidinių lentelę, kas savo ruožtu ištrina visus atminties įrenginyje esančius duomenis.<br>Ši diegimo programa paliks esamą skaidinių lentelę, nebent aiškiai pasirinksite kitaip.<br>Jeigu nesate tikri, šiuolaikinėse sistemose pirmenybė yra teikiama GPT tipui. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1116,17 +1345,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Dracut skirtąją LUKS konfigūraciją įrašyti į %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - Praleisti LUKS konfigūracijos, kuri yra skirta Dracut, įrašymą: "/" skaidinys nėra užšifruotas + Praleisti LUKS konfigūracijos, kuri yra skirta Dracut, įrašymą: „/“ skaidinys nėra užšifruotas - + Failed to open %1 Nepavyko atverti %1 @@ -1134,7 +1363,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. DummyCppJob - + Dummy C++ Job Fiktyvi C++ užduotis @@ -1142,123 +1371,167 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. EditExistingPartitionDialog - + Edit Existing Partition Keisti jau esamą skaidinį - - Content: - Turinys: + + Con&tent: + Turi&nys: - + &Keep Išsa&ugoti - + Format Formatuoti - + Warning: Formatting the partition will erase all existing data. Įspėjimas: Formatuojant skaidinį, sunaikinami visi jame esantys duomenys. - + &Mount Point: &Prijungimo vieta: - + Si&ze: Dy&dis: - + MiB MiB - + Fi&le System: Fai&lų sistema: - + Flags: Vėliavėlės: - - Mountpoint already in use. Please select another one. - Prijungimo taškas jau yra naudojamas. Prašome pasirinkti kitą. + + Label for the filesystem + Failų sistemos etiketė + + + + FS Label: + FS etiketė: EncryptWidget - + Form Forma - + En&crypt system Užš&ifruoti sistemą - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Atrodo, kad jūsų sistema nepalaiko šifravimo pakankamai gerai, kad galėtų šifruoti visą sistemą. Galite įjungti šifravimą, bet dėl to gali nukentėti našumas. + + + Passphrase Slaptafrazė - + Confirm passphrase Patvirtinkite slaptafrazę - + + Please enter the same passphrase in both boxes. Prašome abiejuose langeliuose įrašyti tą pačią slaptafrazę. + + ErrorDialog + + + Details: + Išsamiau: + + + + Would you like to paste the install log to the web? + Ar norėtumėte įdėti diegimo žurnalą į saityną? + + FillGlobalStorageJob - + Set partition information Nustatyti skaidinio informaciją - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Įdiegti %1 <strong>naujame</strong> %2 sistemos skaidinyje su ypatybėmis <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Įdiegti %1 <strong>naujame</strong> %2 sistemos skaidinyje. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Nustatyti <strong>naują</strong> %2 skaidinį su prijungimo tašku <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Nustatyti <strong>naują</strong> %2 skaidinį su prijungimo tašku <strong>%1</strong> ir ypatybėmis <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Nustatyti <strong>naują</strong> %2 skaidinį su prijungimo tašku <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Įdiegti %2 sistemą %3 sistemos skaidinyje <strong>%1</strong> su ypatybėmis <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Nustatyti %3 skaidinį <strong>%1</strong> su prijungimo tašku <strong>%2</strong> ir ypatybėmis <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Nustatyti %3 skaidinį <strong>%1</strong> su prijungimo tašku <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Diegti %2 sistemą, %3 sistemos skaidinyje <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Nustatyti %3 skaidinį <strong>%1</strong> su prijungimo tašku <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Diegti paleidyklę skaidinyje <strong>%1</strong>. - + Setting up mount points. Nustatomi prijungimo taškai. @@ -1266,93 +1539,81 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. FinishedPage - + Form Forma - + &Restart now &Paleisti iš naujo dabar - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Viskas atlikta.</h1><br/>%1 sistema jūsų kompiuteryje jau nustatyta.<br/>Dabar galite pradėti naudotis savo naująja sistema. - + <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> <html><head/><body><p>Pažymėjus šį langelį, jūsų sistema nedelsiant pasileis iš naujo, kai spustelėsite <span style="font-style:italic;">Atlikta</span> ar užversite sąrankos programą.</p></body></html> - + <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. <h1>Viskas atlikta.</h1><br/>%1 sistema jau įdiegta.<br/>Galite iš naujo paleisti kompiuterį dabar ir naudotis savo naująja sistema; arba galite tęsti naudojimąsi %2 sistema demonstracinėje aplinkoje. - + <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> <html><head/><body><p>Pažymėjus šį langelį, jūsų sistema nedelsiant pasileis iš naujo, kai spustelėsite <span style="font-style:italic;">Atlikta</span> ar užversite diegimo programą.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Sąranka nepavyko</h1><br/>%1 nebuvo nustatyta jūsų kompiuteryje.<br/>Klaidos pranešimas buvo: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Diegimas nepavyko</h1><br/>%1 nebuvo įdiegta jūsų kompiuteryje.<br/>Klaidos pranešimas buvo: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Pabaiga + + + FinishedViewStep - - Setup Complete - Sąranka užbaigta - - - - Installation Complete - Diegimas užbaigtas - - - - The setup of %1 is complete. - %1 sąranka yra užbaigta. - - - - The installation of %1 is complete. - %1 diegimas yra užbaigtas. + + Finish + Pabaiga FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatuoti skaidinį %1 (failų sistema: %2, dydis: %3 MiB) diske %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatuoti <strong>%3MiB</strong> skaidinį <strong>%1</strong> su <strong>%2</strong> failų sistema. - + Formatting partition %1 with file system %2. Formatuojamas skaidinys %1 su %2 failų sistema. - + The installer failed to format partition %1 on disk '%2'. Diegimo programai nepavyko formatuoti „%2“ disko skaidinio %1. @@ -1360,72 +1621,72 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. GeneralRequirements - + has at least %1 GiB available drive space turi bent %1 GiB laisvos vietos diske - + There is not enough drive space. At least %1 GiB is required. Neužtenka vietos diske. Reikia bent %1 GiB. - + has at least %1 GiB working memory turi bent %1 GiB darbinės atminties - + The system does not have enough working memory. At least %1 GiB is required. Sistemai neužtenka darbinės atminties. Reikia bent %1 GiB. - + is plugged in to a power source prijungta prie maitinimo šaltinio - + The system is not plugged in to a power source. Sistema nėra prijungta prie maitinimo šaltinio. - + is connected to the Internet prijungta prie Interneto - + The system is not connected to the Internet. Sistema nėra prijungta prie Interneto. - + is running the installer as an administrator (root) - vykdo diegimo programa administratoriaus (root) teisėmis + vykdo diegimo programą pagrindinio naudotojo (root) teisėmis - + The setup program is not running with administrator rights. Sąrankos programa yra vykdoma be administratoriaus teisių. - + The installer is not running with administrator rights. Diegimo programa yra vykdoma be administratoriaus teisių. - + has a screen large enough to show the whole installer turi ekraną, pakankamai didelį, kad rodytų visą diegimo programą - + The screen is too small to display the setup program. Ekranas yra per mažas, kad būtų parodyta sąrankos programa. - + The screen is too small to display the installer. Ekranas yra per mažas, kad būtų parodyta diegimo programa. @@ -1433,7 +1694,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. HostInfoJob - + Collecting information about your machine. Renkama informacija apie jūsų kompiuterį. @@ -1441,25 +1702,25 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. IDJob - - + + + - OEM Batch Identifier OEM partijos identifikatorius - + Could not create directories <code>%1</code>. Nepavyko sukurti katalogų <code>%1</code>. - + Could not open file <code>%1</code>. Nepavyko atverti failo <code>%1</code>. - + Could not write to file <code>%1</code>. Nepavyko rašyti į failą <code>%1</code>. @@ -1467,7 +1728,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. InitcpioJob - + Creating initramfs with mkinitcpio. Sukuriama initramfs naudojant mkinitcpio. @@ -1475,7 +1736,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. InitramfsJob - + Creating initramfs. Sukuriama initramfs. @@ -1483,17 +1744,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. InteractiveTerminalPage - + Konsole not installed Konsole neįdiegta - + Please install KDE Konsole and try again! Įdiekite KDE Konsole ir bandykite dar kartą! - + Executing script: &nbsp;<code>%1</code> Vykdomas scenarijus: &nbsp;<code>%1</code> @@ -1501,28 +1762,15 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. InteractiveTerminalViewStep - + Script Scenarijus - - KeyboardPage - - - Set keyboard model to %1.<br/> - Nustatyti klaviatūros modelį kaip %1.<br/> - - - - Set keyboard layout to %1/%2. - Nustatyti klaviatūros išdėstymą kaip %1/%2. - - KeyboardQmlViewStep - + Keyboard Klaviatūra @@ -1530,7 +1778,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. KeyboardViewStep - + Keyboard Klaviatūra @@ -1538,65 +1786,88 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. LCLocaleDialog - + System locale setting Sistemos lokalės nustatymas - + 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>. Sistemos lokalės nustatymas įtakoja, kai kurių komandų eilutės naudotojo sąsajos elementų, kalbos ir simbolių rinkinį.<br/>Dabar yra nustatyta <strong>%1</strong>. - + &Cancel &Atsisakyti - + &OK &Gerai + + LOSHJob + + + Configuring encrypted swap. + Konfigūruojamas šifruotas sukeitimų skaidinys. + + + + No target system available. + Neprieinama jokia paskirties sistema. + + + + No rootMountPoint is set. + Nenustatyta „rootMountPoint“. + + + + No configFilePath is set. + Nenustatyta „configFilePath“. + + LicensePage - + Form Forma - + <h1>License Agreement</h1> <h1>Licencijos sutartis</h1> - + I accept the terms and conditions above. Sutinku su aukščiau išdėstytomis nuostatomis ir sąlygomis. - + Please review the End User License Agreements (EULAs). Peržiūrėkite galutinio naudotojo licencijos sutartis (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. Ši sąranka įdiegs nuosavybinę programinę įrangą, kuriai yra taikomos licencijavimo nuostatos. - + If you do not agree with the terms, the setup procedure cannot continue. Jeigu nesutinkate su nuostatomis, sąrankos procedūra negali būti tęsiama. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tam, kad pateiktų papildomas ypatybes ir pagerintų naudotojo patirtį, ši sąrankos procedūra gali įdiegti nuosavybinę programinę įrangą, kuriai yra taikomos licencijavimo nuostatos. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Jeigu nesutiksite su nuostatomis, nuosavybinė programinė įranga nebus įdiegta, o vietoj jos, bus naudojamos atvirojo kodo alternatyvos. @@ -1604,7 +1875,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. LicenseViewStep - + License Licencija @@ -1612,109 +1883,102 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 tvarkyklė</strong><br/>iš %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikos tvarkyklė</strong><br/><font color="Grey">iš %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 naršyklės papildinys</strong><br/><font color="Grey">iš %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodekas</strong><br/><font color="Grey">iš %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paketas</strong><br/><font color="Grey">iš %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">iš %2</font> - + File: %1 Failas: %1 - + + Hide license text + Slėpti licencijos tekstą + + + Show the license text Rodyti licencijos tekstą - + Open license agreement in browser. Atverti licencijos sutartį naršyklėje. - - - Hide license text - Slėpti licencijos tekstą - LocalePage - - The system language will be set to %1. - Sistemos kalba bus nustatyta į %1. - - - - The numbers and dates locale will be set to %1. - Skaičių ir datų lokalė bus nustatyta į %1. - - - + Region: Regionas: - + Zone: - Zona: + Sritis: - - + + &Change... K&eisti... - - - Set timezone to %1/%2.<br/> - Nustatyti laiko juostą kaip %1/%2.<br/> - LocaleQmlViewStep - + Location Vieta + + LocaleTests + + + Quit + Išeiti + + LocaleViewStep - + Location Vieta @@ -1722,35 +1986,35 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. LuksBootKeyFileJob - + Configuring LUKS key file. Konfigūruojamas LUKS raktų failas. - - + + No partitions are defined. Nėra jokių apibrėžtų skaidinių. - - - + + + Encrypted rootfs setup error Šifruoto rootfs sąrankos klaida - + Root partition %1 is LUKS but no passphrase has been set. Šaknies skaidinys %1 yra LUKS, tačiau nebuvo nustatyta jokia slaptafrazė. - + Could not create LUKS key file for root partition %1. Nepavyko šakniniam skaidiniui %1 sukurti LUKS rakto failo. - + Could not configure LUKS key file on partition %1. Nepavyko konfigūruoti LUKS rakto failo skaidinyje %1. @@ -1758,124 +2022,140 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. MachineIdJob - + Generate machine-id. Generuoti machine-id. - + Configuration Error Konfigūracijos klaida - + No root mount point is set for MachineId. Nenustatytas joks šaknies prijungimo taškas, skirtas MachineId. + + Map + + + Timezone: %1 + Laiko juosta: %1 + + + + 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. + Pasirinkite žemėlapyje pageidaujamą vietą, kad diegimo programa galėtų jums pasiūlyti + lokalės ir laiko juostos nustatymus. Žemiau galite derinti pasiūlytus nustatymus. Tempkite norėdami judinti žemėlapį + ir didinkite/mažinkite naudodami mygtukus +/- arba mastelio keitimui naudokite pelės ratuką. + + NetInstallViewStep - - + Package selection Paketų pasirinkimas - + Office software Raštinės programinė įranga - + Office package Raštinės paketas - + Browser software Naršyklės programinė įranga - + Browser package Naršyklės paketas - + Web browser Saityno naršyklė - + Kernel Branduolys - + Services Tarnybos - + Login Prisijungimas - + Desktop Darbalaukis - + Applications Programos - + Communication - + Komunikacija - + Development - + Plėtojimas - + Office - + Raštinė - + Multimedia - + Multimedija - + Internet - + Internetas - + Theming - + Apipavidalinimas - + Gaming - + Žaidimai - + Utilities - + Paslaugų programos NotesQmlViewStep - + Notes Pastabos @@ -1883,17 +2163,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. OEMPage - + Ba&tch: Par&tija: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Čia įveskite partijos identifikatorių. Jis bus saugomas paskirties sistemoje.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM konfigūracija</h1><p>Konfigūruojant paskirties sistemą, Calamares naudos OEM nustatymus.</p></body></html> @@ -1901,260 +2181,335 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. OEMViewStep - + OEM Configuration OEM konfigūracija - + Set the OEM Batch Identifier to <code>%1</code>. Nustatyti OEM partijos identifikatorių į <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Pasirinkite pageidaujamą regioną arba naudokite numatytuosius nustatymus. + + + + + + Timezone: %1 + Laiko juosta: %1 + + + + Select your preferred Zone within your Region. + Pasirinkite pageidaujamą sritį regiono ribose. + + + + Zones + Sritys + + + + You can fine-tune Language and Locale settings below. + Žemiau galite derinti kalbos ir lokalės nustatymus. + + PWQ - + Password is too short Slaptažodis yra per trumpas - + Password is too long Slaptažodis yra per ilgas - + Password is too weak Slaptažodis yra per silpnas - + Memory allocation error when setting '%1' - Atminties paskirstymo klaida, nustatant "%1" + Atminties paskirstymo klaida, nustatant „%1“ - + Memory allocation error Atminties paskirstymo klaida - + The password is the same as the old one Slaptažodis yra toks pats kaip ir senas - + The password is a palindrome Slaptažodis yra palindromas - + The password differs with case changes only Slaptažodyje skiriasi tik raidžių dydis - + The password is too similar to the old one Slaptažodis pernelyg panašus į senąjį - + The password contains the user name in some form Slaptažodyje tam tikru pavidalu yra naudotojo vardas - + The password contains words from the real name of the user in some form Slaptažodyje tam tikra forma yra žodžiai iš tikrojo naudotojo vardo - + The password contains forbidden words in some form Slaptažodyje tam tikra forma yra uždrausti žodžiai - - The password contains less than %1 digits - Slaptažodyje yra mažiau nei %1 skaitmenys - - - + The password contains too few digits Slaptažodyje yra per mažai skaitmenų - - The password contains less than %1 uppercase letters - Slaptažodyje yra mažiau nei %1 didžiosios raidės - - - + The password contains too few uppercase letters Slaptažodyje yra per mažai didžiųjų raidžių - - - The password contains less than %1 lowercase letters - Slaptažodyje yra mažiau nei %1 mažosios raidės + + + The password contains fewer than %n lowercase letters + + Slaptažodyje yra mažiau nei %n mažoji raidė + Slaptažodyje yra mažiau nei %n mažosios raidės + Slaptažodyje yra mažiau nei %n mažųjų raidžių + Slaptažodyje yra mažiau nei %n mažoji raidė + - + The password contains too few lowercase letters Slaptažodyje yra per mažai mažųjų raidžių - - The password contains less than %1 non-alphanumeric characters - Slaptažodyje yra mažiau nei %1 neraidiniai ir neskaitiniai simboliai - - - + The password contains too few non-alphanumeric characters Slaptažodyje yra per mažai neraidinių ir neskaitinių simbolių - - The password is shorter than %1 characters - Slaptažodyje yra mažiau nei %1 simboliai - - - + The password is too short Slaptažodis yra per trumpas - - The password is just rotated old one - Slaptažodis yra toks pats kaip ir senas, tik apverstas - - - - The password contains less than %1 character classes - Slaptažodyje yra mažiau nei %1 simbolių klasės - - - + The password does not contain enough character classes Slaptažodyje nėra pakankamai simbolių klasių - - The password contains more than %1 same characters consecutively - Slaptažodyje yra daugiau nei %1 tokie patys simboliai iš eilės - - - + The password contains too many same characters consecutively Slaptažodyje yra per daug tokių pačių simbolių iš eilės - - The password contains more than %1 characters of the same class consecutively - Slaptažodyje yra daugiau nei %1 tos pačios klasės simboliai iš eilės - - - + The password contains too many characters of the same class consecutively Slaptažodyje yra per daug tos pačios klasės simbolių iš eilės - - - The password contains monotonic sequence longer than %1 characters - Slaptažodyje yra ilgesnė nei %1 simbolių monotoninė seka + + + The password contains fewer than %n digits + + Slaptažodyje yra mažiau nei %n skaitmuo + Slaptažodyje yra mažiau nei %n skaitmenys + Slaptažodyje yra mažiau nei %n skaitmenų + Slaptažodyje yra mažiau nei %n skaitmuo + + + + + The password contains fewer than %n uppercase letters + + Slaptažodyje yra mažiau nei %n didžioji raidė + Slaptažodyje yra mažiau nei %n didžiosios raidės + Slaptažodyje yra mažiau nei %n didžiųjų raidžių + Slaptažodyje yra mažiau nei %n didžioji raidė + + + + + The password contains fewer than %n non-alphanumeric characters + + Slaptažodyje yra mažiau nei %n neraidinis ir neskaitinis simbolis + Slaptažodyje yra mažiau nei %n neraidiniai ir neskaitiniai simboliai + Slaptažodyje yra mažiau nei %n neraidinių ir neskaitinių simbolių + Slaptažodyje yra mažiau nei %n neraidinis ir neskaitinis simbolis + + + + + The password is shorter than %n characters + + Slaptažodyje yra mažiau nei %n simbolis + Slaptažodyje yra mažiau nei %n simboliai + Slaptažodyje yra mažiau nei %n simbolių + Slaptažodyje yra mažiau nei %n simbolis + - + + The password is a rotated version of the previous one + Šis slaptažodis yra apversta senojo slaptažodžio versija + + + + The password contains fewer than %n character classes + + Slaptažodyje yra mažiau nei %n simbolių klasė + Slaptažodyje yra mažiau nei %n simbolių klasės + Slaptažodyje yra mažiau nei %n simbolių klasių + Slaptažodyje yra mažiau nei %n simbolių klasė + + + + + The password contains more than %n same characters consecutively + + Slaptažodyje yra daugiau nei %n toks pats simbolis iš eilės + Slaptažodyje yra daugiau nei %n tokie patys simboliai iš eilės + Slaptažodyje yra daugiau nei %n tokių pačių simbolių iš eilės + Slaptažodyje yra daugiau nei %n toks pats simbolis iš eilės + + + + + The password contains more than %n characters of the same class consecutively + + Slaptažodyje yra daugiau nei %n tos pačios klasės simbolis iš eilės + Slaptažodyje yra daugiau nei %n tos pačios klasės simboliai iš eilės + Slaptažodyje yra daugiau nei %n tos pačios klasės simbolių iš eilės + Slaptažodyje yra daugiau nei %n tos pačios klasės simbolis iš eilės + + + + + The password contains monotonic sequence longer than %n characters + + Slaptažodyje yra ilgesnė nei %n simbolio monotoninė seka + Slaptažodyje yra ilgesnė nei %n simbolių monotoninė seka + Slaptažodyje yra ilgesnė nei %n simbolių monotoninė seka + Slaptažodyje yra ilgesnė nei %n simbolio monotoninė seka + + + + The password contains too long of a monotonic character sequence Slaptažodyje yra per ilga monotoninių simbolių seka - + No password supplied Nepateiktas joks slaptažodis - + Cannot obtain random numbers from the RNG device Nepavyksta gauti atsitiktinių skaičių iš RNG įrenginio - + Password generation failed - required entropy too low for settings Slaptažodžio generavimas nepavyko - reikalinga entropija nustatymams yra per maža - + The password fails the dictionary check - %1 Slaptažodis nepraeina žodyno patikros - %1 - + The password fails the dictionary check Slaptažodis nepraeina žodyno patikros - + Unknown setting - %1 Nežinomas nustatymas - %1 - + Unknown setting Nežinomas nustatymas - + Bad integer value of setting - %1 Bloga nustatymo sveikojo skaičiaus reikšmė - %1 - + Bad integer value Bloga sveikojo skaičiaus reikšmė - + Setting %1 is not of integer type Nustatymas %1 nėra sveikojo skaičiaus tipo - + Setting is not of integer type Nustatymas nėra sveikojo skaičiaus tipo - + Setting %1 is not of string type Nustatymas %1 nėra eilutės tipo - + Setting is not of string type Nustatymas nėra eilutės tipo - + Opening the configuration file failed Konfigūracijos failo atvėrimas nepavyko - + The configuration file is malformed Konfigūracijos failas yra netaisyklingas - + Fatal failure Lemtingoji klaida - + Unknown error Nežinoma klaida - + Password is empty Slaptažodis yra tuščias @@ -2162,40 +2517,48 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PackageChooserPage - + Form Forma - + Product Name Produkto pavadinimas - + TextLabel Teksto etiketė - + Long Product Description Ilgas produkto aprašas - + Package Selection Paketų pasirinkimas - + Please pick a product from the list. The selected product will be installed. Pasirinkite iš sąrašo produktą. Pasirinktas produktas bus įdiegtas. + + PackageChooserQmlViewStep + + + Packages + Paketai + + PackageChooserViewStep - + Packages Paketai @@ -2203,12 +2566,12 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PackageModel - + Name Pavadinimas - + Description Aprašas @@ -2216,17 +2579,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Page_Keyboard - + Form Forma - + Keyboard Model: Klaviatūros modelis: - + Type here to test your keyboard Rašykite čia ir išbandykite savo klaviatūrą @@ -2234,96 +2597,96 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. Page_UserSetup - + Form Forma - + What is your name? Koks jūsų vardas? - - What name do you want to use to log in? - Kokį vardą norite naudoti prisijungimui? - - - - Choose a password to keep your account safe. - Apsaugokite savo paskyrą slaptažodžiu - - - - - <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> - <small>Norint įsitikinti, kad rašydami slaptažodį nesuklydote, įrašykite tą patį slaptažodį du kartus. Stiprus slaptažodis yra raidžių, skaičių ir punktuacijos ženklų mišinys, jis turi būti mažiausiai aštuonių simbolių, be to, turėtų būti reguliariai keičiamas.</small> - - - - What is the name of this computer? - Koks šio kompiuterio vardas? - - - + Your Full Name Jūsų visas vardas - + + What name do you want to use to log in? + Kokį vardą norite naudoti prisijungimui? + + + login prisijungimas - + + What is the name of this computer? + Koks šio kompiuterio vardas? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Šis vardas bus naudojamas, jeigu padarysite savo kompiuterį matomą kitiems naudotojams tinkle.</small> - + Computer Name Kompiuterio vardas - - + + Choose a password to keep your account safe. + Apsaugokite savo paskyrą slaptažodžiu + + + + + <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> + <small>Norint įsitikinti, kad rašydami slaptažodį nesuklydote, įrašykite tą patį slaptažodį du kartus. Stiprus slaptažodis yra raidžių, skaičių ir punktuacijos ženklų mišinys, jis turi būti mažiausiai aštuonių simbolių, be to, turėtų būti reguliariai keičiamas.</small> + + + + Password Slaptažodis - - + + Repeat Password Pakartokite slaptažodį - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Pažymėjus šį langelį, bus atliekamas slaptažodžio stiprumo tikrinimas ir negalėsite naudoti silpną slaptažodį. - + Require strong passwords. Reikalauti stiprių slaptažodžių. - + Log in automatically without asking for the password. Prisijungti automatiškai, neklausiant slaptažodžio. - + Use the same password for the administrator account. Naudoti tokį patį slaptažodį administratoriaus paskyrai. - + Choose a password for the administrator account. Pasirinkite slaptažodį administratoriaus paskyrai. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Norint įsitikinti, kad rašydami slaptažodį nesuklydote, įrašykite tą patį slaptažodį du kartus.</small> @@ -2331,42 +2694,42 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PartitionLabelsView - + Root Šaknies - + Home Namų - + Boot Paleidimo - + EFI system EFI sistema - + Swap Sukeitimų (swap) - + New partition for %1 Naujas skaidinys, skirtas %1 - + New partition Naujas skaidinys - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2375,34 +2738,39 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PartitionModel - - + + Free Space Laisva vieta - - + + New partition Naujas skaidinys - + Name Pavadinimas - + File System Failų sistema - + + File System Label + Failų sistemos etiketė + + + Mount Point Prijungimo vieta - + Size Dydis @@ -2410,77 +2778,77 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PartitionPage - + Form Forma - + Storage de&vice: Atminties įre&nginys: - + &Revert All Changes &Sugrąžinti visus pakeitimus - + New Partition &Table Nauja skaidinių &lentelė - + Cre&ate Su&kurti - + &Edit &Keisti - + &Delete Iš&trinti - + New Volume Group Nauja tomų grupė - + Resize Volume Group Keisti tomų grupės dydį - + Deactivate Volume Group Pasyvinti tomų grupę - + Remove Volume Group Šalinti tomų grupę - + I&nstall boot loader on: Į&diegti paleidyklę skaidinyje: - + Are you sure you want to create a new partition table on %1? Ar tikrai %1 norite sukurti naują skaidinių lentelę? - + Can not create new partition Nepavyksta sukurti naują skaidinį - + 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. Skaidinių lentelėje ties %1 jau yra %2 pirminiai skaidiniai ir daugiau nebegali būti pridėta. Pašalinkite vieną pirminį skaidinį ir vietoj jo, pridėkite išplėstą skaidinį. @@ -2488,117 +2856,107 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PartitionViewStep - + Gathering system information... Renkama sistemos informacija... - + Partitions Skaidiniai - - Install %1 <strong>alongside</strong> another operating system. - Diegti %1 <strong>šalia</strong> kitos operacinės sistemos. + + Unsafe partition actions are enabled. + Nesaugūs veiksmai su skaidiniais yra įjungti. - - <strong>Erase</strong> disk and install %1. - <strong>Ištrinti</strong> diską ir diegti %1. + + Partitioning is configured to <b>always</b> fail. + Skaidymas yra sukonfigūruotas taip, kad <b>visada</b> patirtų nesėkmę. - - <strong>Replace</strong> a partition with %1. - <strong>Pakeisti</strong> skaidinį, įrašant %1. + + No partitions will be changed. + Nebus pakeisti jokie skaidiniai. - - <strong>Manual</strong> partitioning. - <strong>Rankinis</strong> skaidymas. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Įdiegti %1 <strong>šalia</strong> kitos operacinės sistemos diske <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Ištrinti</strong> diską <strong>%2</strong> (%3) ir diegti %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Pakeisti</strong> skaidinį diske <strong>%2</strong> (%3), įrašant %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Rankinis</strong> skaidymas diske <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Diskas <strong>%1</strong> (%2) - - - + Current: Dabartinis: - + After: Po: - + No EFI system partition configured Nėra sukonfigūruoto EFI sistemos skaidinio - - 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>esp</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. - EFI sistemos skaidinys yra būtinas, norint paleisti %1.<br/><br/>Tam, kad sukonfigūruotumėte EFI sistemos skaidinį, grįžkite atgal ir pasirinkite arba sukurkite FAT32 failų sistemą su įjungta <strong>esp</strong> vėliavėle ir <strong>%2</strong> prijungimo tašku.<br/><br/>Jūs galite tęsti ir nenustatę EFI sistemos skaidinio, tačiau tokiu atveju, gali nepavykti paleisti jūsų sistemos. + + EFI system partition configured incorrectly + Neteisingai sukonfigūruotas EFI sistemos skaidinys - - EFI system partition flag not set - Nenustatyta EFI sistemos skaidinio vėliavėlė + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + %1 paleidimui yra reikalingas EFI sistemos skaidinys.<br/><br/>Norėdami konfigūruoti EFI sistemos skaidinį, grįžkite atgal ir pasirinkite arba sukurkite tinkamą failų sistemą. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - EFI sistemos skaidinys yra būtinas, norint paleisti %1.<br/><br/>Skaidinys buvo sukonfigūruotas su prijungimo tašku <strong>%2</strong>, tačiau jo <strong>esp</strong> vėliavėlė yra nenustatyta.<br/>Tam, kad nustatytumėte vėliavėlę, grįžkite atgal ir redaguokite skaidinį.<br/><br/>Jūs galite tęsti ir nenustatę vėliavėlės, tačiau tokiu atveju, gali nepavykti paleisti jūsų sistemos. + + The filesystem must be mounted on <strong>%1</strong>. + Failų sistema privalo būti prijungta ties <strong>%1</strong>. - + + The filesystem must have type FAT32. + Failų sistema privalo būti FAT32 tipo. + + + + The filesystem must be at least %1 MiB in size. + Failų sistema privalo būti bent %1 MiB dydžio. + + + + The filesystem must have flag <strong>%1</strong> set. + Failų sistema privalo turėti nustatytą <strong>%1</strong> vėliavėlę. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Galite tęsti nenustatę EFI sistemos skaidinio, bet jūsų sistema gali nepasileisti. + + + Option to use GPT on BIOS Parinktis naudoti GPT per BIOS - - 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. - GPT skaidinių lentelė yra geriausias variantas visoms sistemoms. Ši diegimo programa palaiko tokią sąranką taip pat ir BIOS sistemoms.<br/><br/>Norėdami konfigūruoti GPT skaidinių lentelę BIOS sistemoje, (jei dar nesate to padarę) grįžkite atgal ir nustatykite skaidinių lentelę į GPT, toliau, sukurkite 8 MB neformatuotą skaidinį su įjungta <strong>bios_grub</strong> vėliavėle.<br/><br/>Neformatuotas 8 MB skaidinys yra būtinas, norint paleisti %1 BIOS sistemoje su GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT skaidinių lentelė yra geriausias variantas visoms sistemoms. Ši diegimo programa palaiko tokią sąranką taip pat ir BIOS sistemoms.<br/><br/>Norėdami konfigūruoti GPT skaidinių lentelę BIOS sistemoje, (jei dar nesate to padarę) grįžkite atgal ir nustatykite skaidinių lentelę į GPT, toliau, sukurkite 8 MB neformatuotą skaidinį su įjungta <strong>%2</strong> vėliavėle.<br/><br/>Neformatuotas 8 MB skaidinys yra būtinas, norint paleisti %1 BIOS sistemoje su GPT. - + Boot partition not encrypted Paleidimo skaidinys nėra užšifruotas - + 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. Kartu su užšifruotu šaknies skaidiniu, buvo nustatytas atskiras paleidimo skaidinys, tačiau paleidimo skaidinys nėra užšifruotas.<br/><br/>Dėl tokios sąrankos iškyla tam tikrų saugumo klausimų, kadangi svarbūs sisteminiai failai yra laikomi neužšifruotame skaidinyje.<br/>Jeigu norite, galite tęsti, tačiau failų sistemos atrakinimas įvyks vėliau, sistemos paleidimo metu.<br/>Norėdami užšifruoti paleidimo skaidinį, grįžkite atgal ir sukurkite jį iš naujo bei skaidinių kūrimo lange pažymėkite parinktį <strong>Užšifruoti</strong>. - + has at least one disk device available. turi bent vieną prieinamą disko įrenginį. - + There are no partitions to install on. Nėra skaidinių į kuriuos diegti. @@ -2606,13 +2964,13 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma išvaizdos ir turinio užduotis - - + + Could not select KDE Plasma Look-and-Feel package Nepavyko pasirinkti KDE Plasma išvaizdos ir turinio paketo @@ -2620,17 +2978,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PlasmaLnfPage - + Form Forma - + 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. Pasirinkite KDE Plasma darbalaukio išvaizdą ir turinį. Taip pat galite praleisti šį žingsnį ir konfigūruoti išvaizdą ir turinį, kai sistema bus nustatyta. Spustelėjus ant tam tikro išvaizdos ir turinio pasirinkimo, jums bus parodyta tiesioginė peržiūrą. - + 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. Pasirinkite KDE Plasma darbalaukio išvaizdą ir turinį. Taip pat galite praleisti šį žingsnį ir konfigūruoti išvaizdą ir turinį, kai sistema bus įdiegta. Spustelėjus ant tam tikro išvaizdos ir turinio pasirinkimo, jums bus parodyta tiesioginė peržiūrą. @@ -2638,7 +2996,7 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PlasmaLnfViewStep - + Look-and-Feel Išvaizda ir turinys @@ -2646,17 +3004,17 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. PreserveFiles - + Saving files for later ... Įrašomi failai vėlesniam naudojimui ... - + No files configured to save for later. Nėra sukonfigūruota įrašyti jokius failus vėlesniam naudojimui. - + Not all of the configured files could be preserved. Ne visus iš sukonfigūruotų failų pavyko išsaugoti. @@ -2664,14 +3022,14 @@ Diegimo programa užbaigs darbą ir visi pakeitimai bus prarasti. ProcessResult - + There was no output from the command. Nebuvo jokios išvesties iš komandos. - + Output: @@ -2680,52 +3038,52 @@ Išvestis: - + External command crashed. Išorinė komanda užstrigo. - + Command <i>%1</i> crashed. Komanda <i>%1</i> užstrigo. - + External command failed to start. Nepavyko paleisti išorinės komandos. - + Command <i>%1</i> failed to start. Nepavyko paleisti komandos <i>%1</i>. - + Internal error when starting command. Paleidžiant komandą, įvyko vidinė klaida. - + Bad parameters for process job call. Blogi parametrai proceso užduoties iškvietai. - + External command failed to finish. Nepavyko pabaigti išorinės komandos. - + Command <i>%1</i> failed to finish in %2 seconds. Nepavyko per %2 sek. pabaigti komandos <i>%1</i>. - + External command finished with errors. Išorinė komanda pabaigta su klaidomis. - + Command <i>%1</i> finished with exit code %2. Komanda <i>%1</i> pabaigta su išėjimo kodu %2. @@ -2733,89 +3091,95 @@ Išvestis: QObject - - Default Keyboard Model - Numatytasis klaviatūros modelis - - - - - Default - Numatytasis - - - - unknown - nežinoma - - - - extended - išplėsta - - - - unformatted - nesutvarkyta - - - - swap - sukeitimų (swap) - - - - Unpartitioned space or unknown partition table - Nesuskaidyta vieta arba nežinoma skaidinių lentelė - - - - (no mount point) - (nėra prijungimo taško) - - - - Requirements checking for module <i>%1</i> is complete. - Reikalavimų tikrinimas <i>%1</i> moduliui yra užbaigtas. - - - + %1 (%2) %1 (%2) - - No product - Nėra produkto + + unknown + nežinoma - - No description provided. - Nepateikta jokio aprašo. + + extended + išplėsta - - - - + + unformatted + nesutvarkyta + + + + swap + sukeitimų (swap) + + + + + Default + Numatytasis + + + + + + File not found Failas nerastas - + Path <pre>%1</pre> must be an absolute path. Kelias <pre>%1</pre> privalo būti absoliutus kelias. - + + Directory not found + Katalogas nerastas + + + + Could not create new random file <pre>%1</pre>. Nepavyko sukurti naujo atsitiktinio failo <pre>%1</pre>. + + + No product + Nėra produkto + + + + No description provided. + Nepateikta jokio aprašo. + + + + (no mount point) + (nėra prijungimo taško) + + + + Unpartitioned space or unknown partition table + Nesuskaidyta vieta arba nežinoma skaidinių lentelė + + + + Recommended + + + <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> + <p>Šis kompiuteris netenkina kai kurių %1 nustatymui keliamų rekomenduojamų reikalavimų.<br/> + Sąranką galima tęsti, bet kai kurios ypatybės gali būti išjungtos.</p> + RemoveUserJob - + Remove live user from target system Šalinti demonstracinį naudotoją iš paskirties sistemos @@ -2823,162 +3187,179 @@ Išvestis: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Šalinti tomų grupę, pavadinimu %1. - + Remove Volume Group named <strong>%1</strong>. Šalinti tomų grupę, pavadinimu <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. - Diegimo programai nepavyko pašalinti tomų grupės, pavadinimu "%1". + Diegimo programai nepavyko pašalinti tomų grupės, pavadinimu „%1“. ReplaceWidget - + Form Forma - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Pasirinkite, kur norėtumėte įdiegti %1.<br/><font color="red">Įspėjimas: </font>tai ištrins visus, pasirinktame skaidinyje esančius, failus. - + The selected item does not appear to be a valid partition. Pasirinktas elementas neatrodo kaip teisingas skaidinys. - + %1 cannot be installed on empty space. Please select an existing partition. %1 negali būti įdiegta laisvoje vietoje. Prašome pasirinkti esamą skaidinį. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 negali būti įdiegta išplėstame skaidinyje. Prašome pasirinkti esamą pirminį ar loginį skaidinį. - + %1 cannot be installed on this partition. %1 negali būti įdiegta šiame skaidinyje. - + Data partition (%1) Duomenų skaidinys (%1) - + Unknown system partition (%1) Nežinomas sistemos skaidinys (%1) - + %1 system partition (%2) %1 sistemos skaidinys (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Skaidinys %1 yra pernelyg mažas sistemai %2. Prašome pasirinkti skaidinį, kurio dydis siektų bent %3 GiB. - + <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. <strong>%2</strong><br/><br/>Šioje sistemoje niekur nepavyko rasti EFI skaidinio. Prašome grįžti ir naudoti rankinį skaidymą, kad nustatytumėte %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 sistema bus įdiegta skaidinyje %2.<br/><font color="red">Įspėjimas: </font>visi duomenys skaidinyje %2 bus prarasti. - + The EFI system partition at %1 will be used for starting %2. %2 paleidimui bus naudojamas EFI sistemos skaidinys, esantis %1. - + EFI system partition: EFI sistemos skaidinys: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Šis kompiuteris netenkina minimalių %1 diegimo reikalavimų.<br/> + Diegimas negali būti tęsiamas.</p> + + + + <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> + <p>Šis kompiuteris netenkina kai kurių %1 nustatymui keliamų rekomenduojamų reikalavimų.<br/> + Sąranką galima tęsti, bet kai kurios ypatybės gali būti išjungtos.</p> + + ResizeFSJob - + Resize Filesystem Job Failų sistemos dydžio keitimo užduotis - + Invalid configuration Neteisinga konfigūracija - + The file-system resize job has an invalid configuration and will not run. Failų sistemos dydžio keitimo užduotyje yra neteisinga konfigūracija ir užduotis nebus paleista. - + KPMCore not Available KPMCore neprieinama - + Calamares cannot start KPMCore for the file-system resize job. Diegimo programai Calamares nepavyksta paleisti KPMCore, kuri skirta failų sistemos dydžio keitimo užduočiai. - - - - - + + + + + Resize Failed Dydžio pakeisti nepavyko - + The filesystem %1 could not be found in this system, and cannot be resized. Šioje sistemoje nepavyko rasti %1 failų sistemos ir nepavyko pakeisti jos dydį. - + The device %1 could not be found in this system, and cannot be resized. Šioje sistemoje nepavyko rasti %1 įrenginio ir nepavyko pakeisti jo dydį. - - + + The filesystem %1 cannot be resized. %1 failų sistemos dydis negali būti pakeistas. - - + + The device %1 cannot be resized. %1 įrenginio dydis negali būti pakeistas. - + The filesystem %1 must be resized, but cannot. %1 failų sistemos dydis privalo būti pakeistas, tačiau tai negali būti atlikta. - + The device %1 must be resized, but cannot %1 įrenginio dydis privalo būti pakeistas, tačiau tai negali būti atlikta @@ -2986,22 +3367,22 @@ Išvestis: ResizePartitionJob - + Resize partition %1. Keisti skaidinio %1 dydį. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Pakeisti <strong>%2MiB</strong> skaidinio <strong>%1</strong> dydį iki <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Keičiamas %2MiB skaidinio %1 dydis iki %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Diegimo programai nepavyko pakeisti skaidinio %1 dydį diske '%2'. @@ -3009,7 +3390,7 @@ Išvestis: ResizeVolumeGroupDialog - + Resize Volume Group Keisti tomų grupės dydį @@ -3017,18 +3398,18 @@ Išvestis: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Keisti tomų grupės, pavadinimu %1, dydį iš %2 į %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Keisti tomų grupės, pavadinimu <strong>%1</strong>, dydį iš <strong>%2</strong> į <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Diegimo programai nepavyko pakeisti tomų grupės, kurios pavadinimas „%1“, dydžio. @@ -3036,53 +3417,25 @@ Išvestis: ResultsListDialog - + For best results, please ensure that this computer: Norėdami pasiekti geriausių rezultatų, įsitikinkite kad šis kompiuteris: - + System requirements Sistemos reikalavimai - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Šis kompiuteris netenkina minimalių %1 nustatymo reikalavimų.<br/>Sąranka negali būti tęsiama. <a href="#details">Išsamiau...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Šis kompiuteris netenkina minimalių %1 diegimo reikalavimų.<br/>Diegimas negali būti tęsiamas. <a href="#details">Išsamiau...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Šis kompiuteris netenkina kai kurių %1 nustatymui rekomenduojamų reikalavimų.<br/>Sąranką galima tęsti, tačiau kai kurios funkcijos gali būti išjungtos. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Šis kompiuteris netenkina kai kurių %1 diegimui rekomenduojamų reikalavimų.<br/>Diegimą galima tęsti, tačiau kai kurios funkcijos gali būti išjungtos. - - - - This program will ask you some questions and set up %2 on your computer. - Programa užduos kelis klausimus ir padės įsidiegti %2. - - ScanningDialog - + Scanning storage devices... Peržiūrimi atminties įrenginiai... - + Partitioning Skaidymas @@ -3090,29 +3443,29 @@ Išvestis: SetHostNameJob - + Set hostname %1 Nustatyti kompiuterio vardą %1 - + Set hostname <strong>%1</strong>. Nustatyti kompiuterio vardą <strong>%1</strong>. - + Setting hostname %1. Nustatomas kompiuterio vardas %1. + - Internal Error Vidinė klaida - - + + Cannot write hostname to target system Nepavyko įrašyti kompiuterio vardo į paskirties sistemą @@ -3120,29 +3473,29 @@ Išvestis: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Nustatyti klaviatūros modelį kaip %1, o išdėstymą kaip %2-%3 - + Failed to write keyboard configuration for the virtual console. Nepavyko įrašyti klaviatūros sąrankos virtualiam pultui. - - - + + + Failed to write to %1 Nepavyko įrašyti į %1 - + Failed to write keyboard configuration for X11. Nepavyko įrašyti klaviatūros sąrankos X11 aplinkai. - + Failed to write keyboard configuration to existing /etc/default directory. Nepavyko įrašyti klaviatūros konfigūracijos į esamą /etc/default katalogą. @@ -3150,82 +3503,82 @@ Išvestis: SetPartFlagsJob - + Set flags on partition %1. Nustatyti vėliavėles skaidinyje %1. - + Set flags on %1MiB %2 partition. Nustatyti vėliavėles %1MiB skaidinyje %2. - + Set flags on new partition. Nustatyti vėliavėles naujame skaidinyje. - + Clear flags on partition <strong>%1</strong>. Išvalyti vėliavėles skaidinyje <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Išvalyti vėliavėles %1MiB skaidinyje <strong>%2</strong>. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Pažymėti vėliavėle %1MiB skaidinį <strong>%2</strong> kaip <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Išvalomos vėliavėlės %1MiB skaidinyje<strong>%2</strong>. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Nustatomos vėliavėlės <strong>%3</strong>, %1MiB skaidinyje <strong>%2</strong>. - - - + Clear flags on new partition. Išvalyti vėliavėles naujame skaidinyje. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Pažymėti vėliavėle skaidinį <strong>%1</strong> kaip <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Pažymėti vėliavėle %1MiB skaidinį <strong>%2</strong> kaip <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Pažymėti vėliavėle naują skaidinį kaip <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Išvalomos vėliavėlės skaidinyje <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Išvalomos vėliavėlės %1MiB skaidinyje<strong>%2</strong>. + + + Clearing flags on new partition. Išvalomos vėliavėlės naujame skaidinyje. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Nustatomos <strong>%2</strong> vėliavėlės skaidinyje <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Nustatomos vėliavėlės <strong>%3</strong>, %1MiB skaidinyje <strong>%2</strong>. + + + Setting flags <strong>%1</strong> on new partition. Nustatomos vėliavėlės <strong>%1</strong> naujame skaidinyje. - + The installer failed to set flags on partition %1. Diegimo programai nepavyko nustatyti vėliavėlių skaidinyje %1. @@ -3233,42 +3586,42 @@ Išvestis: SetPasswordJob - + Set password for user %1 Nustatyti naudotojo %1 slaptažodį - + Setting password for user %1. Nustatomas slaptažodis naudotojui %1. - + Bad destination system path. Neteisingas paskirties sistemos kelias. - + rootMountPoint is %1 rootMountPoint yra %1 - + Cannot disable root account. - Nepavyksta išjungti administratoriaus (root) paskyros. + Nepavyksta išjungti pagrindinio naudotojo (root) paskyros. - + passwd terminated with error code %1. komanda passwd nutraukė darbą dėl klaidos kodo %1. - + Cannot set password for user %1. Nepavyko nustatyti slaptažodžio naudotojui %1. - + usermod terminated with error code %1. komanda usermod nutraukė darbą dėl klaidos kodo %1. @@ -3276,45 +3629,82 @@ Išvestis: SetTimezoneJob - + Set timezone to %1/%2 Nustatyti laiko juostą kaip %1/%2 - + Cannot access selected timezone path. Nepavyko pasiekti pasirinktos laiko zonos - + Bad path: %1 Neteisingas kelias: %1 - + Cannot set timezone. Negalima nustatyti laiko juostas. - + Link creation failed, target: %1; link name: %2 Nuorodos sukūrimas nepavyko, paskirtis: %1; nuorodos pavadinimas: %2 - + Cannot set timezone, Nepavyksta nustatyti laiko juostos, - + Cannot open /etc/timezone for writing Nepavyksta įrašymui atidaryti failo /etc/timezone + + SetupGroupsJob + + + Preparing groups. + Ruošiamos grupės. + + + + + Could not create groups in target system + Nepavyko paskirties sistemoje sukurti grupių + + + + These groups are missing in the target system: %1 + Paskirties sistemoje nėra šių grupių: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Konfigūruoti <pre>sudo</pre> naudotojus. + + + + Cannot chmod sudoers file. + Nepavyko pritaikyti chmod failui sudoers. + + + + Cannot create sudoers file for writing. + Nepavyko įrašymui sukurti failo sudoers. + + ShellProcessJob - + Shell Processes Job Apvalkalo procesų užduotis @@ -3322,81 +3712,117 @@ Išvestis: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Tai yra apžvalga to, kas įvyks, prasidėjus sąrankos procedūrai. + + &OK + &Gerai - - This is an overview of what will happen once you start the install procedure. - Tai yra apžvalga to, kas įvyks, prasidėjus diegimo procedūrai. + + &Yes + &Taip - - - SummaryViewStep - - Summary - Suvestinė + + &No + &Ne + + + + &Cancel + A&tsisakyti + + + + &Close + &Užverti TrackingInstallJob - + Installation feedback Grįžtamasis ryšys apie diegimą - + Sending installation feedback. Siunčiamas grįžtamasis ryšys apie diegimą. - + Internal error in install-tracking. Vidinė klaida diegimo sekime. - + HTTP request timed out. Baigėsi HTTP užklausos laikas. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE naudotojo grįžtamasis ryšys + + + + Configuring KDE user feedback. + Konfigūruojamas KDE naudotojo grįžtamasis ryšys. + + + + + Error in KDE user feedback configuration. + Klaida KDE naudotojo grįžtamojo ryšio konfigūracijoje. + + + + Could not configure KDE user feedback correctly, script error %1. + Nepavyko teisingai sukonfigūruoti KDE naudotojo grįžtamojo ryšio, scenarijaus klaida %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Nepavyko teisingai sukonfigūruoti KDE naudotojo grįžtamojo ryšio, Calamares klaida %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Grįžtamasis ryšys apie kompiuterį - + Configuring machine feedback. Konfigūruojamas grįžtamasis ryšys apie kompiuterį. - - + + Error in machine feedback configuration. Klaida grįžtamojo ryšio apie kompiuterį konfigūravime. - + Could not configure machine feedback correctly, script error %1. Nepavyko teisingai sukonfigūruoti grįžtamojo ryšio apie kompiuterį, scenarijaus klaida %1. - + Could not configure machine feedback correctly, Calamares error %1. Nepavyko teisingai sukonfigūruoti grįžtamojo ryšio apie kompiuterį, Calamares klaida %1. @@ -3404,106 +3830,97 @@ Išvestis: TrackingPage - + Form Forma - + Placeholder Vietaženklis - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Tai pažymėdami, nesiųsite <span style=" font-weight:600;">visiškai jokios informacijos</span> apie savo diegimą.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Spustelėkite čia norėdami <span style=" font-weight:600;">nesiųsti visiškai jokios informacijos</span> apie savo diegimą.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Išsamesnei informacijai apie naudotojų grįžtamąjį ryšį, spustelėkite čia</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Diegimo sekimas padeda %1 matyti kiek jie turi naudotojų, į kokią aparatinę įrangą naudotojai diegia %1 ir (su paskutiniais dviejais parametrais žemiau), gauti tęstinę informaciją apie pageidaujamas programas. Norėdami matyti kas bus siunčiama, šalia kiekvienos srities spustelėkite žinyno piktogramą. + + 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. + Sekimas padeda matyti kaip dažnai yra įdiegiama %1, kokioje aparatinėje įrangoje ji yra įdiegiama bei kokios yra naudojamos programos. Norėdami pamatyti kas bus išsiųsta, šalia kiekvienos srities spustelėkite pagalbos piktogramą. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Tai pažymėdami, išsiųsite informaciją apie savo diegimą ir aparatinę įrangą. Ši informacija bus <b>išsiųsta tik vieną kartą</b>, užbaigus diegimą. + + 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. + Tai pažymėdami, išsiųsite informaciją apie savo diegimą ir aparatinę įrangą. Ši informacija bus išsiųsta tik <b>vieną kartą</b>, užbaigus diegimą. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Tai pažymėdami, <b>periodiškai</b> siųsite informaciją apie savo diegimą, aparatinę įrangą ir programas į %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Tai pažymėdami, jūs periodiškai siųsite informaciją apie savo <b>kompiuterio</b> diegimą, aparatinę įrangą ir programas į %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Tai pažymėdami, <b>reguliariai</b> siųsite informaciją apie savo diegimą, aparatinę įrangą, programas ir naudojimo būdus į %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Tai pažymėję, reguliariai į %1 siųsite informaciją apie savo <b>naudotojo</b> diegimą, aparatinę įrangą, programas bei naudojimosi programomis šablonus. TrackingViewStep - + Feedback Grįžtamasis ryšys + + UmountJob + + + Unmount file systems. + Atjungti failų sistemas. + + + + No target system available. + Neprieinama jokia paskirties sistema. + + + + No rootMountPoint is set. + Nenustatyta „rootMountPoint“. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Jei šiuo kompiuteriu naudosis keli žmonės, po sąrankos galite sukurti papildomas paskyras.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Jei šiuo kompiuteriu naudosis keli žmonės, po diegimo galite sukurti papildomas paskyras.</small> + + + UsersQmlViewStep - - Your username is too long. - Jūsų naudotojo vardas yra pernelyg ilgas. - - - - Your username must start with a lowercase letter or underscore. - Jūsų naudotojo vardas privalo prasidėti mažąja raide arba pabraukimo brūkšniu. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Yra leidžiamos tik mažosios raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. - - - - Only letters, numbers, underscore and hyphen are allowed. - Yra leidžiamos tik raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. - - - - Your hostname is too short. - Jūsų kompiuterio vardas yra pernelyg trumpas. - - - - Your hostname is too long. - Jūsų kompiuterio vardas yra pernelyg ilgas. - - - - Your passwords do not match! - Jūsų slaptažodžiai nesutampa! + + Users + Naudotojai UsersViewStep - + Users Naudotojai @@ -3511,65 +3928,67 @@ Išvestis: VariantModel - + Key + Column header for key/value Raktas - + Value + Column header for key/value Reikšmė VolumeGroupBaseDialog - + Create Volume Group Sukurti tomų grupę - + List of Physical Volumes Fizinių tomų sąrašas - + Volume Group Name: Tomų grupės pavadinimas: - + Volume Group Type: Tomų grupės tipas: - + Physical Extent Size: Fizinio masto dydis: - + MiB MiB - + Total Size: Bendras dydis: - + Used Size: Panaudota: - + Total Sectors: Iš viso sektorių: - + Quantity of LVs: Loginių tomų skaičius: @@ -3577,106 +3996,106 @@ Išvestis: WelcomePage - + Form Forma - - + + Select application and system language Pasirinkite programų ir sistemos kalbą + &About + &Apie + + + Open donations website Atverti paaukojimų internetinę svetainę - + &Donate &Paaukoti - + Open help and support website Atverti pagalbos ir palaikymo internetinę svetainę + &Support + &Palaikymas + + + Open issues and bug-tracking website Atverti strigčių ir klaidų sekimo internetinę svetainę - Open release notes website - Atverti laidos informacijos internetinę svetainę - - - - &Release notes - Lai&dos informacija - - - &Known issues Ž&inomos problemos - - &Support - &Palaikymas + + Open release notes website + Atverti laidos informacijos internetinę svetainę - - &About - &Apie + + &Release notes + Lai&dos informacija - - <h1>Welcome to the %1 installer.</h1> - <h1>Jus sveikina %1 diegimo programa.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Jus sveikina Calamares diegimo programa, skirta %1 sistemai.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Jus sveikina Calamares sąrankos programa, skirta %1 sistemai.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Jus sveikina %1 sąranka.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Jus sveikina Calamares diegimo programa, skirta %1 sistemai.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Jus sveikina %1 diegimo programa.</h1> + + + + %1 support + %1 palaikymas + + + About %1 setup Apie %1 sąranką - + About %1 installer Apie %1 diegimo programą - + <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. - <h1>%1</h1><br/><strong>%2<br/>skirta %3</strong><br/><br/>Autorių teisės 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorių teisės 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Dėkojame <a href="https://calamares.io/team/">Calamares komandai</a> bei <a href="https://www.transifex.com/calamares/calamares/">Calamares vertėjų komandai</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> plėtojimą remia <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Išlaisvinanti programinė įranga. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 palaikymas + <h1>%1</h1><br/><strong>%2<br/>skirta %3</strong><br/><br/>Autorių teisės 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorių teisės 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Dėkojame <a href="https://calamares.io/team/">Calamares komandai</a> ir <a href="https://www.transifex.com/calamares/calamares/">Calamares vertėjų komandai</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> plėtojimą remia <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Išlaisvinanti programinė įranga. WelcomeQmlViewStep - + Welcome Pasisveikinimas @@ -3684,31 +4103,173 @@ Išvestis: WelcomeViewStep - + Welcome Pasisveikinimas + + ZfsJob + + + Create ZFS pools and datasets + Sukurti ZFS telkinius ir duomenų rinkinius + + + + Failed to create zpool on + Nepavyko sukurti zpool ties + + + + Configuration Error + Konfigūracijos klaida + + + + No partitions are available for ZFS. + Nėra jokių skaidinių, prieinamų ZFS. + + + + Internal data missing + Trūksta vidinių duomenų + + + + + Failed to create zpool + Nepavyko sukurti zpool + + + + Failed to create dataset + Nepavyko sukurti duomenų rinkinio + + + + The output was: + Išvestis buvo tokia: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + skirta %3</strong><br/><br/> + Autorių teisės 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Autorių teisės 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Dėkojame <a href='https://calamares.io/team/'>Calamares komandai</a> + ir <a href='https://www.transifex.com/calamares/calamares/'>Calamares + vertėjų komandai</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + plėtojimą remia <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Išlaisvinanti programinė įranga. - + + Back + Atgal + + + + calamares-sidebar + + + Show debug information + Rodyti derinimo informaciją + + + + finishedq + + + Installation Completed + Diegimas užbaigtas + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 įdiegta jūsų kompiuteryje.<br/> + Galite iš naujo paleisti kompiuterį dabar ir naudotis savo naująja sistema; arba galite ir toliau naudotis demonstracine aplinka. + + + + Close Installer + Užverti diegimo programą + + + + Restart System + Paleisti sistemą iš naujo + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Pilnas diegimo žurnalas yra prieinamas kaip installation.log failas, esantis demonstracinio naudotojo namų kataloge.<br/> + Šis žurnalas yra nukopijuotas paskirties sistemoje į failą /var/log/installation.log.</p> + + + + finishedq@mobile + + + Installation Completed + Diegimas užbaigtas + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 įdiegta jūsų kompiuteryje.<br/> + Dabar galite paleisti savo įrenginį iš naujo. + + + + Close + Užverti + + + + Restart + Paleisti iš naujo + + + + i18n + + + <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>. + <h1>Kalbos</h1> </br> + Sistemos lokalės nustatymas įtakoja, kai kurių komandų eilutės naudotojo sąsajos elementų, kalbos ir simbolių rinkinį. Dabar yra nustatyta <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Lokalės</h1> </br> + Sistemos lokalės nustatymas įtakoja skaičių ir datų formatą. Dabar yra nustatyta <strong>%1</strong>. + + + Back Atgal @@ -3716,52 +4277,43 @@ Išvestis: keyboardq - - Keyboard Model - Klaviatūros modelis + + To activate keyboard preview, select a layout. + Norėdami aktyvuoti klaviatūros peržiūrą, pasirinkite išdėstymą. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Klaviatūros modelis: - - Refresh - Įkelti iš naujo - - - - + Layouts Išdėstymai - - - Keyboard Layout - Klaviatūros išdėstymas + + Type here to test your keyboard + Rašykite čia ir išbandykite savo klaviatūrą - - Models - Modeliai - - - + Variants Variantai + + + localeq - - Test your keyboard - Išbandykite savo klaviatūrą + + Change + Keisti notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3769,34 +4321,262 @@ Išvestis: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Jus sveikina %1 <quote>%2</quote> diegimo programa</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice yra galingas ir laisvasis raštinės programų paketas, naudojamas milijonų žmonių visame pasaulyje. Į jį įeina kelios programos, kurios padaro jį labiausiai universaliu laisvuoju ir atvirojo kodo raštinės programų paketu rinkoje.<br/> + Numatytoji parinktis. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Jei nenorite diegti raštinės programų paketo, tiesiog pasirinkite „Be raštinės programų paketo“. Atsiradus poreikiui vėliau visada galite pridėti vieną (ar daugiau) raštinės programų paketą į savo įdiegtą sistemą. + + + + No Office Suite + Be raštinės programų paketo + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Sukurti minimalų darbalaukio diegimą, pašalinti visas papildomas programas ir vėliau spręsti, ką pridėti į savo sistemą. Kaip pavyzdys, į tokį diegimą nebus įtrauktas raštinės programų paketas, medijos leistuvės, paveikslų žiūryklė ir spausdinimo palaikymas. Bus tik darbalaukis, failų naršyklė, paketų tvarkytuvė, tekstų redaktorius ir paprasta saityno naršyklė. + + + + Minimal Install + Minimalus diegimas + + + + Please select an option for your install, or use the default: LibreOffice included. + Pasirinkite diegimo parinktį arba naudokite numatytąją: į ją įtrauktas LibreOffice. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Tai yra pavyzdinis QML failas, rodantis parinktis raiškiuoju tekstu su interaktyviu turiniu.</p> + + <p>QML su raiškiuoju tekstu gali naudoti HTML žymes, interaktyvus turinys yra naudingas jutikliniuose ekranuose.</p> + + <p><b>Tai yra pusjuodis tekstas</b></p> + <p><i>Tai yra kursyvinis tekstas</i></p> + <p><u>Tai yra pabrauktas tekstas</u></p> + <p><center>Šis tekstas bus lygiuojamas centre.</center></p> + <p><s>Tai yra perbraukimas</s></p> + + <p>Kodo pavyzdžiai: + <code>ls -l /home</code></p> + + <p><b>Sąrašai:</b></p> + <ul> + <li>Intel CPU sistemos</li> + <li>AMD CPU sistemos</li> + </ul> + + <p>Vertikalioji slankjuostė yra reguliuojama, dabartinis plotis nustatytas į 10.</p> + + + + Back + Atgal + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Pasirinkite naudotojo vardą ir prisijungimo duomenis, kad galėtumėte prisijungti ir atlikti administravimo užduotis + + + + What is your name? + Koks jūsų vardas? + + + + Your Full Name + Jūsų visas vardas + + + + What name do you want to use to log in? + Kokį vardą norite naudoti prisijungimui? + + + + Login Name + Prisijungimo vardas + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Jei šiuo kompiuteriu naudosis keli žmonės, po diegimo galėsite sukurti papildomas paskyras. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Yra leidžiamos tik mažosios raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai. + + + + root is not allowed as username. + root neleidžiama naudoti kaip naudotojo vardą. + + + + What is the name of this computer? + Koks šio kompiuterio vardas? + + + + Computer Name + Kompiuterio vardas + + + + This name will be used if you make the computer visible to others on a network. + Šis vardas bus naudojamas, jeigu padarysite savo kompiuterį matomą kitiems naudotojams tinkle. + + + + localhost is not allowed as hostname. + localhost neleidžiama naudoti kaip naudotojo vardą. + + + + Choose a password to keep your account safe. + Apsaugokite savo paskyrą slaptažodžiu + + + + Password + Slaptažodis + + + + Repeat Password + Pakartokite slaptažodį + + + + 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. + Norint įsitikinti, kad rašydami slaptažodį nesuklydote, įrašykite tą patį slaptažodį du kartus. Stiprus slaptažodis yra raidžių, skaičių ir punktuacijos ženklų mišinys, jis turi būti mažiausiai aštuonių simbolių, be to, turėtų būti reguliariai keičiamas. + + + + Validate passwords quality + Tikrinti slaptažodžių kokybę + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Pažymėjus šį langelį, bus atliekamas slaptažodžio stiprumo tikrinimas ir negalėsite naudoti silpną slaptažodį. + + + + Log in automatically without asking for the password + Prisijungti automatiškai, neklausiant slaptažodžio + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Yra leidžiamos tik raidės, skaitmenys, pabraukimo brūkšniai ir brūkšneliai, mažiausiai du simboliai. + + + + Reuse user password as root password + Naudotojo slaptažodį naudoti pakartotinai kaip pagrindinio naudotojo (root) slaptažodį + + + + Use the same password for the administrator account. + Naudoti tokį patį slaptažodį administratoriaus paskyrai. + + + + Choose a root password to keep your account safe. + Pasirinkite pagrindinio naudotojo (root) slaptažodį, kad apsaugotumėte savo paskyrą. + + + + Root Password + Pagrindinio naudotojo (Root) slaptažodis + + + + Repeat Root Password + Pakartokite pagrindinio naudotojo (Root) slaptažodį + + + + Enter the same password twice, so that it can be checked for typing errors. + Norint įsitikinti, kad rašydami slaptažodį nesuklydote, įrašykite tą patį slaptažodį du kartus. + + + + welcomeq + + + <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> + <h3>Jus sveikina %1 <quote>%2</quote> diegimo programa</h3> + <p>Ši programa užduos jums kelis klausimus ir padės kompiuteryje nusistatyti %1.</p> + + + About Apie - + Support Palaikymas - + Known issues Žinomos problemos - + Release notes Laidos informacija - + Donate Paaukoti diff --git a/lang/calamares_lv.ts b/lang/calamares_lv.ts new file mode 100644 index 000000000..12269c477 --- /dev/null +++ b/lang/calamares_lv.ts @@ -0,0 +1,4520 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + + + + + 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. + + + + + 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. + + + + + BootLoaderModel + + + Master Boot Record of %1 + + + + + Boot Partition + + + + + System Partition + + + + + Do not install a boot loader + + + + + %1 (%2) + + + + + Calamares::BlankViewStep + + + Blank Page + + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + + + + + Type: + + + + + + none + + + + + Interface: + + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + + + + + Debug information + + + + + Calamares::ExecutionViewStep + + + Set up + + + + + Install + + + + + Calamares::FailJob + + + Job failed (%1) + + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + + (%n second(s)) + + + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + + + + + Installation Failed + + + + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + + + + + Continue with installation? + + + + + 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> + + + + + 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> + + + + + &Set up now + + + + + &Install now + + + + + Go &back + + + + + &Set up + + + + + &Install + + + + + Setup is complete. Close the setup program. + + + + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + + Cancel setup? + + + + + Cancel installation? + + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Setup Program + + + + + %1 Installer + + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + + + + + Select storage de&vice: + + + + + + + + Current: + + + + + After: + + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + 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. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + + + + + Si&ze: + + + + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + 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. + + + + + 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. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <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. + + + + + 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. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + + + + + %1 - (%2) + device[name] - (device-node[name]) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Con&tent: + + + + + &Keep + + + + + Format + + + + + Warning: Formatting the partition will erase all existing data. + + + + + &Mount Point: + + + + + Si&ze: + + + + + MiB + + + + + Fi&le System: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + &Restart now + + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + + + + + FinishedViewStep + + + Finish + + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + + + + + KeyboardQmlViewStep + + + Keyboard + + + + + KeyboardViewStep + + + Keyboard + + + + + LCLocaleDialog + + + System locale setting + + + + + 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>. + + + + + &Cancel + + + + + &OK + + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + + + + + <h1>License Agreement</h1> + + + + + I accept the terms and conditions above. + + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + + + + + LicenseWidget + + + URL: %1 + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + + + + + Zone: + + + + + + &Change... + + + + + LocaleQmlViewStep + + + Location + + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + + + + + 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. + + + + + NetInstallViewStep + + + Package selection + + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + + + + + Services + + + + + Login + + + + + Desktop + + + + + Applications + + + + + Communication + + + + + Development + + + + + Office + + + + + Multimedia + + + + + Internet + + + + + Theming + + + + + Gaming + + + + + Utilities + + + + + NotesQmlViewStep + + + Notes + + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + The password is shorter than %n characters + + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Password is empty + + + + + PackageChooserPage + + + Form + + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + + + + + PackageChooserViewStep + + + Packages + + + + + PackageModel + + + Name + + + + + Description + + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + + + + + Type here to test your keyboard + + + + + Page_UserSetup + + + Form + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + login + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + + + + + Choose a password to keep your account safe. + + + + + + <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> + + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + + + + + Boot + + + + + EFI system + + + + + Swap + + + + + New partition for %1 + + + + + New partition + + + + + %1 %2 + size[number] filesystem[name] + + + + + PartitionModel + + + + Free Space + + + + + + New partition + + + + + Name + + + + + File System + + + + + File System Label + + + + + Mount Point + + + + + Size + + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + + + + + After: + + + + + No EFI system partition configured + + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + + + + + unknown + + + + + extended + + + + + unformatted + + + + + swap + + + + + + Default + + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <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. + + + + + + + <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. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + StandardButtons + + + &OK + + + + + &Yes + + + + + &No + + + + + &Cancel + + + + + &Close + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + + + + + UsersViewStep + + + Users + + + + + VariantModel + + + Key + Column header for key/value + + + + + Value + Column header for key/value + + + + + VolumeGroupBaseDialog + + + Create Volume Group + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + + Select application and system language + + + + + &About + + + + + Open donations website + + + + + &Donate + + + + + Open help and support website + + + + + &Support + + + + + Open issues and bug-tracking website + + + + + &Known issues + + + + + Open release notes website + + + + + &Release notes + + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + + + + + <h1>Welcome to %1 setup.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + + About %1 setup + + + + + About %1 installer + + + + + <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. + + + + + WelcomeQmlViewStep + + + Welcome + + + + + WelcomeViewStep + + + Welcome + + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + + + + + Layouts + + + + + Type here to test your keyboard + + + + + Variants + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + + + + + Support + + + + + Known issues + + + + + Release notes + + + + + Donate + + + + diff --git a/lang/calamares_mk.ts b/lang/calamares_mk.ts index faf56941e..6c360797d 100644 --- a/lang/calamares_mk.ts +++ b/lang/calamares_mk.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Празна Страна @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools - Алатки + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Инсталирај @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Готово @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + Грешка + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Инсталацијата е готова. Исклучете го инсталерот. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - Инсталацијата е готова. Исклучете го инсталерот. - - - - Error - Грешка - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_ml.ts b/lang/calamares_ml.ts index c729789fa..3341d89c2 100644 --- a/lang/calamares_ml.ts +++ b/lang/calamares_ml.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + ഓട്ടോ-മൗണ്ട് ക്രമീകരണങ്ങൾ സജ്ജീകരിക്കുക + + BootInfoWidget - + 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. ഈ സിസ്റ്റത്തിന്റെ <strong>ബൂട്ട് എൻവയണ്മെന്റ്</strong>.<br><br>പഴയ x86 സിസ്റ്റങ്ങൾ <strong>ബയോസ്</strong> മാത്രമേ പിന്തുണയ്ക്കൂ.<br>നൂതന സിസ്റ്റങ്ങൾ പൊതുവേ <strong>ഇഎഫ്ഐ</strong>ആണ് ഉപയോഗിക്കുന്നത് എന്നിരുന്നാലും യോജിപ്പുള്ള രീതിയിൽ ആരംഭിക്കുകയാണെങ്കിൽ ബയോസ് ആയി പ്രദർശിപ്പിക്കപ്പെട്ടേക്കാം. - + 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. ഈ സിസ്റ്റം ഒരു <strong>ഇ.എഫ്.ഐ</strong> ബൂട്ട് എൻ‌വയോൺ‌മെന്റ് ഉപയോഗിച്ചാണ് ആരംഭിച്ചത്.<br>ഒരു ഇ.എഫ്.ഐ എൻ‌വയോൺ‌മെൻറിൽ‌ നിന്നും സ്റ്റാർ‌ട്ടപ്പ് ക്രമീകരിക്കുന്നതിന്, ഒരു ഇ.എഫ്.ഐ സിസ്റ്റം പാർട്ടീഷനിൽ ഈ ഇൻസ്റ്റാളർ <strong>ഗ്രബ്</strong> അല്ലെങ്കിൽ <strong>systemd-boot</strong> പോലെയുള്ള ഒരു ബൂട്ട് ലോഡർ ആപ്ലിക്കേഷൻ വിന്യസിക്കണം.നിങ്ങൾ മാനുവൽ പാർട്ടീഷനിംഗ് തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ ഇത് യാന്ത്രികമായി നടക്കേണ്ടതാണ്,അത്തരം സന്ദർഭങ്ങളിൽ നിങ്ങൾ അത് തിരഞ്ഞെടുക്കണം അല്ലെങ്കിൽ സ്വന്തമായി സൃഷ്ടിക്കണം.<br> - + 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. ഈ സിസ്റ്റം ഒരു <strong>ബയോസ്</strong> ബൂട്ട് എൻ‌വയോൺ‌മെന്റ് ഉപയോഗിച്ചാണ് ആരംഭിച്ചത്.<br><br>ഒരു ബയോസ് എൻ‌വയോൺ‌മെൻറിൽ‌ നിന്നും സ്റ്റാർ‌ട്ടപ്പ് ക്രമീകരിക്കുന്നതിന്, പാർട്ടീഷൻന്റെ തുടക്കത്തിൽ അല്ലെങ്കിൽ പാർട്ടീഷൻ ടേബിളിന്റെ തുടക്കത്തിനടുത്തുള്ള മാസ്റ്റർ ബൂട്ട് റെക്കോർഡ് ൽ (മുൻഗണന) ഈ ഇൻസ്റ്റാളർ <strong>ഗ്രബ്</strong> പോലെയുള്ള ഒരു ബൂട്ട് ലോഡർ ആപ്ലിക്കേഷൻ ഇൻസ്റ്റാൾ ചെയ്യണം. നിങ്ങൾ മാനുവൽ പാർട്ടീഷനിംഗ് തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ ഇത് യാന്ത്രികമായി നടക്കേണ്ടതാണ്, അത്തരം സന്ദർഭങ്ങളിൽ നിങ്ങൾ ഇത് സ്വന്തമായി സജ്ജീകരിക്കണം. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1 ന്റെ മാസ്റ്റർ ബൂട്ട് റെക്കോർഡ് - + Boot Partition ബൂട്ട് പാർട്ടീഷൻ - + System Partition സിസ്റ്റം പാർട്ടീഷൻ - + Do not install a boot loader ബൂട്ട് ലോഡർ ഇൻസ്റ്റാൾ ചെയ്യരുത് - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page ശൂന്യമായ പേജ് @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form ഫോം - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules മൊഡ്യൂളുകൾ - + Type: തരം: - - + + none ഒന്നുമില്ല - + Interface: സമ്പർക്കമുഖം: - - Tools - ഉപകരണങ്ങൾ + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet ശൈലീപുസ്തകം പുതുക്കുക - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree വിഡ്ജറ്റ് ട്രീ - + Debug information ഡീബഗ് വിവരങ്ങൾ @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up സജ്ജമാക്കുക - + Install ഇൻസ്റ്റാൾ ചെയ്യുക @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) ജോലി പരാജയപ്പെട്ടു (%1) - + Programmed job failure was explicitly requested. പ്രോഗ്രാം ചെയ്യപ്പെട്ട ജോലിയുടെ പരാജയം പ്രത്യേകമായി ആവശ്യപ്പെട്ടിരുന്നു. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done പൂർത്തിയായി @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) ഉദാഹരണം ജോലി (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. ടാർഗറ്റ് സിസ്റ്റത്തിൽ '%1' ആജ്ഞ പ്രവർത്തിപ്പിക്കുക. - + Run command '%1'. '%1' എന്ന ആജ്ഞ നടപ്പിലാക്കുക. - + Running command %1 %2 %1 %2 ആജ്ഞ നടപ്പിലാക്കുന്നു @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 ക്രിയ നടപ്പിലാക്കുന്നു. - + Bad working directory path പ്രവർത്ഥനരഹിതമായ ഡയറക്ടറി പാത - + Working directory %1 for python job %2 is not readable. പൈതൺ ജോബ് %2 യുടെ പ്രവർത്തന പാതയായ %1 വായിക്കുവാൻ കഴിയുന്നില്ല - + Bad main script file മോശമായ പ്രധാന സ്ക്രിപ്റ്റ് ഫയൽ - + Main script file %1 for python job %2 is not readable. പൈത്തൺ ജോബ് %2 നായുള്ള പ്രധാന സ്ക്രിപ്റ്റ് ഫയൽ %1 വായിക്കാൻ കഴിയുന്നില്ല. - + Boost.Python error in job "%1". "%1" എന്ന പ്രവൃത്തിയില്‍ ബൂസ്റ്റ്.പൈതണ്‍ പിശക് @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <i>%1</i>മൊഡ്യൂളിനായുള്ള ആവശ്യകതകൾ പരിശോധിക്കൽ പൂർത്തിയായിരിക്കുന്നു. + - + Waiting for %n module(s). %n മൊഡ്യൂളിനായി കാത്തിരിക്കുന്നു. @@ -236,7 +269,7 @@ - + (%n second(s)) (%1 സെക്കൻഡ്) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. സിസ്റ്റം-ആവശ്യകതകളുടെ പരിശോധന പൂർത്തിയായി. @@ -252,247 +285,237 @@ Calamares::ViewManager - - &Back - പുറകോട്ട് (&B) - - - - &Next - അടുത്തത് (&N) - - - - &Cancel - റദ്ദാക്കുക (&C) - - - - Cancel setup without changing the system. - സിസ്റ്റത്തിന് മാറ്റമൊന്നും വരുത്താതെ സജ്ജീകരണപ്രക്രിയ റദ്ദാക്കുക. - - - - Cancel installation without changing the system. - സിസ്റ്റത്തിന് മാറ്റമൊന്നും വരുത്താതെ ഇൻസ്റ്റളേഷൻ റദ്ദാക്കുക. - - - + Setup Failed സജ്ജീകരണപ്രക്രിയ പരാജയപ്പെട്ടു - - Would you like to paste the install log to the web? - ഇൻസ്റ്റാൾ ലോഗ് വെബിലേക്ക് പകർത്തണോ? + + Installation Failed + ഇൻസ്റ്റളേഷൻ പരാജയപ്പെട്ടു - + + Error + പിശക് + + + + &Yes + വേണം (&Y) + + + + &No + വേണ്ട (&N) + + + + &Close + അടയ്ക്കുക (&C) + + + Install Log Paste URL ഇൻസ്റ്റാൾ ലോഗ് പകർപ്പിന്റെ വിലാസം - + The upload was unsuccessful. No web-paste was done. അപ്‌ലോഡ് പരാജയമായിരുന്നു. വെബിലേക്ക് പകർത്തിയില്ല. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed കലാമാരേസ് സമാരംഭിക്കൽ പരാജയപ്പെട്ടു - + %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. %1 ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയില്ല. ക്രമീകരിച്ച എല്ലാ മൊഡ്യൂളുകളും ലോഡുചെയ്യാൻ കാലാമറെസിന് കഴിഞ്ഞില്ല. വിതരണത്തിൽ കാലാമറെസ് ഉപയോഗിക്കുന്ന രീതിയിലുള്ള ഒരു പ്രശ്നമാണിത്. - + <br/>The following modules could not be loaded: <br/>താഴെ പറയുന്ന മൊഡ്യൂളുകൾ ലഭ്യമാക്കാനായില്ല: - + + Continue with setup? + സജ്ജീകരണപ്രക്രിയ തുടരണോ? + + + Continue with installation? ഇൻസ്റ്റളേഷൻ തുടരണോ? - + 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> %2 സജ്ജീകരിക്കുന്നതിന് %1 സജ്ജീകരണ പ്രോഗ്രാം നിങ്ങളുടെ ഡിസ്കിൽ മാറ്റങ്ങൾ വരുത്താൻ പോകുന്നു.<br/><strong>നിങ്ങൾക്ക് ഈ മാറ്റങ്ങൾ പഴയപടിയാക്കാൻ കഴിയില്ല</strong> - + + 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> + %2 ഇൻസ്റ്റാളുചെയ്യുന്നതിന് %1 ഇൻസ്റ്റാളർ നിങ്ങളുടെ ഡിസ്കിൽ മാറ്റങ്ങൾ വരുത്താൻ പോകുന്നു.<br/><strong>നിങ്ങൾക്ക് ഈ മാറ്റങ്ങൾ പഴയപടിയാക്കാൻ കഴിയില്ല.</strong> + + + &Set up now ഉടൻ സജ്ജീകരിക്കുക (&S) - + + &Install now + ഉടൻ ഇൻസ്റ്റാൾ ചെയ്യുക (&I) + + + + Go &back + പുറകോട്ടു പോകുക + + + &Set up സജ്ജീകരിക്കുക (&S) - + &Install ഇൻസ്റ്റാൾ (&I) - + Setup is complete. Close the setup program. സജ്ജീകരണം പൂർത്തിയായി. പ്രയോഗം അടയ്ക്കുക. - + + The installation is complete. Close the installer. + ഇൻസ്റ്റളേഷൻ പൂർത്തിയായി. ഇൻസ്റ്റാളർ അടയ്ക്കുക + + + + Cancel setup without changing the system. + സിസ്റ്റത്തിന് മാറ്റമൊന്നും വരുത്താതെ സജ്ജീകരണപ്രക്രിയ റദ്ദാക്കുക. + + + + Cancel installation without changing the system. + സിസ്റ്റത്തിന് മാറ്റമൊന്നും വരുത്താതെ ഇൻസ്റ്റളേഷൻ റദ്ദാക്കുക. + + + + &Next + അടുത്തത് (&N) + + + + &Back + പുറകോട്ട് (&B) + + + + &Done + ചെയ്‌തു + + + + &Cancel + റദ്ദാക്കുക (&C) + + + Cancel setup? സജ്ജീകരണം റദ്ദാക്കണോ? - + Cancel installation? ഇൻസ്റ്റളേഷൻ റദ്ദാക്കണോ? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. നിലവിലുള്ള സജ്ജീകരണപ്രക്രിയ റദ്ദാക്കണോ? സജ്ജീകരണപ്രയോഗം നിൽക്കുകയും എല്ലാ മാറ്റങ്ങളും നഷ്ടപ്പെടുകയും ചെയ്യും. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. നിലവിലുള്ള ഇൻസ്റ്റാൾ പ്രക്രിയ റദ്ദാക്കണോ? ഇൻസ്റ്റാളർ നിൽക്കുകയും എല്ലാ മാറ്റങ്ങളും നഷ്ടപ്പെടുകയും ചെയ്യും. - - - - &Yes - വേണം (&Y) - - - - - &No - വേണ്ട (&N) - - - - &Close - അടയ്ക്കുക (&C) - - - - Continue with setup? - സജ്ജീകരണപ്രക്രിയ തുടരണോ? - - - - 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> - %2 ഇൻസ്റ്റാളുചെയ്യുന്നതിന് %1 ഇൻസ്റ്റാളർ നിങ്ങളുടെ ഡിസ്കിൽ മാറ്റങ്ങൾ വരുത്താൻ പോകുന്നു.<br/><strong>നിങ്ങൾക്ക് ഈ മാറ്റങ്ങൾ പഴയപടിയാക്കാൻ കഴിയില്ല.</strong> - - - - &Install now - ഉടൻ ഇൻസ്റ്റാൾ ചെയ്യുക (&I) - - - - Go &back - പുറകോട്ടു പോകുക - - - - &Done - ചെയ്‌തു - - - - The installation is complete. Close the installer. - ഇൻസ്റ്റളേഷൻ പൂർത്തിയായി. ഇൻസ്റ്റാളർ അടയ്ക്കുക - - - - Error - പിശക് - - - - Installation Failed - ഇൻസ്റ്റളേഷൻ പരാജയപ്പെട്ടു - CalamaresPython::Helper - + Unknown exception type അജ്ഞാതമായ പിശക് - + unparseable Python error മനസ്സിലാക്കാനാവാത്ത പൈത്തൺ പിഴവ് - + unparseable Python traceback മനസ്സിലാക്കാനാവാത്ത പൈത്തൺ ട്രേസ്ബാക്ക് - + Unfetchable Python error. ലഭ്യമാക്കാനാവാത്ത പൈത്തൺ പിഴവ്. - - CalamaresUtils - - - Install log posted to: -%1 - ഇൻസ്റ്റാൾ ലോഗ് ഇങ്ങോട്ട് സ്ഥാപിച്ചിരിക്കുന്നു -%1 - - CalamaresWindow - - &Back - പുറകോട്ട് (&B) - - - - &Next - അടുത്തത് (&N) - - - - &Cancel - റദ്ദാക്കുക (&C) - - - + %1 Setup Program %1 സജ്ജീകരണപ്രയോഗം - + %1 Installer %1 ഇൻസ്റ്റാളർ + + + ChangeFilesystemLabelJob - - Show debug information - ഡീബഗ് വിവരങ്ങൾ കാണിക്കുക + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + CheckerContainer - + Gathering system information... സിസ്റ്റത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ ശേഖരിക്കുന്നു... @@ -500,157 +523,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form ഫോം - - After: - ശേഷം: - - - - Boot loader location: - ബൂട്ട് ലോഡറിന്റെ സ്ഥാനം: - - - + Select storage de&vice: സംഭരണിയ്ക്കുള്ള ഉപകരണം തിരഞ്ഞെടുക്കൂ: - - - - + + + + Current: നിലവിലുള്ളത്: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + ശേഷം: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>സ്വമേധയാ ഉള്ള പാർട്ടീഷനിങ്</strong><br/>നിങ്ങൾക്ക് സ്വയം പാർട്ടീഷനുകൾ സൃഷ്ടിക്കാനോ വലുപ്പം മാറ്റാനോ കഴിയും. + + + Reuse %1 as home partition for %2. %2 നുള്ള ഹോം പാർട്ടീഷനായി %1 വീണ്ടും ഉപയോഗിക്കൂ. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>ചുരുക്കുന്നതിന് ഒരു പാർട്ടീഷൻ തിരഞ്ഞെടുക്കുക, എന്നിട്ട് വലുപ്പം മാറ്റാൻ ചുവടെയുള്ള ബാർ വലിക്കുക. - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 %2MiB ആയി ചുരുങ്ങുകയും %4 ന് ഒരു പുതിയ %3MiB പാർട്ടീഷൻ സൃഷ്ടിക്കുകയും ചെയ്യും. - + + Boot loader location: + ബൂട്ട് ലോഡറിന്റെ സ്ഥാനം: + + + <strong>Select a partition to install on</strong> <strong>ഇൻസ്റ്റാൾ ചെയ്യാനായി ഒരു പാർട്ടീഷൻ തിരഞ്ഞെടുക്കുക</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ഈ സിസ്റ്റത്തിൽ എവിടെയും ഒരു ഇ.എഫ്.ഐ സിസ്റ്റം പാർട്ടീഷൻ കണ്ടെത്താനായില്ല. %1 സജ്ജീകരിക്കുന്നതിന് ദയവായി തിരികെ പോയി മാനുവൽ പാർട്ടീഷനിംഗ് ഉപയോഗിക്കുക. - + The EFI system partition at %1 will be used for starting %2. %1 ലെ ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ %2 ആരംഭിക്കുന്നതിന് ഉപയോഗിക്കും. - + EFI system partition: ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ - + 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. ഈ ഡറ്റോറേജ്‌ ഉപകരണത്തിൽ ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റം ഉണ്ടെന്ന് തോന്നുന്നില്ല. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങൾക്ക് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും കഴിയും.  - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>ഡിസ്ക് മായ്ക്കൂ</strong><br/>ഈ പ്രവൃത്തി തെരെഞ്ഞെടുത്ത സ്റ്റോറേജ് ഉപകരണത്തിലെ എല്ലാ ഡാറ്റയും <font color="red">മായ്‌ച്ച്കളയും</font>. - - 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. - ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ %1 ഉണ്ട്.നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും നിങ്ങൾക്ക് കഴിയും. - - - - No Swap - സ്വാപ്പ് വേണ്ട - - - - Reuse Swap - സ്വാപ്പ് വീണ്ടും ഉപയോഗിക്കൂ - - - - Swap (no Hibernate) - സ്വാപ്പ് (ഹൈബർനേഷൻ ഇല്ല) - - - - Swap (with Hibernate) - സ്വാപ്പ് (ഹൈബർനേഷനോട് കൂടി) - - - - Swap to file - ഫയലിലേക്ക് സ്വാപ്പ് ചെയ്യുക - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ഇതിനൊപ്പം ഇൻസ്റ്റാൾ ചെയ്യുക</strong><br/>%1 ന് ഇടം നൽകുന്നതിന് ഇൻസ്റ്റാളർ ഒരു പാർട്ടീഷൻ ചുരുക്കും. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>ഒരു പാർട്ടീഷൻ പുനഃസ്ഥാപിക്കുക</strong><br/>ഒരു പാർട്ടീഷന് %1 ഉപയോഗിച്ച് പുനഃസ്ഥാപിക്കുന്നു. - + + 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. + ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ %1 ഉണ്ട്.നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും നിങ്ങൾക്ക് കഴിയും. + + + 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. ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ ഇതിനകം ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റം ഉണ്ട്. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങൾക്ക് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും കഴിയും.  - + 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. ഈ സ്റ്റോറേജ് ഉപകരണത്തിൽ ഒന്നിലധികം ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളുണ്ട്. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?<br/>സ്റ്റോറേജ് ഉപകരണത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തുന്നതിനുമുമ്പ് നിങ്ങൾക്ക് നിങ്ങളുടെ ചോയ്‌സുകൾ അവലോകനം ചെയ്യാനും സ്ഥിരീകരിക്കാനും കഴിയും.  + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + സ്വാപ്പ് വേണ്ട + + + + Reuse Swap + സ്വാപ്പ് വീണ്ടും ഉപയോഗിക്കൂ + + + + Swap (no Hibernate) + സ്വാപ്പ് (ഹൈബർനേഷൻ ഇല്ല) + + + + Swap (with Hibernate) + സ്വാപ്പ് (ഹൈബർനേഷനോട് കൂടി) + + + + Swap to file + ഫയലിലേക്ക് സ്വാപ്പ് ചെയ്യുക + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 %1 ൽ പാർട്ടീഷനിങ്ങ് പ്രക്രിയകൾക്കായി മൗണ്ടുകൾ നീക്കം ചെയ്യുക - + Clearing mounts for partitioning operations on %1. %1 ൽ പാർട്ടീഷനിങ്ങ് പ്രക്രിയകൾക്കായി മൗണ്ടുകൾ നീക്കം ചെയ്യുന്നു. - + Cleared all mounts for %1 %1 നായുള്ള എല്ലാ മൗണ്ടുകളും നീക്കം ചെയ്തു @@ -658,22 +721,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. എല്ലാ താൽക്കാലിക മൗണ്ടുകളും നീക്കം ചെയ്യുക - + Clearing all temporary mounts. എല്ലാ താൽക്കാലിക മൗണ്ടുകളും നീക്കം ചെയ്യുന്നു. - - Cannot get list of temporary mounts. - താൽക്കാലിക മൗണ്ടുകളുടെ പട്ടിക ലഭ്യമായില്ല. - - - + Cleared all temporary mounts. എല്ലാ താൽക്കാലിക മൗണ്ടുകളും നീക്കം ചെയ്തു. @@ -681,18 +739,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. ആജ്ഞ പ്രവർത്തിപ്പിക്കാനായില്ല. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. കമാൻഡ് ഹോസ്റ്റ് എൻവയോൺമെന്റിൽ പ്രവർത്തിക്കുന്നു, റൂട്ട് പാത്ത് അറിയേണ്ടതുണ്ട്, പക്ഷേ rootMountPoint നിർവചിച്ചിട്ടില്ല. - + The command needs to know the user's name, but no username is defined. കമാൻഡിന് ഉപയോക്താവിന്റെ പേര് അറിയേണ്ടതുണ്ട്,എന്നാൽ ഉപയോക്തൃനാമമൊന്നും നിർവചിച്ചിട്ടില്ല. @@ -700,100 +758,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - %1 സജ്ജീകരിക്കുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>സജ്ജീകരണം തുടരാനാവില്ല. <a href="#details">വിവരങ്ങൾ...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - %1 ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>ഇൻസ്റ്റളേഷൻ തുടരാനാവില്ല. <a href="#details">വിവരങ്ങൾ...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - %1 സജ്ജീകരിക്കുന്നതിനുള്ള ചില ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>സജ്ജീകരണം തുടരാം, പക്ഷേ ചില സവിശേഷതകൾ നിഷ്ക്രിയമായിരിക്കാം. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - %1 ഇൻസ്റ്റാൾ ചെയ്യാൻ ശുപാർശ ചെയ്യപ്പെട്ടിട്ടുള്ള ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>ഇൻസ്റ്റളേഷൻ തുടരാം, പക്ഷേ ചില സവിശേഷതകൾ നിഷ്ക്രിയമായിരിക്കാം. - - - - This program will ask you some questions and set up %2 on your computer. - ഈ പ്രക്രിയ താങ്കളോട് ചില ചോദ്യങ്ങൾ ചോദിക്കുകയും %2 താങ്കളുടെ കമ്പ്യൂട്ടറിൽ സജ്ജീകരിക്കുകയും ചെയ്യും. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1 -നായുള്ള കലാമാരേസ് സജ്ജീകരണപ്രക്രിയയിലേയ്ക്ക് സ്വാഗതം.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>%1 സജ്ജീകരണത്തിലേക്ക് സ്വാഗതം.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 -നായുള്ള കലാമാരേസ് ഇൻസ്റ്റാളറിലേക്ക് സ്വാഗതം.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 ഇൻസ്റ്റാളറിലേക്ക് സ്വാഗതം</h1> - - - + Set keyboard model to %1.<br/> കീബോർഡ് മോഡൽ %1 എന്നതായി ക്രമീകരിക്കുക.<br/> - + Set keyboard layout to %1/%2. കീബോർഡ് വിന്യാസം %1%2 എന്നതായി ക്രമീകരിക്കുക. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. സിസ്റ്റം ഭാഷ %1 ആയി സജ്ജമാക്കും. - + The numbers and dates locale will be set to %1. സംഖ്യ & തീയതി രീതി %1 ആയി ക്രമീകരിക്കും. - - Set timezone to %1/%2.<br/> - സമയപദ്ധതി %1/%2 ആയി ക്രമീകരിക്കുക.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) നെറ്റ്‌വർക്ക് ഇൻസ്റ്റാളേഷൻ. (പ്രവർത്തനരഹിതമാക്കി: തെറ്റായ ക്രമീകരണം) - + Network Installation. (Disabled: Received invalid groups data) നെറ്റ്‌വർക്ക് ഇൻസ്റ്റാളേഷൻ. (അപ്രാപ്‌തമാക്കി: അസാധുവായ ഗ്രൂപ്പുകളുടെ ഡാറ്റ ലഭിച്ചു) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + പാക്കേജു് തിരഞ്ഞെടുക്കല്‍ + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) നെറ്റ്‌വർക്ക് ഇൻസ്റ്റാളേഷൻ. (അപ്രാപ്‌തമാക്കി: പാക്കേജ് ലിസ്റ്റുകൾ നേടാനായില്ല, നിങ്ങളുടെ നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിക്കുക) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + %1 സജ്ജീകരിക്കുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>സജ്ജീകരണം തുടരാനാവില്ല. <a href="#details">വിവരങ്ങൾ...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + %1 ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>ഇൻസ്റ്റളേഷൻ തുടരാനാവില്ല. <a href="#details">വിവരങ്ങൾ...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + %1 സജ്ജീകരിക്കുന്നതിനുള്ള ചില ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>സജ്ജീകരണം തുടരാം, പക്ഷേ ചില സവിശേഷതകൾ നിഷ്ക്രിയമായിരിക്കാം. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + %1 ഇൻസ്റ്റാൾ ചെയ്യാൻ ശുപാർശ ചെയ്യപ്പെട്ടിട്ടുള്ള ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>ഇൻസ്റ്റളേഷൻ തുടരാം, പക്ഷേ ചില സവിശേഷതകൾ നിഷ്ക്രിയമായിരിക്കാം. + + + + This program will ask you some questions and set up %2 on your computer. + ഈ പ്രക്രിയ താങ്കളോട് ചില ചോദ്യങ്ങൾ ചോദിക്കുകയും %2 താങ്കളുടെ കമ്പ്യൂട്ടറിൽ സജ്ജീകരിക്കുകയും ചെയ്യും. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + നിങ്ങളുടെ ഉപയോക്തൃനാമം വളരെ വലുതാണ്. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + താങ്കളുടെ ഉപയോക്തൃനാമം ഒരു ചെറിയ അക്ഷരമോ അണ്ടർസ്കോറോ ഉപയോഗിച്ച് വേണം തുടങ്ങാൻ. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + ചെറിയ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. + + + + Your hostname is too short. + നിങ്ങളുടെ ഹോസ്റ്റ്നാമം വളരെ ചെറുതാണ് + + + + Your hostname is too long. + നിങ്ങളുടെ ഹോസ്റ്റ്നാമം ദൈർഘ്യമേറിയതാണ് + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. + + + + Your passwords do not match! + നിങ്ങളുടെ പാസ്‌വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല! + + + + OK! + + + + + Setup Failed + സജ്ജീകരണപ്രക്രിയ പരാജയപ്പെട്ടു + + + + Installation Failed + ഇൻസ്റ്റളേഷൻ പരാജയപ്പെട്ടു + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + സജ്ജീകരണം പൂർത്തിയായി + + + + Installation Complete + ഇൻസ്റ്റാളേഷൻ പൂർത്തിയായി + + + + The setup of %1 is complete. + %1 ന്റെ സജ്ജീകരണം പൂർത്തിയായി. + + + + The installation of %1 is complete. + %1 ന്റെ ഇൻസ്റ്റാളേഷൻ പൂർത്തിയായി. + + + + Package Selection + പാക്കേജ് തിരഞ്ഞെടുക്കൽ + + + + Please pick a product from the list. The selected product will be installed. + പട്ടികയിൽ നിന്നും ഒരു ഉത്പന്നം തിരഞ്ഞെടുക്കുക. തിരഞ്ഞെടുത്ത ഉത്പന്നം ഇൻസ്റ്റാൾ ചെയ്യപ്പെടുക. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + ചുരുക്കം + + + + This is an overview of what will happen once you start the setup procedure. + താങ്കൾ സജ്ജീകരണപ്രക്രിയ ആരംഭിച്ചതിനുശേഷം എന്ത് സംഭവിക്കും എന്നതിന്റെ അവലോകനമാണിത്. + + + + This is an overview of what will happen once you start the install procedure. + നിങ്ങൾ ഇൻസ്റ്റാൾ നടപടിക്രമങ്ങൾ ആരംഭിച്ചുകഴിഞ്ഞാൽ എന്ത് സംഭവിക്കും എന്നതിന്റെ ഒരു അവലോകനമാണിത്. + ContextualProcessJob - + Contextual Processes Job സാന്ദർഭിക പ്രക്രിയകൾ ജോലി @@ -801,100 +994,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition ഒരു പാർട്ടീഷൻ സൃഷ്ടിക്കുക - - MiB - MiB - - - - Partition &Type: - പാർട്ടീഷൻ തരം (&T): - - - - &Primary - പ്രാഥമികം (&P) - - - - E&xtended - എക്സ്റ്റൻഡഡ് (&x) - - - - Fi&le System: - ഫയൽ സിസ്റ്റം (&l): - - - - LVM LV name - എൽവി‌എം എൽവി പേര് - - - - Flags: - ഫ്ലാഗുകൾ: - - - - &Mount Point: - മൗണ്ട് പോയിന്റ് (&M): - - - + Si&ze: വലുപ്പം (&z): - + + MiB + MiB + + + + Partition &Type: + പാർട്ടീഷൻ തരം (&T): + + + + Primar&y + + + + + E&xtended + എക്സ്റ്റൻഡഡ് (&x) + + + + Fi&le System: + ഫയൽ സിസ്റ്റം (&l): + + + + LVM LV name + എൽവി‌എം എൽവി പേര് + + + + &Mount Point: + മൗണ്ട് പോയിന്റ് (&M): + + + + Flags: + ഫ്ലാഗുകൾ: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt എൻക്രിപ്റ്റ് (&c) - + Logical ലോജിക്കൽ - + Primary പ്രാഥമികം - + GPT ജിപിറ്റി - + Mountpoint already in use. Please select another one. മൗണ്ട്പോയിന്റ് നിലവിൽ ഉപയോഗിക്കപ്പെട്ടിരിക്കുന്നു. ദയവായി മറ്റൊരെണ്ണം തിരഞ്ഞെടുക്കൂ. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. ഫയൽ സിസ്റ്റം %1 ഉപയോഗിച്ച് %4 (%3) ൽ പുതിയ %2MiB പാർട്ടീഷൻ സൃഷ്ടിക്കുക. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. ഫയൽ സിസ്റ്റം <strong>%1</strong> ഉപയോഗിച്ച് <strong>%4</strong> (%3) ൽ പുതിയ <strong>%2MiB</strong> പാർട്ടീഷൻ സൃഷ്ടിക്കുക. - + + Creating new %1 partition on %2. %2 ൽ പുതിയ %1 പാർട്ടീഷൻ സൃഷ്ടിക്കുന്നു. - + The installer failed to create partition on disk '%1'. '%1' ഡിസ്കിൽ പാർട്ടീഷൻ സൃഷ്ടിക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -902,27 +1131,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table പാർട്ടീഷൻ ടേബിൾ നിർമ്മിക്കുക - + Creating a new partition table will delete all existing data on the disk. ഒരു പുതിയ പാർട്ടീഷൻ ടേബിൾ നിർമിക്കുന്നത് ഡിസ്കിൽ നിലവിലുള്ള എല്ലാ ഡാറ്റയും ഇല്ലാതാക്കും. - + What kind of partition table do you want to create? ഏത് തരം പാർട്ടീഷൻ ടേബിളാണ് നിങ്ങൾ സൃഷ്ടിക്കാൻ ആഗ്രഹിക്കുന്നത്? - + Master Boot Record (MBR) മാസ്റ്റർ ബൂട്ട് റെക്കോർഡ് (എംബിആർ) - + GUID Partition Table (GPT) GUID പാർട്ടീഷൻ ടേബിൾ (ജിപിറ്റി) @@ -930,22 +1159,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. %2 എന്നതില്‍ %1 എന്ന പുതിയ പാര്‍ട്ടീഷന്‍ ടേബിള്‍ സൃഷ്ടിക്കുക. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) -ൽ പുതിയ <strong>%1</strong> പാർട്ടീഷൻ ടേബിൾ ഉണ്ടാക്കുക. - + Creating new %1 partition table on %2. %2 എന്നതില്‍ %1 എന്ന പുതിയ പാര്‍ട്ടീഷന്‍ ടേബിള്‍ സൃഷ്ടിക്കുന്നു. - + The installer failed to create a partition table on %1. %1 ൽ പാർട്ടീഷൻ പട്ടിക സൃഷ്ടിക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -953,45 +1182,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 %1 എന്ന ഉപയോക്താവിനെ സൃഷ്ടിക്കുക. - + Create user <strong>%1</strong>. <strong>%1</strong> എന്ന ഉപയോക്താവിനെ സൃഷ്ടിക്കുക. - - Creating user %1. - ഉപയോക്താവ് %1-നെ ഉണ്ടാക്കുന്നു. + + Preserving home directory + - - Sudoers dir is not writable. - സുഡോവേഴ്സ് ഡയറക്ടറിയിലേക്ക് എഴുതാൻ സാധിക്കില്ല. + + + Creating user %1 + - - Cannot create sudoers file for writing. - എഴുതുന്നതിനായി സുഡോവേഴ്സ് ഫയൽ നിർമ്മിക്കാനായില്ല. + + Configuring user %1 + - - Cannot chmod sudoers file. - സുഡോവേഴ്സ് ഫയൽ chmod ചെയ്യാൻ സാധിച്ചില്ല. - - - - Cannot open groups file for reading. - ഗ്രൂപ്സ് ഫയൽ വായിക്കാനായി തുറക്കാൻ സാധിച്ചില്ല. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group വോള്യം ഗ്രൂപ്പ് നിർമ്മിക്കുക @@ -999,22 +1224,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിർമ്മിക്കുക. - + Create new volume group named <strong>%1</strong>. <strong>%1</strong> എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിർമ്മിക്കുക. - + Creating new volume group named %1. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിർമ്മിക്കുന്നു. - + The installer failed to create a volume group named '%1'. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിർമ്മിക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -1022,18 +1247,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിഷ്ക്രിയമാക്കുക. - + Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിഷ്ക്രിയമാക്കുക. - + The installer failed to deactivate a volume group named %1. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നിഷ്ക്രിയമാക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -1041,22 +1266,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. പാർട്ടീഷൻ %1 ഇല്ലാതാക്കുക. - + Delete partition <strong>%1</strong>. <strong>%1</strong> എന്ന പാര്‍ട്ടീഷന്‍ മായ്ക്കുക. - + Deleting partition %1. പാർട്ടീഷൻ %1 ഇല്ലാതാക്കുന്നു. - + The installer failed to delete partition %1. പാർട്ടീഷൻ %1 ഇല്ലാതാക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -1064,46 +1289,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - തിരഞ്ഞെടുത്ത സ്റ്റോറേജ് ഉപകരണത്തിലെ <strong>പാർട്ടീഷൻ ടേബിളിന്റെ</strong>തരം.<br><br>പാർട്ടീഷൻ ടേബിൾ തരം മാറ്റാനുള്ള ഒരേയൊരു മാർഗ്ഗം പാർട്ടീഷൻ ടേബിൾ ആദ്യം മുതൽ മായ്ച്ചുകളയുക എന്നതാണ്,ഇത് സംഭരണ ഉപകരണത്തിലെ എല്ലാ ഡാറ്റയും നശിപ്പിക്കുന്നു.<br>നിങ്ങൾ വ്യക്തമായി തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ ഈ ഇൻസ്റ്റാളർ നിലവിലെ പാർട്ടീഷൻ ടേബിൾ സൂക്ഷിക്കും.<br>ഉറപ്പില്ലെങ്കിൽ, ആധുനിക സിസ്റ്റങ്ങളിൽ ജിപിടിയാണ് ശുപാർശ ചെയ്യുന്നത്. - - - + This device has a <strong>%1</strong> partition table. ഈ ഉപകരണത്തില്‍ ഒരു <strong>%1</strong> പാര്‍ട്ടീഷന്‍ ടേബിളുണ്ട്. - + 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. ഇതൊരു <strong>ലൂപ്പ്</strong> ഉപകരണമാണ്.<br><br>ഒരു ഫയലിന്റെ ഒരു ബ്ലോക്ക് ഉപകരണമാക്കി ലഭ്യമാക്കുന്ന പാർട്ടീഷൻ ടേബിളില്ലാത്ത ഒരു കൃത്രിമ-ഉപകരണമാണിത്. ഇത്തരത്തിലുള്ള ക്രമീകരണത്തിൽ സാധാരണ ഒരൊറ്റ ഫയൽ സിസ്റ്റം മാത്രമേ കാണൂ. - + 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. തിരഞ്ഞെടുത്ത സ്റ്റോറേജ് ഉപകരണത്തിൽ ഒരു <strong>പാർട്ടീഷൻ ടേബിൾ</strong> ഈ ഇൻസ്റ്റാളറിന് കണ്ടെത്താൻ കഴിയില്ല.<br><br>ഒന്നെങ്കിൽ ഉപകരണത്തിന് പാർട്ടീഷൻ ടേബിൾ ഇല്ല, അല്ലെങ്കിൽ പാർട്ടീഷൻ ടേബിൾ കേടായി അല്ലെങ്കിൽ അറിയപ്പെടാത്ത തരത്തിലുള്ളതാണ്.<br>ഈ ഇൻസ്റ്റാളറിന് നിങ്ങൾക്കായി യന്ത്രികമായോ അല്ലെങ്കിൽ സ്വമേധയാ പാർട്ടീഷനിംഗ് പേജ് വഴിയോ ഒരു പുതിയ പാർട്ടീഷൻ ടേബിൾ സൃഷ്ടിക്കാൻ കഴിയും. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br><strong>ഇ‌എഫ്‌ഐ</strong> ബൂട്ട് എൻ‌വയോൺ‌മെൻറിൽ‌ നിന്നും ആരംഭിക്കുന്ന ആധുനിക സിസ്റ്റങ്ങൾ‌ക്കായുള്ള ശുപാർശചെയ്‌ത പാർട്ടീഷൻ ടേബിൾ തരമാണിത്. - + <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. <br><br><strong>ബയോസ്</strong> ബൂട്ട് എൻ‌വയോൺ‌മെൻറിൽ‌ നിന്നും ആരംഭിക്കുന്ന പഴയ സിസ്റ്റങ്ങളിൽ‌ മാത്രമേ ഈ പാർട്ടീഷൻ ടേബിൾ തരം ഉചിതമാകൂ.മറ്റു സാഹചര്യങ്ങളിൽ പൊതുവെ ജിപിടി യാണ് ശുപാർശ ചെയ്യുന്നത്.<br><br><strong>മുന്നറിയിപ്പ്:</strong> കാലഹരണപ്പെട്ട MS-DOS കാലഘട്ട സ്റ്റാൻഡേർഡാണ് MBR പാർട്ടീഷൻ ടേബിൾ.<br>പാർട്ടീഷൻ ടേബിൾ 4 പ്രാഥമിക പാർട്ടീഷനുകൾ മാത്രമേ സൃഷ്ടിക്കാൻ കഴിയൂ, അവയിൽ 4 ൽ ഒന്ന് <em>എക്സ്ടെൻഡഡ്‌</em> പാർട്ടീഷൻ ആകാം, അതിൽ നിരവധി <em>ലോജിക്കൽ</em> പാർട്ടീഷനുകൾ അടങ്ങിയിരിക്കാം. + + + 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. + തിരഞ്ഞെടുത്ത സ്റ്റോറേജ് ഉപകരണത്തിലെ <strong>പാർട്ടീഷൻ ടേബിളിന്റെ</strong>തരം.<br><br>പാർട്ടീഷൻ ടേബിൾ തരം മാറ്റാനുള്ള ഒരേയൊരു മാർഗ്ഗം പാർട്ടീഷൻ ടേബിൾ ആദ്യം മുതൽ മായ്ച്ചുകളയുക എന്നതാണ്,ഇത് സംഭരണ ഉപകരണത്തിലെ എല്ലാ ഡാറ്റയും നശിപ്പിക്കുന്നു.<br>നിങ്ങൾ വ്യക്തമായി തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ ഈ ഇൻസ്റ്റാളർ നിലവിലെ പാർട്ടീഷൻ ടേബിൾ സൂക്ഷിക്കും.<br>ഉറപ്പില്ലെങ്കിൽ, ആധുനിക സിസ്റ്റങ്ങളിൽ ജിപിടിയാണ് ശുപാർശ ചെയ്യുന്നത്. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1337,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 ഡ്രാക്കട്ടിനായി LUKS കോൺഫിഗറേഷൻ %1 ലേക്ക് എഴുതുക - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted ഡ്രാക്കട്ടിനായി LUKS കോൺഫിഗറേഷൻ എഴുതുന്നത് ഒഴിവാക്കുക: "/" പാർട്ടീഷൻ എൻ‌ക്രിപ്റ്റ് ചെയ്തിട്ടില്ല - + Failed to open %1 %1 തുറക്കുന്നതിൽ പരാജയപ്പെട്ടു @@ -1130,7 +1355,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job ഡമ്മി C++ ജോലി @@ -1138,123 +1363,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition നിലവിലുള്ള പാർട്ടീഷൻ തിരുത്തുക - - Content: - ഉള്ളടക്കം: + + Con&tent: + - + &Keep നിലനിർത്തുക (&K) - + Format ഫോർമാറ്റ് - + Warning: Formatting the partition will erase all existing data. മുന്നറിയിപ്പ്: പാർട്ടീഷൻ ഫോർമാറ്റ് ചെയ്യുന്നത് നിലവിലുള്ള എല്ലാ ഡാറ്റയും ഇല്ലാതാക്കും. - + &Mount Point: മൗണ്ട് പോയിന്റ് (&M): - + Si&ze: വലുപ്പം (&z): - + MiB MiB - + Fi&le System: ഫയൽ സിസ്റ്റം (&l): - + Flags: ഫ്ലാഗുകൾ: - - Mountpoint already in use. Please select another one. - മൗണ്ട്പോയിന്റ് നിലവിൽ ഉപയോഗിക്കപ്പെട്ടിരിക്കുന്നു. ദയവായി മറ്റൊരെണ്ണം തിരഞ്ഞെടുക്കൂ. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form ഫോം - + En&crypt system സിസ്റ്റം എൻക്രിപ്റ്റ് ചെയ്യുക (&c) - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase രഹസ്യവാചകം - + Confirm passphrase രഹസ്യവാചകം സ്ഥിരീകരിക്കുക - + + Please enter the same passphrase in both boxes. രണ്ട് പെട്ടികളിലും ഒരേ രഹസ്യവാചകം നല്‍കുക, + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + ഇൻസ്റ്റാൾ ലോഗ് വെബിലേക്ക് പകർത്തണോ? + + FillGlobalStorageJob - + Set partition information പാർട്ടീഷൻ വിവരങ്ങൾ ക്രമീകരിക്കുക - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. <strong>പുതിയ</strong> %2 സിസ്റ്റം പാർട്ടീഷനിൽ %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - <strong>%1</strong> മൗണ്ട് പോയിന്റോട് കൂടി <strong>പുതിയ</strong> %2 പാർട്ടീഷൻ സജ്ജീകരിക്കുക. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. %3 സിസ്റ്റം പാർട്ടീഷൻ <strong>%1-ൽ</strong> %2 ഇൻസ്റ്റാൾ ചെയ്യുക. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - <strong>%2</strong> മൗണ്ട് പോയിന്റോട് കൂടി %3 പാർട്ടീഷൻ %1 സജ്ജീകരിക്കുക. - - - + Install boot loader on <strong>%1</strong>. <strong>%1-ൽ</strong> ബൂട്ട് ലോഡർ ഇൻസ്റ്റാൾ ചെയ്യുക. - + Setting up mount points. മൗണ്ട് പോയിന്റുകൾ സജ്ജീകരിക്കുക. @@ -1262,93 +1531,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form ഫോം - + &Restart now ഇപ്പോൾ റീസ്റ്റാർട്ട് ചെയ്യുക (&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>എല്ലാം പൂർത്തിയായി.</h1><br/>%1 താങ്കളുടെ കമ്പ്യൂട്ടറിൽ സജ്ജമാക്കപ്പെട്ടിരിക്കുന്നു. <br/>താങ്കൾക്ക് താങ്കളുടെ പുതിയ സിസ്റ്റം ഉപയോഗിച്ച് തുടങ്ങാം. - + <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> <html><head/><body><p>ഈ ബോക്സിൽ ശെരിയിട്ടാൽ,നിങ്ങളുടെ സിസ്റ്റം <span style="font-style:italic;">പൂർത്തിയായി </span>അമർത്തുമ്പോഴോ സജ്ജീകരണ പ്രോഗ്രാം അടയ്ക്കുമ്പോഴോ ഉടൻ പുനരാരംഭിക്കും. - + <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. <h1>എല്ലാം പൂർത്തിയായി.</h1><br/> %1 നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ഇൻസ്റ്റാൾ ചെയ്തു. <br/>നിങ്ങൾക്ക് ഇപ്പോൾ നിങ്ങളുടെ പുതിയ സിസ്റ്റത്തിലേക്ക് പുനരാരംഭിക്കാം അല്ലെങ്കിൽ %2 ലൈവ് എൻവയോൺമെൻറ് ഉപയോഗിക്കുന്നത് തുടരാം. - + <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> <html><head/><body><p>ഈ ബോക്സിൽ ശെരിയിട്ടാൽ,നിങ്ങളുടെ സിസ്റ്റം <span style="font-style:italic;">പൂർത്തിയായി </span>അമർത്തുമ്പോഴോ സജ്ജീകരണ പ്രോഗ്രാം അടയ്ക്കുമ്പോഴോ ഉടൻ പുനരാരംഭിക്കും. - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>സജ്ജീകരണം പരാജയപ്പെട്ടു</h1><br/>നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ %1 സജ്ജമാക്കിയിട്ടില്ല.<br/>പിശക് സന്ദേശം ഇതായിരുന്നു: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു</h1><br/> നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ %1 സജ്ജമാക്കിയിട്ടില്ല.<br/>പിശക് സന്ദേശം ഇതായിരുന്നു: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish പൂർത്തിയാക്കുക + + + FinishedViewStep - - Setup Complete - സജ്ജീകരണം പൂർത്തിയായി - - - - Installation Complete - ഇൻസ്റ്റാളേഷൻ പൂർത്തിയായി - - - - The setup of %1 is complete. - %1 ന്റെ സജ്ജീകരണം പൂർത്തിയായി. - - - - The installation of %1 is complete. - %1 ന്റെ ഇൻസ്റ്റാളേഷൻ പൂർത്തിയായി. + + Finish + പൂർത്തിയാക്കുക FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. %4 -ലുള്ള പാർട്ടീഷൻ %1 (ഫയൽ സിസ്റ്റം: %2, വലുപ്പം:‌%3 MiB) ഫോർമാറ്റ് ചെയ്യുക. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. ഫയൽ സിസ്റ്റം <strong>%2</strong> ഉപയോഗിച്ച് %3 MiB പാർട്ടീഷൻ <strong>%1</strong> ഫോർമാറ്റ് ചെയ്യുക. - + Formatting partition %1 with file system %2. ഫയൽ സിസ്റ്റം %2 ഉപയോഗിച്ച് പാർട്ടീഷൻ‌%1 ഫോർമാറ്റ് ചെയ്യുന്നു. - + The installer failed to format partition %1 on disk '%2'. ഡിസ്ക് '%2'ൽ ഉള്ള പാർട്ടീഷൻ‌ %1 ഫോർമാറ്റ് ചെയ്യുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -1356,72 +1613,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space %1 GiB ഡിസ്ക്സ്പെയ്സ് എങ്കിലും ലഭ്യമായിരിക്കണം. - + There is not enough drive space. At least %1 GiB is required. ആവശ്യത്തിനു ഡിസ്ക്സ്പെയ്സ് ലഭ്യമല്ല. %1 GiB എങ്കിലും വേണം. - + has at least %1 GiB working memory %1 GiB RAM എങ്കിലും ലഭ്യമായിരിക്കണം. - + The system does not have enough working memory. At least %1 GiB is required. സിസ്റ്റത്തിൽ ആവശ്യത്തിനു RAM ലഭ്യമല്ല. %1 GiB എങ്കിലും വേണം. - + is plugged in to a power source ഒരു ഊർജ്ജസ്രോതസ്സുമായി ബന്ധിപ്പിച്ചിരിക്കുന്നു - + The system is not plugged in to a power source. സിസ്റ്റം ഒരു ഊർജ്ജസ്രോതസ്സിലേക്ക് ബന്ധിപ്പിച്ചിട്ടില്ല. - + is connected to the Internet ഇന്റർനെറ്റിലേക്ക് ബന്ധിപ്പിച്ചിരിക്കുന്നു - + The system is not connected to the Internet. സിസ്റ്റം ഇന്റർനെറ്റുമായി ബന്ധിപ്പിച്ചിട്ടില്ല. - + is running the installer as an administrator (root) ഇൻസ്റ്റാളർ കാര്യനിർവാഹകരിൽ ഒരാളായിട്ടാണ് (root) പ്രവർത്തിപ്പിക്കുന്നത് - + The setup program is not running with administrator rights. സെറ്റപ്പ് പ്രോഗ്രാം അഡ്മിനിസ്ട്രേറ്റർ അവകാശങ്ങൾ ഇല്ലാതെയാണ് പ്രവർത്തിക്കുന്നത്. - + The installer is not running with administrator rights. ഇൻസ്റ്റാളർ അഡ്മിനിസ്ട്രേറ്റർ അവകാശങ്ങൾ ഇല്ലാതെയാണ് പ്രവർത്തിക്കുന്നത് - + has a screen large enough to show the whole installer മുഴുവൻ ഇൻസ്റ്റാളറും കാണിക്കാൻ തക്ക വലിപ്പമുള്ള ഒരു സ്ക്രീനുണ്ട് - + The screen is too small to display the setup program. സജ്ജീകരണ പ്രയോഗം കാണിക്കാൻ തക്ക വലുപ്പം സ്ക്രീനിനില്ല. - + The screen is too small to display the installer. ഇൻസ്റ്റാളർ കാണിക്കാൻ തക്ക വലുപ്പം സ്ക്രീനിനില്ല. @@ -1429,7 +1686,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. താങ്കളുടെ മെഷീനെ പറ്റിയുള്ള വിവരങ്ങൾ ശേഖരിക്കുന്നു. @@ -1437,25 +1694,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier ഒഇഎം ബാച്ച് ഐഡന്റിഫയർ - + Could not create directories <code>%1</code>. <code>%1</code> ഫോള്‍ഡർ ശ്രഷ്ടിക്കാനായില്ല. - + Could not open file <code>%1</code>. ഫയൽ <code>%1</code> തുറക്കാനായില്ല. - + Could not write to file <code>%1</code>. ഫയൽ <code>%1 -ലേക്ക്</code>എഴുതാനായില്ല. @@ -1463,7 +1720,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. mkinitcpio ഉപയോഗിച്ച് initramfs നിർമ്മിക്കുന്നു. @@ -1471,7 +1728,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. initramfs നിർമ്മിക്കുന്നു. @@ -1479,17 +1736,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed കോണ്‍സോള്‍ ഇന്‍സ്റ്റാള്‍ ചെയ്തിട്ടില്ല - + Please install KDE Konsole and try again! കെഡിഇ കൺസോൾ ഇൻസ്റ്റാൾ ചെയ്ത് വീണ്ടും ശ്രമിക്കുക! - + Executing script: &nbsp;<code>%1</code> സ്ക്രിപ്റ്റ് നിർവ്വഹിക്കുന്നു:&nbsp;<code>%1</code> @@ -1497,28 +1754,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script സ്ക്രിപ്റ്റ് - - KeyboardPage - - - Set keyboard model to %1.<br/> - കീബോർഡ് മോഡൽ %1 എന്നതായി ക്രമീകരിക്കുക.<br/> - - - - Set keyboard layout to %1/%2. - കീബോർഡ് വിന്യാസം %1%2 എന്നതായി ക്രമീകരിക്കുക. - - KeyboardQmlViewStep - + Keyboard കീബോര്‍ഡ്‌ @@ -1526,7 +1770,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard കീബോര്‍ഡ്‌ @@ -1534,65 +1778,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting സിസ്റ്റം ഭാഷാ ക്രമീകരണം - + 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>. സിസ്റ്റം ലൊക്കേൽ ഭാഷയും, കമാൻഡ് ലൈൻ സമ്പർക്കമുഖഘടകങ്ങളുടെ അക്ഷരക്കൂട്ടങ്ങളേയും സ്വാധീനിക്കും. <br/>നിലവിലുള്ള ക്രമീകരണം <strong>%1</strong> ആണ്. - + &Cancel റദ്ദാക്കുക (&C) - + &OK ശരി (&O) + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form ഫോം - + <h1>License Agreement</h1> <h1>അനുമതിപത്ര നിബന്ധനകൾ</h1> - + I accept the terms and conditions above. മുകളിലുള്ള നിബന്ധനകളും വ്യവസ്ഥകളും ഞാൻ അംഗീകരിക്കുന്നു. - + Please review the End User License Agreements (EULAs). എൻഡ് യൂസർ ലൈസൻസ് എഗ്രിമെന്റുകൾ (EULAs) ദയവായി പരിശോധിക്കൂ. - + This setup procedure will install proprietary software that is subject to licensing terms. ഈ സജ്ജീകരണപ്രക്രിയ അനുമതിപത്രനിബന്ധനകൾക്ക് കീഴിലുള്ള കുത്തക സോഫ്റ്റ്‌‌വെയറുകൾ ഇൻസ്റ്റാൾ ചെയ്യും. - + If you do not agree with the terms, the setup procedure cannot continue. താങ്കൾ ഈ നിബന്ധനകളോട് യോജിക്കുന്നില്ലെങ്കിൽ, സജ്ജീകരണപ്രക്രിയയ്ക്ക് തുടരാനാകില്ല. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. കൂടുതൽ സവിശേഷതകൾ നൽകുന്നതിനും ഉപയോക്താവിന്റെ അനുഭവം കൂടുതൽ മികവുറ്റതാക്കുന്നതിനും ഈ സജ്ജീകരണപ്രക്രിയയ്ക്ക് അനുമതിപത്രനിബന്ധനകൾക്ക് കീഴിലുള്ള കുത്തക സോഫ്റ്റ്‌‌വെയറുകൾ ഇൻസ്റ്റാൾ ചെയ്യാം. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. താങ്കൾ ഈ നിബന്ധനകളോട് യോജിക്കുന്നില്ലെങ്കിൽ, കുത്തക സോഫ്റ്റ്‌‌വെയറുകൾ ഇൻസ്റ്റാൾ ചെയ്യപ്പെടില്ല, പകരം സ്വതന്ത്ര ബദലുകൾ ഉപയോഗിക്കും. @@ -1600,7 +1867,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License അനുമതിപത്രം @@ -1608,109 +1875,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 ഡ്രൈവർ</strong><br/>%2 വക - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 ഗ്രാഫിക്സ് ഡ്രൈവർ</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 ബ്രൌസർ പ്ലഗിൻ</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 കോഡെക് </strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 പാക്കേജ് </strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 ഫയല്: %1 - + + Hide license text + അനുമതി പത്രം മറച്ച് വെക്കുക + + + Show the license text അനുമതിപത്രം കാണിക്കുക - + Open license agreement in browser. അനുമതിപത്രനിബന്ധനകൾ ബ്രൗസറിൽ തുറക്കുക. - - - Hide license text - അനുമതി പത്രം മറച്ച് വെക്കുക - LocalePage - - The system language will be set to %1. - സിസ്റ്റം ഭാഷ %1 ആയി സജ്ജമാക്കും. - - - - The numbers and dates locale will be set to %1. - സംഖ്യ & തീയതി രീതി %1 ആയി ക്രമീകരിക്കും. - - - + Region: പ്രദേശം: - + Zone: മേഖല: - - + + &Change... മാറ്റുക (&C)... - - - Set timezone to %1/%2.<br/> - സമയപദ്ധതി %1/%2 ആയി ക്രമീകരിക്കുക.<br/> - LocaleQmlViewStep - + Location സ്ഥാനം + + LocaleTests + + + Quit + + + LocaleViewStep - + Location സ്ഥാനം @@ -1718,35 +1978,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. LUKS കീ ഫയൽ ക്രമീകരിക്കുന്നു. - - + + No partitions are defined. പാര്‍ട്ടീഷ്യനുകള്‍ നിര്‍വ്വചിച്ചിട്ടില്ല - - - + + + Encrypted rootfs setup error എന്‍ക്രിപ്റ്റുചെയ്ത റൂട്ട് എഫ്എസ് സജ്ജീകരണത്തില്‍ പ്രശ്നമുണ്ടു് - + Root partition %1 is LUKS but no passphrase has been set. റൂട്ട് പാർട്ടീഷൻ %1 LUKS ആണ് പക്ഷേ രഹസ്യവാക്കൊന്നും ക്രമീകരിച്ചിട്ടില്ല. - + Could not create LUKS key file for root partition %1. റൂട്ട് പാർട്ടീഷൻ %1ന് വേണ്ടി LUKS കീ ഫയൽ നിർമ്മിക്കാനായില്ല. - + Could not configure LUKS key file on partition %1. @@ -1754,116 +2014,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. മെഷീൻ-ഐഡ് നിർമ്മിക്കുക - + Configuration Error ക്രമീകരണത്തിൽ പിഴവ് - + No root mount point is set for MachineId. മെഷീൻ ഐഡിയ്ക്ക് റൂട്ട് മൗണ്ട് പോയിന്റൊന്നും ക്രമീകരിച്ചിട്ടില്ല + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection പാക്കേജു് തിരഞ്ഞെടുക്കല്‍ - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1871,7 +2145,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1879,17 +2153,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: കൂട്ടം (&t): - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>ഒരു ബാച്ച് ഐഡന്റിഫയർ ഇവിടെ നൽകുക. ഇത് ടാർഗെറ്റ് സിസ്റ്റത്തിൽ സംഭരിക്കും</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM ക്രമീകരണം</h1><p>കലാമരേസ് ലക്ഷ്യ സിസ്റ്റം ക്രമീകരിക്കുമ്പോൾ OEM ക്രമീകരണങ്ങൾ ഉപയോഗിക്കും.</p></body></html> @@ -1897,260 +2171,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration ഓഇഎം ക്രമീകരണം - + Set the OEM Batch Identifier to <code>%1</code>. OEM ബാച്ച് ഐഡന്റിഫയർ <code>%1</code> ആയി ക്രമീകരിക്കുക. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short രഹസ്യവാക്ക് വളരെ ചെറുതാണ് - + Password is too long രഹസ്യവാക്ക് വളരെ വലുതാണ് - + Password is too weak രഹസ്യവാക്ക് വളരെ ദുർബലമാണ് - + Memory allocation error when setting '%1' '%1' ക്രമീക്കരിക്കുന്നതിൽ മെമ്മറി പങ്കുവയ്ക്കൽ പിഴവ് - + Memory allocation error മെമ്മറി വിന്യസിക്കുന്നതിൽ പിഴവ് - + The password is the same as the old one രഹസ്യവാക്ക് പഴയയതുതന്നെ ആണ് - + The password is a palindrome രഹസ്യവാക്ക് ഒരു അനുലോമവിലോമപദമാണ് - + The password differs with case changes only പാസ്‌വേഡ് അക്ഷരങ്ങളുടെ കേസ് മാറ്റങ്ങളിൽ മാത്രം വ്യത്യാസപ്പെട്ടിരിക്കുന്നു - + The password is too similar to the old one രഹസ്യവാക്ക് പഴയതിനോട് വളരെ സമാനമാണ് - + The password contains the user name in some form രഹസ്യവാക്ക് ഏതെങ്കിലും രൂപത്തിൽ ഉപയോക്തൃനാമം അടങ്ങിയിരിക്കുന്നു - + The password contains words from the real name of the user in some form രഹസ്യവാക്കിൽഏതെങ്കിലും രൂപത്തിൽ ഉപയോക്താവിന്റെ യഥാർത്ഥ പേരിൽ നിന്നുള്ള വാക്കുകൾ അടങ്ങിയിരിക്കുന്നു - + The password contains forbidden words in some form രഹസ്യവാക്കിൽ ഏതെങ്കിലും രൂപത്തിൽ വിലക്കപ്പെട്ട വാക്കുകൾ അടങ്ങിയിരിക്കുന്നു - - The password contains less than %1 digits - രഹസ്യവാക്ക് %1 അക്കത്തിൽ കുറവാണ് - - - + The password contains too few digits രഹസ്യവാക്കിൽ വളരെ കുറച്ച് അക്കങ്ങൾ അടങ്ങിയിരിക്കുന്നു - - The password contains less than %1 uppercase letters - രഹസ്യവാക്കിൽ %1 വലിയക്ഷരങ്ങൾ അടങ്ങിയിരിക്കുന്നു - - - + The password contains too few uppercase letters രഹസ്യവാക്കിൽ വളരെ കുറച്ചു വലിയക്ഷരങ്ങൾ മാത്രമേ അടങ്ങിയിട്ടുള്ളു - - - The password contains less than %1 lowercase letters - രഹസ്യവാക്കിൽ %1 -ൽ താഴെ ചെറിയ അക്ഷരങ്ങൾ അടങ്ങിയിരിക്കുന്നു + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters രഹസ്യവാക്കിൽ വളരെ കുറച്ചു ചെറിയക്ഷരങ്ങൾ മാത്രമേ അടങ്ങിയിട്ടുള്ളു - - The password contains less than %1 non-alphanumeric characters - രഹസ്യവാക്കിൽ ആൽഫാന്യൂമെറിക് ഇതര പ്രതീകങ്ങൾ %1 -ൽ കുറവാണ് - - - + The password contains too few non-alphanumeric characters രഹസ്യവാക്കിൽ ആൽഫാന്യൂമെറിക് ഇതര പ്രതീകങ്ങൾ വളരെ കുറവാണ് - - The password is shorter than %1 characters - പാസ്‌വേഡ് %1 പ്രതീകങ്ങളേക്കാൾ ചെറുതാണ് - - - + The password is too short രഹസ്യവാക്ക് വളരെ ചെറുതാണ് - - The password is just rotated old one - രഹസ്യവാക്ക് പഴയതുതന്നെ തിരിച്ചിട്ടതാണ് - - - - The password contains less than %1 character classes - പാസ്‌വേഡിൽ പ്രതീക ക്ലാസുകൾ %1 ൽ കുറവാണ് - - - + The password does not contain enough character classes രഹസ്യവാക്കിൽ ആവശ്യത്തിനു അക്ഷരങ്ങൾ ഇല്ല - - The password contains more than %1 same characters consecutively - രഹസ്സ്യവാക്കിൽ അടുത്തടുത്തായി ഒരേ പ്രതീകം %1 കൂടുതൽ തവണ അടങ്ങിയിരിക്കുന്നു - - - + The password contains too many same characters consecutively രഹസ്സ്യവാക്കിൽ അടുത്തടുത്തായി ഒരേ പ്രതീകം ഒരുപാട് തവണ അടങ്ങിയിരിക്കുന്നു. - - The password contains more than %1 characters of the same class consecutively - രഹസ്യവാക്കിൽ %1 തവണ ഒരേ തരം അക്ഷരം ആവർത്തിക്കുന്നു - - - + The password contains too many characters of the same class consecutively രഹസ്യവാക്കിൽ ഒരുപാട് തവണ ഒരേ തരം അക്ഷരം ആവർത്തിക്കുന്നു - - - The password contains monotonic sequence longer than %1 characters - പാസ്‌വേഡിൽ %1 പ്രതീകങ്ങളേക്കാൾ ദൈർഘ്യമുള്ള മോണോടോണിക് ശ്രേണി അടങ്ങിയിരിക്കുന്നു + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence പാസ്‌വേഡിൽ വളരെ ദൈർഘ്യമുള്ള ഒരു മോണോടോണിക് പ്രതീക ശ്രേണിയുണ്ട് - + No password supplied രഹസ്യവാക്ക് ഒന്നും നല്‍കിയിട്ടില്ല - + Cannot obtain random numbers from the RNG device RNG ഉപകരണത്തിൽ നിന്ന് ആകസ്‌മിക സംഖ്യകൾ എടുക്കാൻ പറ്റുന്നില്ല. - + Password generation failed - required entropy too low for settings രഹസ്യവാക്ക് സൃഷ്ടിക്കുന്നതിൽ പരാജയപ്പെട്ടു - ആവശ്യത്തിനു entropy ഇല്ല. - + The password fails the dictionary check - %1 രഹസ്യവാക്ക് നിഘണ്ടു പരിശോധനയിൽ പരാജയപ്പെടുന്നു - %1 - + The password fails the dictionary check രഹസ്യവാക്ക് നിഘണ്ടു പരിശോധനയിൽ പരാജയപ്പെടുന്നു - + Unknown setting - %1 അജ്ഞാതമായ ക്രമീകരണം - %1 - + Unknown setting അപരിചിതമായ സജ്ജീകരണം - + Bad integer value of setting - %1 ക്രമീകരണത്തിന്റെ ശരിയല്ലാത്ത സംഖ്യാമൂല്യം - %1 - + Bad integer value തെറ്റായ സംഖ്യ - + Setting %1 is not of integer type %1 സജ്ജീകരണം സംഖ്യയല്ല - + Setting is not of integer type സജ്ജീകരണം സംഖ്യയല്ല - + Setting %1 is not of string type %1 സജ്ജീകരണം ഒരു വാക്കല്ലാ - + Setting is not of string type സജ്ജീകരണം ഒരു വാക്കല്ലാ - + Opening the configuration file failed ക്രമീകരണ ഫയൽ തുറക്കുന്നതിൽ പരാജയപ്പെട്ടു - + The configuration file is malformed ക്രമീകരണ ഫയൽ പാഴാണു - + Fatal failure അപകടകരമായ പിഴവ് - + Unknown error അപരിചിതമായ പിശക് - + Password is empty രഹസ്യവാക്ക് ശൂന്യമാണ് @@ -2158,40 +2489,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form ഫോം - + Product Name ഉത്പന്നത്തിന്റെ പേര് - + TextLabel ടെക്സ്റ്റ്ലേബൽ - + Long Product Description ഉത്പന്നത്തിന്റെ ബൃഹത്തായ വിശദീകരണം - + Package Selection പാക്കേജ് തിരഞ്ഞെടുക്കൽ - + Please pick a product from the list. The selected product will be installed. പട്ടികയിൽ നിന്നും ഒരു ഉത്പന്നം തിരഞ്ഞെടുക്കുക. തിരഞ്ഞെടുത്ത ഉത്പന്നം ഇൻസ്റ്റാൾ ചെയ്യപ്പെടുക. + + PackageChooserQmlViewStep + + + Packages + പാക്കേജുകൾ + + PackageChooserViewStep - + Packages പാക്കേജുകൾ @@ -2199,12 +2538,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name പേര് - + Description വിവരണം @@ -2212,17 +2551,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form ഫോം - + Keyboard Model: കീബോഡ് മാതൃക: - + Type here to test your keyboard നിങ്ങളുടെ കീബോർഡ് പരിശോധിക്കുന്നതിന് ഇവിടെ ടൈപ്പുചെയ്യുക @@ -2230,96 +2569,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form ഫോം - + What is your name? നിങ്ങളുടെ പേരെന്താണ് ? - - What name do you want to use to log in? - ലോഗിൻ ചെയ്യാൻ നിങ്ങൾ ഏത് നാമം ഉപയോഗിക്കാനാണു ആഗ്രഹിക്കുന്നത്? - - - - Choose a password to keep your account safe. - നിങ്ങളുടെ അക്കൗണ്ട് സുരക്ഷിതമായി സൂക്ഷിക്കാൻ ഒരു രഹസ്യവാക്ക് തിരഞ്ഞെടുക്കുക. - - - - - <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> - <small>ഒരേ പാസ്‌വേഡ് രണ്ടുതവണ നൽകുക, അതുവഴി ടൈപ്പിംഗ് പിശകുകൾ പരിശോധിക്കാൻ കഴിയും.ഒരു നല്ല പാസ്‌വേഡിൽ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, ചിഹ്നനം എന്നിവയുടെ മിശ്രിതം അടങ്ങിയിരിക്കും, കുറഞ്ഞത് എട്ട് പ്രതീകങ്ങളെങ്കിലും നീളമുണ്ടായിരിക്കണം, കൃത്യമായ ഇടവേളകളിൽ അവ മാറ്റണം.</small> - - - - What is the name of this computer? - ഈ കമ്പ്യൂട്ടറിന്റെ നാമം എന്താണ് ? - - - + Your Full Name താങ്കളുടെ മുഴുവൻ പേരു് - + + What name do you want to use to log in? + ലോഗിൻ ചെയ്യാൻ നിങ്ങൾ ഏത് നാമം ഉപയോഗിക്കാനാണു ആഗ്രഹിക്കുന്നത്? + + + login ലോഗിൻ - + + What is the name of this computer? + ഈ കമ്പ്യൂട്ടറിന്റെ നാമം എന്താണ് ? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>നിങ്ങൾ ഒരു നെറ്റ്‌വർക്കിൽ കമ്പ്യൂട്ടർ മറ്റുള്ളവർക്ക് ദൃശ്യമാക്കുകയാണെങ്കിൽ ഈ പേര് ഉപയോഗിക്കും.</small> - + Computer Name കമ്പ്യൂട്ടറിന്റെ പേര് - - + + Choose a password to keep your account safe. + നിങ്ങളുടെ അക്കൗണ്ട് സുരക്ഷിതമായി സൂക്ഷിക്കാൻ ഒരു രഹസ്യവാക്ക് തിരഞ്ഞെടുക്കുക. + + + + + <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> + <small>ഒരേ പാസ്‌വേഡ് രണ്ടുതവണ നൽകുക, അതുവഴി ടൈപ്പിംഗ് പിശകുകൾ പരിശോധിക്കാൻ കഴിയും.ഒരു നല്ല പാസ്‌വേഡിൽ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, ചിഹ്നനം എന്നിവയുടെ മിശ്രിതം അടങ്ങിയിരിക്കും, കുറഞ്ഞത് എട്ട് പ്രതീകങ്ങളെങ്കിലും നീളമുണ്ടായിരിക്കണം, കൃത്യമായ ഇടവേളകളിൽ അവ മാറ്റണം.</small> + + + + Password രഹസ്യവാക്ക് - - + + Repeat Password രഹസ്യവാക്ക് വീണ്ടും - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. ഈ കള്ളി തിരഞ്ഞെടുക്കുമ്പോൾ, രഹസ്യവാക്കിന്റെ ബലപരിശോധന നടപ്പിലാക്കുകയും, ആയതിനാൽ താങ്കൾക്ക് ദുർബലമായ ഒരു രഹസ്യവാക്ക് ഉപയോഗിക്കാൻ സാധിക്കാതെ വരുകയും ചെയ്യും. - + Require strong passwords. ശക്തമായ രഹസ്യവാക്കുകൾ ആവശ്യപ്പെടുക - + Log in automatically without asking for the password. രഹസ്യവാക്കില്ലാതെ യാന്ത്രികമായി ലോഗിൻ ചെയ്യുക. - + Use the same password for the administrator account. അഡ്മിനിസ്ട്രേറ്റർ അക്കൗണ്ടിനും ഇതേ രഹസ്യവാക്ക് ഉപയോഗിക്കുക. - + Choose a password for the administrator account. അഡ്മിനിസ്ട്രേറ്റർ അക്കണ്ടിനായി ഒരു രഹസ്യവാക്ക് തിരഞ്ഞെടുക്കുക. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>ഒരേ പാസ്‌വേഡ് രണ്ടുതവണ നൽകുക, അതുവഴി ടൈപ്പിംഗ് പിശകുകൾ പരിശോധിക്കാൻ കഴിയും.</small> @@ -2327,42 +2666,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root റൂട്ട് - + Home ഹോം - + Boot ബൂട്ട് - + EFI system ഇഎഫ്ഐ സിസ്റ്റം - + Swap സ്വാപ്പ് - + New partition for %1 %1-നുള്ള പുതിയ പാർട്ടീഷൻ - + New partition പുതിയ പാർട്ടീഷൻ - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2710,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space ലഭ്യമായ സ്ഥലം - - + + New partition പുതിയ പാർട്ടീഷൻ - + Name പേര് - + File System ഫയൽ സിസ്റ്റം - + + File System Label + + + + Mount Point മൗണ്ട് പോയിന്റ് - + Size വലുപ്പം @@ -2406,77 +2750,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form ഫോം - + Storage de&vice: സ്റ്റോറേജ് ഉപകരണം (&v): - + &Revert All Changes എല്ലാ മാറ്റങ്ങളും പിൻവലിക്കുക (&R) - + New Partition &Table പുതിയ പാർട്ടീഷൻ ടേബിൾ - + Cre&ate നിർമ്മിക്കുക (&a) - + &Edit തിരുത്തുക (&E) - + &Delete ഇല്ലാതാക്കുക (&D) - + New Volume Group പുതിയ വോള്യം ഗ്രൂപ്പ് - + Resize Volume Group വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം മാറ്റുക - + Deactivate Volume Group വോള്യം ഗ്രൂപ്പ് നിഷ്ക്രിയമാക്കുക - + Remove Volume Group വോള്യം ഗ്രൂപ്പ് നീക്കം ചെയ്യുക - + I&nstall boot loader on: ബൂട്ട്ലോഡർ ഇവിടെ ഇൻസ്റ്റാൾ ചെയ്യുക (&n): - + Are you sure you want to create a new partition table on %1? %1ൽ ഒരു പുതിയ പാർട്ടീഷൻ ടേബിൾ നിർമ്മിക്കണമെന്ന് താങ്കൾക്കുറപ്പാണോ? - + Can not create new partition പുതിയ പാർട്ടീഷൻ നിർമ്മിക്കാനായില്ല - + 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. %1 ലെ പാർട്ടീഷൻ പട്ടികയിൽ ഇതിനകം %2 പ്രാഥമിക പാർട്ടീഷനുകൾ ഉണ്ട്,ഇനി ഒന്നും ചേർക്കാൻ കഴിയില്ല. പകരം ഒരു പ്രാഥമിക പാർട്ടീഷൻ നീക്കംചെയ്‌ത് എക്സ്ടെൻഡഡ്‌ പാർട്ടീഷൻ ചേർക്കുക. @@ -2484,117 +2828,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... സിസ്റ്റത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ ശേഖരിക്കുന്നു... - + Partitions പാർട്ടീഷനുകൾ - - Install %1 <strong>alongside</strong> another operating system. - മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - ഡിസ്ക് <strong>മായ്ക്കുക</strong>എന്നിട്ട് %1 ഇൻസ്റ്റാൾ ചെയ്യുക. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - ഒരു പാർട്ടീഷൻ %1 ഉപയോഗിച്ച് <strong>പുനഃസ്ഥാപിക്കുക.</strong> + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>സ്വമേധയാ</strong> ഉള്ള പാർട്ടീഷനിങ്. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - %2 (%3) ഡിസ്കിൽ മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - ഡിസ്ക് <strong>%2</strong> (%3) <strong>മായ്‌ച്ച് </strong> %1 ഇൻസ്റ്റാൾ ചെയ്യുക. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>%2</strong> (%3) ഡിസ്കിലെ ഒരു പാർട്ടീഷൻ %1 ഉപയോഗിച്ച് <strong>മാറ്റിസ്ഥാപിക്കുക</strong>. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>%1 </strong>(%2) ഡിസ്കിലെ <strong>സ്വമേധയാ</strong> പാർട്ടീഷനിംഗ്. - - - - Disk <strong>%1</strong> (%2) - ഡിസ്ക് <strong>%1</strong> (%2) - - - + Current: നിലവിലുള്ളത്: - + After: ശേഷം: - + No EFI system partition configured ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷനൊന്നും ക്രമീകരിച്ചിട്ടില്ല - - 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>esp</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. - %1 ആരംഭിക്കാൻ ഒരു ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ ആവശ്യമാണ്.<br/><br/>ഒരു ഇഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ ക്രമീകരിക്കുന്നതിന്,തിരികെ പോയി <strong>ഇ എസ് പി</strong> ഫ്ലാഗും മൗണ്ട് പോയിന്റ് <strong>%2</strong> ഉം ആയിട്ടുള്ള ഒരു FAT32 ഫയൽസിസ്റ്റം തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ സൃഷ്ടിക്കുക.<br/><br/>ഒരു ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ സജ്ജീകരിക്കാതെ നിങ്ങൾക്ക് തുടരാം, പക്ഷേ നിങ്ങളുടെ സിസ്റ്റം ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടേക്കാം. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ ഫ്ലാഗ് ക്രമീകരിച്ചിട്ടില്ല + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1 ആരംഭിക്കുന്നതിനായി ഒരു ഇഎഫ്ഐ.<br/><br/>മൗണ്ട് പോയിന്റ് <strong>%2 -ഓട്</strong>കൂടി ഒരു പാർട്ടീഷൻ ക്രമീകരിച്ചിട്ടുണ്ടായിരുന്നു, പക്ഷേ അതിന്റെ <strong>esp</strong> ഫ്ലാഗ് ക്രമീകരിച്ചിട്ടില്ല.<br/> ഫ്ലാഗ് ക്രമീകരിക്കാനായി തിരിച്ച് പോയി പാർട്ടീഷൻ തിരുത്തുക.<br/><br/>ഫ്ലാഗ് ക്രമീകരിക്കാതെ തന്നെ താങ്കൾക്ക് തുടരാവുന്നതാണ്, പക്ഷേ താങ്കളുടെ സിസ്റ്റം ആരംഭിക്കാതിരുന്നേക്കാം. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യപ്പെട്ടിട്ടില്ല - + 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. എൻക്രിപ്റ്റ് ചെയ്ത ഒരു റൂട്ട് പാർട്ടീഷനോടൊപ്പം ഒരു വേർപെടുത്തിയ ബൂട്ട് പാർട്ടീഷനും ക്രമീകരിക്കപ്പെട്ടിരുന്നു, എന്നാൽ ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യപ്പെട്ടതല്ല.<br/><br/>ഇത്തരം സജ്ജീകരണത്തിന്റെ സുരക്ഷ ഉത്കണ്ഠാജനകമാണ്, എന്തെന്നാൽ പ്രധാനപ്പെട്ട സിസ്റ്റം ഫയലുകൾ ഒരു എൻക്രിപ്റ്റ് ചെയ്യപ്പെടാത്ത പാർട്ടീഷനിലാണ് സൂക്ഷിച്ചിട്ടുള്ളത്.<br/> താങ്കൾക്ക് വേണമെങ്കിൽ തുടരാം, പക്ഷേ ഫയൽ സിസ്റ്റം തുറക്കൽ സിസ്റ്റം ആരംഭപ്രക്രിയയിൽ വൈകിയേ സംഭവിക്കൂ.<br/>ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യാനായി, തിരിച്ചു പോയി പാർട്ടീഷൻ നിർമ്മാണ ജാലകത്തിൽ <strong>എൻക്രിപ്റ്റ്</strong> തിരഞ്ഞെടുത്തുകൊണ്ട് അത് വീണ്ടും നിർമ്മിക്കുക. - + has at least one disk device available. ഒരു ഡിസ്ക് ഡിവൈസെങ്കിലും ലഭ്യമാണ്. - + There are no partitions to install on. @@ -2602,13 +2936,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job പ്ലാസ്മ കെട്ടും മട്ടും ജോലി - - + + Could not select KDE Plasma Look-and-Feel package കെഡിഇ പ്ലാസ്മ കെട്ടും മട്ടും പാക്കേജ് തിരഞ്ഞെടുക്കാനായില്ല @@ -2616,17 +2950,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form ഫോം - + 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. കെ‌ഡി‌ഇ പ്ലാസ്മ ഡെസ്‌ക്‌ടോപ്പിനായി ഒരു കെട്ടും മട്ടും തിരഞ്ഞെടുക്കുക.നിങ്ങൾക്ക് ഈ ഘട്ടം ഇപ്പോൾ ഒഴിവാക്കി സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്തതിനു ശേഷവും കെട്ടും മട്ടും ക്രമീരകരിക്കാൻ കഴിയും.ഒരു കെട്ടും മട്ടും തിരഞ്ഞെടുക്കലിൽ ക്ലിക്കുചെയ്യുന്നത് ആ കെട്ടും മട്ടിന്റെയും തത്സമയ പ്രിവ്യൂ നൽകും. - + 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. കെ‌ഡി‌ഇ പ്ലാസ്മ ഡെസ്‌ക്‌ടോപ്പിനായി ഒരു കെട്ടും മട്ടും തിരഞ്ഞെടുക്കുക.നിങ്ങൾക്ക് ഈ ഘട്ടം ഇപ്പോൾ ഒഴിവാക്കി സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്തതിനു ശേഷവും കെട്ടും മട്ടും ക്രമീരകരിക്കാൻ കഴിയും @@ -2634,7 +2968,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel കെട്ടും മട്ടും @@ -2642,17 +2976,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... ഫയലുകൾ ഭാവിയിലേക്കായി സംരക്ഷിക്കുന്നു ... - + No files configured to save for later. ഭാവിയിലേക്കായി സംരക്ഷിക്കാനായി ഫയലുകളൊന്നും ക്രമീകരിച്ചിട്ടില്ല. - + Not all of the configured files could be preserved. ക്രമീകരിക്കപ്പെട്ട ഫയലുകളെല്ലാം സംരക്ഷിക്കാനായില്ല. @@ -2660,14 +2994,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. ആജ്ഞയിൽ നിന്നും ഔട്ട്പുട്ടൊന്നുമില്ല. - + Output: @@ -2676,52 +3010,52 @@ Output: - + External command crashed. ബാഹ്യമായ ആജ്ഞ തകർന്നു. - + Command <i>%1</i> crashed. ആജ്ഞ <i>%1</i> പ്രവർത്തനരഹിതമായി. - + External command failed to start. ബാഹ്യമായ ആജ്ഞ ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു. - + Command <i>%1</i> failed to start. <i>%1</i>ആജ്ഞ ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു. - + Internal error when starting command. ആജ്ഞ ആരംഭിക്കുന്നതിൽ ആന്തരികമായ പിഴവ്. - + Bad parameters for process job call. പ്രക്രിയ ജോലി വിളിയ്ക്ക് ശരിയല്ലാത്ത പരാമീറ്ററുകൾ. - + External command failed to finish. ബാഹ്യമായ ആജ്ഞ പൂർത്തിയാവുന്നതിൽ പരാജയപ്പെട്ടു. - + Command <i>%1</i> failed to finish in %2 seconds. ആജ്ഞ <i>%1</i> %2 സെക്കൻഡുകൾക്കുള്ളിൽ പൂർത്തിയാവുന്നതിൽ പരാജയപ്പെട്ടു. - + External command finished with errors. ബാഹ്യമായ ആജ്ഞ പിഴവുകളോട് കൂടീ പൂർത്തിയായി. - + Command <i>%1</i> finished with exit code %2. ആജ്ഞ <i>%1</i> എക്സിറ്റ് കോഡ് %2ഓട് കൂടി പൂർത്തിയായി. @@ -2729,89 +3063,94 @@ Output: QObject - - Default Keyboard Model - സ്വതേയുള്ള കീബോർഡ് തരം - - - - - Default - സ്വതേയുള്ളത് - - - - unknown - അജ്ഞാതം - - - - extended - വിസ്തൃതമായത് - - - - unformatted - ഫോർമാറ്റ് ചെയ്യപ്പെടാത്തത് - - - - swap - സ്വാപ്പ് - - - - Unpartitioned space or unknown partition table - പാർട്ടീഷൻ ചെയ്യപ്പെടാത്ത സ്ഥലം അല്ലെങ്കിൽ അപരിചിതമായ പാർട്ടീഷൻ ടേബിൾ - - - - (no mount point) - (മൗണ്ട് പോയിന്റ് ഇല്ല) - - - - Requirements checking for module <i>%1</i> is complete. - <i>%1</i>മൊഡ്യൂളിനായുള്ള ആവശ്യകതകൾ പരിശോധിക്കൽ പൂർത്തിയായിരിക്കുന്നു. - - - + %1 (%2) %1 (%2) - - No product - ഉൽപ്പന്നമൊന്നുമില്ല + + unknown + അജ്ഞാതം - - No description provided. - വിവരണമൊന്നും നൽകിയിട്ടില്ല. + + extended + വിസ്തൃതമായത് - - - - + + unformatted + ഫോർമാറ്റ് ചെയ്യപ്പെടാത്തത് + + + + swap + സ്വാപ്പ് + + + + + Default + സ്വതേയുള്ളത് + + + + + + File not found ഫയൽ കണ്ടെത്താനായില്ല - + Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> പാഥ് ഒരു പൂർണ്ണമായ പാഥ് ആയിരിക്കണം. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. റാൻഡം ഫയൽ <pre>%1</pre> നിർമ്മിക്കാനായില്ല. + + + No product + ഉൽപ്പന്നമൊന്നുമില്ല + + + + No description provided. + വിവരണമൊന്നും നൽകിയിട്ടില്ല. + + + + (no mount point) + (മൗണ്ട് പോയിന്റ് ഇല്ല) + + + + Unpartitioned space or unknown partition table + പാർട്ടീഷൻ ചെയ്യപ്പെടാത്ത സ്ഥലം അല്ലെങ്കിൽ അപരിചിതമായ പാർട്ടീഷൻ ടേബിൾ + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2819,18 +3158,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നീക്കം ചെയ്യുക. - + Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നീക്കം ചെയ്യുക. - + The installer failed to remove a volume group named '%1'. '%1' എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പ് നീക്കം ചെയ്യുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -2838,143 +3177,158 @@ Output: ReplaceWidget - + Form ഫോം - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 എവിടെ ഇൻസ്റ്റാൾ ചെയ്യണമെന്ന് തിരഞ്ഞെടുക്കുക.<br/><font color="red">മുന്നറിയിപ്പ്: </font> ഇത് തിരഞ്ഞെടുത്ത പാർട്ടീഷനിലെ എല്ലാ ഫയലുകളും നീക്കം ചെയ്യും. - + The selected item does not appear to be a valid partition. തിരഞ്ഞെടുക്കപ്പെട്ടത് സാധുവായ ഒരു പാർട്ടീഷനായി തോന്നുന്നില്ല. - + %1 cannot be installed on empty space. Please select an existing partition. %1 ഒരു ശൂന്യമായ സ്ഥലത്ത് ഇൻസ്റ്റാൾ ചെയ്യാൻ സാധിക്കില്ല. ദയവായി നിലവിലുള്ള ഒരു പാർട്ടീഷൻ തിരഞ്ഞെടുക്കൂ. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 ഒരു എക്സ്റ്റൻഡഡ് പാർട്ടീഷനിൽ ചെയ്യാൻ സാധിക്കില്ല. ദയവായി നിലവിലുള്ള ഒരു പ്രൈമറി അല്ലെങ്കിൽ ലോജിക്കൽ പാർട്ടീഷൻ തിരഞ്ഞെടുക്കൂ. - + %1 cannot be installed on this partition. %1 ഈ പാർട്ടീഷനിൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ സാധിക്കില്ല. - + Data partition (%1) ഡാറ്റ പാർട്ടീഷൻ (%1) - + Unknown system partition (%1) അപരിചിതമായ സിസ്റ്റം പാർട്ടീഷൻ (%1) - + %1 system partition (%2) %1 സിസ്റ്റം പാർട്ടീഷൻ (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>പാർട്ടീഷൻ %1 %2ന് തീരെ ചെറുതാണ്. ദയവായി %3ജിബി എങ്കീലും ഇടമുള്ള ഒരു പാർട്ടീഷൻ തിരഞ്ഞെടുക്കൂ. - + <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. <strong>%2</strong><br/><br/>ഈ സിസ്റ്റത്തിൽ എവിടേയും ഒരു ഇഎഫ്ഐ സിസ്റ്റം പർട്ടീഷൻ കണ്ടെത്താനായില്ല. %1 സജ്ജീകരിക്കുന്നതിന് ദയവായി തിരിച്ചുപോയി മാനുവൽ പാർട്ടീഷനിങ്ങ് ഉപയോഗിക്കുക. - - - + + + <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. <strong>%3</strong><br/><br/>%1 %2ൽ ഇൻസ്റ്റാൾ ചെയ്യപ്പെടും.<br/><font color="red">മുന്നറിയിപ്പ്:</font>പാർട്ടീഷൻ %2ൽ ഉള്ള എല്ലാ ഡാറ്റയും നഷ്ടപ്പെടും. - + The EFI system partition at %1 will be used for starting %2. %1 ലെ ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ %2 ആരംഭിക്കുന്നതിന് ഉപയോഗിക്കും. - + EFI system partition: ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job ഫയൽ സിസ്റ്റത്തിന്റെ വലുപ്പം മാറ്റുന്ന ജോലി - + Invalid configuration അസാധുവായ ക്രമീകരണം - + The file-system resize job has an invalid configuration and will not run. ഫയൽ സിസ്റ്റം വലുപ്പം മാറ്റുന്ന ജോലിയിൽ അസാധുവായ ക്രമീകരണം ഉണ്ട്, അത് പ്രവർത്തിക്കില്ല. - + KPMCore not Available KPMCore ലഭ്യമല്ല - + Calamares cannot start KPMCore for the file-system resize job. ഫയൽ സിസ്റ്റം വലുപ്പം മാറ്റുന്നതിനുള്ള ജോലിക്കായി കാലാമറസിന് KPMCore ആരംഭിക്കാൻ കഴിയില്ല. - - - - - + + + + + Resize Failed വലുപ്പം മാറ്റുന്നത് പരാജയപ്പെട്ടു - + The filesystem %1 could not be found in this system, and cannot be resized. ഫയൽ സിസ്റ്റം %1 ഈ സിസ്റ്റത്തിൽ കണ്ടെത്താനായില്ല, അതിനാൽ അതിന്റെ വലുപ്പം മാറ്റാനാവില്ല. - + The device %1 could not be found in this system, and cannot be resized. ഉപകരണം %1 ഈ സിസ്റ്റത്തിൽ കണ്ടെത്താനായില്ല, അതിനാൽ അതിന്റെ വലുപ്പം മാറ്റാനാവില്ല. - - + + The filesystem %1 cannot be resized. %1 എന്ന ഫയൽസിസ്റ്റത്തിന്റെ വലുപ്പം മാറ്റാൻ കഴിയില്ല. - - + + The device %1 cannot be resized. %1 ഉപകരണത്തിന്റെ വലുപ്പം മാറ്റാൻ കഴിയില്ല. - + The filesystem %1 must be resized, but cannot. %1 എന്ന ഫയൽസിസ്റ്റത്തിന്റെ വലുപ്പം മാറ്റണം, പക്ഷേ കഴിയില്ല. - + The device %1 must be resized, but cannot %1 ഉപകരണത്തിന്റെ വലുപ്പം മാറ്റണം, പക്ഷേ കഴിയില്ല @@ -2982,22 +3336,22 @@ Output: ResizePartitionJob - + Resize partition %1. %1 പാർട്ടീഷന്റെ വലുപ്പം മാറ്റുക. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%1</strong> എന്ന <strong>%2MiB</strong> പാർട്ടീഷന്റെ വലുപ്പം <strong>%3Mib</strong>യിലേക്ക് മാറ്റുക. - + Resizing %2MiB partition %1 to %3MiB. %1 എന്ന %2MiB പാർട്ടീഷന്റെ വലുപ്പം %3Mibയിലേക്ക് മാറ്റുന്നു. - + The installer failed to resize partition %1 on disk '%2'. '%2' ഡിസ്കിലുള്ള %1 പാർട്ടീഷന്റെ വലുപ്പം മാറ്റുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു @@ -3005,7 +3359,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം മാറ്റുക @@ -3013,18 +3367,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. %1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം %2ൽ നിന്നും %3ലേക്ക് മാറ്റുക. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong> എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം <strong>%2</strong>ൽ നിന്നും <strong>%3</strong>ലേക്ക് മാറ്റുക. - + The installer failed to resize a volume group named '%1'. '%1' എന്ന് പേരുള്ള ഒരു വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം മാറ്റുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -3032,53 +3386,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: മികച്ച ഫലങ്ങൾക്കായി ഈ കമ്പ്യൂട്ടർ താഴെപ്പറയുന്നവ നിറവേറ്റുന്നു എന്നുറപ്പുവരുത്തുക: - + System requirements സിസ്റ്റം ആവശ്യകതകൾ - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - %1 സജ്ജീകരിക്കുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>സജ്ജീകരണം തുടരാനാവില്ല. <a href="#details">വിവരങ്ങൾ...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - %1 ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>ഇൻസ്റ്റളേഷൻ തുടരാനാവില്ല. <a href="#details">വിവരങ്ങൾ...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - %1 സജ്ജീകരിക്കുന്നതിനുള്ള ചില ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>സജ്ജീകരണം തുടരാം, പക്ഷേ ചില സവിശേഷതകൾ നിഷ്ക്രിയമായിരിക്കാം. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - %1 ഇൻസ്റ്റാൾ ചെയ്യാൻ ശുപാർശ ചെയ്യപ്പെട്ടിട്ടുള്ള ആവശ്യങ്ങൾ ഈ കമ്പ്യൂട്ടർ നിറവേറ്റുന്നില്ല.<br/>ഇൻസ്റ്റളേഷൻ തുടരാം, പക്ഷേ ചില സവിശേഷതകൾ നിഷ്ക്രിയമായിരിക്കാം. - - - - This program will ask you some questions and set up %2 on your computer. - ഈ പ്രക്രിയ താങ്കളോട് ചില ചോദ്യങ്ങൾ ചോദിക്കുകയും %2 താങ്കളുടെ കമ്പ്യൂട്ടറിൽ സജ്ജീകരിക്കുകയും ചെയ്യും. - - ScanningDialog - + Scanning storage devices... സ്റ്റോറേജ് ഉപകരണങ്ങൾ തിരയുന്നു... - + Partitioning പാർട്ടീഷനിങ്ങ് @@ -3086,29 +3412,29 @@ Output: SetHostNameJob - + Set hostname %1 %1 ഹോസ്റ്റ്‌നെയിം ക്രമീകരിക്കുക - + Set hostname <strong>%1</strong>. <strong>%1</strong> ഹോസ്റ്റ്‌നെയിം ക്രമീകരിക്കുക. - + Setting hostname %1. %1 ഹോസ്റ്റ്‌നെയിം ക്രമീകരിക്കുന്നു. + - Internal Error ആന്തരികമായ പിഴവ് - - + + Cannot write hostname to target system ടാർഗെറ്റ് സിസ്റ്റത്തിലേക്ക് ഹോസ്റ്റ്നാമം എഴുതാൻ കഴിയില്ല @@ -3116,29 +3442,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 കീബോർഡ് മാതൃക %1 ആയി ക്രമീകരിക്കുക, രൂപരേഖ %2-%3 - + Failed to write keyboard configuration for the virtual console. വിർച്വൽ കൺസോളിനായുള്ള കീബോർഡ് ക്രമീകരണം എഴുതുന്നതിൽ പരാജയപ്പെട്ടു. - - - + + + Failed to write to %1 %1ലേക്ക് എഴുതുന്നതിൽ പരാജയപ്പെട്ടു - + Failed to write keyboard configuration for X11. X11 നായി കീബോർഡ് കോൺഫിഗറേഷൻ എഴുതുന്നതിൽ പരാജയപ്പെട്ടു. - + Failed to write keyboard configuration to existing /etc/default directory. നിലവിലുള്ള /etc/default ഡയറക്ടറിയിലേക്ക് കീബോർഡ് കോൺഫിഗറേഷൻ എഴുതുന്നതിൽ പരാജയപ്പെട്ടു. @@ -3146,82 +3472,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. പാർട്ടീഷൻ %1ൽ ഫ്ലാഗുകൾ ക്രമീകരിക്കുക. - + Set flags on %1MiB %2 partition. %1എംബി പാർട്ടീഷൻ %2ൽ ഫ്ലാഗുകൾ ക്രമീകരിക്കുക. - + Set flags on new partition. പുതിയ പാർട്ടീഷനിൽ ഫ്ലാഗുകൾ ക്രമീകരിക്കുക. - + Clear flags on partition <strong>%1</strong>. <strong>%1</strong> പാർട്ടീഷനിലെ ഫ്ലാഗുകൾ നീക്കം ചെയ്യുക. - + Clear flags on %1MiB <strong>%2</strong> partition. %1എംബി <strong>%2</strong> പാർട്ടീഷനിലെ ഫ്ലാഗുകൾ ക്രമീകരിക്കുക. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - %1MiB <strong>%2</strong> പാർട്ടീഷൻ <strong>%3</strong> ആയി ഫ്ലാഗ് ചെയ്യുക. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - ഫ്ലാഗുകൾ %1MiB <strong>%2</strong> പാർട്ടീഷനിൽ നിർമ്മിക്കുന്നു. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - <strong>%3</strong> ഫ്ലാഗുകൾ %1MiB <strong>%2</strong> പാർട്ടീഷനിൽ ക്രമീകരിക്കുന്നു. - - - + Clear flags on new partition. പുതിയ പാർട്ടീഷനിലെ ഫ്ലാഗുകൾ മായ്ക്കുക. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. <strong>%1</strong> പാർട്ടീഷനെ <strong>%2</strong> ആയി ഫ്ലാഗ് ചെയ്യുക - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MiB <strong>%2</strong> പാർട്ടീഷൻ <strong>%3</strong> ആയി ഫ്ലാഗ് ചെയ്യുക. + + + Flag new partition as <strong>%1</strong>. പുതിയ പാർട്ടീഷൻ <strong>%1 </strong>ആയി ഫ്ലാഗുചെയ്യുക. - + Clearing flags on partition <strong>%1</strong>. പാർട്ടീഷൻ <strong>%1</strong>ലെ ഫ്ലാഗുകൾ മായ്ക്കുന്നു. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + ഫ്ലാഗുകൾ %1MiB <strong>%2</strong> പാർട്ടീഷനിൽ നിർമ്മിക്കുന്നു. + + + Clearing flags on new partition. പുതിയ പാർട്ടീഷനിലെ ഫ്ലാഗുകൾ മായ്ക്കുന്നു. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%2</strong> ഫ്ലാഗുകൾ <strong>%1</strong> പാർട്ടീഷനിൽ ക്രമീകരിക്കുക. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + <strong>%3</strong> ഫ്ലാഗുകൾ %1MiB <strong>%2</strong> പാർട്ടീഷനിൽ ക്രമീകരിക്കുന്നു. + + + Setting flags <strong>%1</strong> on new partition. <strong>%1</strong> ഫ്ലാഗുകൾ പുതിയ പാർട്ടീഷനിൽ ക്രമീകരിക്കുക. - + The installer failed to set flags on partition %1. പാർട്ടീഷൻ %1ൽ ഫ്ലാഗുകൾ ക്രമീകരിക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. @@ -3229,42 +3555,42 @@ Output: SetPasswordJob - + Set password for user %1 %1 ഉപയോക്താവിനുള്ള രഹസ്യവാക്ക് ക്രമീകരിക്കുക - + Setting password for user %1. %1 ഉപയോക്താവിനുള്ള രഹസ്യവാക്ക് ക്രമീകരിക്കുന്നു. - + Bad destination system path. ലക്ഷ്യത്തിന്റെ സിസ്റ്റം പാത്ത് തെറ്റാണ്. - + rootMountPoint is %1 rootMountPoint %1 ആണ് - + Cannot disable root account. റൂട്ട് അക്കൗണ്ട് നിഷ്ക്രിയമാക്കാനായില്ല. - + passwd terminated with error code %1. passwd പിഴവ് കോഡ്‌ %1 ഓട് കൂടീ അവസാനിച്ചു. - + Cannot set password for user %1. ഉപയോക്താവ് %1നായി രഹസ്യവാക്ക് ക്രമീകരിക്കാനായില്ല. - + usermod terminated with error code %1. usermod പിഴവ് കോഡ്‌ %1 ഓട് കൂടീ അവസാനിച്ചു. @@ -3272,45 +3598,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 %1%2 എന്നതിലേക്ക് സമയപദ്ധതി ക്രമീകരിക്കുക - + Cannot access selected timezone path. തിരഞ്ഞെടുത്ത സമയപദ്ധതി പാത്ത് ലഭ്യമല്ല. - + Bad path: %1 മോശമായ പാത്ത്: %1 - + Cannot set timezone. സമയപദ്ധതി സജ്ജമാക്കാനായില്ല. - + Link creation failed, target: %1; link name: %2 കണ്ണി ഉണ്ടാക്കൽ പരാജയപ്പെട്ടു, ലക്ഷ്യം: %1, കണ്ണിയുടെ പേര്: %2 - + Cannot set timezone, സമയപദ്ധതി സജ്ജമാക്കാനായില്ല, - + Cannot open /etc/timezone for writing എഴുതുന്നതിനായി /etc/timezone തുറക്കാനായില്ല + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + സുഡോവേഴ്സ് ഫയൽ chmod ചെയ്യാൻ സാധിച്ചില്ല. + + + + Cannot create sudoers file for writing. + എഴുതുന്നതിനായി സുഡോവേഴ്സ് ഫയൽ നിർമ്മിക്കാനായില്ല. + + ShellProcessJob - + Shell Processes Job ഷെൽ പ്രക്രിയകൾ ജോലി @@ -3318,81 +3681,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - താങ്കൾ സജ്ജീകരണപ്രക്രിയ ആരംഭിച്ചതിനുശേഷം എന്ത് സംഭവിക്കും എന്നതിന്റെ അവലോകനമാണിത്. + + &OK + ശരി (&O) - - This is an overview of what will happen once you start the install procedure. - നിങ്ങൾ ഇൻസ്റ്റാൾ നടപടിക്രമങ്ങൾ ആരംഭിച്ചുകഴിഞ്ഞാൽ എന്ത് സംഭവിക്കും എന്നതിന്റെ ഒരു അവലോകനമാണിത്. + + &Yes + വേണം (&Y) - - - SummaryViewStep - - Summary - ചുരുക്കം + + &No + വേണ്ട (&N) + + + + &Cancel + റദ്ദാക്കുക (&C) + + + + &Close + അടയ്ക്കുക (&C) TrackingInstallJob - + Installation feedback ഇൻസ്റ്റളേഷനെ പറ്റിയുള്ള പ്രതികരണം - + Sending installation feedback. ഇൻസ്റ്റളേഷനെ പറ്റിയുള്ള പ്രതികരണം അയയ്ക്കുന്നു. - + Internal error in install-tracking. ഇൻസ്റ്റാൾ-പിന്തുടരുന്നതിൽ ആന്തരികമായ പിഴവ്. - + HTTP request timed out. HTTP അപേക്ഷയുടെ സമയപരിധി കഴിഞ്ഞു. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം - + Configuring machine feedback. ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം ക്രമീകരിക്കുന്നു. - - + + Error in machine feedback configuration. ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണത്തിന്റെ ക്രമീകരണത്തിൽ പിഴവ്. - + Could not configure machine feedback correctly, script error %1. ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം ശരിയായി ക്രമീകരിക്കാനായില്ല. സ്ക്രിപ്റ്റ് പിഴവ് %1. - + Could not configure machine feedback correctly, Calamares error %1. ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം ശരിയായി ക്രമീകരിക്കാനായില്ല. കലാമാരേസ് പിഴവ് %1. @@ -3400,106 +3799,97 @@ Output: TrackingPage - + Form ഫോം - + Placeholder പ്ലേസ്‌ഹോൾഡർ - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>ഇത് തിരഞ്ഞെടുക്കുന്നതിലൂടെ, നിങ്ങളുടെ ഇൻസ്റ്റാളേഷനെക്കുറിച്ച് <span style=" font-weight:600;">ഒരു വിവരവും നിങ്ങൾ അയയ്‌ക്കില്ല.</span></p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ഉപയോക്തൃ ഫീഡ്‌ബാക്കിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് ഇവിടെ ക്ലിക്കുചെയ്യുക</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - എത്ര ഉപയോക്താക്കളുണ്ട് ,ഏത് ഹാർഡ്‌വെയറിലാണ് %1 ഇൻസ്റ്റാൾ ചെയ്യുന്നത് (ചുവടെയുള്ള അവസാന രണ്ടു ഓപ്ഷനുകൾക്കൊപ്പം) കൂടാതെ നിങ്ങൾ മുന്ഗണന നൽകുന്ന പ്രയോഗങ്ങളെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുന്നതിന് %1 ഇൻസ്റ്റാൾ ട്രാക്കിംഗ് സഹായിക്കുന്നു.എന്താണ് അയയ്‌ക്കുന്നതെന്ന് കാണാൻ, ഓരോ ഭാഗത്തിനും അടുത്തുള്ള സഹായ ഐക്കണിൽ ക്ലിക്കുചെയ്യുക. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - ഇത് തിരഞ്ഞെടുക്കുന്നതിലൂടെ നിങ്ങളുടെ ഇൻസ്റ്റാളേഷനെക്കുറിച്ചും ഹാർഡ്‌വെയറിനെക്കുറിച്ചും വിവരങ്ങൾ അയയ്ക്കും. ഇൻസ്റ്റാളേഷൻ പൂർത്തിയായതിന് ശേഷം <b>ഒരു തവണ മാത്രമേ ഈ വിവരങ്ങൾ അയയ്ക്കൂ</b>. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - ഇത് തിരഞ്ഞെടുക്കുന്നതിലൂടെ താങ്കൾ <b>ഇടയ്ക്കിടെ</b>താങ്കളുടെ ഇൻസ്റ്റളേഷനെയും ഹാർഡ്‌വെയറിനെയും പ്രയോഗങ്ങളേയും പറ്റിയുള്ള വിവരങ്ങൾ %1ന് അയച്ചുകൊടുക്കും. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - ഇത് തിരഞ്ഞെടുക്കുന്നതിലൂടെ നിങ്ങളുടെ ഇൻസ്റ്റാളേഷൻ, ഹാർഡ്‌വെയർ, ആപ്ലിക്കേഷനുകൾ, ഉപയോഗ രീതികൾ എന്നിവയെക്കുറിച്ചുള്ള വിവരങ്ങൾ <b>പതിവായി</b> %1 ലേക്ക് അയയ്ക്കും. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback പ്രതികരണം + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>ഒന്നിലധികം ആളുകൾ ഈ കമ്പ്യൂട്ടർ ഉപയോഗിക്കുമെങ്കിൽ, താങ്കൾക്ക് സജ്ജീകരണത്തിന് ശേഷം നിരവധി അക്കൗണ്ടുകൾ സൃഷ്ടിക്കാം.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>ഒന്നിലധികം ആളുകൾ ഈ കമ്പ്യൂട്ടർ ഉപയോഗിക്കുമെങ്കിൽ, താങ്കൾക്ക് ഇൻസ്റ്റളേഷന് ശേഷം നിരവധി അക്കൗണ്ടുകൾ സൃഷ്ടിക്കാം.</small> + + + UsersQmlViewStep - - Your username is too long. - നിങ്ങളുടെ ഉപയോക്തൃനാമം വളരെ വലുതാണ്. - - - - Your username must start with a lowercase letter or underscore. - താങ്കളുടെ ഉപയോക്തൃനാമം ഒരു ചെറിയ അക്ഷരമോ അണ്ടർസ്കോറോ ഉപയോഗിച്ച് വേണം തുടങ്ങാൻ. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - ചെറിയ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. - - - - Only letters, numbers, underscore and hyphen are allowed. - അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. - - - - Your hostname is too short. - നിങ്ങളുടെ ഹോസ്റ്റ്നാമം വളരെ ചെറുതാണ് - - - - Your hostname is too long. - നിങ്ങളുടെ ഹോസ്റ്റ്നാമം ദൈർഘ്യമേറിയതാണ് - - - - Your passwords do not match! - നിങ്ങളുടെ പാസ്‌വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല! + + Users + ഉപയോക്താക്കൾ UsersViewStep - + Users ഉപയോക്താക്കൾ @@ -3507,65 +3897,67 @@ Output: VariantModel - + Key + Column header for key/value സൂചിക - + Value + Column header for key/value മൂല്യം VolumeGroupBaseDialog - + Create Volume Group വോള്യം ഗ്രൂപ്പ് നിർമ്മിക്കുക - + List of Physical Volumes ഫിസിക്കൽ വോള്യങ്ങളുടെ പട്ടിക - + Volume Group Name: വോള്യം ഗ്രൂപ്പിന്റെ പേര്: - + Volume Group Type: വോള്യം ഗ്രൂപ്പ് തരം: - + Physical Extent Size: ഫിസിക്കൽ എക്സ്റ്റന്റ് വലുപ്പം: - + MiB MiB - + Total Size: മൊത്തം വലുപ്പം: - + Used Size: ഉപയോഗിച്ച വലുപ്പം: - + Total Sectors: മൊത്തം സെക്ടറുകൾ: - + Quantity of LVs: LVകളുടെ അളവ്: @@ -3573,106 +3965,106 @@ Output: WelcomePage - + Form ഫോം - - + + Select application and system language അപ്ലിക്കേഷനും സിസ്റ്റം ഭാഷയും തിരഞ്ഞെടുക്കുക + &About + വിവരം (&A) + + + Open donations website സംഭാവനകളുടെ വെബ്സൈറ്റ് തുറക്കുക - + &Donate &സംഭാവന ചെയ്യുക - + Open help and support website സഹായ പിന്തുണ വെബ്സൈറ്റ് തുറക്കുക + &Support + പിന്തുണ (&S) + + + Open issues and bug-tracking website പ്രശനങ്ങൾ,ബഗ്ഗ്‌ ട്രാക്കിംഗ് വെബ്സൈറ്റ് തുറക്കുക - Open release notes website - പ്രകാശന കുറിപ്പുകളുടെ വെബ്സൈറ്റ് തുറക്കുക - - - - &Release notes - പ്രകാശന കുറിപ്പുകൾ (&R) - - - &Known issues ഇതിനകം അറിയാവുന്ന പ്രശ്നങ്ങൾ (&K) - - &Support - പിന്തുണ (&S) + + Open release notes website + പ്രകാശന കുറിപ്പുകളുടെ വെബ്സൈറ്റ് തുറക്കുക - - &About - വിവരം (&A) + + &Release notes + പ്രകാശന കുറിപ്പുകൾ (&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 ഇൻസ്റ്റാളറിലേക്ക് സ്വാഗതം</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 -നായുള്ള കലാമാരേസ് ഇൻസ്റ്റാളറിലേക്ക് സ്വാഗതം.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 -നായുള്ള കലാമാരേസ് സജ്ജീകരണപ്രക്രിയയിലേയ്ക്ക് സ്വാഗതം.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>%1 സജ്ജീകരണത്തിലേക്ക് സ്വാഗതം.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1 -നായുള്ള കലാമാരേസ് ഇൻസ്റ്റാളറിലേക്ക് സ്വാഗതം.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 ഇൻസ്റ്റാളറിലേക്ക് സ്വാഗതം</h1> + + + + %1 support + %1 പിന്തുണ + + + About %1 setup %1 സജ്ജീകരണത്തെക്കുറിച്ച് - + About %1 installer %1 ഇൻസ്റ്റാളറിനെ കുറിച്ച് - + <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. - - - %1 support - %1 പിന്തുണ - WelcomeQmlViewStep - + Welcome സ്വാഗതം @@ -3680,120 +4072,443 @@ Output: WelcomeViewStep - + Welcome സ്വാഗതം + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + ക്രമീകരണത്തിൽ പിഴവ് + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + പുറകോട്ട് + + + + calamares-sidebar + + + Show debug information + ഡീബഗ് വിവരങ്ങൾ കാണിക്കുക + + + + finishedq + + + Installation Completed + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + പുറകോട്ട് + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + കീബോഡ് മാതൃക: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + നിങ്ങളുടെ കീബോർഡ് പരിശോധിക്കുന്നതിന് ഇവിടെ ടൈപ്പുചെയ്യുക - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - - About + + LibreOffice - - Support + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. - - Known issues + + No Office Suite - - Release notes + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. - - Donate + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + release_notes + + + <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> + + + + + Back + പുറകോട്ട് + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + നിങ്ങളുടെ പേരെന്താണ് ? + + + + Your Full Name + താങ്കളുടെ മുഴുവൻ പേരു് + + + + What name do you want to use to log in? + ലോഗിൻ ചെയ്യാൻ നിങ്ങൾ ഏത് നാമം ഉപയോഗിക്കാനാണു ആഗ്രഹിക്കുന്നത്? + + + + Login Name + പ്രവേശന നാമം + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + ചെറിയ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർസ്കോർ, ഹൈഫൺ എന്നിവയേ അനുവദിച്ചിട്ടുള്ളൂ. + + + + root is not allowed as username. + + + + + What is the name of this computer? + ഈ കമ്പ്യൂട്ടറിന്റെ നാമം എന്താണ് ? + + + + Computer Name + കമ്പ്യൂട്ടറിന്റെ പേര് + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + localhost അനുവദനീയമായ ഒരു ഹോസ്റ്റ്‌നെയിം അല്ല. + + + + Choose a password to keep your account safe. + നിങ്ങളുടെ അക്കൗണ്ട് സുരക്ഷിതമായി സൂക്ഷിക്കാൻ ഒരു രഹസ്യവാക്ക് തിരഞ്ഞെടുക്കുക. + + + + Password + രഹസ്യവാക്ക് + + + + Repeat Password + രഹസ്യവാക്ക് വീണ്ടും + + + + 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. + + + + + Validate passwords quality + രഹസ്യവാക്കിന്റെ ഗുണനിലവാരം ഉറപ്പുവരുത്തുക + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + ഈ കള്ളി തിരഞ്ഞെടുക്കുമ്പോൾ, രഹസ്യവാക്കിന്റെ ബലപരിശോധന നടപ്പിലാക്കുകയും, ആയതിനാൽ താങ്കൾക്ക് ദുർബലമായ ഒരു രഹസ്യവാക്ക് ഉപയോഗിക്കാൻ സാധിക്കാതെ വരുകയും ചെയ്യും. + + + + Log in automatically without asking for the password + രഹസ്യവാക്ക് ചോദിക്കാതെ സ്വയം പ്രവേശിക്കുക + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + അക്ഷരങ്ങൾ, അക്കങ്ങൾ, ഹൈഫൻ, അണ്ടർസ്കോർ എന്നിവ മാത്രമേ അനുവദിക്കപ്പെട്ടിട്ടുള്ളൂ, കുറഞ്ഞത് രണ്ടെണ്ണമെങ്കിലും. + + + + Reuse user password as root password + ഉപയോക്തൃ രഹസ്യവാക്ക് റൂട്ട് രഹസ്യവാക്കായി പുനരുപയോഗിക്കുക + + + + Use the same password for the administrator account. + അഡ്മിനിസ്ട്രേറ്റർ അക്കൗണ്ടിനും ഇതേ രഹസ്യവാക്ക് ഉപയോഗിക്കുക. + + + + Choose a root password to keep your account safe. + താങ്കളുടെ അക്കൗണ്ട് സുരക്ഷിതമാക്കാൻ ഒരു റൂട്ട് രഹസ്യവാക്ക് തിരഞ്ഞെടുക്കുക. + + + + Root Password + റൂട്ട് രഹസ്യവാക്ക് + + + + Repeat Root Password + റൂട്ട് രഹസ്യവാക്ക് വീണ്ടും + + + + Enter the same password twice, so that it can be checked for typing errors. + ടൈപ്പിങ്ങ് പിഴവുകളില്ല എന്നുറപ്പിക്കുന്നതിനായി ഒരേ രഹസ്യവാക്ക് രണ്ട് തവണ നൽകുക. + + + + welcomeq + + + <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> + + + + + About + വിവരം + + + + Support + സഹായം + + + + Known issues + അറിയാവുന്ന പ്രശ്നങ്ങൾ + + + + Release notes + പ്രകാശനക്കുറിപ്പുകൾ + + + + Donate + സംഭാവന + + diff --git a/lang/calamares_mr.ts b/lang/calamares_mr.ts index 051572b52..b0df05ff7 100644 --- a/lang/calamares_mr.ts +++ b/lang/calamares_mr.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1 च्या मुख्य आरंभ अभिलेखामधे - + Boot Partition आरंभक विभाजन - + System Partition प्रणाली विभाजन - + Do not install a boot loader आरंभ सूचक अधिष्ठापित करु नका - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form स्वरुप - + GlobalStorage - + JobQueue - + Modules मोडयुल्स - + Type: प्रकार : - - + + none कोणतेही नाहीत - + Interface: अंतराफलक : - - Tools - साधने + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information दोषमार्जन माहिती @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install अधिष्ठापना @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done पूर्ण झाली @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 %1 %2 आज्ञा चालवला जातोय @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 क्रिया चालवला जातोय - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - &मागे - - - - &Next - &पुढे - - - - &Cancel - &रद्द करा - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - प्रणालीत बदल न करता अधिष्टापना रद्द करा. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + अधिष्ठापना अयशस्वी झाली - + + Error + त्रुटी + + + + &Yes + &होय + + + + &No + &नाही + + + + &Close + &बंद करा + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + &आता अधिष्ठापित करा + + + + Go &back + &मागे जा + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + अधिष्ठापना संपूर्ण झाली. अधिष्ठापक बंद करा. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + प्रणालीत बदल न करता अधिष्टापना रद्द करा. + + + + &Next + &पुढे + + + + &Back + &मागे + + + + &Done + &पूर्ण झाली + + + + &Cancel + &रद्द करा + + + Cancel setup? - + Cancel installation? अधिष्ठापना रद्द करायचे? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - &होय - - - - - &No - &नाही - - - - &Close - &बंद करा - - - - Continue with setup? - - - - - 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> - - - - - &Install now - &आता अधिष्ठापित करा - - - - Go &back - &मागे जा - - - - &Done - &पूर्ण झाली - - - - The installation is complete. Close the installer. - अधिष्ठापना संपूर्ण झाली. अधिष्ठापक बंद करा. - - - - Error - त्रुटी - - - - Installation Failed - अधिष्ठापना अयशस्वी झाली - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &मागे - - - - &Next - &पुढे - - - - &Cancel - &रद्द करा - - - + %1 Setup Program - + %1 Installer %1 अधिष्ठापक + + + ChangeFilesystemLabelJob - - Show debug information - दोषमार्जन माहिती दर्शवा + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form स्वरुप - - After: - नंतर : - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: सद्या : - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: + नंतर : + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>‌%1 साठी असलेल्या अधिष्ठापकमध्ये स्वागत आहे.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>‌%1 अधिष्ठापकमधे स्वागत आहे.</h1> - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + तुमचा वापरकर्तानाव खूप लांब आहे + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + तुमचा संगणकनाव खूप लहान आहे + + + + Your hostname is too long. + तुमचा संगणकनाव खूप लांब आहे + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + तुमचा परवलीशब्द जुळत नाही + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + अधिष्ठापना अयशस्वी झाली + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + सारांश + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition विभाजन निर्माण करा - - MiB - - - - - Partition &Type: - विभाजन &प्रकार : - - - - &Primary - &प्राथमिक - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + विभाजन &प्रकार : + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical तार्किक - + Primary प्राथमिक - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. %2 वर %1 हे नवीन विभाजन निर्माण करत आहे - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table विभाजन कोष्टक निर्माण करा - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form स्वरुप - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form स्वरुप - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel &रद्द करा - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form स्वरुप - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short परवलीशब्द खूप लहान आहे - + Password is too long परवलीशब्द खूप लांब आहे - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form स्वरुप - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form स्वरुप - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form स्वरुप - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form स्वरुप - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: सद्या : - + After: नंतर : - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form स्वरुप - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form स्वरुप - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements प्रणालीची आवशक्यता - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error अंतर्गत त्रूटी  - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1.  %1 या एरर कोडसहित usermod रद्द केले. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 %1/%2 हा वेळक्षेत्र निश्चित करा - + Cannot access selected timezone path. निवडलेल्या वेळक्षेत्राचा पाथ घेऊ शकत नाही. - + Bad path: %1 खराब पाथ : %1 - + Cannot set timezone. वेळक्षेत्र निश्चित करु शकत नाही - + Link creation failed, target: %1; link name: %2 दुवा निर्माण करताना अपयश, टार्गेट %1; दुवा नाव : %2 - + Cannot set timezone, वेळक्षेत्र निश्चित करु शकत नाही, - + Cannot open /etc/timezone for writing /etc/timezone लिहिण्याकरिता उघडू शकत नाही + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &होय - - - SummaryViewStep - - Summary - सारांश + + &No + &नाही + + + + &Cancel + &रद्द करा + + + + &Close + &बंद करा TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form स्वरुप - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - तुमचा वापरकर्तानाव खूप लांब आहे - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - तुमचा संगणकनाव खूप लहान आहे - - - - Your hostname is too long. - तुमचा संगणकनाव खूप लांब आहे - - - - Your passwords do not match! - तुमचा परवलीशब्द जुळत नाही + + Users + वापरकर्ते UsersViewStep - + Users वापरकर्ते @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form स्वरुप - - + + Select application and system language + &About + &विषयी + + + Open donations website - + &Donate - + Open help and support website + &Support + %1 पाठबळ + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &प्रकाशन टिपा - - - &Known issues &ज्ञात त्रुटी - - &Support - %1 पाठबळ + + Open release notes website + - - &About - &विषयी + + &Release notes + &प्रकाशन टिपा - - <h1>Welcome to the %1 installer.</h1> - <h1>‌%1 अधिष्ठापकमधे स्वागत आहे.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>‌%1 साठी असलेल्या अधिष्ठापकमध्ये स्वागत आहे.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>‌%1 साठी असलेल्या अधिष्ठापकमध्ये स्वागत आहे.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>‌%1 अधिष्ठापकमधे स्वागत आहे.</h1> + + + + %1 support + %1 पाठबळ + + + About %1 setup - + About %1 installer %1 अधिष्ठापक बद्दल - + <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. - - - %1 support - %1 पाठबळ - WelcomeQmlViewStep - + Welcome स्वागत @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome स्वागत + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + दोषमार्जन माहिती दर्शवा + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_nb.ts b/lang/calamares_nb.ts index 799aae8d3..34a1da399 100644 --- a/lang/calamares_nb.ts +++ b/lang/calamares_nb.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record til %1 - + Boot Partition Bootpartisjon - + System Partition Systempartisjon - + Do not install a boot loader Ikke installer en oppstartslaster - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage Global Lagring - + JobQueue OppgaveKø - + Modules Moduler - + Type: - - + + none - + Interface: Grensesnitt: - - Tools - Verktøy + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Debug informasjon @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Installer @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Ferdig @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Kjører kommando %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path Feil filsti til arbeidsmappe - + Working directory %1 for python job %2 is not readable. Arbeidsmappe %1 for python oppgave %2 er ikke lesbar. - + Bad main script file Ugyldig hovedskriptfil - + Main script file %1 for python job %2 is not readable. Hovedskriptfil %1 for python oppgave %2 er ikke lesbar. - + Boost.Python error in job "%1". Boost.Python feil i oppgave "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,245 +285,236 @@ Calamares::ViewManager - - &Back - &Tilbake - - - - &Next - &Neste - - - - &Cancel - &Avbryt - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Installasjon feilet - + + Error + Feil + + + + &Yes + &Ja + + + + &No + &Nei + + + + &Close + &Lukk + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + Fortsette å sette opp? + + + Continue with installation? - + 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> - + + 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> + %1 vil nå gjøre endringer på harddisken, for å installere %2. <br/><strong>Du vil ikke kunne omgjøre disse endringene.</strong> + + + &Set up now - + + &Install now + &Installer nå + + + + Go &back + Gå &tilbake + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Installasjonen er fullført. Lukk installeringsprogrammet. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &Neste + + + + &Back + &Tilbake + + + + &Done + &Ferdig + + + + &Cancel + &Avbryt + + + Cancel setup? - + Cancel installation? Avbryte installasjon? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Vil du virkelig avbryte installasjonen? Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. - - - - &Yes - &Ja - - - - - &No - &Nei - - - - &Close - &Lukk - - - - Continue with setup? - Fortsette å sette opp? - - - - 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> - %1 vil nå gjøre endringer på harddisken, for å installere %2. <br/><strong>Du vil ikke kunne omgjøre disse endringene.</strong> - - - - &Install now - &Installer nå - - - - Go &back - Gå &tilbake - - - - &Done - &Ferdig - - - - The installation is complete. Close the installer. - Installasjonen er fullført. Lukk installeringsprogrammet. - - - - Error - Feil - - - - Installation Failed - Installasjon feilet - CalamaresPython::Helper - + Unknown exception type Ukjent unntakstype - + unparseable Python error Ikke-kjørbar Python feil - + unparseable Python traceback Ikke-kjørbar Python tilbakesporing - + Unfetchable Python error. Ukjent Python feil. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Tilbake - - - - &Next - &Neste - - - - &Cancel - &Avbryt - - - + %1 Setup Program - + %1 Installer %1 Installasjonsprogram + + + ChangeFilesystemLabelJob - - Show debug information - Vis feilrettingsinformasjon + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + CheckerContainer - + Gathering system information... @@ -498,157 +522,197 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. ChoicePage - + Form Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manuell partisjonering</strong><br/>Du kan opprette eller endre størrelse på partisjoner selv. + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -656,22 +720,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - Klarte ikke å få tak i listen over midlertidige monterte disker. - - - + Cleared all temporary mounts. @@ -679,18 +738,18 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -698,100 +757,235 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Denne datamaskinen oppfyller ikke minimumskravene for installering %1.<br/> Installeringen kan ikke fortsette. <a href="#details">Detaljer..</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> Sett tastaturmodell til %1.<br/> - + Set keyboard layout to %1/%2. Sett tastaturoppsett til %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Denne datamaskinen oppfyller ikke minimumskravene for installering %1.<br/> Installeringen kan ikke fortsette. <a href="#details">Detaljer..</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Brukernavnet ditt er for langt. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Installasjon feilet + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Installasjon fullført + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + Installasjonen av %1 er fullført. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Oppsummering + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -799,100 +993,136 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. CreatePartitionDialog - + Create a Partition Opprett en partisjon - - MiB - - - - - Partition &Type: - Partisjon &Type: - - - - &Primary - &Primær - - - - E&xtended - U&tvidet - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - &Monteringspunkt: - - - + Si&ze: St&ørrelse: - + + MiB + + + + + Partition &Type: + Partisjon &Type: + + + + Primar&y + + + + + E&xtended + U&tvidet + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + &Monteringspunkt: + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical Logisk - + Primary Primær - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -900,27 +1130,27 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. CreatePartitionTableDialog - + Create Partition Table Opprett partisjonstabell - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -928,22 +1158,22 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -951,45 +1181,41 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. CreateUserJob - + Create user %1 Opprett bruker %1 - + Create user <strong>%1</strong>. - - Creating user %1. - Oppretter bruker %1. - - - - Sudoers dir is not writable. + + Preserving home directory - - Cannot create sudoers file for writing. + + + Creating user %1 - - Cannot chmod sudoers file. + + Configuring user %1 - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -997,22 +1223,22 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1020,18 +1246,18 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1039,22 +1265,22 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1062,46 +1288,46 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1110,17 +1336,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1128,7 +1354,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. DummyCppJob - + Dummy C++ Job @@ -1136,123 +1362,167 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: &Monteringspunkt: - + Si&ze: St&ørrelse: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1260,93 +1530,81 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. FinishedPage - + Form Form - + &Restart now &Start på nytt nå - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Innnstallasjonen mislyktes</h1><br/>%1 har ikke blitt installert på datamaskinen din.<br/>Feilmeldingen var: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish + + + FinishedViewStep - - Setup Complete + + Finish - - - Installation Complete - Installasjon fullført - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - Installasjonen av %1 er fullført. - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formaterer partisjon %1 med filsystem %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1354,72 +1612,72 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source er koblet til en strømkilde - + The system is not plugged in to a power source. Systemet er ikke koblet til en strømkilde. - + is connected to the Internet er tilkoblet Internett - + The system is not connected to the Internet. Systemet er ikke tilkoblet Internett. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1427,7 +1685,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. HostInfoJob - + Collecting information about your machine. @@ -1435,25 +1693,25 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1461,7 +1719,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1469,7 +1727,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. InitramfsJob - + Creating initramfs. @@ -1477,17 +1735,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1495,28 +1753,15 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Sett tastaturmodell til %1.<br/> - - - - Set keyboard layout to %1/%2. - Sett tastaturoppsett til %1/%2. - - KeyboardQmlViewStep - + Keyboard Tastatur @@ -1524,7 +1769,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. KeyboardViewStep - + Keyboard Tastatur @@ -1532,65 +1777,88 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel &Avbryt - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1598,7 +1866,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. LicenseViewStep - + License Lisens @@ -1606,109 +1874,102 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>fra %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikkdriver</strong><br/><font color="Grey">fra %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 nettlesertillegg</strong><br/><font color="Grey">fra %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">fra %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... &Endre... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location Plassering + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Plassering @@ -1716,35 +1977,35 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1752,116 +2013,130 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. MachineIdJob - + Generate machine-id. Generer maskin-ID. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1869,7 +2144,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. NotesQmlViewStep - + Notes @@ -1877,17 +2152,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1895,260 +2170,317 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Passordet er for kort - + Password is too long Passordet er for langt - + Password is too weak Passordet er for svakt - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one Passordet er det samme som det gamle - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one Passordet likner for mye på det gamle - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - Passordet inneholder mindre enn %1 store bokstaver - - - + The password contains too few uppercase letters Passordet inneholder for få store bokstaver - - - The password contains less than %1 lowercase letters - Passordet inneholder mindre enn %1 små bokstaver + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters Passordet inneholder for få små bokstaver - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short Passordet er for kort - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively Passordet inneholder for mange like tegn etter hverandre - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type Innstillingen er ikke av type streng - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error Ukjent feil - + Password is empty @@ -2156,40 +2488,48 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PackageChooserPage - + Form Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2197,12 +2537,12 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PackageModel - + Name - + Description @@ -2210,17 +2550,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. Page_Keyboard - + Form Form - + Keyboard Model: Tastaturmodell: - + Type here to test your keyboard Skriv her for å teste tastaturet ditt @@ -2228,96 +2568,96 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. Page_UserSetup - + Form Form - + What is your name? Hva heter du? - - What name do you want to use to log in? - Hvilket navn vil du bruke for å logge inn? - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + Hvilket navn vil du bruke for å logge inn? + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2325,42 +2665,42 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2369,34 +2709,39 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2404,77 +2749,77 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PartitionPage - + Form Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2482,117 +2827,107 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2600,13 +2935,13 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2614,17 +2949,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PlasmaLnfPage - + Form Form - + 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. - + 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. @@ -2632,7 +2967,7 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PlasmaLnfViewStep - + Look-and-Feel @@ -2640,17 +2975,17 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2658,65 +2993,65 @@ Installasjonsprogrammet vil avsluttes og alle endringer vil gå tapt. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Ugyldige parametere for prosessens oppgavekall - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2724,89 +3059,94 @@ Output: QObject - - Default Keyboard Model - Standard tastaturmodell - - - - - Default - Standard - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + Standard + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2814,18 +3154,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2833,143 +3173,158 @@ Output: ReplaceWidget - + Form Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. %1 kan ikke bli installert på denne partisjonen. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2977,22 +3332,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -3000,7 +3355,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3008,18 +3363,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3027,53 +3382,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements Systemkrav - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Denne datamaskinen oppfyller ikke minimumskravene for installering %1.<br/> Installeringen kan ikke fortsette. <a href="#details">Detaljer..</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3081,29 +3408,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error Intern feil - - + + Cannot write hostname to target system @@ -3111,29 +3438,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3141,82 +3468,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3224,42 +3551,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3267,45 +3594,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing Klarte ikke åpne /etc/timezone for skriving + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3313,81 +3677,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &Ja - - - SummaryViewStep - - Summary - Oppsummering + + &No + &Nei + + + + &Cancel + &Avbryt + + + + &Close + &Lukk TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3395,106 +3795,97 @@ Output: TrackingPage - + Form Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Brukernavnet ditt er for langt. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! - + + Users + Brukere UsersViewStep - + Users Brukere @@ -3502,65 +3893,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3568,106 +3961,106 @@ Output: WelcomePage - + Form Form - - + + Select application and system language + &About + &Om + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About - &Om - - - - <h1>Welcome to the %1 installer.</h1> + + &Release notes - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome Velkommen @@ -3675,31 +4068,157 @@ Output: WelcomeViewStep - + Welcome Velkommen + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Vis feilrettingsinformasjon + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3707,86 +4226,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Tastaturmodell: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Skriv her for å teste tastaturet ditt - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Hva heter du? + + + + Your Full Name + + + + + What name do you want to use to log in? + Hvilket navn vil du bruke for å logge inn? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_ne_NP.ts b/lang/calamares_ne_NP.ts index 38987fe4c..ff3da70e3 100644 --- a/lang/calamares_ne_NP.ts +++ b/lang/calamares_ne_NP.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. यो सिस्टमको <strong>बूट वातावरण</strong>।<br><br>पुराना x86 सिस्टमहरुले मात्र <strong>BIOS</strong> को समर्थन गर्छन्।<br> - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + बूट लोडर install नगर्ने - + %1 (%2) @@ -50,66 +58,86 @@ Calamares::BlankViewStep - + Blank Page - + खाली पृष्ठ Calamares::DebugWindow - + Form - + फारम - + GlobalStorage - + JobQueue - + Modules - + Type: - + प्रकार - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,33 +171,33 @@ Calamares::JobThread - + Done - + सकियो Calamares::NamedJob - + Example job (%1) - + उदाहरण कार्य (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + लोड हुँदैछ ... - + QML Step <i>%1</i>. - + Loading failed. - + लोड भएन । Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. + सेटअप सकियो । सेटअप प्रोग्राम बन्द गर्नु होस  + + + + The installation is complete. Close the installer. - + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - + फारम - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + बूट लोडरको स्थान + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + swap छैन + + + + Reuse Swap + swap पुनः प्रयोग गर्नुहोस + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + %1 को लागि Calamares Setup Programमा स्वागत छ । + + + + <h1>Welcome to %1 setup</h1> + %1 को Setupमा स्वागत छ । + + + + <h1>Welcome to the Calamares installer for %1</h1> + %1 को लागि Calamares Installerमा स्वागत छ । + + + + <h1>Welcome to the %1 installer</h1> + %1 को Installerमा स्वागत छ । + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + पासवर्डहरू मिलेन ।  + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + फारम - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + फारम - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + फारम - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + फारम - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + फारम - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + फारम - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + फारम - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + फारम - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form - + फारम - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form - + फारम - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3960,106 @@ Output: WelcomePage - + Form - + फारम - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3674,31 +4067,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4225,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_nl.ts b/lang/calamares_nl.ts index 997de62ab..dff6f478d 100644 --- a/lang/calamares_nl.ts +++ b/lang/calamares_nl.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Beheer auto-mount instellingen + + BootInfoWidget - + 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. De <strong>opstartomgeving</strong> van dit systeem.<br><br>Oudere x86-systemen ondersteunen enkel <strong>BIOS</strong>.<br>Moderne systemen gebruiken meestal <strong>EFI</strong>, maar kunnen ook als BIOS verschijnen als in compatibiliteitsmodus opgestart werd. - + 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. Dit systeem werd opgestart met een <strong>EFI</strong>-opstartomgeving.<br><br>Om het opstarten vanaf een EFI-omgeving te configureren moet dit installatieprogramma een bootloader instellen, zoals <strong>GRUB</strong> of <strong>systemd-boot</strong> op een <strong>EFI-systeempartitie</strong>. Dit gebeurt automatisch, tenzij je voor manueel partitioneren kiest, waar je het moet aanvinken of het zelf aanmaken. - + 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. Dit systeem werd opgestart met een <strong>BIOS</strong>-opstartomgeving.<br><br>Om het opstarten vanaf een BIOS-omgeving te configureren moet dit installatieprogramma een bootloader installeren, zoals <strong>GRUB</strong>, ofwel op het begin van een partitie ofwel op de <strong>Master Boot Record</strong> bij het begin van de partitietabel (bij voorkeur). Dit gebeurt automatisch, tenzij je voor manueel partitioneren kiest, waar je het zelf moet aanmaken. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record van %1 - + Boot Partition Bootpartitie - + System Partition Systeempartitie - + Do not install a boot loader Geen bootloader installeren - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Lege pagina @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulier - + GlobalStorage Globale Opslag - + JobQueue Wachtrij - + Modules Modules - + Type: Type: - - + + none geen - + Interface: Interface: - - Tools - Hulpmiddelen + + Crashes Calamares, so that Dr. Konqui can look at it. + Laat Calamares crashen, zodat Dr. Konqui er naar kan kijken. - + + Reloads the stylesheet from the branding directory. + Laadt het stylesheet van de fabrikantsmap opnieuw. + + + + Uploads the session log to the configured pastebin. + Uploads de sessielogboeken naar de geconfigureerde pastebin. + + + + Send Session Log + Verstuur Sessielogboeken + + + Reload Stylesheet Stylesheet opnieuw inlezen. - - Widget Tree - + + Displays the tree of widget names in the log (for stylesheet debugging). + Weergeeft de boom van widgetnamen in het logboek (voor stylesheet debuggen). - + + Widget Tree + Widget-boom + + + Debug information Debug informatie @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Inrichten - + Install Installeer @@ -130,20 +158,20 @@ Calamares::FailJob - + Job failed (%1) - + Taak gefaald (%1) - + Programmed job failure was explicitly requested. - + Geprogrameerde taakfout was expliciet aangevraagd. Calamares::JobThread - + Done Gereed @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - + Voorbeeldstaak (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + '%1' uitvoeren in doelsysteem. - + Run command '%1'. - + '%1' uitvoeren. - + Running command %1 %2 Uitvoeren van opdracht %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Bewerking %1 uitvoeren. - + Bad working directory path Ongeldig pad voor huidige map - + Working directory %1 for python job %2 is not readable. Werkmap %1 voor python taak %2 onleesbaar. - + Bad main script file Onjuist hoofdscriptbestand - + Main script file %1 for python job %2 is not readable. Hoofdscriptbestand %1 voor python taak %2 onleesbaar. - + Boost.Python error in job "%1". Boost.Python fout in taak "%1". @@ -210,287 +238,288 @@ Calamares::QmlViewStep - + Loading ... - + Laden... - + QML Step <i>%1</i>. QML stap <i>%1</i>. - + Loading failed. - + Laden mislukt. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Vereistencontrole voor module <i>%1</i> is voltooid. + - + Waiting for %n module(s). - - - + + Wachten op %n module(s). + Wachten op %n module(s). - + (%n second(s)) - - - + + (%n seconde) + (%n seconde(n)) - + System-requirements checking is complete. - + Systeemvereistencontrole is voltooid. Calamares::ViewManager - - &Back - &Terug - - - - &Next - &Volgende - - - - &Cancel - &Afbreken - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Installatie afbreken zonder aanpassingen aan het systeem. - - - + Setup Failed - + Voorbereiding mislukt - - Would you like to paste the install log to the web? - + + Installation Failed + Installatie Mislukt - + + Error + Fout + + + + &Yes + &ja + + + + &No + &Nee + + + + &Close + &Sluiten + + + Install Log Paste URL - + URL voor het verzenden van het installatielogboek - + The upload was unsuccessful. No web-paste was done. - + Het uploaden is mislukt. Web-plakken niet gedaan. - + + Install log posted to + +%1 + +Link copied to clipboard + Installatielogboek geposte naar: + +%1 + +Link gekopieerd naar klembord + + + Calamares Initialization Failed Calamares Initialisatie mislukt - + %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. %1 kan niet worden geïnstalleerd. Calamares kon niet alle geconfigureerde modules laden. Dit is een probleem met hoe Calamares wordt gebruikt door de distributie. - + <br/>The following modules could not be loaded: <br/>The volgende modules konden niet worden geladen: - + + Continue with setup? + Doorgaan met installatie? + + + Continue with installation? - + Doorgaan met installatie? - + 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> - + Het %1 voorbereidingsprogramma zal nu aanpassingen maken aan je schijf om %2 te installeren.<br/><strong>Deze veranderingen kunnen niet ongedaan gemaakt worden.</strong> - + + 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> + Het %1 installatieprogramma zal nu aanpassingen maken aan je schijf om %2 te installeren.<br/><strong>Deze veranderingen kunnen niet ongedaan gemaakt worden.</strong> + + + &Set up now Nu &Inrichten - + + &Install now + Nu &installeren + + + + Go &back + Ga &terug + + + &Set up &Inrichten - + &Install &Installeer - + Setup is complete. Close the setup program. - + De voorbereiding is voltooid. Sluit het voorbereidingsprogramma. - + + The installation is complete. Close the installer. + De installatie is voltooid. Sluit het installatie-programma. + + + + Cancel setup without changing the system. + Voorbereiding afbreken zonder aanpassingen aan het systeem. + + + + Cancel installation without changing the system. + Installatie afbreken zonder aanpassingen aan het systeem. + + + + &Next + &Volgende + + + + &Back + &Terug + + + + &Done + Voltooi&d + + + + &Cancel + &Afbreken + + + Cancel setup? - + Voorbereiding afbreken? - + Cancel installation? Installatie afbreken? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Wil je het huidige voorbereidingsproces echt afbreken? +Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Wil je het huidige installatieproces echt afbreken? Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. - - - - &Yes - &ja - - - - - &No - &Nee - - - - &Close - &Sluiten - - - - Continue with setup? - Doorgaan met installatie? - - - - 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> - Het %1 installatieprogramma zal nu aanpassingen maken aan je schijf om %2 te installeren.<br/><strong>Deze veranderingen kunnen niet ongedaan gemaakt worden.</strong> - - - - &Install now - Nu &installeren - - - - Go &back - Ga &terug - - - - &Done - Voltooi&d - - - - The installation is complete. Close the installer. - De installatie is voltooid. Sluit het installatie-programma. - - - - Error - Fout - - - - Installation Failed - Installatie Mislukt - CalamaresPython::Helper - + Unknown exception type Onbekend uitzonderingstype - + unparseable Python error onuitvoerbare Python fout - + unparseable Python traceback onuitvoerbare Python traceback - + Unfetchable Python error. Onbekende Python fout. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Terug - - - - &Next - &Volgende - - - - &Cancel - &Afbreken - - - + %1 Setup Program - + %1 Voorbereidingsprogramma - + %1 Installer %1 Installatieprogramma + + + ChangeFilesystemLabelJob - - Show debug information - Toon debug informatie + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Het installatieprogramma kon de partitietabel op schijf '%1' niet bijwerken . CheckerContainer - + Gathering system information... Systeeminformatie verzamelen... @@ -498,157 +527,197 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. ChoicePage - + Form Formulier - - After: - Na: - - - - Boot loader location: - Bootloader locatie: - - - + Select storage de&vice: Selecteer &opslagmedium: - - - - + + + + Current: Huidig: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Na: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Handmatig partitioneren</strong><br/>Je maakt of wijzigt zelf de partities. + + + Reuse %1 as home partition for %2. Hergebruik %1 als home-partitie voor %2 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecteer een partitie om te verkleinen, en sleep vervolgens de onderste balk om het formaat te wijzigen</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + %1 zal verkleind worden tot %2MiB en een nieuwe %3MiB partitie zal worden aangemaakt voor %4. - + + Boot loader location: + Bootloader locatie: + + + <strong>Select a partition to install on</strong> <strong>Selecteer een partitie om op te installeren</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Er werd geen EFI systeempartitie gevonden op dit systeem. Gelieve terug te gaan en manueel te partitioneren om %1 in te stellen. - + The EFI system partition at %1 will be used for starting %2. De EFI systeempartitie op %1 zal gebruikt worden om %2 te starten. - + EFI system partition: EFI systeempartitie: - + 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. Dit opslagmedium lijkt geen besturingssysteem te bevatten. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Wis schijf</strong><br/>Dit zal alle huidige gegevens op de geselecteerd opslagmedium <font color="red">verwijderen</font>. - - 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. - Dit opslagmedium bevat %1. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - - - - No Swap - Geen wisselgeheugen - - - - Reuse Swap - Wisselgeheugen hergebruiken - - - - Swap (no Hibernate) - Wisselgeheugen (geen Sluimerstand) - - - - Swap (with Hibernate) - Wisselgeheugen ( met Sluimerstand) - - - - Swap to file - Wisselgeheugen naar bestand - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installeer ernaast</strong><br/>Het installatieprogramma zal een partitie verkleinen om plaats te maken voor %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Vervang een partitie</strong><br/>Vervangt een partitie met %1. - + + 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. + Dit opslagmedium bevat %1. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. + + + 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. Dit opslagmedium bevat reeds een besturingssysteem. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. - + 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. Dit opslagmedium bevat meerdere besturingssystemen. Wat wil je doen?<br/>Je zal jouw keuzes kunnen nazien en bevestigen voordat er iets aan het opslagmedium wordt veranderd. + + + 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/> + Dit opslagmedium bevat al een besturingssysteem, maar de partitietabel <strong>%1</strong> is anders dan het benodigde <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Dit opslagmedium heeft een van de partities <strong>gemount</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Dit opslagmedium maakt deel uit van een <strong>inactieve RAID</strong> apparaat. + + + + No Swap + Geen wisselgeheugen + + + + Reuse Swap + Wisselgeheugen hergebruiken + + + + Swap (no Hibernate) + Wisselgeheugen (geen Sluimerstand) + + + + Swap (with Hibernate) + Wisselgeheugen ( met Sluimerstand) + + + + Swap to file + Wisselgeheugen naar bestand + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Geef aankoppelpunten vrij voor partitiebewerkingen op %1 - + Clearing mounts for partitioning operations on %1. Aankoppelpunten vrijgeven voor partitiebewerkingen op %1. - + Cleared all mounts for %1 Alle aankoppelpunten voor %1 zijn vrijgegeven @@ -656,22 +725,17 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. ClearTempMountsJob - + Clear all temporary mounts. Geef alle tijdelijke aankoppelpunten vrij. - + Clearing all temporary mounts. Alle tijdelijke aankoppelpunten vrijgeven. - - Cannot get list of temporary mounts. - Kan geen lijst van tijdelijke aankoppelpunten verkrijgen. - - - + Cleared all temporary mounts. Alle tijdelijke aankoppelpunten zijn vrijgegeven. @@ -679,18 +743,18 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. CommandList - - + + Could not run command. Kon de opdracht niet uitvoeren. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. De opdracht loopt in de gastomgeving en moet het root pad weten, maar rootMountPoint is niet gedefinieerd. - + The command needs to know the user's name, but no username is defined. De opdracht moet de naam van de gebruiker weten, maar de gebruikersnaam is niet gedefinieerd. @@ -698,100 +762,235 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Deze computer voldoet niet aan de minimumvereisten om %1 te installeren.<br/>De installatie kan niet doorgaan. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 te installeren.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. - - - - This program will ask you some questions and set up %2 on your computer. - Dit programma stelt je enkele vragen en installeert %2 op jouw computer. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Welkom in het Calamares installatieprogramma voor %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Welkom in het %1 installatieprogramma.</h1> - - - + Set keyboard model to %1.<br/> Instellen toetsenbord model naar %1.<br/> - + Set keyboard layout to %1/%2. Instellen toetsenbord lay-out naar %1/%2. - + + Set timezone to %1/%2. + Zet tijdzone naar %1/%2. + + + The system language will be set to %1. De taal van het systeem zal worden ingesteld op %1. - + The numbers and dates locale will be set to %1. De getal- en datumnotatie worden ingesteld op %1. - - Set timezone to %1/%2.<br/> - Instellen tijdzone naar %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Netwerkinstallatie. (Uitgeschakeld: Ongeldige configuratie) - + Network Installation. (Disabled: Received invalid groups data) Netwerkinstallatie. (Uitgeschakeld: ongeldige gegevens over groepen) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) + Netwerkinstallatie. (Uitgeschakeld: Interne Fout) + + + + Network Installation. (Disabled: No package list) + Netwerkinstallatie. (Uitgeschakeld: Ontbrekende pakketlijst) + + + + Package selection + Pakketkeuze + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Netwerkinstallatie. (Uitgeschakeld: kon de pakketlijsten niet binnenhalen, controleer de netwerkconnectie) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Deze computer voldoet niet aan de minimumvereisten om %1 te installeren.<br/>De voorbereiding kan niet doorgaan. <a href="#details">Details...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Deze computer voldoet niet aan de minimumvereisten om %1 te installeren.<br/>De installatie kan niet doorgaan. <a href="#details">Details...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 voor te bereiden.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 te installeren.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. + + + + This program will ask you some questions and set up %2 on your computer. + Dit programma stelt je enkele vragen en installeert %2 op jouw computer. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Welkom in het Calamares voorbereidingsprogramma voor %1.</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Welkom in het %1 voorbereidingsprogramma.</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Welkom in het Calamares installatieprogramma voor %1.</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Welkom in het %1 installatieprogramma.</h1> + + + + Your username is too long. + De gebruikersnaam is te lang. + + + + '%1' is not allowed as username. + De gebruikersnaam '%1' is niet toegestaan. + + + + Your username must start with a lowercase letter or underscore. + Je gebruikersnaam moet beginnen met een kleine letter of laag streepje. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Alleen kleine letters, nummerse en (laag) streepjes zijn toegestaan. + + + + Your hostname is too short. + De hostnaam is te kort. + + + + Your hostname is too long. + De hostnaam is te lang. + + + + '%1' is not allowed as hostname. + De hostnaam '%1' is niet toegestaan. + + + + Only letters, numbers, underscore and hyphen are allowed. + Alleen letters, nummers en (laag) streepjes zijn toegestaan. + + + + Your passwords do not match! + Je wachtwoorden komen niet overeen! + + + + OK! - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Netwerkinstallatie. (Uitgeschakeld: kon de pakketlijsten niet binnenhalen, controleer de netwerkconnectie) + + Setup Failed + Voorbereiding mislukt + + + + Installation Failed + Installatie Mislukt + + + + The setup of %1 did not complete successfully. + De voorbereiding van %1 is niet met succes voltooid. + + + + The installation of %1 did not complete successfully. + De installatie van %1 is niet met succes voltooid. + + + + Setup Complete + Voorbereiden voltooid + + + + Installation Complete + Installatie Afgerond. + + + + The setup of %1 is complete. + De voorbereiden van %1 is voltooid. + + + + The installation of %1 is complete. + De installatie van %1 is afgerond. + + + + Package Selection + Pakketselectie + + + + Please pick a product from the list. The selected product will be installed. + Kies een product van de lijst. Het geselecteerde product zal worden geïnstalleerd. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Samenvatting + + + + This is an overview of what will happen once you start the setup procedure. + Dit is een overzicht van wat zal gebeuren wanneer je de installatieprocedure start. + + + + This is an overview of what will happen once you start the install procedure. + Dit is een overzicht van wat zal gebeuren wanneer je de installatieprocedure start. ContextualProcessJob - + Contextual Processes Job Contextuele processen Taak @@ -799,100 +998,136 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. CreatePartitionDialog - + Create a Partition Maak partitie - - MiB - MiB - - - - Partition &Type: - Partitie&type: - - - - &Primary - &Primair - - - - E&xtended - &Uitgebreid - - - - Fi&le System: - &Bestandssysteem - - - - LVM LV name - LVM LV naam - - - - Flags: - Vlaggen: - - - - &Mount Point: - Aan&koppelpunt - - - + Si&ze: &Grootte: - + + MiB + MiB + + + + Partition &Type: + Partitie&type: + + + + Primar&y + + + + + E&xtended + &Uitgebreid + + + + Fi&le System: + &Bestandssysteem + + + + LVM LV name + LVM LV naam + + + + &Mount Point: + Aan&koppelpunt + + + + Flags: + Vlaggen: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt &Versleutelen - + Logical Logisch - + Primary Primair - + GPT GPT - + Mountpoint already in use. Please select another one. Aankoppelpunt reeds in gebruik. Gelieve een andere te kiezen. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Maak nieuwe %1MiB partitie aan op %3 (%2) met onderdelen %4. + + + + Create new %1MiB partition on %3 (%2). + Maak nieuwe %1MiB partitie aan op %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - + Maak nieuwe %2MiB partitie aan op %4 (%3) met bestandsysteem %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Maak een nieuwe <strong>%1MiB</strong> partitie aan op <strong>%3</strong> (%2) met onderdelen <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Maak een nieuwe <strong>%1MiB</strong> partitie aan op <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + Maak een nieuwe <strong>%2MiB</strong> partitie aan op <strong>%4</strong> (%3) met bestandsysteem <strong>%1</strong>. - + + Creating new %1 partition on %2. Nieuwe %1 partitie aanmaken op %2. - + The installer failed to create partition on disk '%1'. Het installatieprogramma kon geen partitie aanmaken op schijf '%1'. @@ -900,27 +1135,27 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. CreatePartitionTableDialog - + Create Partition Table Maak Partitietabel - + Creating a new partition table will delete all existing data on the disk. Een nieuwe partitietabel aanmaken zal alle bestaande gegevens op de schijf wissen. - + What kind of partition table do you want to create? Welk type partitietabel wens je aan te maken? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partitietabel (GPT) @@ -928,22 +1163,22 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. CreatePartitionTableJob - + Create new %1 partition table on %2. Maak een nieuwe %1 partitietabel aan op %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Maak een nieuwe <strong>%1</strong> partitietabel aan op <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Nieuwe %1 partitietabel aanmaken op %2. - + The installer failed to create a partition table on %1. Het installatieprogramma kon geen partitietabel aanmaken op %1. @@ -951,68 +1186,64 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. CreateUserJob - + Create user %1 Maak gebruiker %1 - + Create user <strong>%1</strong>. Maak gebruiker <strong>%1</strong> - - Creating user %1. - Gebruiker %1 aanmaken. + + Preserving home directory + Gebruikersmap wordt behouden - - Sudoers dir is not writable. - Sudoers map is niet schrijfbaar. + + + Creating user %1 + Gebruiker %1 aanmaken - - Cannot create sudoers file for writing. - Kan het bestand sudoers niet aanmaken. + + Configuring user %1 + Gebruiker %1 instellen - - Cannot chmod sudoers file. - chmod sudoers gefaald. - - - - Cannot open groups file for reading. - Kan het bestand groups niet lezen. + + Setting file permissions + Bestands-permissies worden ingesteld CreateVolumeGroupDialog - + Create Volume Group - + Volumegroep aanmaken CreateVolumeGroupJob - + Create new volume group named %1. Maak nieuw volumegroep aan met de naam %1. - + Create new volume group named <strong>%1</strong>. Maak nieuwe volumegroep aan met de naam <strong>%1</strong>. - + Creating new volume group named %1. Aanmaken van volumegroep met de naam %1. - + The installer failed to create a volume group named '%1'. Het installatieprogramma kon de volumegroep met de naam '%1' niet aanmaken. @@ -1020,18 +1251,18 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Volumegroep met de naam %1 uitschakelen. - + Deactivate volume group named <strong>%1</strong>. Volumegroep met de naam <strong>%1</strong> uitschakelen. - + The installer failed to deactivate a volume group named %1. Het installatieprogramma kon de volumegroep met de naam %1 niet uitschakelen. @@ -1039,22 +1270,22 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. DeletePartitionJob - + Delete partition %1. Verwijder partitie %1. - + Delete partition <strong>%1</strong>. Verwijder partitie <strong>%1</strong>. - + Deleting partition %1. Partitie %1 verwijderen. - + The installer failed to delete partition %1. Het installatieprogramma kon partitie %1 niet verwijderen. @@ -1062,46 +1293,46 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. DeviceInfoWidget - - 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. - Het type van <strong>partitietabel</strong> op het geselecteerde opslagmedium.<br><br>Om het type partitietabel te wijzigen, dien je deze te verwijderen en opnieuw aan te maken, wat alle gegevens op het opslagmedium vernietigt.<br>Het installatieprogramma zal de huidige partitietabel behouden tenzij je expliciet anders verkiest.<br>Bij twijfel wordt aangeraden GPT te gebruiken op moderne systemen. - - - + This device has a <strong>%1</strong> partition table. Dit apparaat heeft een <strong>%1</strong> partitietabel. - + 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. Dit is een <strong>loop</strong> apparaat.<br><br>Dit is een pseudo-apparaat zonder partitietabel en maakt een bestand beschikbaar als blokapparaat. Dergelijke configuratie bevat gewoonlijk slechts een enkel bestandssysteem. - + 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. Het installatieprogramma <strong>kon geen partitietabel vinden</strong> op het geselecteerde opslagmedium.<br><br>Dit apparaat heeft ofwel geen partitietabel, ofwel is deze ongeldig of van een onbekend type.<br>Het installatieprogramma kan een nieuwe partitietabel aanmaken, ofwel automatisch, ofwel via de manuele partitioneringspagina. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Dit is de aanbevolen partitietabel voor moderne systemen die starten vanaf een <strong>EFI</strong> opstartomgeving. - + <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. <br><br>Dit type partitietabel is enkel aan te raden op oudere systemen die opstarten vanaf een <strong>BIOS</strong>-opstartomgeving. GPT is aan te raden in de meeste andere gevallen.<br><br><strong>Opgelet:</strong> De MBR-partitietabel is een verouderde standaard uit de tijd van MS-DOS.<br>Slechts 4 <em>primaire</em> partities kunnen aangemaakt worden, en van deze 4 kan één een <em>uitgebreide</em> partitie zijn, die op zijn beurt meerdere <em>logische</em> partities kan bevatten. + + + 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. + Het type van <strong>partitietabel</strong> op het geselecteerde opslagmedium.<br><br>Om het type partitietabel te wijzigen, dien je deze te verwijderen en opnieuw aan te maken, wat alle gegevens op het opslagmedium vernietigt.<br>Het installatieprogramma zal de huidige partitietabel behouden tenzij je expliciet anders verkiest.<br>Bij twijfel wordt aangeraden GPT te gebruiken op moderne systemen. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1341,17 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Schrijf LUKS configuratie voor Dracut op %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Schrijven van LUKS configuratie voor Dracut overgeslaan: "/" partitie is niet versleuteld - + Failed to open %1 Openen van %1 mislukt @@ -1128,7 +1359,7 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. DummyCppJob - + Dummy C++ Job C++ schijnopdracht @@ -1136,123 +1367,167 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. EditExistingPartitionDialog - + Edit Existing Partition Bestaande Partitie Aanpassen - - Content: - Inhoud: + + Con&tent: + - + &Keep &Behouden - + Format Formatteren - + Warning: Formatting the partition will erase all existing data. Opgelet: Een partitie formatteren zal alle bestaande gegevens wissen. - + &Mount Point: Aan&koppelpunt: - + Si&ze: &Grootte: - + MiB MiB - + Fi&le System: Bestands&systeem - + Flags: Vlaggen: - - Mountpoint already in use. Please select another one. - Aankoppelpunt reeds in gebruik. Gelieve een andere te kiezen. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formulier - + En&crypt system En&crypteer systeem - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Wachtwoordzin - + Confirm passphrase Bevestig wachtwoordzin - + + Please enter the same passphrase in both boxes. Gelieve in beide velden dezelfde wachtwoordzin in te vullen. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Wil je het installatielogboek plakken naar het web? + + FillGlobalStorageJob - + Set partition information Instellen partitie-informatie - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Installeer %1 op <strong>nieuwe</strong> %2 systeempartitie met features <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Installeer %1 op <strong>nieuwe</strong> %2 systeempartitie. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Maak <strong>nieuwe</strong> %2 partitie met aankoppelpunt <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>Nieuwe</strong> %2 partitie voorbereiden met aankoppelpunt <strong>%1</strong> en features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Maak <strong>nieuwe</strong> %2 partitie met aankoppelpunt <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Installeer %2 op %3 systeempartitie <strong>%1</strong> met features <em>%4</em> + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Stel %3 partitie <strong>%1</strong> in met aankoppelpunt <strong>%2</strong> met features <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Stel %3 partitie <strong>%1</strong> in met aankoppelpunt <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Installeer %2 op %3 systeempartitie <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Stel %3 partitie <strong>%1</strong> in met aankoppelpunt <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Installeer bootloader op <strong>%1</strong>. - + Setting up mount points. Aankoppelpunten instellen. @@ -1260,93 +1535,81 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. FinishedPage - + Form Formulier - + &Restart now &Nu herstarten - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <h1>Klaar.</h1><br/>%1 is op je computer geïnstalleerd.<br/>Je mag nu beginnen met het gebruiken van je nieuwe systeem. - + <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> - + <html><head/><body><p>Wanneer dit vakje aangevinkt is, zal het systeem herstarten van zodra je op <span style=" font-style:italic;">Voltooid</span> klikt, of het voorbereidingsprogramma afsluit.</p></body></html> - + <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. <h1>Klaar.</h1><br/>%1 is op je computer geïnstalleerd.<br/>Je mag je nieuwe systeem nu herstarten of de %2 Live omgeving blijven gebruiken. - + <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> - + <html><head/><body><p>Wanneer dit vakje aangevinkt is, zal het systeem herstarten van zodra je op <span style=" font-style:italic;">Voltooid</span> klikt, of het installatieprogramma afsluit.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installatie Mislukt</h1><br/>%1 werd niet op de computer geïnstalleerd. <br/>De foutboodschap was: %2 - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installatie Mislukt</h1><br/>%1 werd niet op de computer geïnstalleerd. <br/>De foutboodschap was: %2 - FinishedViewStep + FinishedQmlViewStep - + Finish Beëindigen + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Installatie Afgerond. - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - De installatie van %1 is afgerond. + + Finish + Beëindigen FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Formateer partitie %1 (bestandssysteem: %2, grootte: %3 MiB) op %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatteer <strong>%3MiB</strong> partitie <strong>%1</strong> met bestandsysteem <strong>%2</strong>. - + Formatting partition %1 with file system %2. Partitie %1 formatteren met bestandssysteem %2. - + The installer failed to format partition %1 on disk '%2'. Installatieprogramma heeft gefaald om partitie %1 op schijf %2 te formateren. @@ -1354,140 +1617,140 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. GeneralRequirements - + has at least %1 GiB available drive space - + tenminste %1 GiB vrije schijfruimte heeft - + There is not enough drive space. At least %1 GiB is required. Er is niet genoeg schijfruimte. Tenminste %1 GiB is vereist. - + has at least %1 GiB working memory - + tenminste %1 GiB werkgeheugen heeft - + The system does not have enough working memory. At least %1 GiB is required. Het systeem heeft niet genoeg intern geheugen. Tenminste %1 GiB is vereist. - + is plugged in to a power source aangesloten is op netstroom - + The system is not plugged in to a power source. Dit systeem is niet aangesloten op netstroom. - + is connected to the Internet verbonden is met het Internet - + The system is not connected to the Internet. Dit systeem is niet verbonden met het Internet. - + is running the installer as an administrator (root) - + is het installatieprogramma aan het uitvoeren als administrator (root) - + The setup program is not running with administrator rights. - + Het voorbereidingsprogramma draait zonder administratorrechten. - + The installer is not running with administrator rights. Het installatieprogramma draait zonder administratorrechten. - + has a screen large enough to show the whole installer - + heeft een scherm groot genoeg om het hele installatieprogramma te weergeven - + The screen is too small to display the setup program. - + Het scherm is te klein on het voorbereidingsprogramma te laten zien. - + The screen is too small to display the installer. - Het schem is te klein on het installatieprogramma te vertonen. + Het scherm is te klein on het installatieprogramma te laten zien. HostInfoJob - + Collecting information about your machine. - + Informatie verzamelen over je systeem. IDJob - - + + + - OEM Batch Identifier - + OEM batch-identificatie - + Could not create directories <code>%1</code>. - + Kon mappen <code>%1</code> niet aanmaken. + + + + Could not open file <code>%1</code>. + Kon bestand <code>%1</code> niet openen. - Could not open file <code>%1</code>. - - - - Could not write to file <code>%1</code>. - + Kon niet schrijven naar het bestand <code>%1</code>. InitcpioJob - + Creating initramfs with mkinitcpio. - + initramfs aanmaken met mkinitcpio. InitramfsJob - + Creating initramfs. - + initramfs aanmaken. InteractiveTerminalPage - + Konsole not installed Konsole is niet geïnstalleerd - + Please install KDE Konsole and try again! Gelieve KDE Konsole te installeren en opnieuw te proberen! - + Executing script: &nbsp;<code>%1</code> Script uitvoeren: &nbsp;<code>%1</code> @@ -1495,28 +1758,15 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Instellen toetsenbord model naar %1.<br/> - - - - Set keyboard layout to %1/%2. - Instellen toetsenbord lay-out naar %1/%2. - - KeyboardQmlViewStep - + Keyboard Toetsenbord @@ -1524,7 +1774,7 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. KeyboardViewStep - + Keyboard Toetsenbord @@ -1532,73 +1782,96 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. LCLocaleDialog - + System locale setting Landinstellingen - + 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>. De landinstellingen bepalen de taal en het tekenset voor sommige opdrachtregelelementen.<br/>De huidige instelling is <strong>%1</strong>. - + &Cancel &Afbreken - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Instellen van versleutelde swap. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formulier - + <h1>License Agreement</h1> - + <h1>Licentieovereenkomst</h1> - + I accept the terms and conditions above. Ik aanvaard de bovenstaande algemene voorwaarden. - + Please review the End User License Agreements (EULAs). - + Lees de gebruikersovereenkomst (EULA's). - + This setup procedure will install proprietary software that is subject to licensing terms. - + Deze voorbereidingsprocedure zal propriëtaire software installeren waarop licentievoorwaarden van toepassing zijn. - + If you do not agree with the terms, the setup procedure cannot continue. - + Indien je niet akkoord gaat met deze voorwaarden kan de installatie niet doorgaan. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Deze voorbereidingsprocedure zal propriëtaire software installeren waarop licentievoorwaarden van toepassing zijn, om extra features aan te bieden en de gebruikerservaring te verbeteren. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Indien je de voorwaarden niet aanvaardt zal de propriëtaire software vervangen worden door opensource alternatieven. LicenseViewStep - + License Licentie @@ -1606,109 +1879,102 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. LicenseWidget - + URL: %1 - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 stuurprogramma</strong><br/>door %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafisch stuurprogramma</strong><br/><font color="Grey">door %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">door %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">door %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pakket</strong><br/><font color="Grey">door %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">door %2</font> - + File: %1 - + Bestand: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text - + Verberg licentietekst + + + + Show the license text + Toon licentietekst + + + + Open license agreement in browser. + Open licentieovereenkomst in webbrowser. LocalePage - - The system language will be set to %1. - De taal van het systeem zal worden ingesteld op %1. - - - - The numbers and dates locale will be set to %1. - De getal- en datumnotatie worden ingesteld op %1. - - - + Region: Regio: - + Zone: Zone: - - + + &Change... &Aanpassen - - - Set timezone to %1/%2.<br/> - Instellen tijdzone naar %1/%2.<br/> - LocaleQmlViewStep - + Location Locatie + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Locatie @@ -1716,493 +1982,572 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. LuksBootKeyFileJob - + Configuring LUKS key file. - + LUKS-sleutelbestand configureren. - - + + No partitions are defined. - + Geen partities gedefineerd. - - - + + + Encrypted rootfs setup error - + Versleutelde rootfs installatiefout - + Root partition %1 is LUKS but no passphrase has been set. - + Rootpartitie %1 is LUKS maar er is een wachtwoord ingesteld. - + Could not create LUKS key file for root partition %1. - + Kon het LUKS-sleutelbestand niet aanmaken voor rootpartitie %1. - + Could not configure LUKS key file on partition %1. - + Kon het LUKS-sleutelbestand niet aanmaken op partitie %1. MachineIdJob - + Generate machine-id. Genereer machine-id - + Configuration Error - + Configuratiefout - + No root mount point is set for MachineId. - + Er is geen root mountpunt ingesteld voor MachineId. + + + + Map + + + Timezone: %1 + Tijdzone: %1 + + + + 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. + Selecteer je gewenste locatie op de kaart zodat het installatieprogramma een landinstelling en tijdzone kan instellen. Je kunt hieronder de voorgestelde instellingen afstellen. Zoek de kaart door slepen en gebruik de +/- koppen of scroll de muis om in en uit te zoomen. NetInstallViewStep - - + Package selection Pakketkeuze - + Office software Kantoor software - + Office package Kantoorpakket - + Browser software Browser software - + Browser package Browserpakket - + Web browser - + Webbrowser - + Kernel Kernel - + Services Diensten - + Login Login - + Desktop Desktop - + Applications Applicaties - + Communication Communicatie - + Development Ontwikkelen - + Office Kantoor - + Multimedia Multimedia - + Internet Internet - + Theming - + Thema - + Gaming Spellen - + Utilities - + Gereedschappen NotesQmlViewStep - + Notes - + Notities OEMPage - + Ba&tch: - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Vul een batch-ID hier in. Deze zal worden opgeslagen in het doelsysteem.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuratie</h1><p>Calamares zal OEM instellingen gebruiken tijdens het configureren van het doelsysteem.</p></body></html> OEMViewStep - + OEM Configuration + OEM Configuratie + + + + Set the OEM Batch Identifier to <code>%1</code>. + OEM Batch-ID instellen naar <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. - - Set the OEM Batch Identifier to <code>%1</code>. - + + + + Timezone: %1 + Tijdzone: %1 + + + + Select your preferred Zone within your Region. + Selecteer een voorkeurs tijdzone binnen uw regio. + + + + Zones + Zones + + + + You can fine-tune Language and Locale settings below. + U kunt hieronder gedetailleerde taal- en weergave-instellingen kiezen. PWQ - + Password is too short Het wachtwoord is te kort - + Password is too long Het wachtwoord is te lang - + Password is too weak Wachtwoord is te zwak - + Memory allocation error when setting '%1' Foute geheugentoewijzing bij het instellen van %1. - + Memory allocation error Foute geheugentoewijzing - + The password is the same as the old one Het wachtwoord is hetzelfde als het oude wachtwoord - + The password is a palindrome Het wachtwoord is een palindroom - + The password differs with case changes only Het wachtwoord verschilt slechts in hoofdlettergebruik - + The password is too similar to the old one Het wachtwoord lijkt te veel op het oude wachtwoord - + The password contains the user name in some form Het wachtwoord bevat de gebruikersnaam op een of andere manier - + The password contains words from the real name of the user in some form Het wachtwoord bevat woorden van de echte naam van de gebruiker in één of andere vorm. - + The password contains forbidden words in some form Het wachtwoord bevat verboden woorden in één of andere vorm. - - The password contains less than %1 digits - Het wachtwoord bevat minder dan %1 cijfers - - - + The password contains too few digits Het wachtwoord bevat te weinig cijfers - - The password contains less than %1 uppercase letters - Het wachtwoord bevat minder dan %1 hoofdletters. - - - + The password contains too few uppercase letters Het wachtwoord bevat te weinig hoofdletters. - - - The password contains less than %1 lowercase letters - Het wachtwoord bevat minder dan %1 kleine letters. + + + The password contains fewer than %n lowercase letters + + Het wachtwoord bevat minder dan %n kleine letters + Het wachtwoord bevat minder dan %n kleine letters + - + The password contains too few lowercase letters Het wachtwoord bevat te weinig kleine letters. - - The password contains less than %1 non-alphanumeric characters - Het wachtwoord bevat minder dan %1 niet-alfanumerieke symbolen. - - - + The password contains too few non-alphanumeric characters Het wachtwoord bevat te weinig niet-alfanumerieke symbolen. - - The password is shorter than %1 characters - Het wachtwoord is korter dan %1 karakters. - - - + The password is too short Het wachtwoord is te kort. - - The password is just rotated old one - Het wachtwoord is enkel omgedraaid. - - - - The password contains less than %1 character classes - Het wachtwoord bevat minder dan %1 karaktergroepen - - - + The password does not contain enough character classes Het wachtwoord bevat te weinig karaktergroepen - - The password contains more than %1 same characters consecutively - Het wachtwoord bevat meer dan %1 dezelfde karakters na elkaar - - - + The password contains too many same characters consecutively Het wachtwoord bevat te veel dezelfde karakters na elkaar - - The password contains more than %1 characters of the same class consecutively - Het wachtwoord bevat meer dan %1 karakters van dezelfde groep na elkaar - - - + The password contains too many characters of the same class consecutively Het wachtwoord bevat te veel karakters van dezelfde groep na elkaar - - - The password contains monotonic sequence longer than %1 characters - Het wachtwoord bevat een monotone sequentie van meer dan %1 karakters + + + The password contains fewer than %n digits + + Het wachtwoord bevat minder dan %n getallen + Het wachtwoord bevat minder dan %n getallen + + + + + The password contains fewer than %n uppercase letters + + Het wachtwoord bevat minder dan %n hoofdletters + Het wachtwoord bevat minder dan %n hoofdletters + + + + + The password contains fewer than %n non-alphanumeric characters + + Het wachtwoord bevat minder dan %n niet-alfanumerieke symbolen. + Het wachtwoord bevat minder dan %n niet-alfanumerieke symbolen. + + + + + The password is shorter than %n characters + + Het wachtwoord is korter dan %n karakters + Het wachtwoord is korter dan %n karakters + - + + The password is a rotated version of the previous one + Het wachtwoord is een omgedraaide versie van de oude + + + + The password contains fewer than %n character classes + + Het wachtwoord bevat minder dan %n karaktergroepen + Het wachtwoord bevat minder dan %n karaktergroepen + + + + + The password contains more than %n same characters consecutively + + Het wachtwoord bevat meer dan %n dezelfde karakters na elkaar + Het wachtwoord bevat meer dan %n dezelfde karakters na elkaar + + + + + The password contains more than %n characters of the same class consecutively + + Het wachtwoord bevat meer dan %n dezelfde karakters van dezelfde groep na elkaar + Het wachtwoord bevat meer dan %n dezelfde karakters van dezelfde groep na elkaar + + + + + The password contains monotonic sequence longer than %n characters + + Het wachtwoord bevat een monotone sequentie van meer dan %n karakters + Het wachtwoord bevat een monotone sequentie van meer dan %n karakters + + + + The password contains too long of a monotonic character sequence Het wachtwoord bevat een te lange monotone sequentie van karakters - + No password supplied Geen wachtwoord opgegeven - + Cannot obtain random numbers from the RNG device Kan geen willekeurige nummers verkrijgen van het RNG apparaat - + Password generation failed - required entropy too low for settings Wachtwoord aanmaken mislukt - te weinig wanorde voor de instellingen - + The password fails the dictionary check - %1 Het wachtwoord faalt op de woordenboektest - %1 - + The password fails the dictionary check Het wachtwoord faalt op de woordenboektest - + Unknown setting - %1 Onbekende instelling - %1 - + Unknown setting Onbekende instelling - + Bad integer value of setting - %1 Ongeldige gehele waarde voor instelling - %1 - + Bad integer value Ongeldige gehele waarde - + Setting %1 is not of integer type Instelling %1 is niet van het type integer - + Setting is not of integer type Instelling is niet van het type integer - + Setting %1 is not of string type Instelling %1 is niet van het type string - + Setting is not of string type Instelling is niet van het type string - + Opening the configuration file failed Openen van het configuratiebestand is mislukt - + The configuration file is malformed Het configuratiebestand is ongeldig - + Fatal failure Fatale fout - + Unknown error Onbekende fout - + Password is empty - + Wachtwoord is leeg PackageChooserPage - + Form Formulier - + Product Name - + Productnaam - + TextLabel TextLabel - + Long Product Description - + Lange productbeschrijving - + Package Selection - + Pakketselectie - + Please pick a product from the list. The selected product will be installed. - + Kies een product van de lijst. Het geselecteerde product zal worden geïnstalleerd. + + + + PackageChooserQmlViewStep + + + Packages + Pakketten PackageChooserViewStep - + Packages - + Pakketten PackageModel - + Name Naam - + Description Beschrijving @@ -2210,17 +2555,17 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Page_Keyboard - + Form Formulier - + Keyboard Model: Toetsenbord model: - + Type here to test your keyboard Typ hier om uw toetsenbord te testen @@ -2228,96 +2573,96 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. Page_UserSetup - + Form Formulier - + What is your name? Wat is je naam? - + + Your Full Name + Volledige naam + + + What name do you want to use to log in? Welke naam wil je gebruiken om in te loggen? - - Choose a password to keep your account safe. - Kies een wachtwoord om uw account veilig te houden. + + login + Gebruikersnaam - - - <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> - <small>Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op typefouten. Een goed wachtwoord bevat een combinatie van letters, cijfers en leestekens, is ten minste acht tekens lang en moet regelmatig worden gewijzigd.</ small> - - - + What is the name of this computer? Wat is de naam van deze computer? - - Your Full Name - - - - - login - - - - + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Deze naam zal worden gebruikt als u de computer zichtbaar maakt voor anderen op een netwerk.</ small> - + Computer Name - + Computer Naam - - + + Choose a password to keep your account safe. + Kies een wachtwoord om uw account veilig te houden. + + + + + <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> + <small>Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op typefouten. Een goed wachtwoord bevat een combinatie van letters, cijfers en leestekens, is ten minste acht tekens lang en moet regelmatig worden gewijzigd.</ small> + + + + Password - + Wachtwoord - - + + Repeat Password - + Herhaal wachtwoord - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Wanneer dit vakje is aangevinkt, wachtwoordssterkte zal worden gecontroleerd en je zal geen zwak wachtwoord kunnen gebruiken. - + Require strong passwords. - + Vereis sterke wachtwoorden. - + Log in automatically without asking for the password. Automatisch aanmelden zonder wachtwoord te vragen. - + Use the same password for the administrator account. Gebruik hetzelfde wachtwoord voor het administratoraccount. - + Choose a password for the administrator account. Kies een wachtwoord voor het administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op typefouten.</ small> @@ -2325,42 +2670,42 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI systeem - + Swap Wisselgeheugen - + New partition for %1 Nieuwe partitie voor %1 - + New partition Nieuwe partitie - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2714,39 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PartitionModel - - + + Free Space Vrije ruimte - - + + New partition Nieuwe partitie - + Name Naam - + File System Bestandssysteem - + + File System Label + + + + Mount Point Aankoppelpunt - + Size Grootte @@ -2404,77 +2754,77 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PartitionPage - + Form Formulier - + Storage de&vice: &Opslagmedium: - + &Revert All Changes Alle wijzigingen &ongedaan maken - + New Partition &Table Nieuwe Partitie & Tabel - + Cre&ate &Aanmaken - + &Edit &Bewerken - + &Delete &Verwijderen - + New Volume Group Nieuwe volumegroep - + Resize Volume Group Volumegroep herschalen - + Deactivate Volume Group Volumegroep uitschakelen - + Remove Volume Group Volumegroep verwijderen - + I&nstall boot loader on: I&nstalleer bootloader op: - + Are you sure you want to create a new partition table on %1? Weet u zeker dat u een nieuwe partitie tabel wil maken op %1? - + Can not create new partition Kan de nieuwe partitie niet aanmaken - + 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. De partitietabel op %1 bevat al %2 primaire partities en er kunnen geen nieuwe worden aangemaakt. In plaats hiervan kan één primaire partitie verwijderen en een uitgebreide partitie toevoegen. @@ -2482,131 +2832,121 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PartitionViewStep - + Gathering system information... Systeeminformatie verzamelen... - + Partitions Partities - - Install %1 <strong>alongside</strong> another operating system. - Installeer %1 <strong>naast</strong> een ander besturingssysteem. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Wis</strong> schijf en installeer %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Vervang</strong> een partitie met %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Handmatig</strong> partitioneren. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Installeer %1 <strong>naast</strong> een ander besturingssysteem op schijf <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Wis</strong> schijf <strong>%2</strong> (%3) en installeer %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Vervang</strong> een partitie op schijf <strong>%2</strong> (%3) met %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Handmatig</strong> partitioneren van schijf <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Schijf <strong>%1</strong> (%2) - - - + Current: Huidig: - + After: Na: - + No EFI system partition configured Geen EFI systeempartitie geconfigureerd - - 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>esp</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. - Een EFI systeempartitie is vereist om %1 te starten.<br/><br/>Om een EFI systeempartitie in te stellen, ga terug en selecteer of maak een FAT32 bestandssysteem met de <strong>esp</strong>-vlag aangevinkt en aankoppelpunt <strong>%2</strong>.<br/><br/>Je kan verdergaan zonder een EFI systeempartitie, maar mogelijk start je systeem dan niet op. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - EFI-systeem partitievlag niet ingesteld. + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Een EFI systeempartitie is vereist om %1 op te starten.<br/><br/>Een partitie is ingesteld met aankoppelpunt <strong>%2</strong>, maar de de <strong>esp</strong>-vlag is niet aangevinkt.<br/>Om deze vlag aan te vinken, ga terug en pas de partitie aan.<br/><br/>Je kan verdergaan zonder deze vlag, maar mogelijk start je systeem dan niet op. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + Optie om GPT te gebruiken in BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted Bootpartitie niet versleuteld - + 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. Een aparte bootpartitie was ingesteld samen met een versleutelde rootpartitie, maar de bootpartitie zelf is niet versleuteld.<br/><br/>Dit is niet volledig veilig, aangezien belangrijke systeembestanden bewaard worden op een niet-versleutelde partitie.<br/>Je kan doorgaan als je wil, maar het ontgrendelen van bestandssystemen zal tijdens het opstarten later plaatsvinden.<br/>Om de bootpartitie toch te versleutelen: keer terug en maak de bootpartitie opnieuw, waarbij je <strong>Versleutelen</strong> aanvinkt in het venster partitie aanmaken. - + has at least one disk device available. - + tenminste één schijfapparaat beschikbaar. - + There are no partitions to install on. - + Er zijn geen partities om op te installeren. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma Look-and-Feel taak - - + + Could not select KDE Plasma Look-and-Feel package Kon geen KDE Plasma Look-and-Feel pakket selecteren @@ -2614,17 +2954,17 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PlasmaLnfPage - + Form Formulier - + 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. - + Kies een Look-and Feel voor de KDE Plasma Desktop. Je kan deze stap ook overslaan en de Look-and-Feel instellen op het geïnstalleerde systeem. Bij het selecteren van een Look-and-Feel zal een live voorbeeld tonen van die Look-and-Feel. - + 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. Kies een Look-and Feel voor de KDE Plasma Desktop. Je kan deze stap ook overslaan en de Look-and-Feel instellen op het geïnstalleerde systeem. Bij het selecteren van een Look-and-Feel zal een live voorbeeld tonen van die Look-and-Feel. @@ -2632,7 +2972,7 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2640,17 +2980,17 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. PreserveFiles - + Saving files for later ... Bestanden opslaan voor later... - + No files configured to save for later. Geen bestanden geconfigureerd om op te slaan voor later. - + Not all of the configured files could be preserved. Niet alle geconfigureerde bestanden konden worden bewaard. @@ -2658,14 +2998,14 @@ Het installatieprogramma zal afsluiten en alle wijzigingen zullen verloren gaan. ProcessResult - + There was no output from the command. Er was geen uitvoer van de opdracht. - + Output: @@ -2674,52 +3014,52 @@ Uitvoer: - + External command crashed. Externe opdracht is vastgelopen. - + Command <i>%1</i> crashed. Opdracht <i>%1</i> is vastgelopen. - + External command failed to start. Externe opdracht kon niet worden gestart. - + Command <i>%1</i> failed to start. Opdracht <i>%1</i> kon niet worden gestart. - + Internal error when starting command. Interne fout bij het starten van de opdracht. - + Bad parameters for process job call. Onjuiste parameters voor procestaak - + External command failed to finish. Externe opdracht is niet correct beëindigd. - + Command <i>%1</i> failed to finish in %2 seconds. Opdracht <i>%1</i> is niet beëindigd in %2 seconden. - + External command finished with errors. Externe opdracht beëindigd met fouten. - + Command <i>%1</i> finished with exit code %2. Opdracht <i>%1</i> beëindigd met foutcode %2. @@ -2727,108 +3067,113 @@ Uitvoer: QObject - - Default Keyboard Model - Standaard Toetsenbord Model - - - - - Default - Standaard - - - - unknown - onbekend - - - - extended - uitgebreid - - - - unformatted - niet-geformateerd - - - - swap - wisselgeheugen - - - - Unpartitioned space or unknown partition table - Niet-gepartitioneerde ruimte of onbekende partitietabel - - - - (no mount point) - (geen aankoppelpunt) - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + onbekend - - No description provided. - + + extended + uitgebreid - - - - + + unformatted + niet-geformateerd + + + + swap + wisselgeheugen + + + + + Default + Standaard + + + + + + File not found - + Bestand niet gevonden - + Path <pre>%1</pre> must be an absolute path. - + Pad <pre>%1</pre> moet een absoluut pad zijn. - + + Directory not found + Map niet gevonden + + + + Could not create new random file <pre>%1</pre>. - + Kon niet een willekeurig bestand <pre>%1</pre> aanmaken. + + + + No product + Geen product + + + + No description provided. + Geen beschrijving vermeld. + + + + (no mount point) + (geen aankoppelpunt) + + + + Unpartitioned space or unknown partition table + Niet-gepartitioneerde ruimte of onbekende partitietabel + + + + Recommended + + + <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> + Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 te installeren.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. RemoveUserJob - + Remove live user from target system - + Verwijder live gebruiker van het doelsysteem RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Volumegroep met de naam %1 verwijderen. - + Remove Volume Group named <strong>%1</strong>. Volumegroep met de naam <strong>%1</strong> verwijderen. - + The installer failed to remove a volume group named '%1'. Het installatieprogramma kon de volumegroep met de naam '%1' niet verwijderen. @@ -2836,143 +3181,159 @@ Uitvoer: ReplaceWidget - + Form Formulier - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Kies waar %1 te installeren. <br/><font color="red">Opgelet: </font>dit zal alle bestanden op de geselecteerde partitie wissen. - + The selected item does not appear to be a valid partition. Het geselecteerde item is geen geldige partitie. - + %1 cannot be installed on empty space. Please select an existing partition. %1 kan niet worden geïnstalleerd op lege ruimte. Kies een bestaande partitie. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kan niet op een uitgebreide partitie geïnstalleerd worden. Kies een bestaande primaire of logische partitie. - + %1 cannot be installed on this partition. %1 kan niet op deze partitie geïnstalleerd worden. - + Data partition (%1) Gegevenspartitie (%1) - + Unknown system partition (%1) Onbekende systeempartitie (%1) - + %1 system partition (%2) %1 systeempartitie (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitie %1 is te klein voor %2. Gelieve een partitie te selecteren met een capaciteit van minstens %3 GiB. - + <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. <strong>%2</strong><br/><br/>Er werd geen EFI systeempartite gevonden op dit systeem. Gelieve terug te keren en manueel te partitioneren om %1 in te stellen. - - - + + + <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. <strong>%3</strong><br/><br/>%1 zal geïnstalleerd worden op %2.<br/><font color="red">Opgelet: </font>alle gegevens op partitie %2 zullen verloren gaan. - + The EFI system partition at %1 will be used for starting %2. De EFI systeempartitie op %1 zal gebruikt worden om %2 te starten. - + EFI system partition: EFI systeempartitie: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + Deze computer voldoet niet aan de minimale vereisten voor het installeren van %1. +De installatie kan niet doorgaan. + + + + <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> + Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 te installeren.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. + + ResizeFSJob - + Resize Filesystem Job Bestandssysteem herschalen Taak - + Invalid configuration Ongeldige configuratie - + The file-system resize job has an invalid configuration and will not run. De bestandssysteem herschalen-taak heeft een ongeldige configuratie en zal niet uitgevoerd worden. - + KPMCore not Available KPMCore niet beschikbaar - + Calamares cannot start KPMCore for the file-system resize job. Calamares kan KPMCore niet starten voor de bestandssysteem-herschaaltaak. - - - - - + + + + + Resize Failed Herschalen mislukt - + The filesystem %1 could not be found in this system, and cannot be resized. Het bestandssysteem %1 kon niet gevonden worden op dit systeem en kan niet herschaald worden. - + The device %1 could not be found in this system, and cannot be resized. Het apparaat %1 kon niet gevonden worden op dit systeem en kan niet herschaald worden. - - + + The filesystem %1 cannot be resized. Het bestandssysteem %1 kan niet worden herschaald. - - + + The device %1 cannot be resized. Het apparaat %1 kan niet worden herschaald. - + The filesystem %1 must be resized, but cannot. Het bestandssysteem %1 moet worden herschaald, maar kan niet. - + The device %1 must be resized, but cannot Het apparaat %1 moet worden herschaald, maar kan niet. @@ -2980,22 +3341,22 @@ Uitvoer: ResizePartitionJob - + Resize partition %1. Pas de grootte van partitie %1 aan. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Herschaal de <strong>%2MB</strong> partitie <strong>%1</strong> naar <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + Pas de %2MiB partitie %1 aan naar %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Installatieprogramma is er niet in geslaagd om de grootte van partitie %1 op schrijf %2 aan te passen. @@ -3003,7 +3364,7 @@ Uitvoer: ResizeVolumeGroupDialog - + Resize Volume Group Volumegroep herschalen @@ -3011,18 +3372,18 @@ Uitvoer: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Herschaal volumegroep met de naam %1 van %2 naar %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Herschaal volumegroep met de naam <strong>%1</strong> van <strong>%2</strong> naar <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Het installatieprogramma kon de volumegroep met naam '%1' niet herschalen. @@ -3030,53 +3391,25 @@ Uitvoer: ResultsListDialog - + For best results, please ensure that this computer: Voor de beste resultaten is het aangeraden dat deze computer: - + System requirements Systeemvereisten - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Deze computer voldoet niet aan de minimumvereisten om %1 te installeren.<br/>De installatie kan niet doorgaan. <a href="#details">Details...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Deze computer voldoet niet aan enkele van de aanbevolen specificaties om %1 te installeren.<br/>De installatie kan doorgaan, maar sommige functies kunnen uitgeschakeld zijn. - - - - This program will ask you some questions and set up %2 on your computer. - Dit programma stelt je enkele vragen en installeert %2 op jouw computer. - - ScanningDialog - + Scanning storage devices... Opslagmedia inlezen... - + Partitioning Partitionering @@ -3084,29 +3417,29 @@ Uitvoer: SetHostNameJob - + Set hostname %1 Instellen hostnaam %1 - + Set hostname <strong>%1</strong>. Instellen hostnaam <strong>%1</strong> - + Setting hostname %1. Hostnaam %1 instellen. + - Internal Error Interne Fout - - + + Cannot write hostname to target system Kan de hostnaam niet naar doelsysteem schrijven @@ -3114,29 +3447,29 @@ Uitvoer: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Stel toetsenbordmodel in op %1 ,indeling op %2-%3 - + Failed to write keyboard configuration for the virtual console. Kon de toetsenbordconfiguratie voor de virtuele console niet opslaan. - - - + + + Failed to write to %1 Schrijven naar %1 mislukt - + Failed to write keyboard configuration for X11. Schrijven toetsenbord configuratie voor X11 mislukt. - + Failed to write keyboard configuration to existing /etc/default directory. Kon de toetsenbordconfiguratie niet wegschrijven naar de bestaande /etc/default map. @@ -3144,82 +3477,82 @@ Uitvoer: SetPartFlagsJob - + Set flags on partition %1. Stel vlaggen in op partitie %1. - + Set flags on %1MiB %2 partition. - + Stel vlaggen in op %1MiB %2 partitie. - + Set flags on new partition. Stel vlaggen in op nieuwe partitie. - + Clear flags on partition <strong>%1</strong>. Wis vlaggen op partitie <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - + Wis vlaggen op %1MiB <strong>%2</strong> partitie. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Wis vlaggen op nieuwe partitie. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Partitie <strong>%1</strong> als <strong>%2</strong> vlaggen. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Vlag %1MiB <strong>%2</strong> partitie als <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Vlag nieuwe partitie als <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Vlaggen op partitie <strong>%1</strong> wissen. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Vlaggen op %1MiB <strong>%2</strong> partitie wissen. + + + Clearing flags on new partition. Vlaggen op nieuwe partitie wissen. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Vlaggen <strong>%2</strong> op partitie <strong>%1</strong> instellen. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Vlaggen <strong>%3</strong> op %1MiB <strong>%2</strong> partitie instellen. + + + Setting flags <strong>%1</strong> on new partition. Vlaggen <strong>%1</strong> op nieuwe partitie instellen. - + The installer failed to set flags on partition %1. Het installatieprogramma kon geen vlaggen instellen op partitie %1. @@ -3227,42 +3560,42 @@ Uitvoer: SetPasswordJob - + Set password for user %1 Instellen wachtwoord voor gebruiker %1 - + Setting password for user %1. Wachtwoord instellen voor gebruiker %1. - + Bad destination system path. Onjuiste bestemming systeempad. - + rootMountPoint is %1 rootMountPoint is %1 - + Cannot disable root account. Kan root account niet uitschakelen. - + passwd terminated with error code %1. passwd is afgesloten met foutcode %1. - + Cannot set password for user %1. Kan het wachtwoord niet instellen voor gebruiker %1 - + usermod terminated with error code %1. usermod beëindigd met foutcode %1. @@ -3270,45 +3603,82 @@ Uitvoer: SetTimezoneJob - + Set timezone to %1/%2 Instellen tijdzone naar %1/%2 - + Cannot access selected timezone path. Kan geen toegang krijgen tot het geselecteerde tijdzone pad. - + Bad path: %1 Onjuist pad: %1 - + Cannot set timezone. Kan tijdzone niet instellen. - + Link creation failed, target: %1; link name: %2 Link maken mislukt, doel: %1; koppeling naam: %2 - + Cannot set timezone, Kan de tijdzone niet instellen, - + Cannot open /etc/timezone for writing Kan niet schrijven naar /etc/timezone + + SetupGroupsJob + + + Preparing groups. + Gebruikers-groepen worden voorbereid. + + + + + Could not create groups in target system + Kan groepen niet creëren in doelsysteem. + + + + These groups are missing in the target system: %1 + Deze groepen bestaan niet in het doelsysteem: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configureer <pre>sudo</pre> (administratie) gebruikers. + + + + Cannot chmod sudoers file. + chmod sudoers gefaald. + + + + Cannot create sudoers file for writing. + Kan het bestand sudoers niet aanmaken. + + ShellProcessJob - + Shell Processes Job Shell-processen Taak @@ -3316,81 +3686,117 @@ Uitvoer: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Dit is een overzicht van wat zal gebeuren wanneer je de installatieprocedure start. + + &Yes + &ja - - - SummaryViewStep - - Summary - Samenvatting + + &No + &Nee + + + + &Cancel + &Afbreken + + + + &Close + &Sluiten TrackingInstallJob - + Installation feedback Installatiefeedback - + Sending installation feedback. Installatiefeedback opsturen. - + Internal error in install-tracking. Interne fout in de installatie-tracking. - + HTTP request timed out. HTTP request is verlopen. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE gebruikersfeedback + + + + Configuring KDE user feedback. + KDE gebruikersfeedback configureren. + + + + + Error in KDE user feedback configuration. + Fout in de KDE gebruikersfeedback configuratie. + + + + Could not configure KDE user feedback correctly, script error %1. + Kon de KDE gebruikersfeedback niet correct instellen, scriptfout %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Kon de KDE gebruikersfeedback niet correct instellen, Calamaresfout %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Machinefeedback - + Configuring machine feedback. Instellen van machinefeedback. - - + + Error in machine feedback configuration. Fout in de configuratie van de machinefeedback. - + Could not configure machine feedback correctly, script error %1. Kon de machinefeedback niet correct instellen, scriptfout %1. - + Could not configure machine feedback correctly, Calamares error %1. Kon de machinefeedback niet correct instellen, Calamares-fout %1. @@ -3398,106 +3804,97 @@ Uitvoer: TrackingPage - + Form Formulier - + Placeholder Plaatshouder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Door dit aan te vinken zal er <span style=" font-weight:600;">geen enkele informatie</span> over jouw installatie verstuurd worden.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Klik hier om <span style=" font-weight:600;">geen informatie</span> te sturen over je installatie.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klik hier voor meer informatie over gebruikersfeedback</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Installatie-tracking helpt %1 om te zien hoeveel gebruikers ze hebben, op welke hardware %1 geïnstalleerd wordt en (met de laatste twee opties hieronder) op de hoogte te blijven van de geprefereerde toepassingen. Om na te gaan wat verzonden zal worden, klik dan op het help-pictogram naast elke optie. + + 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. + Tracken helpt %1 te zien hoe vaak het geïnstalleerd wordt. op welke hardware het geïnstalleerd is en welke applicaties worden gebruikt. Om te zien wat er verzonden wordt, klik het help-pictogram naast elke optie. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Door dit aan te vinken zal er informatie verstuurd worden over jouw installatie en hardware. Deze informatie zal <b>slechts eenmaal verstuurd worden</b> na het afronden van de installatie. + + 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. + Door dit aan te vinken zal er informatie verstuurd worden over jouw installatie en hardware. Deze informatie zal slechts <b> eenmaal</b> verstuurd worden na het afronden van de installatie. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Door dit aan te vinken zal <b>periodiek</b> informatie verstuurd worden naar %1 over jouw installatie, hardware en toepassingen. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Door dit aan te vinken zal periodiek informatie verstuurd worden naar %1 over je <b>apparaat</b>installatie, hardware en toepassingen. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Door dit aan te vinken zal <b>regelmatig</b> informatie verstuurd worden naar %1 over jouw installatie, hardware, toepassingen en gebruikspatronen. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Door dit aan te vinken zal regelmatig informatie verstuurd worden naar %1 over jouw installatie, hardware, toepassingen en gebruikspatronen. TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Unmount bestandssystemen. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - + <small>Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie.</small> + + + UsersQmlViewStep - - Your username is too long. - De gebruikersnaam is te lang. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - De hostnaam is te kort. - - - - Your hostname is too long. - De hostnaam is te lang. - - - - Your passwords do not match! - Je wachtwoorden komen niet overeen! + + Users + Gebruikers UsersViewStep - + Users Gebruikers @@ -3505,65 +3902,67 @@ Uitvoer: VariantModel - + Key - + Column header for key/value + Sleutel - + Value + Column header for key/value Waarde VolumeGroupBaseDialog - + Create Volume Group - + Volumegroep aanmaken - + List of Physical Volumes Lijst met fysieke volumes - + Volume Group Name: Volumegroep naam: - + Volume Group Type: Volumegroep type: - + Physical Extent Size: Fysieke reikwijdte grootte: - + MiB MiB - + Total Size: Totale grootte: - + Used Size: Gebruikte grootte: - + Total Sectors: Totaal aantal sectoren: - + Quantity of LVs: Aantal LV's: @@ -3571,106 +3970,106 @@ Uitvoer: WelcomePage - + Form Formulier - - + + Select application and system language - + Selecteer applicatie- en systeemstaal. - Open donations website - - - - - &Donate - - - - - Open help and support website - - - - - Open issues and bug-tracking website - - - - - Open release notes website - - - - - &Release notes - Aantekeningen bij deze ve&rsie - - - - &Known issues - Be&kende problemen - - - - &Support - Onder&steuning - - - &About &Over - - <h1>Welcome to the %1 installer.</h1> + + Open donations website + Open donatiewebsite + + + + &Donate + &Doneren + + + + Open help and support website + Open help en ondersteuningswebsite. + + + + &Support + Onder&steuning + + + + Open issues and bug-tracking website + Open problemen en bug-tracking website. + + + + &Known issues + Be&kende problemen + + + + Open release notes website + Open release-opmerkingen website. + + + + &Release notes + Aantekeningen bij deze ve&rsie + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + Welkome in het Calamares voorbereidingsprogramma voor %1. + + + + <h1>Welcome to %1 setup.</h1> <h1>Welkom in het %1 installatieprogramma.</h1> - + <h1>Welcome to the Calamares installer for %1.</h1> <h1>Welkom in het Calamares installatieprogramma voor %1.</h1> - - <h1>Welcome to the Calamares setup program for %1.</h1> - + + <h1>Welcome to the %1 installer.</h1> + <h1>Welkom in het %1 installatieprogramma.</h1> - - <h1>Welcome to %1 setup.</h1> - + + %1 support + %1 ondersteuning - + About %1 setup - + Over %1 installatieprogramma. - + About %1 installer Over het %1 installatieprogramma - + <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. - - - - - %1 support - %1 ondersteuning + <h1>%1</h1><br/><strong>%2<br/>voor %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/> Met dank aan <a href="https://calamares.io/team/">het Calamares team</a> en <a href="https://www.transifex.com/calamares/calamares/">het Calamares vertaalteam</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> ontwikkeling gesponsord door <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Welkom @@ -3678,120 +4077,468 @@ Uitvoer: WelcomeViewStep - + Welcome Welkom + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Configuratiefout + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. + <h1>%1</h1><br/><strong>%2<br/>voor %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/> Met dank aan <a href="https://calamares.io/team/">het Calamares team</a> en <a href="https://www.transifex.com/calamares/calamares/">het Calamares vertaalteam</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> ontwikkeling gesponsord door <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. + + + + Back + Terug + + + + calamares-sidebar + + + Show debug information + Toon debug informatie + + + + finishedq + + + Installation Completed + Installatie Voltooid + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 is geïnstalleerd op je computer.<br/> +Je mag nu opnieuw opstarten in je systeem, of de Live-omgeving blijven gebruiken. + + + + Close Installer + Sluit Installatieprogramma + + + + Restart System + Herstart Systeem + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Een logboek van de installatie is beschikbaar als installation.log in de gebruikersmap van de Live gebruiker<br/> +Dit logboek is ook gekopieerd naar /var/log/installation.log van het doelsysteem.</p> + + + + finishedq@mobile + + + Installation Completed + Installatie Voltooid + + + + %1 has been installed on your computer.<br/> + You may now restart your device. - - Back + + Close + + + Restart + + + + + i18n + + + <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>. + <h1>Talen</h1></br> +De taalinstellingen bepalen de taal en karakterset voor sommige opdrachtsregelelementen. De huidige instelling is <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Tijdinstellingen</h1></br> +De systeemstijdinstellingen beïnvloeden de cijfer- en datumsformaat. De huidige instelling is <strong>%1</strong>. + + + + Back + Terug + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Toetsenbord model: - - Refresh - - - - - + Layouts - + Indeling - - - Keyboard Layout - + + Type here to test your keyboard + Typ hier om uw toetsenbord te testen - - Models - - - - + Variants - + Varianten + + + localeq - - Test your keyboard - + + Change + Veranderen notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + <h3>%1</h3> +<p>Dit zijn voorbeeld release-opmerkingen.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <h3>%1</h3> +<p>Dit voorbeeld QML bestand weergeeft opties in RichtText met Flickable inhoud.</p> +<p>QML met RichText kan HTML-tags gebruiken. Flickable inhoud is handig voor touchscreens.</p> +<p><b>Dit is vergedrukte tekst</b></p> +<p><i>Dit is schuingedrukte tekst</i></p> +<p><u>Dit is onderstreepte tekst</u></p> +<p><center>Deze tekst zal worden gecentreerd.</center></p> +<p><s>Dit is doorgestreepte teksts</s></p> + +<p>Code voorbeeld: +<code>ls -l /home</code> +</p> + +<p><b>Lijsten:</b></p> +<ul> + <li>Intel CPU systemen</li> + <li>AMD CPU systemen</li> +</ul> + +<p>De verticale scrollbalk is verstelbaar, huidige breedte ingesteld op 10.</p> + + + + Back + Terug + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Kies je gebruikersnaam en wachtwoord om in te loggen en administratieve taken uit te voeren + + + + What is your name? + Wat is je naam? + + + + Your Full Name + Volledige naam + + + + What name do you want to use to log in? + Welke naam wil je gebruiken om in te loggen? + + + + Login Name + Inlognaam + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Als meer dan één persoon deze computer zal gebruiken, kan je meerdere accounts aanmaken na installatie. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Alleen kleine letters, nummerse en (laag) streepjes zijn toegestaan. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Wat is de naam van deze computer? + + + + Computer Name + Computer Naam + + + + This name will be used if you make the computer visible to others on a network. + Deze naam zal worden gebruikt als u de computer zichtbaar maakt voor anderen op een netwerk. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Kies een wachtwoord om uw account veilig te houden. + + + + Password + Wachtwoord + + + + Repeat Password + Herhaal wachtwoord + + + + 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. + Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op tikfouten. Een goed wachtwoord bevat een combinatie van letters, cijfers en leestekens, is ten minste acht tekens lang, en zou regelmatig moeten worden gewijzigd. + + + + Validate passwords quality + Controleer wachtwoorden op gelijkheid + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Wanneer dit vakje is aangevinkt, wachtwoordssterkte zal worden gecontroleerd en je zal geen zwak wachtwoord kunnen gebruiken. + + + + Log in automatically without asking for the password + Automatisch aanmelden zonder wachtwoord te vragen + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Hergebruik gebruikerswachtwoord als root (administratie) wachtwoord. + + + + Use the same password for the administrator account. + Gebruik hetzelfde wachtwoord voor het administratoraccount. + + + + Choose a root password to keep your account safe. + Kies een root (administratie) wachtwoord om je account veilig te houden. + + + + Root Password + Root (Administratie) Wachtwoord + + + + Repeat Root Password + Herhaal Root Wachtwoord + + + + Enter the same password twice, so that it can be checked for typing errors. + Voer hetzelfde wachtwoord twee keer in, zodat het gecontroleerd kan worden op tikfouten. + welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Welkom bij het %1 <quote>%2</quote> installatieprogramma</h3> +<p>Dit programma zal je enkele vragen stellen en %1 op uw computer installeren.</p> - + About - + Over - + Support - + Ondersteuning - + Known issues - + Bekende problemen - + Release notes - + Aantekeningen bij deze versie - + Donate - + Doneren diff --git a/lang/calamares_oc.ts b/lang/calamares_oc.ts new file mode 100644 index 000000000..ad8d41b3a --- /dev/null +++ b/lang/calamares_oc.ts @@ -0,0 +1,4510 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + + + + + 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. + + + + + 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. + + + + + BootLoaderModel + + + Master Boot Record of %1 + + + + + Boot Partition + Particion d’aviada + + + + System Partition + Particion sistèma + + + + Do not install a boot loader + Installar pas lo gestionari d'aviada + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Pagina blanca + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + Moduls + + + + Type: + Tipe : + + + + + none + cap + + + + Interface: + Interfàcia : + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + Recargar fuèlh d’estil + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + + + + + Debug information + Informacions de desbugatge + + + + Calamares::ExecutionViewStep + + + Set up + Configurar + + + + Install + Installar + + + + Calamares::FailJob + + + Job failed (%1) + + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + Fach + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + Executar la comanda « %1 ». + + + + Running command %1 %2 + Execucion de la comanda %1 %2 + + + + Calamares::PythonJob + + + Running %1 operation. + Execucion de l’operacion %1 + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + Cargament... + + + + QML Step <i>%1</i>. + + + + + Loading failed. + Fracàs del cargament. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + (%n second(s)) + + (%n segonda) + (%n segondas) + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + Configuracion fracassada + + + + Installation Failed + Installacion fracassada + + + + Error + Error + + + + &Yes + &Òc + + + + &No + &Non + + + + &Close + &Tampar + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + Lançament de Calamares fracassat + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + Contunhar la configuracion ? + + + + Continue with installation? + Contunhar l’installacion ? + + + + 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> + + + + + 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> + + + + + &Set up now + &Configurar ara + + + + &Install now + &Installar ara + + + + Go &back + &Tornar + + + + &Set up + &Configurar + + + + &Install + &Installar + + + + Setup is complete. Close the setup program. + Configuracion acabada. Tampatz lo programa de configuracion. + + + + The installation is complete. Close the installer. + L’installacion es acabada. Tampatz l’installador. + + + + Cancel setup without changing the system. + Anullar la configuracion sens cambiar lo sistèma. + + + + Cancel installation without changing the system. + Anullar l’installacion sens cambiar lo sistèma. + + + + &Next + &Seguent + + + + &Back + &Tornar + + + + &Done + &Acabat + + + + &Cancel + &Anullar + + + + Cancel setup? + Anullar la configuracion ? + + + + Cancel installation? + Anullar l’installacion ? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Setup Program + + + + + %1 Installer + Installador de %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + + + + + Select storage de&vice: + + + + + + + + Current: + Actual : + + + + After: + Aprèp : + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + Emplaçament del gestionari d'aviada : + + + + <strong>Select a partition to install on</strong> + <strong>Seleccionar una particion ont installar</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + Particion sistèma EFI : + + + + 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. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Seleccion dels paquets + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>La benvenguda al programa d’installacion de Calamares per %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>La benvenguda a la configuracion de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>La benvenguda a l’installador de Calamares per %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>La benvenguda a l’installador de %1</h1> + + + + Your username is too long. + Vòstre nom d’utilizaire es tròp long. + + + + '%1' is not allowed as username. + « %1 » es pas permés coma nom d’utilizaire. + + + + Your username must start with a lowercase letter or underscore. + Vòstre nom d’utilizaire deu començar per una minuscula o un jonhent bas. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Son solament permeses las letras minusculas, nombres, jonhents basses e los tirets. + + + + Your hostname is too short. + Vòstre nom d’òste es tròp cort. + + + + Your hostname is too long. + Vòstre nom d’òste es tròp long. + + + + '%1' is not allowed as hostname. + « %1 » es pas permés coma nom d’òste. + + + + Only letters, numbers, underscore and hyphen are allowed. + Son solament permeses las letras, nombres, jonhents basses e los tirets. + + + + Your passwords do not match! + Los senhals correspondon pas ! + + + + OK! + D’acòrd ! + + + + Setup Failed + Configuracion fracassada + + + + Installation Failed + Installacion fracassada + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Configuracion acabada + + + + Installation Complete + Installacion acabada + + + + The setup of %1 is complete. + La configuracion de %1 es acabada. + + + + The installation of %1 is complete. + L’installacion de %1 es acabada. + + + + Package Selection + Seleccion dels paquets + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + Crear una particion + + + + Si&ze: + Ta&lha : + + + + MiB + MiO + + + + Partition &Type: + &Tipe de particion : + + + + Primar&y + Primàr&ia + + + + E&xtended + E&spandida + + + + Fi&le System: + Sistèma de fic&hièr : + + + + LVM LV name + + + + + &Mount Point: + Punt de &montatge : + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + Crear l’utilizaire %1 + + + + Create user <strong>%1</strong>. + Crear utilizaire <strong>%1</strong>. + + + + Preserving home directory + Servar lo repertòri home + + + + + Creating user %1 + Creacion de l’utilizaire %1 + + + + Configuring user %1 + Configuracion de l’utilizaire %1 + + + + Setting file permissions + Definicion de las autorizacions fichièr + + + + CreateVolumeGroupDialog + + + Create Volume Group + Crear un grop de volum + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + Suprimir la particion %1. + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + Supression de la particion %1. + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + 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. + + + + + 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. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <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. + + + + + 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. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Con&tent: + + + + + &Keep + &Gardar + + + + Format + Format + + + + Warning: Formatting the partition will erase all existing data. + + + + + &Mount Point: + Punt de &montatge : + + + + Si&ze: + Ta&lha : + + + + MiB + MiO + + + + Fi&le System: + Sistèma de fic&hièr : + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + Detalhs : + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + &Restart now + &Reaviar ara + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + Terminar + + + + FinishedViewStep + + + Finish + Terminar + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + es brancat a una alimentacion electrica + + + + The system is not plugged in to a power source. + Lo sistèma es pas brancat a una alimentacion electrica. + + + + is connected to the Internet + es connectat a l’Internet + + + + The system is not connected to the Internet. + Lo sistèma es pas connectat a l’Internet. + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole pas installada + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + Escript + + + + KeyboardQmlViewStep + + + Keyboard + Clavièr + + + + KeyboardViewStep + + + Keyboard + Clavièr + + + + LCLocaleDialog + + + System locale setting + Paramètres de regionalizacion del sistèma + + + + 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>. + + + + + &Cancel + &Anullar + + + + &OK + &D’acòrdi + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + Cap de sistèma cibla pas disponible. + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + + + + + <h1>License Agreement</h1> + <h1>Acòrd de licéncia</h1> + + + + I accept the terms and conditions above. + Accèpti los tèrmes e las condicion aquí dessús. + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + Licéncia + + + + LicenseWidget + + + URL: %1 + URL : %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + Fichièr : %1 + + + + Hide license text + Amagar lo tèxte de licéncia + + + + Show the license text + Mostrar lo tèxte de licéncia + + + + Open license agreement in browser. + Dobrir l’acòrd de licéncia dins lo navegador. + + + + LocalePage + + + Region: + Region : + + + + Zone: + Zòna ; + + + + + &Change... + &Cambiar... + + + + LocaleQmlViewStep + + + Location + Emplaçament + + + + LocaleTests + + + Quit + Quitar + + + + LocaleViewStep + + + Location + Emplaçament + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + Error de configuracion + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + Fus orari : %1 + + + + 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. + + + + + NetInstallViewStep + + + Package selection + Seleccion dels paquets + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + Percórrer lo paquet + + + + Web browser + Navegador web + + + + Kernel + Nuclèu + + + + Services + Servicis + + + + Login + Connexion + + + + Desktop + Burèu + + + + Applications + Aplicacions + + + + Communication + Comunicacion + + + + Development + Desvolopament + + + + Office + Burotica + + + + Multimedia + Multimèdia + + + + Internet + Internet + + + + Theming + Personalizacion + + + + Gaming + Jòc + + + + Utilities + Utilitaris + + + + NotesQmlViewStep + + + Notes + Nòtas + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + Configuracion OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Fus orari : %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + Zònas + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + Lo senhal es tròp cort + + + + Password is too long + Lo senhal es tròp long + + + + Password is too weak + Lo senhal es tròp feble + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + Lo senhal es tròp cort + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + Paramètre desconegut - %1 + + + + Unknown setting + Paramètre desconegut + + + + Bad integer value of setting - %1 + + + + + Bad integer value + Marrida valor d’entièr + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + Error desconeguda + + + + Password is empty + Lo senhal es void + + + + PackageChooserPage + + + Form + + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + Seleccion dels paquets + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + Paquets + + + + PackageChooserViewStep + + + Packages + Paquets + + + + PackageModel + + + Name + Nom + + + + Description + Descripcion + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + Modèl de clavièr : + + + + Type here to test your keyboard + Picatz aicí per ensajar lo clavièr + + + + Page_UserSetup + + + Form + + + + + What is your name? + Cossí vos dison ? + + + + Your Full Name + Vòstre nom complèt + + + + What name do you want to use to log in? + Qual nom volètz utilizar per vos connectar ? + + + + login + identificant + + + + What is the name of this computer? + Cossí s’apèla aqueste ordenador ? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + Nom de l’ordenador + + + + Choose a password to keep your account safe. + + + + + + <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> + + + + + + Password + Senhal + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + Home + + + + Boot + Boot + + + + EFI system + Sistèma EFI + + + + Swap + + + + + New partition for %1 + + + + + New partition + Particion novèla + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + Espaci disponible + + + + + New partition + Particion novèla + + + + Name + Nom + + + + File System + + + + + File System Label + + + + + Mount Point + Punt de montatge + + + + Size + Talha + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + &Suprimir + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + Actual : + + + + After: + Aprèp : + + + + No EFI system partition configured + + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + desconegut + + + + extended + + + + + unformatted + + + + + swap + + + + + + Default + + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <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. + + + + + + + <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. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + Particion sistèma EFI : + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + Error intèrna + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + Definir lo senhal per l’utilizaire %1 + + + + Setting password for user %1. + Definicion de senhal per l’utilizaire %1 + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + Definicion del senhal per l’utilizaire %1 impossibla. + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Fus orari definit a %1/%2 + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + Definicion impossibla de la zòna orària. + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + Definicion impossibla de la zòna orària. + + + + Cannot open /etc/timezone for writing + Dubertura impossibla en escritura de /etc/timezone + + + + SetupGroupsJob + + + Preparing groups. + Preparacion dels grops. + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configurar l’utilizaire <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &D’acòrdi + + + + &Yes + &Òc + + + + &No + &Non + + + + &Cancel + &Anullar + + + + &Close + &Tampar + + + + TrackingInstallJob + + + Installation feedback + Comentaris d’installacion + + + + Sending installation feedback. + Mandadís dels comentaris d’installacion. + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UmountJob + + + Unmount file systems. + + + + + No target system available. + Cap de sistèma cibla pas disponible. + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + Utilizaires + + + + UsersViewStep + + + Users + Utilizaires + + + + VariantModel + + + Key + Column header for key/value + Clau + + + + Value + Column header for key/value + Valor + + + + VolumeGroupBaseDialog + + + Create Volume Group + Crear un grop de volum + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + MiO + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + + Select application and system language + + + + + &About + &A prepaus + + + + Open donations website + + + + + &Donate + &Donar + + + + Open help and support website + + + + + &Support + &Assisténcia + + + + Open issues and bug-tracking website + + + + + &Known issues + &Problèmas coneguts + + + + Open release notes website + + + + + &Release notes + + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>La benvenguda al programa d’installacion de Calamares per %1.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>La benvenguda a la configuracion de %1.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>La benvenguda a l’installador de Calamares per %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>La benvenguda a l’installador de %1.</h1> + + + + %1 support + Assisténcia %1 + + + + About %1 setup + + + + + About %1 installer + + + + + <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. + + + + + WelcomeQmlViewStep + + + Welcome + La benvenguda + + + + WelcomeViewStep + + + Welcome + La benvenguda + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Error de configuracion + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + Tornar + + + + calamares-sidebar + + + Show debug information + Afichar las informacions de desbugatge + + + + finishedq + + + Installation Completed + Installacion acabada + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + Tampar l’installador + + + + Restart System + Reaviar lo sistèma + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + Installacion acabada + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + Tampar + + + + Restart + Reaviar + + + + i18n + + + <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>. + <h1>Lengas</h1> </br> + Los paramètres de lingüistics del sistèma afèctan la lenga, lo jòc de caractèrs per d’unes elements d’interfàcias de linha de comanda. Lo parametratge actual es <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + Tornar + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + Modèl de clavièr : + + + + Layouts + Agençament + + + + Type here to test your keyboard + Picatz aicí per ensajar lo clavièr + + + + Variants + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + Installacion minimala + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + Tornar + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Cossí vos dison ? + + + + Your Full Name + Vòstre nom complèt + + + + What name do you want to use to log in? + Qual nom volètz utilizar per vos connectar ? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Son solament permeses las letras, nombres, jonhents basses e los tirets. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Cossí s’apèla aqueste ordenador ? + + + + Computer Name + Nom de l’ordenador + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + Senhal + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + A prepaus + + + + Support + Assisténcia + + + + Known issues + Problèmas coneguts + + + + Release notes + + + + + Donate + Donar + + + diff --git a/lang/calamares_pl.ts b/lang/calamares_pl.ts index 56d36b882..d959b2e67 100644 --- a/lang/calamares_pl.ts +++ b/lang/calamares_pl.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Zarządzaj ustawieniami auto-montowania + + BootInfoWidget - + 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. <strong>Środowisko uruchomieniowe</strong> systemu.<br><br>Starsze systemy x86 obsługują tylko <strong>BIOS</strong>.<br>Nowoczesne systemy zwykle używają <strong>EFI</strong>, lecz możliwe jest również ukazanie się BIOS, jeśli działa w trybie kompatybilnym. - + 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. Ten system został uruchomiony w środowisku rozruchowym <strong>EFI</strong>.<br><br>Aby skonfigurować uruchomienie ze środowiska EFI, instalator musi wdrożyć aplikację programu rozruchowego, takiego jak <strong>GRUB</strong> lub <strong>systemd-boot</strong> na <strong>Partycji Systemu EFI</strong>. Jest to automatyczne, chyba że wybierasz ręczne partycjonowanie, a w takim przypadku musisz wybrać ją lub utworzyć osobiście. - + 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. Ten system został uruchomiony w środowisku rozruchowym <strong>BIOS</strong>.<br><br>Aby skonfigurować uruchomienie ze środowiska BIOS, instalator musi zainstalować program rozruchowy, taki jak <strong>GRUB</strong> na początku partycji lub w <strong>Głównym Sektorze Rozruchowym</strong> blisko początku tablicy partycji (preferowane). Jest to automatyczne, chyba że wybierasz ręczne partycjonowanie, a w takim przypadku musisz ustawić ją osobiście. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record %1 - + Boot Partition Partycja rozruchowa - + System Partition Partycja systemowa - + Do not install a boot loader Nie instaluj programu rozruchowego - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Pusta strona @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formularz - + GlobalStorage Ogólne przechowywanie - + JobQueue Oczekujące zadania - + Modules Moduły - + Type: Rodzaj: - - + + none brak - + Interface: Interfejs: - - Tools - Narzędzia - - - - Reload Stylesheet + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + Ponownie ładuje arkusz stylów z katalogu brandingu. + + + + Uploads the session log to the configured pastebin. + Przesyła dziennik sesji do skonfigurowanego pliku na pastebin. + + + + Send Session Log + Wyślij dziennik sesji + + + + Reload Stylesheet + Przeładowuje Arkusz Stylów + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information Informacje debugowania @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Zainstaluj @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Ukończono @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Wykonywanie polecenia %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Wykonuję operację %1. - + Bad working directory path Niepoprawna ścieżka katalogu roboczego - + Working directory %1 for python job %2 is not readable. Katalog roboczy %1 dla zadań pythona %2 jest nieosiągalny. - + Bad main script file Niepoprawny główny plik skryptu - + Main script file %1 for python job %2 is not readable. Główny plik skryptu %1 dla zadań pythona %2 jest nieczytelny. - + Boost.Python error in job "%1". Wystąpił błąd Boost.Python w zadaniu "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + Ładowanie... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). Oczekiwanie na %n moduł. @@ -238,7 +271,7 @@ - + (%n second(s)) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. @@ -256,245 +289,236 @@ Calamares::ViewManager - - &Back - &Wstecz - - - - &Next - &Dalej - - - - &Cancel - &Anuluj - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Anuluj instalację bez dokonywania zmian w systemie. - - - + Setup Failed Nieudane ustawianie - - Would you like to paste the install log to the web? - + + Installation Failed + Wystąpił błąd instalacji - + + Error + Błąd + + + + &Yes + &Tak + + + + &No + &Nie + + + + &Close + Zam&knij + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Błąd inicjacji programu Calamares - + %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. %1 nie może zostać zainstalowany. Calamares nie mógł wczytać wszystkich skonfigurowanych modułów. Jest to problem ze sposobem, w jaki Calamares jest używany przez dystrybucję. - + <br/>The following modules could not be loaded: <br/>Następujące moduły nie mogły zostać wczytane: - - Continue with installation? - + + Continue with setup? + Kontynuować z programem instalacyjnym? - + + Continue with installation? + Kontynuować instalację? + + + 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> - + + 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> + Instalator %1 zamierza przeprowadzić zmiany na Twoim dysku, aby zainstalować %2.<br/><strong>Nie będziesz mógł cofnąć tych zmian.</strong> + + + &Set up now - + + &Install now + &Zainstaluj teraz + + + + Go &back + &Cofnij się + + + &Set up - + &Install Za&instaluj - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Instalacja ukończona pomyślnie. Możesz zamknąć instalator. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Anuluj instalację bez dokonywania zmian w systemie. + + + + &Next + &Dalej + + + + &Back + &Wstecz + + + + &Done + &Ukończono + + + + &Cancel + &Anuluj + + + Cancel setup? Anulować ustawianie? - + Cancel installation? Anulować instalację? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Czy na pewno chcesz anulować obecny proces instalacji? Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. - - - - &Yes - &Tak - - - - - &No - &Nie - - - - &Close - Zam&knij - - - - Continue with setup? - Kontynuować z programem instalacyjnym? - - - - 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> - Instalator %1 zamierza przeprowadzić zmiany na Twoim dysku, aby zainstalować %2.<br/><strong>Nie będziesz mógł cofnąć tych zmian.</strong> - - - - &Install now - &Zainstaluj teraz - - - - Go &back - &Cofnij się - - - - &Done - &Ukończono - - - - The installation is complete. Close the installer. - Instalacja ukończona pomyślnie. Możesz zamknąć instalator. - - - - Error - Błąd - - - - Installation Failed - Wystąpił błąd instalacji - CalamaresPython::Helper - + Unknown exception type Nieznany rodzaj wyjątku - + unparseable Python error nieparowalny błąd Pythona - + unparseable Python traceback nieparowalny traceback Pythona - + Unfetchable Python error. Nieosiągalny błąd Pythona. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Wstecz - - - - &Next - &Dalej - - - - &Cancel - &Anuluj - - - + %1 Setup Program - + %1 Installer Instalator %1 + + + ChangeFilesystemLabelJob - - Show debug information - Pokaż informacje debugowania + + Set filesystem label on %1. + Ustaw etykietę systemu plików na %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Instalator nie mógł zaktualizować tablicy partycji na dysku '%1'. CheckerContainer - + Gathering system information... Zbieranie informacji o systemie... @@ -502,157 +526,197 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. ChoicePage - + Form Formularz - - After: - Po: - - - - Boot loader location: - Położenie programu rozruchowego: - - - + Select storage de&vice: &Wybierz urządzenie przechowywania: - - - - + + + + Current: Bieżący: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Po: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Ręczne partycjonowanie</strong><br/>Możesz samodzielnie utworzyć lub zmienić rozmiar istniejących partycji. + + + Reuse %1 as home partition for %2. Użyj ponownie %1 jako partycji domowej dla %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Wybierz partycję do zmniejszenia, a następnie przeciągnij dolny pasek, aby zmienić jej rozmiar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Położenie programu rozruchowego: + + + <strong>Select a partition to install on</strong> <strong>Wybierz partycję, na której przeprowadzona będzie instalacja</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nigdzie w tym systemie nie można odnaleźć partycji systemowej EFI. Prosimy się cofnąć i użyć ręcznego partycjonowania dysku do ustawienia %1. - + The EFI system partition at %1 will be used for starting %2. Partycja systemowa EFI na %1 będzie użyta do uruchamiania %2. - + EFI system partition: Partycja systemowa EFI: - + 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. To urządzenie pamięci masowej prawdopodobnie nie posiada żadnego systemu operacyjnego. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Wyczyść dysk</strong><br/>Ta operacja <font color="red">usunie</font> wszystkie dane obecnie znajdujące się na wybranym urządzeniu przechowywania. - - 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. - To urządzenie pamięci masowej posiada %1. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - - - - No Swap - Brak przestrzeni wymiany - - - - Reuse Swap - Użyj ponownie przestrzeni wymiany - - - - Swap (no Hibernate) - Przestrzeń wymiany (bez hibernacji) - - - - Swap (with Hibernate) - Przestrzeń wymiany (z hibernacją) - - - - Swap to file - Przestrzeń wymiany do pliku - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Zainstaluj obok siebie</strong><br/>Instalator zmniejszy partycję, aby zrobić miejsce dla %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zastąp partycję</strong><br/>Zastępowanie partycji poprzez %1. - + + 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. + To urządzenie pamięci masowej posiada %1. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. + + + 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. To urządzenie pamięci masowej posiada już system operacyjny. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. - + 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. To urządzenie pamięci masowej posiada kilka systemów operacyjnych. Co chcesz zrobić?<br/>Będziesz miał możliwość przejrzenia oraz zatwierdzenia swoich ustawień przed wykonaniem jakichkolwiek zmian na tym urządzeniu. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + Brak przestrzeni wymiany + + + + Reuse Swap + Użyj ponownie przestrzeni wymiany + + + + Swap (no Hibernate) + Przestrzeń wymiany (bez hibernacji) + + + + Swap (with Hibernate) + Przestrzeń wymiany (z hibernacją) + + + + Swap to file + Przestrzeń wymiany do pliku + ClearMountsJob - + + Successfully unmounted %1. + Pomyślnie odmontowano %1. + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Wyczyść zamontowania dla operacji partycjonowania na %1 - + Clearing mounts for partitioning operations on %1. Czyszczenie montowań dla operacji partycjonowania na %1. - + Cleared all mounts for %1 Wyczyszczono wszystkie zamontowania dla %1 @@ -660,22 +724,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. ClearTempMountsJob - + Clear all temporary mounts. Wyczyść wszystkie tymczasowe montowania. - + Clearing all temporary mounts. Usuwanie wszystkich tymczasowych punktów montowania. - - Cannot get list of temporary mounts. - Nie można uzyskać listy tymczasowych montowań. - - - + Cleared all temporary mounts. Wyczyszczono wszystkie tymczasowe montowania. @@ -683,18 +742,18 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. CommandList - - + + Could not run command. Nie można wykonać polecenia. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Polecenie uruchomione jest w środowisku hosta i musi znać ścieżkę katalogu głównego, jednakże nie został określony punkt montowania katalogu głównego (root). - + The command needs to know the user's name, but no username is defined. Polecenie musi znać nazwę użytkownika, ale żadna nazwa nie została jeszcze zdefiniowana. @@ -702,100 +761,235 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ten komputer nie spełnia minimalnych wymagań, niezbędnych do instalacji %1.<br/>Instalacja nie może być kontynuowana. <a href="#details">Szczegóły...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Ten komputer nie spełnia wszystkich, zalecanych do instalacji %1 wymagań.<br/>Instalacja może być kontynuowana, ale niektóre opcje mogą być niedostępne. - - - - This program will ask you some questions and set up %2 on your computer. - Ten program zada Ci garść pytań i ustawi %2 na Twoim komputerze. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - <h1>Witamy w ustawianiu %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Witamy w instalatorze Calamares dla systemu %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Witamy w instalatorze %1.</h1> - - - + Set keyboard model to %1.<br/> Ustaw model klawiatury na %1.<br/> - + Set keyboard layout to %1/%2. Ustaw model klawiatury na %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. Język systemu zostanie ustawiony na %1. - + The numbers and dates locale will be set to %1. Format liczb i daty zostanie ustawiony na %1. - - Set timezone to %1/%2.<br/> - Ustaw strefę czasową na %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Instalacja sieciowa. (Niedostępna: Otrzymano nieprawidłowe dane grupowe) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Wybór pakietów + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalacja sieciowa. (Wyłączona: Nie można pobrać listy pakietów, sprawdź swoje połączenie z siecią) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Ten komputer nie spełnia minimalnych wymagań, niezbędnych do instalacji %1.<br/>Instalacja nie może być kontynuowana. <a href="#details">Szczegóły...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Ten komputer nie spełnia wszystkich, zalecanych do instalacji %1 wymagań.<br/>Instalacja może być kontynuowana, ale niektóre opcje mogą być niedostępne. + + + + This program will ask you some questions and set up %2 on your computer. + Ten program zada Ci garść pytań i ustawi %2 na Twoim komputerze. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Twoja nazwa użytkownika jest za długa. + + + + '%1' is not allowed as username. + '%1' nie może zostać użyte jako nazwa użytkownika. + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Twoja nazwa komputera jest za krótka. + + + + Your hostname is too long. + Twoja nazwa komputera jest za długa. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Twoje hasła nie są zgodne! + + + + OK! + OK! + + + + Setup Failed + Nieudane ustawianie + + + + Installation Failed + Wystąpił błąd instalacji + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Ustawianie ukończone + + + + Installation Complete + Instalacja zakończona + + + + The setup of %1 is complete. + Ustawianie %1 jest ukończone. + + + + The installation of %1 is complete. + Instalacja %1 ukończyła się pomyślnie. + + + + Package Selection + Wybór Pakietów + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Podsumowanie + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + To jest podsumowanie czynności, które zostaną wykonane po rozpoczęciu przez Ciebie instalacji. + ContextualProcessJob - + Contextual Processes Job Działania procesów kontekstualnych @@ -803,100 +997,136 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. CreatePartitionDialog - + Create a Partition Utwórz partycję - - MiB - MB - - - - Partition &Type: - Rodzaj par&tycji: - - - - &Primary - &Podstawowa - - - - E&xtended - Ro&zszerzona - - - - Fi&le System: - System p&lików: - - - - LVM LV name - Nazwa LV LVM - - - - Flags: - Flagi: - - - - &Mount Point: - Punkt &montowania: - - - + Si&ze: Ro&zmiar: - + + MiB + MB + + + + Partition &Type: + Rodzaj par&tycji: + + + + Primar&y + + + + + E&xtended + Ro&zszerzona + + + + Fi&le System: + System p&lików: + + + + LVM LV name + Nazwa LV LVM + + + + &Mount Point: + Punkt &montowania: + + + + Flags: + Flagi: + + + + Label for the filesystem + Etykieta dla systemu plików + + + + FS Label: + + + + En&crypt Zaszy%fruj - + Logical Logiczna - + Primary Podstawowa - + GPT GPT - + Mountpoint already in use. Please select another one. Punkt montowania jest już używany. Proszę wybrać inny. + + + Mountpoint must start with a <tt>/</tt>. + Punkt montowania musi się zaczynać od <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Tworzenie nowej partycji %1 na %2. - + The installer failed to create partition on disk '%1'. Instalator nie mógł utworzyć partycji na dysku '%1'. @@ -904,27 +1134,27 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. CreatePartitionTableDialog - + Create Partition Table Utwórz tablicę partycji - + Creating a new partition table will delete all existing data on the disk. Utworzenie nowej tablicy partycji usunie wszystkie istniejące na dysku dane. - + What kind of partition table do you want to create? Jaki rodzaj tablicy partycji chcesz utworzyć? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) Tablica partycji GUID (GPT) @@ -932,22 +1162,22 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. CreatePartitionTableJob - + Create new %1 partition table on %2. Utwórz nową tablicę partycję %1 na %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Utwórz nową tabelę partycji <strong>%1</strong> na <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Tworzenie nowej tablicy partycji %1 na %2. - + The installer failed to create a partition table on %1. Instalator nie mógł utworzyć tablicy partycji na %1. @@ -955,45 +1185,41 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. CreateUserJob - + Create user %1 Utwórz użytkownika %1 - + Create user <strong>%1</strong>. Utwórz użytkownika <strong>%1</strong>. - - Creating user %1. - Tworzenie użytkownika %1. + + Preserving home directory + - - Sudoers dir is not writable. - Katalog sudoers nie ma prawa do zapisu. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Nie można utworzyć pliku sudoers z możliwością zapisu. + + Configuring user %1 + - - Cannot chmod sudoers file. - Nie można wykonać chmod na pliku sudoers. - - - - Cannot open groups file for reading. - Nie można otworzyć pliku groups do odczytu. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -1001,22 +1227,22 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. CreateVolumeGroupJob - + Create new volume group named %1. Utwórz nową grupę woluminów o nazwie %1. - + Create new volume group named <strong>%1</strong>. Utwórz nową grupę woluminów o nazwie <strong>%1</strong>. - + Creating new volume group named %1. Tworzenie nowej grupy woluminów o nazwie %1. - + The installer failed to create a volume group named '%1'. Instalator nie mógł utworzyć grupy woluminów o nazwie %1 @@ -1024,18 +1250,18 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Dezaktywuj grupę woluminów o nazwie %1 - + Deactivate volume group named <strong>%1</strong>. Dezaktywuj grupę woluminów o nazwie <strong>%1</strong> - + The installer failed to deactivate a volume group named %1. Instalator nie mógł dezaktywować grupy woluminów o nazwie %1 @@ -1043,22 +1269,22 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. DeletePartitionJob - + Delete partition %1. Usuń partycję %1. - + Delete partition <strong>%1</strong>. Usuń partycję <strong>%1</strong>. - + Deleting partition %1. Usuwanie partycji %1. - + The installer failed to delete partition %1. Instalator nie mógł usunąć partycji %1. @@ -1066,46 +1292,46 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. DeviceInfoWidget - - 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. - Typ <strong>tabeli partycji</strong> na zaznaczonym nośniku danych.<br><br>Jedyną metodą na zmianę tabeli partycji jest jej wyczyszczenie i utworzenie jej od nowa, co spowoduje utratę wszystkich danych.<br>Ten instalator zachowa obecną tabelę partycji, jeżeli nie wybierzesz innej opcji.<br>W wypadku niepewności, w nowszych systemach zalecany jest GPT. - - - + This device has a <strong>%1</strong> partition table. To urządzenie ma <strong>%1</strong> tablicę partycji. - + 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. To jest urządzenie <strong>pętli zwrotnej</strong>. To jest pseudo-urządzenie, które nie posiada tabeli partycji, która czyni plik dostępny jako urządzenie blokowe. Ten rodzaj instalacji zwykle zawiera tylko jeden system plików. - + 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. Instalator <strong>nie mógł znaleźć tabeli partycji</strong> na zaznaczonym nośniku danych.<br><br>Urządzenie nie posiada tabeli partycji bądź jest ona uszkodzona lub nieznanego rodzaju.<br>Instalator może utworzyć dla Ciebie nową tabelę partycji automatycznie, lub możesz uczynić to ręcznie. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Zalecany rodzaj tabeli partycji dla nowoczesnych systemów uruchamianych przez <strong>EFI</strong>. - + <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. <br><br>Ten rodzaj tabeli partycji jest zalecany tylko dla systemów uruchamianych ze środowiska uruchomieniowego <strong>BIOS</strong>. GPT jest zalecane w większości innych wypadków.<br><br><strong>Ostrzeżenie:</strong> tabele partycji MBR są przestarzałym standardem z ery MS-DOS.<br>Możesz posiadać tylko 4 partycje <em>podstawowe</em>, z których jedna może być partycją <em>rozszerzoną</em>, zawierającą wiele partycji <em>logicznych</em>. + + + 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. + Typ <strong>tabeli partycji</strong> na zaznaczonym nośniku danych.<br><br>Jedyną metodą na zmianę tabeli partycji jest jej wyczyszczenie i utworzenie jej od nowa, co spowoduje utratę wszystkich danych.<br>Ten instalator zachowa obecną tabelę partycji, jeżeli nie wybierzesz innej opcji.<br>W wypadku niepewności, w nowszych systemach zalecany jest GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1114,17 +1340,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Zapisz konfigurację LUKS dla Dracut do %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Pominięto zapisywanie konfiguracji LUKS dla Dracut: partycja "/" nie jest szyfrowana - + Failed to open %1 Nie udało się otworzyć %1 @@ -1132,7 +1358,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. DummyCppJob - + Dummy C++ Job Działanie obiektu Dummy C++ @@ -1140,123 +1366,167 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. EditExistingPartitionDialog - + Edit Existing Partition Edycja istniejącej partycji - - Content: - Zawartość: + + Con&tent: + - + &Keep &Zachowaj - + Format Sformatuj - + Warning: Formatting the partition will erase all existing data. Ostrzeżenie: Sformatowanie partycji wymaże wszystkie istniejące na niej dane. - + &Mount Point: Punkt &montowania: - + Si&ze: Ro&zmiar: - + MiB MB - + Fi&le System: System p&lików: - + Flags: Flagi: - - Mountpoint already in use. Please select another one. - Punkt montowania jest już używany. Proszę wybrać inny. + + Label for the filesystem + Etykieta dla systemu plików + + + + FS Label: + EncryptWidget - + Form Formularz - + En&crypt system Zaszy&fruj system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Hasło - + Confirm passphrase Potwierdź hasło - + + Please enter the same passphrase in both boxes. Użyj tego samego hasła w obu polach. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Ustaw informacje partycji - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Zainstaluj %1 na <strong>nowej</strong> partycji systemowej %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Ustaw <strong>nową</strong> partycję %2 z punktem montowania <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Zainstaluj %2 na partycji systemowej %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Ustaw partycję %3 <strong>%1</strong> z punktem montowania <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Zainstaluj program rozruchowy na <strong>%1</strong>. - + Setting up mount points. Ustawianie punktów montowania. @@ -1264,93 +1534,81 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. FinishedPage - + Form Form - + &Restart now &Uruchom ponownie teraz - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Wszystko gotowe.</h1><br/>%1 został zainstalowany na Twoim komputerze.<br/>Możesz teraz ponownie uruchomić komputer, aby przejść do nowego systemu, albo kontynuować używanie środowiska live %2. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalacja nie powiodła się</h1><br/>Nie udało się zainstalować %1 na Twoim komputerze.<br/>Komunikat o błędzie: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Koniec + + + FinishedViewStep - - Setup Complete - Ustawianie ukończone - - - - Installation Complete - Instalacja zakończona - - - - The setup of %1 is complete. - Ustawianie %1 jest ukończone. - - - - The installation of %1 is complete. - Instalacja %1 ukończyła się pomyślnie. + + Finish + Koniec FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatowanie partycji %1 z systemem plików %2. - + The installer failed to format partition %1 on disk '%2'. Instalator nie mógł sformatować partycji %1 na dysku '%2'. @@ -1358,72 +1616,72 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source jest podłączony do źródła zasilania - + The system is not plugged in to a power source. System nie jest podłączony do źródła zasilania. - + is connected to the Internet jest podłączony do Internetu - + The system is not connected to the Internet. System nie jest podłączony do Internetu. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Instalator jest uruchomiony bez praw administratora. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Zbyt niska rozdzielczość ekranu, aby wyświetlić instalator. @@ -1431,7 +1689,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. HostInfoJob - + Collecting information about your machine. @@ -1439,25 +1697,25 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1465,7 +1723,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. InitcpioJob - + Creating initramfs with mkinitcpio. Tworzenie initramfs z mkinitcpio. @@ -1473,7 +1731,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. InitramfsJob - + Creating initramfs. Tworzenie initramfs. @@ -1481,17 +1739,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. InteractiveTerminalPage - + Konsole not installed Konsole jest niezainstalowany - + Please install KDE Konsole and try again! Zainstaluj KDE Konsole i spróbuj ponownie! - + Executing script: &nbsp;<code>%1</code> Wykonywanie skryptu: &nbsp;<code>%1</code> @@ -1499,28 +1757,15 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. InteractiveTerminalViewStep - + Script Skrypt - - KeyboardPage - - - Set keyboard model to %1.<br/> - Ustaw model klawiatury na %1.<br/> - - - - Set keyboard layout to %1/%2. - Ustaw model klawiatury na %1/%2. - - KeyboardQmlViewStep - + Keyboard Klawiatura @@ -1528,7 +1773,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. KeyboardViewStep - + Keyboard Klawiatura @@ -1536,65 +1781,88 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. LCLocaleDialog - + System locale setting Systemowe ustawienia lokalne - + 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>. Systemowe ustawienia lokalne wpływają na ustawienia języka i znaków w niektórych elementach wiersza poleceń interfejsu użytkownika.<br/>Bieżące ustawienie to <strong>%1</strong>. - + &Cancel &Anuluj - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Konfigurowanie zaszyfrowanej przestrzeni wymiany. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formularz - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Akceptuję powyższe warunki korzystania. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1602,7 +1870,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. LicenseViewStep - + License Licencja @@ -1610,109 +1878,102 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>sterownik %1</strong><br/>autorstwa %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>sterownik graficzny %1</strong><br/><font color="Grey">autorstwa %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>wtyczka do przeglądarki %1</strong><br/><font color="Grey">autorstwa %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>kodek %1</strong><br/><font color="Grey">autorstwa %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>pakiet %1</strong><br/><font color="Grey">autorstwa %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">autorstwa %2</font> - + File: %1 - + + Hide license text + + + + Show the license text Pokaż tekst licencji - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Język systemu zostanie ustawiony na %1. - - - - The numbers and dates locale will be set to %1. - Format liczb i daty zostanie ustawiony na %1. - - - + Region: Region: - + Zone: Strefa: - - + + &Change... &Zmień... - - - Set timezone to %1/%2.<br/> - Ustaw strefę czasową na %1/%2.<br/> - LocaleQmlViewStep - + Location Położenie + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Położenie @@ -1720,35 +1981,35 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. LuksBootKeyFileJob - + Configuring LUKS key file. Konfigurowanie pliku klucza LUKS. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1756,116 +2017,130 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. MachineIdJob - + Generate machine-id. Generuj machine-id. - + Configuration Error Błąd konfiguracji - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + Strefa czasowa: %1 + + + + 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. + + + NetInstallViewStep - - + Package selection Wybór pakietów - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1873,7 +2148,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. NotesQmlViewStep - + Notes @@ -1881,17 +2156,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1899,314 +2174,397 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. OEMViewStep - + OEM Configuration Konfiguracja OEM - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Strefa czasowa: %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Hasło jest zbyt krótkie - + Password is too long Hasło jest zbyt długie - + Password is too weak Hasło jest zbyt słabe - + Memory allocation error when setting '%1' Wystąpił błąd przydzielania pamięci przy ustawieniu '%1' - + Memory allocation error Błąd przydzielania pamięci - + The password is the same as the old one Hasło jest takie samo jak poprzednie - + The password is a palindrome Hasło jest palindromem - + The password differs with case changes only Hasła różnią się tylko wielkością znaków - + The password is too similar to the old one Hasło jest zbyt podobne do poprzedniego - + The password contains the user name in some form Hasło zawiera nazwę użytkownika - + The password contains words from the real name of the user in some form Hasło zawiera fragment pełnej nazwy użytkownika - + The password contains forbidden words in some form Hasło zawiera jeden z niedozwolonych wyrazów - - The password contains less than %1 digits - Hasło składa się z mniej niż %1 znaków - - - + The password contains too few digits Hasło zawiera zbyt mało znaków - - The password contains less than %1 uppercase letters - Hasło składa się z mniej niż %1 wielkich liter - - - + The password contains too few uppercase letters Hasło zawiera zbyt mało wielkich liter - - - The password contains less than %1 lowercase letters - Hasło składa się z mniej niż %1 małych liter + + + The password contains fewer than %n lowercase letters + + Hasło składa się z mniej niż %1 małej litery + Hasło składa się z mniej niż %1 małych liter + Hasło składa się z mniej niż %1 małych liter + Hasło składa się z mniej niż %1 małych liter + - + The password contains too few lowercase letters Hasło zawiera zbyt mało małych liter - - The password contains less than %1 non-alphanumeric characters - Hasło składa się z mniej niż %1 znaków niealfanumerycznych - - - + The password contains too few non-alphanumeric characters Hasło zawiera zbyt mało znaków niealfanumerycznych - - The password is shorter than %1 characters - Hasło zawiera mniej niż %1 znaków - - - + The password is too short Hasło jest zbyt krótkie - - The password is just rotated old one - Hasło jest odwróceniem poprzedniego - - - - The password contains less than %1 character classes - Hasło składa się z mniej niż %1 rodzajów znaków - - - + The password does not contain enough character classes Hasło zawiera zbyt mało rodzajów znaków - - The password contains more than %1 same characters consecutively - Hasło zawiera ponad %1 powtarzających się tych samych znaków - - - + The password contains too many same characters consecutively Hasło zawiera zbyt wiele powtarzających się znaków - - The password contains more than %1 characters of the same class consecutively - Hasło zawiera więcej niż %1 znaków tego samego rodzaju - - - + The password contains too many characters of the same class consecutively Hasło składa się ze zbyt wielu znaków tego samego rodzaju - - - The password contains monotonic sequence longer than %1 characters - Hasło zawiera jednakowy ciąg dłuższy niż %1 znaków + + + The password contains fewer than %n digits + + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + + The password is shorter than %n characters + + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + + The password contains too long of a monotonic character sequence Hasło zawiera zbyt długi ciąg jednakowych znaków - + No password supplied Nie podano hasła - + Cannot obtain random numbers from the RNG device Nie można uzyskać losowych znaków z urządzenia RNG - + Password generation failed - required entropy too low for settings Błąd tworzenia hasła - wymagana entropia jest zbyt niska dla ustawień - + The password fails the dictionary check - %1 Hasło nie przeszło pomyślnie sprawdzenia słownikowego - %1 - + The password fails the dictionary check Hasło nie przeszło pomyślnie sprawdzenia słownikowego - + Unknown setting - %1 Nieznane ustawienie - %1 - + Unknown setting Nieznane ustawienie - + Bad integer value of setting - %1 Błędna wartość liczby całkowitej ustawienia - %1 - + Bad integer value Błędna wartość liczby całkowitej - + Setting %1 is not of integer type Ustawienie %1 nie jest liczbą całkowitą - + Setting is not of integer type Ustawienie nie jest liczbą całkowitą - + Setting %1 is not of string type Ustawienie %1 nie jest ciągiem znaków - + Setting is not of string type Ustawienie nie jest ciągiem znaków - + Opening the configuration file failed Nie udało się otworzyć pliku konfiguracyjnego - + The configuration file is malformed Plik konfiguracyjny jest uszkodzony - + Fatal failure Błąd krytyczny - + Unknown error Nieznany błąd - + Password is empty - + Hasło jest puste PackageChooserPage - + Form Formularz - + Product Name - + TextLabel EtykietaTekstowa - + Long Product Description - + Package Selection - + Wybór Pakietów - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + Pakiety + + PackageChooserViewStep - + Packages - + Pakiety PackageModel - + Name Nazwa - + Description Opis @@ -2214,17 +2572,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. Page_Keyboard - + Form Form - + Keyboard Model: Model klawiatury: - + Type here to test your keyboard Napisz coś tutaj, aby sprawdzić swoją klawiaturę @@ -2232,96 +2590,96 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. Page_UserSetup - + Form Form - + What is your name? Jak się nazywasz? - + + Your Full Name + Twoja Pełne Imię + + + What name do you want to use to log in? Jakiego imienia chcesz używać do logowania się? - - Choose a password to keep your account safe. - Wybierz hasło, aby chronić swoje konto. + + login + login - - - <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> - <small>Wpisz swoje hasło dwa razy, aby mieć pewność, że uniknąłeś literówek. Dobre hasło powinno zawierać mieszaninę liter, cyfr, znaków specjalnych; mieć przynajmniej 8 znaków i być regularnie zmieniane.</small> - - - + What is the name of this computer? Jaka jest nazwa tego komputera? - - Your Full Name - - - - - login - - - - + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ta nazwa będzie używana, jeśli udostępnisz swój komputer w sieci.</small> - + Computer Name - + Nazwa Komputera - - + + Choose a password to keep your account safe. + Wybierz hasło, aby chronić swoje konto. + + + + + <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> + <small>Wpisz swoje hasło dwa razy, aby mieć pewność, że uniknąłeś literówek. Dobre hasło powinno zawierać mieszaninę liter, cyfr, znaków specjalnych; mieć przynajmniej 8 znaków i być regularnie zmieniane.</small> + + + + Password - + Hasło - - + + Repeat Password - + Powtórz Hasło - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Zaloguj automatycznie bez proszenia o hasło. - + Use the same password for the administrator account. Użyj tego samego hasła dla konta administratora. - + Choose a password for the administrator account. Wybierz hasło do konta administratora. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Wpisz to samo hasło dwa razy, aby mieć pewność, że uniknąłeś literówek.</small> @@ -2329,42 +2687,42 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PartitionLabelsView - + Root Systemowa - + Home Domowa - + Boot Rozruchowa - + EFI system System EFI - + Swap Przestrzeń wymiany - + New partition for %1 Nowa partycja dla %1 - + New partition Nowa partycja - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2373,34 +2731,39 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PartitionModel - - + + Free Space Wolna powierzchnia - - + + New partition Nowa partycja - + Name Nazwa - + File System System plików - + + File System Label + Etykieta Systemu Plików + + + Mount Point Punkt montowania - + Size Rozmiar @@ -2408,77 +2771,77 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PartitionPage - + Form Form - + Storage de&vice: Urządzenie przecho&wywania: - + &Revert All Changes P&rzywróć do pierwotnego stanu - + New Partition &Table Nowa &tablica partycji - + Cre&ate Ut_wórz - + &Edit &Edycja - + &Delete U&suń - + New Volume Group Nowa Grupa Woluminów - + Resize Volume Group Zmień Rozmiar Grupy Woluminów - + Deactivate Volume Group Dezaktywuj Grupę Woluminów - + Remove Volume Group Usuń Grupę Woluminów - + I&nstall boot loader on: Zainstaluj program rozruchowy - + Are you sure you want to create a new partition table on %1? Czy na pewno chcesz utworzyć nową tablicę partycji na %1? - + Can not create new partition Nie można utworzyć nowej partycji - + 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. Tablica partycji na %1 ma już %2 podstawowych partycji i więcej nie może już być dodanych. Prosimy o usunięcie jednej partycji systemowej i dodanie zamiast niej partycji rozszerzonej. @@ -2486,117 +2849,107 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PartitionViewStep - + Gathering system information... Zbieranie informacji o systemie... - + Partitions Partycje - - Install %1 <strong>alongside</strong> another operating system. - Zainstaluj %1 <strong>obok</strong> innego systemu operacyjnego. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Wyczyść</strong> dysk i zainstaluj %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Zastąp</strong> partycję poprzez %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Ręczne</strong> partycjonowanie. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Zainstaluj %1 <strong>obok</strong> innego systemu operacyjnego na dysku <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Wyczyść</strong> dysk <strong>%2</strong> (%3) i zainstaluj %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Zastąp</strong> partycję na dysku <strong>%2</strong> (%3) poprzez %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Ręczne</strong> partycjonowanie na dysku <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Dysk <strong>%1</strong> (%2) - - - + Current: Bieżący: - + After: Po: - + No EFI system partition configured Nie skonfigurowano partycji systemowej EFI - - 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>esp</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. - Partycja systemu EFI jest zalecana aby rozpocząć %1.<br/><br/>Aby ją skonfigurować, wróć i wybierz lub utwórz partycję z systemem plików FAT32 i flagą <strong>esp</strong> o punkcie montowania <strong>%2</strong>.<br/><br/>Możesz kontynuować bez ustawiania partycji systemu EFI, ale twój system może nie uruchomić się. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Flaga partycji systemowej EFI nie została ustawiona + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Partycja systemu EFI jest konieczna, aby rozpocząć %1.<br/><br/>Partycja została skonfigurowana w punkcie montowania <strong>%2</strong>, ale nie została ustawiona flaga <strong>esp</strong>. Aby ustawić tę flagę, wróć i zmodyfikuj tę partycję.<br/><br/>Możesz kontynuować bez ustawienia tej flagi, ale Twój system może się nie uruchomić. + + The filesystem must be mounted on <strong>%1</strong>. + System plików musi zostać zamontowany w <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Niezaszyfrowana partycja rozruchowa - + 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. Oddzielna partycja rozruchowa została skonfigurowana razem z zaszyfrowaną partycją roota, ale partycja rozruchowa nie jest szyfrowana.<br/><br/>Nie jest to najbezpieczniejsze rozwiązanie, ponieważ ważne pliki systemowe znajdują się na niezaszyfrowanej partycji.<br/>Możesz kontynuować, ale odblokowywanie systemu nastąpi później, w trakcie uruchamiania.<br/>Aby zaszyfrować partycję rozruchową, wróć i utwórz ją ponownie zaznaczając opcję <strong>Szyfruj</strong> w oknie tworzenia partycji. - + has at least one disk device available. - + There are no partitions to install on. @@ -2604,13 +2957,13 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PlasmaLnfJob - + Plasma Look-and-Feel Job Działania Wyglądu-i-Zachowania Plasmy - - + + Could not select KDE Plasma Look-and-Feel package Nie można wybrać pakietu Wygląd-i-Zachowanie Plasmy KDE @@ -2618,17 +2971,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PlasmaLnfPage - + Form Formularz - + 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. - + 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. Wybierz wygląd i styl pulpitu Plazmy KDE. Możesz również pominąć ten krok i skonfigurować wygląd po zainstalowaniu systemu. Kliknięcie przycisku wyboru wyglądu i stylu daje podgląd na żywo tego wyglądu i stylu. @@ -2636,7 +2989,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PlasmaLnfViewStep - + Look-and-Feel Wygląd-i-Zachowanie @@ -2644,17 +2997,17 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. PreserveFiles - + Saving files for later ... Zapisywanie plików na później ... - + No files configured to save for later. Nie skonfigurowano żadnych plików do zapisania na później. - + Not all of the configured files could be preserved. Nie wszystkie pliki konfiguracyjne mogą być zachowane. @@ -2662,14 +3015,14 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone. ProcessResult - + There was no output from the command. W wyniku polecenia nie ma żadnego rezultatu. - + Output: @@ -2678,52 +3031,52 @@ Wyjście: - + External command crashed. Zewnętrzne polecenie zakończone niepowodzeniem. - + Command <i>%1</i> crashed. Wykonanie polecenia <i>%1</i> nie powiodło się. - + External command failed to start. Nie udało się uruchomić zewnętrznego polecenia. - + Command <i>%1</i> failed to start. Polecenie <i>%1</i> nie zostało uruchomione. - + Internal error when starting command. Wystąpił wewnętrzny błąd podczas uruchamiania polecenia. - + Bad parameters for process job call. Błędne parametry wywołania zadania. - + External command failed to finish. Nie udało się ukończyć zewnętrznego polecenia. - + Command <i>%1</i> failed to finish in %2 seconds. Nie udało się ukończyć polecenia <i>%1</i> w ciągu %2 sekund. - + External command finished with errors. Ukończono zewnętrzne polecenie z błędami. - + Command <i>%1</i> finished with exit code %2. Polecenie <i>%1</i> zostało ukończone z błędem o kodzie %2. @@ -2731,89 +3084,94 @@ Wyjście: QObject - - Default Keyboard Model - Domyślny model klawiatury - - - - - Default - Domyślnie - - - - unknown - nieznany - - - - extended - rozszerzona - - - - unformatted - niesformatowany - - - - swap - przestrzeń wymiany - - - - Unpartitioned space or unknown partition table - Przestrzeń bez partycji lub nieznana tabela partycji - - - - (no mount point) - (brak punktu montowania) - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + nieznany - - No description provided. - + + extended + rozszerzona - - - - + + unformatted + niesformatowany + + + + swap + przestrzeń wymiany + + + + + Default + Domyślnie + + + + + + File not found - + Plik nie został znaleziony - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + Katalog nie został znaleziony + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + (brak punktu montowania) + + + + Unpartitioned space or unknown partition table + Przestrzeń bez partycji lub nieznana tabela partycji + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2821,18 +3179,18 @@ Wyjście: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Usuń Grupę Woluminów o nazwie %1 - + Remove Volume Group named <strong>%1</strong>. Usuń Grupę Woluminów o nazwie <strong>%1</strong> - + The installer failed to remove a volume group named '%1'. Instalator nie mógł usunąć grupy woluminów o nazwie %1 @@ -2840,144 +3198,159 @@ Wyjście: ReplaceWidget - + Form Formularz - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Wskaż gdzie zainstalować %1.<br/><font color="red">Uwaga: </font>na wybranej partycji zostaną usunięte wszystkie pliki. - + The selected item does not appear to be a valid partition. Wybrany element zdaje się nie być poprawną partycją. - + %1 cannot be installed on empty space. Please select an existing partition. Nie można zainstalować %1 na pustej przestrzeni. Prosimy wybrać istniejącą partycję. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. Nie można zainstalować %1 na rozszerzonej partycji. Prosimy wybrać istniejącą partycję podstawową lub logiczną. - + %1 cannot be installed on this partition. %1 nie może zostać zainstalowany na tej partycji. - + Data partition (%1) Partycja z danymi (%1) - + Unknown system partition (%1) Nieznana partycja systemowa (%1) - + %1 system partition (%2) %1 partycja systemowa (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partycja %1 jest zbyt mała dla %2. Prosimy wybrać partycję o pojemności przynajmniej %3 GB. - + <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. <strong>%2</strong><br/><br/>Nigdzie w tym systemie nie można odnaleźć partycji systemowej EFI. Prosimy się cofnąć i użyć ręcznego partycjonowania dysku do ustawienia %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 zostanie zainstalowany na %2.<br/><font color="red">Uwaga: </font>wszystkie dane znajdujące się na partycji %2 zostaną utracone. - + The EFI system partition at %1 will be used for starting %2. Partycja systemowa EFI na %1 będzie użyta do uruchamiania %2. - + EFI system partition: Partycja systemowa EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job Zmień Rozmiar zadania systemu plików - + Invalid configuration Nieprawidłowa konfiguracja - + The file-system resize job has an invalid configuration and will not run. Zadanie zmiany rozmiaru systemu plików ma nieprawidłową konfigurację i nie uruchomi się - + KPMCore not Available KPMCore nie dostępne - + Calamares cannot start KPMCore for the file-system resize job. Calamares nie może uruchomić KPMCore dla zadania zmiany rozmiaru systemu plików - - - - - + + + + + Resize Failed Nieudana zmiana rozmiaru - + The filesystem %1 could not be found in this system, and cannot be resized. System plików %1 nie mógł być znaleziony w tym systemie i nie może być zmieniony rozmiar - + The device %1 could not be found in this system, and cannot be resized. Urządzenie %1 nie mogło być znalezione w tym systemie i zmiana rozmiaru jest nie dostępna - - + + The filesystem %1 cannot be resized. Zmiana rozmiaru w systemie plików %1 niedostępna - - + + The device %1 cannot be resized. Zmiana rozmiaru w urządzeniu %1 niedostępna - + The filesystem %1 must be resized, but cannot. Wymagana zmiana rozmiaru w systemie plików %1 , ale jest niedostępna - + The device %1 must be resized, but cannot Wymagana zmiana rozmiaru w urządzeniu %1 , ale jest niedostępna @@ -2985,22 +3358,22 @@ i nie uruchomi się ResizePartitionJob - + Resize partition %1. Zmień rozmiar partycji %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Instalator nie mógł zmienić rozmiaru partycji %1 na dysku '%2'. @@ -3008,7 +3381,7 @@ i nie uruchomi się ResizeVolumeGroupDialog - + Resize Volume Group Zmień Rozmiar Grupy Woluminów @@ -3016,18 +3389,18 @@ i nie uruchomi się ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Zmień rozmiar grupy woluminów o nazwie %1 od %2 do %3 - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Zmień rozmiar grupy woluminów o nazwie <strong>%1</strong> od <strong>%2</strong> do <strong>%3</strong> - + The installer failed to resize a volume group named '%1'. Instalator nie mógł zmienić rozmiaru grupy woluminów o nazwie %1 @@ -3035,53 +3408,25 @@ i nie uruchomi się ResultsListDialog - + For best results, please ensure that this computer: Dla osiągnięcia najlepszych rezultatów upewnij się, że ten komputer: - + System requirements Wymagania systemowe - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ten komputer nie spełnia minimalnych wymagań, niezbędnych do instalacji %1.<br/>Instalacja nie może być kontynuowana. <a href="#details">Szczegóły...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Ten komputer nie spełnia wszystkich, zalecanych do instalacji %1 wymagań.<br/>Instalacja może być kontynuowana, ale niektóre opcje mogą być niedostępne. - - - - This program will ask you some questions and set up %2 on your computer. - Ten program zada Ci garść pytań i ustawi %2 na Twoim komputerze. - - ScanningDialog - + Scanning storage devices... Skanowanie urządzeń przechowywania... - + Partitioning Partycjonowanie @@ -3089,29 +3434,29 @@ i nie uruchomi się SetHostNameJob - + Set hostname %1 Ustaw nazwę komputera %1 - + Set hostname <strong>%1</strong>. Ustaw nazwę komputera <strong>%1</strong>. - + Setting hostname %1. Ustawianie nazwy komputera %1. + - Internal Error Błąd wewnętrzny - - + + Cannot write hostname to target system Nie można zapisać nazwy komputera w docelowym systemie @@ -3119,29 +3464,29 @@ i nie uruchomi się SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Ustaw model klawiatury na %1, jej układ na %2-%3 - + Failed to write keyboard configuration for the virtual console. Błąd zapisu konfiguracji klawiatury dla konsoli wirtualnej. - - - + + + Failed to write to %1 Nie można zapisać do %1 - + Failed to write keyboard configuration for X11. Błąd zapisu konfiguracji klawiatury dla X11. - + Failed to write keyboard configuration to existing /etc/default directory. Błąd zapisu konfiguracji układu klawiatury dla istniejącego katalogu /etc/default. @@ -3149,82 +3494,82 @@ i nie uruchomi się SetPartFlagsJob - + Set flags on partition %1. Ustaw flagi na partycji %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Ustaw flagi na nowej partycji. - + Clear flags on partition <strong>%1</strong>. Usuń flagi na partycji <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Wyczyść flagi na nowej partycji. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Oflaguj partycję <strong>%1</strong> jako <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Oflaguj nową partycję jako <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Usuwanie flag na partycji <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Czyszczenie flag na nowej partycji. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Ustawianie flag <strong>%2</strong> na partycji <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Ustawianie flag <strong>%1</strong> na nowej partycji. - + The installer failed to set flags on partition %1. Instalator nie mógł ustawić flag na partycji %1. @@ -3232,42 +3577,42 @@ i nie uruchomi się SetPasswordJob - + Set password for user %1 Ustaw hasło dla użytkownika %1 - + Setting password for user %1. Ustawianie hasła użytkownika %1. - + Bad destination system path. Błędna ścieżka docelowa systemu. - + rootMountPoint is %1 Punkt montowania / to %1 - + Cannot disable root account. Nie można wyłączyć konta administratora. - + passwd terminated with error code %1. Zakończono passwd z kodem błędu %1. - + Cannot set password for user %1. Nie można ustawić hasła dla użytkownika %1. - + usermod terminated with error code %1. Polecenie usermod przerwane z kodem błędu %1. @@ -3275,45 +3620,82 @@ i nie uruchomi się SetTimezoneJob - + Set timezone to %1/%2 Ustaw strefę czasowa na %1/%2 - + Cannot access selected timezone path. Brak dostępu do wybranej ścieżki strefy czasowej. - + Bad path: %1 Niepoprawna ścieżka: %1 - + Cannot set timezone. Nie można ustawić strefy czasowej. - + Link creation failed, target: %1; link name: %2 Błąd tworzenia dowiązania, cel: %1; nazwa dowiązania: %2 - + Cannot set timezone, Nie można ustawić strefy czasowej, - + Cannot open /etc/timezone for writing Nie można otworzyć /etc/timezone celem zapisu + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Nie można wykonać chmod na pliku sudoers. + + + + Cannot create sudoers file for writing. + Nie można utworzyć pliku sudoers z możliwością zapisu. + + ShellProcessJob - + Shell Processes Job Działania procesów powłoki @@ -3321,81 +3703,117 @@ i nie uruchomi się SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - To jest podsumowanie czynności, które zostaną wykonane po rozpoczęciu przez Ciebie instalacji. + + &Yes + &Tak - - - SummaryViewStep - - Summary - Podsumowanie + + &No + &Nie + + + + &Cancel + &Anuluj + + + + &Close + Zam&knij TrackingInstallJob - + Installation feedback Informacja zwrotna o instalacji - + Sending installation feedback. Wysyłanie informacji zwrotnej o instalacji. - + Internal error in install-tracking. Błąd wewnętrzny śledzenia instalacji. - + HTTP request timed out. Wyczerpano limit czasu żądania HTTP. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Maszynowa informacja zwrotna - + Configuring machine feedback. Konfiguracja mechanizmu informacji zwrotnej. - - + + Error in machine feedback configuration. Błąd w konfiguracji maszynowej informacji zwrotnej. - + Could not configure machine feedback correctly, script error %1. Nie można poprawnie skonfigurować maszynowej informacji zwrotnej, błąd skryptu %1. - + Could not configure machine feedback correctly, Calamares error %1. Nie można poprawnie skonfigurować maszynowej informacji zwrotnej, błąd Calamares %1. @@ -3403,106 +3821,97 @@ i nie uruchomi się TrackingPage - + Form Formularz - + Placeholder Symbol zastępczy - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Jeżeli wybierzesz tą opcję, nie zostaną wysłane <span style=" font-weight:600;">żadne informacje</span> o Twojej instalacji.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Naciśnij, aby dowiedzieć się więcej o uzyskiwaniu informacji zwrotnych.</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Śledzenie instalacji pomoże %1 dowiedzieć się, ilu mają użytkowników, na jakim sprzęcie instalują %1 i (jeżeli wybierzesz dwie ostatnie opcje) uzyskać informacje o używanych aplikacjach. Jeżeli chcesz wiedzieć, jakie informacje będą wysyłane, naciśnij ikonę pomocy obok. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Jeżeli wybierzesz tę opcję, zostaną wysłane informacje dotyczące tej instalacji i używanego sprzętu. Zostaną wysłane <b>jednokrotnie</b> po zakończeniu instalacji. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Jeżeli wybierzesz tę opcję, <b>okazjonalnie</b> będą wysyłane informacje dotyczące tej instalacji, używanego sprzętu i aplikacji do %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Jeżeli wybierzesz tą opcję, <b>regularnie</b> będą wysyłane informacje dotyczące tej instalacji, używanego sprzętu i aplikacji do %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Informacje zwrotne + + UmountJob + + + Unmount file systems. + Odmontuj systemy plików. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Twoja nazwa użytkownika jest za długa. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Twoja nazwa komputera jest za krótka. - - - - Your hostname is too long. - Twoja nazwa komputera jest za długa. - - - - Your passwords do not match! - Twoje hasła nie są zgodne! + + Users + Użytkownicy UsersViewStep - + Users Użytkownicy @@ -3510,65 +3919,67 @@ i nie uruchomi się VariantModel - + Key - + Column header for key/value + Klucz - + Value + Column header for key/value Wartość VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes Lista fizycznych woluminów - + Volume Group Name: Nazwa Grupy Woluminów : - + Volume Group Type: Typ Grupy Woluminów - + Physical Extent Size: Rozmiar fizycznego rozszerzenia: - + MiB MB - + Total Size: Łączny Rozmiar : - + Used Size: Użyty rozmiar: - + Total Sectors: Łącznie Sektorów : - + Quantity of LVs: Ilość Grup Woluminów : @@ -3576,106 +3987,106 @@ i nie uruchomi się WelcomePage - + Form Formularz - - + + Select application and system language + &About + &Informacje + + + Open donations website - + &Donate - + Open help and support website + &Support + &Wsparcie + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - Informacje o &wydaniu - - - &Known issues &Znane problemy - - &Support - &Wsparcie + + Open release notes website + - - &About - &Informacje + + &Release notes + Informacje o &wydaniu - - <h1>Welcome to the %1 installer.</h1> - <h1>Witamy w instalatorze %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Witamy w instalatorze Calamares dla systemu %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Witamy w ustawianiu %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Witamy w instalatorze Calamares dla systemu %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Witamy w instalatorze %1.</h1> + + + + %1 support + Wsparcie %1 + + + About %1 setup - + About %1 installer O instalatorze %1 - + <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. - - - %1 support - Wsparcie %1 - WelcomeQmlViewStep - + Welcome Witamy @@ -3683,120 +4094,444 @@ i nie uruchomi się WelcomeViewStep - + Welcome Witamy + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Błąd konfiguracji + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + Wstecz + + + + calamares-sidebar + + + Show debug information + Pokaż informacje debugowania + + + + finishedq + + + Installation Completed + Instalacja została zakończona + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + Close Installer + Zamknij instalator + + + + Restart System + Uruchom ponownie system + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + Instalacja została zakończona + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + Wstecz + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Model klawiatury: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Napisz coś tutaj, aby sprawdzić swoją klawiaturę - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - - About + + LibreOffice - - Support + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. - - Known issues + + No Office Suite - - Release notes + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. - - Donate + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + release_notes + + + <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> + + + + + Back + Wstecz + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Jak się nazywasz? + + + + Your Full Name + Twoja Pełne Imię + + + + What name do you want to use to log in? + Jakiego imienia chcesz używać do logowania się? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Jaka jest nazwa tego komputera? + + + + Computer Name + Nazwa Komputera + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Wybierz hasło, aby chronić swoje konto. + + + + Password + Hasło + + + + Repeat Password + Powtórz Hasło + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Użyj tego samego hasła dla konta administratora. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + <h3>Witaj w instalatorze %1<quote>%2</quote></h3> + <p>Ten program zapyta cię o kilka rzeczy i ustawi %1 na twoim komputerze.</p> + + + + About + O nas + + + + Support + Wsparcie + + + + Known issues + Znane problemy + + + + Release notes + Informacje o wydaniu + + + + Donate + Dotacje + + diff --git a/lang/calamares_pt_BR.ts b/lang/calamares_pt_BR.ts index 60e01433f..c56666afd 100644 --- a/lang/calamares_pt_BR.ts +++ b/lang/calamares_pt_BR.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Gerenciar configurações de automontagem + + BootInfoWidget - + 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. O <strong>ambiente de inicialização</strong> deste sistema.<br><br>Sistemas x86 antigos têm suporte apenas ao <strong>BIOS</strong>.<br>Sistemas modernos normalmente usam <strong>EFI</strong>, mas também podem mostrar o BIOS se forem iniciados no modo de compatibilidade. - + 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. - Este sistema foi iniciado com um ambiente de inicialização <strong>EFI</strong>.<br><br>Para configurar o início a partir de um ambiente EFI, este instalador deverá instalar um gerenciador de inicialização, como o <strong>GRUB</strong> ou <strong>systemd-boot</strong> em uma <strong>Partição de Sistema EFI</strong>. Esse processo é automático, a não ser que escolha o particionamento manual, que no caso fará você escolher ou criar o gerenciador de inicialização por conta própria. + Este sistema foi iniciado com um ambiente de inicialização <strong>EFI</strong>.<br><br>Para configurar o início a partir de um ambiente EFI, este instalador deverá instalar um gerenciador de inicialização, como o <strong>GRUB</strong> ou <strong>systemd-boot</strong> em uma <strong>Partição de Sistema EFI</strong>. Esse processo é automático, a não ser que você escolha o particionamento manual, que no caso fará você escolher ou criar o gerenciador de inicialização por conta própria. - + 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. - Este sistema foi iniciado utilizando o <strong>BIOS</strong> como ambiente de inicialização.<br><br>Para configurar a inicialização em um ambiente BIOS, este instalador deve instalar um gerenciador de boot, como o <strong>GRUB</strong>, no começo de uma partição ou no <strong>Master Boot Record</strong>, perto do começo da tabela de partições (recomendado). Esse processo é automático, a não ser que você escolha o particionamento manual, onde você deverá configurá-lo manualmente. + Este sistema foi iniciado utilizando o <strong>BIOS</strong> como ambiente de inicialização.<br><br>Para configurar a inicialização em um ambiente BIOS, este instalador deve instalar um gerenciador de inicialização, como o <strong>GRUB</strong>, no começo de uma partição ou no <strong>Master Boot Record</strong>, perto do começo da tabela de partições (recomendado). Esse processo é automático, a não ser que você escolha o particionamento manual, onde você deverá configurá-lo manualmente. BootLoaderModel - + Master Boot Record of %1 Master Boot Record de %1 - + Boot Partition Partição de Boot - + System Partition Partição de Sistema - + Do not install a boot loader Não instalar um gerenciador de inicialização - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Página em Branco @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulário - + GlobalStorage Armazenamento Global - + JobQueue Fila de Trabalhos - + Modules Módulos - + Type: Tipo: - - + + none nenhum - + Interface: Interface: - - Tools - Ferramentas + + Crashes Calamares, so that Dr. Konqui can look at it. + Trava o Calamares, para que o Dr. Konqui possa examiná-lo. - + + Reloads the stylesheet from the branding directory. + Recarrega a folha de estilo do diretório de marca. + + + + Uploads the session log to the configured pastebin. + Envia o registro da sessão para o pastebin configurado. + + + + Send Session Log + Enviar Registro da Sessão + + + Reload Stylesheet Recarregar folha de estilo - + + Displays the tree of widget names in the log (for stylesheet debugging). + Mostra a árvore de nomes de widget no registro (para a depuração da folha de estilo). + + + Widget Tree Árvore de widgets - + Debug information Informações de depuração @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Configurar - + Install Instalar @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) A tarefa falhou (%1) - + Programmed job failure was explicitly requested. Falha na tarefa programada foi solicitada explicitamente. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Concluído @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Tarefa de exemplo (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Executar o comando '%1' no sistema de destino. - + Run command '%1'. Executar comando '%1'. - + Running command %1 %2 Executando comando %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Executando operação %1. - + Bad working directory path Caminho de diretório de trabalho ruim - + Working directory %1 for python job %2 is not readable. Diretório de trabalho %1 para a tarefa do python %2 não é legível. - + Bad main script file Arquivo de script principal ruim - + Main script file %1 for python job %2 is not readable. Arquivo de script principal %1 para a tarefa do python %2 não é legível. - + Boost.Python error in job "%1". Boost.Python erro na tarefa "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Carregando ... - + QML Step <i>%1</i>. Passo QML <i>%1</i>. - + Loading failed. Carregamento falhou. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + A verificação de requisitos para o módulo <i>%1</i> está completa. + - + Waiting for %n module(s). Esperando por %n módulo. @@ -236,7 +269,7 @@ - + (%n second(s)) (%n segundo) @@ -244,255 +277,249 @@ - + System-requirements checking is complete. - Verificação de requerimentos do sistema completa. + Verificação de requisitos do sistema completa. Calamares::ViewManager - - &Back - &Voltar - - - - &Next - &Próximo - - - - &Cancel - &Cancelar - - - - Cancel setup without changing the system. - Cancelar configuração sem alterar o sistema. - - - - Cancel installation without changing the system. - Cancelar instalação sem modificar o sistema. - - - + Setup Failed A Configuração Falhou - - Would you like to paste the install log to the web? - Deseja colar o registro de instalação na web? + + Installation Failed + Falha na Instalação - + + Error + Erro + + + + &Yes + &Sim + + + + &No + &Não + + + + &Close + &Fechar + + + Install Log Paste URL Colar URL de Registro de Instalação - + The upload was unsuccessful. No web-paste was done. - Não foi possível fazer o upload. Nenhuma colagem foi feita na web. + Não foi possível fazer o upload. Nenhuma colagem foi feita na internet. - + + Install log posted to + +%1 + +Link copied to clipboard + Registro de instalação postado em + +%1 + +Link copiado para a área de transferência + + + Calamares Initialization Failed Falha na inicialização do Calamares - + %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. %1 não pôde ser instalado. O Calamares não conseguiu carregar todos os módulos configurados. Este é um problema com o modo em que o Calamares está sendo utilizado pela distribuição. - + <br/>The following modules could not be loaded: <br/>Os seguintes módulos não puderam ser carregados: - + + Continue with setup? + Continuar com configuração? + + + Continue with installation? Continuar com a instalação? - + 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> O programa de configuração %1 está prestes a fazer mudanças no seu disco de modo a configurar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> - + + 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> + O instalador %1 está prestes a fazer alterações no disco a fim de instalar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> + + + &Set up now &Configurar agora - + + &Install now + &Instalar agora + + + + Go &back + &Voltar + + + &Set up &Configurar - + &Install &Instalar - + Setup is complete. Close the setup program. A configuração está completa. Feche o programa de configuração. - + + The installation is complete. Close the installer. + A instalação está completa. Feche o instalador. + + + + Cancel setup without changing the system. + Cancelar configuração sem alterar o sistema. + + + + Cancel installation without changing the system. + Cancelar instalação sem modificar o sistema. + + + + &Next + &Próximo + + + + &Back + &Voltar + + + + &Done + &Concluído + + + + &Cancel + &Cancelar + + + Cancel setup? Cancelar a configuração? - + Cancel installation? Cancelar a instalação? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Você realmente quer cancelar o processo atual de configuração? O programa de configuração será fechado e todas as mudanças serão perdidas. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Você deseja realmente cancelar a instalação atual? O instalador será fechado e todas as alterações serão perdidas. - - - - &Yes - &Sim - - - - - &No - &Não - - - - &Close - Fe&char - - - - Continue with setup? - Continuar com configuração? - - - - 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> - O instalador %1 está prestes a fazer alterações no disco a fim de instalar %2.<br/><strong>Você não será capaz de desfazer estas mudanças.</strong> - - - - &Install now - &Instalar agora - - - - Go &back - &Voltar - - - - &Done - Concluí&do - - - - The installation is complete. Close the installer. - A instalação está completa. Feche o instalador. - - - - Error - Erro - - - - Installation Failed - Falha na Instalação - CalamaresPython::Helper - + Unknown exception type Tipo de exceção desconhecida - + unparseable Python error erro inanalisável do Python - + unparseable Python traceback rastreamento inanalisável do Python - + Unfetchable Python error. Erro inbuscável do Python. - - CalamaresUtils - - - Install log posted to: -%1 - Registro de instalação colado em: -%1 - - CalamaresWindow - - &Back - &Voltar - - - - &Next - &Próximo - - - - &Cancel - &Cancelar - - - + %1 Setup Program Programa de configuração %1 - + %1 Installer Instalador %1 + + + ChangeFilesystemLabelJob - - Show debug information - Exibir informações de depuração + + Set filesystem label on %1. + Definir etiqueta do sistema de arquivos em %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Definir etiqueta do sistema de arquivos <strong>%1</strong> para partição <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + O instalador falhou ao atualizar a tabela de partições no disco '%1'. CheckerContainer - + Gathering system information... Coletando informações do sistema... @@ -500,157 +527,197 @@ O instalador será fechado e todas as alterações serão perdidas. ChoicePage - + Form Formulário - - After: - Depois: - - - - Boot loader location: - Local do gerenciador de inicialização: - - - + Select storage de&vice: - Selecione o dispositi&vo de armazenamento: + Selecione o dispositivo de armazenamento: - - - - + + + + Current: Atual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Particionamento manual</strong><br/>Crie ou redimensione você mesmo as partições. Ter uma tabela de partições GPT e uma <strong>partição /boot fat32 de 512Mb é essencial para instalações UEFI</strong>, use uma existente sem formatação ou crie uma. + + After: + Depois: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particionamento manual</strong><br/>Você pode criar ou redimensionar partições. + + + Reuse %1 as home partition for %2. Reutilizar %1 como partição home para %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecione uma partição para reduzir, então arraste a barra de baixo para redimensionar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 será reduzida para %2MiB e uma nova partição de %3MiB será criada para %4. - + + Boot loader location: + Local do gerenciador de inicialização: + + + <strong>Select a partition to install on</strong> <strong>Selecione uma partição para instalação</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Uma partição de sistema EFI não pôde ser encontrada neste dispositivo. Por favor, volte e use o particionamento manual para gerenciar %1. - + The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será utilizada para iniciar %2. - + EFI system partition: Partição de sistema EFI: - + 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. Parece que não há um sistema operacional neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - <strong>Apagar disco</strong><br/>Isto <font color="red">excluirá</font> todos os dados no dispositivo de armazenamento selecionado. + <strong>Apagar disco</strong><br/>Isto <font color="red">excluirá</font> todos os dados presentes atualmente no dispositivo de armazenamento selecionado. - - 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. - Este dispositivo de armazenamento possui %1 nele. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - - - - No Swap - Sem swap - - - - Reuse Swap - Reutilizar swap - - - - Swap (no Hibernate) - Swap (sem hibernação) - - - - Swap (with Hibernate) - Swap (com hibernação) - - - - Swap to file - Swap em arquivo - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar lado a lado</strong><br/>O instalador reduzirá uma partição para liberar espaço para %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituir uma partição</strong><br/>Substitui uma partição com %1. - + + 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. + Este dispositivo de armazenamento possui %1 nele. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. + + + 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. Já há um sistema operacional neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. - + 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. Há diversos sistemas operacionais neste dispositivo de armazenamento. O que você gostaria de fazer?<br/>Você poderá revisar e confirmar suas opções antes que as alterações sejam feitas no dispositivo de armazenamento. + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + O dispositivo de armazenamento tem uma de suas partições <strong>montada</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + O dispositivo de armazenamento é parte de um dispositivo <strong>RAID inativo</strong>. + + + + No Swap + Sem swap + + + + Reuse Swap + Reutilizar swap + + + + Swap (no Hibernate) + Swap (sem hibernação) + + + + Swap (with Hibernate) + Swap (com hibernação) + + + + Swap to file + Swap em arquivo + ClearMountsJob - + + Successfully unmounted %1. + %1 desmontado com sucesso. + + + + Successfully disabled swap %1. + Swap %1 desativada com sucesso. + + + + Successfully cleared swap %1. + Swap %1 limpa com sucesso. + + + + Successfully closed mapper device %1. + Dispositivo de mapeamento %1 fechado com sucesso. + + + + Successfully disabled volume group %1. + Grupo de volume %1 desativado com sucesso. + + + Clear mounts for partitioning operations on %1 Limpar as montagens para as operações nas partições em %1 - + Clearing mounts for partitioning operations on %1. Limpando montagens para operações de particionamento em %1. - + Cleared all mounts for %1 Todos os pontos de montagem para %1 foram limpos @@ -658,22 +725,17 @@ O instalador será fechado e todas as alterações serão perdidas. ClearTempMountsJob - + Clear all temporary mounts. Limpar pontos de montagens temporários. - + Clearing all temporary mounts. Limpando todos os pontos de montagem temporários. - - Cannot get list of temporary mounts. - Não foi possível listar os pontos de montagens. - - - + Cleared all temporary mounts. Pontos de montagens temporários limpos. @@ -681,18 +743,18 @@ O instalador será fechado e todas as alterações serão perdidas. CommandList - - + + Could not run command. Não foi possível executar o comando. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - O comando é executado no ambiente do hospedeiro e precisa saber o caminho root, mas nenhum rootMountPoint foi definido. + O comando é executado no ambiente do hospedeiro e precisa saber o caminho raiz, mas nenhum rootMountPoint foi definido. - + The command needs to know the user's name, but no username is defined. O comando precisa saber do nome do usuário, mas nenhum nome de usuário foi definido. @@ -700,100 +762,235 @@ O instalador será fechado e todas as alterações serão perdidas. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Este computador não satisfaz os requerimentos mínimos para configurar %1.<br/>A configuração não pode continuar. <a href="#details">Detalhes...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Este computador não satisfaz alguns dos requerimentos recomendados para configurar %1.<br/>A configuração pode continuar, mas algumas funções podem ser desativadas. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas alguns recursos podem ser desativados. - - - - This program will ask you some questions and set up %2 on your computer. - Este programa irá fazer-lhe algumas perguntas e configurar %2 no computador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Bem-vindo ao programa de configuração Calamares para %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Bem-vindo à configuração de %1</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bem-vindo ao instalador Calamares para %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Bem-vindo ao instalador %1 .</h1> - - - + Set keyboard model to %1.<br/> Definir o modelo de teclado para %1.<br/> - + Set keyboard layout to %1/%2. Definir o layout do teclado para %1/%2. - + + Set timezone to %1/%2. + Definir o fuso horário para %1/%2. + + + The system language will be set to %1. O idioma do sistema será definido como %1. - + The numbers and dates locale will be set to %1. - O local dos números e datas será definido como %1. + A localidade dos números e datas será definida como %1. - - Set timezone to %1/%2.<br/> - Definir o fuso horário para %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Instalação via Rede. (Desabilitada: Configuração incorreta) - + Network Installation. (Disabled: Received invalid groups data) Instalação pela Rede. (Desabilitado: Recebidos dados de grupos inválidos) - - Network Installation. (Disabled: internal error) - Instalação de rede. (Desativada: erro interno) + + Network Installation. (Disabled: Internal error) + Instalação por Rede. (Desabilitada: Erro interno) - + + Network Installation. (Disabled: No package list) + Instalação por Rede. (Desabilitada: Sem lista de pacotes) + + + + Package selection + Seleção de pacotes + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalação pela Rede. (Desabilitada: Não foi possível adquirir lista de pacotes, verifique sua conexão com a internet) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Este computador não satisfaz os requisitos mínimos para configurar %1.<br/>A configuração não pode continuar. <a href="#details">Detalhes...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Este computador não satisfaz alguns dos requisitos recomendados para configurar %1.<br/>A configuração pode continuar, mas alguns recursos podem ser desativados. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas alguns recursos podem ser desativados. + + + + This program will ask you some questions and set up %2 on your computer. + Este programa irá fazer-lhe algumas perguntas e configurar %2 no computador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Bem-vindo ao programa de configuração Calamares para %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Bem-vindo à configuração de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Bem-vindo ao instalador Calamares para %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Bem-vindo ao instalador de %1</h1> + + + + Your username is too long. + O nome de usuário é grande demais. + + + + '%1' is not allowed as username. + '%1' não é permitido como nome de usuário. + + + + Your username must start with a lowercase letter or underscore. + Seu nome de usuário deve começar com uma letra minúscula ou com um sublinhado. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + É permitido apenas letras minúsculas, números, sublinhado e hífen. + + + + Your hostname is too short. + O nome da máquina é muito curto. + + + + Your hostname is too long. + O nome da máquina é muito grande. + + + + '%1' is not allowed as hostname. + '%1' não é permitido como nome da máquina. + + + + Only letters, numbers, underscore and hyphen are allowed. + É permitido apenas letras, números, sublinhado e hífen. + + + + Your passwords do not match! + As senhas não estão iguais! + + + + OK! + OK! + + + + Setup Failed + A Configuração Falhou + + + + Installation Failed + Falha na Instalação + + + + The setup of %1 did not complete successfully. + A configuração de %1 não foi completada com sucesso. + + + + The installation of %1 did not complete successfully. + A instalação de %1 não foi completada com sucesso. + + + + Setup Complete + Configuração Concluída + + + + Installation Complete + Instalação Completa + + + + The setup of %1 is complete. + A configuração de %1 está concluída. + + + + The installation of %1 is complete. + A instalação do %1 está completa. + + + + Package Selection + Seleção de Pacote + + + + Please pick a product from the list. The selected product will be installed. + Por favor, escolha um produto da lista. O produto selecionado será instalado. + + + + Install option: <strong>%1</strong> + Instalar opção: <strong>%1</strong> + + + + None + Nenhum + + + + Summary + Resumo + + + + This is an overview of what will happen once you start the setup procedure. + Esta é uma visão geral do que acontecerá quando você iniciar o procedimento de configuração. + + + + This is an overview of what will happen once you start the install procedure. + Este é um resumo do que acontecerá assim que o processo de instalação for iniciado. + ContextualProcessJob - + Contextual Processes Job Tarefa de Processos Contextuais @@ -801,100 +998,136 @@ O instalador será fechado e todas as alterações serão perdidas. CreatePartitionDialog - + Create a Partition Criar uma partição - - MiB - MiB - - - - Partition &Type: - &Tipo da partição: - - - - &Primary - &Primária - - - - E&xtended - E&xtendida - - - - Fi&le System: - Sistema de &Arquivos: - - - - LVM LV name - Nome do LVM LV - - - - Flags: - Marcadores: - - - - &Mount Point: - Ponto de &Montagem: - - - + Si&ze: &Tamanho: - + + MiB + MiB + + + + Partition &Type: + &Tipo da partição: + + + + Primar&y + Primár&ia + + + + E&xtended + E&xtendida + + + + Fi&le System: + Sistema de Arquivos: + + + + LVM LV name + Nome do LVM LV + + + + &Mount Point: + Ponto de Montagem: + + + + Flags: + Marcadores: + + + + Label for the filesystem + Etiqueta para o sistema de arquivos + + + + FS Label: + Etiqueta do FS: + + + En&crypt &Criptografar - + Logical Lógica - + Primary Primária - + GPT GPT - + Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor, selecione outro. + + + Mountpoint must start with a <tt>/</tt>. + O ponto de montagem deve começar com um <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Criar nova partição de %1MiB em %3 (%2) com entradas %4. + + + + Create new %1MiB partition on %3 (%2). + Criar nova partição de %1MiB em %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Criar nova partição de %2MiB em %4 (%3) com o sistema de arquivos %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2) com entradas <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Criar nova partição de <strong>%2MiB</strong> em <strong>%4</strong> (%3) com o sistema de arquivos <strong>%1</strong>. - + + Creating new %1 partition on %2. Criando nova partição %1 em %2. - + The installer failed to create partition on disk '%1'. O instalador não conseguiu criar partições no disco '%1'. @@ -902,27 +1135,27 @@ O instalador será fechado e todas as alterações serão perdidas. CreatePartitionTableDialog - + Create Partition Table Criar Tabela de Partições - + Creating a new partition table will delete all existing data on the disk. A criação de uma nova tabela de partições excluirá todos os dados no disco. - + What kind of partition table do you want to create? Que tipo de tabela de partições você deseja criar? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -930,22 +1163,22 @@ O instalador será fechado e todas as alterações serão perdidas. CreatePartitionTableJob - + Create new %1 partition table on %2. Criar nova tabela de partições %1 em %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Criar nova tabela de partições <strong>%1</strong> em <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Criando nova tabela de partições %1 em %2. - + The installer failed to create a partition table on %1. O instalador não conseguiu criar uma tabela de partições em %1. @@ -953,45 +1186,41 @@ O instalador será fechado e todas as alterações serão perdidas. CreateUserJob - + Create user %1 Criar usuário %1 - + Create user <strong>%1</strong>. Criar usuário <strong>%1</strong>. - - Creating user %1. - Criando usuário %1. + + Preserving home directory + Preservando o diretório home - - Sudoers dir is not writable. - O diretório do sudoers não é gravável. + + + Creating user %1 + Criando usuário %1 - - Cannot create sudoers file for writing. - Não foi possível criar arquivo sudoers para gravação. + + Configuring user %1 + Configurando usuário %1 - - Cannot chmod sudoers file. - Não foi possível utilizar chmod no arquivo sudoers. - - - - Cannot open groups file for reading. - Não foi possível abrir arquivo de grupos para leitura. + + Setting file permissions + Definindo permissões de arquivo CreateVolumeGroupDialog - + Create Volume Group Criar Grupo de Volumes @@ -999,22 +1228,22 @@ O instalador será fechado e todas as alterações serão perdidas. CreateVolumeGroupJob - + Create new volume group named %1. Criar novo grupo de volumes nomeado %1. - + Create new volume group named <strong>%1</strong>. Criar novo grupo de volumes nomeado <strong>%1</strong>. - + Creating new volume group named %1. Criando novo grupo de volumes nomeado %1. - + The installer failed to create a volume group named '%1'. O instalador não conseguiu criar um grupo de volumes nomeado '%1'. @@ -1022,18 +1251,18 @@ O instalador será fechado e todas as alterações serão perdidas. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Desativar grupo de volumes nomeado %1. - + Deactivate volume group named <strong>%1</strong>. Desativar grupo de volumes nomeado <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. O instalador não conseguiu desativar um grupo de volumes nomeado '%1'. @@ -1041,22 +1270,22 @@ O instalador será fechado e todas as alterações serão perdidas. DeletePartitionJob - + Delete partition %1. Excluir a partição %1. - + Delete partition <strong>%1</strong>. Excluir a partição <strong>%1</strong>. - + Deleting partition %1. Excluindo a partição %1. - + The installer failed to delete partition %1. O instalador não conseguiu excluir a partição %1. @@ -1064,46 +1293,46 @@ O instalador será fechado e todas as alterações serão perdidas. DeviceInfoWidget - - 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. - O tipo de <strong>tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O único modo de alterar o tipo de tabela de partições é apagar e recriar a mesma do começo, processo o qual exclui todos os dados do dispositivo.<br>Este instalador manterá a tabela de partições atual, a não ser que você escolha o contrário.<br>Em caso de dúvidas, em sistemas modernos o GPT é recomendado. - - - + This device has a <strong>%1</strong> partition table. Este dispositivo possui uma tabela de partições <strong>%1</strong>. - + 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. Este é um dispositivo de <strong>loop</strong>.<br><br>Esse é um pseudo-dispositivo sem tabela de partições que faz um arquivo acessível como um dispositivo de bloco. Esse tipo de configuração normalmente contém apenas um único sistema de arquivos. - + 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. O instalador <strong>não pôde detectar uma tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O dispositivo ou não tem uma tabela de partições, ou a tabela de partições está corrompida, ou é de um tipo desconhecido.<br>Este instalador pode criar uma nova tabela de partições para você, tanto automaticamente, como pela página de particionamento manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este é o tipo de tabela de partições recomendado para sistemas modernos que inicializam a partir de um ambiente <strong>EFI</strong>. - + <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. <br><br>Este tipo de tabela de partições só é aconselhável em sistemas antigos que iniciam a partir de um ambiente de inicialização <strong>BIOS</strong>. O GPT é recomendado na maioria dos outros casos.<br><br><strong>Aviso:</strong> a tabela de partições MBR é um padrão obsoleto da era do MS-DOS.<br>Apenas 4 partições <em>primárias</em> podem ser criadas, e dessas 4, uma pode ser uma partição <em>estendida</em>, que pode, por sua vez, conter várias partições <em>lógicas</em>. + + + 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. + O tipo de <strong>tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O único modo de alterar o tipo de tabela de partições é apagar e recriar a mesma do começo, processo o qual exclui todos os dados do dispositivo.<br>Este instalador manterá a tabela de partições atual, a não ser que você escolha o contrário.<br>Em caso de dúvidas, em sistemas modernos o GPT é recomendado. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1341,17 @@ O instalador será fechado e todas as alterações serão perdidas. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escrever configuração LUKS para o Dracut em %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Pular escrita de configuração LUKS para o Dracut: a partição "/" não está criptografada - + Failed to open %1 Ocorreu uma falha ao abrir %1 @@ -1130,7 +1359,7 @@ O instalador será fechado e todas as alterações serão perdidas. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1138,123 +1367,167 @@ O instalador será fechado e todas as alterações serão perdidas. EditExistingPartitionDialog - + Edit Existing Partition Editar Partição Existente - - Content: - Conteúdo: + + Con&tent: + Con&teúdo: - + &Keep &Manter - + Format Formatar - + Warning: Formatting the partition will erase all existing data. Atenção: A formatação apagará todos os dados existentes. - + &Mount Point: Ponto de &Montagem: - + Si&ze: &Tamanho: - + MiB MiB - + Fi&le System: &Sistema de Arquivos: - + Flags: Marcadores: - - Mountpoint already in use. Please select another one. - Ponto de montagem já em uso. Por favor, selecione outro. + + Label for the filesystem + Etiqueta para o sistema de arquivos + + + + FS Label: + Etiqueta do FS: EncryptWidget - + Form Formulário - + En&crypt system &Criptografar sistema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Seu sistema parece não suportar encriptação bem o suficiente para encriptar o sistema inteiro. Você pode habilitar a encriptação, mas o desempenho pode ser ruim. + + + Passphrase Frase-chave - + Confirm passphrase Confirme a frase-chave - + + Please enter the same passphrase in both boxes. Por favor, insira a mesma frase-chave nos dois campos. + + ErrorDialog + + + Details: + Detalhes: + + + + Would you like to paste the install log to the web? + Deseja colar o registro de instalação na internet? + + FillGlobalStorageJob - + Set partition information Definir informações da partição - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Instalar %1 em <strong>nova</strong> partição do sistema %2 com recursos <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Instalar %1 em <strong>nova</strong> partição %2 do sistema. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Configurar <strong>nova</strong> partição %2 com ponto de montagem <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Configurar <strong>nova</strong> partição %2 com ponto de montagem <strong>%1</strong> e recursos <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Configurar <strong>nova</strong> partição %2 com ponto de montagem <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Instalar %2 em partição do sistema %3 <strong>%1</strong> com recursos <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Configurar partição %3 <strong>%1</strong> com ponto de montagem <strong>%2</strong> e recursos <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Configurar partição %3 <strong>%1</strong> com ponto de montagem <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 na partição %3 do sistema <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Configurar partição %3 <strong>%1</strong> com ponto de montagem <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instalar gerenciador de inicialização em <strong>%1</strong>. - + Setting up mount points. Configurando pontos de montagem. @@ -1262,93 +1535,81 @@ O instalador será fechado e todas as alterações serão perdidas. FinishedPage - + Form Formulário - + &Restart now &Reiniciar agora - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Tudo concluído.</h1><br/>%1 foi configurado no seu computador.<br/>Agora você pode começar a usar seu novo sistema. - + <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> <html><head/><body><p>Quando essa caixa for marcada, seu sistema irá reiniciar imediatamente quando você clicar em <span style="font-style:italic;">Concluído</span> ou fechar o programa de configuração.</p></body></html> - + <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. <h1>Tudo pronto.</h1><br/>%1 foi instalado no seu computador.<br/>Agora você pode reiniciar seu novo sistema ou continuar usando o ambiente Live %2. - + <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> <html><head/><body><p>Quando essa caixa for marcada, seu sistema irá reiniciar imediatamente quando você clicar em <span style="font-style:italic;">Concluído</span> ou fechar o instalador.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>A configuração falhou</h1><br/>%1 não foi configurado no seu computador.<br/>A mensagem de erro foi: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>A instalação falhou</h1><br/>%1 não foi instalado em seu computador.<br/>A mensagem de erro foi: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Concluir + + + FinishedViewStep - - Setup Complete - Configuração Concluída - - - - Installation Complete - Instalação Completa - - - - The setup of %1 is complete. - A configuração de %1 está concluída. - - - - The installation of %1 is complete. - A instalação do %1 está completa. + + Finish + Concluir FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatar partição %1 (sistema de arquivos: %2, tamanho: %3 MiB) em %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatar partição de <strong>%3MiB</strong> <strong>%1</strong> com o sistema de arquivos <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatando partição %1 com o sistema de arquivos %2. - + The installer failed to format partition %1 on disk '%2'. O instalador falhou em formatar a partição %1 no disco '%2'. @@ -1356,72 +1617,72 @@ O instalador será fechado e todas as alterações serão perdidas. GeneralRequirements - + has at least %1 GiB available drive space tenha pelo menos %1 GiB disponível de espaço no disco - + There is not enough drive space. At least %1 GiB is required. Não há espaço suficiente no disco. Pelo menos %1 GiB é requerido. - + has at least %1 GiB working memory tenha pelo menos %1 GiB de memória de trabalho - + The system does not have enough working memory. At least %1 GiB is required. O sistema não tem memória de trabalho o suficiente. Pelo menos %1 GiB é requerido. - + is plugged in to a power source está conectado a uma fonte de energia - + The system is not plugged in to a power source. O sistema não está conectado a uma fonte de energia. - + is connected to the Internet está conectado à Internet - + The system is not connected to the Internet. O sistema não está conectado à Internet. - + is running the installer as an administrator (root) está executando o instalador como administrador (root) - + The setup program is not running with administrator rights. O programa de configuração não está sendo executado com direitos de administrador. - + The installer is not running with administrator rights. O instalador não está sendo executado com permissões de administrador. - + has a screen large enough to show the whole installer tem uma tela grande o suficiente para mostrar todo o instalador - + The screen is too small to display the setup program. A tela é muito pequena para exibir o programa de configuração. - + The screen is too small to display the installer. A tela é muito pequena para exibir o instalador. @@ -1429,7 +1690,7 @@ O instalador será fechado e todas as alterações serão perdidas. HostInfoJob - + Collecting information about your machine. Coletando informações sobre a sua máquina. @@ -1437,25 +1698,25 @@ O instalador será fechado e todas as alterações serão perdidas. IDJob - - + + + - OEM Batch Identifier Identificador de Lote OEM - + Could not create directories <code>%1</code>. Não foi possível criar diretórios <code>%1</code>. - + Could not open file <code>%1</code>. Não foi possível abrir arquivo <code>%1</code>. - + Could not write to file <code>%1</code>. Não foi possível escrever no arquivo <code>%1</code>. @@ -1463,7 +1724,7 @@ O instalador será fechado e todas as alterações serão perdidas. InitcpioJob - + Creating initramfs with mkinitcpio. Criando initramfs com mkinitcpio. @@ -1471,7 +1732,7 @@ O instalador será fechado e todas as alterações serão perdidas. InitramfsJob - + Creating initramfs. Criando initramfs. @@ -1479,17 +1740,17 @@ O instalador será fechado e todas as alterações serão perdidas. InteractiveTerminalPage - + Konsole not installed Konsole não instalado - + Please install KDE Konsole and try again! Por favor, instale o Konsole do KDE e tente novamente! - + Executing script: &nbsp;<code>%1</code> Executando script: &nbsp;<code>%1</code> @@ -1497,28 +1758,15 @@ O instalador será fechado e todas as alterações serão perdidas. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Definir o modelo de teclado para %1.<br/> - - - - Set keyboard layout to %1/%2. - Definir o layout do teclado para %1/%2. - - KeyboardQmlViewStep - + Keyboard Teclado @@ -1526,7 +1774,7 @@ O instalador será fechado e todas as alterações serão perdidas. KeyboardViewStep - + Keyboard Teclado @@ -1534,65 +1782,88 @@ O instalador será fechado e todas as alterações serão perdidas. LCLocaleDialog - + System locale setting Definição de localidade do sistema - + 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>. - A configuração de localidade do sistema afeta a linguagem e o conjunto de caracteres para algumas linhas de comando e elementos da interface do usuário.<br/>A configuração atual é <strong>%1</strong>. + A configuração de localidade do sistema afeta o idioma e o conjunto de caracteres para algumas linhas de comando e elementos da interface do usuário.<br/>A configuração atual é <strong>%1</strong>. - + &Cancel &Cancelar - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Configurando swap encriptada. + + + + No target system available. + Não há um sistema alvo disponível. + + + + No rootMountPoint is set. + Nenhum rootMountPoint está definido. + + + + No configFilePath is set. + Nenhum configFilePath está definido. + + LicensePage - + Form Formulário - + <h1>License Agreement</h1> <h1>Contrato de Licença</h1> - + I accept the terms and conditions above. Aceito os termos e condições acima. - + Please review the End User License Agreements (EULAs). Revise o contrato de licença de usuário final (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. Este procedimento de configuração irá instalar software proprietário que está sujeito aos termos de licença. - + If you do not agree with the terms, the setup procedure cannot continue. Se não concordar com os termos, o procedimento de configuração não poderá continuar. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Este procedimento de configuração pode instalar software proprietário sujeito a termos de licenciamento para fornecer recursos adicionais e aprimorar a experiência do usuário. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Se você não concordar com os termos, o software proprietário não será instalado e serão utilizadas as alternativas de código aberto. @@ -1600,7 +1871,7 @@ O instalador será fechado e todas as alterações serão perdidas. LicenseViewStep - + License Licença @@ -1608,109 +1879,102 @@ O instalador será fechado e todas as alterações serão perdidas. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>driver %1</strong><br/>por %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>driver gráfico %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>plugin do navegador %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>codec %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>pacote %1</strong><br/><font color="Grey">por %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> - + File: %1 Arquivo: %1 - + + Hide license text + Esconder texto de licença + + + Show the license text Mostrar o texto da licença - + Open license agreement in browser. Contrato de licença aberta no navegador. - - - Hide license text - Esconder texto de licença - LocalePage - - The system language will be set to %1. - O idioma do sistema será definido como %1. - - - - The numbers and dates locale will be set to %1. - O local dos números e datas será definido como %1. - - - + Region: Região: - + Zone: Área: - - + + &Change... &Mudar... - - - Set timezone to %1/%2.<br/> - Definir o fuso horário para %1/%2.<br/> - LocaleQmlViewStep - + Location Localização + + LocaleTests + + + Quit + Sair + + LocaleViewStep - + Location Localização @@ -1718,35 +1982,35 @@ O instalador será fechado e todas as alterações serão perdidas. LuksBootKeyFileJob - + Configuring LUKS key file. Configurando o arquivo de chave do LUKS. - - + + No partitions are defined. Nenhuma partição está definida. - - - + + + Encrypted rootfs setup error Erro de configuração de rootfs encriptado - + Root partition %1 is LUKS but no passphrase has been set. A partição raiz %1 é LUKS, mas nenhuma senha foi definida. - + Could not create LUKS key file for root partition %1. Não foi possível criar o arquivo de chave LUKS para a partição raiz %1. - + Could not configure LUKS key file on partition %1. Não foi possível configurar a chave LUKS na partição %1. @@ -1754,124 +2018,140 @@ O instalador será fechado e todas as alterações serão perdidas. MachineIdJob - + Generate machine-id. Gerar machine-id. - + Configuration Error Erro de Configuração. - + No root mount point is set for MachineId. Nenhum ponto de montagem raiz está definido para MachineId. + + Map + + + Timezone: %1 + Fuso horário: %1 + + + + 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. + Por favor selecione seu local preferido no mapa para que o instalador possa sugerir as configurações de localidade + e fuso horário para você. Você pode ajustar as configurações sugeridas abaixo. Procure no mapa arrastando + para mover e usando os botões +/- para aumentar/diminuir ou use a rolagem do mouse para dar zoom. + + NetInstallViewStep - - + Package selection Seleção de pacotes - + Office software Software de office - + Office package Pacote office - + Browser software Softwares de browser - + Browser package Pacote de browser - + Web browser - Navegador web + Navegador de internet - + Kernel Kernel - + Services Seriços - + Login Login - + Desktop Área de trabalho - + Applications Aplicações - + Communication - + Comunicação - + Development - + Desenvolvimento - + Office - + Escritório - + Multimedia - + Multimídia - + Internet - + Internet - + Theming - + Temas - + Gaming - + Jogos - + Utilities - + Utilitários NotesQmlViewStep - + Notes Notas @@ -1879,17 +2159,17 @@ O instalador será fechado e todas as alterações serão perdidas. OEMPage - + Ba&tch: &Lote: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Especifique um identificador de lote aqui. Ele será armazenado no sistema de destino.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Configuração OEM</h1><p>O Calamares irá utilizar as configurações OEM enquanto configurar o sistema de destino.</p></body></html> @@ -1897,260 +2177,317 @@ O instalador será fechado e todas as alterações serão perdidas. OEMViewStep - + OEM Configuration Configuração OEM - + Set the OEM Batch Identifier to <code>%1</code>. Definir o identificador de Lote OEM em <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Selecione sua região preferida ou use as configurações predefinidas. + + + + + + Timezone: %1 + Fuso horário: %1 + + + + Select your preferred Zone within your Region. + Selecione a sua Zona preferida dentro da sua Região. + + + + Zones + Zonas + + + + You can fine-tune Language and Locale settings below. + Você pode ajustar as configurações de Idioma e Localidade abaixo. + + PWQ - + Password is too short A senha é muito curta - + Password is too long A senha é muito longa - + Password is too weak A senha é muito fraca - + Memory allocation error when setting '%1' - Erro de alocação de memória ao definir '% 1' + Erro de alocação de memória ao definir '%1' - + Memory allocation error Erro de alocação de memória - + The password is the same as the old one A senha é a mesma que a antiga - + The password is a palindrome A senha é um palíndromo - + The password differs with case changes only A senha difere apenas com mudanças entre maiúsculas ou minúsculas - + The password is too similar to the old one A senha é muito semelhante à antiga - + The password contains the user name in some form A senha contém o nome de usuário em alguma forma - + The password contains words from the real name of the user in some form A senha contém palavras do nome real do usuário - + The password contains forbidden words in some form A senha contém palavras proibidas de alguma forma - - The password contains less than %1 digits - A senha contém menos de %1 dígitos - - - + The password contains too few digits A senha contém poucos dígitos - - The password contains less than %1 uppercase letters - A senha contém menos que %1 letras maiúsculas - - - + The password contains too few uppercase letters A senha contém poucas letras maiúsculas - - - The password contains less than %1 lowercase letters - A senha contém menos que %1 letras minúsculas + + + The password contains fewer than %n lowercase letters + + A senha contém menos que %n letras minúsculas + A senha contém menos que %n letras minúsculas + - + The password contains too few lowercase letters A senha contém poucas letras minúsculas - - The password contains less than %1 non-alphanumeric characters - A senha contém menos que %1 caracteres não alfanuméricos - - - + The password contains too few non-alphanumeric characters A senha contém poucos caracteres não alfanuméricos - - The password is shorter than %1 characters - A senha é menor que %1 caracteres - - - + The password is too short A senha é muito curta - - The password is just rotated old one - A senha é apenas uma antiga modificada - - - - The password contains less than %1 character classes - A senha contém menos de %1 tipos de caracteres - - - + The password does not contain enough character classes A senha não contém tipos suficientes de caracteres - - The password contains more than %1 same characters consecutively - A senha contém mais que %1 caracteres iguais consecutivamente - - - + The password contains too many same characters consecutively A senha contém muitos caracteres iguais consecutivamente - - The password contains more than %1 characters of the same class consecutively - A senha contém mais que %1 caracteres do mesmo tipo consecutivamente - - - + The password contains too many characters of the same class consecutively A senha contém muitos caracteres da mesma classe consecutivamente - - - The password contains monotonic sequence longer than %1 characters - A senha contém uma sequência monotônica com mais de %1 caracteres + + + The password contains fewer than %n digits + + A senha contém menos que %n dígitos + A senha contém menos que %n dígitos + + + + + The password contains fewer than %n uppercase letters + + A senha contém menos que %n caracteres em maiúsculo + A senha contém menos que %n caracteres em maiúsculo + + + + + The password contains fewer than %n non-alphanumeric characters + + A senha contém menos que %n caracteres não alfanuméricos + A senha contém menos que %n caracteres não alfanuméricos + + + + + The password is shorter than %n characters + + A senha é menor que %n caracteres + A senha é menor que %n caracteres + - + + The password is a rotated version of the previous one + A senha é uma versão rotacionada da antiga + + + + The password contains fewer than %n character classes + + A senha contém menos que %n classes de caracteres + A senha contém menos que %n classes de caracteres + + + + + The password contains more than %n same characters consecutively + + A senha contém mais que %n caracteres iguais consecutivamente + A senha contém mais que %n caracteres iguais consecutivamente + + + + + The password contains more than %n characters of the same class consecutively + + A senha contém mais que %n caracteres da mesma classe consecutivamente + A senha contém mais que %n caracteres da mesma classe consecutivamente + + + + + The password contains monotonic sequence longer than %n characters + + A senha contém uma sequência monotônica maior que %n caracteres + A senha contém uma sequência monotônica maior que %n caracteres + + + + The password contains too long of a monotonic character sequence A senha contém uma sequência de caracteres monotônicos muito longa - + No password supplied Nenhuma senha fornecida - + Cannot obtain random numbers from the RNG device Não é possível obter números aleatórios do dispositivo RNG - + Password generation failed - required entropy too low for settings A geração de senha falhou - a entropia requerida é muito baixa para as configurações - + The password fails the dictionary check - %1 A senha falhou na verificação do dicionário - %1 - + The password fails the dictionary check A senha falhou na verificação do dicionário - + Unknown setting - %1 Configuração desconhecida - %1 - + Unknown setting Configuração desconhecida - + Bad integer value of setting - %1 Valor de número inteiro errado na configuração - %1 - + Bad integer value Valor de número inteiro errado - + Setting %1 is not of integer type A configuração %1 não é do tipo inteiro - + Setting is not of integer type A configuração não é de tipo inteiro - + Setting %1 is not of string type A configuração %1 não é do tipo string - + Setting is not of string type A configuração não é do tipo string - + Opening the configuration file failed Falha ao abrir o arquivo de configuração - + The configuration file is malformed O arquivo de configuração está defeituoso - + Fatal failure Falha fatal - + Unknown error Erro desconhecido - + Password is empty A senha está em branco @@ -2158,40 +2495,48 @@ O instalador será fechado e todas as alterações serão perdidas. PackageChooserPage - + Form Formulário - + Product Name Nome do Produto - + TextLabel EtiquetaDeTexto - + Long Product Description Descrição Estendida do Produto - + Package Selection Seleção de Pacote - + Please pick a product from the list. The selected product will be installed. Por favor, escolha um produto da lista. O produto selecionado será instalado. + + PackageChooserQmlViewStep + + + Packages + Pacotes + + PackageChooserViewStep - + Packages Pacotes @@ -2199,12 +2544,12 @@ O instalador será fechado e todas as alterações serão perdidas. PackageModel - + Name Nome - + Description Descrição @@ -2212,17 +2557,17 @@ O instalador será fechado e todas as alterações serão perdidas. Page_Keyboard - + Form Formulário - + Keyboard Model: Modelo de teclado: - + Type here to test your keyboard Escreva aqui para testar o seu teclado @@ -2230,139 +2575,139 @@ O instalador será fechado e todas as alterações serão perdidas. Page_UserSetup - + Form Formulário - + What is your name? Qual é o seu nome? - - What name do you want to use to log in? - Qual nome você quer usar para entrar? - - - - Choose a password to keep your account safe. - Escolha uma senha para mantar a sua conta segura. - - - - - <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> - <small>Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. Uma boa senha contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres e deve ser alterada em intervalos regulares.</small> - - - - What is the name of this computer? - Qual é o nome deste computador? - - - + Your Full Name Seu nome completo - + + What name do you want to use to log in? + Qual nome você quer usar para entrar? + + + login login - + + What is the name of this computer? + Qual é o nome deste computador? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Esse nome será usado caso você deixe o computador visível a outros na rede.</small> - + Computer Name Nome do computador - - + + Choose a password to keep your account safe. + Escolha uma senha para manter a sua conta segura. + + + + + <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> + <small>Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. Uma boa senha contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres, e deve ser alterada em intervalos regulares.</small> + + + + Password Senha - - + + Repeat Password Repita a senha - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - Quando esta caixa estiver marcada, será feita a verificação do tamanho da senha e você não poderá usar uma senha fraca. + Quando esta caixa estiver marcada, será feita a verificação da força da senha e você não poderá usar uma senha fraca. - + Require strong passwords. Exigir senhas fortes. - + Log in automatically without asking for the password. Entrar automaticamente sem perguntar pela senha. - + Use the same password for the administrator account. Usar a mesma senha para a conta de administrador. - + Choose a password for the administrator account. Escolha uma senha para a conta administradora. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> - <small>Digite a mesma senha duas vezes para que possa ser verificada contra erros de digitação.</small> + <small>Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação.</small> PartitionLabelsView - + Root Root - + Home Home - + Boot Inicialização - + EFI system Sistema EFI - + Swap Swap - + New partition for %1 Nova partição para %1 - + New partition Nova partição - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2716,39 @@ O instalador será fechado e todas as alterações serão perdidas. PartitionModel - - + + Free Space Espaço livre - - + + New partition Nova partição - + Name Nome - + File System Sistema de arquivos - + + File System Label + Etiqueta do Sistema de Arquivos + + + Mount Point Ponto de montagem - + Size Tamanho @@ -2406,77 +2756,77 @@ O instalador será fechado e todas as alterações serão perdidas. PartitionPage - + Form Formulário - + Storage de&vice: Dispositi&vo de armazenamento: - + &Revert All Changes &Reverter todas as alterações - + New Partition &Table Nova Tabela de Partições - + Cre&ate Cri&ar - + &Edit &Editar - + &Delete &Deletar - + New Volume Group Novo Grupo de Volumes - + Resize Volume Group Redimensionar Grupo de Volumes - + Deactivate Volume Group Desativar Grupo de Volumes - + Remove Volume Group Remover Grupo de Volumes - + I&nstall boot loader on: I&nstalar gerenciador de inicialização em: - + Are you sure you want to create a new partition table on %1? Você tem certeza de que deseja criar uma nova tabela de partições em %1? - + Can not create new partition Não foi possível criar uma nova partição - + 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. A tabela de partições %1 já tem %2 partições primárias, e nenhuma a mais pode ser adicionada. Por favor, remova uma partição primária e adicione uma partição estendida no lugar. @@ -2484,117 +2834,107 @@ O instalador será fechado e todas as alterações serão perdidas. PartitionViewStep - + Gathering system information... Coletando informações do sistema... - + Partitions Partições - - Install %1 <strong>alongside</strong> another operating system. - Instalar %1 <strong>ao lado de</strong> outro sistema operacional. + + Unsafe partition actions are enabled. + As ações de partição não seguras estão habilitadas. - - <strong>Erase</strong> disk and install %1. - <strong>Apagar</strong> disco e instalar %1. + + Partitioning is configured to <b>always</b> fail. + O particionamento está configurado para <b>sempre</b> falhar. - - <strong>Replace</strong> a partition with %1. - <strong>Substituir</strong> uma partição com %1. + + No partitions will be changed. + Nenhuma partição será modificada. - - <strong>Manual</strong> partitioning. - Particionamento <strong>manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instalar %1 <strong>ao lado de</strong> outro sistema operacional no disco <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Apagar</strong> disco <strong>%2</strong> (%3) e instalar %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Substituir</strong> uma partição no disco <strong>%2</strong> (%3) com %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particionamento <strong>manual</strong> no disco <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disco <strong>%1</strong> (%2) - - - + Current: Atualmente: - + After: Depois: - + No EFI system partition configured Nenhuma partição de sistema EFI configurada - - 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>esp</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. - Uma partição de sistema EFI é necessária para iniciar %1.<br/><br/>Para configurar uma partição de sistema EFI, volte, selecione ou crie um sistema de arquivos FAT32 com o marcador <strong>esp</strong> ativado e ponto de montagem <strong>%2</strong>.<br/><br/>Você pode continuar sem definir uma partição de sistema EFI, mas seu sistema pode não iniciar. + + EFI system partition configured incorrectly + Partição EFI do sistema configurada incorretamente - - EFI system partition flag not set - Marcador da partição do sistema EFI não definida + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Uma partição de sistema EFI é necessária para iniciar o %1. <br/><br/>Para configurar uma partição de sistema EFI, volte atrás e selecione ou crie um sistema de arquivos adequado. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Uma partição de sistema EFI é necessária para iniciar %1.<br/><br/>Uma partição foi configurada com o ponto de montagem <strong>%2</strong>, mas seu marcador <strong>esp</strong> não foi definido.<br/>Para definir o marcador, volte e edite a partição.<br/><br/>Você pode continuar sem definir um marcador, mas seu sistema pode não iniciar. + + The filesystem must be mounted on <strong>%1</strong>. + O sistema de arquivos deve ser montado em <strong>%1</strong>. - + + The filesystem must have type FAT32. + O sistema de arquivos deve ter o tipo FAT32. + + + + The filesystem must be at least %1 MiB in size. + O sistema de arquivos deve ter pelo menos %1 MiB de tamanho. + + + + The filesystem must have flag <strong>%1</strong> set. + O sistema de arquivos deve ter o marcador %1 definido. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Você pode continuar sem configurar uma partição de sistema EFI, mas seu sistema pode não iniciar. + + + Option to use GPT on BIOS Opção para usar GPT no BIOS - - 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. - + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + Uma tabela de partições GPT é a melhor opção para todos os sistemas. Este instalador suporta tal configuração para sistemas BIOS também.<br/><br/>Para configurar uma tabela de partições GPT no BIOS, (caso não tenha sido feito ainda) volte atrás e defina a tabela de partições como GPT, depois crie uma partição sem formatação de 8 MB com o marcador <strong>%2</strong> ativado.<br/><br/>Uma partição não formatada de 8 MB é necessária para iniciar %1 em um sistema BIOS com GPT. - + Boot partition not encrypted - Partição de boot não criptografada + Partição de inicialização não criptografada - + 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. Uma partição de inicialização separada foi configurada juntamente com uma partição raiz criptografada, mas a partição de inicialização não é criptografada.<br/><br/>Há preocupações de segurança quanto a esse tipo de configuração, porque arquivos de sistema importantes são mantidos em uma partição não criptografada.<br/>Você pode continuar se quiser, mas o desbloqueio do sistema de arquivos acontecerá mais tarde durante a inicialização do sistema.<br/>Para criptografar a partição de inicialização, volte e recrie-a, selecionando <strong>Criptografar</strong> na janela de criação da partição. - + has at least one disk device available. tem pelo menos um dispositivo de disco disponível. - + There are no partitions to install on. Não há partições para instalar. @@ -2602,13 +2942,13 @@ O instalador será fechado e todas as alterações serão perdidas. PlasmaLnfJob - + Plasma Look-and-Feel Job Tarefa de Tema do Plasma - - + + Could not select KDE Plasma Look-and-Feel package Não foi possível selecionar o pacote de tema do KDE Plasma @@ -2616,17 +2956,17 @@ O instalador será fechado e todas as alterações serão perdidas. PlasmaLnfPage - + Form Formulário - + 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. Por favor escolha um tema para a área de trabalho KDE Plasma. Você também pode pular esta etapa e escolher um tema quando o sistema estiver configurado. Clicar em uma seleção de tema irá mostrar-lhe uma previsão dele em tempo real. - + 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. Por favor escolha um estilo visual para o Desktop KDE Plasma. Você também pode pular esse passo e configurar o estilo visual quando o sistema estiver instalado. Ao clicar na seleção de estilo visual será possível visualizar um preview daquele estilo visual. @@ -2634,7 +2974,7 @@ O instalador será fechado e todas as alterações serão perdidas. PlasmaLnfViewStep - + Look-and-Feel Tema @@ -2642,17 +2982,17 @@ O instalador será fechado e todas as alterações serão perdidas. PreserveFiles - + Saving files for later ... Salvando arquivos para mais tarde... - + No files configured to save for later. Nenhum arquivo configurado para ser salvo mais tarde. - + Not all of the configured files could be preserved. Nem todos os arquivos configurados puderam ser preservados. @@ -2660,14 +3000,14 @@ O instalador será fechado e todas as alterações serão perdidas. ProcessResult - + There was no output from the command. Não houve saída do comando. - + Output: @@ -2676,52 +3016,52 @@ Saída: - + External command crashed. O comando externo falhou. - + Command <i>%1</i> crashed. O comando <i>%1</i> falhou. - + External command failed to start. O comando externo falhou ao iniciar. - + Command <i>%1</i> failed to start. O comando <i>%1</i> falhou ao iniciar. - + Internal error when starting command. Erro interno ao iniciar o comando. - + Bad parameters for process job call. Parâmetros ruins para a chamada da tarefa do processo. - + External command failed to finish. O comando externo falhou ao finalizar. - + Command <i>%1</i> failed to finish in %2 seconds. O comando <i>%1</i> falhou ao finalizar em %2 segundos. - + External command finished with errors. O comando externo foi concluído com erros. - + Command <i>%1</i> finished with exit code %2. O comando <i>%1</i> foi concluído com o código %2. @@ -2729,89 +3069,95 @@ Saída: QObject - - Default Keyboard Model - Modelo de teclado padrão - - - - - Default - Padrão - - - - unknown - desconhecido - - - - extended - estendida - - - - unformatted - não formatado - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Espaço não particionado ou tabela de partições desconhecida - - - - (no mount point) - (sem ponto de montagem) - - - - Requirements checking for module <i>%1</i> is complete. - A verificação de requerimentos para o módulo <i>%1</i> está completa. - - - + %1 (%2) %1 (%2) - - No product - Sem produto + + unknown + desconhecido - - No description provided. - Nenhuma descrição disponível. + + extended + estendida - - - - + + unformatted + não formatado + + + + swap + swap + + + + + Default + Padrão + + + + + + File not found Arquivo não encontrado - + Path <pre>%1</pre> must be an absolute path. O caminho <pre>%1</pre> deve ser completo. - + + Directory not found + Diretório não encontrado + + + + Could not create new random file <pre>%1</pre>. Não foi possível criar um novo arquivo aleatório <pre>%1</pre>. + + + No product + Sem produto + + + + No description provided. + Nenhuma descrição disponível. + + + + (no mount point) + (sem ponto de montagem) + + + + Unpartitioned space or unknown partition table + Espaço não particionado ou tabela de partições desconhecida + + + + Recommended + + + <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> + <p>Este computador não satisfaz alguns dos requisitos recomendados para configurar %1.<br/> + A configuração pode continuar, mas alguns recursos podem ser desativados.</p> + RemoveUserJob - + Remove live user from target system Remover usuário live do sistema de destino @@ -2819,18 +3165,18 @@ Saída: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Remover Grupo de Volumes nomeado %1. - + Remove Volume Group named <strong>%1</strong>. Remover Grupo de Volumes nomeado <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. O instalador não conseguiu remover um grupo de volumes nomeado '%1'. @@ -2838,143 +3184,160 @@ Saída: ReplaceWidget - + Form Formulário - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selecione onde instalar %1.<br/><font color="red">Atenção:</font> isto excluirá todos os arquivos existentes na partição selecionada. - + The selected item does not appear to be a valid partition. O item selecionado não parece ser uma partição válida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 não pode ser instalado no espaço vazio. Por favor, selecione uma partição existente. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 não pode ser instalado em uma partição estendida. Por favor, selecione uma partição primária ou lógica existente. - + %1 cannot be installed on this partition. %1 não pode ser instalado nesta partição. - + Data partition (%1) Partição de dados (%1) - + Unknown system partition (%1) Partição de sistema desconhecida (%1) - + %1 system partition (%2) Partição de sistema %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partição %1 é muito pequena para %2. Por favor, selecione uma partição com capacidade mínima de %3 GiB. - + <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. <strong>%2</strong><br/><br/>Não foi encontrada uma partição de sistema EFI no sistema. Por favor, volte e use o particionamento manual para configurar %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 será instalado em %2.<br/><font color="red">Atenção: </font>todos os dados da partição %2 serão perdidos. - + The EFI system partition at %1 will be used for starting %2. A partição do sistema EFI em %1 será utilizada para iniciar %2. - + EFI system partition: Partição do sistema EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Este computador não satisfaz os requisitos mínimos para instalar %1.<br/> + A instalação não pode continuar.</p> + + + + <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> + <p>Este computador não satisfaz alguns dos requisitos recomendados para configurar %1.<br/> + A configuração pode continuar, mas alguns recursos podem ser desativados.</p> + + ResizeFSJob - + Resize Filesystem Job Redimensionar Tarefa de Sistema de Arquivos - + Invalid configuration Configuração inválida - + The file-system resize job has an invalid configuration and will not run. A tarefa de redimensionamento do sistema de arquivos tem uma configuração inválida e não poderá ser executada. - + KPMCore not Available O KPMCore não está disponível - + Calamares cannot start KPMCore for the file-system resize job. O Calamares não pôde iniciar o KPMCore para a tarefa de redimensionamento do sistema de arquivos. - - - - - + + + + + Resize Failed O Redimensionamento Falhou - + The filesystem %1 could not be found in this system, and cannot be resized. O sistema de arquivos %1 não pôde ser encontrado neste sistema e não poderá ser redimensionado. - + The device %1 could not be found in this system, and cannot be resized. O dispositivo %1 não pôde ser encontrado neste sistema e não poderá ser redimensionado. - - + + The filesystem %1 cannot be resized. O sistema de arquivos %1 não pode ser redimensionado. - - + + The device %1 cannot be resized. O dispositivo %1 não pode ser redimensionado. - + The filesystem %1 must be resized, but cannot. O sistema de arquivos %1 deve ser redimensionado, mas não foi possível executar a tarefa. - + The device %1 must be resized, but cannot O dispositivo %1 deve ser redimensionado, mas não foi possível executar a tarefa. @@ -2982,22 +3345,22 @@ Saída: ResizePartitionJob - + Resize partition %1. Redimensionar partição %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Redimensionar partição de <strong>%2MiB</strong> <strong>%1</strong> para <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Redimensionando partição de %2MiB %1 para %3MiB. - + The installer failed to resize partition %1 on disk '%2'. O instalador falhou em redimensionar a partição %1 no disco '%2'. @@ -3005,7 +3368,7 @@ Saída: ResizeVolumeGroupDialog - + Resize Volume Group Redimensionar Grupo de Volumes @@ -3013,18 +3376,18 @@ Saída: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Redimensionar grupo de volumes nomeado %1 de %2 para %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Redimensionar grupo de volumes nomeado <strong>%1</strong> de <strong>%2</strong> para <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. O instalador não conseguiu redimensionar um grupo de volumes nomeado '%1'. @@ -3032,53 +3395,25 @@ Saída: ResultsListDialog - + For best results, please ensure that this computer: Para melhores resultados, por favor, certifique-se de que este computador: - + System requirements Requisitos do sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Este computador não satisfaz os requerimentos mínimos para configurar %1.<br/>A configuração não pode continuar. <a href="#details">Detalhes...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Este computador não satisfaz alguns dos requerimentos recomendados para configurar %1.<br/>A configuração pode continuar, mas algumas funções podem ser desativadas. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas alguns recursos podem ser desativados. - - - - This program will ask you some questions and set up %2 on your computer. - Este programa irá fazer-lhe algumas perguntas e configurar %2 no computador. - - ScanningDialog - + Scanning storage devices... Localizando dispositivos de armazenamento... - + Partitioning Particionando @@ -3086,29 +3421,29 @@ Saída: SetHostNameJob - + Set hostname %1 Definir nome da máquina %1 - + Set hostname <strong>%1</strong>. Definir nome da máquina <strong>%1</strong>. - + Setting hostname %1. Definindo nome da máquina %1. + - Internal Error Erro interno - - + + Cannot write hostname to target system Não é possível gravar o nome da máquina para o sistema alvo @@ -3116,29 +3451,29 @@ Saída: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Definir modelo de teclado para %1, layout para %2-%3 - + Failed to write keyboard configuration for the virtual console. Falha ao gravar a configuração do teclado para o console virtual. - - - + + + Failed to write to %1 Falha ao gravar em %1 - + Failed to write keyboard configuration for X11. Falha ao gravar a configuração do teclado para X11. - + Failed to write keyboard configuration to existing /etc/default directory. Falha ao gravar a configuração do teclado no diretório /etc/default existente. @@ -3146,82 +3481,82 @@ Saída: SetPartFlagsJob - + Set flags on partition %1. Definir marcadores na partição %1. - + Set flags on %1MiB %2 partition. Definir marcadores na partição de %1MiB %2. - + Set flags on new partition. Definir marcadores na nova partição. - + Clear flags on partition <strong>%1</strong>. Limpar marcadores na partição <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Limpar marcadores na partição de %1MiB <strong>%2</strong>. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Marcar partição de %1MiB <strong>%2</strong> como <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Limpando marcadores na partição de %1MiB <strong>%2</strong>. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Definindo marcadores <strong>%3</strong> na partição de %1MiB <strong>%2</strong>. - - - + Clear flags on new partition. Limpar marcadores na nova partição. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Marcar partição <strong>%1</strong> como <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Marcar partição de %1MiB <strong>%2</strong> como <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Marcar nova partição como <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Limpando marcadores na partição <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Limpando marcadores na partição de %1MiB <strong>%2</strong>. + + + Clearing flags on new partition. Limpando marcadores na nova partição. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Definindo marcadores <strong>%2</strong> na partição <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Definindo marcadores <strong>%3</strong> na partição de %1MiB <strong>%2</strong>. + + + Setting flags <strong>%1</strong> on new partition. Definindo marcadores <strong>%1</strong> na nova partição. - + The installer failed to set flags on partition %1. O instalador falhou em definir marcadores na partição %1. @@ -3229,42 +3564,42 @@ Saída: SetPasswordJob - + Set password for user %1 Definir senha para usuário %1 - + Setting password for user %1. Definindo senha para usuário %1. - + Bad destination system path. O caminho para o sistema está mal direcionado. - + rootMountPoint is %1 rootMountPoint é %1 - + Cannot disable root account. Não é possível desativar a conta root. - + passwd terminated with error code %1. passwd terminado com código de erro %1. - + Cannot set password for user %1. Não foi possível definir senha para o usuário %1. - + usermod terminated with error code %1. usermod terminou com código de erro %1. @@ -3272,45 +3607,82 @@ Saída: SetTimezoneJob - + Set timezone to %1/%2 Definir fuso horário para %1/%2 - + Cannot access selected timezone path. Não é possível acessar o caminho do fuso horário selecionado. - + Bad path: %1 Caminho ruim: %1 - + Cannot set timezone. Não foi possível definir o fuso horário. - + Link creation failed, target: %1; link name: %2 Não foi possível criar o link, alvo: %1; nome: %2 - + Cannot set timezone, Não foi possível definir o fuso horário. - + Cannot open /etc/timezone for writing Não foi possível abrir /etc/timezone para gravação + + SetupGroupsJob + + + Preparing groups. + Preparando grupos. + + + + + Could not create groups in target system + Não foi possível criar grupos no sistema alvo + + + + These groups are missing in the target system: %1 + Estes grupos estão faltando no sistema alvo: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configurar usuários <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + Não foi possível utilizar chmod no arquivo sudoers. + + + + Cannot create sudoers file for writing. + Não foi possível criar arquivo sudoers para gravação. + + ShellProcessJob - + Shell Processes Job Processos de trabalho do Shell @@ -3318,81 +3690,117 @@ Saída: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Esta é uma visão geral do que acontecerá quando você iniciar o procedimento de configuração. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Este é um resumo do que acontecerá assim que o processo de instalação for iniciado. + + &Yes + &Sim - - - SummaryViewStep - - Summary - Resumo + + &No + &Não + + + + &Cancel + &Cancelar + + + + &Close + &Fechar TrackingInstallJob - + Installation feedback Feedback da instalação - + Sending installation feedback. Enviando feedback da instalação. - + Internal error in install-tracking. Erro interno no install-tracking. - + HTTP request timed out. A solicitação HTTP expirou. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Feedback de usuário KDE + + + + Configuring KDE user feedback. + Configurando feedback de usuário KDE. + + + + + Error in KDE user feedback configuration. + Erro na configuração do feedback de usuário KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Não foi possível configurar o feedback de usuário KDE corretamente, erro de script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Não foi possível configurar o feedback de usuário KDE corretamente, erro do Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Feedback da máquina - + Configuring machine feedback. Configurando feedback da máquina. - - + + Error in machine feedback configuration. Erro na configuração de feedback da máquina. - + Could not configure machine feedback correctly, script error %1. Não foi possível configurar o feedback da máquina corretamente, erro de script %1. - + Could not configure machine feedback correctly, Calamares error %1. Não foi possível configurar o feedback da máquina corretamente, erro do Calamares %1. @@ -3400,106 +3808,97 @@ Saída: TrackingPage - + Form Formulário - + Placeholder Substituto - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Ao selecionar isto, você <span style=" font-weight:600;">não enviará nenhuma informação</span> sobre sua instalação.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Clique aqui para não enviar <span style=" font-weight:600;">nenhum tipo de informação</span> sobre sua instalação.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Clique aqui para mais informações sobre o feedback do usuário</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - O rastreamento de instalação ajuda %1 a ver quantos usuários eles têm, em qual hardware eles instalam %1 e (com as duas últimas opções abaixo), adquirir informações sobre os aplicativos preferidos. Para ver o que será enviado, por favor, clique no ícone de ajuda perto de cada área. + + 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. + O rastreamento ajuda %1 a ver quão frequentemente ele é instalado, em qual hardware ele é instalado e quais aplicações são usadas. Para ver o que será enviado, por favor, clique no ícone de ajuda próximo a cada área. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Ao selecionar isto, você enviará informações sobre sua instalação e hardware. Esta informação <b>será enviada apenas uma vez</b> depois que a instalação terminar. + + 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. + Ao selecionar isto você enviará informações sobre sua instalação e hardware. Essa informação será enviada apenas <b>uma vez</b> depois que a instalação terminar. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Ao selecionar isto, você enviará <b>periodicamente</b> informações sobre sua instalação, hardware e aplicativos para %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Ao selecionar isto você enviará periodicamente informações sobre a instalação da sua <b>máquina</b>, hardware e aplicações para %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Ao selecionar isto, você enviará <b>regularmente</b> informações sobre sua instalação, hardware, aplicativos e padrões de uso para %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Ao selecionar isto você enviará periodicamente informações sobre a instalação do seu <b>usuário</b>, hardware, aplicações e padrões de uso das aplicações para %1. TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Desmontar os sistemas de arquivos. + + + + No target system available. + Não há um sistema alvo disponível. + + + + No rootMountPoint is set. + Nenhum rootMountPoint está definido. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar a configuração.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa for utilizar este computador, você poderá criar múltiplas contas após terminar de instalar.</small> + + + UsersQmlViewStep - - Your username is too long. - O nome de usuário é grande demais. - - - - Your username must start with a lowercase letter or underscore. - Seu nome de usuário deve começar com uma letra maiúscula ou com um sublinhado. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - É permitido apenas letras minúsculas, números, sublinhado e hífen. - - - - Only letters, numbers, underscore and hyphen are allowed. - É permitido apenas letras, números, sublinhado e hífen. - - - - Your hostname is too short. - O nome da máquina é muito curto. - - - - Your hostname is too long. - O nome da máquina é muito grande. - - - - Your passwords do not match! - As senhas não estão iguais! + + Users + Usuários UsersViewStep - + Users Usuários @@ -3507,65 +3906,67 @@ Saída: VariantModel - + Key + Column header for key/value Chave - + Value + Column header for key/value Valor VolumeGroupBaseDialog - + Create Volume Group Criar Grupo de Volumes - + List of Physical Volumes Lista de Volumes Físicos - + Volume Group Name: Nome do Grupo de Volumes: - + Volume Group Type: Tipo do Grupo de Volumes: - + Physical Extent Size: Extensão do Tamanho Físico: - + MiB MiB - + Total Size: Tamanho Total: - + Used Size: Tamanho Utilizado: - + Total Sectors: Total de Setores: - + Quantity of LVs: Quantidade de LVs: @@ -3573,106 +3974,106 @@ Saída: WelcomePage - + Form Formulário - - + + Select application and system language - Selecione a aplicação e a linguagem do sistema + Selecione o idioma do sistema e das aplicações + &About + &Sobre + + + Open donations website Abrir website de doações - + &Donate &Doar - + Open help and support website Abrir website de ajuda e suporte + &Support + &Suporte + + + Open issues and bug-tracking website Abrir website de problemas e rastreamento de bugs - Open release notes website - Abrir o site com as notas de lançamento - - - - &Release notes - &Notas de lançamento - - - &Known issues &Problemas conhecidos - - &Support - &Suporte + + Open release notes website + Abrir website com as notas de lançamento - - &About - &Sobre + + &Release notes + &Notas de lançamento - - <h1>Welcome to the %1 installer.</h1> - <h1>Bem-vindo ao instalador %1 .</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bem-vindo ao instalador Calamares para %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bem-vindo ao programa de configuração Calamares para %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Bem-vindo à configuração de %1</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Bem-vindo ao instalador Calamares para %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Bem-vindo ao instalador %1.</h1> + + + + %1 support + %1 suporte + + + About %1 setup Sobre a configuração de %1 - + About %1 installer Sobre o instalador %1 - + <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. - - - - - %1 support - %1 suporte + <h1>%1</h1><br/><strong>%2<br/>para %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/>Obrigado ao <a href="https://calamares.io/team/">time Calamares</a> e ao <a href="https://www.transifex.com/calamares/calamares/">time de tradutores do Calamares</a>.<br/><br/>O desenvolvimento do <a href="https://calamares.io/">Calamares</a> é patrocinado pela <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Bem-vindo @@ -3680,84 +4081,217 @@ Saída: WelcomeViewStep - + Welcome Bem-vindo + + ZfsJob + + + Create ZFS pools and datasets + Criação de pools ZFS e datasets + + + + Failed to create zpool on + Falha ao criar zpool on + + + + Configuration Error + Erro de Configuração. + + + + No partitions are available for ZFS. + Não há partições disponíveis para o ZFS. + + + + Internal data missing + Dados internos faltando + + + + + Failed to create zpool + Falha ao criar zpool + + + + Failed to create dataset + Falha ao criar dataset + + + + The output was: + O resultado foi: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + para %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/> + Obrigado ao <a href='https://calamares.io/team/'>time Calamares</a> + e ao <a href='https://www.transifex.com/calamares/calamares/'>time de + tradutores do Calamares</a>.<br/><br/> + O desenvolvimento do <a href='https://calamares.io/'>Calamares</a> + é patrocinado pela <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. - + Back - + Voltar + + + + calamares-sidebar + + + Show debug information + Exibir informações de depuração + + + + finishedq + + + Installation Completed + Instalação Completa + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 foi instalado no seu computador.<br/> + Você pode agora reiniciar em seu novo sistema, ou continuar usando o ambiente Live. + + + + Close Installer + Fechar Instalador + + + + Restart System + Reiniciar Sistema + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Um registro completo da instalação está disponível como installation.log no diretório home do usuário Live.<br/> + Esse registro é copiado para /var/log/installation.log do sistema alvo.</p> + + + + finishedq@mobile + + + Installation Completed + Instalação Completa + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 foi instalado no seu computador.<br/> + Agora você pode reiniciar o seu dispositivo. + + + + Close + Fechar + + + + Restart + Reiniciar + + + + i18n + + + <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>. + <h1>Idiomas</h1> </br> + A configuração de localidade do sistema afeta o idioma e o conjunto de caracteres para algumas linhas de comando e elementos da interface do usuário. A configuração atual é <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Localização</h1> </br> + A configuração de localização do sistema afeta os formatos de números e datas. A configuração atual é <strong>%1</strong>. + + + + Back + Voltar keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Para ativar a pré-visualização do teclado, selecione um layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelo de teclado: - - Refresh - - - - - + Layouts - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Escreva aqui para testar o seu teclado - - Models - - - - + Variants - + Variantes + + + localeq - - Test your keyboard - + + Change + Modificar notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3765,34 +4299,262 @@ Saída: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + O LibreOffice é um programa de produtividade poderoso e gratuito, utilizado por milhões de pessoas ao redor do mundo. Ele inclui vários aplicativos que o tornam o programa de produtividade Livre e de Código Aberto mais versátil do mercado.<br/> + Opção padrão. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Se você não quiser instalar uma suíte de escritório, basta selecionar Sem Suíte de Escritório. Você pode sempre adicionar uma (ou mais) mais tarde no sistema instalado, à medida que precisar. + + + + No Office Suite + Sem Suíte de Escritório + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Crie uma instalação mínima da Área de Trabalho, remova todas as aplicações adicionais e decida mais tarde o que gostaria de adicionar ao sistema. Exemplos do que não estará em tal instalação: não haverá nenhuma suíte de escritório, nenhum reprodutor multimídia, nenhum visualizador de imagens ou suporte para impressão. Será apenas um ambiente de trabalho, navegador de arquivos, gerenciador de pacotes, editor de texto e um simples navegador de internet. + + + + Minimal Install + Instalação Mínima + + + + Please select an option for your install, or use the default: LibreOffice included. + Por favor, selecione uma opção para sua instalação, ou use o padrão: LibreOffice incluído. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Este é um exemplo de arquivo QML, mostrando as opções em RichText com conteúdo Flickable.</p> + + <p>QML com RichText pode usar tags HTML, conteúdo Flickable é útil para telas sensíveis ao toque.</p> + + <p><b>Este é um texto em negrito</b></p> + <p><i>Este é um texto em itálico</i></p> + <p><u>Este é um texto sublinhado</u></p> + <p><center>Este texto será centralizado.</center></p> + <p><s>Isto é tachado</s></p> + + <p>Código-exemplo: + <code>ls -l /home</code></p> + + <p><b>Listas:</b></p> + <ul> + <li>Sistemas de CPU Intel</li> + <li>Sistemas de CPU AMD</li> + </ul> + + <p>A barra de rolagem vertical é ajustável e a largura atual está definida como 10.</p> + + + + Back + Voltar + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Escolha seu nome de usuário e credenciais para entrar e executar tarefas de administrador + + + + What is your name? + Qual é o seu nome? + + + + Your Full Name + Seu nome completo + + + + What name do you want to use to log in? + Qual nome você quer usar para entrar? + + + + Login Name + Nome do Login + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Se mais de uma pessoa for usar este computador, você poderá criar múltiplas contas após a instalação. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + É permitido apenas letras minúsculas, números, sublinhado e hífen. + + + + root is not allowed as username. + root não é permitido como um nome de usuário. + + + + What is the name of this computer? + Qual é o nome deste computador? + + + + Computer Name + Nome do computador + + + + This name will be used if you make the computer visible to others on a network. + Este nome será usado se você fizer o computador ficar visível para outros numa rede. + + + + localhost is not allowed as hostname. + localhost não é permitido como hostname. + + + + Choose a password to keep your account safe. + Escolha uma senha para manter a sua conta segura. + + + + Password + Senha + + + + Repeat Password + Repita a senha + + + + 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. + Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. Uma boa senha contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres, e deve ser alterada em intervalos regulares. + + + + Validate passwords quality + Validar qualidade das senhas + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Quando esta caixa estiver marcada, será feita a verificação da força da senha e você não poderá usar uma senha fraca. + + + + Log in automatically without asking for the password + Entrar automaticamente sem perguntar pela senha + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + São permitidos apenas letras, números, sublinhado e hífen, com no mínimo dois caracteres. + + + + Reuse user password as root password + Reutilizar a senha de usuário como senha de root + + + + Use the same password for the administrator account. + Usar a mesma senha para a conta de administrador. + + + + Choose a root password to keep your account safe. + Escolha uma senha de root para manter sua conta segura. + + + + Root Password + Senha de Root + + + + Repeat Root Password + Repita a Senha de Root + + + + Enter the same password twice, so that it can be checked for typing errors. + Digite a mesma senha duas vezes, de modo que possam ser verificados erros de digitação. + + + + welcomeq + + + <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> + <h3>Bem-vindo ao %1 instalador <quote>%2</quote></h3> + <p>Este programa fará algumas perguntas e configurar o %1 no seu computador.</p> + + + About Sobre - + Support Suporte - + Known issues Problemas conhecidos - + Release notes Notas de lançamento - + Donate Faça uma doação diff --git a/lang/calamares_pt_PT.ts b/lang/calamares_pt_PT.ts index 822c4818e..fcdfc65f2 100644 --- a/lang/calamares_pt_PT.ts +++ b/lang/calamares_pt_PT.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Gerir definições de montagem automática + + BootInfoWidget - + 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. O <strong>ambiente de arranque</strong> deste sistema.<br><br>Sistemas x86 mais antigos apenas suportam <strong>BIOS</strong>.<br>Sistemas modernos normalmente usam <strong>EFI</strong>, mas também podem aparecer como BIOS se iniciados em modo de compatibilidade. - + 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. Este sistema foi iniciado com ambiente de arranque<strong>EFI</strong>.<br><br>Para configurar o arranque de um ambiente EFI, o instalador tem de implantar uma aplicação de carregar de arranque, tipo <strong>GRUB</strong> ou <strong>systemd-boot</strong> ou uma <strong>Partição de Sistema EFI</strong>. Isto é automático, a menos que escolha particionamento manual, e nesse caso tem de escolhê-la ou criar uma por si próprio. - + 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. - Este sistema foi iniciado com um ambiente de arranque <strong>BIOS</strong>.<br><br>Para configurar um arranque de um ambiente BIOS, este instalador tem de instalar um carregador de arranque, tipo <strong>GRUB</strong>, quer no início da partição ou no <strong>Master Boot Record</strong> perto do início da tabela de partições (preferido). Isto é automático, a não ser que escolha particionamento manual, e nesse caso tem de o configurar por si próprio + Este sistema foi iniciado com um ambiente de arranque <strong>BIOS</strong>.<br><br>Para configurar um arranque de um ambiente BIOS, este instalador tem de instalar um carregador de arranque, tipo <strong>GRUB</strong>, quer no início da partição ou no <strong>Master Boot Record</strong> perto do início da tabela de partições (preferido). Isto é automático, a não ser que escolha particionamento manual, e nesse caso tem de o configurar por si próprio. BootLoaderModel - + Master Boot Record of %1 Master Boot Record de %1 - + Boot Partition Partição de arranque - + System Partition Partição do Sistema - + Do not install a boot loader Não instalar um carregador de arranque - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Página em Branco @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formulário - + GlobalStorage ArmazenamentoGlobal - + JobQueue FilaDeTrabalho - + Modules Módulos - + Type: Tipo: - - + + none nenhum - + Interface: Interface: - - Tools - Ferramentas + + Crashes Calamares, so that Dr. Konqui can look at it. + Faz o Calamares falhar, para que o Dr. Konqui o possa observar. - + + Reloads the stylesheet from the branding directory. + Recarregar a folha de estilo do diretório de marca. + + + + Uploads the session log to the configured pastebin. + Envia o registo da sessão para o pastebin configurado. + + + + Send Session Log + Enviar registo de sessão + + + Reload Stylesheet Recarregar Folha de estilo - + + Displays the tree of widget names in the log (for stylesheet debugging). + Apresenta a árvore de nomes de widgets no registo (para depuração de folhas de estilo). + + + Widget Tree Árvore de Widgets - + Debug information Informação de depuração @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Configuração - + Install Instalar @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Tarefa falhou (%1) - + Programmed job failure was explicitly requested. Falha de tarefa programada foi explicitamente solicitada. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Concluído @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Exemplo de tarefa (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - Execute o comando '%1' no sistema alvo. + Executar o comando '%1' no sistema de destino. - + Run command '%1'. - Execute o comando '%1'. + Executar comando '%1'. - + Running command %1 %2 A executar comando %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Operação %1 em execução. - + Bad working directory path Caminho do directório de trabalho errado - + Working directory %1 for python job %2 is not readable. Directório de trabalho %1 para a tarefa python %2 não é legível. - + Bad main script file Ficheiro de script principal errado - + Main script file %1 for python job %2 is not readable. Ficheiro de script principal %1 para a tarefa python %2 não é legível. - + Boost.Python error in job "%1". Erro Boost.Python na tarefa "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + A carregar... - + QML Step <i>%1</i>. - + Passo QML <i>%1</i>. - + Loading failed. - + Falha ao carregar. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + A verificação de requisitos para o módulo <i>%1</i> está completa. + - + Waiting for %n module(s). A aguardar por %n módulo(s). @@ -236,7 +269,7 @@ - + (%n second(s)) (%n segundo(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. A verificação de requisitos de sistema está completa. @@ -252,247 +285,241 @@ Calamares::ViewManager - - &Back - &Voltar - - - - &Next - &Próximo - - - - &Cancel - &Cancelar - - - - Cancel setup without changing the system. - Cancelar instalação sem alterar o sistema. - - - - Cancel installation without changing the system. - Cancelar instalar instalação sem modificar o sistema. - - - + Setup Failed Falha de Instalação - - Would you like to paste the install log to the web? - Deseja colar o registo de instalação na Web? + + Installation Failed + Falha na Instalação - + + Error + Erro + + + + &Yes + &Sim + + + + &No + &Não + + + + &Close + &Fechar + + + Install Log Paste URL - Instalar o URL da pasta de registo + Instalar o Registo Colar URL - + The upload was unsuccessful. No web-paste was done. O carregamento não teve êxito. Nenhuma pasta da web foi feita. - + + Install log posted to + +%1 + +Link copied to clipboard + Registo de instalação publicado em + +%1 + +Ligação copiada para a área de transferência + + + Calamares Initialization Failed Falha na Inicialização do Calamares - + %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. %1 não pode ser instalado. O Calamares não foi capaz de carregar todos os módulos configurados. Isto é um problema da maneira como o Calamares é usado pela distribuição. - + <br/>The following modules could not be loaded: <br/>Os módulos seguintes não puderam ser carregados: - + + Continue with setup? + Continuar com a configuração? + + + Continue with installation? Continuar com a instalação? - + 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> - O programa de instalação %1 está prestes a fazer alterações no seu disco para configurar o %2.<br/><strong>Você não poderá desfazer essas alterações.</strong> + O programa de instalação %1 está prestes a efetuar alterações no seu disco a fim de configurar o %2.<br/><strong>Não poderá anular estas alterações.</strong> - + + 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> + O instalador %1 está prestes a efetuar alterações ao seu disco a fim de instalar o %2.<br/><strong>Não será capaz de anular estas alterações.</strong> + + + &Set up now &Instalar agora - + + &Install now + &Instalar agora + + + + Go &back + Voltar &atrás + + + &Set up &Instalar - + &Install &Instalar - + Setup is complete. Close the setup program. Instalação completa. Feche o programa de instalação. - + + The installation is complete. Close the installer. + A instalação está completa. Feche o instalador. + + + + Cancel setup without changing the system. + Cancelar instalação sem alterar o sistema. + + + + Cancel installation without changing the system. + Cancelar instalar instalação sem modificar o sistema. + + + + &Next + &Próximo + + + + &Back + &Voltar + + + + &Done + &Feito + + + + &Cancel + &Cancelar + + + Cancel setup? Cancelar instalação? - + Cancel installation? Cancelar a instalação? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Quer mesmo cancelar o processo de instalação atual? O programa de instalação irá fechar todas as alterações serão perdidas. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Tem a certeza que pretende cancelar o atual processo de instalação? O instalador será encerrado e todas as alterações serão perdidas. - - - - &Yes - &Sim - - - - - &No - &Não - - - - &Close - &Fechar - - - - Continue with setup? - Continuar com a configuração? - - - - 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> - O %1 instalador está prestes a fazer alterações ao seu disco em ordem para instalar %2.<br/><strong>Não será capaz de desfazer estas alterações.</strong> - - - - &Install now - &Instalar agora - - - - Go &back - Voltar &atrás - - - - &Done - &Feito - - - - The installation is complete. Close the installer. - A instalação está completa. Feche o instalador. - - - - Error - Erro - - - - Installation Failed - Falha na Instalação - CalamaresPython::Helper - + Unknown exception type Tipo de exceção desconhecido - + unparseable Python error erro inanalisável do Python - + unparseable Python traceback rasto inanalisável do Python - + Unfetchable Python error. Erro inatingível do Python. - - CalamaresUtils - - - Install log posted to: -%1 - Instalar registo publicado em: -%1 - - CalamaresWindow - - &Back - &Voltar - - - - &Next - &Próximo - - - - &Cancel - &Cancelar - - - + %1 Setup Program %1 Programa de Instalação - + %1 Installer %1 Instalador + + + ChangeFilesystemLabelJob - - Show debug information - Mostrar informação de depuração + + Set filesystem label on %1. + A definir a identificação do sistema de ficheiros em %1 + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Definir a identificação do sistema de ficheiros <strong>%1</strong> para a partição <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + O instalador falhou ao atualizar a tabela de partições no disco '%1'. CheckerContainer - + Gathering system information... A recolher informação de sistema... @@ -500,157 +527,197 @@ O instalador será encerrado e todas as alterações serão perdidas. ChoicePage - + Form Formulário - - After: - Depois: - - - - Boot loader location: - Localização do carregador de arranque: - - - + Select storage de&vice: Selecione o dis&positivo de armazenamento: - - - - + + + + Current: Atual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Depois: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Particionamento manual</strong><br/>Pode criar ou redimensionar partições manualmente. + + + Reuse %1 as home partition for %2. Reutilizar %1 como partição home para %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selecione uma partição para encolher, depois arraste a barra de fundo para redimensionar</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + %1 será encolhida para %2MiB e uma nova %3MiB partição será criada para %4. - + + Boot loader location: + Localização do carregador de arranque: + + + <strong>Select a partition to install on</strong> <strong>Selecione uma partição para instalar</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Nenhuma partição de sistema EFI foi encontrada neste sistema. Por favor volte atrás e use o particionamento manual para configurar %1. - + The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será usada para iniciar %2. - + EFI system partition: Partição de sistema EFI: - + 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. Este dispositivo de armazenamento aparenta não ter um sistema operativo. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Apagar disco</strong><br/>Isto irá <font color="red">apagar</font> todos os dados atualmente apresentados no dispositivo de armazenamento selecionado. - - 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. - Este dispositivo de armazenamento tem %1 nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - - - - No Swap - Sem Swap - - - - Reuse Swap - Reutilizar Swap - - - - Swap (no Hibernate) - Swap (sem Hibernação) - - - - Swap (with Hibernate) - Swap (com Hibernação) - - - - Swap to file - Swap para ficheiro - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalar paralelamente</strong><br/>O instalador irá encolher a partição para arranjar espaço para %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Substituir a partição</strong><br/>Substitui a partição com %1. - + + 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. + Este dispositivo de armazenamento tem %1 nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. + + + 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. Este dispositivo de armazenamento já tem um sistema operativo nele. O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. - + 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. Este dispositivo de armazenamento tem múltiplos sistemas operativos nele, O que quer fazer?<br/>Poderá rever e confirmar as suas escolhas antes de qualquer alteração ser feita no dispositivo de armazenamento. + + + 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/> + O dispositivo de armazenamento já possui um sistema operativo, mas a tabela de partições <strong>%1</strong> é diferente da necessária <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + O dispositivo de armazenamento tem uma das suas partições <strong>montada</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + O dispositivo de armazenamento é parte de um dispositivo <strong>RAID inativo</strong>. + + + + No Swap + Sem Swap + + + + Reuse Swap + Reutilizar Swap + + + + Swap (no Hibernate) + Swap (sem Hibernação) + + + + Swap (with Hibernate) + Swap (com Hibernação) + + + + Swap to file + Swap para ficheiro + ClearMountsJob - + + Successfully unmounted %1. + % 1 desmontado com sucesso. + + + + Successfully disabled swap %1. + Swap %1 desativada com sucesso. + + + + Successfully cleared swap %1. + Swap % 1 limpa com sucesso. + + + + Successfully closed mapper device %1. + Dispositivo mapeador % 1 fechado com sucesso. + + + + Successfully disabled volume group %1. + Grupo de volume % 1 desativado com sucesso. + + + Clear mounts for partitioning operations on %1 Limpar montagens para operações de particionamento em %1 - + Clearing mounts for partitioning operations on %1. A limpar montagens para operações de particionamento em %1. - + Cleared all mounts for %1 Limpar todas as montagens para %1 @@ -658,22 +725,17 @@ O instalador será encerrado e todas as alterações serão perdidas. ClearTempMountsJob - + Clear all temporary mounts. Limpar todas as montagens temporárias. - + Clearing all temporary mounts. A limpar todas as montagens temporárias. - - Cannot get list of temporary mounts. - Não é possível obter a lista de montagens temporárias. - - - + Cleared all temporary mounts. Limpou todas as montagens temporárias. @@ -681,18 +743,18 @@ O instalador será encerrado e todas as alterações serão perdidas. CommandList - - + + Could not run command. Não foi possível correr o comando. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. O comando corre no ambiente do host e precisa de conhecer o caminho root, mas nenhum Ponto de Montagem root está definido. - + The command needs to know the user's name, but no username is defined. O comando precisa de saber o nome do utilizador, mas não está definido nenhum nome de utilizador. @@ -700,100 +762,235 @@ O instalador será encerrado e todas as alterações serão perdidas. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas algumas funcionalidades poderão ser desativadas. - - - - This program will ask you some questions and set up %2 on your computer. - Este programa vai fazer-lhe algumas perguntas e configurar o %2 no seu computador. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Bem vindo ao programa de instalação Calamares para %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Bem vindo à instalação de %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bem vindo ao instalador Calamares para %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Bem vindo ao instalador do %1.</h1> - - - + Set keyboard model to %1.<br/> Definir o modelo do teclado para %1.<br/> - + Set keyboard layout to %1/%2. Definir esquema do teclado para %1/%2. - - The system language will be set to %1. - A linguagem do sistema será definida para %1. + + Set timezone to %1/%2. + Definir fuso horário para %1/%2. - + + The system language will be set to %1. + O idioma do sistema será definido para %1. + + + The numbers and dates locale will be set to %1. Os números e datas locais serão definidos para %1. - - Set timezone to %1/%2.<br/> - Definir fuso horário para %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Instalação de rede. (Desativada: Configuração incorreta) - + Network Installation. (Disabled: Received invalid groups data) Instalação de Rede. (Desativada: Recebeu dados de grupos inválidos) - - Network Installation. (Disabled: internal error) - + + Network Installation. (Disabled: Internal error) + Instalação de rede. (Desativada: Erro interno) - + + Network Installation. (Disabled: No package list) + Instalação de rede. (Desativada: Sem lista de pacotes) + + + + Package selection + Seleção de pacotes + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Instalaçao de Rede. (Desativada: Incapaz de buscar listas de pacotes, verifique a sua ligação de rede) + Instalação de rede. (Desativada: Incapaz de buscar listas de pacotes, verifique a sua ligação de rede) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Este computador não satisfaz os requisitos mínimos para configurar %1.<br/>A configuração não pode continuar. <a href="#details">Detalhes...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Este computador não satisfaz os requisitos mínimos para instalar o %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Este computador não satisfaz alguns dos requisitos recomendados para configurar %1.<br/>A configuração pode continuar, mas algumas funcionalidades podem ser desativadas. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Este computador não satisfaz alguns dos requisitos recomendados para instalar o %1.<br/>A instalação pode continuar, mas algumas funcionalidades poderão ser desativadas. + + + + This program will ask you some questions and set up %2 on your computer. + Este programa vai fazer-lhe algumas perguntas e configurar o %2 no seu computador. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Bem-vindo ao programa de configuração do Calamares para %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Bem-vindo à configuração de %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Bem-vindo ao instalador do Calamares para %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Bem-vindo ao instalador do %1</h1> + + + + Your username is too long. + O seu nome de utilizador é demasiado longo. + + + + '%1' is not allowed as username. + '%1' não é permitido como nome de utilizador. + + + + Your username must start with a lowercase letter or underscore. + O seu nome de utilizador deve começar com uma letra minúscula ou underscore. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Apenas letras minúsculas, números, underscore e hífen são permitidos. + + + + Your hostname is too short. + O nome da sua máquina é demasiado curto. + + + + Your hostname is too long. + O nome da sua máquina é demasiado longo. + + + + '%1' is not allowed as hostname. + '%1' não é permitido como nome da máquina. + + + + Only letters, numbers, underscore and hyphen are allowed. + Apenas letras, números, underscore e hífen são permitidos. + + + + Your passwords do not match! + As suas palavras-passe não coincidem! + + + + OK! + OK! + + + + Setup Failed + Falha de Instalação + + + + Installation Failed + Falha na Instalação + + + + The setup of %1 did not complete successfully. + A configuração de %1 não foi concluída com sucesso. + + + + The installation of %1 did not complete successfully. + A instalação de %1 não foi concluída com sucesso. + + + + Setup Complete + Instalação Completa + + + + Installation Complete + Instalação Completa + + + + The setup of %1 is complete. + A instalação de %1 está completa. + + + + The installation of %1 is complete. + A instalação de %1 está completa. + + + + Package Selection + Seleção de pacote + + + + Please pick a product from the list. The selected product will be installed. + Por favor, escolha um produto da lista. O produto selecionado será instalado. + + + + Install option: <strong>%1</strong> + Instalar opção: <strong>%1</strong> + + + + None + Nenhum + + + + Summary + Resumo + + + + This is an overview of what will happen once you start the setup procedure. + Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de configuração. + + + + This is an overview of what will happen once you start the install procedure. + Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de instalação. ContextualProcessJob - + Contextual Processes Job Tarefa de Processos Contextuais @@ -801,100 +998,136 @@ O instalador será encerrado e todas as alterações serão perdidas. CreatePartitionDialog - + Create a Partition Criar uma Partição - - MiB - MiB - - - - Partition &Type: - Partição &Tamanho: - - - - &Primary - &Primário - - - - E&xtended - E&stendida - - - - Fi&le System: - Sistema de Fi&cheiros: - - - - LVM LV name - nome LVM LV - - - - Flags: - Flags: - - - - &Mount Point: - &Ponto de Montagem: - - - + Si&ze: Ta&manho: - + + MiB + MiB + + + + Partition &Type: + Partição &Tamanho: + + + + Primar&y + Principal + + + + E&xtended + E&stendida + + + + Fi&le System: + Sistema de Fi&cheiros: + + + + LVM LV name + nome LVM LV + + + + &Mount Point: + &Ponto de Montagem: + + + + Flags: + Flags: + + + + Label for the filesystem + Identificação para o sistema de ficheiros + + + + FS Label: + Identificação do FS: + + + En&crypt En&criptar - + Logical Lógica - + Primary Primária - + GPT GPT - + Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor selecione outro. + + + Mountpoint must start with a <tt>/</tt>. + O ponto de montagem deve começar com um <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Criar nova partição de %1MiB em %3 (%2) com entradas %4. + + + + Create new %1MiB partition on %3 (%2). + Criar nova partição de %1MiB em %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - + Criar nova partição de %2MiB em %4 (%3) com o sistema de ficheiros %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2) com entradas <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Criar nova partição de <strong>%1MiB</strong> em <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + Criar nova partição de <strong>%2MiB</strong> em <strong>%4</strong> (%3) com o sistema de ficheiros <strong>%1</strong>. - + + Creating new %1 partition on %2. Criando nova partição %1 em %2. - + The installer failed to create partition on disk '%1'. O instalador falhou a criação da partição no disco '%1'. @@ -902,27 +1135,27 @@ O instalador será encerrado e todas as alterações serão perdidas. CreatePartitionTableDialog - + Create Partition Table Criar Tabela de Partições - + Creating a new partition table will delete all existing data on the disk. Criar uma nova tabela de partições irá apagar todos os dados existentes no disco. - + What kind of partition table do you want to create? Que tipo de tabela de partições quer criar? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) Tabela de Partições GUID (GPT) @@ -930,22 +1163,22 @@ O instalador será encerrado e todas as alterações serão perdidas. CreatePartitionTableJob - + Create new %1 partition table on %2. Criar nova %1 tabela de partições em %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Criar nova <strong>%1</strong> tabela de partições <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. A criar nova %1 tabela de partições em %2. - + The installer failed to create a partition table on %1. O instalador falhou a criação de uma tabela de partições em %1. @@ -953,45 +1186,41 @@ O instalador será encerrado e todas as alterações serão perdidas. CreateUserJob - + Create user %1 Criar utilizador %1 - + Create user <strong>%1</strong>. Criar utilizador <strong>%1</strong>. - - Creating user %1. - A criar utilizador %1. + + Preserving home directory + A preservar o directório da pasta pessoal - - Sudoers dir is not writable. - O diretório dos super utilizadores não é gravável. + + + Creating user %1 + A criar utilizador %1 - - Cannot create sudoers file for writing. - Impossível criar ficheiro do super utilizador para escrita. + + Configuring user %1 + A configurar o utilizador %1 - - Cannot chmod sudoers file. - Impossível de usar chmod no ficheiro dos super utilizadores. - - - - Cannot open groups file for reading. - Impossível abrir ficheiro dos grupos para leitura. + + Setting file permissions + A definir permissões de ficheiro CreateVolumeGroupDialog - + Create Volume Group Criar Grupo de Volume @@ -999,22 +1228,22 @@ O instalador será encerrado e todas as alterações serão perdidas. CreateVolumeGroupJob - + Create new volume group named %1. Criar novo grupo de volume com o nome %1. - + Create new volume group named <strong>%1</strong>. Criar novo grupo de volume com o nome <strong>%1</strong>. - + Creating new volume group named %1. A criar novo grupo de volume com o nome %1. - + The installer failed to create a volume group named '%1'. O instalador falhou ao criar o grupo de volume com o nome '%1'. @@ -1022,18 +1251,18 @@ O instalador será encerrado e todas as alterações serão perdidas. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Desativar grupo de volume com o nome %1. - + Deactivate volume group named <strong>%1</strong>. Desativar grupo de volume com o nome <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. O instalador falhou ao desativar o grupo de volume com o nome %1. @@ -1041,22 +1270,22 @@ O instalador será encerrado e todas as alterações serão perdidas. DeletePartitionJob - + Delete partition %1. Apagar partição %1. - + Delete partition <strong>%1</strong>. Apagar partição <strong>%1</strong>. - + Deleting partition %1. A apagar a partição %1. - + The installer failed to delete partition %1. O instalador não conseguiu apagar a partição %1. @@ -1064,46 +1293,46 @@ O instalador será encerrado e todas as alterações serão perdidas. DeviceInfoWidget - - 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. - O tipo da <strong>tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>A única maneira de mudar o tipo da tabela de partições é apagá-la e recriar a tabela de partições do nada, o que destrói todos os dados no dispositivo de armazenamento.<br>Este instalador manterá a tabela de partições atual a não ser que escolha explicitamente em contrário.<br>Se não tem a certeza, nos sistemas modernos é preferido o GPT. - - - + This device has a <strong>%1</strong> partition table. Este dispositivo tem uma tabela de partições <strong>%1</strong>. - + 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. Este é um dispositivo<strong>loop</strong>.<br><br>É um pseudo-dispositivo sem tabela de partições que torna um ficheiro acessível como um dispositivo de bloco. Este tipo de configuração normalmente apenas contém um único sistema de ficheiros. - + 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. Este instalador <strong>não consegue detetar uma tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>O dispositivo ou não tem tabela de partições, ou a tabela de partições está corrompida ou é de tipo desconhecido.<br>Este instalador pode criar uma nova tabela de partições para si, quer automativamente, ou através da página de particionamento manual. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Este é o tipo de tabela de partições recomendado para sistema modernos que arrancam a partir de um ambiente <strong>EFI</strong> de arranque. - + <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. <br><br>Este tipo de tabela de partições é aconselhável apenas em sistemas mais antigos que iniciam a partir de um ambiente de arranque <strong>BIOS</strong>. GPT é recomendado na maior parte dos outros casos.<br><br><strong>Aviso:</strong> A tabela de partições MBR é um standard obsoleto da era MS-DOS.<br>Apenas 4 partições <em>primárias</em> podem ser criadas, e dessa 4, apenas uma pode ser partição <em>estendida</em>, que por sua vez podem ser tornadas em várias partições <em>lógicas</em>. + + + 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. + O tipo da <strong>tabela de partições</strong> no dispositivo de armazenamento selecionado.<br><br>A única maneira de mudar o tipo da tabela de partições é apagá-la e recriar a tabela de partições do nada, o que destrói todos os dados no dispositivo de armazenamento.<br>Este instalador manterá a tabela de partições atual a não ser que escolha explicitamente em contrário.<br>Se não tem a certeza, nos sistemas modernos é preferido o GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1341,17 @@ O instalador será encerrado e todas as alterações serão perdidas. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Escrever configuração LUKS para Dracut em %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Saltar escrita de configuração LUKS para Dracut: partição "/" não está encriptada - + Failed to open %1 Falha ao abrir %1 @@ -1130,131 +1359,175 @@ O instalador será encerrado e todas as alterações serão perdidas. DummyCppJob - + Dummy C++ Job - Tarefa Dummy C++ + Tarefa Dummy C++ EditExistingPartitionDialog - + Edit Existing Partition Editar Partição Existente - - Content: - Conteúdo: + + Con&tent: + Con&teúdo: - + &Keep &Manter - + Format - Formatar: + Formatar - + Warning: Formatting the partition will erase all existing data. Atenção: Formatar a partição irá apagar todos os dados existentes. - + &Mount Point: &Ponto de Montagem: - + Si&ze: Ta&manho: - + MiB MiB - + Fi&le System: Si&stema de Ficheiros: - + Flags: Flags: - - Mountpoint already in use. Please select another one. - Ponto de montagem já em uso. Por favor selecione outro. + + Label for the filesystem + Nome para o sistema de ficheiros + + + + FS Label: + Identificação do FS: EncryptWidget - + Form Forma - + En&crypt system En&criptar systema - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + O sistema não parece suportar encriptação o suficiente para encriptar todo o sistema. Pode permitir a encriptação, mas o seu desempenho pode diminuir. + + + Passphrase Frase-chave - + Confirm passphrase Confirmar frase-chave - + + Please enter the same passphrase in both boxes. Por favor insira a mesma frase-passe em ambas as caixas. + + ErrorDialog + + + Details: + Detalhes: + + + + Would you like to paste the install log to the web? + Deseja colar o registo de instalação na Web? + + FillGlobalStorageJob - + Set partition information Definir informação da partição - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Instalar %1 na <strong>nova</strong> partição do sistema %2 com funcionalidades <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Instalar %1 na <strong>nova</strong> %2 partição de sistema. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Criar <strong>nova</strong> %2 partição com ponto de montagem <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Configurar <strong>nova</strong> partição %2 com ponto de montagem <strong>%1</strong> e funcionalidades <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Configurar <strong>nova</strong> partição %2 com ponto de montagem <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Instalar %2 em %3 partição do sistema <strong>%1</strong> com funcionalidades <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Configurar %3 partição <strong>%1</strong> com ponto de montagem <strong>%2</strong> e funcionalidades <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Configurar %3 partição <strong>%1</strong> com ponto de montagem <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Instalar %2 em %3 partição de sistema <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Criar %3 partitição <strong>%1</strong> com ponto de montagem <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instalar carregador de arranque em <strong>%1</strong>. - + Setting up mount points. Definindo pontos de montagem. @@ -1262,93 +1535,81 @@ O instalador será encerrado e todas as alterações serão perdidas. FinishedPage - + Form Formulário - + &Restart now &Reiniciar agora - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <h1>Tudo concluído.</h1><br/>%1 foi configurado no seu computador.<br/>Pode agora começar a utilizar o seu novo sistema. - + <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> - + <html><head/><body><p>Quando esta caixa for marcada, o seu sistema irá reiniciar imediatamente quando clicar em <span style="font-style:italic;">Concluído</span> ou fechar o programa de configuração.</p></body></html> - + <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. <h1>Tudo feito</h1><br/>%1 foi instalado no seu computador.<br/>Pode agora reiniciar para o seu novo sistema, ou continuar a usar o %2 ambiente Live. - + <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> - + <html><head/><body><p>Quando esta caixa for marcada, o seu sistema irá reiniciar imediatamente quando clicar em <span style="font-style:italic;">Concluído</span> ou fechar o instalador.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Falha na configuração</h1><br/>%1 não foi configurado no seu computador.<br/>A mensagem de erro foi: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalação Falhada</h1><br/>%1 não foi instalado no seu computador.<br/>A mensagem de erro foi: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Finalizar + + + FinishedViewStep - - Setup Complete - Instalação Completa - - - - Installation Complete - Instalação Completa - - - - The setup of %1 is complete. - A instalação de %1 está completa. - - - - The installation of %1 is complete. - A instalação de %1 está completa. + + Finish + Finalizar FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Formatar partição %1 (sistema de ficheiros: %2, tamanho: %3 MiB) em %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatar partição de <strong>%3MiB</strong> <strong>%1</strong> com o sistema de ficheiros <strong>%2</strong>. - + Formatting partition %1 with file system %2. A formatar partição %1 com sistema de ficheiros %2. - + The installer failed to format partition %1 on disk '%2'. O instalador falhou ao formatar a partição %1 no disco '%2'. @@ -1356,72 +1617,72 @@ O instalador será encerrado e todas as alterações serão perdidas. GeneralRequirements - + has at least %1 GiB available drive space - + tem pelo menos %1 GiB de espaço livre em disco - + There is not enough drive space. At least %1 GiB is required. - + Não existe espaço livre suficiente em disco. É necessário pelo menos %1 GiB. - + has at least %1 GiB working memory - + tem pelo menos %1 GiB de memória disponível - + The system does not have enough working memory. At least %1 GiB is required. - + O sistema não tem memória disponível suficiente. É necessário pelo menos %1 GiB. - + is plugged in to a power source está ligado a uma fonte de energia - + The system is not plugged in to a power source. O sistema não está ligado a uma fonte de energia. - + is connected to the Internet está ligado à internet - + The system is not connected to the Internet. O sistema não está ligado à internet. - + is running the installer as an administrator (root) - + está a executar o instalador como um administrador (root) - + The setup program is not running with administrator rights. O programa de instalação está agora a correr com direitos de administrador. - + The installer is not running with administrator rights. - O instalador não está a correr com permissões de administrador. + O instalador não está a ser executado com permissões de administrador. - + has a screen large enough to show the whole installer - + tem um ecrã grande o suficiente para mostrar todo o instalador - + The screen is too small to display the setup program. O ecrã é demasiado pequeno para mostrar o programa de instalação. - + The screen is too small to display the installer. O ecrã tem um tamanho demasiado pequeno para mostrar o instalador. @@ -1429,33 +1690,33 @@ O instalador será encerrado e todas as alterações serão perdidas. HostInfoJob - + Collecting information about your machine. - + A recolher informação sobre a sua máquina. IDJob - - + + + - OEM Batch Identifier Identificador OEM em Lote - + Could not create directories <code>%1</code>. Não foi possível criar diretorias <code>%1</code>. - + Could not open file <code>%1</code>. Não foi possível abrir ficheiro <code>%1</code>. - + Could not write to file <code>%1</code>. Não foi possível escrever para o ficheiro <code>%1</code>. @@ -1463,15 +1724,15 @@ O instalador será encerrado e todas as alterações serão perdidas. InitcpioJob - + Creating initramfs with mkinitcpio. - + A criar o initramfs com o mkinitcpio. InitramfsJob - + Creating initramfs. A criar o initramfs. @@ -1479,17 +1740,17 @@ O instalador será encerrado e todas as alterações serão perdidas. InteractiveTerminalPage - + Konsole not installed Konsole não instalado - + Please install KDE Konsole and try again! Por favor instale a consola KDE e tente novamente! - + Executing script: &nbsp;<code>%1</code> A executar script: &nbsp;<code>%1</code> @@ -1497,28 +1758,15 @@ O instalador será encerrado e todas as alterações serão perdidas. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Definir o modelo do teclado para %1.<br/> - - - - Set keyboard layout to %1/%2. - Definir esquema do teclado para %1/%2. - - KeyboardQmlViewStep - + Keyboard Teclado @@ -1526,7 +1774,7 @@ O instalador será encerrado e todas as alterações serão perdidas. KeyboardViewStep - + Keyboard Teclado @@ -1534,73 +1782,96 @@ O instalador será encerrado e todas as alterações serão perdidas. LCLocaleDialog - + System locale setting Definição de localização do Sistema - + 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>. - A definição local do sistema afeta o idioma e conjunto de carateres para alguns elementos do interface da linha de comandos.<br/>A definição atual é <strong>%1</strong>. + A definição local do sistema afeta o idioma e conjunto de carateres para alguns elementos da interface da linha de comandos.<br/>A definição atual é <strong>%1</strong>. - + &Cancel &Cancelar - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Configurando a swap criptografada. + + + + No target system available. + Não existe um sistema alvo disponível. + + + + No rootMountPoint is set. + Nenhum rootMountPoint está definido. + + + + No configFilePath is set. + Nenhum configFilePath está definido. + + LicensePage - + Form Formulário - + <h1>License Agreement</h1> - + <h1>Acordo de Licença</h1> - + I accept the terms and conditions above. Aceito os termos e condições acima descritos. - + Please review the End User License Agreements (EULAs). - + Reveja o contrato de licença de utilizador final (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + Este procedimento de configuração irá instalar software proprietário que está sujeito aos termos de licença. - + If you do not agree with the terms, the setup procedure cannot continue. - + Se não concordar com os termos, o procedimento de configuração não poderá continuar. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Este procedimento de configuração pode instalar software proprietário sujeito a termos de licenciamento para fornecer recursos adicionais e aprimorar a experiência do utilizador. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Se não concordar com os termos, o software proprietário não será instalado e serão utilizadas as alternativas de código aberto. LicenseViewStep - + License Licença @@ -1608,109 +1879,102 @@ O instalador será encerrado e todas as alterações serão perdidas. LicenseWidget - + URL: %1 - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 controlador</strong><br/>por %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 controlador gráfico</strong><br/><font color="Grey">por %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 extra para navegador</strong><br/><font color="Grey">por %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">por %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pacote</strong><br/><font color="Grey">por %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">por %2</font> - + File: %1 - + Ficheiro: %1 - - Show the license text - - - - - Open license agreement in browser. - - - - + Hide license text Esconder texto da licença + + + Show the license text + Mostrar o texto da licença + + + + Open license agreement in browser. + Abrir acordo da licença no navegador. + LocalePage - - The system language will be set to %1. - A linguagem do sistema será definida para %1. - - - - The numbers and dates locale will be set to %1. - Os números e datas locais serão definidos para %1. - - - + Region: Região: - + Zone: Zona: - - + + &Change... &Alterar... - - - Set timezone to %1/%2.<br/> - Definir fuso horário para %1/%2.<br/> - LocaleQmlViewStep - + Location Localização + + LocaleTests + + + Quit + Sair + + LocaleViewStep - + Location Localização @@ -1718,480 +1982,561 @@ O instalador será encerrado e todas as alterações serão perdidas. LuksBootKeyFileJob - + Configuring LUKS key file. A configurar o ficheiro chave do LUKS. - - + + No partitions are defined. Nenhuma partição é definida. - - - + + + Encrypted rootfs setup error Erro de configuração do rootfs criptografado - + Root partition %1 is LUKS but no passphrase has been set. - + A partição root %1 é LUKS, mas nenhuma palavra-passe foi definida. - + Could not create LUKS key file for root partition %1. - + Não foi possível criar o ficheiro de chave LUKS para a partição root %1. - + Could not configure LUKS key file on partition %1. - + Não foi possível configurar a chave LUKS na partição %1. MachineIdJob - + Generate machine-id. - Gerar id-máquina + Gerar id-máquina. - + Configuration Error Erro de configuração - + No root mount point is set for MachineId. - + Nenhum ponto de montagem root está definido para IdMáquina. + + + + Map + + + Timezone: %1 + Fuso horário: %1 + + + + 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. + Selecione o seu local preferido no mapa para que o instalador possa sugerir a localização + e fuso horário para si. Pode ajustar as definições sugeridas abaixo. Procure no mapa arrastando + para mover e utilizando os botões +/- para aumentar/diminuir ou utilize a roda do rato para dar zoom. NetInstallViewStep - - + Package selection Seleção de pacotes - + Office software - + Programas de Escritório + + + + Office package + Pacote de escritório + + + + Browser software + Software de navegação + + + + Browser package + Pacote de navegador + + + + Web browser + Navegador + + + + Kernel + Kernel + + + + Services + Serviços + + + + Login + Entrar + + + + Desktop + Ambiente de trabalho + + + + Applications + Aplicações + + + + Communication + Comunicação + + + + Development + Desenvolvimento + + + + Office + Escritório + + + + Multimedia + Multimédia + + + + Internet + Internet - Office package - + Theming + Temas - Browser software - + Gaming + Jogos - Browser package - - - - - Web browser - - - - - Kernel - - - - - Services - - - - - Login - - - - - Desktop - - - - - Applications - - - - - Communication - - - - - Development - - - - - Office - - - - - Multimedia - - - - - Internet - - - - - Theming - - - - - Gaming - - - - Utilities - + Utilitários NotesQmlViewStep - + Notes - + Notas OEMPage - + Ba&tch: - Ba&tch: + Lo&te: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Especifique um identificador de lote aqui. Isto será armazenado no sistema de destino.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> - + <html><head/><body><h1>Configuração OEM</h1><p>O Calamares irá utilizar as definições OEM enquanto configurar o sistema de destino.</p></body></html> OEMViewStep - + OEM Configuration Configuração OEM - + Set the OEM Batch Identifier to <code>%1</code>. Definir o Identificar OEM em Lote para <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Selecione a sua Região preferida, ou utilize as definições predefinidas. + + + + + + Timezone: %1 + Fuso horário: %1 + + + + Select your preferred Zone within your Region. + Selecione a sua Zona preferida dentro da sua Região. + + + + Zones + Zonas + + + + You can fine-tune Language and Locale settings below. + Pode ajustar as definições de Idioma e Localização abaixo. + + PWQ - + Password is too short A palavra-passe é demasiado curta - + Password is too long A palavra-passe é demasiado longa - + Password is too weak A palavra-passe é demasiado fraca - + Memory allocation error when setting '%1' Erro de alocação de memória quando definido '%1' - + Memory allocation error Erro de alocação de memória - + The password is the same as the old one A palavra-passe é a mesma que a antiga - + The password is a palindrome A palavra-passe é um palíndromo - + The password differs with case changes only A palavra-passe difere com apenas diferenças de maiúsculas e minúsculas - + The password is too similar to the old one A palavra-passe é demasiado semelhante à antiga - + The password contains the user name in some form A palavra passe contém de alguma forma o nome do utilizador - + The password contains words from the real name of the user in some form A palavra passe contém de alguma forma palavras do nome real do utilizador - + The password contains forbidden words in some form A palavra-passe contém de alguma forma palavras proibidas - - The password contains less than %1 digits - A palavra-passe contém menos de %1 dígitos - - - + The password contains too few digits A palavra-passe contém muito poucos dígitos - - The password contains less than %1 uppercase letters - A palavra-passe contém menos de %1 letras maiúsculas - - - + The password contains too few uppercase letters A palavra-passe contém muito poucas letras maiúsculas - - - The password contains less than %1 lowercase letters - A palavra-passe contém menos de %1 letras minúsculas + + + The password contains fewer than %n lowercase letters + + A palavra-passe contém menos que %n letra minúscula + A palavra-passe contém menos que %n letras minúsculas + - + The password contains too few lowercase letters A palavra-passe contém muito poucas letras minúsculas - - The password contains less than %1 non-alphanumeric characters - A palavra-passe contém menos de %1 carateres não-alfanuméricos - - - + The password contains too few non-alphanumeric characters - A palavra-passe contém muito pouco carateres não alfa-numéricos + A palavra-passe contém muito poucos caracteres não alfanuméricos - - The password is shorter than %1 characters - A palavra-passe é menor do que %1 carateres - - - + The password is too short A palavra-passe é demasiado pequena - - The password is just rotated old one - A palavra-passe é apenas uma antiga alternada - - - - The password contains less than %1 character classes - A palavra-passe contém menos de %1 classe de carateres - - - + The password does not contain enough character classes A palavra-passe não contém classes de carateres suficientes - - The password contains more than %1 same characters consecutively - A palavra-passe contém apenas mais do que %1 carateres iguais consecutivos - - - + The password contains too many same characters consecutively A palavra-passe contém demasiados carateres iguais consecutivos - - The password contains more than %1 characters of the same class consecutively - A palavra-passe contém mais do que %1 carateres consecutivos da mesma classe - - - + The password contains too many characters of the same class consecutively A palavra-passe contém demasiados carateres consecutivos da mesma classe - - - The password contains monotonic sequence longer than %1 characters - A palavra-passe contém sequência mono tónica mais longa do que %1 carateres + + + The password contains fewer than %n digits + + A palavra-passe contém menos do que %n dígito + A palavra-passe contém menos do que %n dígitos + + + + + The password contains fewer than %n uppercase letters + + A palavra-passe contém menos do que %n caracter em maiúscula + A palavra-passe contém menos do que %n caracteres em maiúsculas + + + + + The password contains fewer than %n non-alphanumeric characters + + A palavra-passe contém menos do que %n caracter não alfanumérico + A palavra-passe contém menos do que %n caracteres não alfanuméricos + + + + + The password is shorter than %n characters + + A palavra-passe é menor do que %n caracter + A palavra-passe é menor do que %n caracteres + - + + The password is a rotated version of the previous one + A palavra-passe é uma versão alternada da anterior + + + + The password contains fewer than %n character classes + + A palavra-passe contém menos do que %n classe de caracter + A palavra-passe contém menos do que %n classes de caracteres + + + + + The password contains more than %n same characters consecutively + + A palavra-passe contém mais do que %n caracter igual consecutivamente + A palavra-passe contém mais do que %n caracteres iguais consecutivamente + + + + + The password contains more than %n characters of the same class consecutively + + A palavra-passe contém mais do que %n caracter da mesma classe consecutivamente + A palavra-passe contém mais do que %n caracteres da mesma classe consecutivamente + + + + + The password contains monotonic sequence longer than %n characters + + A palavra-passe contém uma sequência monotónica maior do que %n caracter + A palavra-passe contém uma sequência monotónica maior do que %n caracteres + + + + The password contains too long of a monotonic character sequence - A palavra-passe contém uma sequência mono tónica de carateres demasiado longa + A palavra-passe contém uma sequência monotónica de carateres demasiado longa - + No password supplied Nenhuma palavra-passe fornecida - + Cannot obtain random numbers from the RNG device Não é possível obter sequência aleatória de números a partir do dispositivo RNG - + Password generation failed - required entropy too low for settings Geração de palavra-passe falhada - entropia obrigatória demasiado baixa para definições - + The password fails the dictionary check - %1 A palavra-passe falha a verificação do dicionário - %1 - + The password fails the dictionary check A palavra-passe falha a verificação do dicionário - + Unknown setting - %1 Definição desconhecida - %1 - + Unknown setting Definição desconhecida - + Bad integer value of setting - %1 Valor inteiro incorreto para definição - %1 - + Bad integer value Valor inteiro incorreto - + Setting %1 is not of integer type Definição %1 não é do tipo inteiro - + Setting is not of integer type Definição não é do tipo inteiro - + Setting %1 is not of string type Definição %1 não é do tipo cadeia de carateres - + Setting is not of string type Definição não é do tipo cadeira de carateres - + Opening the configuration file failed Abertura da configuração de ficheiro falhou - + The configuration file is malformed O ficheiro de configuração está mal formado - + Fatal failure Falha fatal - + Unknown error Erro desconhecido - + Password is empty - + Palavra-passe está vazia PackageChooserPage - + Form Forma - + Product Name Nome do produto - + TextLabel EtiquetaTexto - + Long Product Description Descrição longa do produto - + Package Selection Seleção de pacote - + Please pick a product from the list. The selected product will be installed. - + Por favor, escolha um produto da lista. O produto selecionado será instalado. + + + + PackageChooserQmlViewStep + + + Packages + Pacotes PackageChooserViewStep - + Packages Pacotes @@ -2199,12 +2544,12 @@ O instalador será encerrado e todas as alterações serão perdidas. PackageModel - + Name Nome - + Description Descrição @@ -2212,17 +2557,17 @@ O instalador será encerrado e todas as alterações serão perdidas. Page_Keyboard - + Form Formulário - + Keyboard Model: Modelo do Teclado: - + Type here to test your keyboard Escreva aqui para testar a configuração do teclado @@ -2230,96 +2575,96 @@ O instalador será encerrado e todas as alterações serão perdidas. Page_UserSetup - + Form Formulário - + What is your name? Qual é o seu nome? - - What name do you want to use to log in? - Que nome deseja usar para iniciar a sessão? - - - - Choose a password to keep your account safe. - Escolha uma palavra-passe para manter a sua conta segura. - - - - - <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> - <small>Digite a mesma palavra-passe duas vezes, de modo a que possam ser verificados erros de digitação. Uma boa palavra-passe contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres de comprimento, e deve ser alterada em intervalos regulares.</small> - - - - What is the name of this computer? - Qual o nome deste computador? - - - + Your Full Name O seu nome completo - + + What name do you want to use to log in? + Que nome deseja usar para iniciar a sessão? + + + login inicio de sessão - + + What is the name of this computer? + Qual o nome deste computador? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Este nome será usado se tornar este computador visível para outros numa rede.</small> - + Computer Name Nome do computador - - + + Choose a password to keep your account safe. + Escolha uma palavra-passe para manter a sua conta segura. + + + + + <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> + <small>Introduza a mesma palavra-passe duas vezes, de modo a que possam ser verificados erros de escrita. Uma boa palavra-passe contém uma mistura de letras, números e sinais de pontuação, deve ter pelo menos oito caracteres de comprimento, e deve ser alterada em intervalos regulares.</small> + + + + Password Palavra-passe - - + + Repeat Password Repita a palavra-passe - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Quando esta caixa estiver marcada, será feita a verificação da força da palavra-passe e não poderá usar uma palavra-passe fraca. - + Require strong passwords. Requer palavras-passe fortes. - + Log in automatically without asking for the password. Iniciar sessão automaticamente sem pedir a palavra-passe. - + Use the same password for the administrator account. Usar a mesma palavra-passe para a conta de administrador. - + Choose a password for the administrator account. Escolha uma palavra-passe para a conta de administrador. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduza a mesma palavra-passe duas vezes, para que se possam verificar erros de digitação.</small> @@ -2327,42 +2672,42 @@ O instalador será encerrado e todas as alterações serão perdidas. PartitionLabelsView - + Root Root - + Home Home - + Boot Arranque - + EFI system Sistema EFI - + Swap Swap - + New partition for %1 Nova partição para %1 - + New partition Nova partição - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2716,39 @@ O instalador será encerrado e todas as alterações serão perdidas. PartitionModel - - + + Free Space Espaço Livre - - + + New partition Nova partição - + Name Nome - + File System Sistema de Ficheiros - + + File System Label + Identificação do sistema de ficheiros + + + Mount Point Ponto de Montagem - + Size Tamanho @@ -2406,77 +2756,77 @@ O instalador será encerrado e todas as alterações serão perdidas. PartitionPage - + Form Formulário - + Storage de&vice: Dis&positivo de armazenamento: - + &Revert All Changes &Reverter todas as alterações - + New Partition &Table Nova &Tabela de Partições - + Cre&ate Cri&ar - + &Edit &Editar - + &Delete &Apagar - + New Volume Group Novo Grupo de Volume - + Resize Volume Group Redimensionar Grupo de Volume - + Deactivate Volume Group Desativar Grupo de Volume - + Remove Volume Group Remover Grupo de Volume - + I&nstall boot loader on: I&nstalar carregador de arranque em: - + Are you sure you want to create a new partition table on %1? Tem certeza de que deseja criar uma nova tabela de partições em %1? - + Can not create new partition Não é possível criar nova partição - + 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. A tabela de partições em %1 já tem %2 partições primárias, e não podem ser adicionadas mais. Em vez disso, por favor remova uma partição primária e adicione uma partição estendida. @@ -2484,131 +2834,121 @@ O instalador será encerrado e todas as alterações serão perdidas. PartitionViewStep - + Gathering system information... A recolher informações do sistema... - + Partitions Partições - - Install %1 <strong>alongside</strong> another operating system. - Instalar %1 <strong>paralelamente</strong> a outro sistema operativo. + + Unsafe partition actions are enabled. + As ações de partição inseguras estão ativadas. - - <strong>Erase</strong> disk and install %1. - <strong>Apagar</strong> disco e instalar %1. + + Partitioning is configured to <b>always</b> fail. + A partição é configurada para falhar <b>sempre</b>. - - <strong>Replace</strong> a partition with %1. - <strong>Substituir</strong> a partição com %1. + + No partitions will be changed. + Nenhuma partição será alterada. - - <strong>Manual</strong> partitioning. - Particionamento <strong>Manual</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instalar %1 <strong>paralelamente</strong> a outro sistema operativo no disco <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Apagar</strong> disco <strong>%2</strong> (%3) e instalar %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Substituir</strong> a partição no disco <strong>%2</strong> (%3) com %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Particionamento <strong>Manual</strong> no disco <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disco <strong>%1</strong> (%2) - - - + Current: Atual: - + After: Depois: - + No EFI system partition configured Nenhuma partição de sistema EFI configurada - - 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>esp</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. - É necessária uma partição de sistema EFI para iniciar %1.<br/><br/>Para configurar uma partição de sistema EFI, volte atrás e selecione ou crie um sistema de ficheiros FAT32 com a flag <strong>esp</strong> ativada e ponto de montagem <strong>%2</strong>.<br/><br/>Pode continuar sem configurar uma partição de sistema EFI mas o seu sistema pode falhar o arranque. + + EFI system partition configured incorrectly + Partição de sistema EFI configurada incorretamente - - EFI system partition flag not set - flag não definida da partição de sistema EFI + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Uma partição de sistema EFI é necessária para iniciar o %1. <br/><br/>Para configurar uma partição de sistema EFI, volte atrás e selecione ou crie um sistema de ficheiros adequado. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - É necessária uma partição de sistema EFI para iniciar %1.<br/><br/>A partitição foi configurada com o ponto de montagem <strong>%2</strong> mas a sua flag <strong>esp</strong> não está definida.<br/>Para definir a flag, volte atrás e edite a partição.<br/><br/>Pode continuar sem definir a flag mas o seu sistema pode falhar o arranque. + + The filesystem must be mounted on <strong>%1</strong>. + O sistema de ficheiros deve ser montado em <strong>%1</strong>. - + + The filesystem must have type FAT32. + O sistema de ficheiros deve ter o tipo FAT32. + + + + The filesystem must be at least %1 MiB in size. + O sistema de ficheiros deve ter pelo menos %1 MiB de tamanho. + + + + The filesystem must have flag <strong>%1</strong> set. + O sistema de ficheiros deve ter a "flag" %1 definida. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Pode continuar sem configurar uma partição do sistema EFI, mas o seu sistema pode não arrancar. + + + Option to use GPT on BIOS - + Opção para utilizar GPT no BIOS - - 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. - + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + Uma tabela de partições GPT é a melhor opção para todos os sistemas. Este instalador suporta tal configuração para sistemas BIOS também.<br/><br/>Para configurar uma tabela de partições GPT no BIOS, (caso não tenha sido feito ainda) volte atrás e defina a tabela de partições como GPT, depois crie uma partição sem formatação de 8 MB com o sinalizador <strong>%2</strong> ativado.<br/><br/>Uma partição não formatada de 8 MB é necessária para iniciar %1 num sistema BIOS com o GPT. - + Boot partition not encrypted Partição de arranque não encriptada - + 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. Foi preparada uma partição de arranque separada juntamente com uma partição root encriptada, mas a partição de arranque não está encriptada.<br/><br/>Existem preocupações de segurança com este tipo de configuração, por causa de importantes ficheiros de sistema serem guardados numa partição não encriptada.<br/>Se desejar pode continuar, mas o destrancar do sistema de ficheiros irá ocorrer mais tarde durante o arranque do sistema.<br/>Para encriptar a partição de arranque, volte atrás e recrie-a, e selecione <strong>Encriptar</strong> na janela de criação de partições. - + has at least one disk device available. tem pelo menos um dispositivo de disco disponível. - + There are no partitions to install on. - + Não há partições para instalar. PlasmaLnfJob - + Plasma Look-and-Feel Job Tarefa de Aparência Plasma - - + + Could not select KDE Plasma Look-and-Feel package Não foi possível selecionar o pacote KDE Plasma Look-and-Feel @@ -2616,17 +2956,17 @@ O instalador será encerrado e todas as alterações serão perdidas. PlasmaLnfPage - + Form Forma - + 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. Escolha um aspecto para o ambiente de trabalho KDE Plasma. Também pode ignorar este passo e configurar o aspecto uma vez que o sistema esteja configurado. Ao clicar numa seleção de aspecto terá uma pré-visualização ao vivo desse aspecto. - + 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. Por favor escolha a aparência para o Ambiente de Trabalho KDE Plasma. Pode também saltar este passo e configurar a aparência uma vez instalado o sistema. Ao clicar numa seleção de aparência irá ter uma pré-visualização ao vivo dessa aparência. @@ -2634,7 +2974,7 @@ O instalador será encerrado e todas as alterações serão perdidas. PlasmaLnfViewStep - + Look-and-Feel Aparência @@ -2642,17 +2982,17 @@ O instalador será encerrado e todas as alterações serão perdidas. PreserveFiles - + Saving files for later ... A guardar ficheiros para mais tarde ... - + No files configured to save for later. Nenhuns ficheiros configurados para guardar para mais tarde. - + Not all of the configured files could be preserved. Nem todos os ficheiros configurados puderam ser preservados. @@ -2660,14 +3000,14 @@ O instalador será encerrado e todas as alterações serão perdidas. ProcessResult - + There was no output from the command. O comando não produziu saída de dados. - + Output: @@ -2676,52 +3016,52 @@ Saída de Dados: - + External command crashed. O comando externo "crashou". - + Command <i>%1</i> crashed. Comando <i>%1</i> "crashou". - + External command failed to start. Comando externo falhou ao iniciar. - + Command <i>%1</i> failed to start. Comando <i>%1</i> falhou a inicialização. - + Internal error when starting command. Erro interno ao iniciar comando. - + Bad parameters for process job call. Maus parâmetros para chamada de processamento de tarefa. - + External command failed to finish. Comando externo falhou a finalização. - + Command <i>%1</i> failed to finish in %2 seconds. Comando <i>%1</i> falhou ao finalizar em %2 segundos. - + External command finished with errors. Comando externo finalizou com erros. - + Command <i>%1</i> finished with exit code %2. Comando <i>%1</i> finalizou com código de saída %2. @@ -2729,89 +3069,95 @@ Saída de Dados: QObject - - Default Keyboard Model - Modelo de Teclado Padrão - - - - - Default - Padrão - - - - unknown - desconhecido - - - - extended - estendido - - - - unformatted - não formatado - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Espaço não particionado ou tabela de partições desconhecida - - - - (no mount point) - (sem ponto de montagem) - - - - Requirements checking for module <i>%1</i> is complete. - A verificação de requisitos para módulo <i>%1</i> está completa. - - - + %1 (%2) %1 (%2) - - No product - Nenhum produto + + unknown + desconhecido - - No description provided. - Nenhuma descrição fornecida. + + extended + estendida - - - - + + unformatted + não formatado + + + + swap + swap + + + + + Default + Padrão + + + + + + File not found Ficheiro não encontrado - + Path <pre>%1</pre> must be an absolute path. - + O caminho <pre>%1</pre> deve ser absoluto. - + + Directory not found + Diretório não encontrado + + + + Could not create new random file <pre>%1</pre>. - + Não foi possível criar um novo ficheiro aleatório <pre>%1</pre>. + + + + No product + Nenhum produto + + + + No description provided. + Nenhuma descrição fornecida. + + + + (no mount point) + (sem ponto de montagem) + + + + Unpartitioned space or unknown partition table + Espaço não particionado ou tabela de partições desconhecida + + + + Recommended + + + <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> + <p>Este computador não satisfaz alguns dos requisitos recomendados para configurar %1.<br/> + A configuração pode continuar, mas alguns recursos podem ser desativados.</p> RemoveUserJob - + Remove live user from target system Remover utilizador ativo do sistema de destino @@ -2819,18 +3165,18 @@ Saída de Dados: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Remover Grupo de Volume com o nome %1. - + Remove Volume Group named <strong>%1</strong>. Remover Grupo de Volume com o nome <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. O instalador falhou a remoção do grupo de volume com o nome '%1'. @@ -2838,143 +3184,160 @@ Saída de Dados: ReplaceWidget - + Form Formulário - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selecione onde instalar %1.<br/><font color="red">Aviso: </font>isto irá apagar todos os ficheiros na partição selecionada. - + The selected item does not appear to be a valid partition. O item selecionado não aparenta ser uma partição válida. - + %1 cannot be installed on empty space. Please select an existing partition. %1 não pode ser instalado no espaço vazio. Por favor selecione uma partição existente. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - %1 não pode ser instalado numa partição estendida. Por favor selecione uma partição primária ou partição lógica. + %1 não pode ser instalado numa partição estendida. Por favor selecione uma partição primária ou lógica existente. - + %1 cannot be installed on this partition. %1 não pode ser instalado nesta partição. - + Data partition (%1) Partição de dados (%1) - + Unknown system partition (%1) Partição de sistema desconhecida (%1) - + %1 system partition (%2) %1 partição de sistema (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>A partição %1 é demasiado pequena para %2. Por favor selecione uma partição com pelo menos %3 GiB de capacidade. - + <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. <strong>%2</strong><br/><br/>Uma partição de sistema EFI não pode ser encontrada em nenhum sítio neste sistema. Por favor volte atrás e use o particionamento manual para instalar %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 será instalado na %2.<br/><font color="red">Aviso: </font>todos os dados na partição %2 serão perdidos. - + The EFI system partition at %1 will be used for starting %2. A partição de sistema EFI em %1 será usada para iniciar %2. - + EFI system partition: Partição de sistema EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Este computador não satisfaz os requisitos mínimos para instalar o %1.<br/> + A instalação não pode continuar.</p> + + + + <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> + <p>Este computador não satisfaz alguns dos requisitos recomendados para configurar o %1.<br/> + A configuração pode continuar, mas alguns recursos podem ser desativados.</p> + + ResizeFSJob - + Resize Filesystem Job Tarefa de Redimensionamento do Sistema de Ficheiros - + Invalid configuration Configuração inválida - + The file-system resize job has an invalid configuration and will not run. A tarefa de redimensionamento do sistema de ficheiros tem uma configuração inválida e não irá ser corrida. - + KPMCore not Available KPMCore não Disponível - + Calamares cannot start KPMCore for the file-system resize job. O Calamares não consegue iniciar KPMCore para a tarefa de redimensionamento de sistema de ficheiros. - - - - - + + + + + Resize Failed Redimensionamento Falhou - + The filesystem %1 could not be found in this system, and cannot be resized. O sistema de ficheiros %1 não foi encontrado neste sistema, e não pode ser redimensionado. - + The device %1 could not be found in this system, and cannot be resized. O dispositivo %1 não pode ser encontrado neste sistema, e não pode ser redimensionado. - - + + The filesystem %1 cannot be resized. O sistema de ficheiros %1 não pode ser redimensionado. - - + + The device %1 cannot be resized. O dispositivo %1 não pode ser redimensionado. - + The filesystem %1 must be resized, but cannot. O sistema de ficheiros %1 tem de ser redimensionado, mas não pode. - + The device %1 must be resized, but cannot O dispositivo %1 tem de ser redimensionado, mas não pode @@ -2982,22 +3345,22 @@ Saída de Dados: ResizePartitionJob - + Resize partition %1. Redimensionar partição %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Redimensionar <strong>%2MiB</strong> partição <strong>%1</strong> para <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. A redimensionar %2MiB partição %1 para %3MiB. - + The installer failed to resize partition %1 on disk '%2'. O instalador falhou o redimensionamento da partição %1 no disco '%2'. @@ -3005,7 +3368,7 @@ Saída de Dados: ResizeVolumeGroupDialog - + Resize Volume Group Redimensionar Grupo de Volume @@ -3013,18 +3376,18 @@ Saída de Dados: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Redimensionar grupo de volume com o nome %1 de %2 até %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Redimensionar grupo de volume com o nome <strong>%1</strong> de <strong>%2</strong> até <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. O instalador falhou ao redimensionar o grupo de volume com o nome '%1'. @@ -3032,53 +3395,25 @@ Saída de Dados: ResultsListDialog - + For best results, please ensure that this computer: Para melhores resultados, por favor certifique-se que este computador: - + System requirements Requisitos de sistema - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Este computador não satisfaz os requisitos mínimos para instalar %1.<br/>A instalação não pode continuar. <a href="#details">Detalhes...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Este computador não satisfaz alguns dos requisitos recomendados para instalar %1.<br/>A instalação pode continuar, mas algumas funcionalidades poderão ser desativadas. - - - - This program will ask you some questions and set up %2 on your computer. - Este programa vai fazer-lhe algumas perguntas e configurar o %2 no seu computador. - - ScanningDialog - + Scanning storage devices... A examinar dispositivos de armazenamento... - + Partitioning Particionamento @@ -3086,29 +3421,29 @@ Saída de Dados: SetHostNameJob - + Set hostname %1 Configurar nome da máquina %1 - + Set hostname <strong>%1</strong>. Definir nome da máquina <strong>%1</strong>. - + Setting hostname %1. A definir nome da máquina %1. + - Internal Error Erro interno - - + + Cannot write hostname to target system Não é possível escrever o nome da máquina para o sistema selecionado @@ -3116,29 +3451,29 @@ Saída de Dados: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Definir modelo do teclado para %1, disposição para %2-%3 - + Failed to write keyboard configuration for the virtual console. Falha ao escrever configuração do teclado para a consola virtual. - - - + + + Failed to write to %1 Falha ao escrever para %1 - + Failed to write keyboard configuration for X11. Falha ao escrever configuração do teclado para X11. - + Failed to write keyboard configuration to existing /etc/default directory. Falha ao escrever a configuração do teclado para a diretoria /etc/default existente. @@ -3146,82 +3481,82 @@ Saída de Dados: SetPartFlagsJob - + Set flags on partition %1. Definir flags na partição %1. - + Set flags on %1MiB %2 partition. Definir flags na partição %1MiB %2. - + Set flags on new partition. Definir flags na nova partição. - + Clear flags on partition <strong>%1</strong>. Limpar flags na partitição <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - + Limpar flags na partição de %1MiB <strong>%2</strong>. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Limpar flags na nova partição. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Definir flag da partição <strong>%1</strong> como <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Marcar partição de %1MiB <strong>%2</strong> como <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Nova partição com flag <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. A limpar flags na partição <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + A limpar flags na partição de %1MiB <strong>%2</strong>. + + + Clearing flags on new partition. A limpar flags na nova partição. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. A definir flags <strong>%2</strong> na partitição <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + A definir flags <strong>%3</strong> na partição de %1MiB <strong>%2</strong>. + + + Setting flags <strong>%1</strong> on new partition. A definir flags <strong>%1</strong> na nova partição. - + The installer failed to set flags on partition %1. O instalador falhou ao definir flags na partição %1. @@ -3229,42 +3564,42 @@ Saída de Dados: SetPasswordJob - + Set password for user %1 Definir palavra-passe para o utilizador %1 - + Setting password for user %1. A definir palavra-passe para o utilizador %1. - + Bad destination system path. Mau destino do caminho do sistema. - + rootMountPoint is %1 rootMountPoint é %1 - + Cannot disable root account. Não é possível desativar a conta root. - + passwd terminated with error code %1. passwd terminado com código de erro %1. - + Cannot set password for user %1. Não é possível definir a palavra-passe para o utilizador %1. - + usermod terminated with error code %1. usermod terminou com código de erro %1. @@ -3272,45 +3607,82 @@ Saída de Dados: SetTimezoneJob - + Set timezone to %1/%2 Configurar fuso horário para %1/%2 - + Cannot access selected timezone path. Não é possível aceder ao caminho do fuso horário selecionado. - + Bad path: %1 Mau caminho: %1 - + Cannot set timezone. Não é possível definir o fuso horário. - + Link creation failed, target: %1; link name: %2 Falha na criação de ligação, alvo: %1; nome da ligação: %2 - + Cannot set timezone, Não é possível definir o fuso horário, - + Cannot open /etc/timezone for writing Não é possível abrir /etc/timezone para escrita + + SetupGroupsJob + + + Preparing groups. + A preparar grupos. + + + + + Could not create groups in target system + Não foi possível criar grupos no sistema de destino + + + + These groups are missing in the target system: %1 + Estes grupos estão em falta no sistema de destino: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Configurar utilizadores <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + Impossível de usar chmod no ficheiro dos super utilizadores. + + + + Cannot create sudoers file for writing. + Impossível criar ficheiro do super utilizador para escrita. + + ShellProcessJob - + Shell Processes Job Tarefa de Processos da Shell @@ -3318,188 +3690,215 @@ Saída de Dados: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de configuração. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Isto é uma visão geral do que acontecerá assim que iniciar o procedimento de instalação. + + &Yes + &Sim - - - SummaryViewStep - - Summary - Resumo + + &No + &Não + + + + &Cancel + &Cancelar + + + + &Close + &Fechar TrackingInstallJob - + Installation feedback Relatório da Instalação - + Sending installation feedback. A enviar relatório da instalação. - + Internal error in install-tracking. Erro interno no rastreio da instalação. - + HTTP request timed out. Expirou o tempo para o pedido de HTTP. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Feedback de utilizador KDE + + + + Configuring KDE user feedback. + A configurar feedback de utilizador KDE. + + + + + Error in KDE user feedback configuration. + Erro na configuração do feedback de utilizador KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Não foi possível configurar o feedback de utilizador KDE corretamente, erro de script %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Não foi possível configurar o feedback de utilizadoro KDE corretamente, erro do Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Relatório da máquina - + Configuring machine feedback. A configurar relatório da máquina. - - + + Error in machine feedback configuration. Erro na configuração do relatório da máquina. - + Could not configure machine feedback correctly, script error %1. Não foi possível configurar corretamente o relatório da máquina, erro de script %1. - + Could not configure machine feedback correctly, Calamares error %1. - Não foi possível configurar corretamente o relatório da máquina, erro do Calamares %1. + Não foi possível configurar corretamente o relatório da máquina, erro do Calamares %1. TrackingPage - + Form Forma - + Placeholder Espaço reservado - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Ao selecionar isto, não estará a enviar <span style=" font-weight:600;">qualquer informação</span> sobre a sua instalação.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Clique aqui para não enviar <span style=" font-weight:600;">qualquer tipo de informação</span> sobre a sua instalação.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Clique aqui para mais informação acerca do relatório do utilizador</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - O rastreio de instalação ajuda %1 a ver quanto utilizadores eles têm, qual o hardware que instalam %1 e (com a duas últimas opções abaixo), obter informação contínua sobre aplicações preferidas. Para ver o que será enviado, por favor clique no ícone de ajuda a seguir a cada área. + + 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. + O rastreio ajuda %1 a ver quão frequentemente ele é instalado, em qual hardware ele é instalado e quais aplicações são utilizadas. Para ver o que será enviado, por favor, clique no ícone de ajuda próximo a cada área. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Ao selecionar isto estará a enviar informação acerca da sua instalação e hardware. Esta informação será <b>enviada apenas uma vez</b> depois da instalação terminar. + + 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. + Ao selecionar isto irá enviar informações sobre a sua instalação e hardware. Esta informação será enviada apenas <b>uma vez</b> depois que a instalação terminar. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Ao selecionar isto irá <b>periodicamente</b> enviar informação sobre a instalação, hardware e aplicações, para %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Ao selecionar isto irá enviar periodicamente informações sobre a instalação da sua <b>máquina</b>, hardware e aplicações para %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Ao selecionar isto irá periodicamente enviar informação sobre a instalação, hardware, aplicações e padrões de uso, para %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Ao selecionar isto irá enviar periodicamente informações sobre a instalação do seu <b>utilizador</b>, hardware, aplicações e padrões de utilização das aplicações para %1. TrackingViewStep - + Feedback Relatório + + UmountJob + + + Unmount file systems. + Desmontar sistemas de ficheiros. + + + + No target system available. + Não existe um sistema alvo disponível. + + + + No rootMountPoint is set. + Nenhum rootMountPoint está definido. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a configuração.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Se mais de uma pessoa usar este computador, você pode criar várias contas após a instalação.</small> + + + UsersQmlViewStep - - Your username is too long. - O seu nome de utilizador é demasiado longo. - - - - Your username must start with a lowercase letter or underscore. - O seu nome de utilizador deve começar com uma letra minúscula ou underscore. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Apenas letras minúsculas, números, underscore e hífen são permitidos. - - - - Only letters, numbers, underscore and hyphen are allowed. - Apenas letras, números, underscore e hífen são permitidos. - - - - Your hostname is too short. - O nome da sua máquina é demasiado curto. - - - - Your hostname is too long. - O nome da sua máquina é demasiado longo. - - - - Your passwords do not match! - As suas palavras-passe não coincidem! + + Users + Utilizadores UsersViewStep - + Users Utilizadores @@ -3507,65 +3906,67 @@ Saída de Dados: VariantModel - + Key + Column header for key/value Chave - + Value + Column header for key/value Valor VolumeGroupBaseDialog - + Create Volume Group Criar Grupo de Volume - + List of Physical Volumes Lista de Volumes Físicos - + Volume Group Name: Nome do Grupo de Volume: - + Volume Group Type: Tipo do Grupo de Volume: - + Physical Extent Size: Tamanho da Extensão Física: - + MiB MiB - + Total Size: Tamanho Total: - + Used Size: Tamanho Usado: - + Total Sectors: Total de Setores: - + Quantity of LVs: Quantidade de LVs: @@ -3573,106 +3974,106 @@ Saída de Dados: WelcomePage - + Form Formulário - - + + Select application and system language Selecione o idioma da aplicação e do sistema + &About + &Acerca + + + Open donations website Abrir site de doações - + &Donate &Doar - + Open help and support website Abra o site de ajuda e suporte + &Support + &Suporte + + + Open issues and bug-tracking website Site de questões abertas e monitorização de erros - Open release notes website - Abrir o site com as notas de lançamento - - - - &Release notes - &Notas de lançamento - - - &Known issues &Problemas conhecidos - - &Support - &Suporte + + Open release notes website + Abrir o site com as notas de lançamento - - &About - &Acerca + + &Release notes + &Notas de lançamento - - <h1>Welcome to the %1 installer.</h1> - <h1>Bem vindo ao instalador do %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bem vindo ao instalador Calamares para %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Bem vindo ao programa de instalação Calamares para %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Bem vindo à instalação de %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Bem vindo ao instalador Calamares para %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Bem vindo ao instalador do %1.</h1> + + + + %1 support + Suporte do %1 + + + About %1 setup Sobre a instalação de %1 - + About %1 installer - Acerca %1 instalador + Acerca do instalador %1 - + <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. - - - - - %1 support - %1 suporte + <h1>%1</h1><br/><strong>%2<br/>para o %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/>Obrigado à <a href="https://calamares.io/team/">equipa Calamares</a> e à <a href="https://www.transifex.com/calamares/calamares/">equipa de tradutores do Calamares</a>.<br/><br/>O desenvolvimento do <a href="https://calamares.io/">Calamares</a> é patrocinado pela <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Bem-vindo @@ -3680,120 +4081,482 @@ Saída de Dados: WelcomeViewStep - + Welcome Bem-vindo + + ZfsJob + + + Create ZFS pools and datasets + Criação de ZFS pools e datasets + + + + Failed to create zpool on + Falha ao criar zpool on + + + + Configuration Error + Erro de configuração + + + + No partitions are available for ZFS. + Não estão disponíveis partições para ZFS. + + + + Internal data missing + Dados internos em falta + + + + + Failed to create zpool + Falha ao criar zpool + + + + Failed to create dataset + Falha ao criar dataset + + + + The output was: + O resultado foi: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + para %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/> + Obrigado à <a href='https://calamares.io/team/'>equipa Calamares</a> + e à <a href='https://www.transifex.com/calamares/calamares/'>equipa de + tradutores do Calamares</a>.<br/><br/> + O desenvolvimento do <a href='https://calamares.io/'>Calamares</a> + é patrocinado pela <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software. - + Back - + Voltar + + + + calamares-sidebar + + + Show debug information + Mostrar informação de depuração + + + + finishedq + + + Installation Completed + Instalação Concluída + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 foi instalado no seu computador.<br/> + Pode agora reiniciar no seu novo sistema, ou continuar a utilizar o ambiente Live. + + + + Close Installer + Fechar Instalador + + + + Restart System + Reiniciar Sistema + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Um registo completo da instalação está disponível como installation.log no diretório home do utilizador Live.<br/> + Este registo é copiado para /var/log/installation.log do sistema de destino.</p> + + + + finishedq@mobile + + + Installation Completed + Instalação Concluída + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 foi instalado no computador.<br/> + Pode agora reiniciar o dispositivo. + + + + Close + Fechar + + + + Restart + Reiniciar + + + + i18n + + + <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>. + <h1>Idiomas</h1> </br> + A definição de localização do sistema afeta o idioma e o conjunto de caracteres para alguns elementos da interface de utilizador de linha de comando. A definição atual é <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Localização</h1> </br> + A definição de localização do sistema afeta os formatos de números e datas. A definição atual é <strong>%1</strong>. + + + + Back + Voltar keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Para ativar a pré-visualização do teclado, selecione um esquema. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelo do Teclado: - - Refresh - - - - - + Layouts - + Disposições - - - Keyboard Layout - + + Type here to test your keyboard + Escreva aqui para testar a configuração do teclado - - Models - - - - + Variants - + Variantes + + + localeq - - Test your keyboard - + + Change + Alterar notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - + <h3>%1</h3> + <p>Estes são exemplos de notas de lançamento.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + O LibreOffice é um programa de produtividade poderoso e gratuito, utilizado por milhões de pessoas em todo o mundo. Inclui várias aplicações que o tornam o mais versátil programa de produtividade Livre e de Código Aberto do mercado.<br/> + Opção predefinida. + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Se não quiser instalar um programa de produtividade, basta selecionar Sem programa de produtividade. Pode sempre adicionar uma (ou mais) mais tarde no sistema instalado, à medida que houver a necessidade. + + + + No Office Suite + Sem programa de produtividade + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Crie uma instalação mínima do Ambiente de trabalho, remova todas as aplicações extra e decida mais tarde o que gostaria de adicionar ao sistema. Exemplos do que não estará em tal instalação, não haverá nenhum programa de produtividade, nenhum reprodutor multimédia, nenhum visualizador de imagens ou suporte de impressão. Será apenas um ambiente de trabalho, navegador de ficheiros, gestor de pacotes, editor de texto e um simples navegador da web. + + + + Minimal Install + Instalação Mínima + + + + Please select an option for your install, or use the default: LibreOffice included. + Selecione uma opção para a sua instalação, ou utilize o predefinido: LibreOffice incluído. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Este é um exemplo de ficheiro QML, a mostrar as opções em RichText com conteúdo Flickable.</p> + + <p>QML com RichText pode utilizar tags HTML, conteúdo Flickable é útil para ecrãs sensíveis ao toque.</p> + + <p><b>Este é um texto em negrito</b></p> + <p><i>Este é um texto em itálico</i></p> + <p><u>Este é um texto sublinhado</u></p> + <p><center>Este texto será centrado.</center></p> + <p><s>Isto é riscado</s></p> + + <p>Código-exemplo: + <code>ls -l /home</code></p> + + <p><b>Listas:</b></p> + <ul> + <li>Sistemas de CPU Intel</li> + <li>Sistemas de CPU AMD</li> + </ul> + + <p>A barra de deslocamento vertical é ajustável e a largura atual está definida como 10.</p> + + + + Back + Voltar + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Escolha o seu nome de utilizador e credenciais para iniciar sessão e executar tarefas de administrador + + + + What is your name? + Qual é o seu nome? + + + + Your Full Name + O seu nome completo + + + + What name do you want to use to log in? + Que nome deseja usar para iniciar a sessão? + + + + Login Name + Nome de utilizador + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Se mais do que uma pessoa utilizar este computador, poderá criar várias contas após a instalação. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Apenas letras minúsculas, números, underscore e hífen são permitidos. + + + + root is not allowed as username. + root não é permitido como nome de utilizador. + + + + What is the name of this computer? + Qual o nome deste computador? + + + + Computer Name + Nome do computador + + + + This name will be used if you make the computer visible to others on a network. + Este nome será utilizado se tornar o computador visível a outros numa rede. + + + + localhost is not allowed as hostname. + localhost não é permitido como "hostname". + + + + Choose a password to keep your account safe. + Escolha uma palavra-passe para manter a sua conta segura. + + + + Password + Palavra-passe + + + + Repeat Password + Repita a palavra-passe + + + + 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. + Introduzir a mesma palavra-passe duas vezes, para que possa ser verificada a existência de erros de escrita. Uma boa palavra-passe conterá uma mistura de letras, números e pontuação, deve ter pelo menos oito caracteres, e deve ser alterada a intervalos regulares. + + + + Validate passwords quality + Validar qualidade das palavras-passe + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Quando esta caixa é assinalada, a verificação da força da palavra-passe é feita e não será possível utilizar uma palavra-passe fraca. + + + + Log in automatically without asking for the password + Iniciar sessão automaticamente sem pedir a palavra-passe + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Apenas são permitidas letras, números, sublinhado e hífen, mínimo de dois caracteres. + + + + Reuse user password as root password + Reutilizar palavra-passe de utilizador como palavra-passe de root + + + + Use the same password for the administrator account. + Usar a mesma palavra-passe para a conta de administrador. + + + + Choose a root password to keep your account safe. + Escolha uma palavra-passe de root para manter a sua conta segura. + + + + Root Password + Palavra-passe de root + + + + Repeat Root Password + Repetir palavra-passe de root + + + + Enter the same password twice, so that it can be checked for typing errors. + Introduzir a mesma palavra-passe duas vezes, para que possa ser verificada a existência de erros de escrita. welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Bem-vindo ao %1 instalador <quote>%2</quote></h3> + <p>Este programa irá fazer-lhe algumas perguntas e configurar o %1 no seu computador.</p> - + About - + Sobre - + Support - + Suporte - + Known issues - + Problemas conhecidos - + Release notes - + Notas de lançamento - + Donate - + Doar diff --git a/lang/calamares_ro.ts b/lang/calamares_ro.ts index 4031c5b16..d113ad1df 100644 --- a/lang/calamares_ro.ts +++ b/lang/calamares_ro.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. <strong>Mediul de boot</strong> al acestui sistem.<br><br>Sistemele x86 mai vechi suportă numai <strong>BIOS</strong>.<br>Sisteme moderne folosesc de obicei <strong>EFI</strong>, dar ar putea fi afișate ca BIOS dacă au fost pornite în modul de compatibilitate. - + 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. Acest sistem a fost pornit într-un mediu de boot <strong>EFI</strong>.<br><br>Pentru a configura pornirea dintr-un mediu EFI, acest program de instalare trebuie să creeze o aplicație pentru boot-are, cum ar fi <strong>GRUB</strong> sau <strong>systemd-boot</strong> pe o <strong>partiție de sistem EFI</strong>. Acest pas este automat, cu excepția cazului în care alegeți partiționarea manuală. - + 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. Sistemul a fost pornit într-un mediu de boot <strong>BIOS</strong>.<br><br>Pentru a configura pornirea de la un mediu BIOS, programul de instalare trebuie să instaleze un mediu de boot, cum ar fi <strong>GRUB</strong> fie la începutul unei partiții sau pe <strong>Master Boot Record</strong> în partea de început a unei tabele de partiții (preferabil). Acesta este un pas automat, cu excepția cazului în care alegeți partiționarea manuală. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master boot record (MBR) al %1 - + Boot Partition Partiție de boot - + System Partition Partiție de sistem - + Do not install a boot loader Nu instala un bootloader - + %1 (%2) %1 (%2) @@ -50,66 +58,86 @@ Calamares::BlankViewStep - + Blank Page - + Pagină nouă Calamares::DebugWindow - + Form Formular - + GlobalStorage Stocare globală - + JobQueue Coadă de sarcini - + Modules Module - + Type: Tipul: - - + + none nimic - + Interface: Interfața: - - Tools - Unelte + + Crashes Calamares, so that Dr. Konqui can look at it. + Dă crash lui Calamares, pentru ca doctorul Konqui să se uite la el. - + + Reloads the stylesheet from the branding directory. + Reîncarcă foaia de stil din directorul branding. + + + + Uploads the session log to the configured pastebin. + Încarcă jurnalul sesiunii pe pastebin-ul configurat. + + + + Send Session Log + + + + Reload Stylesheet + Reincarcă stilul + + + + Displays the tree of widget names in the log (for stylesheet debugging). - + Widget Tree - + Arborele de widget - + Debug information Informație pentru depanare @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Setat - + Install Instalează @@ -130,20 +158,20 @@ Calamares::FailJob - + Job failed (%1) - + Operațiunea a eșuat (%1) - + Programmed job failure was explicitly requested. - + Operațiunea programată a eșuat Calamares::JobThread - + Done Gata @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - + Operațiune exemplu (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Execut comanda '%1' către sistem - + Run command '%1'. - + Execut comanda '%1'. - + Running command %1 %2 Se rulează comanda %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Se rulează operațiunea %1. - + Bad working directory path Calea dosarului de lucru este proastă - + Working directory %1 for python job %2 is not readable. Dosarul de lucru %1 pentru sarcina python %2 nu este citibil. - + Bad main script file Fișierul script principal este prost - + Main script file %1 for python job %2 is not readable. Fișierul script peincipal %1 pentru sarcina Python %2 nu este citibil. - + Boost.Python error in job "%1". Eroare Boost.Python în sarcina „%1”. @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + Încărcare - + QML Step <i>%1</i>. - + Pas QML <i>%1</i>. - + Loading failed. - + Încărcare eșuată Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Verificarea cerințelor de module <i>%1</i> este completă + - + Waiting for %n module(s). @@ -237,7 +270,7 @@ - + (%n second(s)) @@ -246,7 +279,7 @@ - + System-requirements checking is complete. @@ -254,245 +287,236 @@ Calamares::ViewManager - - &Back - &Înapoi - - - - &Next - &Următorul - - - - &Cancel - &Anulează - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - Anulează instalarea fără schimbarea sistemului. - - - + Setup Failed - - Would you like to paste the install log to the web? - + + Installation Failed + Instalare eșuată - + + Error + Eroare + + + + &Yes + &Da + + + + &No + &Nu + + + + &Close + În&chide + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + Continuați configurarea? + + + Continue with installation? - + 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> - + + 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> + Programul de instalare %1 este pregătit să facă schimbări pe discul dumneavoastră pentru a instala %2.<br/><strong>Nu veți putea anula aceste schimbări.</strong> + + + &Set up now - + + &Install now + &Instalează acum + + + + Go &back + Î&napoi + + + &Set up - + &Install Instalează - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + Instalarea este completă. Închide instalatorul. + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + Anulează instalarea fără schimbarea sistemului. + + + + &Next + &Următorul + + + + &Back + &Înapoi + + + + &Done + &Gata + + + + &Cancel + &Anulează + + + Cancel setup? - + Cancel installation? Anulez instalarea? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Doriți să anulați procesul curent de instalare? Programul de instalare va ieși, iar toate modificările vor fi pierdute. - - - - &Yes - &Da - - - - - &No - &Nu - - - - &Close - În&chide - - - - Continue with setup? - Continuați configurarea? - - - - 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> - Programul de instalare %1 este pregătit să facă schimbări pe discul dumneavoastră pentru a instala %2.<br/><strong>Nu veți putea anula aceste schimbări.</strong> - - - - &Install now - &Instalează acum - - - - Go &back - Î&napoi - - - - &Done - &Gata - - - - The installation is complete. Close the installer. - Instalarea este completă. Închide instalatorul. - - - - Error - Eroare - - - - Installation Failed - Instalare eșuată - CalamaresPython::Helper - + Unknown exception type Tip de excepție necunoscut - + unparseable Python error Eroare Python neanalizabilă - + unparseable Python traceback Traceback Python neanalizabil - + Unfetchable Python error. Eroare Python nepreluabilă - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Înapoi - - - - &Next - &Următorul - - - - &Cancel - &Anulează - - - + %1 Setup Program - + %1 Installer Program de instalare %1 + + + ChangeFilesystemLabelJob - - Show debug information - Arată informația de depanare + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Programul de instalare nu a putut actualiza tabela de partiții pe discul „%1”. CheckerContainer - + Gathering system information... Se adună informații despre sistem... @@ -500,157 +524,197 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. ChoicePage - + Form Formular - - After: - După: - - - - Boot loader location: - Locație boot loader: - - - + Select storage de&vice: Selectează dispoziti&vul de stocare: - - - - + + + + Current: Actual: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + După: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Partiționare manuală</strong><br/>Puteți crea sau redimensiona partițiile. + + + Reuse %1 as home partition for %2. Reutilizează %1 ca partiție home pentru %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Selectează o partiție de micșorat, apoi trageți bara din jos pentru a redimensiona</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Locație boot loader: + + + <strong>Select a partition to install on</strong> <strong>Selectează o partiție pe care să se instaleze</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. O partiție de sistem EFI nu poate fi găsită nicăieri în acest sistem. Vă rugăm să reveniți și să partiționați manual pentru a seta %1. - + The EFI system partition at %1 will be used for starting %2. Partiția de sistem EFI de la %1 va fi folosită pentru a porni %2. - + EFI system partition: Partiție de sistem EFI: - + 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. Acest dispozitiv de stocare nu pare să aibă un sistem de operare instalat. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Șterge discul</strong><br/>Aceasta va <font color="red">șterge</font> toate datele prezente pe dispozitivul de stocare selectat. - - 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. - Acest dispozitiv de stocare are %1. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instalează laolaltă</strong><br/>Instalatorul va micșora o partiție pentru a face loc pentru %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Înlocuiește o partiție</strong><br/>Înlocuiește o partiție cu %1. - + + 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. + Acest dispozitiv de stocare are %1. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte să fie realizate schimbări pe dispozitivul de stocare. + + + 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. Acest dispozitiv de stocare are deja un sistem de operare instalat. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte de se realiza schimbări pe dispozitivul de stocare. - + 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. Acest dispozitiv de stocare are mai multe sisteme de operare instalate. Ce doriți să faceți?<br/>Veți putea revedea și confirma alegerile făcute înainte de a se realiza schimbări pe dispozitivul de stocare. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Eliminați montările pentru operațiunea de partiționare pe %1 - + Clearing mounts for partitioning operations on %1. Se elimină montările pentru operațiunile de partiționare pe %1. - + Cleared all mounts for %1 S-au eliminat toate punctele de montare pentru %1 @@ -658,22 +722,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. ClearTempMountsJob - + Clear all temporary mounts. Elimină toate montările temporare. - + Clearing all temporary mounts. Se elimină toate montările temporare. - - Cannot get list of temporary mounts. - Nu se poate obține o listă a montărilor temporare. - - - + Cleared all temporary mounts. S-au eliminat toate montările temporare. @@ -681,18 +740,18 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. CommandList - - + + Could not run command. Nu s-a putut executa comanda. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -700,100 +759,235 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Acest calculator nu satisface cerințele minimale pentru instalarea %1.<br/>Instalarea nu poate continua. <a href="#details">Detalii...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Acest calculator nu satisface unele din cerințele recomandate pentru instalarea %1.<br/>Instalarea poate continua, dar unele funcții ar putea fi dezactivate. - - - - This program will ask you some questions and set up %2 on your computer. - Acest program vă va pune mai multe întrebări și va seta %2 pe calculatorul dumneavoastră. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bun venit în programul de instalare Calamares pentru %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Bine ați venit la programul de instalare pentru %1.</h1> - - - + Set keyboard model to %1.<br/> Setează modelul tastaturii la %1.<br/> - + Set keyboard layout to %1/%2. Setează aranjamentul de tastatură la %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. Limba sistemului va fi %1. - + The numbers and dates locale will be set to %1. Formatul numerelor și datelor calendaristice va fi %1. - - Set timezone to %1/%2.<br/> - Setează fusul orar la %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) Instalare prin rețea. (Dezactivată: S-au recepționat grupuri de date invalide) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Selecția pachetelor + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalarea rețelei. (Dezactivat: Nu se pot obține listele de pachete, verificați conexiunea la rețea) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Acest calculator nu satisface cerințele minimale pentru instalarea %1.<br/>Instalarea nu poate continua. <a href="#details">Detalii...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Acest calculator nu satisface unele din cerințele recomandate pentru instalarea %1.<br/>Instalarea poate continua, dar unele funcții ar putea fi dezactivate. + + + + This program will ask you some questions and set up %2 on your computer. + Acest program vă va pune mai multe întrebări și va seta %2 pe calculatorul dumneavoastră. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Numele de utilizator este prea lung. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Hostname este prea scurt. + + + + Your hostname is too long. + Hostname este prea lung. + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Parolele nu se potrivesc! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Instalare eșuată + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + Instalarea s-a terminat + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + Instalarea este %1 completă. + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Sumar + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + Acesta este un rezumat a ce se va întâmpla după ce începeți procedura de instalare. + ContextualProcessJob - + Contextual Processes Job Job de tip Contextual Process @@ -801,100 +995,136 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. CreatePartitionDialog - + Create a Partition Creează o partiție - - MiB - MiB - - - - Partition &Type: - &Tip de partiție: - - - - &Primary - &Primară - - - - E&xtended - E&xtinsă - - - - Fi&le System: - Sis&tem de fișiere: - - - - LVM LV name - Nume LVM LV - - - - Flags: - Flags: - - - - &Mount Point: - Punct de &Montare - - - + Si&ze: Mă&rime: - + + MiB + MiB + + + + Partition &Type: + &Tip de partiție: + + + + Primar&y + + + + + E&xtended + E&xtinsă + + + + Fi&le System: + Sis&tem de fișiere: + + + + LVM LV name + Nume LVM LV + + + + &Mount Point: + Punct de &Montare + + + + Flags: + Flags: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt &Criptează - + Logical Logică - + Primary Primară - + GPT GPT - + Mountpoint already in use. Please select another one. Punct de montare existent. Vă rugăm alegeţi altul. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. Se creează nouă partiție %1 pe %2. - + The installer failed to create partition on disk '%1'. Programul de instalare nu a putut crea partiția pe discul „%1”. @@ -902,27 +1132,27 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. CreatePartitionTableDialog - + Create Partition Table Creează tabelă de partiții - + Creating a new partition table will delete all existing data on the disk. Crearea unei tabele de partiții va șterge toate datele de pe disc. - + What kind of partition table do you want to create? Ce fel de tabelă de partiții doriți să creați? - + Master Boot Record (MBR) Înregistrare de boot principală (MBR) - + GUID Partition Table (GPT) Tabelă de partiții GUID (GPT) @@ -930,22 +1160,22 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. CreatePartitionTableJob - + Create new %1 partition table on %2. Creați o nouă tabelă de partiții %1 pe %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Creați o nouă tabelă de partiții <strong>%1</strong> pe <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Se creează o nouă tabelă de partiții %1 pe %2. - + The installer failed to create a partition table on %1. Programul de instalare nu a putut crea o tabelă de partiții pe %1. @@ -953,45 +1183,41 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. CreateUserJob - + Create user %1 Creează utilizatorul %1 - + Create user <strong>%1</strong>. Creează utilizatorul <strong>%1</strong>. - - Creating user %1. - Se creează utilizator %1. + + Preserving home directory + - - Sudoers dir is not writable. - Nu se poate scrie în dosarul sudoers. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Nu se poate crea fișierul sudoers pentru scriere. + + Configuring user %1 + - - Cannot chmod sudoers file. - Nu se poate chmoda fișierul sudoers. - - - - Cannot open groups file for reading. - Nu se poate deschide fișierul groups pentru citire. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -999,22 +1225,22 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1022,18 +1248,18 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1041,22 +1267,22 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. DeletePartitionJob - + Delete partition %1. Șterge partiția %1. - + Delete partition <strong>%1</strong>. Șterge partiția <strong>%1</strong>. - + Deleting partition %1. Se șterge partiția %1. - + The installer failed to delete partition %1. Programul de instalare nu a putut șterge partiția %1. @@ -1064,46 +1290,46 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. DeviceInfoWidget - - 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. - Tipul de <strong>tabelă de partiții</strong> de pe dispozitivul de stocare selectat.<br><br>Singura metodă de a schimba tipul de tabelă de partiții este ștergerea și recrearea acesteia de la zero, ceea de distruge toate datele de pe dispozitivul de stocare.<br>Acest program de instalare va păstra tabela de partiții actuală cu excepția cazului în care alegeți altfel.<br>Dacă nu sunteți sigur, GPT este preferabil pentru sistemele moderne. - - - + This device has a <strong>%1</strong> partition table. Acest dispozitiv are o tabelă de partiții <strong>%1</strong>. - + 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. Acesta este un dispozitiv de tip <strong>loop</strong>.<br><br>Este un pseudo-dispozitiv fără tabelă de partiții care face un fișier accesibil ca un dispozitiv de tip bloc. Această schemă conține de obicei un singur sistem de fișiere. - + 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. Programul de instalare <strong>nu poate detecta o tabelă de partiții</strong> pe dispozitivul de stocare selectat.<br><br>Dispozitivul fie nu are o tabelă de partiții, sau tabela de partiții este coruptă sau de un tip necunoscut.<br>Acest program de instalare poate crea o nouă tabelă de partiție în mod automat sau prin intermediul paginii de partiționare manuală. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Acesta este tipul de tabelă de partiții recomandat pentru sisteme moderne ce pornesc de pe un mediu de boot <strong>EFI</strong>. - + <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. <br><br>Această tabelă de partiții este recomandabilă doar pentru sisteme mai vechi care pornesc de la un mediu de boot <strong>BIOS</strong>. GPT este recomandabil în cele mai multe cazuri.<br><br><strong>Atenție:</strong> tabela de partiții MBR partition este un standard învechit din epoca MS-DOS.<br>Acesta permite doar 4 partiții <em>primare</em>, iar din acestea 4 doar una poate fi de tip <em>extins</em>, care la rândul ei mai poate conține un număr mare de partiții <em>logice</em>. + + + 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. + Tipul de <strong>tabelă de partiții</strong> de pe dispozitivul de stocare selectat.<br><br>Singura metodă de a schimba tipul de tabelă de partiții este ștergerea și recrearea acesteia de la zero, ceea de distruge toate datele de pe dispozitivul de stocare.<br>Acest program de instalare va păstra tabela de partiții actuală cu excepția cazului în care alegeți altfel.<br>Dacă nu sunteți sigur, GPT este preferabil pentru sistemele moderne. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1112,17 +1338,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Scrie configurația LUKS pentru Dracut pe %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Omite scrierea configurației LUKS pentru Dracut: partiția „/” nu este criptată - + Failed to open %1 Nu s-a reușit deschiderea %1 @@ -1130,7 +1356,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1138,123 +1364,167 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. EditExistingPartitionDialog - + Edit Existing Partition Editează partiție existentă - - Content: - Conținut: + + Con&tent: + - + &Keep &Păstrează - + Format Formatează - + Warning: Formatting the partition will erase all existing data. Atenție: Formatarea partiției va șterge toate datele existente. - + &Mount Point: Punct de &Montare: - + Si&ze: Mă&rime - + MiB MiB - + Fi&le System: Sis&tem de fișiere: - + Flags: Flags: - - Mountpoint already in use. Please select another one. - Punct de montare existent. Vă rugăm alegeţi altul. + + Label for the filesystem + + + + + FS Label: + EncryptWidget - + Form Formular - + En&crypt system Sistem de &criptare - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Frază secretă - + Confirm passphrase Confirmă fraza secretă - + + Please enter the same passphrase in both boxes. Introduceți aceeași frază secretă în ambele căsuțe. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Setează informația pentru partiție - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Instalează %1 pe <strong>noua</strong> partiție de sistem %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Setează <strong>noua</strong> partiție %2 cu punctul de montare <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. Instalează %2 pe partiția de sistem %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Setează partiția %3 <strong>%1</strong> cu punctul de montare <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instalează bootloader-ul pe <strong>%1</strong>. - + Setting up mount points. Se setează puncte de montare. @@ -1262,93 +1532,81 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. FinishedPage - + Form Formular - + &Restart now &Repornește acum - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. <h1>Gata.</h1><br/>%1 a fost instalat pe calculatorul dumneavoastră.<br/>Puteți reporni noul sistem, sau puteți continua să folosiți sistemul de operare portabil %2. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalarea a eșuat</h1><br/>%1 nu a mai fost instalat pe acest calculator.<br/>Mesajul de eroare era: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Termină + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - Instalarea s-a terminat - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - Instalarea este %1 completă. + + Finish + Termină FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. Se formatează partiția %1 cu sistemul de fișiere %2. - + The installer failed to format partition %1 on disk '%2'. Programul de instalare nu a putut formata partiția %1 pe discul „%2”. @@ -1356,72 +1614,72 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source este alimentat cu curent - + The system is not plugged in to a power source. Sistemul nu este alimentat cu curent. - + is connected to the Internet este conectat la Internet - + The system is not connected to the Internet. Sistemul nu este conectat la Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. Programul de instalare nu rulează cu privilegii de administrator. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. Ecranu este prea mic pentru a afișa instalatorul. @@ -1429,7 +1687,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. HostInfoJob - + Collecting information about your machine. @@ -1437,25 +1695,25 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1463,7 +1721,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1471,7 +1729,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. InitramfsJob - + Creating initramfs. @@ -1479,17 +1737,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. InteractiveTerminalPage - + Konsole not installed Konsole nu este instalat - + Please install KDE Konsole and try again! Trebuie să instalezi KDE Konsole și să încerci din nou! - + Executing script: &nbsp;<code>%1</code> Se execută scriptul: &nbsp;<code>%1</code> @@ -1497,28 +1755,15 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. InteractiveTerminalViewStep - + Script Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Setează modelul tastaturii la %1.<br/> - - - - Set keyboard layout to %1/%2. - Setează aranjamentul de tastatură la %1/%2. - - KeyboardQmlViewStep - + Keyboard Tastatură @@ -1526,7 +1771,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. KeyboardViewStep - + Keyboard Tastatură @@ -1534,65 +1779,88 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. LCLocaleDialog - + System locale setting Setările de localizare - + 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>. Setările de localizare ale sistemului afectează limba și setul de caractere folosit pentru unele elemente de interfață la linia de comandă.<br/>Setările actuale sunt <strong>%1</strong>. - + &Cancel &Anulează - + &OK %Ok + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Formular - + <h1>License Agreement</h1> - + I accept the terms and conditions above. Sunt de acord cu termenii și condițiile de mai sus. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1600,7 +1868,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. LicenseViewStep - + License Licență @@ -1608,109 +1876,102 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>de %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 driver grafic</strong><br/><font color="Grey">de %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 plugin de browser</strong><br/><font color="Grey">de %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">de %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 pachet</strong><br/><font color="Grey">de %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">de %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Limba sistemului va fi %1. - - - - The numbers and dates locale will be set to %1. - Formatul numerelor și datelor calendaristice va fi %1. - - - + Region: Regiune: - + Zone: Zonă: - - + + &Change... S&chimbă - - - Set timezone to %1/%2.<br/> - Setează fusul orar la %1/%2.<br/> - LocaleQmlViewStep - + Location Locație + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Locație @@ -1718,35 +1979,35 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1754,116 +2015,130 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. MachineIdJob - + Generate machine-id. Generează machine-id. - + Configuration Error + Eroare de configurare + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 - - No root mount point is set for MachineId. + + 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. NetInstallViewStep - - + Package selection Selecția pachetelor - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1871,7 +2146,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. NotesQmlViewStep - + Notes @@ -1879,17 +2154,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1897,115 +2172,134 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short Parola este prea scurtă - + Password is too long Parola este prea lungă - + Password is too weak Parola este prea slabă - + Memory allocation error when setting '%1' Eroare de alocare a memorie in timpul setării '%1' - + Memory allocation error Eroare de alocare a memoriei - + The password is the same as the old one Parola este aceeasi a si cea veche - + The password is a palindrome Parola este un palindrom - + The password differs with case changes only Parola diferă doar prin schimbăarii ale majusculelor - + The password is too similar to the old one Parola este prea similară cu cea vehe - + The password contains the user name in some form Parola contine numele de utilizator intr-o anume formă - + The password contains words from the real name of the user in some form Parola contine cuvinte din numele real al utilizatorului intr-o anumita formă - + The password contains forbidden words in some form Parola contine cuvinte interzise int-o anumita formă - - The password contains less than %1 digits - Parola contine mai putin de %1 caractere - - - + The password contains too few digits Parola contine prea putine caractere - - The password contains less than %1 uppercase letters - Parola contine mai putin de %1 litera cu majusculă - - - + The password contains too few uppercase letters Parola contine prea putine majuscule - - - The password contains less than %1 lowercase letters - Parola contine mai putin de %1 minuscule + + + The password contains fewer than %n lowercase letters + + + + + - + The password contains too few lowercase letters Parola contine prea putine minuscule - - The password contains less than %1 non-alphanumeric characters - Parola contine mai putin de %1 caractere non-alfanumerice - - - + The password contains too few non-alphanumeric characters Parola contine prea putine caractere non-alfanumerice @@ -2013,147 +2307,194 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. - - The password is shorter than %1 characters - Parola este mai scurta de %1 caractere - - - + The password is too short Parola este prea mica - - The password is just rotated old one - Parola este doar cea veche rasturnata - - - - The password contains less than %1 character classes - Parola contine mai putin de %1 clase de caractere - - - + The password does not contain enough character classes Parola nu contine destule clase de caractere - - The password contains more than %1 same characters consecutively - Parola ontine mai mult de %1 caractere identice consecutiv - - - + The password contains too many same characters consecutively Parola ontine prea multe caractere identice consecutive - - The password contains more than %1 characters of the same class consecutively - Parola contine mai mult de %1 caractere ale aceleiaşi clase consecutive - - - + The password contains too many characters of the same class consecutively Parola contine prea multe caractere ale aceleiaşi clase consecutive - - - The password contains monotonic sequence longer than %1 characters - Parola ontine o secventa monotonica mai lunga de %1 caractere + + + The password contains fewer than %n digits + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + The password is shorter than %n characters + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence Parola contine o secventa de caractere monotonica prea lunga - + No password supplied Nicio parola nu a fost furnizata - + Cannot obtain random numbers from the RNG device Nu s-a putut obtine un numar aleator de la dispozitivul RNG - + Password generation failed - required entropy too low for settings Generarea parolei a esuat - necesita entropie prea mica pentru setari - + The password fails the dictionary check - %1 Parola a esuat verificarea dictionarului - %1 - + The password fails the dictionary check Parola a esuat verificarea dictionarului - + Unknown setting - %1 Setare necunoscuta - %1 - + Unknown setting Setare necunoscuta - + Bad integer value of setting - %1 Valoare gresita integrala a setari - %1 - + Bad integer value Valoare gresita integrala a setari - + Setting %1 is not of integer type Setarea %1 nu este de tip integral - + Setting is not of integer type Setarea nu este de tipul integral - + Setting %1 is not of string type Setarea %1 nu este de tipul şir - + Setting is not of string type Setarea nu este de tipul şir - + Opening the configuration file failed Deschiderea fisierului de configuratie a esuat - + The configuration file is malformed Fisierul de configuratie este malformat - + Fatal failure Esec fatal - + Unknown error Eroare necunoscuta - + Password is empty @@ -2161,40 +2502,48 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PackageChooserPage - + Form Formular - + Product Name - + TextLabel EtichetăText - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2202,12 +2551,12 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PackageModel - + Name Nume - + Description Despre @@ -2215,17 +2564,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. Page_Keyboard - + Form Formular - + Keyboard Model: Modelul tastaturii: - + Type here to test your keyboard Tastați aici pentru a testa tastatura @@ -2233,96 +2582,96 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. Page_UserSetup - + Form Formular - + What is your name? Cum vă numiți? - - What name do you want to use to log in? - Ce nume doriți să utilizați pentru logare? - - - - Choose a password to keep your account safe. - Alegeți o parolă pentru a menține contul în siguranță. - - - - - <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> - <small>Introduceți parola de 2 ori pentru a se verifica greșelile de tipar. O parolă bună va conține o combinație de litere, numere și punctuație, ar trebui să aibă cel puțin 8 caractere și ar trebui schimbată la intervale regulate.</small> - - - - What is the name of this computer? - Care este numele calculatorului? - - - + Your Full Name - + + What name do you want to use to log in? + Ce nume doriți să utilizați pentru logare? + + + login - + + What is the name of this computer? + Care este numele calculatorului? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Numele va fi folosit dacă faceți acest calculator vizibil pentru alții pe o rețea.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Alegeți o parolă pentru a menține contul în siguranță. + + + + + <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> + <small>Introduceți parola de 2 ori pentru a se verifica greșelile de tipar. O parolă bună va conține o combinație de litere, numere și punctuație, ar trebui să aibă cel puțin 8 caractere și ar trebui schimbată la intervale regulate.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. Autentifică-mă automat, fără a-mi cere parola. - + Use the same password for the administrator account. Folosește aceeași parolă pentru contul de administrator. - + Choose a password for the administrator account. Alege o parolă pentru contul de administrator. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Introduceți parola de 2 ori pentru a se verifica greșelile de tipar.</small> @@ -2330,42 +2679,42 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system Sistem EFI - + Swap Swap - + New partition for %1 Noua partiție pentru %1 - + New partition Noua partiție - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2374,34 +2723,39 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PartitionModel - - + + Free Space Spațiu liber - - + + New partition Partiție nouă - + Name Nume - + File System Sistem de fișiere - + + File System Label + + + + Mount Point Punct de montare - + Size Mărime @@ -2409,77 +2763,77 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PartitionPage - + Form Formular - + Storage de&vice: Dispoziti&v de stocare: - + &Revert All Changes &Retrage toate schimbările - + New Partition &Table &Tabelă nouă de partiții - + Cre&ate - + &Edit &Editează - + &Delete &Șterge - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Sigur doriți să creați o nouă tabelă de partiție pe %1? - + Can not create new partition - + 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. @@ -2487,117 +2841,107 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PartitionViewStep - + Gathering system information... Se adună informații despre sistem... - + Partitions Partiții - - Install %1 <strong>alongside</strong> another operating system. - Instalează %1 <strong>laolaltă</strong> cu un alt sistem de operare. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Șterge</strong> discul și instalează %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Înlocuiește</strong> o partiție cu %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - Partiționare <strong>manuală</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instalează %1 <strong>laolaltă</strong> cu un alt sistem de operare pe discul <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Șterge</strong> discul <strong>%2</strong> (%3) și instalează %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Înlocuiește</strong> o partiție pe discul <strong>%2</strong> (%3) cu %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Partiționare <strong>manuală</strong> a discului <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Discul <strong>%1</strong> (%2) - - - + Current: Actual: - + After: După: - + No EFI system partition configured Nicio partiție de sistem EFI nu a fost configurată - - 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>esp</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. - Este necesară o partiție de sistem EFI pentru a porni %1.<br/><br/>Pentru a configura o partiție de sistem EFI, reveniți și selectați sau creați o partiție FAT32 cu flag-ul <strong>esp</strong> activat și montată la <strong>%2</strong>.<br/><br/>Puteți continua și fără configurarea unei partiții de sistem EFI, dar este posibil ca sistemul să nu pornească. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Flag-ul de partiție de sistem pentru EFI nu a fost setat + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - O partiție de sistem EFI este necesară pentru a porni %1.<br/><br/>A fost configurată o partiție cu punct de montare la <strong>%2</strong> dar flag-ul <strong>esp</strong> al acesteia nu a fost setat.<br/>Pentru a seta flag-ul, reveniți și editați partiția.<br/><br/>Puteți continua și fără setarea flag-ului, dar este posibil ca sistemul să nu pornească. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Partiția de boot nu este criptată - + 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. A fost creată o partiție de boot împreună cu o partiție root criptată, dar partiția de boot nu este criptată.<br/><br/>Sunt potențiale probleme de securitate cu un astfel de aranjament deoarece importante fișiere de sistem sunt păstrate pe o partiție necriptată.<br/>Puteți continua dacă doriți, dar descuierea sistemului se va petrece mai târziu în timpul pornirii.<br/>Pentru a cripta partiția de boot, reveniți și recreați-o, alegând opțiunea <strong>Criptează</strong> din fereastra de creare de partiții. - + has at least one disk device available. - + There are no partitions to install on. @@ -2605,13 +2949,13 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PlasmaLnfJob - + Plasma Look-and-Feel Job Job de tip Plasma Look-and-Feel - - + + Could not select KDE Plasma Look-and-Feel package Nu s-a putut selecta pachetul pentru KDE Plasma Look-and-Feel @@ -2619,17 +2963,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PlasmaLnfPage - + Form Formular - + 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. - + 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. Alege un aspect pentru KDE Plasma Desktop. Deasemenea poti sari acest pas si configura aspetul odata ce sistemul este instalat. Apasand pe selectia aspectului iti va oferi o previzualizare live al acelui aspect. @@ -2637,7 +2981,7 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PlasmaLnfViewStep - + Look-and-Feel Interfață @@ -2645,17 +2989,17 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2663,14 +3007,14 @@ Programul de instalare va ieși, iar toate modificările vor fi pierdute. ProcessResult - + There was no output from the command. Nu a existat nici o iesire din comanda - + Output: @@ -2679,52 +3023,52 @@ Output - + External command crashed. Comanda externă a eșuat. - + Command <i>%1</i> crashed. Comanda <i>%1</i> a eșuat. - + External command failed to start. Comanda externă nu a putut fi pornită. - + Command <i>%1</i> failed to start. Comanda <i>%1</i> nu a putut fi pornită. - + Internal error when starting command. Eroare internă la pornirea comenzii. - + Bad parameters for process job call. Parametri proști pentru apelul sarcinii de proces. - + External command failed to finish. Finalizarea comenzii externe a eșuat. - + Command <i>%1</i> failed to finish in %2 seconds. Comanda <i>%1</i> nu a putut fi finalizată în %2 secunde. - + External command finished with errors. Comanda externă finalizată cu erori. - + Command <i>%1</i> finished with exit code %2. Comanda <i>%1</i> finalizată cu codul de ieșire %2. @@ -2732,89 +3076,94 @@ Output QObject - - Default Keyboard Model - Modelul tastaturii implicit - - - - - Default - Implicit - - - - unknown - necunoscut - - - - extended - extins - - - - unformatted - neformatat - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Spațiu nepartiționat sau tabelă de partiții necunoscută - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - + + unknown + necunoscut - - No description provided. - + + extended + extins - - - - + + unformatted + neformatat + + + + swap + swap + + + + + Default + Implicit + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + Spațiu nepartiționat sau tabelă de partiții necunoscută + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2822,18 +3171,18 @@ Output RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2841,143 +3190,158 @@ Output ReplaceWidget - + Form Formular - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Selectați locul în care să instalați %1.<br/><font color="red">Atenție: </font>aceasta va șterge toate fișierele de pe partiția selectată. - + The selected item does not appear to be a valid partition. Elementul selectat nu pare a fi o partiție validă. - + %1 cannot be installed on empty space. Please select an existing partition. %1 nu poate fi instalat în spațiul liber. Vă rugăm să alegeți o partiție existentă. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 nu poate fi instalat pe o partiție extinsă. Vă rugăm selectați o partiție primară existentă sau o partiție logică. - + %1 cannot be installed on this partition. %1 nu poate fi instalat pe această partiție. - + Data partition (%1) Partiție de date (%1) - + Unknown system partition (%1) Partiție de sistem necunoscută (%1) - + %1 system partition (%2) %1 partiție de sistem (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partiția %1 este prea mică pentru %2. Vă rugăm selectați o partiție cu o capacitate de cel puțin %3 GiB. - + <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. <strong>%2</strong><br/><br/>O partiție de sistem EFI nu a putut fi găsită nicăieri pe sistem. Vă rugăm să reveniți și să utilizați partiționarea manuală pentru a seta %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 va fi instalat pe %2.<br/><font color="red">Atenție: </font>toate datele de pe partiția %2 se vor pierde. - + The EFI system partition at %1 will be used for starting %2. Partiția de sistem EFI de la %1 va fi folosită pentru a porni %2. - + EFI system partition: Partiție de sistem EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2985,22 +3349,22 @@ Output ResizePartitionJob - + Resize partition %1. Redimensionează partiția %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Programul de instalare nu a redimensionat partiția %1 pe discul „%2”. @@ -3008,7 +3372,7 @@ Output ResizeVolumeGroupDialog - + Resize Volume Group @@ -3016,18 +3380,18 @@ Output ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3035,53 +3399,25 @@ Output ResultsListDialog - + For best results, please ensure that this computer: Pentru rezultate optime, asigurați-vă că acest calculator: - + System requirements Cerințe de sistem - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Acest calculator nu satisface cerințele minimale pentru instalarea %1.<br/>Instalarea nu poate continua. <a href="#details">Detalii...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Acest calculator nu satisface unele din cerințele recomandate pentru instalarea %1.<br/>Instalarea poate continua, dar unele funcții ar putea fi dezactivate. - - - - This program will ask you some questions and set up %2 on your computer. - Acest program vă va pune mai multe întrebări și va seta %2 pe calculatorul dumneavoastră. - - ScanningDialog - + Scanning storage devices... Se scanează dispozitivele de stocare... - + Partitioning Partiționare @@ -3089,29 +3425,29 @@ Output SetHostNameJob - + Set hostname %1 Setează hostname %1 - + Set hostname <strong>%1</strong>. Setați un hostname <strong>%1</strong>. - + Setting hostname %1. Se setează hostname %1. + - Internal Error Eroare internă - - + + Cannot write hostname to target system Nu se poate scrie hostname pe sistemul țintă @@ -3119,29 +3455,29 @@ Output SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Setează modelul de tastatură la %1, cu aranjamentul %2-%3 - + Failed to write keyboard configuration for the virtual console. Nu s-a reușit scrierea configurației de tastatură pentru consola virtuală. - - - + + + Failed to write to %1 Nu s-a reușit scrierea %1 - + Failed to write keyboard configuration for X11. Nu s-a reușit scrierea configurației de tastatură pentru X11. - + Failed to write keyboard configuration to existing /etc/default directory. Nu s-a reușit scrierea configurației de tastatură în directorul existent /etc/default. @@ -3149,82 +3485,82 @@ Output SetPartFlagsJob - + Set flags on partition %1. Setează flag-uri pentru partiția %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. Setează flagurile pe noua partiție. - + Clear flags on partition <strong>%1</strong>. Șterge flag-urile partiției <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. Elimină flagurile pentru noua partiție. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Marchează partiția <strong>%1</strong> cu flag-ul <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. Marchează noua partiție ca <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Se șterg flag-urile pentru partiția <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. Se elimină flagurile de pe noua partiție. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Se setează flag-urile <strong>%2</strong> pentru partiția <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. Se setează flagurile <strong>%1</strong> pe noua partiție. - + The installer failed to set flags on partition %1. Programul de instalare a eșuat în setarea flag-urilor pentru partiția %1. @@ -3232,42 +3568,42 @@ Output SetPasswordJob - + Set password for user %1 Setează parola pentru utilizatorul %1 - + Setting password for user %1. Se setează parola pentru utilizatorul %1. - + Bad destination system path. Cale de sistem destinație proastă. - + rootMountPoint is %1 rootMountPoint este %1 - + Cannot disable root account. Nu pot dezactiva contul root - + passwd terminated with error code %1. eroare la setarea parolei cod %1 - + Cannot set password for user %1. Nu se poate seta parola pentru utilizatorul %1. - + usermod terminated with error code %1. usermod s-a terminat cu codul de eroare %1. @@ -3275,45 +3611,82 @@ Output SetTimezoneJob - + Set timezone to %1/%2 Setează fusul orar la %1/%2 - + Cannot access selected timezone path. Nu se poate accesa calea fusului selectat. - + Bad path: %1 Cale proastă: %1 - + Cannot set timezone. Nu se poate seta fusul orar. - + Link creation failed, target: %1; link name: %2 Crearea legăturii eșuată, ținta: %1; numele legăturii: 2 - + Cannot set timezone, Nu se poate seta fusul orar, - + Cannot open /etc/timezone for writing Nu se poate deschide /etc/timezone pentru scriere + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Nu se poate chmoda fișierul sudoers. + + + + Cannot create sudoers file for writing. + Nu se poate crea fișierul sudoers pentru scriere. + + ShellProcessJob - + Shell Processes Job Shell-ul procesează sarcina. @@ -3321,81 +3694,117 @@ Output SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + %Ok - - This is an overview of what will happen once you start the install procedure. - Acesta este un rezumat a ce se va întâmpla după ce începeți procedura de instalare. + + &Yes + &Da - - - SummaryViewStep - - Summary - Sumar + + &No + &Nu + + + + &Cancel + &Anulează + + + + &Close + În&chide TrackingInstallJob - + Installation feedback Feedback pentru instalare - + Sending installation feedback. Trimite feedback pentru instalare - + Internal error in install-tracking. Eroare internă în gestionarea instalării. - + HTTP request timed out. Requestul HTTP a atins time out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback Feedback pentru mașină - + Configuring machine feedback. Se configurează feedback-ul pentru mașină - - + + Error in machine feedback configuration. Eroare în configurația de feedback pentru mașină. - + Could not configure machine feedback correctly, script error %1. Nu s-a putut configura feedback-ul pentru mașină în mod corect, eroare de script %1 - + Could not configure machine feedback correctly, Calamares error %1. Nu s-a putut configura feedback-ul pentru mașină în mod corect, eroare Calamares %1. @@ -3403,106 +3812,97 @@ Output TrackingPage - + Form Formular - + Placeholder Substituent - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Prin selectarea acestei opțiuni <span style=" font-weight:600;">nu vei trimite nicio informație</span> vei trimite informații despre instalare.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Clic aici pentru mai multe informații despre feedback-ul de la utilizatori</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Urmărirea instalărilor ajută %1 să măsoare numărul de utilizatori, hardware-ul pe care se instalează %1 și (cu ajutorul celor două opțiuni de mai jos) poate obține informații în mod continuu despre aplicațiile preferate. Pentru a vedea ce informații se trimit, clic pe pictograma de ajutor din dreptul fiecărei zone. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Alegând să trimiți aceste informații despre instalare și hardware vei trimite aceste informații <b>o singură dată</b> după finalizarea instalării. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Prin această alegere vei trimite informații despre instalare, hardware și aplicații în mod <b>periodic</b>. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Prin această alegere vei trimite informații în mod <b>regulat</b> despre instalare, hardware, aplicații și tipare de utilizare la %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Demonteaza sistemul de fisiere + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Numele de utilizator este prea lung. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Hostname este prea scurt. - - - - Your hostname is too long. - Hostname este prea lung. - - - - Your passwords do not match! - Parolele nu se potrivesc! + + Users + Utilizatori UsersViewStep - + Users Utilizatori @@ -3510,65 +3910,67 @@ Output VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Valoare VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3576,106 +3978,106 @@ Output WelcomePage - + Form Formular - - + + Select application and system language + &About + &Despre + + + Open donations website - + &Donate - + Open help and support website + &Support + &Suport + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - &Note asupra ediției - - - &Known issues &Probleme cunoscute - - &Support - &Suport + + Open release notes website + - - &About - &Despre + + &Release notes + &Note asupra ediției - - <h1>Welcome to the %1 installer.</h1> - <h1>Bine ați venit la programul de instalare pentru %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Bun venit în programul de instalare Calamares pentru %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Bun venit în programul de instalare Calamares pentru %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Bine ați venit la programul de instalare pentru %1.</h1> + + + + %1 support + %1 suport + + + About %1 setup - + About %1 installer Despre programul de instalare %1 - + <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. - - - %1 support - %1 suport - WelcomeQmlViewStep - + Welcome Bine ați venit @@ -3683,31 +4085,157 @@ Output WelcomeViewStep - + Welcome Bine ați venit + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Eroare de configurare + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + Arată informația de depanare + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3715,86 +4243,283 @@ Output keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Modelul tastaturii: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Tastați aici pentru a testa tastatura - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Cum vă numiți? + + + + Your Full Name + + + + + What name do you want to use to log in? + Ce nume doriți să utilizați pentru logare? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Care este numele calculatorului? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Alegeți o parolă pentru a menține contul în siguranță. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + Folosește aceeași parolă pentru contul de administrator. + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_ru.ts b/lang/calamares_ru.ts index ca7c8b31b..6ea11589c 100644 --- a/lang/calamares_ru.ts +++ b/lang/calamares_ru.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Управлять настройками авто-монтирования + + BootInfoWidget - + 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. <strong>Среда загрузки</strong> данной системы.<br><br>Старые системы x86 поддерживают только <strong>BIOS</strong>.<br>Современные системы обычно используют <strong>EFI</strong>, но также могут имитировать BIOS, если среда загрузки запущена в режиме совместимости. - + 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. Эта система использует среду загрузки <strong>EFI</strong>.<br><br>Чтобы настроить запуск из под среды EFI, установщик использует приложения загрузки, такое как <strong>GRUB</strong> или <strong>systemd-boot</strong> на <strong>системном разделе EFI</strong>. Процесс автоматизирован, но вы можете использовать ручной режим, где вы сами будете должны выбрать или создать его. - + 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. Эта система запущена в <strong>BIOS</strong> среде загрузки.<br><br> Чтобы настроить запуск из под среды BIOS, установщик должен установить загручик, такой как <strong>GRUB</strong>, либо в начале раздела, либо в <strong>Master Boot Record</strong>, находящийся в начале таблицы разделов (по умолчанию). Процесс автоматизирован, но вы можете выбрать ручной режим, где будете должны настроить его сами. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Главная загрузочная запись %1 - + Boot Partition Загрузочный раздел - + System Partition Системный раздел - + Do not install a boot loader Не устанавливать загрузчик - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Пустая страница @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Форма - + GlobalStorage Глобальное хранилище - + JobQueue Очередь заданий - + Modules Модули - + Type: Тип: - - + + none нет - + Interface: Интерфейс: - - Tools - Инструменты + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + Отправить журнал сессии + + + Reload Stylesheet Перезагрузить таблицу стилей - - Widget Tree + + Displays the tree of widget names in the log (for stylesheet debugging). - + + Widget Tree + Дерево виджетов + + + Debug information Отладочная информация @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Настроить - + Install Установить @@ -130,20 +158,20 @@ Calamares::FailJob - + Job failed (%1) - Задание не успешно (%1) + Не удалось выполнить задание (%1) - + Programmed job failure was explicitly requested. - + Работа программы была прекращена пользователем. Calamares::JobThread - + Done Готово @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - + Пример задания (%1) Calamares::ProcessJob - + Run command '%1' in target system. - + Запустить команду '%1' в целевой системе. - + Run command '%1'. - + Запустить команду '%1'. - + Running command %1 %2 Выполняется команда %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Выполняется действие %1. - + Bad working directory path Неверный путь к рабочему каталогу - + Working directory %1 for python job %2 is not readable. Рабочий каталог %1 для задачи python %2 недоступен для чтения. - + Bad main script file Ошибочный главный файл сценария - + Main script file %1 for python job %2 is not readable. Главный файл сценария %1 для задачи python %2 недоступен для чтения. - + Boost.Python error in job "%1". Boost.Python ошибка в задаче "%1". @@ -210,45 +238,50 @@ Calamares::QmlViewStep - + Loading ... - + Загрузка... - + QML Step <i>%1</i>. - + Шаг QML <i>%1</i>. - + Loading failed. - + Загрузка не удалась. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Проверка требований для модуля <i>%1</i> завершена. + - + Waiting for %n module(s). - - - - - + + Ожидание %n модуля. + Ожидание %n модулей. + Ожидание %n модулей. + Ожидание %n модуля(модулей). - + (%n second(s)) - - - - - + + (%n секунда) + (%n секунды) + (%n секунд) + (%n секунд(ы)) - + System-requirements checking is complete. Проверка соответствия системным требованиям завершена. @@ -256,245 +289,236 @@ Calamares::ViewManager - - &Back - &Назад - - - - &Next - &Далее - - - - &Cancel - О&тмена - - - - Cancel setup without changing the system. - Отменить установку без изменения системы. - - - - Cancel installation without changing the system. - Отменить установку без изменения системы. - - - + Setup Failed Сбой установки - - Would you like to paste the install log to the web? - + + Installation Failed + Установка завершилась неудачей - + + Error + Ошибка + + + + &Yes + &Да + + + + &No + &Нет + + + + &Close + &Закрыть + + + Install Log Paste URL - + Адрес для отправки журнала установки - + The upload was unsuccessful. No web-paste was done. + Загрузка не удалась. Веб-вставка не была завершена. + + + + Install log posted to + +%1 + +Link copied to clipboard - + Calamares Initialization Failed Ошибка инициализации Calamares - + %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. Не удалось установить %1. Calamares не удалось загрузить все сконфигурированные модули. Эта проблема вызвана тем, как ваш дистрибутив использует Calamares. - + <br/>The following modules could not be loaded: <br/>Не удалось загрузить следующие модули: - + + Continue with setup? + Продолжить установку? + + + Continue with installation? Продолжить установку? - + 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> Программа установки %1 готова внести изменения на Ваш диск, чтобы установить %2.<br/><strong>Отменить эти изменения будет невозможно.</strong> - + + 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> + Программа установки %1 готова внести изменения на Ваш диск, чтобы установить %2.<br/><strong>Отменить эти изменения будет невозможно.</strong> + + + &Set up now - + &Настроить сейчас - + + &Install now + Приступить к &установке + + + + Go &back + &Назад + + + &Set up - + &Настроить - + &Install &Установить - + Setup is complete. Close the setup program. Установка завершена. Закройте программу установки. - + + The installation is complete. Close the installer. + Установка завершена. Закройте установщик. + + + + Cancel setup without changing the system. + Отменить установку без изменения системы. + + + + Cancel installation without changing the system. + Отменить установку без изменения системы. + + + + &Next + &Далее + + + + &Back + &Назад + + + + &Done + &Готово + + + + &Cancel + О&тмена + + + Cancel setup? Отменить установку? - + Cancel installation? Отменить установку? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Прервать процесс установки? Программа установки прекратит работу и все изменения будут потеряны. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Действительно прервать процесс установки? Программа установки сразу прекратит работу, все изменения будут потеряны. - - - - &Yes - &Да - - - - - &No - &Нет - - - - &Close - &Закрыть - - - - Continue with setup? - Продолжить установку? - - - - 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> - Программа установки %1 готова внести изменения на Ваш диск, чтобы установить %2.<br/><strong>Отменить эти изменения будет невозможно.</strong> - - - - &Install now - Приступить к &установке - - - - Go &back - &Назад - - - - &Done - &Готово - - - - The installation is complete. Close the installer. - Установка завершена. Закройте установщик. - - - - Error - Ошибка - - - - Installation Failed - Установка завершилась неудачей - CalamaresPython::Helper - + Unknown exception type Неизвестный тип исключения - + unparseable Python error неподдающаяся обработке ошибка Python - + unparseable Python traceback неподдающийся обработке traceback Python - + Unfetchable Python error. Неизвестная ошибка Python - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Назад - - - - &Next - &Далее - - - - &Cancel - О&тмена - - - + %1 Setup Program Программа установки %1 - + %1 Installer Программа установки %1 + + + ChangeFilesystemLabelJob - - Show debug information - Показать отладочную информацию + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Программе установки не удалось обновить таблицу разделов на диске '%1'. CheckerContainer - + Gathering system information... Сбор информации о системе... @@ -502,157 +526,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Форма - - After: - После: - - - - Boot loader location: - Расположение загрузчика: - - - + Select storage de&vice: Выбрать устройство &хранения: - - - - + + + + Current: Текущий: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + После: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Ручная разметка</strong><br/>Вы можете самостоятельно создавать разделы или изменять их размеры. + + + Reuse %1 as home partition for %2. Использовать %1 как домашний раздел для %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Выберите раздел для уменьшения, затем двигайте ползунок, изменяя размер</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 будет уменьшен до %2MB и новый раздел %3MB будет создан для %4. - + + Boot loader location: + Расположение загрузчика: + + + <strong>Select a partition to install on</strong> <strong>Выберите раздел для установки</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Не найдено системного раздела EFI. Пожалуйста, вернитесь назад и выполните ручную разметку %1. - + The EFI system partition at %1 will be used for starting %2. Системный раздел EFI на %1 будет использован для запуска %2. - + EFI system partition: Системный раздел EFI: - + 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. Видимо, на этом устройстве нет операционной системы. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Стереть диск</strong><br/>Это <font color="red">удалит</font> все данные, которые сейчас находятся на выбранном устройстве. - - 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. - На этом устройстве есть %1. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - - - - No Swap - Без раздела подкачки - - - - Reuse Swap - Использовать существующий раздел подкачки - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Установить рядом</strong><br/>Программа установки уменьшит раздел, чтобы освободить место для %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Заменить раздел</strong><br/>Меняет раздел на %1. - + + 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. + На этом устройстве есть %1. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. + + + 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. На этом устройстве уже есть операционная система. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. - + 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. На этом устройстве есть несколько операционных систем. Что Вы хотите сделать?<br/>Вы сможете изменить или подтвердить свой выбор до того, как на устройстве будут сделаны какие-либо изменения. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + Без раздела подкачки + + + + Reuse Swap + Использовать существующий раздел подкачки + + + + Swap (no Hibernate) + Swap (без Гибернации) + + + + Swap (with Hibernate) + Swap (с Гибернацией) + + + + Swap to file + Файл подкачки + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Освободить точки монтирования для выполнения разметки на %1 - + Clearing mounts for partitioning operations on %1. Освобождаются точки монтирования для выполнения разметки на %1. - + Cleared all mounts for %1 Освобождены все точки монтирования для %1 @@ -660,22 +724,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. Освободить все временные точки монтирования. - + Clearing all temporary mounts. Освобождаются все временные точки монтирования. - - Cannot get list of temporary mounts. - Не удалось получить список временных точек монтирования. - - - + Cleared all temporary mounts. Освобождены все временные точки монтирования. @@ -683,18 +742,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. Не удалось выполнить команду. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Команда выполняется в окружении установщика, и ей необходимо знать путь корневого раздела, но rootMountPoint не определено. - + The command needs to know the user's name, but no username is defined. Команде необходимо знать имя пользователя, но оно не задано. @@ -702,201 +761,372 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Этот компьютер не соответствует минимальным требованиям для установки %1.<br/>Невозможно продолжить установку. <a href="#details">Подробнее...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Этот компьютер не соответствует минимальным требованиям для установки %1.<br/>Невозможно продолжить установку. <a href="#details">Подробнее...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны. - - - - This program will ask you some questions and set up %2 on your computer. - Эта программа задаст вам несколько вопросов и поможет установить %2 на ваш компьютер. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Добро пожаловать в программу установки Calamares для %1 .</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Добро пожаловать в программу установки %1 .</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Добро пожаловать в установщик Calamares для %1 .</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Добро пожаловать в программу установки %1 .</h1> - - - + Set keyboard model to %1.<br/> Установить модель клавиатуры на %1.<br/> - + Set keyboard layout to %1/%2. Установить раскладку клавиатуры на %1/%2. - + + Set timezone to %1/%2. + Установить часовой пояс на %1/%2 + + + The system language will be set to %1. Системным языком будет установлен %1. - + The numbers and dates locale will be set to %1. Региональным форматом чисел и дат будет установлен %1. - - Set timezone to %1/%2.<br/> - Установить часовой пояс на %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Сетевая установка. (Отключено: неверная конфигурация) - + Network Installation. (Disabled: Received invalid groups data) Установка по сети. (Отключено: получены неверные сведения о группах) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Выбор пакетов + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Установка по сети. (Отключено: не удается получить список пакетов, проверьте сетевое подключение) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Этот компьютер не соответствует минимальным требованиям для установки %1.<br/>Невозможно продолжить установку. <a href="#details">Подробнее...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Этот компьютер не соответствует минимальным требованиям для установки %1.<br/>Невозможно продолжить установку. <a href="#details">Подробнее...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны. + + + + This program will ask you some questions and set up %2 on your computer. + Эта программа задаст вам несколько вопросов и поможет установить %2 на ваш компьютер. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Добро пожаловать в программу установки Calamares для %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Добро пожаловать в программу установки %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Добро пожаловать в программу установки Calamares для %1 .</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Добро пожаловать в программу установки %1 .</h1> + + + + Your username is too long. + Ваше имя пользователя слишком длинное. + + + + '%1' is not allowed as username. + '%1' нельзя использовать как имя пользователя + + + + Your username must start with a lowercase letter or underscore. + Ваше имя пользователя должно начинаться со строчной буквы или подчеркивания. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Допускаются только строчные буквы, числа, символы подчёркивания и дефисы. + + + + Your hostname is too short. + Имя вашего компьютера слишком коротко. + + + + Your hostname is too long. + Имя вашего компьютера слишком длинное. + + + + '%1' is not allowed as hostname. + '%1' нельзя использовать как имя хоста + + + + Only letters, numbers, underscore and hyphen are allowed. + Допускаются только буквы, цифры, символы подчёркивания и дефисы. + + + + Your passwords do not match! + Пароли не совпадают! + + + + OK! + + + + + Setup Failed + Сбой установки + + + + Installation Failed + Установка завершилась неудачей + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Установка завершена + + + + Installation Complete + Установка завершена + + + + The setup of %1 is complete. + Установка %1 завершена. + + + + The installation of %1 is complete. + Установка %1 завершена. + + + + Package Selection + Выбор пакета + + + + Please pick a product from the list. The selected product will be installed. + Пожалуйста, выберите продукт из списка. Выбранный продукт будет установлен. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Сводка + + + + This is an overview of what will happen once you start the setup procedure. + Это обзор изменений, которые будут применены при запуске процедуры установки. + + + + This is an overview of what will happen once you start the install procedure. + Это обзор изменений, которые будут применены при запуске процедуры установки. + ContextualProcessJob - + Contextual Processes Job - + Работа с контекстными процессами CreatePartitionDialog - + Create a Partition Создать раздел - - MiB - МиБ - - - - Partition &Type: - &Тип раздела: - - - - &Primary - &Основной - - - - E&xtended - &Расширенный - - - - Fi&le System: - &Файловая система: - - - - LVM LV name - Имя LV LVM - - - - Flags: - Флаги: - - - - &Mount Point: - Точка &монтирования - - - + Si&ze: Ра&змер: - - En&crypt - Ши&фровать + + MiB + МиБ - + + Partition &Type: + &Тип раздела: + + + + Primar&y + + + + + E&xtended + &Расширенный + + + + Fi&le System: + &Файловая система: + + + + LVM LV name + Имя LV LVM + + + + &Mount Point: + Точка &монтирования + + + + Flags: + Флаги: + + + + Label for the filesystem + Метка файловой системы + + + + FS Label: + Метка ФС: + + + + En&crypt + &Шифровать + + + Logical Логический - + Primary Основной - + GPT GPT - + Mountpoint already in use. Please select another one. Точка монтирования уже занята. Пожалуйста, выберете другую. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + Создать новый раздел %1МиБ на %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. - Создать новый раздел %2 MB на %4 (%3) с файловой системой %1. + Создать новый раздел %2 MiB на %4 (%3) с файловой системой %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Создать новый раздел <strong>%1МиБ</strong> на <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - Создать новый раздел <strong>%2 MB</strong> на <strong>%4</strong> (%3) с файловой системой <strong>%1</strong>. + Создать новый раздел <strong>%2 MiB</strong> на <strong>%4</strong> (%3) с файловой системой <strong>%1</strong>. - + + Creating new %1 partition on %2. Создается новый %1 раздел на %2. - + The installer failed to create partition on disk '%1'. Программа установки не смогла создать раздел на диске '%1'. @@ -904,27 +1134,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Создать таблицу разделов - + Creating a new partition table will delete all existing data on the disk. При создании новой таблицы разделов будут удалены все данные на диске. - + What kind of partition table do you want to create? Какой тип таблицы разделов Вы желаете создать? - + Master Boot Record (MBR) Главная загрузочная запись (MBR) - + GUID Partition Table (GPT) Таблица разделов GUID (GPT) @@ -932,22 +1162,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. Создать новую таблицу разделов %1 на %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Создать новую таблицу разделов <strong>%1</strong> на <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Создается новая таблица разделов %1 на %2. - + The installer failed to create a partition table on %1. Программа установки не смогла создать таблицу разделов на %1. @@ -955,45 +1185,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Создать учетную запись %1 - + Create user <strong>%1</strong>. Создать учетную запись <strong>%1</strong>. - - Creating user %1. - Создается учетная запись %1. + + Preserving home directory + Сохранение домашней папки - - Sudoers dir is not writable. - Каталог sudoers не доступен для записи. + + + Creating user %1 + Создание пользователя %1 - - Cannot create sudoers file for writing. - Не удалось записать файл sudoers. + + Configuring user %1 + Настройка пользователя %1 - - Cannot chmod sudoers file. - Не удалось применить chmod к файлу sudoers. - - - - Cannot open groups file for reading. - Не удалось открыть файл groups для чтения. + + Setting file permissions + Установка прав доступа файла CreateVolumeGroupDialog - + Create Volume Group Создать группу томов @@ -1001,22 +1227,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - Создать новую группу томов на диске %1 + Создать новую группу томов на диске %1. - + Create new volume group named <strong>%1</strong>. - Создать новую группу томов на диске %1 + Создать новую группу томов на диске %1. - + Creating new volume group named %1. - Cоздание новой группы томов на диске %1 + Создание новой группы томов на диске %1. - + The installer failed to create a volume group named '%1'. Программа установки не смогла создать группу томов на диске '%1'. @@ -1024,41 +1250,41 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Отключить группу томов на диске %1. - + Deactivate volume group named <strong>%1</strong>. - + Отключить группу томов на диске <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. - + Программа установки не смогла деактивировать группу томов на диске %1. DeletePartitionJob - + Delete partition %1. Удалить раздел %1. - + Delete partition <strong>%1</strong>. Удалить раздел <strong>%1</strong>. - + Deleting partition %1. Удаляется раздел %1. - + The installer failed to delete partition %1. Программе установки не удалось удалить раздел %1. @@ -1066,46 +1292,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - Тип <strong>таблицы разделов</strong> на выбраном устройстве хранения.<br><br>Смена типа раздела возможна только путем удаления и пересоздания всей таблицы разделов, что уничтожит все данные на устройстве.<br>Этот установщик не затронет текущую таблицу разделов, кроме как вы сами решите иначе.<br>По умолчанию, современные системы используют GPT-разметку. - - - + This device has a <strong>%1</strong> partition table. На этом устройстве имеется <strong>%1</strong> таблица разделов. - + 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. Это <strong>loop</strong> устройство.<br><br>Это псевдо-устройство без таблицы разделов позволяет использовать обычный файл как блочное устройство. При таком виде подключения обычно имеется только одна файловая система. - + 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. Программа установки <strong>не обнаружила таблицы разделов</strong> на выбранном устройстве хранения.<br><br>На этом устройстве либо нет таблицы разделов, либо она повреждена, либо неизвестного типа.<br>Эта программа установки может создать для Вас новую таблицу разделов автоматически или через страницу ручной разметки. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Это рекомендуемый тип таблицы разделов для современных систем, которые используют окружение <strong>EFI</strong> для загрузки. - + <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. <br><br>Этот тип таблицы разделов рекомендуется только для старых систем, запускаемых из среды загрузки <strong>BIOS</strong>. В большинстве случаев вместо этого лучше использовать GPT.<br><br><strong>Внимание:</strong> MBR стандарт таблицы разделов является устаревшим.<br>Он допускает максимум 4 <em>первичных</em> раздела, только один из них может быть <em>расширенным</em> и содержать много <em>логических</em> под-разделов. + + + 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. + Тип <strong>таблицы разделов</strong> на выбраном устройстве хранения.<br><br>Смена типа раздела возможна только путем удаления и пересоздания всей таблицы разделов, что уничтожит все данные на устройстве.<br>Этот установщик не затронет текущую таблицу разделов, кроме как вы сами решите иначе.<br>По умолчанию, современные системы используют GPT-разметку. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1114,17 +1340,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Записать LUKS настройки для Dracut в %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Пропустить сохранение LUKS настроек для Dracut: "/" раздел не зашифрован - + Failed to open %1 Не удалось открыть %1 @@ -1132,7 +1358,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1140,123 +1366,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition Редактировать существующий раздел - - Content: - Содержит: + + Con&tent: + - + &Keep О&ставить - + Format Форматировать - + Warning: Formatting the partition will erase all existing data. Внимание: Форматирование раздела уничтожит все данные. - + &Mount Point: Точка &монтирования: - + Si&ze: Ра&змер: - + MiB - МиБ + МиБ - + Fi&le System: &Файловая система: - + Flags: Флаги: - - Mountpoint already in use. Please select another one. - Точка монтирования уже занята. Пожалуйста, выберете другую. + + Label for the filesystem + Метка файловой системы + + + + FS Label: + Метка ФС: EncryptWidget - + Form Форма - + En&crypt system Система &шифрования - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase Пароль - + Confirm passphrase Подтвердите пароль - + + Please enter the same passphrase in both boxes. Пожалуйста, введите один и тот же пароль в оба поля. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Разместить журнал установки в интернете? + + FillGlobalStorageJob - + Set partition information Установить сведения о разделе - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. Установить %1 на <strong>новый</strong> системный раздел %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Настроить <strong>новый</strong> %2 раздел с точкой монтирования <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Настроить <strong>новый</strong> %2 раздел с точкой монтирования <strong>%1</strong> %3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Настроить %3 раздел <strong>%1</strong> с точкой монтирования <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Установить %2 на %3 системный раздел <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Настроить %3 раздел <strong>%1</strong> с точкой монтирования <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Установить загрузчик на <strong>%1</strong>. - + Setting up mount points. Настраиваются точки монтирования. @@ -1264,93 +1534,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Геометрия - + &Restart now П&ерезагрузить - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Готово.</h1><br/>Система %1 установлена на ваш компьютер.<br/>Можете перезагрузить компьютер и начать использовать вашу новую систему. - + <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> <html><head/><body><p>Если этот флажок установлен, ваша система будет перезагружена сразу после нажатия кнопки <span style="font-style:italic;">Готово</span> или закрытия программы установки.</p></body></html> - + <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. <h1>Готово.</h1><br/>Система %1 установлена на Ваш компьютер.<br/>Вы можете перезагрузить компьютер и использовать Вашу новую систему или продолжить работу в Live окружении %2. - + <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> <html><head/><body><p>Если этот флажок установлен, ваша система будет перезагружена сразу после нажатия кнопки <span style=" font-style:italic;">Готово</span> или закрытия программы установки.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Сбой установки</h1><br/>Система %1 не была установлена на ваш компьютер.<br/>Сообщение об ошибке: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Сбой установки</h1><br/>Не удалось установить %1 на ваш компьютер.<br/>Сообщение об ошибке: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Завершить + + + FinishedViewStep - - Setup Complete - Установка завершена - - - - Installation Complete - Установка завершена - - - - The setup of %1 is complete. - Установка %1 завершена. - - - - The installation of %1 is complete. - Установка %1 завершена. + + Finish + Завершить FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - Форматировать раздел %1 (файловая система: %2, размер: %3 МБ) на %4. + Форматировать раздел %1 (файловая система: %2, размер: %3 МиБ) на %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Форматировать раздел <strong>%1</strong> размером <strong>%3MB</strong> с файловой системой <strong>%2</strong>. - + Formatting partition %1 with file system %2. Форматируется раздел %1 под файловую систему %2. - + The installer failed to format partition %1 on disk '%2'. Программе установки не удалось отформатировать раздел %1 на диске '%2'. @@ -1358,80 +1616,80 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space доступно как минимум %1 ГБ свободного дискового пространства - + There is not enough drive space. At least %1 GiB is required. Недостаточно места на дисках. Необходимо как минимум %1 ГБ. - + has at least %1 GiB working memory доступно как минимум %1 ГБ оперативной памяти - + The system does not have enough working memory. At least %1 GiB is required. Недостаточно оперативной памяти. Необходимо как минимум %1 ГБ. - + is plugged in to a power source подключено сетевое питание - + The system is not plugged in to a power source. Сетевое питание не подключено. - + is connected to the Internet присутствует выход в сеть Интернет - + The system is not connected to the Internet. Отсутствует выход в Интернет. - + is running the installer as an administrator (root) - + запуск установщика с правами администратора (root) - + The setup program is not running with administrator rights. Программа установки запущена без прав администратора. - + The installer is not running with administrator rights. Программа установки не запущена с привилегиями администратора. - + has a screen large enough to show the whole installer - + экран достаточно большой, чтобы показать установщик полностью - + The screen is too small to display the setup program. Экран слишком маленький, чтобы отобразить программу установки. - + The screen is too small to display the installer. - Слишком маленький экран для окна установщика. + Экран слишком маленький, чтобы отобразить окно установщика. HostInfoJob - + Collecting information about your machine. Сбор информации о вашем компьютере. @@ -1439,25 +1697,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Идентификатор партии OEM - + Could not create directories <code>%1</code>. Не удалось создать директории <code>%1</code>. - + Could not open file <code>%1</code>. Не удалось открыть файл <code>%1</code>. - + Could not write to file <code>%1</code>. Не удалась запись в файл <code>%1</code>. @@ -1465,7 +1723,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. Создание initramfs при помощи mkinitcpio. @@ -1473,7 +1731,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. Создание initramfs. @@ -1481,17 +1739,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Программа Konsole не установлена - + Please install KDE Konsole and try again! Установите KDE Konsole и попробуйте ещё раз! - + Executing script: &nbsp;<code>%1</code> Выполняется сценарий: &nbsp;<code>%1</code> @@ -1499,28 +1757,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Скрипт - - KeyboardPage - - - Set keyboard model to %1.<br/> - Установить модель клавиатуры на %1.<br/> - - - - Set keyboard layout to %1/%2. - Установить раскладку клавиатуры на %1/%2. - - KeyboardQmlViewStep - + Keyboard Клавиатура @@ -1528,7 +1773,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Клавиатура @@ -1536,73 +1781,96 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting Общие региональные настройки - + 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>. Общие региональные настройки влияют на язык и кодировку для отдельных элементов интерфейса командной строки.<br/>Текущий выбор <strong>%1</strong>. - + &Cancel - О&тмена + &Отмена - + &OK &ОК + + LOSHJob + + + Configuring encrypted swap. + Настройка зашифрованного swap. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Форма - + <h1>License Agreement</h1> <h1>Лицензионное соглашение</h1> - + I accept the terms and conditions above. Я принимаю приведенные выше условия. - + Please review the End User License Agreements (EULAs). - + Пожалуйста, ознакомьтесь с лицензионным соглашением (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. - + В ходе этой процедуры установки будет установлено проприетарное программное обеспечение, на которое распространяются условия лицензирования. - + If you do not agree with the terms, the setup procedure cannot continue. - + если вы не согласны с условиями, процедура установки не может быть продолжена. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Эта процедура установки может установить проприетарное программное обеспечение, на которое распространяются условия лицензирования, чтобы предоставить дополнительные функции и улучшить взаимодействие с пользователем. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Если вы не согласны с условиями, проприетарное программное обеспечение не будет установлено, и вместо него будут использованы альтернативы с открытым исходным кодом. LicenseViewStep - + License Лицензия @@ -1610,109 +1878,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + Адрес: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>драйвер %1</strong><br/>от %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>видео драйвер %1</strong><br/><font color="Grey">от %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>плагин браузера %1</strong><br/><font color="Grey">от %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>кодек %1</strong><br/><font color="Grey">от %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>пакет %1</strong><br/><font color="Grey">от %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">от %2</font> - + File: %1 Файл: %1 - + + Hide license text + Скрыть текст лицензии + + + Show the license text Показать текст лицензии - + Open license agreement in browser. Открыть лицензионное соглашение в браузере. - - - Hide license text - Скрыть текст лицензии - LocalePage - - The system language will be set to %1. - Системным языком будет установлен %1. - - - - The numbers and dates locale will be set to %1. - Региональным форматом чисел и дат будет установлен %1. - - - + Region: Регион: - + Zone: Зона: - - + + &Change... И&зменить... - - - Set timezone to %1/%2.<br/> - Установить часовой пояс на %1/%2.<br/> - LocaleQmlViewStep - + Location Местоположение + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Местоположение @@ -1720,178 +1981,192 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. Конфигурация файла ключа LUKS. - - + + No partitions are defined. Разделы не были заданы. - - - + + + Encrypted rootfs setup error - + Ошибка шифрования корневой файловой системы - + Root partition %1 is LUKS but no passphrase has been set. Корневой раздел %1 это LUKS, но ключ шифрования не был задан. - + Could not create LUKS key file for root partition %1. Не удалось создать файл ключа LUKS для корневого раздела %1. - + Could not configure LUKS key file on partition %1. - + Не удалось настроить файл ключа LUKS на разделе %1. MachineIdJob - + Generate machine-id. - + Генерация идентификатора устройства - + Configuration Error - + Ошибка конфигурации - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + Часовой пояс: %1 + + + + 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. + Выберите ваше месторасположение на карте, чтобы программа установки предложила настройки локали и часового пояса. В дальнейшем их можно изменить ниже. Карту можно перемещать мышью, и изменять ее масштаб колесиком мыши или клавишами +/-. + + NetInstallViewStep - - + Package selection Выбор пакетов - + Office software - + Офисное программное обеспечение - + Office package - + Офисный пакет - + Browser software - + Браузерное программное обеспечение - + Browser package - + Браузерный пакет - + Web browser Веб-браузер - + Kernel Ядро - + Services - + Сервисы - + Login - + Вход - + Desktop - + Рабочий стол - + Applications Приложения - + Communication - + Общение - + Development - + Разработка - + Office - + Офис - + Multimedia - + Мультимедиа - + Internet - + Интернет - + Theming - + Темы - + Gaming - + Игры - + Utilities - + Утилиты NotesQmlViewStep - + Notes - + Заметки OEMPage - + Ba&tch: - + Пар&тия: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Введите идентификатор партии здесь. Это будет сохранено в целевой системе.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1899,260 +2174,335 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration + Конфигурация OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. - - Set the OEM Batch Identifier to <code>%1</code>. + + + + Timezone: %1 + Часовой пояс: %1 + + + + Select your preferred Zone within your Region. + Выберите ваш предпочитаемый пояс в регионе + + + + Zones + Пояса + + + + You can fine-tune Language and Locale settings below. PWQ - + Password is too short Слишком короткий пароль - + Password is too long Слишком длинный пароль - + Password is too weak Пароль слишком слабый - + Memory allocation error when setting '%1' Ошибка выделения памяти при установке «%1» - + Memory allocation error Ошибка выделения памяти - + The password is the same as the old one Пароль такой же, как и старый - + The password is a palindrome Пароль является палиндромом - + The password differs with case changes only Пароль отличается только регистром символов - + The password is too similar to the old one Пароль слишком похож на старый - + The password contains the user name in some form Пароль содержит имя пользователя - + The password contains words from the real name of the user in some form Пароль содержит слова из реального имени пользователя - + The password contains forbidden words in some form Пароль содержит запрещённые слова - - The password contains less than %1 digits - Пароль содержит менее %1 цифр - - - + The password contains too few digits В пароле слишком мало цифр - - The password contains less than %1 uppercase letters - Пароль содержит менее %1 заглавных букв - - - + The password contains too few uppercase letters В пароле слишком мало заглавных букв - - - The password contains less than %1 lowercase letters - Пароль содержит менее %1 строчных букв + + + The password contains fewer than %n lowercase letters + + + + + + - + The password contains too few lowercase letters В пароле слишком мало строчных букв - - The password contains less than %1 non-alphanumeric characters - Пароль содержит менее %1 не буквенно-цифровых символов - - - + The password contains too few non-alphanumeric characters В пароле слишком мало не буквенно-цифровых символов - - The password is shorter than %1 characters - Пароль короче %1 символов - - - + The password is too short Пароль слишком короткий - - The password is just rotated old one - Новый пароль — это просто перевёрнутый старый - - - - The password contains less than %1 character classes - Пароль содержит менее %1 классов символов - - - + The password does not contain enough character classes Пароль содержит недостаточно классов символов - - The password contains more than %1 same characters consecutively - Пароль содержит более %1 одинаковых последовательных символов - - - + The password contains too many same characters consecutively Пароль содержит слишком много одинаковых последовательных символов - - The password contains more than %1 characters of the same class consecutively - Пароль содержит более %1 символов одного и того же класса последовательно - - - + The password contains too many characters of the same class consecutively Пароль содержит слишком длинную последовательность символов одного и того же класса - - - The password contains monotonic sequence longer than %1 characters - Пароль содержит монотонную последовательность длиннее %1 символов + + + The password contains fewer than %n digits + + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + + The password is shorter than %n characters + + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + + The password contains too long of a monotonic character sequence Пароль содержит слишком длинную монотонную последовательность символов - + No password supplied Не задан пароль - + Cannot obtain random numbers from the RNG device Не удаётся получить случайные числа с устройства RNG - + Password generation failed - required entropy too low for settings - + Сбой генерации пароля - слишком низкая энтропия для настроек - + The password fails the dictionary check - %1 Пароль не прошёл проверку на использование словарных слов - %1 - + The password fails the dictionary check Пароль не прошёл проверку на использование словарных слов - + Unknown setting - %1 Неизвестная настройка - %1 - + Unknown setting Неизвестная настройка - + Bad integer value of setting - %1 Недопустимое целое значение свойства - %1 - + Bad integer value Недопустимое целое значение - + Setting %1 is not of integer type Настройка %1 не является целым числом - + Setting is not of integer type Настройка не является целым числом - + Setting %1 is not of string type Настройка %1 не является строкой - + Setting is not of string type Настройка не является строкой - + Opening the configuration file failed Не удалось открыть конфигурационный файл - + The configuration file is malformed Ошибка в структуре конфигурационного файла - + Fatal failure Фатальный сбой - + Unknown error Неизвестная ошибка - + Password is empty Пустой пароль @@ -2160,53 +2510,61 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Форма - + Product Name - + Имя продукта - + TextLabel - + Текстовая метка - + Long Product Description - + Длинное описание продукта - + Package Selection - + Выбор пакета - + Please pick a product from the list. The selected product will be installed. - + Пожалуйста, выберите продукт из списка. Выбранный продукт будет установлен. + + + + PackageChooserQmlViewStep + + + Packages + Пакеты PackageChooserViewStep - + Packages - + Пакеты PackageModel - + Name Имя - + Description Описание @@ -2214,17 +2572,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Геометрия - + Keyboard Model: Тип клавиатуры: - + Type here to test your keyboard Эта область - для тестирования клавиатуры @@ -2232,96 +2590,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Геометрия - + What is your name? Как Вас зовут? - - What name do you want to use to log in? - Какое имя Вы хотите использовать для входа? - - - - Choose a password to keep your account safe. - Выберите пароль для защиты вашей учетной записи. - - - - - <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> - <small>Введите одинаковый пароль дважды, это необходимо для исключения ошибок. Хороший пароль состоит из смеси букв, цифр и знаков пунктуации; должен иметь длину от 8 знаков и его стоит периодически изменять.</small> - - - - What is the name of this computer? - Какое имя у компьютера? - - - + Your Full Name Ваше полное имя - - login - + + What name do you want to use to log in? + Какое имя Вы хотите использовать для входа? - + + login + Вход + + + + What is the name of this computer? + Какое имя у компьютера? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Это имя будет использовано, если Вы сделаете этот компьютер видимым в сети.</small> - + Computer Name Имя компьютера - - + + Choose a password to keep your account safe. + Выберите пароль для защиты вашей учетной записи. + + + + + <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> + <small>Введите одинаковый пароль дважды, это необходимо для исключения ошибок. Хороший пароль состоит из смеси букв, цифр и знаков пунктуации; должен иметь длину от 8 знаков и его стоит периодически изменять.</small> + + + + Password Пароль - - + + Repeat Password Повторите пароль - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Когда этот флажок установлен, выполняется проверка надежности пароля, и вы не сможете использовать слабый пароль. - + Require strong passwords. - + Требовать надежный пароль. - + Log in automatically without asking for the password. Автоматический вход, без запроса пароля. - + Use the same password for the administrator account. Использовать тот же пароль для аккаунта администратора. - + Choose a password for the administrator account. Выберите пароль администратора - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Введите пароль дважды, чтобы исключить ошибки ввода.</small> @@ -2329,42 +2687,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system - Система EFI + Системный раздел EFI - + Swap Swap - + New partition for %1 Новый раздел для %1 - + New partition Новый раздел - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2373,34 +2731,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Доступное место - - + + New partition Новый раздел - + Name Имя - + File System Файловая система - + + File System Label + Метка файловой системы + + + Mount Point Точка монтирования - + Size Размер @@ -2408,77 +2771,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Геометрия - + Storage de&vice: &Устройство: - + &Revert All Changes &Отменить все изменения - + New Partition &Table Новая &таблица разделов - + Cre&ate - Со&здать + &Создать - + &Edit &Править - + &Delete &Удалить - + New Volume Group Новая группа томов - + Resize Volume Group Изменить размер группы томов - + Deactivate Volume Group - + Отключить группу томов - + Remove Volume Group Удалить группу томов - + I&nstall boot loader on: Уст&ановить загрузчик в: - + Are you sure you want to create a new partition table on %1? Вы уверены, что хотите создать новую таблицу разделов на %1? - + Can not create new partition Не удалось создать новый раздел - + 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. В таблице разделов на %1 уже %2 первичных разделов, больше добавить нельзя. Удалите один из первичных разделов и добавьте расширенный раздел. @@ -2486,131 +2849,121 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Сбор информации о системе... - + Partitions Разделы - - Install %1 <strong>alongside</strong> another operating system. - Установить %1 <strong>параллельно</strong> к другой операционной системе. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Очистить</strong> диск и установить %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Заменить</strong> раздел на %1. + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>Ручная</strong> разметка. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Установить %1 <strong>параллельно</strong> к другой операционной системе на диске <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Очистить</strong> диск <strong>%2</strong> (%3) и установить %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Заменить</strong> раздел на диске <strong>%2</strong> (%3) на %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Ручная</strong> разметка диска <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Диск <strong>%1</strong> (%2) - - - + Current: Текущий: - + After: После: - + No EFI system partition configured Нет настроенного системного раздела EFI - - 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>esp</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. - Чтобы начать, необходим системный раздел EFI %1.<br/><br/>Для настройки системного раздела EFI, вернитесь, выберите или создайте файловую систему FAT32 с установленным флагом <strong>esp</strong> и точкой монтирования <strong>%2</strong>.<br/><br/>Вы можете продолжить и без настройки системного раздела EFI, но Ваша система может не загрузиться. + + EFI system partition configured incorrectly + - - EFI system partition flag not set - Не установлен флаг системного раздела EFI + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Чтобы начать, необходим системный раздел EFI %1.<br/><br/>Был настроен раздел с точкой монтирования <strong>%2</strong>, но его флаг <strong>esp</strong> не установлен.<br/>Для установки флага вернитесь и отредактируйте раздел.<br/><br/>Вы можете продолжить и без установки флага, но Ваша система может не загрузиться. + + The filesystem must be mounted on <strong>%1</strong>. + - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS + Возможность для использования GPT в BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - - 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. - - - - + Boot partition not encrypted Загрузочный раздел не зашифрован - + 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. Включено шифрование корневого раздела, но использован отдельный загрузочный раздел без шифрования.<br/><br/>При такой конфигурации возникают проблемы с безопасностью, потому что важные системные файлы хранятся на разделе без шифрования.<br/>Если хотите, можете продолжить, но файловая система будет разблокирована позднее во время загрузки системы.<br/>Чтобы включить шифрование загрузочного раздела, вернитесь назад и снова создайте его, отметив <strong>Шифровать</strong> в окне создания раздела. - + has at least one disk device available. имеет как минимум одно доступное дисковое устройство. - + There are no partitions to install on. - + Нет разделов для установки. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package Не удалось выбрать пакет внешнего вида для KDE Plasma @@ -2618,17 +2971,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Форма - + 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. - + Пожалуйста, выберите внешний вид рабочего стола KDE Plasma. Вы также можете пропустить этот шаг и настроить внешний вид после настройки системы. Нажав на внешний вид, вы получите живой предварительный просмотр этого стиля. - + 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. Выберите внешний вид окружения KDE Plasma. Вы можете пропустить этот шаг, и настроить его после установки системы. Щелкните на выборе внешнего вида, чтобы увидеть, как он будет выглядеть. @@ -2636,7 +2989,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Внешний вид @@ -2644,32 +2997,32 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... Сохраняю файлы на потом... - + No files configured to save for later. Нет файлов, которые требуется сохранить на потом. - + Not all of the configured files could be preserved. - + Не все настроенные файлы могут быть сохранены. ProcessResult - + There was no output from the command. Вывода из команды не последовало. - + Output: @@ -2678,52 +3031,52 @@ Output: - + External command crashed. Сбой внешней команды. - + Command <i>%1</i> crashed. Сбой команды <i>%1</i>. - + External command failed to start. Не удалось запустить внешнюю команду. - + Command <i>%1</i> failed to start. Не удалось запустить команду <i>%1</i>. - + Internal error when starting command. Внутренняя ошибка при запуске команды. - + Bad parameters for process job call. Неверные параметры для вызова процесса. - + External command failed to finish. Не удалось завершить внешнюю команду. - + Command <i>%1</i> failed to finish in %2 seconds. Команда <i>%1</i> не завершилась за %2 с. - + External command finished with errors. - Внешняя команда завершилась с ошибками + Внешняя команда завершилась с ошибками. - + Command <i>%1</i> finished with exit code %2. Команда <i>%1</i> завершилась с кодом %2. @@ -2731,108 +3084,113 @@ Output: QObject - - Default Keyboard Model - Модель клавиатуры по умолчанию - - - - - Default - По умолчанию - - - - unknown - неизвестный - - - - extended - расширенный - - - - unformatted - неформатированный - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Неразмеченное место или неизвестная таблица разделов - - - - (no mount point) - (без точки монтирования) - - - - Requirements checking for module <i>%1</i> is complete. - Проверка требований для модуля <i>%1</i> завершена. - - - + %1 (%2) %1 (%2) - - No product - + + unknown + неизвестный - - No description provided. - + + extended + расширенный - - - - + + unformatted + неформатированный + + + + swap + swap + + + + + Default + По умолчанию + + + + + + File not found Файл не найден - + Path <pre>%1</pre> must be an absolute path. Путь <pre>%1</pre> должен быть абсолютным путём. - + + Directory not found + Папка не найдена + + + + Could not create new random file <pre>%1</pre>. Не удалось создать новый случайный файл <pre>%1</pre>. + + + No product + Нет продукта + + + + No description provided. + Описание не предоставлено. + + + + (no mount point) + (без точки монтирования) + + + + Unpartitioned space or unknown partition table + Неразмеченное место или неизвестная таблица разделов + + + + Recommended + + + <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> + <p>Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны.</p> + RemoveUserJob - + Remove live user from target system - + Удалить live пользователя из целевой системы RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - Удалить группу томов на диске %1 + Удалить группу томов на диске %1. - + Remove Volume Group named <strong>%1</strong>. - Удалить группу томов на диске %1 + Удалить группу томов на диске <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Установщик не смог удалить группу томов на диске '%1'. @@ -2840,143 +3198,159 @@ Output: ReplaceWidget - + Form Форма - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Выберите, где установить %1.<br/><font color="red">Внимание: </font>это удалит все файлы на выбранном разделе. - + The selected item does not appear to be a valid partition. Выбранный элемент, видимо, не является действующим разделом. - + %1 cannot be installed on empty space. Please select an existing partition. %1 не может быть установлен вне раздела. Пожалуйста выберите существующий раздел. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 не может быть установлен прямо в расширенный раздел. Выберите существующий основной или логический раздел. - + %1 cannot be installed on this partition. %1 не может быть установлен в этот раздел. - + Data partition (%1) Раздел данных (%1) - + Unknown system partition (%1) Неизвестный системный раздел (%1) - + %1 system partition (%2) %1 системный раздел (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Раздел %1 слишком мал для %2. Пожалуйста выберите раздел объемом не менее %3 Гиб. - + <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. <strong>%2</strong><br/><br/>Не найден системный раздел EFI. Вернитесь назад и выполните ручную разметку для установки %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 будет установлен в %2.<br/><font color="red">Внимание: </font>все данные на разделе %2 будут потеряны. - + The EFI system partition at %1 will be used for starting %2. Системный раздел EFI на %1 будет использован для запуска %2. - + EFI system partition: Системный раздел EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Компьютер не удовлетворяет минимальным требованиям для установки %1.<br/> + Невозможно продолжить установку.</p> + + + + <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> + <p>Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны.</p> + + ResizeFSJob - + Resize Filesystem Job Изменить размер файловой системы - + Invalid configuration Недействительная конфигурация - + The file-system resize job has an invalid configuration and will not run. - + Задание на изменения размера файловой системы имеет недопустимую конфигурацию и не будет запущено. - + KPMCore not Available - + KPMCore недоступен - + Calamares cannot start KPMCore for the file-system resize job. - + Calamares не может запустить KPMCore для задания изменения размера файловой системы. - - - - - + + + + + Resize Failed Не удалось изменить размер - + The filesystem %1 could not be found in this system, and cannot be resized. Файловая система %1 не обнаружена в этой системе, поэтому её размер невозможно изменить. - + The device %1 could not be found in this system, and cannot be resized. Устройство %1 не обнаружено в этой системе, поэтому его размер невозможно изменить. - - + + The filesystem %1 cannot be resized. Невозможно изменить размер файловой системы %1. - - + + The device %1 cannot be resized. Невозможно изменить размер устройства %1. - + The filesystem %1 must be resized, but cannot. Необходимо, но не удаётся изменить размер файловой системы %1 - + The device %1 must be resized, but cannot Необходимо, но не удаётся изменить размер устройства %1 @@ -2984,22 +3358,22 @@ Output: ResizePartitionJob - + Resize partition %1. Изменить размер раздела %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Изменить размер <strong>%2MB</strong> раздела <strong>%1</strong> на <strong>%3MB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Изменение размера раздела %1 с %2MB на %3MB. - + The installer failed to resize partition %1 on disk '%2'. Программе установки не удалось изменить размер раздела %1 на диске '%2'. @@ -3007,7 +3381,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group Изменить размер группы томов @@ -3015,18 +3389,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Изменить размер группы томов под именем %1 с %2 на %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Изменить размер группы томов под именем <strong>%1</strong> с <strong>%2</strong> на <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Программе установки не удалось изменить размер группы томов под именем '%1'. @@ -3034,53 +3408,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Для наилучших результатов, убедитесь, что этот компьютер: - + System requirements Системные требования - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Этот компьютер не соответствует минимальным требованиям для установки %1.<br/>Невозможно продолжить установку. <a href="#details">Подробнее...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Этот компьютер не соответствует минимальным требованиям для установки %1.<br/>Невозможно продолжить установку. <a href="#details">Подробнее...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Этот компьютер соответствует не всем рекомендуемым требованиям для установки %1.<br/>Можно продолжить установку, но некоторые возможности могут быть недоступны. - - - - This program will ask you some questions and set up %2 on your computer. - Эта программа задаст вам несколько вопросов и поможет установить %2 на ваш компьютер. - - ScanningDialog - + Scanning storage devices... Сканируются устройства хранения... - + Partitioning Разметка @@ -3088,29 +3434,29 @@ Output: SetHostNameJob - + Set hostname %1 Задать имя компьютера в сети %1 - + Set hostname <strong>%1</strong>. Задать имя компьютера в сети <strong>%1</strong>. - + Setting hostname %1. Задаю имя компьютера в сети для %1. + - Internal Error Внутренняя ошибка - - + + Cannot write hostname to target system Не возможно записать имя компьютера в целевую систему @@ -3118,29 +3464,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Установить модель клавиатуры на %1, раскладку на %2-%3 - + Failed to write keyboard configuration for the virtual console. Не удалось записать параметры клавиатуры для виртуальной консоли. - - - + + + Failed to write to %1 Не удалось записать на %1 - + Failed to write keyboard configuration for X11. Не удалось записать параметры клавиатуры для X11. - + Failed to write keyboard configuration to existing /etc/default directory. Не удалось записать параметры клавиатуры в существующий каталог /etc/default. @@ -3148,82 +3494,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. Установить флаги на разделе %1. - + Set flags on %1MiB %2 partition. Установить флаги %1MiB раздела %2. - + Set flags on new partition. - Установить флаги нового раздела. + Установите флаги на новый раздел. - + Clear flags on partition <strong>%1</strong>. Очистить флаги раздела <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Снять флаги %1MiB раздела <strong>%2</strong>. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Отметить %1MB раздел <strong>%2</strong> флагом как <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Снятие флагов %1MiB раздела <strong>%2</strong>. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Установка флагов <strong>%3</strong> %1MiB раздела <strong>%2</strong>. - - - + Clear flags on new partition. Сбросить флаги нового раздела. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Отметить раздел <strong>%1</strong> флагом как <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Отметить %1MB раздел <strong>%2</strong> флагом как <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Отметить новый раздел флагом как <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Очистка флагов раздела <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Снятие флагов %1MiB раздела <strong>%2</strong>. + + + Clearing flags on new partition. Сброс флагов нового раздела. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Установка флагов <strong>%2</strong> на раздел <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Установка флагов <strong>%3</strong> %1MiB раздела <strong>%2</strong>. + + + Setting flags <strong>%1</strong> on new partition. Установка флагов <strong>%1</strong> нового раздела. - + The installer failed to set flags on partition %1. Установщик не смог установить флаги на раздел %1. @@ -3231,42 +3577,42 @@ Output: SetPasswordJob - + Set password for user %1 Задать пароль для пользователя %1 - + Setting password for user %1. Устанавливаю пароль для учетной записи %1. - + Bad destination system path. Неверный путь целевой системы. - + rootMountPoint is %1 Точка монтирования корневого раздела %1 - + Cannot disable root account. Невозможно отключить учетную запись root - + passwd terminated with error code %1. Команда passwd завершилась с кодом ошибки %1. - + Cannot set password for user %1. Не удалось задать пароль для пользователя %1. - + usermod terminated with error code %1. Команда usermod завершилась с кодом ошибки %1. @@ -3274,127 +3620,200 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Установить часовой пояс на %1/%2 - + Cannot access selected timezone path. Нет доступа к указанному часовому поясу. - + Bad path: %1 Неправильный путь: %1 - + Cannot set timezone. Невозможно установить часовой пояс. - + Link creation failed, target: %1; link name: %2 Не удалось создать ссылку, цель: %1; имя ссылки: %2 - + Cannot set timezone, Часовой пояс не установлен, - + Cannot open /etc/timezone for writing Невозможно открыть /etc/timezone для записи + + SetupGroupsJob + + + Preparing groups. + Подготовка групп + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Не удалось применить chmod к файлу sudoers. + + + + Cannot create sudoers file for writing. + Не удалось записать файл sudoers. + + ShellProcessJob - + Shell Processes Job - + Работа с контекстными процессами SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - + %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Это обзор изменений, которые будут применены при запуске процедуры установки. + + &OK + &ОК - - This is an overview of what will happen once you start the install procedure. - Это обзор изменений, которые будут применены при запуске процедуры установки. + + &Yes + &Да - - - SummaryViewStep - - Summary - Итог + + &No + &Нет + + + + &Cancel + &Отмена + + + + &Close + &Закрыть TrackingInstallJob - + Installation feedback Отчёт об установке - + Sending installation feedback. Отправка отчёта об установке. - + Internal error in install-tracking. - + Внутренняя ошибка в install-tracking. - + HTTP request timed out. Тайм-аут запроса HTTP. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Отзывы пользователей KDE + + + + Configuring KDE user feedback. + Настройка обратной связи KDE + + + + + Error in KDE user feedback configuration. + Ошибка в настройке обратной связи KDE + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. Не удалось настроить отзывы о компьютере, ошибка сценария %1. - + Could not configure machine feedback correctly, Calamares error %1. Не удалось настроить отзывы о компьютере, ошибка Calamares %1. @@ -3402,106 +3821,97 @@ Output: TrackingPage - + Form Форма - + Placeholder Заменитель - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Если вы это выберете, то не будет отправлено <span style=" font-weight:600;">никаких</span> сведений об установке.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Щелкните здесь чтобы узнать больше об отзывах пользователей</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Отслеживание установок позволяет %1 узнать, сколько у них пользователей, на каком оборудовании устанавливается %1, и (с двумя последними опциями) постоянно получать сведения о предпочитаемых приложениях. Чтобы увидеть, что будет отправлено, щелкните по значку справки рядом с каждой областью. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Отметив этот пункт, вы поделитесь информацией о установке и своем оборудовании. Эта информация <b>будет отправлена только один раз</b> после завершения установки. + + 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. + - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Отметив этот пункт, вы будете <b>периодически</b> отправлять %1 информацию о своей установке, оборудовании и приложениях. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Отметив этот пункт, вы будете <b>регулярно</b> отправлять %1 информацию о своей установке, оборудовании, приложениях и паттернах их использования. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + TrackingViewStep - + Feedback Отзывы + + UmountJob + + + Unmount file systems. + Размонтирование файловой системы. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Если этот компьютер будет использоваться несколькими людьми, вы сможете создать учетные записи для них после установки.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Если этот компьютер используется несколькими людьми, Вы сможете создать соответствующие учетные записи сразу после установки.</small> + + + UsersQmlViewStep - - Your username is too long. - Ваше имя пользователя слишком длинное. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Допускаются только строчные буквы, числа, символы подчёркивания и дефисы. - - - - Only letters, numbers, underscore and hyphen are allowed. - Допускаются только буквы, цифры, символы подчёркивания и дефисы. - - - - Your hostname is too short. - Имя вашего компьютера слишком коротко. - - - - Your hostname is too long. - Имя вашего компьютера слишком длинное. - - - - Your passwords do not match! - Пароли не совпадают! + + Users + Пользователи UsersViewStep - + Users Пользователи @@ -3509,65 +3919,67 @@ Output: VariantModel - + Key - + Column header for key/value + Ключ - + Value + Column header for key/value Значение VolumeGroupBaseDialog - + Create Volume Group Создать группу томов - + List of Physical Volumes Список физических томов - + Volume Group Name: Имя группы томов: - + Volume Group Type: Тип группы томов: - + Physical Extent Size: - + Физический размер: - + MiB - МиБ + МиБ - + Total Size: Общий объём: - + Used Size: Использованный объём: - + Total Sectors: Всего секторов: - + Quantity of LVs: @@ -3575,106 +3987,106 @@ Output: WelcomePage - + Form Форма - - + + Select application and system language - + Выберите язык приложения и системы - Open donations website - - - - - &Donate - - - - - Open help and support website - - - - - Open issues and bug-tracking website - - - - - Open release notes website - - - - - &Release notes - &Примечания к выпуску - - - - &Known issues - &Известные проблемы - - - - &Support - П&оддержка - - - &About &О программе - - <h1>Welcome to the %1 installer.</h1> - <h1>Добро пожаловать в программу установки %1 .</h1> + + Open donations website + - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Добро пожаловать в установщик Calamares для %1 .</h1> + + &Donate + Пожертвовать - + + Open help and support website + Открыть сайт справки и поддержки + + + + &Support + П&оддержка + + + + Open issues and bug-tracking website + Открыть сайт со списком известных проблем и отслеживанием ошибок + + + + &Known issues + &Известные проблемы + + + + Open release notes website + Открыть сайт с заметками о выпуске + + + + &Release notes + &Примечания к выпуску + + + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Добро пожаловать в программу установки Calamares для %1 .</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Добро пожаловать в программу установки %1 .</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Добро пожаловать в установщик Calamares для %1 .</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Добро пожаловать в программу установки %1 .</h1> + + + + %1 support + %1 поддержка + + + About %1 setup О установке %1 - + About %1 installer О программе установки %1 - + <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. - - - - - %1 support - %1 поддержка + <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/> Благодарим<a href="https://calamares.io/team/">команду Calamares </a> и <a href="https://www.transifex.com/calamares/calamares/">команду10команду переводчиков Calamares</a>.<br/><br/>Разработка <a href="https://calamares.io/">Calamares</a> спонсирована <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Добро пожаловать @@ -3682,120 +4094,445 @@ Output: WelcomeViewStep - + Welcome Добро пожаловать + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Ошибка конфигурации + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + Назад + + + + calamares-sidebar + + + Show debug information + Показать отладочную информацию + + + + finishedq + + + Installation Completed + Установка завершена + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + Close Installer + Закрыть установщик + + + + Restart System + Перезапустить систему + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + Установка завершена + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + Назад + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Тип клавиатуры: - - Refresh - - - - - + Layouts - + Раскладки - - - Keyboard Layout - + + Type here to test your keyboard + Эта область - для тестирования клавиатуры - - Models - - - - + Variants - + Варианты + + + localeq - - Test your keyboard - + + Change + Изменить notesqml - + <h3>%1</h3> <p>These are example release notes.</p> + <h3>%1</h3> + <p>Это пример заметок о выпуске..</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + Назад + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Как Вас зовут? + + + + Your Full Name + Ваше полное имя + + + + What name do you want to use to log in? + Какое имя Вы хотите использовать для входа? + + + + Login Name + Имя пользователя + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Если этот компьютер используется несколькими людьми, Вы сможете создать соответствующие учетные записи сразу после установки. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Допускаются только строчные буквы, числа, символы подчёркивания и дефисы. + + + + root is not allowed as username. + root не допускается в качестве имени пользователя. + + + + What is the name of this computer? + Какое имя у компьютера? + + + + Computer Name + Имя компьютера + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + localhost не допускается в качестве имени пользователя. + + + + Choose a password to keep your account safe. + Выберите пароль для защиты вашей учетной записи. + + + + Password + Пароль + + + + Repeat Password + Повторите пароль + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Когда этот флажок установлен, выполняется проверка надежности пароля, и вы не сможете использовать слабый пароль. + + + + Log in automatically without asking for the password + Входить автоматически, не спрашивая пароль + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Использовать пароль пользователя как пароль суперпользователя + + + + Use the same password for the administrator account. + Использовать тот же пароль для аккаунта администратора. + + + + Choose a root password to keep your account safe. + + + + + Root Password + Пароль суперпользователя + + + + Repeat Root Password + Повторите пароль от root + + + + Enter the same password twice, so that it can be checked for typing errors. + Введите пароль повторно, чтобы не допустить ошибок при вводе + welcomeq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + <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> + <h3>Добро пожаловать в программу установки %1 <quote>%2</quote></h3> + <p>Эта программа задаст вам несколько вопросов и поможет установить %1 на ваш компьютер.</p> - + About - + О Программе - + Support - + Поддержка - + Known issues - + Известные проблемы - + Release notes - + Примечания к выпуску - + Donate - + Пожертвовать diff --git a/lang/calamares_si.ts b/lang/calamares_si.ts new file mode 100644 index 000000000..6290abe1a --- /dev/null +++ b/lang/calamares_si.ts @@ -0,0 +1,4562 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + ස්වයංක්‍රීය සවිකිරීම් සැකසීම් කළමනාකරණය කරන්න + + + + BootInfoWidget + + + 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. + මෙම පද්ධතියේ <strong>ඇරඹුම් පරිසරය</srong> පැරණි x86 පද්ධති සහය දක්වන්නේ <strong>BIOS</strong> සඳහා පමණි. <br>නවීන පද්ධති සාමාන්‍යයෙන් <strong>EFI</strong> භාවිතා කරයි, නමුත් ගැළපුම් මාදිලියෙන් ආරම්භ කළහොත් මෙය BIOS ලෙසද පෙන්විය හැක. + + + + 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. + මෙම පද්ධතිය <strong>EFI</strong> ඇරඹුම් පරිසරයකින් ආරම්භ කරන ලදී. <stron>EFI</strong> පරිසරයකින් ආරම්භය සැකසුම් කිරීම සඳහා, මෙම ස්ථාපකය <strong>EFI</strong> පද්ධති කොටසක <strong>GRUB</strong> හෝ <strong>systemd-boot</strong> වැනි ඇරඹුම් කාරක යෙදුමක් යෙදවිය යුතුය. ඔබ අතින් කොටස් කිරීම තෝරා නොගතහොත් (manual partitioning) මෙය ස්වයංක්‍රීය වේ, මෙම අවස්ථාවේදී ඔබ එය තෝරාගත යුතුය හෝ එය ඔබම නිර්මාණය කළ යුතුය. + + + + 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. + මෙම පද්ධතිය <strong>BIOS</strong> ඇරඹුම් පරිසරයකින් ආරම්භ කරන ලදී. <br><br><strong>BIOS</strong> පරිසරයකින් ආරම්භය සැකසුම් කිරීම සඳහා, මෙම ස්ථාපකය <strong>GRUB<strong> වැනි ඇරඹුම් කාරකයක් ස්ථාපනය කළ යුතුය.<br> එක්කෝ කොටසක ආරම්භයේදී හෝ කොටස් වගුවේ ආරම්භයට ආසන්නයේ (වඩාත් සුදුසු) <strong>ප්‍රධාන ඇරඹුම් වාර්තාව</strong> මත මෙය සැකසිය යුතුය. මෙය ස්වයංක්‍රීය ක්‍රියාදාමයක් වේ, ඔබ අතින් කොටස් කිරීම තෝරා ගතහොත්, ඔබ විසින්ම එය සැකසිය යුතුය. + + + + BootLoaderModel + + + Master Boot Record of %1 + %1 හි ප්‍රධාන ඇරඹුම් වාර්තාව + + + + Boot Partition + ඇරඹුම් කොටස + + + + System Partition + පද්ධති කොටස + + + + Do not install a boot loader + ඇරඹුම් කාරකයක් ස්ථාපනය නොකරන්න + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + හිස් පිටුව + + + + Calamares::DebugWindow + + + Form + සිට + + + + GlobalStorage + ගෝලීය ගබඩාව + + + + JobQueue + ක්‍රියදාම පෝලිම + + + + Modules + මොඩියුල + + + + Type: + වර්ගය: + + + + + none + කිසිවක් නැත + + + + Interface: + අතුරුමුහුණත: + + + + Crashes Calamares, so that Dr. Konqui can look at it. + වෛද්‍ය කොන්කිට එය දෙස බැලීමට හැකි වන පරිදි, Calamares කඩා වැටෙන ලදී. + + + + Reloads the stylesheet from the branding directory. + සන්නාම නාමාවලියෙන් මෝස්තර පත්‍රය නැවත පූරණය කරයි. + + + + Uploads the session log to the configured pastebin. + සැසි ලඝු සැකසුම් පේස්ට්බින් වෙත උඩුගත කරයි. + + + + Send Session Log + සැසි ලඝු යවන්න + + + + Reload Stylesheet + මෝස්තර පත්‍රිකාව නැවත පූරණය කරන්න + + + + Displays the tree of widget names in the log (for stylesheet debugging). + ලොගයේ විජට් නම් ගස පෙන්වයි (විලාසිතා පත්‍ර නිදොස්කරණය සඳහා). + + + + Widget Tree + විජට් ගස + + + + Debug information + දෝශ නිරාකරණ තොරතුරු + + + + Calamares::ExecutionViewStep + + + Set up + පිහිටුවීම + + + + Install + ස්ථාපනය + + + + Calamares::FailJob + + + Job failed (%1) + කාර්යය අසාර්ථක විය (%1) + + + + Programmed job failure was explicitly requested. + වැඩසටහන්ගත ක්‍රියා අසාර්ථකත්වය පැහැදිලිවම ඉල්ලා ඇත. + + + + Calamares::JobThread + + + Done + අවසන් + + + + Calamares::NamedJob + + + Example job (%1) + උදාහරණ කාර්යය (%1) + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + ඉලක්කගත පද්ධතිය තුළ '%1' විධානය ක්‍රියාත්මක කරන්න. + + + + Run command '%1'. + '%1' විධානය ධාවනය කරන්න. + + + + Running command %1 %2 + ක්‍රියාත්මක වන විධානය %1 %2 + + + + Calamares::PythonJob + + + Running %1 operation. + %1 මෙහෙයුම ක්‍රියාත්මක වේ. + + + + Bad working directory path + නොසදුසු වැඩ කරන ෆෝල්ඩර් මාර්ගයකි. + + + + Working directory %1 for python job %2 is not readable. + පයිතොන් ක්‍රියාකාරීත්ව %2 සඳහා %1 ෆෝල්ඩර් මාර්ගය කියවිය නොහැක. + + + + Bad main script file + නොසදුසු ප්‍රධාන ස්ක්‍රිප්ට් ගොනුව + + + + Main script file %1 for python job %2 is not readable. + පයිතොන් ක්‍රියාකාරීත්ව %2 සඳහා %1 ප්‍රධාන ස්ක්‍රිප්ට් ගොනුව කියවිය නොහැක. + + + + Boost.Python error in job "%1". + "%1" කාර්යයේ Boost.පයිතොන් දෝෂයකි. + + + + Calamares::QmlViewStep + + + Loading ... + පූරණය වෙමින්... + + + + QML Step <i>%1</i>. + QML පියවර <strong>%1</strong>. + + + + Loading failed. + පූරණය අසාර්ථකයි. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <strong>%1</strong> මොඩියුලය සඳහා අවශ්‍යතා පරීක්ෂා කිරීම සම්පූර්ණයි. + + + + Waiting for %n module(s). + + %n මොඩියුල(ය) සඳහා රැඳී සිටිමි + %n මොඩියුල(ය) සඳහා රැඳී සිටිමි + + + + + (%n second(s)) + + (තත්පර %n) + (තත්පර %n) + + + + + System-requirements checking is complete. + පද්ධති අවශ්‍යතා පරීක්ෂා කිරීම සම්පූර්ණයි. + + + + Calamares::ViewManager + + + Setup Failed + පිහිටුවීම අසාර්ථක විය + + + + Installation Failed + ස්ථාපනය අසාර්ථක විය + + + + Error + දෝෂයක් + + + + &Yes + ඔව් (Y) + + + + &No + නැහැ (N) + + + + &Close + වසන්න (C) + + + + Install Log Paste URL + ස්ථාපන ලොගයේ URLය අලවන්න + + + + The upload was unsuccessful. No web-paste was done. + උඩුගත කිරීම අසාර්ථක විය. කිසිම වෙබ් පේස්ට් කිරීමක් නොකලේය. + + + + Install log posted to + +%1 + +Link copied to clipboard + ස්ථාපන ලොගය පළ කර ඇත + +%1 + +සබැඳිය පසුරු පුවරුවට පිටපත් කරන ලදී + + + + Calamares Initialization Failed + Calamares ආරම්භ කිරීම අසාර්ථක විය + + + + %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. + %1 ස්ථාපනය කල නොහැක. Calamares හට සැකසුම් කළ මොඩියුල සියල්ල පූරණය කිරීමට නොහැකි විය. මෙය බෙදා හැරීම මගින් Calamares භාවිතා කරන ආකාරය පිළිබඳ ගැටළුවකි. + + + + <br/>The following modules could not be loaded: + <br/>මෙම මොඩියුල පූරණය කළ නොහැක: + + + + Continue with setup? + පිහිටුවීම සමඟ ඉදිරියට යන්නද? + + + + Continue with installation? + ස්ථාපනය කරගෙන යන්නද? + + + + 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> + %1 පිහිටුවීම් වැඩසටහන %2 පිහිටුවීම සඳහා ඔබගේ තැටියේ වෙනස්කම් සිදු කිරීමට සූදානම් වේ. <br/><strong>ඔබට මෙම වෙනස්කම් පසුගමනය කිරීමට නොහැකි වනු ඇත.</strong> + + + + 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> + %2 ස්ථාපනය කිරීම සඳහා %1 ස්ථාපකය ඔබගේ තැටියේ වෙනස්කම් සිදු කිරීමට සූදානම් වේ. <br/><strong>ඔබට මෙම වෙනස්කම් පසුගමනය කිරීමට නොහැකි වනු ඇත.</strong> + + + + &Set up now + දැන් පිහිටවන්න + + + + &Install now + දැන් ස්ථාපනය කරන්න + + + + Go &back + ආපසු යන්න + + + + &Set up + පිහිටුවන්න + + + + &Install + ස්ථාපනය කරන්න + + + + Setup is complete. Close the setup program. + පිහිටුවීම සම්පූර්ණයි. සැකසුම් වැඩසටහන වසන්න. + + + + The installation is complete. Close the installer. + ස්ථාපනය සම්පූර්ණයි. ස්ථාපකය වසන්න. + + + + Cancel setup without changing the system. + පද්ධතිය වෙනස් නොකර පිහිටුවීම අවලංගු කරන්න. + + + + Cancel installation without changing the system. + පද්ධතිය වෙනස් නොකර ස්ථාපනය අවලංගු කරන්න. + + + + &Next + ඊළඟ (&N) + + + + &Back + ආපසු (&B) + + + + &Done + අවසන්(&D) + + + + &Cancel + අවලංගු කරන්න (&C) + + + + Cancel setup? + පිහිටුවීම අවලංගු කරන්නද? + + + + Cancel installation? + ස්ථාපනය අවලංගු කරනවාද? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + ඔබට ඇත්තටම වත්මන් පිහිටුවීම් ක්‍රියාවලිය අවලංගු කිරීමට අවශ්‍යද? +සැකසුම් වැඩසටහන ඉවත් වන අතර සියලු වෙනස්කම් අහිමි වනු ඇත. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + ඔබට ඇත්තටම වත්මන් ස්ථාපන ක්‍රියාවලිය අවලංගු කිරීමට අවශ්‍යද? +ස්ථාපකය ඉවත් වන අතර සියලු වෙනස්කම් අහිමි වනු ඇත. + + + + CalamaresPython::Helper + + + Unknown exception type + නොදන්නා ව්‍යතිරේක වර්ගය + + + + unparseable Python error + විග්‍රහ කළ නොහැකි පයිතන් දෝෂයකි + + + + unparseable Python traceback + විග්‍රහ කළ නොහැකි පයිතන් ලුහුබැදීමකි + + + + Unfetchable Python error. + ලබාගත නොහැකි පයිතන් දෝෂයකි. + + + + CalamaresWindow + + + %1 Setup Program + %1 සැකසුම් වැඩසටහන + + + + %1 Installer + %1 ස්ථාපකය + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + ගොනු පද්ධති ලේබලය %1 මත සකසන්න. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + ගොනු පද්ධති ලේබලය <strong>%1</strong> කොටස <strong>%2</strong> ලෙස සකසන්න. + + + + The installer failed to update partition table on disk '%1'. + ස්ථාපකය '%1' තැටියේ කොටස් වගුව යාවත්කාලීන කිරීමට අසමත් විය. + + + + CheckerContainer + + + Gathering system information... + පද්ධති තොරතුරු රැස් කරමින් පවතී... + + + + ChoicePage + + + Form + පෝරමය + + + + Select storage de&vice: + ගබඩා උපාංගය තෝරන්න: + + + + + + + Current: + වත්මන්: + + + + After: + පසු: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>අතින් කොටස් කිරීම</strong> <br/>ඔබට අවශ්‍ය අකාරයට කොටස් සෑදීමට හෝ ප්‍රමාණය වෙනස් කිරීමට හැකිය. + + + + Reuse %1 as home partition for %2. + %2 සඳහා නිවෙස් කොටස ලෙස %1 නැවත භාවිත කරන්න. + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>ප්‍රමාණය අඩුකිරීමට කොටසක් තෝරන්න, පසුව ප්‍රමාණය වෙනස් කිරීමට පහළ තීරුව අදින්න</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 %2MiB දක්වා ප්‍රමාණය අඩුකරනු ඇති අතර %4 සඳහා නව %3MiB කොටසක් සාදනු ඇත. + + + + Boot loader location: + ඇරඹුම් කාරක ස්ථානය: + + + + <strong>Select a partition to install on</strong> + <strong>ස්ථාපනය කිරීමට කොටසක් තෝරන්න</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + EFI පද්ධති කොටසක් මෙම පද්ධතියේ කොතැනකවත් සොයාගත නොහැක. කරුණාකර ආපසු ගොස් %1 පිහිටුවීමට අතින් කොටස් කිරීම භාවිතා කරන්න. + + + + The EFI system partition at %1 will be used for starting %2. + %2 ආරම්භ කිරීම සඳහා %1 හි EFI පද්ධති කොටස භාවිතා කරනු ඇත. + + + + EFI system partition: + EFI පද්ධති කොටස: + + + + 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. + මෙම ගබඩා උපාංගයේ මෙහෙයුම් පද්ධතියක් ඇති බවක් නොපෙනේ. ඔබ කුමක් කිරීමට කැමතිද? <br/>ගබඩා උපාංගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමාලෝචනය කර තහවුරු කිරීමට හැකි වනු ඇත. + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <strong>තැටිය මැකීම</strong><br/>මෙම තෝරාගත් ගබඩා උපාංගයේ දැනට පවතින සියලුම දත්ත <strong>මැකීයනු</strong> ඇත. + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <strong>පසෙකින් ස්ථාපනය කිරීම</strong><br/>ස්ථාපකය %1 සඳහා ඉඩ ලබා දීම සඳහා කොටසක් හැකිලෙනු ඇත. + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong>කොටසක් ප්‍රතිස්ථාපනය කිරීම</strong><br/> %1 සමඟ කොටසක් ප්‍රතිස්ථාපනය කරන්න. + + + + 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. + මෙම ගබඩා උපාංගයේ %1 ඇත. ඔබ කුමක් කිරීමට කැමතිද?<br/>ගබඩා උපාංගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමාලෝචනය කර තහවුරු කිරීමට හැකි වනු ඇත. + + + + 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. + මෙම ගබඩා උපාංගයේ දැනටමත් මෙහෙයුම් පද්ධතියක් ඇත. ඔබ කුමක් කිරීමට කැමතිද?<br/>ගබඩා උපාංගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමාලෝචනය කර තහවුරු කිරීමට හැකි වනු ඇත. + + + + 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. + මෙම ගබඩා උපාංගයේ බහු මෙහෙයුම් පද්ධති ඇත. ඔබ කුමක් කිරීමට කැමතිද?<br/>ගබඩා උපාංගයට කිසියම් වෙනසක් සිදු කිරීමට පෙර ඔබට ඔබේ තේරීම් සමාලෝචනය කර තහවුරු කිරීමට හැකි වනු ඇත. + + + + 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/> + මෙම ගබඩා උපාංගයේ දැනටමත් මෙහෙයුම් පද්ධතියක් ඇත, නමුත් %1 කොටස් වගුව අවශ්‍ය %2 ට වඩා වෙනස් වේ. + + + + This storage device has one of its partitions <strong>mounted</strong>. + මෙම ගබඩා උපාංගය, එහි එක් කොටසක් <strong>සවි කර ඇත</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + මෙම ගබඩා උපාංගය <strong>අක්‍රිය RAID</strong> උපාංගයක කොටසකි. + + + + No Swap + Swap නොමැතිව + + + + Reuse Swap + Swap නැවත භාවිතා කරන්න + + + + Swap (no Hibernate) + Swap (හයිබර්නේට් නොමැතිව) + + + + Swap (with Hibernate) + Swap (හයිබර්නේට් සහිතව) + + + + Swap to file + Swap ගොනුව + + + + ClearMountsJob + + + Successfully unmounted %1. + %1 සාර්ථකව ඉවත් කරන ලදී. + + + + Successfully disabled swap %1. + swap % 1 සාර්ථකව අක්‍රීය කරන ලදී. + + + + Successfully cleared swap %1. + swap %1 සාර්ථකව හිස් කරන ලදී. + + + + Successfully closed mapper device %1. + සිතියම් උපාංගය %1 සාර්ථකව වසා ඇත. + + + + Successfully disabled volume group %1. + %1 වෙළුම් සමූහය සාර්ථකව ක්‍රියා කරයි. + + + + Clear mounts for partitioning operations on %1 + කොටස් කිරීම සදහා %1 තැටි හිස් කරනු ලැබේ + + + + Clearing mounts for partitioning operations on %1. + කොටස් කිරීම සදහා %1 සවි කිරීම් හිස් කරනු ලැබේ + + + + Cleared all mounts for %1 + %1 සඳහා සියලුම සවි කිරීම් හිස් කරන ලදී + + + + ClearTempMountsJob + + + Clear all temporary mounts. + සියලුම තාවකාලික සවි කිරීම් ඉවත් කරන්න. + + + + Clearing all temporary mounts. + සියලුම තාවකාලික තැටි ඉවත් කරමින් පවතී. + + + + Cleared all temporary mounts. + සියලුම තාවකාලික සවි කිරීම් හිස් කරන ලදී. + + + + CommandList + + + + Could not run command. + විධානය ක්‍රියාත්මක කිරීමට නොහැකි විය. + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + විධානය ධාරක පරිසරය තුළ ක්‍රියාත්මක වන අතර මූල මාර්ගය දැන ගැනීමට අවශ්‍ය වේ, නමුත් මූල සවි කිරීමේ ලක්ෂ්‍යයක් සැකසුම් කර නොමැත. + + + + The command needs to know the user's name, but no username is defined. + විධානයට පරිශීලකයාගේ නම දැන ගැනීමට අවශ්‍ය වේ, නමුත් පරිශීලක නාමයක් අර්ථ දක්වා නොමැත. + + + + Config + + + Set keyboard model to %1.<br/> + යතුරුපුවරු ආකෘතිය %1 ලෙස සකසන්න. + + + + Set keyboard layout to %1/%2. + යතුරුපුවරු පිරිසැලසුම %1/%2 ලෙස සකසන්න. + + + + Set timezone to %1/%2. + වේලා කලාපය %1/%2 ලෙස සකසන්න. + + + + The system language will be set to %1. + පද්ධති භාෂාව %1 ලෙස සැකසෙනු ඇත. + + + + The numbers and dates locale will be set to %1. + අංක සහ දින පෙදෙසිය %1 ලෙස සකසනු ඇත. + + + + Network Installation. (Disabled: Incorrect configuration) + ජාල ස්ථාපනය. (අක්‍රියයි: වැරදි සැකසීමකි) + + + + Network Installation. (Disabled: Received invalid groups data) + ජාල ස්ථාපනය. (අක්‍රියයි: වලංගු නොවන කණ්ඩායම් දත්ත ලැබී ඇත) + + + + Network Installation. (Disabled: Internal error) + ජාල ස්ථාපනය. (අක්‍රියයි: අභ්‍යන්තර දෝෂයකි) + + + + Network Installation. (Disabled: No package list) + ජාල ස්ථාපනය. (අක්‍රියයි: පැකේජ ලැයිස්තුවක් නැත) + + + + Package selection + පැකේජ තේරීම + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + ජාල ස්ථාපනය. (අක්‍රියයි: පැකේජ ලැයිස්තු ලබා ගැනීමට නොහැක, ඔබගේ ජාල සම්බන්ධතාවය පරීක්ෂා කරන්න) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + මෙම පරිගණකය %1 පිහිටුවීම සඳහා අවම අවශ්‍යතා සපුරාලන්නේ නැත. <br/>පිහිටුවීම දිගටම කරගෙන යා නොහැක. <strong>විස්තර...</strong> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + මෙම පරිගණකය %1 ස්ථාපනය සඳහා අවම අවශ්‍යතා සපුරාලන්නේ නැත. <br/>ස්ථාපනය දිගටම කරගෙන යා නොහැක. <strong>විස්තර...</strong> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + මෙම පරිගණකය %1 පිහිටුවීම සඳහා නිර්දේශිත සමහර අවශ්‍යතා සපුරාලන්නේ නැත. <br/>පිහිටුවීම දිගටම කරගෙන යා හැක, නමුත් සමහර විශේෂාංග ක්‍රියා විරහිත විය හැක. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + මෙම පරිගණකය %1 ස්ථාපනය කිරීම සඳහා නිර්දේශිත සමහර අවශ්‍යතා සපුරාලන්නේ නැත. <br/>ස්ථාපනය දිගටම කරගෙන යා හැක, නමුත් සමහර විශේෂාංග ක්‍රියා විරහිත විය හැක. + + + + This program will ask you some questions and set up %2 on your computer. + මෙම වැඩසටහන ඔබෙන් ප්‍රශ්න කිහිපයක් අසන අතර ඔබේ පරිගණකයේ %2 සකසනු ඇත. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <strong>%1 සඳහා Calamares සැකසුම් වැඩසටහන වෙත සාදරයෙන් පිළිගනිමු</strong> + + + + <h1>Welcome to %1 setup</h1> + <strong>%1 පිහිටුවීමට සාදරයෙන් පිළිගනිමු</strong> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <strong>%1 සඳහා Calamares ස්ථාපකය වෙත සාදරයෙන් පිළිගනිමු</strong> + + + + <h1>Welcome to the %1 installer</h1> + <strong>%1 ස්ථාපකය වෙත සාදරයෙන් පිළිගනිමු</strong> + + + + Your username is too long. + පරිශීලක නාමය දිග වැඩිය. + + + + '%1' is not allowed as username. + '%1' පරිශීලක නාමයක් ලෙස ඉඩ නොදේ. + + + + Your username must start with a lowercase letter or underscore. + ඔබගේ පරිශීලක නාමය කුඩා අකුරකින් හෝ යටි ඉරකින් ආරම්භ විය යුතුය. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + කුඩා අකුරු, ඉලක්කම්, යටි ඉරි සහ තනි ඉර පමණක් ඉඩ දෙනු ලැබේ. + + + + Your hostname is too short. + ඔබගේ සත්කාරක නාමය කෙටි වැඩිය. + + + + Your hostname is too long. + ඔබේ සත්කාරක නාමය දිග වැඩියි. + + + + '%1' is not allowed as hostname. + '%1' ධාරක නාමය ලෙස ඉඩ නොදේ. + + + + Only letters, numbers, underscore and hyphen are allowed. + අකුරු, ඉලක්කම්, යටි ඉරි සහ තනි ඉර පමණක් ඉඩ දෙනු ලැබේ. + + + + Your passwords do not match! + ඔබගේ මුරපද නොගැලපේ! + + + + OK! + හරි! + + + + Setup Failed + පිහිටුවීම අසාර්ථක විය + + + + Installation Failed + ස්ථාපනය අසාර්ථක විය + + + + The setup of %1 did not complete successfully. + %1 හි පිහිටුවීම සාර්ථකව සම්පූර්ණ නොවීය. + + + + The installation of %1 did not complete successfully. + %1 ස්ථාපනය සාර්ථකව නිම නොවීය. + + + + Setup Complete + පිහිටුවීම සම්පූර්ණයි + + + + Installation Complete + ස්ථාපනය සම්පූර්ණයි + + + + The setup of %1 is complete. + %1 හි පිහිටුවීම සම්පූර්ණයි. + + + + The installation of %1 is complete. + %1 ස්ථාපනය සම්පූර්ණයි. + + + + Package Selection + පැකේජ තේරීම + + + + Please pick a product from the list. The selected product will be installed. + කරුණාකර ලැයිස්තුවෙන් නිෂ්පාදනයක් තෝරන්න. තෝරාගත් නිෂ්පාදනය ස්ථාපනය කෙරේ. + + + + Install option: <strong>%1</strong> + ස්ථාපන විකල්පය: <strong>%1</strong> + + + + None + කිසිවක් නැත + + + + Summary + සාරාංශය + + + + This is an overview of what will happen once you start the setup procedure. + මෙය ඔබ සැකසුම් ක්‍රියා පටිපාටිය ආරම්භ කළ පසු කුමක් සිදුවේද යන්න පිළිබඳ දළ විශ්ලේෂණයකි. + + + + This is an overview of what will happen once you start the install procedure. + මෙය ඔබ ස්ථාපන ක්‍රියා පටිපාටිය ආරම්භ කළ පසු කුමක් සිදුවේද යන්න පිළිබඳ දළ විශ්ලේෂණයකි. + + + + ContextualProcessJob + + + Contextual Processes Job + සන්දර්භ ක්‍රියවලිය + + + + CreatePartitionDialog + + + Create a Partition + කොටසක් සාදන්න + + + + Si&ze: + ප්‍රමාණය: + + + + MiB + MiB + + + + Partition &Type: + කොටස් වර්ගය (&T): + + + + Primar&y + ප්‍රධාන (&y) + + + + E&xtended + දීර්ග කිරීම (&E) + + + + Fi&le System: + ගොනු පද්ධතිය: + + + + LVM LV name + LVM LV නාමය + + + + &Mount Point: + සවිකිරීමේ ස්ථානය (&M) + + + + Flags: + වර්ගීකරන නාමය: + + + + Label for the filesystem + ගොනු පද්ධතිය සඳහා ලේබලය + + + + FS Label: + FS ලේබලය: + + + + En&crypt + සංකේතනය කරන්න (&C) + + + + Logical + තාර්කික + + + + Primary + ප්‍රධාන + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + සවිකිරීම දැනටමත් භාවිතයේ ඇත. කරුණාකර වෙනත් එකක් තෝරන්න. + + + + Mountpoint must start with a <tt>/</tt>. + මවුන්ට්පොයින්ට් එක <tt>/ </tt>සමඟ ආරම්භ විය යුතුය. + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + %4 ඇතුළත් කිරීම් සමඟ %3 (%2) මත නව %1MiB කොටසක් සාදන්න. + + + + Create new %1MiB partition on %3 (%2). + %3 (%2) මත නව %1MiB කොටසක් සාදන්න. + + + + Create new %2MiB partition on %4 (%3) with file system %1. + %1 ගොනු පද්ධතිය සමඟ %4 (%3) මත නව %2MiB කොටසක් සාදන්න. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + <strong>%4</strong> ඇතුළත් කිරීම් සමඟ <strong>%3</strong> (%2) මත නව <strong>%1MiB</strong> කොටසක් සාදන්න. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + <strong>%3</strong> (%2) මත නව <strong>%1MiB</strong> කොටසක් සාදන්න. + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + <strong>%1</strong> ගොනු පද්ධතිය සමඟ <strong>%4</strong> (%3) මත නව <strong>%2MiB</strong> කොටසක් සාදන්න. + + + + + Creating new %1 partition on %2. + %2 මත නව %1 කොටස නිර්මාණය කරමින් පවතී. + + + + The installer failed to create partition on disk '%1'. + ස්ථාපකය '%1' තැටියේ කොටසක් සෑදීමට අසමත් විය. + + + + CreatePartitionTableDialog + + + Create Partition Table + කොටස් වගුව සාදන්න + + + + Creating a new partition table will delete all existing data on the disk. + නව කොටස් වගුවක් සෑදීමෙන් තැටියේ පවතින සියලුම දත්ත මැකීයනු ඇත. + + + + What kind of partition table do you want to create? + ඔබට කුමන ආකාරයේ කොටස් වගුවක් නිර්මාණය කිරීමට අවශ්‍යද? + + + + Master Boot Record (MBR) + ප්‍රධාන ඇරඹුම් වාර්තාව (MBR) + + + + GUID Partition Table (GPT) + GUID කොටස් වගුව (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + %2 මත නව %1 කොටස් වගුවක් සාදන්න. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + %2 (%3) මත නව %1 කොටස් වගුවක් සාදන්න. + + + + Creating new %1 partition table on %2. + %2 මත නව% 1 කොටස් වගුවක් නිර්මාණය කිරීම. + + + + The installer failed to create a partition table on %1. + ස්ථාපකය %1 මත කොටස් වගුවක් සෑදීමට අසමත් විය. + + + + CreateUserJob + + + Create user %1 + %1 පරිශීලක සාදන්න + + + + Create user <strong>%1</strong>. + <strong>%1</strong> පරිශීලක සාදන්න. + + + + Preserving home directory + හොම් ෆෝල්ඩරය සංරක්ෂණය කිරීම + + + + + Creating user %1 + %1 පරිශීලක සෑදෙමින් + + + + Configuring user %1 + %1 පරිශීලක වින්‍යාසගත වෙමින් + + + + Setting file permissions + ගොනු අවසර සැකසීම + + + + CreateVolumeGroupDialog + + + Create Volume Group + වෙළුම් කණ්ඩායමක් සාදන්න + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + %1 නමින් නව වෙළුම් කණ්ඩායමක් සාදන්න. + + + + Create new volume group named <strong>%1</strong>. + <strong>%1</strong> නමින් නව වෙළුම් කණ්ඩායමක් සාදන්න. + + + + Creating new volume group named %1. + %1 නමින් නව වෙළුම් කණ්ඩායමක් නිර්මාණය කිරීම. + + + + The installer failed to create a volume group named '%1'. + ස්ථාපකය '%1' නමින් වෙළුම් කණ්ඩායමක් සෑදීමට අසමත් විය. + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + %1 නම් වෙළුම් කණ්ඩායම අක්‍රිය කරන්න. + + + + Deactivate volume group named <strong>%1</strong>. + <strong>%1</strong> නම් වෙළුම් කණ්ඩායම අක්‍රිය කරන්න. + + + + The installer failed to deactivate a volume group named %1. + ස්ථාපකය %1 නම් වූ පරිමා සමූහයක් අක්‍රිය කිරීමට අසමත් විය. + + + + DeletePartitionJob + + + Delete partition %1. + %1 කොටස මකන්න. + + + + Delete partition <strong>%1</strong>. + <strong>%1</strong> කොටස මකන්න. + + + + Deleting partition %1. + %1 කොටස මකා දමමින්. + + + + The installer failed to delete partition %1. + ස්ථාපකය %1 කොටස මකා දැමීමට අසමත් විය. + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + මෙම උපාංගයට අදාලව <strong>%1</strong> කොටස් වගුවක් ඇත. + + + + 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. + මෙය <strong>ලූප්</strong> උපාංගයකි. <br/><br/>එය බ්ලොක් උපාංගයක් ලෙස ගොනුවක් වෙත ප්‍රවේශ විය හැකි කොටස් වගුවක් නොමැති ව්‍යාජ උපාංගයකි. මෙවැනි සැකසුමක සාමාන්‍යයෙන් අඩංගු වන්නේ එක් ගොනු පද්ධතියක් පමණි. + + + + 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. + මෙම ස්ථාපකයට <strong>තෝරාගත් ගබඩා උපාංගයේ කොටස් වගුවක් හඳුනාගත නොහැක</strong>. <br/><br/>උපාංගයට කොටස් වගුවක් නැත, නැතහොත් කොටස් වගුව දූෂිත වී හෝ නොදන්නා වර්ගයකි. <br/>මෙම ස්ථාපකයට ඔබ වෙනුවෙන් ස්වයංක්‍රීයව හෝ අතින් කොටස් කිරීමේ පිටුව හරහා නව කොටස් වගුවක් සෑදිය හැක. + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <br><br><strong>EFI</strong> ඇරඹුම් පරිසරයකින් ආරම්භ වන නවීන පද්ධති සඳහා නිර්දේශිත කොටස් වගු වර්ගය මෙයයි. + + + + <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. + <br><br>මෙම කොටස් වගු වර්ගය සුදුසු වන්නේ <strong>BIOS</strong> ඇරඹුම් පරිසරයකින් ආරම්භ වන පැරණි පද්ධති සඳහා පමණි. අනෙකුත් බොහෝ අවස්ථාවන්හිදී GPT නිර්දේශ කෙරේ. <br><br><strong>අවවාදයයි:</strong> MBR කොටස් වගුව යල් පැන ගිය MS-DOS යුගයේ සම්මතයකි. <br><em>ප්‍රධාන</em> කොටස් 4ක් පමණක් සෑදිය හැකි අතර, එම 4න් එකක් <strong>දීර්ඝ</strong> කළ කොටසක් විය හැක, එහි බොහෝ <strong>තාර්කික</strong> කොටස් අඩංගු විය හැක. + + + + 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. + තෝරාගත් ගබඩා උපාංගයේ <strong>කොටස් වගුවේ</strong> වර්ගය. <br>කොටස් වගු වර්ගය වෙනස් කිරීමට ඇති එකම ක්‍රමය නම් ගබඩා උපාංගයේ ඇති සියලුම දත්ත විනාශ කරන කොටස් වගුව මුල සිට මකා ප්‍රතිනිර්මාණය කිරීමයි. <br>මෙම ස්ථාපකය ඔබ වෙනත් ආකාරයකින් තෝරා ගන්නේ නම් මිස වත්මන් කොටස් වගුව තබා ගනී. <br>විශ්වාස නැත්නම්, නවීන පද්ධති GPT මත මනාප වේ. + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + Dracut සඳහා LUKS වින්‍යාසය %1 වෙත ලියන්න + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + Dracut සඳහා LUKS වින්‍යාසය ලිවීම මඟ හරින්න: "/" කොටස සංකේතනය කර නොමැත + + + + Failed to open %1 + %1 විවෘත කිරීමට අසමත් විය + + + + DummyCppJob + + + Dummy C++ Job + ව්‍යාජ C++ ක්‍රියවලියක් + + + + EditExistingPartitionDialog + + + Edit Existing Partition + පවතින කොටසක් සංස්කරණය කරන්න + + + + Con&tent: + අන්තර්ගතය(&t): + + + + &Keep + තබා ගන්න (&K) + + + + Format + මකා දමන්න + + + + Warning: Formatting the partition will erase all existing data. + අවවාදයයි: කොටස මැකීමෙන් පවතින සියලුම දත්ත ඉවත්වනු ඇත. + + + + &Mount Point: + සවිකිරීමේ ස්ථානය (&M) + + + + Si&ze: + ප්‍රමාණය: + + + + MiB + MiB + + + + Fi&le System: + ගොනු පද්ධතිය: + + + + Flags: + වර්ගීකරන නාමය: + + + + Label for the filesystem + ගොනු පද්ධතිය සඳහා ලේබලය + + + + FS Label: + FS ලේබලය: + + + + EncryptWidget + + + Form + පෝරමය + + + + En&crypt system + පද්ධතිය සංකේතනය (&C) කරන්න + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + ඔබේ පද්ධතිය සම්පූර්ණ පද්ධතියම සංකේතනය කිරීමට තරම් සංකේතනයට සහය දක්වන බවක් නොපෙනේ. ඔබට සංකේතනය සක්‍රීය කළ හැක, නමුත් ක්‍රියාකාරීත්වයට හානි විය හැක. + + + + Passphrase + මුරපදය + + + + Confirm passphrase + මුරපදය තහවුරු කරන්න + + + + + Please enter the same passphrase in both boxes. + කරුණාකර කොටු දෙකෙහිම එකම මුර-වැකිකඩ ඇතුලත් කරන්න. + + + + ErrorDialog + + + Details: + විස්තර: + + + + Would you like to paste the install log to the web? + ඔබ ස්ථාපන ලොගය අන්තර්ජාලයට ඇලවීමට කැමතිද? + + + + FillGlobalStorageJob + + + Set partition information + කොටස් තොරතුරු සකසන්න + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <strong>%3</strong> විශේෂාංග සහිත <strong>නව</strong> %2 පද්ධති කොටසේ %1 ස්ථාපනය කරන්න + + + + Install %1 on <strong>new</strong> %2 system partition. + <strong>නව</strong> %2 පද්ධති කොටසෙහි %1 ස්ථාපනය කරන්න. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>නව</strong> %2 කොටස සවිකිරීමේ ලක්ෂ්‍යය <strong>%1</strong> සහ විශේෂාංග <strong>%3</strong> සමඟ සකසන්න + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + <strong>නව</strong> %2 කොටස සවිකිරීමේ ලක්ෂ්‍යය <strong>%1</strong>%3 සමඟ සකසන්න. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + <strong>%4</strong> විශේෂාංග සහිත %3 පද්ධති කොටස <strong>%1</strong> මත %2 ස්ථාපනය කරන්න. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + %3 කොටස සකසන්න <strong>%1</strong> සවිකිරීමේ ලක්ෂ්‍යය <strong>%2</strong> සහ විශේෂාංග <strong>%4</strong> සමඟින්. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + %3 කොටස <strong>%1</strong> සවිකිරීමේ ලක්ෂ්‍යය <strong>%2</strong>%4 සමඟ සකසන්න. + + + + Install %2 on %3 system partition <strong>%1</strong>. + %3 පද්ධති කොටස <strong>%1</strong> මත %2 ස්ථාපනය කරන්න. + + + + Install boot loader on <strong>%1</strong>. + <strong>%1</strong> මත ඇරඹුම් කාරකය ස්ථාපනය කරන්න. + + + + Setting up mount points. + සවි කිරීම් ස්ථාන සැකසීම. + + + + FinishedPage + + + Form + පෝරමය + + + + &Restart now + නැවත ආරම්භ කරන්න (&R) + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + <strong>සියල්ල සාර්ථකව අවසන් විය</strong>.<br>%1 ඔබගේ පරිගණකයේ පිහිටුවා ඇත.<br>ඔබට දැන් ඔබගේ නව පද්ධතිය භාවිතා කිරීමට පටන් ගත හැක. + + + + <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> + <html><head/><body><p>මෙම කොටුව සලකුණු කළ විට, ඔබ <strong>Done</strong> මත ක්ලික් කළ විට හෝ සැකසුම් වැඩසටහන වසා දැමූ විට ඔබේ පද්ධතිය වහාම නැවත ආරම්භ වනු ඇත.</p></body></html> + + + + <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. + <strong>සියල්ල සාර්ථකව අවසන් විය</strong>.<br>%1 ඔබගේ පරිගණකයේ ස්ථාපනය කර ඇත.<br>ඔබට දැන් ඔබගේ නව පද්ධතියට නැවත ආරම්භ කළ හැක, නැතහොත් %2 සජීවී පරිසරය භාවිතා කිරීම දිගටම කරගෙනයා හැක. + + + + <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> + <html><head/><body><p>මෙම කොටුව සලකුණු කළ විට, ඔබ <strong>Done</strong> මත ක්ලික් කළ විට හෝ ස්ථාපක වැඩසටහන වසා දැමූ විට ඔබේ පද්ධතිය වහාම නැවත ආරම්භ වනු ඇත.</p></body></html> + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + <strong>පිහිටුවීම අසාර්ථක විය</strong><br>% 1 ඔබේ පරිගණකයේ පිහිටුවා නැත. <br>දෝෂ පණිවිඩය වූයේ: %2. + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + <strong>ස්ථාපනය අසාර්ථක විය</strong><br>%1 ඔබේ පරිගණකයේ ස්ථාපනය කර නැත. <br>දෝෂ පණිවිඩය වූයේ: %2. + + + + FinishedQmlViewStep + + + Finish + අවසන් + + + + FinishedViewStep + + + Finish + අවසන් + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + %4 මත කොටස %1 (ගොනු පද්ධතිය: %2, ප්‍රමාණය: %3 MiB) ආකෘතිකරණය කරන්න. + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + <strong>%3MiB</strong> කොටස <strong>%1</strong> ගොනු පද්ධතිය <strong>%2</strong> සමඟ ආකෘති කරන්න. + + + + Formatting partition %1 with file system %2. + %2 ගොනු පද්ධතිය සමඟ %1 කොටස හැඩතල ගැන්වීම. + + + + The installer failed to format partition %1 on disk '%2'. + ස්ථාපකය '%2' තැටියේ %1 කොටස හැඩතල ගැන්වීමට අසමත් විය. + + + + GeneralRequirements + + + has at least %1 GiB available drive space + අවම වශයෙන් %1 GiB ලබා ගත හැකි ධාවකයේ ඉඩක් ඇත + + + + There is not enough drive space. At least %1 GiB is required. + ප්‍රමාණවත් ධාවන ඉඩක් නොමැත. අවම වශයෙන් %1 GiB අවශ්‍ය වේ. + + + + has at least %1 GiB working memory + අවම වශයෙන් %1 GiB ක්‍රියාකාරී මතකයක් ඇත + + + + The system does not have enough working memory. At least %1 GiB is required. + පද්ධතියට ප්රමාණවත් ක්රියාකාරී මතකයක් නොමැත. අවම වශයෙන් %1 GiB අවශ්‍ය වේ. + + + + is plugged in to a power source + විදුලි ප්‍රභවයකට සම්බන්ධ කර ඇත + + + + The system is not plugged in to a power source. + පද්ධතිය විදුලි ප්‍රභවයකට සම්බන්ධ කර නොමැත. + + + + is connected to the Internet + අන්තර්ජාලයට සම්බන්ධවී ඇත + + + + The system is not connected to the Internet. + පද්ධතිය අන්තර්ජාලයට සම්බන්ධවී නොමැත. + + + + is running the installer as an administrator (root) + ස්ථාපකය පරිපාලකයෙකු ලෙස ධාවනය කරයි (root) + + + + The setup program is not running with administrator rights. + සැකසුම් වැඩසටහන පරිපාලක අයිතිවාසිකම් සමඟ ක්‍රියාත්මක නොවේ. + + + + The installer is not running with administrator rights. + ස්ථාපකය පරිපාලක අයිතිවාසිකම් සමඟ ක්‍රියාත්මක නොවේ. + + + + has a screen large enough to show the whole installer + සම්පූර්ණ ස්ථාපකය පෙන්වීමට තරම් විශාල තිරයක් ඇත + + + + The screen is too small to display the setup program. + සැකසුම් වැඩසටහන ප්‍රදර්ශනය කිරීමට තිරය කුඩා වැඩිය. + + + + The screen is too small to display the installer. + ස්ථාපකය වෙත පෙන්වීමට තිරය කුඩා වැඩිය. + + + + HostInfoJob + + + Collecting information about your machine. + ඔබගේ යන්ත්‍රය පිළිබඳ තොරතුරු රැස් කරමින් සිටී. + + + + IDJob + + + + + + OEM Batch Identifier + OEM කණ්ඩායම් හැඳුනුම්කාරකය + + + + Could not create directories <code>%1</code>. + <code>%1</code> ගොනු තැනීමට නොහැකි විය. + + + + Could not open file <code>%1</code>. + <code>%1</code> ගොනුව විවෘත කිරීමට නොහැකි විය. + + + + Could not write to file <code>%1</code>. + <code>%1</code> ගොනුවට ලිවීමට නොහැකි විය. + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + mkinitcpio සමඟ initramfs නිර්මාණය කිරීම. + + + + InitramfsJob + + + Creating initramfs. + initramfs නිර්මාණය කිරීම. + + + + InteractiveTerminalPage + + + Konsole not installed + කොන්සෝල් ස්ථාපනය කර නැත + + + + Please install KDE Konsole and try again! + කරුණාකර KDE කොන්සෝල් ස්ථාපනය කර නැවත උත්සාහ කරන්න! + + + + Executing script: &nbsp;<code>%1</code> + ස්ක්‍රිප්ට් ක්‍රියාත්මක කරමින්: &nbsp;<code>%1</code><code> + + + + InteractiveTerminalViewStep + + + Script + ස්ක්‍රප්ට් + + + + KeyboardQmlViewStep + + + Keyboard + යතුරුපුවරුව + + + + KeyboardViewStep + + + Keyboard + යතුරුපුවරුව + + + + LCLocaleDialog + + + System locale setting + පද්ධති ස්ථාන සැකසීම + + + + 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>. + පද්ධති පෙදෙසි සැකසුම සමහර විධාන රේඛා පරිශීලක අතුරුමුහුණත් මූලද්‍රව්‍ය සඳහා භාෂාව සහ අක්ෂර කට්ටලයට බලපායි. <br/>වත්මන් සැකසුම <strong>%1</strong> වේ. + + + + &Cancel + අවලංගු කරන්න + + + + &OK + හරි (&O) + + + + LOSHJob + + + Configuring encrypted swap. + සංකේතාත්මක swap වින්‍යාස කිරීම. + + + + No target system available. + ඉලක්ක පද්ධතියක් නොමැත. + + + + No rootMountPoint is set. + මූල මවුන්ට් පොයින්ට් එකක් සකසා නැත. + + + + No configFilePath is set. + configFilePath එකක් සකසා නැත. + + + + LicensePage + + + Form + පෝරමය + + + + <h1>License Agreement</h1> + <h1>බලපත්ර එකගතාවය</h1> + + + + I accept the terms and conditions above. + මම ඉහත නියමයන් සහ කොන්දේසි පිළිගනිමි. + + + + Please review the End User License Agreements (EULAs). + කරුණාකර අවසන් පරිශීලක බලපත්‍ර ගිවිසුම් (EULAs) සමාලෝචනය කරන්න. + + + + This setup procedure will install proprietary software that is subject to licensing terms. + මෙම සැකසුම් ක්‍රියා පටිපාටිය බලපත්‍ර කොන්දේසි වලට යටත් වන හිමිකාර මෘදුකාංග ස්ථාපනය කරනු ඇත. + + + + If you do not agree with the terms, the setup procedure cannot continue. + ඔබ නියමයන් සමඟ එකඟ නොවන්නේ නම්, සැකසුම් ක්‍රියා පටිපාටිය දිගටම කරගෙන යා නොහැක. + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + මෙම සැකසුම් ක්‍රියා පටිපාටියට අමතර විශේෂාංග සැපයීමට සහ පරිශීලක අත්දැකීම වැඩිදියුණු කිරීමට බලපත්‍ර නියමයන්ට යටත් වන හිමිකාර මෘදුකාංග ස්ථාපනය කළ හැක. + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + ඔබ නියමයන් සමඟ එකඟ නොවන්නේ නම්, හිමිකාර මෘදුකාංග ස්ථාපනය නොකරනු ඇති අතර, ඒ වෙනුවට විවෘත මූලාශ්‍ර විකල්ප භාවිතා කරනු ඇත. + + + + LicenseViewStep + + + License + බලපත්‍රය + + + + LicenseWidget + + + URL: %1 + ඒ.ස.නි.: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>%1 ධාවකය</strong><br/>%2 කින් + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>%1 චිත්‍රක ධාවකය</strong><br/><font color="Grey">%2 කින්</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>%1 බ්‍රවුසර ප්ලගිනය</strong><br/><font color="Grey"> %2 කින්</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>%1 කෝඩෙක්</strong><br/><font color="Grey">%2 කින්</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>%1 පැකේජය</strong><br><font color="Grey">%2 කින්</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">%2 කින්</font> + + + + File: %1 + ගොනුව: %1 + + + + Hide license text + බලපත්‍ර පෙළ සඟවන්න + + + + Show the license text + බලපත්ර පාඨය පෙන්වන්න + + + + Open license agreement in browser. + බ්‍රවුසරයේ බලපත්‍ර ගිවිසුම විවෘත කරන්න. + + + + LocalePage + + + Region: + කලාපයේ: + + + + Zone: + කලාපය: + + + + + &Change... + වෙනස් කරන්න... + + + + LocaleQmlViewStep + + + Location + ස්ථානය + + + + LocaleTests + + + Quit + ඉවත් වන්න + + + + LocaleViewStep + + + Location + ස්ථානය + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + LUKS යතුරු ගොනුව වින්‍යාස කරමින්. + + + + + No partitions are defined. + කොටස් නිර්වචනය කර නොමැත. + + + + + + Encrypted rootfs setup error + සංකේතනය කරන ලද rootfs පිහිටුවීමේ දෝෂයකි + + + + Root partition %1 is LUKS but no passphrase has been set. + මූල කොටස %1 LUKS වන නමුත් මුර-වැකිකඩක් සකසා නොමැත. + + + + Could not create LUKS key file for root partition %1. + මූල කොටස %1 සඳහා LUKS යතුරු ගොනුව සෑදිය නොහැක. + + + + Could not configure LUKS key file on partition %1. + %1 කොටසේ LUKS යතුරු ගොනුව වින්‍යාස කිරීමට නොහැකි විය. + + + + MachineIdJob + + + Generate machine-id. + යන්ත්‍ර හැඳුනුම්පත ජනනය කරන්න. + + + + Configuration Error + වින්‍යාස දෝෂය + + + + No root mount point is set for MachineId. + MachineId සඳහා root mount point එකක් සකසා නැත. + + + + Map + + + Timezone: %1 + වේලා කලාපය:% 1 + + + + 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. + කරුණාකර ස්ථාපකයට පෙදෙසිය යෝජනා කළ හැකි වන පරිදි සිතියමේ ඔබ කැමති ස්ථානය තෝරන්න + සහ ඔබ සඳහා වේලා කලාප සැකසීම්. ඔබට පහත යෝජිත සැකසුම් මනාව සකස් කළ හැක. ඇදගෙන යාමෙන් සිතියම සොයන්න + චලනය කිරීමට සහ විශාලනය කිරීමට හෝ විශාලනය කිරීම සඳහා මූසික අනුචලනය භාවිතා කිරීමට +/- බොත්තම් භාවිතා කරන්න. + + + + NetInstallViewStep + + + Package selection + පැකේජ තේරීම + + + + Office software + කාර්යාලීය මෘදුකාංගය + + + + Office package + කාර්යාලීය ඇසුරුම + + + + Browser software + අතිරික්සු මෘදුකාංගය + + + + Browser package + අතිරික්සු ඇසුරුම + + + + Web browser + වියමන අතිරික්සුව + + + + Kernel + කර්නලය + + + + Services + සේවා + + + + Login + පිවිසෙන්න + + + + Desktop + ඩෙස්ක්ටොප් + + + + Applications + යෙදුම් + + + + Communication + සන්නිවේදනය + + + + Development + සංවර්ධනය + + + + Office + කාර්යාලීය + + + + Multimedia + බහුමාධ්‍ය + + + + Internet + අන්තර්ජාලය + + + + Theming + තේමා කිරීම + + + + Gaming + පරිගණක ක්රීඩා + + + + Utilities + උපයෝගිතා + + + + NotesQmlViewStep + + + Notes + සටහන් + + + + OEMPage + + + Ba&tch: + කණ්ඩායම(&t): + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + <html><head/><body><p>මෙහි batch-identifier එකක් ඇතුළු කරන්න. මෙය ඉලක්ක පද්ධතිය තුළ ගබඩා කරනු ලැබේ.</p></body></html> + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + <html><head/><body><h1>OEM වින්‍යාසය</h1><p>Calamares ඉලක්ක පද්ධතිය වින්‍යාස කිරීමේදී OEM සැකසුම් භාවිතා කරනු ඇත.</p></body></html> + + + + OEMViewStep + + + OEM Configuration + OEM වින්‍යාසය + + + + Set the OEM Batch Identifier to <code>%1</code>. + OEM Batch Identifier <code>%1</code> ලෙස සකසන්න. + + + + Offline + + + Select your preferred Region, or use the default settings. + ඔබ කැමති කලාපය තෝරන්න, නැතහොත් පෙරනිමි සැකසුම් භාවිතා කරන්න. + + + + + + Timezone: %1 + වේලා කලාපය:% 1 + + + + Select your preferred Zone within your Region. + ඔබ කැමති කලාපය තෝරන්න. + + + + Zones + කලාපය: + + + + You can fine-tune Language and Locale settings below. + ඔබට පහත භාෂාව සහ ස්ථාන සැකසීම් මනාව සකස් කළ හැක. + + + + PWQ + + + Password is too short + මුරපදය ඉතා කෙටිය + + + + Password is too long + මුරපදය ඉතා දිගය + + + + Password is too weak + මුරපදය ඉතා දුර්වලයි + + + + Memory allocation error when setting '%1' + '%1' සැකසීමේදී මතකය වෙන් කිරීමේ දෝෂයකි + + + + Memory allocation error + මතකය වෙන් කිරීමේ දෝෂයකි + + + + The password is the same as the old one + මුරපදය පැරණි එකට සමානයි + + + + The password is a palindrome + මුරපදය palindrome වේ + + + + The password differs with case changes only + මුරපදය වෙනස් වන්නේ සිද්ධි වෙනස් කිරීම් සමඟ පමණි + + + + The password is too similar to the old one + මුරපදය පැරණි එකට ඉතා සමාන ය + + + + The password contains the user name in some form + මුරපදයේ යම් ආකාරයක පරිශීලක නාමය අඩංගු වේ + + + + The password contains words from the real name of the user in some form + මුරපදයේ යම් ආකාරයක පරිශීලකයාගේ සැබෑ නමෙන් වචන අඩංගු වේ + + + + The password contains forbidden words in some form + මුරපදයේ යම් ආකාරයක තහනම් වචන අඩංගු වේ + + + + The password contains too few digits + මුරපදයේ ඉතා අඩු ඉලක්කම් ඇත + + + + The password contains too few uppercase letters + මුරපදයේ විශාල අකුරු ඉතා ස්වල්පයක් ඇත + + + + The password contains fewer than %n lowercase letters + + මුරපදයේ කුඩා අකුරු %nකට වඩා අඩු ප්‍රමාණයක් ඇත + මුරපදයේ කුඩා අකුරු %n කට වඩා අඩු ප්‍රමාණයක් ඇත + + + + + The password contains too few lowercase letters + මුරපදයේ කුඩා අකුරු ඉතා ස්වල්පයක් ඇත + + + + The password contains too few non-alphanumeric characters + මුරපදයේ අක්ෂරාංක නොවන අක්ෂර ඉතා ස්වල්පයක් අඩංගු වේ + + + + The password is too short + මුරපදය ඉතා කෙටිය + + + + The password does not contain enough character classes + මුරපදයේ ප්‍රමාණවත් අක්ෂර පන්ති අඩංගු නොවේ + + + + The password contains too many same characters consecutively + මුරපදයේ එක හා සමාන අනුලකුණු කිහිපයක් එක දිගට අඩංගු වේ + + + + The password contains too many characters of the same class consecutively + මුරපදයේ එකම පන්තියේ අනුලකුණු වැඩි ගණනක් එක දිගට අඩංගු වේ + + + + The password contains fewer than %n digits + + මුරපදයේ ඉලක්කම් %n කට වඩා අඩු ප්‍රමාණයක් අඩංගු වේ + මුරපදයේ ඉලක්කම් %n කට වඩා අඩු ප්‍රමාණයක් අඩංගු වේ + + + + + The password contains fewer than %n uppercase letters + + මුරපදයේ ලොකු අකුරු %n කට වඩා අඩු ප්‍රමාණයක් ඇත + මුරපදයේ ලොකු අකුරු %n කට වඩා අඩු ප්‍රමාණයක් ඇත + + + + + The password contains fewer than %n non-alphanumeric characters + + මුරපදයේ අක්ෂරාංක නොවන අක්ෂර %n කට වඩා අඩු ප්‍රමාණයක් අඩංගු වේ + මුරපදයේ අක්ෂරාංක නොවන අක්ෂර %n කට වඩා අඩු ප්‍රමාණයක් අඩංගු වේ + + + + + The password is shorter than %n characters + + මුරපදය අක්ෂර %n ට වඩා කෙටිය + මුරපදය අක්ෂර %n ට වඩා කෙටිය + + + + + The password is a rotated version of the previous one + මුරපදය පෙර එකෙහි අනුවාදයකි + + + + The password contains fewer than %n character classes + + මුරපදයේ අක්ෂර පන්ති %n කට වඩා අඩු ප්‍රමාණයක් අඩංගු වේ + මුරපදයේ අක්ෂර පන්ති %n කට වඩා අඩු ප්‍රමාණයක් අඩංගු වේ + + + + + The password contains more than %n same characters consecutively + + මුරපදයේ එක දිගට එකම අක්ෂර %nකට වඩා අඩංගු වේ + මුරපදයේ එක දිගට එකම අක්ෂර %nකට වඩා අඩංගු වේ + + + + + The password contains more than %n characters of the same class consecutively + + මුරපදයේ එක පන්තියේ අනුලකුණු %n කට වඩා එක දිගට අඩංගු වේ + මුරපදයේ එක පන්තියේ අනුලකුණු %n කට වඩා එක දිගට අඩංගු වේ + + + + + The password contains monotonic sequence longer than %n characters + + මුරපදයේ අක්ෂර %n කට වඩා දිග ඒකාකාරී අනුපිළිවෙලක් ඇත + මුරපදයේ අක්ෂර %n කට වඩා දිග ඒකාකාරී අනුපිළිවෙලක් ඇත + + + + + The password contains too long of a monotonic character sequence + මුරපදයේ ඒකාකාරී අක්ෂර අනුපිළිවෙලක් ඉතා දිගු වේ + + + + No password supplied + මුරපදයක් සපයා නැත + + + + Cannot obtain random numbers from the RNG device + RNG උපාංගයෙන් අහඹු අංක ලබා ගත නොහැක + + + + Password generation failed - required entropy too low for settings + මුරපද උත්පාදනය අසාර්ථක විය - සැකසීම් සඳහා අවශ්‍ය එන්ට්‍රොපිය ඉතා අඩුය + + + + The password fails the dictionary check - %1 + මුරපදය ශබ්ද කෝෂ පරීක්ෂාව අසමත් වේ - %1 + + + + The password fails the dictionary check + මුරපදය ශබ්ද කෝෂ පරීක්ෂාව අසමත් වේ + + + + Unknown setting - %1 + නොදන්නා සැකසුම - %1 + + + + Unknown setting + නොදන්නා සැකසුමක් + + + + Bad integer value of setting - %1 + සැකසුමෙහි නරක පූර්ණ සංඛ්‍යා අගය - % 1 + + + + Bad integer value + සැකසුමෙහි නරක පූර්ණ සංඛ්‍යා අගයක් + + + + Setting %1 is not of integer type + %1 සැකසීම පූර්ණ සංඛ්‍යා වර්ගයට අයත් නොවේ + + + + Setting is not of integer type + සැකසීම නිඛිල ආකාරයේ නොවේ + + + + Setting %1 is not of string type + %1 සැකසීම තන්තු වර්ගයට අයත් නොවේ + + + + Setting is not of string type + සැකසීම තන්තු ආකාරයේ නොවේ + + + + Opening the configuration file failed + වින්‍යාස ගොනුව විවෘත කිරීම අසාර්ථක විය + + + + The configuration file is malformed + වින්‍යාස ගොනුව විකෘති වී ඇත + + + + Fatal failure + දරුනු අසර්ථක වීමක් + + + + Unknown error + නොදන්නා දෝෂයකි + + + + Password is empty + මුරපදය හිස් ය + + + + PackageChooserPage + + + Form + පෝරමය + + + + Product Name + නිෂ්පාදන නාමය + + + + TextLabel + අකුරු නාමකය + + + + Long Product Description + දිගු නිෂ්පාදන විස්තරය + + + + Package Selection + පැකේජ තේරීම + + + + Please pick a product from the list. The selected product will be installed. + කරුණාකර ලැයිස්තුවෙන් නිෂ්පාදනයක් තෝරන්න. තෝරාගත් නිෂ්පාදනය ස්ථාපනය කෙරේ. + + + + PackageChooserQmlViewStep + + + Packages + පැකේජ + + + + PackageChooserViewStep + + + Packages + පැකේජ + + + + PackageModel + + + Name + නම + + + + Description + විස්තරය + + + + Page_Keyboard + + + Form + පෝරමය + + + + Keyboard Model: + යතුරුපුවරු ආකෘතිය: + + + + Type here to test your keyboard + ඔබේ යතුරු පුවරුව පරීක්ෂා කිරීමට මෙහි ටයිප් කරන්න + + + + Page_UserSetup + + + Form + පෝරමය + + + + What is your name? + ඔබගේ නම කුමක් ද? + + + + Your Full Name + ඔබේ සම්පුර්ණ නම + + + + What name do you want to use to log in? + ඔබට පුරනය වීමට භාවිතා කිරීමට අවශ්‍ය නම කුමක්ද? + + + + login + පිවිසෙන්න + + + + What is the name of this computer? + මෙම පරිගණකයේ නම කුමක්ද? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>ඔබ පරිගණකය ජාලයක අන් අයට පෙනෙන ලෙස සලස්වන්නේ නම් මෙම නම භාවිතා වේ.</small> + + + + Computer Name + පරිගණක නම + + + + Choose a password to keep your account safe. + ඔබගේ ගිණුම ආරක්ෂිතව තබා ගැනීමට මුරපදයක් තෝරන්න. + + + + + <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> + <small>එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දෝෂ සඳහා පරීක්ෂා කළ හැක. හොඳ මුරපදයක අකුරු, ඉලක්කම් සහ විරාම ලකුණු මිශ්‍රණයක් අඩංගු වන අතර, අවම වශයෙන් අක්ෂර අටක්වත් දිග විය යුතු අතර නියමිත කාල පරාසයන්හිදී වෙනස් කළ යුතුය.</small> + + + + + Password + රහස් පදය + + + + + Repeat Password + මුරපදය නැවත ඇතුල් කරන්න + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + මෙම කොටුව සලකුණු කළ විට, මුරපදය-ශක්තිය පරීක්ෂා කිරීම සිදු කරනු ලබන අතර ඔබට දුර්වල මුරපදයක් භාවිතා කිරීමට නොහැකි වනු ඇත. + + + + Require strong passwords. + ශක්තිමත් මුරපද අවශ්‍යයි. + + + + Log in automatically without asking for the password. + මුරපදය ඉල්ලන්නේ නැතිව ස්වයංක්‍රීයව ලොග් වන්න. + + + + Use the same password for the administrator account. + පරිපාලක ගිණුම සඳහා එකම මුරපදය භාවිතා කරන්න. + + + + Choose a password for the administrator account. + පරිපාලක ගිණුම සඳහා මුරපදයක් තෝරන්න. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දෝෂ සඳහා පරීක්ෂා කළ හැක.</small> + + + + PartitionLabelsView + + + Root + රූට් + + + + Home + හෝම් + + + + Boot + බූට් + + + + EFI system + EFI පද්ධතිය + + + + Swap + ස්වප් + + + + New partition for %1 + %1 සඳහා නව කොටස + + + + New partition + නව කොටස + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + නිදහස් ඉඩ + + + + + New partition + නව කොටස + + + + Name + නම + + + + File System + ගොනු පද්ධතිය + + + + File System Label + ගොනු පද්ධති ලේබලය + + + + Mount Point + මවුන්ට් පොයින්ට් + + + + Size + ප්‍රමානය + + + + PartitionPage + + + Form + පෝරමය + + + + Storage de&vice: + ගබඩා උපාංගය (&v): + + + + &Revert All Changes + සියලුම වෙනස්කම් ආපසු හරවන්න (&R) + + + + New Partition &Table + නව කොටස් වගුව (&T) + + + + Cre&ate + නිර්මාණය කරන්න (&r) + + + + &Edit + සංස්කරණය කරන්න (&E) + + + + &Delete + මකන්න (&D) + + + + New Volume Group + නව වෙළුම් සමූහය + + + + Resize Volume Group + වෙළුම් සමූහය ප්‍රතිප්‍රමාණ කරන්න + + + + Deactivate Volume Group + පරිමා සමූහය අක්‍රිය කරන්න + + + + Remove Volume Group + වෙළුම් කණ්ඩායම ඉවත් කරන්න + + + + I&nstall boot loader on: + ඇරඹුම් කාරකය ස්ථාපනය කරන්න (&n): + + + + Are you sure you want to create a new partition table on %1? + ඔබට %1 මත නව කොටස් වගුවක් සෑදීමට අවශ්‍ය බව විශ්වාසද? + + + + Can not create new partition + නව කොටසක් සෑදිය නොහැක + + + + 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. + %1 හි කොටස් වගුවෙහි දැනටමත් ප්‍රාථමික කොටස් %2ක් ඇති අතර, තවත් එකතු කළ නොහැක. කරුණාකර එක් ප්‍රාථමික කොටසක් ඉවත් කර ඒ වෙනුවට දිගු කොටසක් එක් කරන්න. + + + + PartitionViewStep + + + Gathering system information... + පද්ධති තොරතුරු රැස් කරමින් පවතී... + + + + Partitions + කොටස් + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + වත්මන්: + + + + After: + පසු: + + + + No EFI system partition configured + EFI පද්ධති කොටසක් වින්‍යාස කර නොමැත + + + + EFI system partition configured incorrectly + EFI පද්ධති කොටස වැරදි ලෙස වින්‍යාස කර ඇත + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + %1 ආරම්භ කිරීමට EFI පද්ධති කොටසක් අවශ්‍ය වේ. <br/><br/>EFI පද්ධති කොටසක් වින්‍යාස කිරීමට, ආපසු ගොස් සුදුසු ගොනු පද්ධතියක් තෝරන්න හෝ සාදන්න. + + + + The filesystem must be mounted on <strong>%1</strong>. + ගොනු පද්ධතිය %1 මත සවිකර තිබිය යුතුය. + + + + The filesystem must have type FAT32. + ගොනු පද්ධතියට FAT32 වර්ගය තිබිය යුතුය. + + + + The filesystem must be at least %1 MiB in size. + ගොනු පද්ධතිය අවම වශයෙන් %1 MiB විශාලත්වයකින් යුක්ත විය යුතුය. + + + + The filesystem must have flag <strong>%1</strong> set. + ගොනු පද්ධතියට ධජය <strong>%1</strong> කට්ටලයක් තිබිය යුතුය. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + ඔබට EFI පද්ධති කොටසක් සැකසීමෙන් තොරව ඉදිරියට යා හැකි නමුත් ඔබේ පද්ධතිය ආරම්භ කිරීමට අසමත් විය හැක. + + + + Option to use GPT on BIOS + BIOS මත GPT භාවිතා කිරීමේ විකල්පය + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + ඇරඹුම් කොටස සංකේතනය කර නොමැත + + + + 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. + එන්ක්‍රිප්ට් කරන ලද රූට් පාටිෂන් එකක් සමඟින් වෙනම ඇරඹුම් කොටසක් සකසා ඇත, නමුත් ඇරඹුම් කොටස සංකේතනය කර නොමැත. <br/<br/>වැදගත් පද්ධති ගොනු සංකේතනය නොකළ කොටසක තබා ඇති නිසා මෙවැනි සැකසුම සමඟ ආරක්ෂක ගැටළු ඇත. <br/>ඔබට අවශ්‍ය නම් ඔබට දිගටම කරගෙන යා හැක, නමුත් ගොනු පද්ධති අගුළු හැරීම පද්ධති ආරම්භයේදී පසුව සිදුවනු ඇත. <br/>ඇරඹුම් කොටස සංකේතනය කිරීමට, ආපසු ගොස් එය නැවත සාදන්න, කොටස් සෑදීමේ කවුළුව තුළ <strong>සංකේතනය</srong> තෝරන්න. + + + + has at least one disk device available. + අවම වශයෙන් එක් තැටි උපාංගයක් තිබේ. + + + + There are no partitions to install on. + ස්ථාපනය කිරීමට කොටස් නොමැත. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + ප්ලාස්මා පෙනුම සහ හැඟීම රැකියාව + + + + + Could not select KDE Plasma Look-and-Feel package + KDE ප්ලාස්මා පෙනුම සහ දැනීම පැකේජය තේරීමට නොහැකි විය + + + + PlasmaLnfPage + + + Form + පෝරමය + + + + 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. + කරුණාකර KDE ප්ලාස්මා ඩෙස්ක්ටොප් එක සඳහා පෙනුම සහ හැඟීම තෝරන්න. ඔබට මෙම පියවර මඟ හැර පද්ධතිය සැකසූ පසු පෙනුම සහ හැඟීම වින්‍යාසගත කළ හැක. පෙනුම සහ හැඟීම තේරීමක් මත ක්ලික් කිරීමෙන් ඔබට එම පෙනුම සහ හැඟීම පිළිබඳ සජීවී පෙරදසුනක් ලබා දෙනු ඇත. + + + + 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. + කරුණාකර KDE ප්ලාස්මා ඩෙස්ක්ටොප් එක සඳහා පෙනුම සහ හැඟීම තෝරන්න. ඔබට මෙම පියවර මඟ හැර පද්ධතිය ස්ථාපනය කළ පසු පෙනුම සහ හැඟීම වින්‍යාසගත කළ හැක. පෙනුම සහ හැඟීම තේරීමක් මත ක්ලික් කිරීමෙන් ඔබට එම පෙනුම සහ හැඟීම පිළිබඳ සජීවී පෙරදසුනක් ලබා දෙනු ඇත. + + + + PlasmaLnfViewStep + + + Look-and-Feel + බලන්න සහ දැනෙන්න + + + + PreserveFiles + + + Saving files for later ... + පසු බාවිතට ගොනු සුරකමින් ... + + + + No files configured to save for later. + පසුව සුරැකීමට ගොනු කිසිවක් වින්‍යාස කර නොමැත. + + + + Not all of the configured files could be preserved. + වින්‍යාස කර ඇති සියලුම ගොනු සංරක්ෂණය කළ නොහැක. + + + + ProcessResult + + + +There was no output from the command. + +විධානයෙන් ප්‍රතිදානයක් නොතිබුණි. + + + + +Output: + + +ප්‍රතිදානය: + + + + + External command crashed. + බාහිර විධානය බිඳ වැටුණි. + + + + Command <i>%1</i> crashed. + %1 විධානය බිඳ වැටුණි. + + + + External command failed to start. + බාහිර විධානය ආරම්භ කිරීමට අසමත් විය. + + + + Command <i>%1</i> failed to start. + %1 විධානය ආරම්භ කිරීමට අසමත් විය. + + + + Internal error when starting command. + විධානය ආරම්භ කිරීමේදී අභ්යන්තර දෝෂයකි. + + + + Bad parameters for process job call. + රැකියා ඇමතුම් ක්‍රියාවලි සඳහා නරක පරාමිතීන්. + + + + External command failed to finish. + බාහිර විධානය අවසන් කිරීමට අසමත් විය. + + + + Command <i>%1</i> failed to finish in %2 seconds. + <i>%1</i> විධානය තත්පර %2කින් අවසන් කිරීමට අසමත් විය. + + + + External command finished with errors. + බාහිර විධානය දෝෂ සහිතව අවසන් විය. + + + + Command <i>%1</i> finished with exit code %2. + <i>%1</i> විධානය පිටවීමේ කේතය %2 සමඟ අවසන් විය. + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + නොදන්නා + + + + extended + දිගුව + + + + unformatted + ආකෘතිකරණය නොකළ + + + + swap + ස්වප් + + + + + Default + පෙරනිමිය + + + + + + + File not found + ගොනුව හමු නොවිණි + + + + Path <pre>%1</pre> must be an absolute path. + මාර්ගය <pre>%1</pre> නිරපේක්ෂ මාර්ගයක් විය යුතුය. + + + + Directory not found + නාමාවලිය හමු නොවීය + + + + + Could not create new random file <pre>%1</pre>. + නව අහඹු <pre>%1</pre> ගොනුවක් තැනීමට නොහැකි විය. + + + + No product + නිෂ්පාදනයක් නැත + + + + No description provided. + විස්තරයක් සපයා නැත. + + + + (no mount point) + (සවිකිරීම් ස්ථානයක් නොමැත) + + + + Unpartitioned space or unknown partition table + කොටස් නොකළ ඉඩ හෝ නොදන්නා කොටස් වගුව + + + + Recommended + + + <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> + <p>මෙම පරිගණකය %1 පිහිටුවීම සඳහා නිර්දේශිත සමහර අවශ්‍යතා සපුරාලන්නේ නැත.<br/> +පිහිටුවීම දිගටම කරගෙන යා හැක, නමුත් සමහර විශේෂාංග අබල විය හැක.</p> + + + + RemoveUserJob + + + Remove live user from target system + ඉලක්ක පද්ධතියෙන් සජීවී පරිශීලකයා ඉවත් කරන්න + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + %1 නම් වූ වෙළුම් සමූහය ඉවත් කරන්න. + + + + Remove Volume Group named <strong>%1</strong>. + <strong>%1</strong> නම් වූ වෙළුම් සමූහය ඉවත් කරන්න. + + + + The installer failed to remove a volume group named '%1'. + ස්ථාපකය '%1' නම් වෙළුම් කණ්ඩායමක් ඉවත් කිරීමට අසමත් විය. + + + + ReplaceWidget + + + Form + පෝරමය + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + %1 ස්ථාපනය කළ යුතු ස්ථානය තෝරන්න. <br/><font color='red'>අවවාදයයි: </font>මෙය තෝරාගත් කොටසේ ඇති සියලුම ගොනු මකා දමයි. + + + + The selected item does not appear to be a valid partition. + තෝරාගත් අයිතමය වලංගු කොටසක් ලෙස නොපෙනේ. + + + + %1 cannot be installed on empty space. Please select an existing partition. + %1 හිස් අවකාශයේ ස්ථාපනය කල නොහැක. කරුණාකර පවතින කොටසක් තෝරන්න. + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %1 දිගු කළ කොටසක ස්ථාපනය කල නොහැක. කරුණාකර පවතින ප්‍රාථමික හෝ තාර්කික කොටසක් තෝරන්න. + + + + %1 cannot be installed on this partition. + %1 මෙම කොටසෙහි ස්ථාපනය කල නොහැක. + + + + Data partition (%1) + දත්ත කොටස (%1) + + + + Unknown system partition (%1) + නොදන්නා පද්ධති කොටස (%1) + + + + %1 system partition (%2) + %1 පද්ධති කොටස (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <strong>%4</strong><br/><br/>%1 කොටස %2 සඳහා ඉතා කුඩාය. කරුණාකර අවම වශයෙන් %3 GiB ධාරිතාවක් සහිත කොටසක් තෝරන්න. + + + + <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. + <strong>%2</strong><br/><br/>EFI පද්ධති කොටසක් මෙම පද්ධතියේ කොතැනකවත් සොයාගත නොහැක. කරුණාකර ආපසු ගොස් %1 පිහිටුවීමට අතින් කොටස් කිරීම භාවිතා කරන්න. + + + + + + <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. + <strong>%3</strong><br/><br/>%1 %2 මත ස්ථාපනය වනු ඇත.<br/><font color="red">අවවාදයයි:</font> %2 කොටසේ ඇති සියලුම දත්ත නැති වී යයි. + + + + The EFI system partition at %1 will be used for starting %2. + %2 ආරම්භ කිරීම සඳහා %1 හි EFI පද්ධති කොටස භාවිතා කරනු ඇත. + + + + EFI system partition: + EFI පද්ධති කොටස: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>මෙම පරිගණකය %1 ස්ථාපනය සඳහා අවම අවශ්‍යතා සපුරාලන්නේ නැත.<br/> + ස්ථාපනය දිගටම කරගෙන යා නොහැක.</p> + + + + <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> + <p>මෙම පරිගණකය %1 පිහිටුවීම සඳහා නිර්දේශිත සමහර අවශ්‍යතා සපුරාලන්නේ නැත.<br/> + පිහිටුවීම දිගටම කරගෙන යා හැක, නමුත් සමහර විශේෂාංග අබල විය හැක.</p> + + + + ResizeFSJob + + + Resize Filesystem Job + ගොනු පද්ධති කාර්යය ප්‍රමාණය වෙනස් කරන්න + + + + Invalid configuration + වලංගු නොවන වින්‍යාසය + + + + The file-system resize job has an invalid configuration and will not run. + ගොනු පද්ධති ප්‍රමාණය වෙනස් කිරීමේ කාර්යයට වලංගු නොවන වින්‍යාසයක් ඇති අතර එය ක්‍රියාත්මක නොවේ. + + + + KPMCore not Available + KPMCore නොමැත + + + + Calamares cannot start KPMCore for the file-system resize job. + ගොනු පද්ධති ප්‍රමාණය වෙනස් කිරීමේ කාර්යය සඳහා Calamares හට KPMCore ආරම්භ කළ නොහැක. + + + + + + + + Resize Failed + ප්‍රමාණය වෙනස් කිරීම අසාර්ථක විය + + + + The filesystem %1 could not be found in this system, and cannot be resized. + ගොනු පද්ධතිය %1 මෙම පද්ධතිය තුළ සොයා ගත නොහැකි අතර, ප්‍රමාණය වෙනස් කළ නොහැක. + + + + The device %1 could not be found in this system, and cannot be resized. + %1 උපාංගය මෙම පද්ධතිය තුළ සොයාගත නොහැකි වූ අතර, ප්‍රමාණය වෙනස් කළ නොහැක. + + + + + The filesystem %1 cannot be resized. + %1 ගොනු පද්ධතිය ප්‍රතිප්‍රමාණ කළ නොහැක. + + + + + The device %1 cannot be resized. + උපාංගය %1 ප්‍රමාණය වෙනස් කළ නොහැක. + + + + The filesystem %1 must be resized, but cannot. + ගොනු පද්ධතිය %1 ප්‍රමාණය වෙනස් කළ යුතුය, නමුත් කළ නොහැක. + + + + The device %1 must be resized, but cannot + උපාංගය %1 ප්‍රමාණය වෙනස් කළ යුතු නමුත් කළ නොහැක + + + + ResizePartitionJob + + + Resize partition %1. + %1 කොටස ප්‍රතිප්‍රමාණ කරන්න. + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + <strong>%2MiB</strong> කොටස <strong>%1</strong> සිට <strong>%3MiB</strong> දක්වා ප්‍රමාණය වෙනස් කරන්න. + + + + Resizing %2MiB partition %1 to %3MiB. + %2MiB කොටස %1 සිට %3MiB දක්වා ප්‍රමාණය වෙනස් කිරීම. + + + + The installer failed to resize partition %1 on disk '%2'. + '%2' තැටියේ %1 කොටස ප්‍රතිප්‍රමාණ කිරීමට ස්ථාපකය අසමත් විය. + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + වෙළුම් සමූහය ප්‍රතිප්‍රමාණ කරන්න + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + %2 සිට %3 දක්වා %1 ලෙස නම් කරන ලද වෙළුම් සමූහය ප්‍රතිප්‍රමාණ කරන්න. + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + <strong>%2</strong> සිට <strong>%3</strong> දක්වා <strong>%1</strong> ලෙස නම් කරන ලද වෙළුම් සමූහය ප්‍රතිප්‍රමාණ කරන්න. + + + + The installer failed to resize a volume group named '%1'. + ස්ථාපකය '%1' නම් වූ වෙළුම් සමූහයක් ප්‍රතිප්‍රමාණ කිරීමට අසමත් විය. + + + + ResultsListDialog + + + For best results, please ensure that this computer: + හොඳම ප්‍රතිඵල සඳහා, කරුණාකර මෙම පරිගණකය සහතික කර ගන්න: + + + + System requirements + පද්ධති අවශ්යතා + + + + ScanningDialog + + + Scanning storage devices... + ගබඩා උපාංග පරිලෝකනය කරමින්... + + + + Partitioning + කොටස් කරමින් + + + + SetHostNameJob + + + Set hostname %1 + ධාරක නාමය සකසන්න %1 + + + + Set hostname <strong>%1</strong>. + ධාරක නාමය සකසන්න <strong>%1</strong>. + + + + Setting hostname %1. + සත්කාරක නාමය %1 සැකසීම. + + + + + Internal Error + අභ්යන්තර දෝෂයකි + + + + + Cannot write hostname to target system + ඉලක්ක පද්ධතියට සත්කාරක නාමය ලිවිය නොහැක + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + යතුරුපුවරු ආකෘතිය %1 ලෙස සකසන්න, පිරිසැලසුම %2-%3 ලෙස සකසන්න + + + + Failed to write keyboard configuration for the virtual console. + අතථ්‍ය කොන්සෝලය සඳහා යතුරුපුවරු වින්‍යාසය ලිවීමට අසමත් විය. + + + + + + Failed to write to %1 + %1 වෙත ලිවීමට අසමත් විය + + + + Failed to write keyboard configuration for X11. + X11 සඳහා යතුරුපුවරු වින්‍යාසය ලිවීමට අසමත් විය. + + + + Failed to write keyboard configuration to existing /etc/default directory. + පවතින /etc/default බහලුම වෙත යතුරුපුවරු වින්‍යාසය ලිවීමට අසමත් විය. + + + + SetPartFlagsJob + + + Set flags on partition %1. + %1 කොටසේ කොඩි සකසන්න. + + + + Set flags on %1MiB %2 partition. + %1MiB %2 කොටස මත කොඩි සකසන්න. + + + + Set flags on new partition. + නව කොටසේ කොඩි සකසන්න. + + + + Clear flags on partition <strong>%1</strong>. + %1 කොටසේ කොඩි හිස් කරන්න. + + + + Clear flags on %1MiB <strong>%2</strong> partition. + %1MiB %2 කොටසේ කොඩි හිස් කරන්න. + + + + Clear flags on new partition. + නව කොටසේ කොඩි ඉවත් කරන්න. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + %1 කොටස %2 ලෙස සලකුණු කරන්න. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MiB <strong>%2</strong> කොටස <strong>%3</strong> ලෙස සලකුණු කරන්න. + + + + Flag new partition as <strong>%1</strong>. + නව කොටස <strong>%1</strong> ලෙස සලකුණු කරන්න. + + + + Clearing flags on partition <strong>%1</strong>. + %1 කොටසේ කොඩි ඉවත් කිරීම. + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MiB <strong>%2</strong> කොටසේ කොඩි ඉවත් කිරීම. + + + + Clearing flags on new partition. + නව කොටසේ කොඩි ඉවත් කිරීම. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + <strong>%1</strong> කොටස මත කොඩි <strong>%2</strong> සැකසීම. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + %1MiB <strong>%2</strong> කොටස මත කොඩි <strong>%3</strong> සැකසීම. + + + + Setting flags <strong>%1</strong> on new partition. + නව කොටසෙහි කොඩි <strong>%1</strong> සැකසීම. + + + + The installer failed to set flags on partition %1. + ස්ථාපකය %1 කොටසෙහි කොඩි සැකසීමට අසමත් විය. + + + + SetPasswordJob + + + Set password for user %1 + පරිශීලක %1 සඳහා මුරපදය සකසන්න + + + + Setting password for user %1. + පරිශීලක %1 සඳහා මුරපදය සැකසීම. + + + + Bad destination system path. + නරක ගමනාන්ත පද්ධති මාර්ගය. + + + + rootMountPoint is %1 + මූලමවුන්ට්පොයින්ට් % 1 වේ + + + + Cannot disable root account. + මූල ගිණුම අක්‍රිය කළ නොහැක. + + + + passwd terminated with error code %1. + මුරපදය %1 දෝෂ කේතය සමඟ අවසන් විය. + + + + Cannot set password for user %1. + පරිශීලක %1 සඳහා මුරපදය සැකසිය නොහැක. + + + + usermod terminated with error code %1. + පරිශීලක මොඩ් දෝෂ කේතය % 1 සමඟ අවසන් කරන ලදී. + + + + SetTimezoneJob + + + Set timezone to %1/%2 + වේලා කලාපය %1/%2 ලෙස සකසන්න + + + + Cannot access selected timezone path. + තෝරාගත් වේලා කලාප මාර්ගයට ප්‍රවේශ විය නොහැක. + + + + Bad path: %1 + නරක මාර්ගය:%1 + + + + Cannot set timezone. + වේලා කලාපයක් සැකසිය නොහැක. + + + + Link creation failed, target: %1; link name: %2 + සබැඳි නිර්මාණය අසාර්ථක විය, ඉලක්කය: %1; සබැඳි නම: %2 + + + + Cannot set timezone, + වේලා කලාපය සැකසිය නොහැක, + + + + Cannot open /etc/timezone for writing + ලිවීම සඳහා /etc/timezone විවෘත කළ නොහැක + + + + SetupGroupsJob + + + Preparing groups. + කණ්ඩායම් සූදානම් කිරීම. + + + + + Could not create groups in target system + ඉලක්ක පද්ධතිය තුළ කණ්ඩායම් සෑදීමට නොහැකි විය + + + + These groups are missing in the target system: %1 + ඉලක්ක පද්ධතිය තුළ මෙම කණ්ඩායම් අතුරුදහන් වී ඇත: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <strong>sudo</strong> භාවිතා කරන්නන් වින්‍යාස කරන්න. + + + + Cannot chmod sudoers file. + sudoers ගොනුව chmod කළ නොහැක. + + + + Cannot create sudoers file for writing. + ලිවීම සඳහා sudoers ගොනුව සෑදිය නොහැක. + + + + ShellProcessJob + + + Shell Processes Job + ෂෙල් ක්රියාවලීන් + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + හරි (&O) + + + + &Yes + ඔව් (&Y) + + + + &No + නැත (&N) + + + + &Cancel + අවලංගු කරන්න (&C) + + + + &Close + වසන්න (&C) + + + + TrackingInstallJob + + + Installation feedback + ස්ථාපන ප්‍රතිපෝෂණය + + + + Sending installation feedback. + ස්ථාපන ප්‍රතිපෝෂණ යැවීම. + + + + Internal error in install-tracking. + ස්ථාපන ලුහුබැඳීමේ අභ්‍යන්තර දෝෂයකි. + + + + HTTP request timed out. + HTTP ඉල්ලීම කල් ඉකුත් විය. + + + + TrackingKUserFeedbackJob + + + KDE user feedback + KDE පරිශීලක ප්‍රතිපෝෂණය + + + + Configuring KDE user feedback. + KDE පරිශීලක ප්‍රතිපෝෂණ වින්‍යාස කිරීම. + + + + + Error in KDE user feedback configuration. + KDE පරිශීලක ප්‍රතිපෝෂණ වින්‍යාසයෙහි දෝෂයකි. + + + + Could not configure KDE user feedback correctly, script error %1. + KDE පරිශීලක ප්‍රතිපෝෂණය නිවැරදිව වින්‍යාස කිරීමට නොහැකි විය, ස්ක්‍රිප්ට් දෝෂය %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE පරිශීලක ප්‍රතිපෝෂණය නිවැරදිව වින්‍යාස කිරීමට නොහැකි විය, Calamares දෝෂය %1. + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + යන්ත්‍ර ප්‍රතිපෝෂණය + + + + Configuring machine feedback. + යන්ත්‍ර ප්‍රතිපෝෂණ වින්‍යාස කිරීම. + + + + + Error in machine feedback configuration. + යන්ත්‍ර ප්‍රතිපෝෂණ වින්‍යාසය තුළ දෝෂයකි. + + + + Could not configure machine feedback correctly, script error %1. + යන්ත්‍ර ප්‍රතිපෝෂණය නිවැරදිව වින්‍යාස කිරීමට නොහැකි විය, ස්ක්‍රිප්ට් දෝෂය %1. + + + + Could not configure machine feedback correctly, Calamares error %1. + යන්ත්‍ර ප්‍රතිපෝෂණය නිවැරදිව වින්‍යාස කිරීමට නොහැකි විය, Calamares දෝෂය %1. + + + + TrackingPage + + + Form + පෝරමය + + + + Placeholder + ස්ථාන දාරකය + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>ඔබගේ ස්ථාපනය පිළිබඳ <span style=" font-weight:600;">කිසිදු තොරතුරක්</span> නොයැවීමට මෙතන ක්ලික් කරන්න.</p></body></html> + + + + <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> + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">පරිශීලක ප්‍රතිපෝෂණ පිළිබඳ වැඩි විස්තර සඳහා මෙතැන ක්ලික් කරන්න</span></a></p></body></html> + + + + 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. + ලුහුබැඳීම %1 හට එය කොපමණ වාරයක් ස්ථාපනය කර ඇත්ද, කුමන දෘඩාංග මත ස්ථාපනය කර ඇත්ද සහ කුමන යෙදුම් භාවිතා කරන්නේද යන්න බැලීමට උපකාරී වේ. යවන්නේ කුමක් දැයි බැලීමට, එක් එක් ප්‍රදේශයට යාබදව ඇති උදවු නිරූපකය ක්ලික් කරන්න. + + + + 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. + මෙය තේරීමෙන් ඔබ ඔබේ ස්ථාපනය සහ දෘඪාංග පිළිබඳ තොරතුරු එවනු ඇත. ස්ථාපනය අවසන් වූ පසු මෙම තොරතුරු <b>එක් වරක්</b> පමණක් යවනු ලැබේ. + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + මෙය තේරීමෙන් ඔබ විසින් ඔබේ <b>යන්ත්‍ර</b> ස්ථාපනය, දෘඪාංග සහ යෙදුම් පිළිබඳ තොරතුරු වරින් වර %1 වෙත යවනු ලැබේ. + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + මෙය තේරීමෙන් ඔබ ඔබේ <b>පරිශීලක</b> ස්ථාපනය, දෘඪාංග, යෙදුම්, සහ යෙදුම් භාවිත රටා, %1 වෙත නිතිපතා යවනු ලැබේ. + + + + TrackingViewStep + + + Feedback + ප්‍රතිපෝෂණ + + + + UmountJob + + + Unmount file systems. + ගොනු පද්ධති ඉවත් කරන්න. + + + + No target system available. + ඉලක්ක පද්ධතියක් නොමැත. + + + + No rootMountPoint is set. + මූල මවුන්ට් පොයින්ට් එකක් සකසා නැත. + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + <small>එක් අයෙකුට වඩා මෙම පරිගණකය භාවිතා කරන්නේ නම්, සැකසීමෙන් පසු ඔබට ගිණුම් කිහිපයක් සෑදිය හැක.</small> + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + <small>මෙම පරිගණකය එක් අයෙකුට වඩා භාවිතා කරන්නේ නම්, ස්ථාපනය කිරීමෙන් පසු ඔබට ගිණුම් කිහිපයක් සෑදිය හැක.</small> + + + + UsersQmlViewStep + + + Users + පරිශීලකයන් + + + + UsersViewStep + + + Users + පරිශීලකයන් + + + + VariantModel + + + Key + Column header for key/value + යතුර + + + + Value + Column header for key/value + අගය + + + + VolumeGroupBaseDialog + + + Create Volume Group + වෙළුම් කණ්ඩායමක් සාදන්න + + + + List of Physical Volumes + භෞතික වෙළුම් ලැයිස්තුව + + + + Volume Group Name: + වෙළුම් සමූහයේ නම: + + + + Volume Group Type: + වෙළුම් කණ්ඩායම් වර්ගය: + + + + Physical Extent Size: + භෞතික ප්‍රමාණයේ ප්‍රමාණය: + + + + MiB + MiB + + + + Total Size: + මුළු ප්‍රමාණය: + + + + Used Size: + භාවිතා කළ ප්‍රමාණය: + + + + Total Sectors: + මුළු අංශ: + + + + Quantity of LVs: + LV ප්‍රමාණය: + + + + WelcomePage + + + Form + පෝරමය + + + + + Select application and system language + යෙදුම් සහ පද්ධති භාෂාව තෝරන්න + + + + &About + ගැන (&A) + + + + Open donations website + පරිත්‍යාග වෙබ් අඩවිය විවෘත කරන්න + + + + &Donate + පරිත්‍යාග කරන්න (&D) + + + + Open help and support website + උදව් සහ සහාය වෙබ් අඩවිය විවෘත කරන්න + + + + &Support + සහාය (&S) + + + + Open issues and bug-tracking website + ගැටළු සහ දෝෂ ලුහුබැඳීමේ වෙබ් අඩවිය විවෘත කරන්න + + + + &Known issues + දන්නා ගැටළු (&K) + + + + Open release notes website + නිකුතු සටහන් වෙබ් අඩවිය විවෘත කරන්න + + + + &Release notes + නිකුත් කිරීමේ සටහන් (&R) + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>%1 සඳහා Calamares සැකසුම් වැඩසටහන වෙත සාදරයෙන් පිළිගනිමු.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>%1 පිහිටුවීමට සාදරයෙන් පිළිගනිමු.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1 සඳහා Calamares ස්ථාපකය වෙත සාදරයෙන් පිළිගනිමු.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 ස්ථාපකය වෙත සාදරයෙන් පිළිගනිමු.</h1> + + + + %1 support + %1 සහාය + + + + About %1 setup + %1 පිහිටුවීම ගැන + + + + About %1 installer + %1 ස්ථාපකය ගැන + + + + <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. + <h1>%1</h1><br/><strong>%2<br/> සඳහා %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> ස්තුතියි. <a href="https://calamares.io/">Calamares</a> සංවර්ධනය සඳහා අනුග්‍රහය දක්වන්නේ <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software විසිනි. + + + + WelcomeQmlViewStep + + + Welcome + සාදරයෙන් පිළිගනිමු + + + + WelcomeViewStep + + + Welcome + සාදරයෙන් පිළිගනිමු + + + + ZfsJob + + + Create ZFS pools and datasets + ZFS සංචිත සහ දත්ත කට්ටල සාදන්න + + + + Failed to create zpool on + zpool ක්‍රියාත්මක කිරීමට අසමත් විය + + + + Configuration Error + වින්‍යාස දෝෂය + + + + No partitions are available for ZFS. + + + + + Internal data missing + අභ්‍යන්තර දත්ත අතුරුදහන් + + + + + Failed to create zpool + zpool නිර්මාණය කිරීමට අසමත් විය + + + + Failed to create dataset + දත්ත කට්ටලයක් සෑදීමට අසමත් විය + + + + The output was: + ප්‍රතිදානය වූයේ: + + + + about + + + <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. + <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/> + <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. + + + + Back + ආපසු + + + + calamares-sidebar + + + Show debug information + දෝශ නිරාකරණ තොරතුරු පෙන්වන්න + + + + finishedq + + + Installation Completed + ස්ථාපනය අවසන් + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 ඔබේ පරිගණකයේ ස්ථාපනය කර ඇත.<br/> + ඔබට දැන් ඔබේ නව පද්ධතිය නැවත ආරම්භ කළ හැකිය, නැතහොත් සජීවී පරිසරය දිගටම භාවිතා කළ හැක. + + + + Close Installer + ස්ථාපකය වසන්න + + + + Restart System + පද්ධතිය නැවත ආරම්භ කරන්න + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>ස්ථාපනයේ සම්පූර්ණ ලොගයක් සජීවී පරිශීලකයාගේ මුල් නාමාවලියෙහි install.log ලෙස පවතී.<br/> + මෙම ලොගය ඉලක්ක පද්ධතියේ /var/log/installation.log වෙත පිටපත් කර ඇත.</p> + + + + finishedq@mobile + + + Installation Completed + ස්ථාපනය අවසන් + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 ඔබේ පරිගණකයේ ස්ථාපනය කර ඇත.<br/> +ඔබට දැන් ඔබගේ උපාංගය නැවත ආරම්භ කළ හැක. + + + + Close + වසන්න + + + + Restart + යළි අරඹන්න + + + + i18n + + + <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>. + <h1>භාෂා</h1> </br> + පද්ධති පෙදෙසි සැකසුම සමහර විධාන රේඛා පරිශීලක අතුරුමුහුණත් මූලද්‍රව්‍ය සඳහා භාෂාව සහ අක්ෂර කට්ටලයට බලපායි. වත්මන් සැකසුම <strong>%1</strong> වේ. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>ප්‍රාදේශීය</h1> </br> + පද්ධති පෙදෙසි සැකසීම අංක සහ දින ආකෘතියට බලපායි. වත්මන් සැකසුම <strong>%1</strong> වේ. + + + + Back + ආපසු + + + + keyboardq + + + To activate keyboard preview, select a layout. + යතුරුපුවරු පෙරදසුන සක්‍රිය කිරීමට, පිරිසැලසුමක් තෝරන්න. + + + + Keyboard Model: + යතුරුපුවරු ආකෘතිය: + + + + Layouts + පිරිසැලසුම් + + + + Type here to test your keyboard + ඔබේ යතුරු පුවරුව පරීක්ෂා කිරීමට මෙහි ටයිප් කරන්න + + + + Variants + ප්‍රභේද + + + + localeq + + + Change + වෙනස් කරන්න + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + <h3>%1</h3> + <p>මේවා නිදසුන් නිකුත් කිරීමේ සටහන් වේ.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice යනු ලොව පුරා සිටින මිලියන සංඛ්‍යාත ජනතාවක් විසින් භාවිතා කරන බලවත් සහ නිදහස් කාර්යාල කට්ටලයකි. වෙළඳපොලේ ඇති වඩාත්ම බහුකාර්ය නිදහස් සහ විවෘත මූලාශ්‍ර කාර්යාල කට්ටලය බවට පත් කරන යෙදුම් කිහිපයක් එයට ඇතුළත් වේ.<br/> + පෙරනිමි විකල්පය. + + + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + ඔබට කාර්යාල කට්ටලයක් ස්ථාපනය කිරීමට අවශ්‍ය නැතිනම්, No Office Suite තෝරන්න. ඔබගේ ස්ථාපිත පද්ධතියට අවශ්‍යතාවය අනුව ඔබට සැම විටම එකක් (හෝ කිහිපයක්) පසුව එක් කළ හැක + + + + No Office Suite + No Office Suite + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + අවම ඩෙස්ක්ටොප් ස්ථාපනයක් සාදන්න, සියලුම අමතර යෙදුම් ඉවත් කර ඔබ ඔබේ පද්ධතියට එකතු කිරීමට කැමති දේ පසුව තීරණය කරන්න. එවැනි ස්ථාපනයක සිදු නොවන දේ පිළිබඳ උදාහරණ, Office Suite එකක්, මාධ්‍ය වාදකයක්, රූප නරඹන්නාක් හෝ මුද්‍රණ සහායක් නොමැත. එය ඩෙස්ක්ටොප් එකක්, ගොනු බ්‍රවුසරයක්, පැකේජ කළමනාකරු, පෙළ සංස්කාරකයක් සහ සරල වෙබ් බ්‍රව්සරයක් පමණක් වනු ඇත. + + + + Minimal Install + අවම ස්ථාපනය + + + + Please select an option for your install, or use the default: LibreOffice included. + කරුණාකර ඔබගේ ස්ථාපනය සඳහා විකල්පයක් තෝරන්න, නැතහොත් පෙරනිමිය භාවිතා කරන්න: LibreOffice ඇතුළත්. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>මෙය උදාහරණ QML ගොනුවකි, Flickable අන්තර්ගතය සහිත Rich Text විකල්ප පෙන්වයි.</p> + + <p>Rich Text සහිත QML හට HTML ටැග් භාවිතා කළ හැක, Flickable අන්තර්ගතය ස්පර්ශ තිර සඳහා ප්‍රයෝජනවත් වේ.</p> + + <p><b>මෙය තද පෙළකි</b></p> + <p><i>මෙය ඇල අකුරු වේ</i></p> + <p><u>මෙය යටින් ඉරි ඇඳ ඇති පාඨයකි</u></p> + <p><center>මෙම පාඨය මැදට පෙළගස්වනු ඇත.</center></p> + <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> + + + + Back + ආපසු + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + පිවිසීමට සහ පරිපාලක කාර්යයන් කිරීමට ඔබගේ පරිශීලක නාමය සහ අක්තපත්‍ර තෝරන්න + + + + What is your name? + ඔබගේ නම කුමක් ද? + + + + Your Full Name + ඔබේ සම්පුර්ණ නම + + + + What name do you want to use to log in? + ඔබට පුරනය වීමට භාවිතා කිරීමට අවශ්‍ය නම කුමක්ද? + + + + Login Name + ලොගින් නම + + + + If more than one person will use this computer, you can create multiple accounts after installation. + මෙම පරිගණකය එක් අයෙකුට වඩා භාවිතා කරන්නේ නම්, ස්ථාපනය කිරීමෙන් පසු ඔබට ගිණුම් කිහිපයක් සෑදිය හැක. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + කුඩා අකුරු, ඉලක්කම්, යටි ඉරි සහ තනි ඉර පමණක් ඉඩ දෙනු ලැබේ. + + + + root is not allowed as username. + root පරිශීලක නාමයක් ලෙස අවසර නැත. + + + + What is the name of this computer? + මෙම පරිගණකයේ නම කුමක්ද? + + + + Computer Name + පරිගණක නම + + + + This name will be used if you make the computer visible to others on a network. + ඔබ පරිගණකය ජාලයක අන් අයට පෙනෙන ලෙස සලස්වන්නේ නම් මෙම නම භාවිතා වේ. + + + + localhost is not allowed as hostname. + localhost සත්කාරක නාමය ලෙස භාවිතයට අවසර නැත. + + + + Choose a password to keep your account safe. + ඔබගේ ගිණුම ආරක්ෂිතව තබා ගැනීමට මුරපදයක් තෝරන්න. + + + + Password + රහස් පදය + + + + Repeat Password + මුරපදය නැවත ඇතුල් කරන්න + + + + 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. + එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දෝෂ සඳහා පරීක්ෂා කළ හැක. හොඳ මුරපදයක අකුරු, ඉලක්කම් සහ විරාම ලකුණු මිශ්‍රණයක් අඩංගු වන අතර, අවම වශයෙන් අක්ෂර අටක්වත් දිග විය යුතු අතර නියමිත කාල පරාසයන්හිදී වෙනස් කළ යුතුය. + + + + Validate passwords quality + මුරපදවල ගුණාත්මකභාවය තහවුරු කරන්න + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + මෙම කොටුව සලකුණු කළ විට, මුරපදය-ශක්තිය පරීක්ෂා කිරීම සිදු කරනු ලබන අතර ඔබට දුර්වල මුරපදයක් භාවිතා කිරීමට නොහැකි වනු ඇත. + + + + Log in automatically without asking for the password + මුරපදය ඉල්ලන්නේ නැතිව ස්වයංක්‍රීයව ලොග් වන්න + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + අකුරු, ඉලක්කම්, යටි ඉරි සහ යටි ඉරි පමණක් ඉඩ දෙනු ලැබේ, අවම වශයෙන් අක්ෂර දෙකක්. + + + + Reuse user password as root password + පරිශීලක මුරපදය root මුරපදය ලෙස නැවත භාවිතා කරන්න + + + + Use the same password for the administrator account. + පරිපාලක ගිණුම සඳහා එකම මුරපදය භාවිතා කරන්න. + + + + Choose a root password to keep your account safe. + ඔබගේ ගිණුම ආරක්ෂිතව තබා ගැනීමට root මුරපදයක් තෝරන්න. + + + + Root Password + Root මුරපදය + + + + Repeat Root Password + Root මුරපදය නැවත ඇතුල් කරන්න + + + + Enter the same password twice, so that it can be checked for typing errors. + එකම මුරපදය දෙවරක් ඇතුල් කරන්න, එවිට එය ටයිප් කිරීමේ දෝෂ සඳහා පරීක්ෂා කළ හැක. + + + + welcomeq + + + <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> + <h3>%1 <quote>%2</quote> ස්ථාපකය වෙත සාදරයෙන් පිළිගනිමු</h3> + <p>මෙම වැඩසටහන ඔබෙන් ප්‍රශ්න කිහිපයක් අසන අතර ඔබේ පරිගණකයේ %1 පිහිටුවනු ඇත.</p> + + + + About + ගැන + + + + Support + සහාය + + + + Known issues + දන්නා ගැටළු + + + + Release notes + නිකුත් කිරීමේ සටහන් + + + + Donate + පරිත්‍යාග කරන්න + + + diff --git a/lang/calamares_sk.ts b/lang/calamares_sk.ts index d0eccf3ed..4a9c0dcbb 100644 --- a/lang/calamares_sk.ts +++ b/lang/calamares_sk.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Spravovať nastavenia automatického pripojenia + + BootInfoWidget - + 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. <strong>Zavádzacie prostredie</strong> tohto systému.<br><br>Staršie systémy architektúry x86 podporujú iba <strong>BIOS</strong>.<br>Moderné systémy obvykle používajú <strong>EFI</strong>, ale tiež sa môžu zobraziť ako BIOS, ak sú spustené v režime kompatiblitiy. - + 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. Tento systém bol spustený so zavádzacím prostredím <strong>EFI</strong>.<br><br>Na konfiguráciu spustenia z prostredia EFI, musí inštalátor umiestniť aplikáciu zavádzača, ako je <strong>GRUB</strong> alebo <strong>systemd-boot</strong> na <strong>oddiel systému EFI</strong>. Toto je vykonané automaticky, pokiaľ nezvolíte ručné rozdelenie oddielov, v tom prípade ho musíte zvoliť alebo vytvoriť ručne. - + 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. Tento systém bol spustený so zavádzacím prostredím <strong>BIOS</strong>.<br><br>Na konfiguráciu spustenia z prostredia BIOS, musí inštalátor nainštalovať zavádzač, ako je <strong>GRUB</strong>, buď na začiatok oddielu alebo na <strong>hlavný zavádzací záznam (MBR)</strong> pri začiatku tabuľky oddielov (preferované). Toto je vykonané automaticky, pokiaľ nezvolíte ručné rozdelenie oddielov, v tom prípade ho musíte nainštalovať ručne. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Hlavný zavádzací záznam (MBR) zariadenia %1 - + Boot Partition Zavádzací oddiel - + System Partition Systémový oddiel - + Do not install a boot loader Neinštalovať zavádzač - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Prázdna stránka @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Forma - + GlobalStorage Globálne úložisko - + JobQueue Fronta úloh - + Modules Moduly - + Type: Typ: - - + + none žiadny - + Interface: Rozhranie: - - Tools - Nástroje - - - - Reload Stylesheet + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + Znovu načítať hárok so štýlmi + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree Strom miniaplikácií - + Debug information Ladiace informácie @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Inštalácia - + Install Inštalácia @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Úloha zlyhala (%1) - + Programmed job failure was explicitly requested. Zlyhanie naprogramovanej úlohy bolo výlučne vyžiadané. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Hotovo @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Vzorová úloha (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Spustenie príkazu „%1“ v cieľovom systéme. - + Run command '%1'. Spustenie príkazu „%1“. - + Running command %1 %2 Spúšťa sa príkaz %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Spúšťa sa operácia %1. - + Bad working directory path Nesprávna cesta k pracovnému adresáru - + Working directory %1 for python job %2 is not readable. Pracovný adresár %1 pre úlohu jazyka python %2 nie je možné čítať. - + Bad main script file Nesprávny súbor hlavného skriptu - + Main script file %1 for python job %2 is not readable. Súbor hlavného skriptu %1 pre úlohu jazyka python %2 nie je možné čítať. - + Boost.Python error in job "%1". Chyba knižnice Boost.Python v úlohe „%1“. @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Načítava sa... - + QML Step <i>%1</i>. Krok QML <i>%1</i>. - + Loading failed. Načítavanie zlyhalo. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Kontrola požiadaviek modulu <i>%1</i> je dokončená. + - + Waiting for %n module(s). Čaká sa na %n modul. @@ -238,7 +271,7 @@ - + (%n second(s)) (%n sekunda) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. Kontrola systémových požiadaviek je dokončená. @@ -256,247 +289,237 @@ Calamares::ViewManager - - &Back - &Späť - - - - &Next - Ď&alej - - - - &Cancel - &Zrušiť - - - - Cancel setup without changing the system. - Zrušenie inštalácie bez zmien v systéme. - - - - Cancel installation without changing the system. - Zruší inštaláciu bez zmeny systému. - - - + Setup Failed Inštalácia zlyhala - - Would you like to paste the install log to the web? - Chceli by ste vložiť záznam z inštalácie na web? + + Installation Failed + Inštalácia zlyhala - + + Error + Chyba + + + + &Yes + Án&o + + + + &No + &Nie + + + + &Close + &Zavrieť + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. Odovzdanie nebolo úspešné. Nebolo dokončené žiadne webové vloženie. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed Zlyhala inicializácia inštalátora Calamares - + %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. Nie je možné nainštalovať %1. Calamares nemohol načítať všetky konfigurované moduly. Je problém s tým, ako sa Calamares používa pri distribúcii. - + <br/>The following modules could not be loaded: <br/>Nebolo možné načítať nasledujúce moduly - + + Continue with setup? + Pokračovať v inštalácii? + + + Continue with installation? Pokračovať v inštalácii? - + 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> Inštalačný program distribúcie %1 sa chystá vykonať zmeny na vašom disku, aby nainštaloval distribúciu %2. <br/><strong>Tieto zmeny nebudete môcť vrátiť späť.</strong> - + + 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> + Inštalátor distribúcie %1 sa chystá vykonať zmeny na vašom disku, aby nainštaloval distribúciu %2. <br/><strong>Tieto zmeny nebudete môcť vrátiť späť.</strong> + + + &Set up now &Inštalovať teraz - + + &Install now + &Inštalovať teraz + + + + Go &back + Prejsť s&päť + + + &Set up &Inštalovať - + &Install - _Inštalovať + &Inštalovať - + Setup is complete. Close the setup program. Inštalácia je dokončená. Zavrite inštalačný program. - + + The installation is complete. Close the installer. + Inštalácia je dokončená. Zatvorí inštalátor. + + + + Cancel setup without changing the system. + Zrušenie inštalácie bez zmien v systéme. + + + + Cancel installation without changing the system. + Zruší inštaláciu bez zmeny systému. + + + + &Next + Ď&alej + + + + &Back + &Späť + + + + &Done + &Dokončiť + + + + &Cancel + &Zrušiť + + + Cancel setup? Zrušiť inštaláciu? - + Cancel installation? Zrušiť inštaláciu? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Naozaj chcete zrušiť aktuálny priebeh inštalácie? Inštalačný program bude ukončený a zmeny budú stratené. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Skutočne chcete zrušiť aktuálny priebeh inštalácie? Inštalátor sa ukončí a všetky zmeny budú stratené. - - - - &Yes - _Áno - - - - - &No - _Nie - - - - &Close - _Zavrieť - - - - Continue with setup? - Pokračovať v inštalácii? - - - - 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> - Inštalátor distribúcie %1 sa chystá vykonať zmeny na vašom disku, aby nainštaloval distribúciu %2. <br/><strong>Tieto zmeny nebudete môcť vrátiť späť.</strong> - - - - &Install now - &Inštalovať teraz - - - - Go &back - Prejsť s&päť - - - - &Done - _Dokončiť - - - - The installation is complete. Close the installer. - Inštalácia je dokončená. Zatvorí inštalátor. - - - - Error - Chyba - - - - Installation Failed - Inštalácia zlyhala - CalamaresPython::Helper - + Unknown exception type Neznámy typ výnimky - + unparseable Python error Neanalyzovateľná chyba jazyka Python - + unparseable Python traceback Neanalyzovateľný ladiaci výstup jazyka Python - + Unfetchable Python error. Nezískateľná chyba jazyka Python. - - CalamaresUtils - - - Install log posted to: -%1 - Záznam o inštalácii bol odoslaný do: -%1 - - CalamaresWindow - - &Back - &Späť - - - - &Next - Ď&alej - - - - &Cancel - &Zrušiť - - - + %1 Setup Program Inštalačný program distribúcie %1 - + %1 Installer Inštalátor distribúcie %1 + + + ChangeFilesystemLabelJob - - Show debug information - Zobraziť ladiace informácie + + Set filesystem label on %1. + Nastavenie menovky systému súborov na %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Nastavenie menovky systému súborov <strong>%1</strong> na oddieli <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Inštalátor zlyhal pri aktualizovaní tabuľky oddielov na disku „%1“. CheckerContainer - + Gathering system information... Zbierajú sa informácie o počítači... @@ -504,157 +527,198 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. ChoicePage - + Form Forma - - After: - Potom: - - - - Boot loader location: - Umiestnenie zavádzača: - - - + Select storage de&vice: Vyberte úložné &zariadenie: - - - - + + + + Current: Teraz: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Ručné rozdelenie oddielov</strong><br/>Môžete vytvoriť, alebo zmeniť veľkosti oddielov podľa seba. Tabuľka oddielov GPT a <strong>oddiel /boot s parametrami fat32 512Mb je nevyhnutnosťou pre inštaláciu UEFI</strong>, v opačnom prípade použite existujúci oddiel bez nutnosti formátovania, alebo vytvorte nový oddiel. + + After: + Potom: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Ručné rozdelenie oddielov</strong><br/>Môžete vytvoriť alebo zmeniť veľkosť oddielov podľa seba. + + + Reuse %1 as home partition for %2. Opakované použitie oddielu %1 ako domovského pre distribúciu %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Vyberte oddiel na zmenšenie a potom potiahnutím spodného pruhu zmeňte veľkosť</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. Oddiel %1 bude zmenšený na %2MiB a nový %3MiB oddiel bude vytvorený pre distribúciu %4. - + + Boot loader location: + Umiestnenie zavádzača: + + + <strong>Select a partition to install on</strong> <strong>Vyberte oddiel, na ktorý sa má inštalovať</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Oddiel systému EFI sa nedá v tomto počítači nájsť. Prosím, prejdite späť a použite ručné rozdelenie oddielov na inštaláciu distribúcie %1. - + The EFI system partition at %1 will be used for starting %2. Oddie lsystému EFI na %1 bude použitý na spustenie distribúcie %2. - + EFI system partition: Oddiel systému EFI: - + 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. Zdá sa, že toto úložné zariadenie neobsahuje operačný systém. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Vymazanie disku</strong><br/>Týmto sa <font color="red">odstránia</font> všetky údaje momentálne sa nachádzajúce na vybranom úložnom zariadení. - - 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. - Toto úložné zariadenie obsahuje operačný systém %1. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - - - - No Swap - Bez odkladacieho priestoru - - - - Reuse Swap - Znovu použiť odkladací priestor - - - - Swap (no Hibernate) - Odkladací priestor (bez hibernácie) - - - - Swap (with Hibernate) - Odkladací priestor (s hibernáciou) - - - - Swap to file - Odkladací priestor v súbore - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Inštalácia popri súčasnom systéme</strong><br/>Inštalátor zmenší oddiel a uvoľní miesto pre distribúciu %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Nahradenie oddielu</strong><br/>Nahradí oddiel distribúciou %1. - + + 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. + Toto úložné zariadenie obsahuje operačný systém %1. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. + + + 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. Toto úložné zariadenie už obsahuje operačný systém. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. - + 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. Toto úložné zariadenie obsahuje viacero operačných systémov. Čo by ste chceli urobiť?<br/>Budete môcť skontrolovať a potvrdiť vaše voľby pred uplatnením akejkoľvek zmeny na úložnom zariadení. + + + 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/> + Toto úložné zariadenie už obsahuje operačný systém, ale tabuľka oddielov <strong>%1</strong> sa líši od požadovanej <strong>%2</strong>. +<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Toto úložné zariadenie má jeden zo svojich oddielov <strong>pripojený</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Toto úložné zariadenie je súčasťou zariadenia s <strong>neaktívnym RAIDom</strong>. + + + + No Swap + Bez odkladacieho priestoru + + + + Reuse Swap + Znovu použiť odkladací priestor + + + + Swap (no Hibernate) + Odkladací priestor (bez hibernácie) + + + + Swap (with Hibernate) + Odkladací priestor (s hibernáciou) + + + + Swap to file + Odkladací priestor v súbore + ClearMountsJob - + + Successfully unmounted %1. + Úspešne odpojený oddiel %1. + + + + Successfully disabled swap %1. + Úspešne zakázaný odkladací priestor na oddieli %1. + + + + Successfully cleared swap %1. + Úspešne vymazaný odkladací priestor na oddieli %1. + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + Úspešne zakázaná skupina zväzkov %1. + + + Clear mounts for partitioning operations on %1 Vymazať pripojenia pre operácie rozdelenia oddielov na zariadení %1 - + Clearing mounts for partitioning operations on %1. Vymazávajú sa pripojenia pre operácie rozdelenia oddielov na zariadení %1. - + Cleared all mounts for %1 Vymazané všetky pripojenia pre zariadenie %1 @@ -662,22 +726,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. ClearTempMountsJob - + Clear all temporary mounts. Vymazanie všetkých dočasných pripojení. - + Clearing all temporary mounts. Vymazávajú sa všetky dočasné pripojenia. - - Cannot get list of temporary mounts. - Nedá sa získať zoznam dočasných pripojení. - - - + Cleared all temporary mounts. Vymazané všetky dočasné pripojenia. @@ -685,18 +744,18 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. CommandList - - + + Could not run command. Nepodarilo sa spustiť príkaz. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Príkaz beží v hostiteľskom prostredí a potrebuje poznať koreňovú cestu, ale nie je definovaný žiadny koreňový prípojný bod. - + The command needs to know the user's name, but no username is defined. Príkaz musí poznať meno používateľa, ale žiadne nie je definované. @@ -704,100 +763,235 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/>Inštalácia nemôže pokračovať. <a href="#details">Podrobnosti...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/>Inštalácia nemôže pokračovať. <a href="#details">Podrobnosti...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/>Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/>Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. - - - - This program will ask you some questions and set up %2 on your computer. - Tento program vám položí niekoľko otázok a nainštaluje distribúciu %2 do vášho počítača. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Vitajte v inštalačnom programe Calamares pre distribúciu %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Vitajte pri inštalácii distribúcie %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Vitajte v aplikácii Calamares, inštalátore distribúcie %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Vitajte v inštalátore distribúcie %1.</h1> - - - + Set keyboard model to %1.<br/> Nastavenie modelu klávesnice na %1.<br/> - + Set keyboard layout to %1/%2. Nastavenie rozloženia klávesnice na %1/%2. - + + Set timezone to %1/%2. + Nastavenie časovej zóny na %1/%2. + + + The system language will be set to %1. Jazyk systému bude nastavený na %1. - + The numbers and dates locale will be set to %1. Miestne nastavenie čísel a dátumov bude nastavené na %1. - - Set timezone to %1/%2.<br/> - Nastavenie časovej zóny na %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Sieťová inštalácia. (Zakázaná: Nesprávna konfigurácia) - + Network Installation. (Disabled: Received invalid groups data) Sieťová inštalácia. (Zakázaná: Boli prijaté neplatné údaje o skupinách) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) Sieťová inštalácia. (Zakázaná: vnútorná chyba) - + + Network Installation. (Disabled: No package list) + Sieťová inštalácia. (Zakázaná: bez zoznamu balíkov) + + + + Package selection + Výber balíkov + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Sieťová inštalácia. (Zakázaná: Nie je možné získať zoznamy balíkov. Skontrolujte vaše sieťové pripojenie.) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/>Inštalácia nemôže pokračovať. <a href="#details">Podrobnosti...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/>Inštalácia nemôže pokračovať. <a href="#details">Podrobnosti...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/>Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/>Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. + + + + This program will ask you some questions and set up %2 on your computer. + Tento program vám položí niekoľko otázok a nainštaluje distribúciu %2 do vášho počítača. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Vitajte v inštalačnom programe Calamares pre distribúciu %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Vitajte pri inštalácii distribúcie %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Vitajte v aplikácii Calamares, inštalátore distribúcie %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Vitajte v inštalátore distribúcie %1</h1> + + + + Your username is too long. + Vaše používateľské meno je príliš dlhé. + + + + '%1' is not allowed as username. + „%1“ nie je možné použiť ako používateľské meno. + + + + Your username must start with a lowercase letter or underscore. + Vaše používateľské meno musí začínať malým písmenom alebo podčiarkovníkom. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Sú povolené iba malé písmená, číslice, podtržníky a pomlčky. + + + + Your hostname is too short. + Váš názov hostiteľa je príliš krátky. + + + + Your hostname is too long. + Váš názov hostiteľa je príliš dlhý. + + + + '%1' is not allowed as hostname. + „%1“ nie je možné použiť ako názov hostiteľa. + + + + Only letters, numbers, underscore and hyphen are allowed. + Sú povolené iba písmená, číslice, podtržníky a pomlčky. + + + + Your passwords do not match! + Vaše heslá sa nezhodujú! + + + + OK! + OK! + + + + Setup Failed + Inštalácia zlyhala + + + + Installation Failed + Inštalácia zlyhala + + + + The setup of %1 did not complete successfully. + Inštalácia distribúcie %1 nebola úspešne dokončená. + + + + The installation of %1 did not complete successfully. + Inštalácia distribúcie %1 bola úspešne dokončená. + + + + Setup Complete + Inštalácia dokončená + + + + Installation Complete + Inštalácia dokončená + + + + The setup of %1 is complete. + Inštalácia distribúcie %1 je dokončená. + + + + The installation of %1 is complete. + Inštalácia distribúcie %1s je dokončená. + + + + Package Selection + Výber balíkov + + + + Please pick a product from the list. The selected product will be installed. + Prosím, vyberte produkt zo zoznamu. Vybraný produkt bude nainštalovaný. + + + + Install option: <strong>%1</strong> + Voľba inštalácie: <strong>%1</strong> + + + + None + + + + + Summary + Súhrn + + + + This is an overview of what will happen once you start the setup procedure. + Toto je prehľad toho, čo sa stane, keď spustíte inštaláciu. + + + + This is an overview of what will happen once you start the install procedure. + Toto je prehľad toho, čo sa stane, keď spustíte inštaláciu. + ContextualProcessJob - + Contextual Processes Job Úloha kontextových procesov @@ -805,100 +999,136 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. CreatePartitionDialog - + Create a Partition Vytvorenie oddielu - - MiB - MiB - - - - Partition &Type: - &Typ oddielu: - - - - &Primary - &Primárny - - - - E&xtended - Ro&zšírený - - - - Fi&le System: - &Systém súborov: - - - - LVM LV name - Názov LVM LV - - - - Flags: - Príznaky: - - - - &Mount Point: - Bo&d pripojenia: - - - + Si&ze: Veľ&kosť: - + + MiB + MiB + + + + Partition &Type: + &Typ oddielu: + + + + Primar&y + H&lavný + + + + E&xtended + Ro&zšírený + + + + Fi&le System: + &Systém súborov: + + + + LVM LV name + Názov LVM LV + + + + &Mount Point: + Bo&d pripojenia: + + + + Flags: + Príznaky: + + + + Label for the filesystem + Menovka systému súborov + + + + FS Label: + Menovka SS: + + + En&crypt Zaši&frovať - + Logical Logický - + Primary Primárny - + GPT GPT - + Mountpoint already in use. Please select another one. Bod pripojenia sa už používa. Prosím, vyberte iný. + + + Mountpoint must start with a <tt>/</tt>. + Bod pripojenia musí začínať znakom <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Vytvorenie nového %1MiB oddielu na zariadení %3 (%2) so záznamami %4. + + + + Create new %1MiB partition on %3 (%2). + Vytvorenie nového %1MiB oddielu na zariadení %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Vytvorenie nového %2MiB oddielu na zariadení %4 (%3) so systémom súborov %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Vytvorenie nového <strong>%1MiB</strong> oddielu na zariadení <strong>%3</strong> (%2) so záznamami <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Vytvorenie nového <strong>%1MiB</strong> oddielu na zariadení <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Vytvorenie nového <strong>%2MiB</strong> oddielu na zariadení <strong>%4</strong> (%3) so systémom súborov <strong>%1</strong>. - + + Creating new %1 partition on %2. Vytvára sa nový %1 oddiel na zariadení %2. - + The installer failed to create partition on disk '%1'. Inštalátor zlyhal pri vytváraní oddielu na disku „%1“. @@ -906,27 +1136,27 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. CreatePartitionTableDialog - + Create Partition Table Vytvorenie tabuľky oddielov - + Creating a new partition table will delete all existing data on the disk. Vytvorením novej tabuľky oddielov sa odstránia všetky existujúce údaje na disku. - + What kind of partition table do you want to create? Ktorý typ tabuľky oddielov chcete vytvoriť? - + Master Boot Record (MBR) Hlavný zavádzací záznam (MBR) - + GUID Partition Table (GPT) Tabuľka oddielov GUID (GPT) @@ -934,22 +1164,22 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. CreatePartitionTableJob - + Create new %1 partition table on %2. Vytvoriť novú tabuľku oddielov typu %1 na zariadení %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Vytvoriť novú <strong>%1</strong> tabuľku oddielov na zariadení <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Vytvára sa nová tabuľka oddielov typu %1 na zariadení %2. - + The installer failed to create a partition table on %1. Inštalátor zlyhal pri vytváraní tabuľky oddielov na zariadení %1. @@ -957,45 +1187,41 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. CreateUserJob - + Create user %1 Vytvoriť používateľa %1 - + Create user <strong>%1</strong>. Vytvoriť používateľa <strong>%1</strong>. - - Creating user %1. - Vytvára sa používateľ %1. + + Preserving home directory + Uchováva sa domovský adresár - - Sudoers dir is not writable. - Adresár Sudoers nie je zapisovateľný. + + + Creating user %1 + Vytvára sa používateľ %1 - - Cannot create sudoers file for writing. - Nedá sa vytvoriť súbor sudoers na zapisovanie. + + Configuring user %1 + Nastavuje sa používateľ %1 - - Cannot chmod sudoers file. - Nedá sa vykonať príkaz chmod na súbori sudoers. - - - - Cannot open groups file for reading. - Nedá sa otvoriť súbor skupín na čítanie. + + Setting file permissions + Nastavujú sa oprávnenia súborov CreateVolumeGroupDialog - + Create Volume Group Vytvoriť skupinu zväzkov @@ -1003,22 +1229,22 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. CreateVolumeGroupJob - + Create new volume group named %1. Vytvorenie novej skupiny zväzkov s názvom %1. - + Create new volume group named <strong>%1</strong>. Vytvorenie novej skupiny zväzkov s názvom<strong>%1</strong>. - + Creating new volume group named %1. Vytvorenie novej skupiny zväzkov s názvom %1. - + The installer failed to create a volume group named '%1'. Inštalátor zlyhal pri vytváraní skupiny zväzkov s názvom „%1“. @@ -1026,18 +1252,18 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deaktivácia skupiny zväzkov s názvom %1. - + Deactivate volume group named <strong>%1</strong>. Deaktivácia skupiny zväzkov s názvom <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Inštalátor zlyhal pri deaktivovaní skupiny zväzkov s názvom %1. @@ -1045,22 +1271,22 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. DeletePartitionJob - + Delete partition %1. Odstrániť oddiel %1. - + Delete partition <strong>%1</strong>. Odstrániť oddiel <strong>%1</strong>. - + Deleting partition %1. Odstraňuje sa oddiel %1. - + The installer failed to delete partition %1. Inštalátor zlyhal pri odstraňovaní oddielu %1. @@ -1068,46 +1294,46 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. DeviceInfoWidget - - 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. - Typ <strong>tabuľky oddielov</strong> na vybranom úložnom zariadení.<br><br>Jediným spôsobom ako zmeniť tabuľku oddielov je vymazanie a znovu vytvorenie tabuľky oddielov od začiatku, čím sa zničia všetky údaje úložnom zariadení.<br>Inštalátor ponechá aktuálnu tabuľku oddielov, pokiaľ sa výlučne nerozhodnete inak.<br>Ak nie ste si istý, na moderných systémoch sa preferuje typ tabuľky oddielov GPT. - - - + This device has a <strong>%1</strong> partition table. Toto zariadenie obsahuje tabuľku oddielov <strong>%1</strong>. - + 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. Toto je <strong>slučkové</strong> zariadenie.<br><br>Je to pseudo-zariadenie bez tabuľky oddielov, čo umožňuje prístup k súborom ako na blokovom zariadení. Tento druh inštalácie obvykle obsahuje iba jeden systém súborov. - + 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. Inštalátor <strong>nemôže rozpoznať tabuľku oddielov</strong> na vybranom úložnom zariadení.<br><br>Zariadenie buď neobsahuje žiadnu tabuľku oddielov, alebo je tabuľka oddielov poškodená, alebo je neznámeho typu.<br>Inštalátor môže vytvoriť novú tabuľku oddielov buď automaticky alebo prostredníctvom stránky s ručným rozdelením oddielov. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Toto je odporúčaná tabuľka oddielov pre moderné systémy, ktoré sa spúšťajú zo zavádzacieho prostredia <strong>EFI</strong>. - + <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. <br><br>Tento typ tabuľky oddielov je vhodný iba pre staršie systémy, ktoré sa spúšťajú zo zavádzacieho prostredia <strong>BIOS</strong>. GPT je odporúčaná vo väčšine ďalších prípadov.<br><br><strong>Upozornenie:</strong> Tabuľka oddielov MBR je zastaralý štandard z éry operačného systému MS-DOS.<br>Môžu byť vytvorené iba 4 <em>primárne</em> oddiely a z nich môže byť jeden <em>rozšíreným</em> oddielom, ktorý môže následne obsahovať viacero <em>logických</em> oddielov. + + + 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. + Typ <strong>tabuľky oddielov</strong> na vybranom úložnom zariadení.<br><br>Jediným spôsobom ako zmeniť tabuľku oddielov je vymazanie a znovu vytvorenie tabuľky oddielov od začiatku, čím sa zničia všetky údaje úložnom zariadení.<br>Inštalátor ponechá aktuálnu tabuľku oddielov, pokiaľ sa výlučne nerozhodnete inak.<br>Ak nie ste si istý, na moderných systémoch sa preferuje typ tabuľky oddielov GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1116,17 +1342,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Zápis nastavenia LUKS pre nástroj Dracut do %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Vynechanie zápisu nastavenia LUKS pre nástroj Dracut: oddiel „/“ nie je zašifrovaný - + Failed to open %1 Zlyhalo otvorenie %1 @@ -1134,7 +1360,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. DummyCppJob - + Dummy C++ Job Fiktívna úloha jazyka C++ @@ -1142,123 +1368,167 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. EditExistingPartitionDialog - + Edit Existing Partition Úprava existujúceho oddielu - - Content: - Obsah: + + Con&tent: + O&bsah: - + &Keep &Ponechať - + Format Formátovať - + Warning: Formatting the partition will erase all existing data. Upozornenie: Naformátovaním oddielu sa vymažú všetky existujúce údaje. - + &Mount Point: Bod pripoje&nia: - + Si&ze: V&eľkosť: - + MiB MiB - + Fi&le System: S&ystém súborov: - + Flags: Príznaky: - - Mountpoint already in use. Please select another one. - Bod pripojenia sa už používa. Prosím, vyberte iný. + + Label for the filesystem + Menovka systému súborov + + + + FS Label: + Menovka SS: EncryptWidget - + Form Forma - + En&crypt system &Zašifrovať systém - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Zdá sa, že váš systém nepodporuje šifrovanie na takej úrovni, aby mohol byť zašifrovaný celý systém. Môžete povoliť šifrovanie, ale na úkor výkonu. + + + Passphrase Heslo - + Confirm passphrase Potvrdenie hesla - + + Please enter the same passphrase in both boxes. Prosím, zadajte rovnaké heslo do oboch polí. + + ErrorDialog + + + Details: + Podrobnosti: + + + + Would you like to paste the install log to the web? + Chceli by ste vložiť záznam z inštalácie na web? + + FillGlobalStorageJob - + Set partition information Nastaviť informácie o oddieli - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Nainštalovať distribúciu %1 na <strong>nový</strong> systémový oddiel %2 s funkciami <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Inštalovať distribúciu %1 na <strong>novom</strong> %2 systémovom oddieli. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Nastaviť <strong>nový</strong> %2 oddiel s bodom pripojenia <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Nastaviť <strong>nový</strong> oddiel typu %2 s bodom pripojenia <strong>%1</strong> a funkciami <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Nastaviť <strong>nový</strong> oddiel typu %2 s bodom pripojenia <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Nainštalovať distribúciu %2 na systémový oddiel <strong>%1</strong> typu %3 s funkciami <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Nastaviť oddiel <strong>%1</strong> typu %3 s bodom pripojenia <strong>%2</strong> a funkciami <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Nastaviť oddiel <strong>%1</strong> typu %3 s bodom pripojenia <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Inštalovať distribúciu %2 na %3 systémovom oddieli <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Nastaviť %3 oddiel <strong>%1</strong> s bodom pripojenia <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Inštalovať zavádzač do <strong>%1</strong>. - + Setting up mount points. Nastavujú sa body pripojení. @@ -1266,93 +1536,81 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. FinishedPage - + Form Forma - + &Restart now &Reštartovať teraz - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Všetko je dokončené.</h1><br/>Distribúcia %1 bola nainštalovaná do vášho počítača.<br/>Teraz môžete začať používať váš nový systém. - + <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> <html><head/><body><p>Keď je zaškrtnuté toto políčko, váš systém sa okamžite reštartuje po stlačení tlačidla <span style="font-style:italic;">Dokončiť</span> alebo zatvorení inštalačného programu.</p></body></html> - + <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. <h1>Všetko je dokončené.</h1><br/>Distribúcia %1 bola nainštalovaná do vášho počítača.<br/>Teraz môžete reštartovať počítač a spustiť váš nový systém, alebo pokračovať v používaní živého prostredia distribúcie %2. - + <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> <html><head/><body><p>Keď je zaškrtnuté toto políčko, váš systém sa okamžite reštartuje po stlačení tlačidla <span style="font-style:italic;">Dokončiť</span> alebo zatvorení inštalátora.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Inštalácia zlyhala</h1><br/>Distribúcia %1 nebola nainštalovaná do vášho počítača.<br/>Chybová hláška: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Inštalácia zlyhala</h1><br/>Distribúcia %1 nebola nainštalovaná do vášho počítača.<br/>Chybová hláška: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Dokončenie + + + FinishedViewStep - - Setup Complete - Inštalácia dokončená - - - - Installation Complete - Inštalácia dokončená - - - - The setup of %1 is complete. - Inštalácia distribúcie %1 je dokončená. - - - - The installation of %1 is complete. - Inštalácia distribúcie %1s je dokončená. + + Finish + Dokončenie FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Naformátovanie oddielu %1 (systém súborov: %2, veľkosť: %3 MiB) na %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Naformátovanie <strong>%3MiB</strong> oddielu <strong>%1</strong> so systémom súborov <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formátuje sa oddiel %1 so systémom súborov %2. - + The installer failed to format partition %1 on disk '%2'. Inštalátor zlyhal pri formátovaní oddielu %1 na disku „%2“. @@ -1360,72 +1618,72 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. GeneralRequirements - + has at least %1 GiB available drive space obsahuje aspoň %1 GiB voľného miesta na disku - + There is not enough drive space. At least %1 GiB is required. Nie je dostatok miesta na disku. Vyžaduje sa aspoň %1 GiB. - + has at least %1 GiB working memory obsahuje aspoň %1 GiB voľnej operačnej pamäte - + The system does not have enough working memory. At least %1 GiB is required. Počítač neobsahuje dostatok operačnej pamäte. Vyžaduje sa aspoň %1 GiB. - + is plugged in to a power source je pripojený k zdroju napájania - + The system is not plugged in to a power source. Počítač nie je pripojený k zdroju napájania. - + is connected to the Internet je pripojený k internetu - + The system is not connected to the Internet. Počítač nie je pripojený k internetu. - + is running the installer as an administrator (root) má spustený inštalátor s právami správcu (root) - + The setup program is not running with administrator rights. Inštalačný program nie je spustený s právami správcu. - + The installer is not running with administrator rights. Inštalátor nie je spustený s právami správcu. - + has a screen large enough to show the whole installer má obrazovku dostatočne veľkú na zobrazenie celého inštalátora - + The screen is too small to display the setup program. Obrazovka je príliš malá na to, aby bolo možné zobraziť inštalačný program. - + The screen is too small to display the installer. Obrazovka je príliš malá na to, aby bolo možné zobraziť inštalátor. @@ -1433,7 +1691,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. HostInfoJob - + Collecting information about your machine. Zbieranie informácií o vašom počítači. @@ -1441,25 +1699,25 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. IDJob - - + + + - OEM Batch Identifier Hromadný identifikátor výrobcu - + Could not create directories <code>%1</code>. Nepodarilo sa vytvoriť adresáre <code>%1</code>. - + Could not open file <code>%1</code>. Nepodarilo sa otvoriť súbor <code>%1</code>. - + Could not write to file <code>%1</code>. Nepodarilo sa zapísať do súboru <code>%1</code>. @@ -1467,7 +1725,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. InitcpioJob - + Creating initramfs with mkinitcpio. Vytvára sa initramfs pomocou mkinitcpio. @@ -1475,7 +1733,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. InitramfsJob - + Creating initramfs. Vytvára sa initramfs. @@ -1483,17 +1741,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. InteractiveTerminalPage - + Konsole not installed Aplikácia Konsole nie je nainštalovaná - + Please install KDE Konsole and try again! Prosím, nainštalujte Konzolu prostredia KDE a skúste to znovu! - + Executing script: &nbsp;<code>%1</code> Spúšťa sa skript: &nbsp;<code>%1</code> @@ -1501,28 +1759,15 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. InteractiveTerminalViewStep - + Script Skript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Nastavenie modelu klávesnice na %1.<br/> - - - - Set keyboard layout to %1/%2. - Nastavenie rozloženia klávesnice na %1/%2. - - KeyboardQmlViewStep - + Keyboard Klávesnica @@ -1530,7 +1775,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. KeyboardViewStep - + Keyboard Klávesnica @@ -1538,65 +1783,88 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. LCLocaleDialog - + System locale setting Miestne nastavenie systému - + 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>. Miestne nastavenie systému ovplyvní jazyk a znakovú sadu niektorých prvkov používateľského rozhrania v príkazovom riadku.<br/>Aktuálne nastavenie je <strong>%1</strong>. - + &Cancel &Zrušiť - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Konfigurácia zašifrovaného odkladacieho priestoru. + + + + No target system available. + Nie je dostupný žiadny cieľový systém. + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Forma - + <h1>License Agreement</h1> <h1>Licenčné podmienky</h1> - + I accept the terms and conditions above. Prijímam podmienky vyššie. - + Please review the End User License Agreements (EULAs). Prosím, prezrite si licenčné podmienky koncového používateľa (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. Touto inštalačnou procedúrou sa nainštaluje uzavretý softvér, ktorý je predmetom licenčných podmienok. - + If you do not agree with the terms, the setup procedure cannot continue. Bez súhlasu podmienok nemôže inštalačná procedúra pokračovať. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Tento proces inštalácie môže nainštalovať uzavretý softvér, ktorý je predmetom licenčných podmienok v rámci poskytovania dodatočných funkcií a vylepšenia používateľských skúseností. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Ak nesúhlasíte s podmienkami, uzavretý softvér nebude nainštalovaný a namiesto neho budú použité alternatívy s otvoreným zdrojom. @@ -1604,7 +1872,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. LicenseViewStep - + License Licencia @@ -1612,109 +1880,102 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Ovládač %1</strong><br/>vytvoril %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Ovládač grafickej karty %1</strong><br/><font color="Grey">vytvoril %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Zásuvný modul prehliadača %1</strong><br/><font color="Grey">vytvoril %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Kodek %1</strong><br/><font color="Grey">vytvoril %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Balík %1</strong><br/><font color="Grey">vytvoril %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">vytvoril %2</font> - + File: %1 Súbor: %1 - + + Hide license text + <br> + + + Show the license text Zobraziť licenčný text - + Open license agreement in browser. Otvoriť licenčné podmienky v prehliadači. - - - Hide license text - <br> - LocalePage - - The system language will be set to %1. - Jazyk systému bude nastavený na %1. - - - - The numbers and dates locale will be set to %1. - Miestne nastavenie čísel a dátumov bude nastavené na %1. - - - + Region: Oblasť: - + Zone: Zóna: - - + + &Change... Z&meniť... - - - Set timezone to %1/%2.<br/> - Nastavenie časovej zóny na %1/%2.<br/> - LocaleQmlViewStep - + Location Umiestnenie + + LocaleTests + + + Quit + Ukončiť + + LocaleViewStep - + Location Umiestnenie @@ -1722,35 +1983,35 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. LuksBootKeyFileJob - + Configuring LUKS key file. Nastavuje sa kľúčový súbor LUKS. - - + + No partitions are defined. Nie sú určené žiadne oddiely. - - - + + + Encrypted rootfs setup error Chyba pri inštalácii zašifrovaného koreňového súborového systému - + Root partition %1 is LUKS but no passphrase has been set. Koreňový oddiel %1 je typu LUKS, ale nebolo nastavené žiadne heslo. - + Could not create LUKS key file for root partition %1. Nepodarilo sa vytvoriť kľúčový súbor LUKS pre koreňový oddiel %1. - + Could not configure LUKS key file on partition %1. Nepodarilo sa nastaviť kľúčový súbor LUKS na oddieli %1. @@ -1758,116 +2019,131 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. MachineIdJob - + Generate machine-id. Generovanie identifikátora počítača. - + Configuration Error Chyba konfigurácie - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + Časová zóna: %1 + + + + 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. + Prosím, vyberte vaše preferované umiestnenie, aby mohol inštalátor pre vás navrhnúť + miestne nastavenia a časovú zónu. Navrhnuté nastavenia môžete doladiť nižšie. Mapu môžete presúvať ťahaním a približovať alebo odďaľovať tlačidlami +/- alebo rolovaním myšou. + + NetInstallViewStep - - + Package selection Výber balíkov - + Office software Kancelársky softvér - + Office package Kancelársky balík - + Browser software Prehliadač - + Browser package Balík prehliadača - + Web browser Webový prehliadač - + Kernel Jadro - + Services Služby - + Login Prihlásenie - + Desktop Pracovné prostredie - + Applications Aplikácie - + Communication Komunikácia - + Development Vývoj - + Office Kancelária - + Multimedia Multimédiá - + Internet Internet - + Theming Motívy - + Gaming Hry - + Utilities Nástroje @@ -1875,7 +2151,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. NotesQmlViewStep - + Notes Poznámky @@ -1883,17 +2159,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. OEMPage - + Ba&tch: H&romadne: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Sem zadajte hromadný identifikátor. Bude uložený v cieľovom systéme.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Konfigurácia od výrobcu</h1><p>Inštalátor Calamares použije nastavenia od výrobcu pri konfigurácii cieľového systému.</p></body></html> @@ -1901,260 +2177,335 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. OEMViewStep - + OEM Configuration Konfigurácia od výrobcu - + Set the OEM Batch Identifier to <code>%1</code>. Nastavenie hromadného identifikátora výrobcu na <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Vyberte vami uprednostňovanú oblasť, alebo použite predvolené nastavenia. + + + + + + Timezone: %1 + Časová zóna: %1 + + + + Select your preferred Zone within your Region. + Vyberte uprednostňovanú zónu vo vašej oblasti. + + + + Zones + Zóny + + + + You can fine-tune Language and Locale settings below. + Nižšie môžete doladiť nastavenia jazyka a miestne nastavenia. + + PWQ - + Password is too short Heslo je príliš krátke - + Password is too long Heslo je príliš dlhé - + Password is too weak Heslo je príliš slabé - + Memory allocation error when setting '%1' Chyba počas vyhradzovania pamäte pri nastavovaní „%1“ - + Memory allocation error Chyba počas vyhradzovania pamäte - + The password is the same as the old one Heslo je rovnaké ako to staré - + The password is a palindrome Heslo je palindróm - + The password differs with case changes only Heslo sa odlišuje iba vo veľkosti písmen - + The password is too similar to the old one Heslo je príliš podobné ako to staré - + The password contains the user name in some form Heslo obsahuje v nejakom tvare používateľské meno - + The password contains words from the real name of the user in some form Heslo obsahuje v nejakom tvare slová zo skutočného mena používateľa - + The password contains forbidden words in some form Heslo obsahuje zakázané slová v určitom tvare - - The password contains less than %1 digits - Heslo obsahuje menej ako %1 číslic - - - + The password contains too few digits Heslo tiež obsahuje pár číslic - - The password contains less than %1 uppercase letters - Heslo obsahuje menej ako %1 veľkých písmen - - - + The password contains too few uppercase letters Heslo obsahuje príliš málo veľkých písmen - - - The password contains less than %1 lowercase letters - Heslo obsahuje menej ako %1 malých písmen + + + The password contains fewer than %n lowercase letters + + Heslo obsahuje menej ako %n malé písmeno + Heslo obsahuje menej ako %n malé písmená + Heslo obsahuje menej ako %n malého písmena + Heslo obsahuje menej ako %n malých písmen + - + The password contains too few lowercase letters Heslo obsahuje príliš málo malých písmen - - The password contains less than %1 non-alphanumeric characters - Heslo obsahuje menej ako% 1 nealfanumerických znakov - - - + The password contains too few non-alphanumeric characters Heslo obsahuje príliš málo nealfanumerických znakov - - The password is shorter than %1 characters - Heslo je kratšie ako %1 znakov - - - + The password is too short Heslo je príliš krátke - - The password is just rotated old one - Heslo je iba obrátené staré heslo - - - - The password contains less than %1 character classes - Heslo obsahuje menej ako %1 triedy znakov - - - + The password does not contain enough character classes Heslo neobsahuje dostatok tried znakov - - The password contains more than %1 same characters consecutively - Heslo obsahuje viac ako% 1 rovnakých znakov za sebou - - - + The password contains too many same characters consecutively Heslo obsahuje príliš veľa rovnakých znakov - - The password contains more than %1 characters of the same class consecutively - Heslo obsahuje postupne viac ako% 1 znakov toho istého typu - - - + The password contains too many characters of the same class consecutively Heslo obsahuje postupne príliš veľa znakov toho istého typu - - - The password contains monotonic sequence longer than %1 characters - Heslo obsahuje monotónnu sekvenciu dlhšiu ako %1 znakov + + + The password contains fewer than %n digits + + Heslo obsahuje menej ako %n číslo + Heslo obsahuje menej ako %n čísla + Heslo obsahuje menej ako %n čísla + Heslo obsahuje menej ako %n čísel + + + + + The password contains fewer than %n uppercase letters + + Heslo obsahuje menej ako %n veľké písmeno + Heslo obsahuje menej ako %n veľké písmená + Heslo obsahuje menej ako %n veľkého písmena + Heslo obsahuje menej ako %n veľkých písmen + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + + The password is shorter than %n characters + + Heslo je kratšie ako %n znak + Heslo je kratšie ako %n znaky + Heslo je kratšie ako %n znaku + Heslo je kratšie ako %n znakov + - + + The password is a rotated version of the previous one + Heslo je obrátená verzia predošlého hesla + + + + The password contains fewer than %n character classes + + Heslo obsahuje menej ako %n triedu znakov + Heslo obsahuje menej ako %n triedy znakov + Heslo obsahuje menej ako %n triedy znakov + Heslo obsahuje menej ako %n tried znakov + + + + + The password contains more than %n same characters consecutively + + Heslo obsahuje viac ako %n rovnaký znak opakujúci sa po sebe + Heslo obsahuje viac ako %n rovnaké znaky opakujúce sa po sebe + Heslo obsahuje viac ako %n rovnakého znaku opakujúceho sa po sebe + Heslo obsahuje viac ako %n rovnakých znakov opakujúcich sa po sebe + + + + + The password contains more than %n characters of the same class consecutively + + Heslo obsahuje viac ako %n znak rovnakej triedy opakujúci sa po sebe + Heslo obsahuje viac ako %n znaky rovnakej triedy opakujúce sa po sebe + Heslo obsahuje viac ako %n znaku rovnakej triedy opakujúceho sa po sebe + Heslo obsahuje viac ako %n znakov rovnakej triedy opakujúcich sa po sebe + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + + The password contains too long of a monotonic character sequence Heslo obsahuje príliš dlhú sekvenciu monotónnych znakov - + No password supplied Nebolo poskytnuté žiadne heslo - + Cannot obtain random numbers from the RNG device Nedajú sa získať náhodné čísla zo zariadenia RNG - + Password generation failed - required entropy too low for settings Generovanie hesla zlyhalo - potrebná entropia je príliš nízka na nastavenie - + The password fails the dictionary check - %1 Heslo zlyhalo pri slovníkovej kontrole - %1 - + The password fails the dictionary check Heslo zlyhalo pri slovníkovej kontrole - + Unknown setting - %1 Neznáme nastavenie - %1 - + Unknown setting Neznáme nastavenie - + Bad integer value of setting - %1 Nesprávna celočíselná hodnota nastavenia - %1 - + Bad integer value Nesprávna celočíselná hodnota - + Setting %1 is not of integer type Nastavenie %1 nie je celé číslo - + Setting is not of integer type Nastavenie nie je celé číslo - + Setting %1 is not of string type Nastavenie %1 nie je reťazec - + Setting is not of string type Nastavenie nie je reťazec - + Opening the configuration file failed Zlyhalo otváranie konfiguračného súboru - + The configuration file is malformed Konfiguračný súbor je poškodený - + Fatal failure Závažné zlyhanie - + Unknown error Neznáma chyba - + Password is empty Heslo je prázdne @@ -2162,40 +2513,48 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PackageChooserPage - + Form Forma - + Product Name Názov produktu - + TextLabel Textová menovka - + Long Product Description Dlhý popis produktu - + Package Selection Výber balíkov - + Please pick a product from the list. The selected product will be installed. Prosím, vyberte produkt zo zoznamu. Vybraný produkt bude nainštalovaný. + + PackageChooserQmlViewStep + + + Packages + Balíky + + PackageChooserViewStep - + Packages Balíky @@ -2203,12 +2562,12 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PackageModel - + Name Názov - + Description Popis @@ -2216,17 +2575,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Page_Keyboard - + Form Forma - + Keyboard Model: Model klávesnice: - + Type here to test your keyboard Tu môžete písať na odskúšanie vašej klávesnice @@ -2234,96 +2593,96 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Page_UserSetup - + Form Forma - + What is your name? Aké je vaše meno? - - What name do you want to use to log in? - Aké meno chcete použiť na prihlásenie? - - - - Choose a password to keep your account safe. - Zvoľte heslo pre zachovanie vášho účtu v bezpečí. - - - - - <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> - <small>Zadajte rovnaké heslo dvakrát, aby sa predišlo preklepom. Dobré heslo by malo obsahovať mix písmen, čísel a diakritiky, malo by mať dĺžku aspoň osem znakov a malo by byť pravidelne menené.</small> - - - - What is the name of this computer? - Aký je názov tohto počítača? - - - + Your Full Name Vaše celé meno - + + What name do you want to use to log in? + Aké meno chcete použiť na prihlásenie? + + + login prihlásenie - + + What is the name of this computer? + Aký je názov tohto počítača? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Tento názov bude použitý, keď sprístupníte počítač v sieti.</small> - + Computer Name Názov počítača - - + + Choose a password to keep your account safe. + Zvoľte heslo pre zachovanie vášho účtu v bezpečí. + + + + + <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> + <small>Zadajte rovnaké heslo dvakrát, aby sa predišlo preklepom. Dobré heslo by malo obsahovať mix písmen, čísel a diakritiky, malo by mať dĺžku aspoň osem znakov a malo by byť pravidelne menené.</small> + + + + Password Heslo - - + + Repeat Password Zopakovanie hesla - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Keď je zaškrtnuté toto políčko, kontrola kvality hesla bude ukončená a nebudete môcť použiť slabé heslo. - + Require strong passwords. - Vyžadujú sa silné heslá. + Požadovať silné heslá. - + Log in automatically without asking for the password. Prihlásiť automaticky bez pýtania hesla. - + Use the same password for the administrator account. Použiť rovnaké heslo pre účet správcu. - + Choose a password for the administrator account. Zvoľte heslo pre účet správcu. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Zadajte rovnaké heslo dvakrát, aby sa predišlo preklepom.</small> @@ -2331,42 +2690,42 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PartitionLabelsView - + Root Koreňový adresár - + Home Domovský adresár - + Boot Zavádzač - + EFI system Systém EFI - + Swap Odkladací priestor - + New partition for %1 Nový oddiel pre %1 - + New partition Nový oddiel - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2375,34 +2734,39 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PartitionModel - - + + Free Space Voľné miesto - - + + New partition Nový oddiel - + Name Názov - + File System Systém súborov - + + File System Label + Menovka systému súborov + + + Mount Point Bod pripojenia - + Size Veľkosť @@ -2410,77 +2774,77 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PartitionPage - + Form Forma - + Storage de&vice: Úložné zar&iadenie: - + &Revert All Changes V&rátiť všetky zmeny - + New Partition &Table Nová &tabuľka oddielov - + Cre&ate Vytvoriť - + &Edit &Upraviť - + &Delete O&dstrániť - + New Volume Group Nová skupina zväzkov - + Resize Volume Group Zmeniť veľkosť skupiny zväzkov - + Deactivate Volume Group Deaktivovať skupinu zväzkov - + Remove Volume Group Odstrániť skupinu zväzkov - + I&nstall boot loader on: Nai&nštalovať zavádzač na: - + Are you sure you want to create a new partition table on %1? Naozaj chcete vytvoriť novú tabuľku oddielov na zariadení %1? - + Can not create new partition Nedá sa vytvoriť nový oddiel - + 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. Tabuľka oddielov na %1 už obsahuje primárne oddiely %2 a nie je možné pridávať žiadne ďalšie. Odstráňte jeden primárny oddiel a namiesto toho pridajte rozšírenú oblasť. @@ -2488,117 +2852,107 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PartitionViewStep - + Gathering system information... Zbierajú sa informácie o počítači... - + Partitions Oddiely - - Install %1 <strong>alongside</strong> another operating system. - Inštalácia distribúcie %1 <strong>popri</strong> inom operačnom systéme. + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>Vymazanie</strong> disku a inštalácia distribúcie %1. + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - <strong>Nahradenie</strong> oddielu distribúciou %1. + + No partitions will be changed. + Nebudú zmenené žiadne oddiely. - - <strong>Manual</strong> partitioning. - <strong>Ručné</strong> rozdelenie oddielov. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Inštalácia distribúcie %1 <strong>popri</strong> inom operačnom systéme na disku <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Vymazanie</strong> disku <strong>%2</strong> (%3) a inštalácia distribúcie %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Nahradenie</strong> oddielu na disku <strong>%2</strong> (%3) distribúciou %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Ručné</strong> rozdelenie oddielov na disku <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Teraz: - + After: Potom: - + No EFI system partition configured Nie je nastavený žiadny oddiel systému EFI - - 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>esp</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. - Oddiel systému EFI je potrebný pre spustenie distribúcie %1.<br/><br/>Na nastavenie oddielu systému EFI prejdite späť a vyberte, alebo vytvorte systém súborov FAT32 s povoleným príznakom <strong>esp</strong> a bod pripojenia <strong>%2</strong>.<br/><br/>Môžete pokračovať bez nastavenia oddielu systému EFI, ale váš systém môže pri spustení zlyhať. + + EFI system partition configured incorrectly + Systémový oddiel EFI nie je správne nastavený - - EFI system partition flag not set - Príznak oddielu systému EFI nie je nastavený + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Na spustenie distribúcie %1 je potrebný systémový oddiel EFI.<br/><br/>Na konfiguráciu systémového oddielu EFI, prejdite späť a vyberte alebo vytvorte vhodný systém súborov. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Oddiel systému EFI je potrebný pre spustenie distribúcie %1.<br/><br/>Oddiel bol nastavený s bodom pripojenia <strong>%2</strong>, ale nemá nastavený príznak <strong>esp</strong>.<br/>Na nastavenie príznaku prejdite späť a upravte oddiel.<br/><br/>Môžete pokračovať bez nastavenia príznaku, ale váš systém môže pri spustení zlyhať. + + The filesystem must be mounted on <strong>%1</strong>. + Systém súborov musí byť pripojený do <strong>%1</strong>. - + + The filesystem must have type FAT32. + Systém súborov musí byť typu FAT32. + + + + The filesystem must be at least %1 MiB in size. + Systém súborov musí mať veľkosť aspoň %1. + + + + The filesystem must have flag <strong>%1</strong> set. + Systém súborov musí mať nastavený príznak <strong>%1 . + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Môžete pokračovať bez nastavenia systémového oddielu EFI, ale váš systém môže zlyhať pri spúšťaní. + + + Option to use GPT on BIOS Voľba na použitie tabuľky GPT s BIOSom - - 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. - Tabuľka oddielov GPT je najlepšou voľbou pre všetky systémy. Inštalátor podporuje taktiež inštaláciu pre systémy s BIOSom.<br/><br/>Pre nastavenie tabuľky oddielov GPT s BIOSom, (ak ste tak už neučinili) prejdite späť a nastavte tabuľku oddielov na GPT, a potom vytvorte nenaformátovaný oddiel o veľkosti 8 MB s povoleným príznakom <strong>bios_grub</strong>.<br/><br/>Nenaformátovaný oddiel o veľkosti 8 MB je potrebná na spustenie distribúcie %1 na systéme s BIOSom a tabuľkou GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + Tabuľka oddielov GPT je najlepšou voľbou pre všetky systémy. Inštalátor podporuje taktiež inštaláciu pre systémy s BIOSom.<br/><br/>Pre nastavenie tabuľky oddielov GPT s BIOSom, (ak ste tak už neučinili) prejdite späť a nastavte tabuľku oddielov na GPT, a potom vytvorte nenaformátovaný oddiel o veľkosti 8 MB s povoleným príznakom <strong>%2</strong>.<br/><br/>Nenaformátovaný oddiel o veľkosti 8 MB je potrebný na spustenie distribúcie %1 na systéme s BIOSom a tabuľkou GPT. - + Boot partition not encrypted Zavádzací oddiel nie je zašifrovaný - + 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. Spolu so zašifrovaným koreňovým oddielom bol nainštalovaný oddelený zavádzací oddiel, ktorý ale nie je zašifrovaný.<br/><br/>S týmto typom inštalácie je ohrozená bezpečnosť, pretože dôležité systémové súbory sú uchovávané na nezašifrovanom oddieli.<br/>Ak si to želáte, môžete pokračovať, ale neskôr, počas spúšťania systému sa vykoná odomknutie systému súborov.<br/>Na zašifrovanie zavádzacieho oddielu prejdite späť a vytvorte ju znovu vybraním voľby <strong>Zašifrovať</strong> v okne vytvárania oddielu. - + has at least one disk device available. má dostupné aspoň jedno diskové zariadenie. - + There are no partitions to install on. Neexistujú žiadne oddiely, na ktoré je možné vykonať inštaláciu. @@ -2606,13 +2960,13 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PlasmaLnfJob - + Plasma Look-and-Feel Job Úloha vzhľadu a dojmu prostredia Plasma - - + + Could not select KDE Plasma Look-and-Feel package Nepodarilo sa vybrať balík vzhľadu a dojmu prostredia KDE Plasma @@ -2620,17 +2974,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PlasmaLnfPage - + Form Forma - + 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. Prosím, zvoľte "look-and-feel" pre pracovné prostredie KDE Plasma. Tento krok môžete preskočiť po nastavení systému. Kliknutím na výber "look-and-feel" sa zobrazí živý náhľad daného vzhľadu a dojmu. - + 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. Prosím, zvoľte vzhľad a dojem pre pracovné prostredie KDE Plasma. Tento krok môžete preskočiť a nastaviť vzhľad a dojem po inštalácii systému. Kliknutím na výber Vzhľad a dojem sa zobrazí živý náhľad daného vzhľadu a dojmu. @@ -2638,7 +2992,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PlasmaLnfViewStep - + Look-and-Feel Vzhľad a dojem @@ -2646,17 +3000,17 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. PreserveFiles - + Saving files for later ... Ukladajú sa súbory na neskôr... - + No files configured to save for later. Žiadne konfigurované súbory pre uloženie na neskôr. - + Not all of the configured files could be preserved. Nie všetky konfigurované súbory môžu byť uchované. @@ -2664,14 +3018,14 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. ProcessResult - + There was no output from the command. Žiadny výstup z príkazu. - + Output: @@ -2680,52 +3034,52 @@ Výstup: - + External command crashed. Externý príkaz nečakane skončil. - + Command <i>%1</i> crashed. Príkaz <i>%1</i> nečakane skončil. - + External command failed to start. Zlyhalo spustenie externého príkazu. - + Command <i>%1</i> failed to start. Zlyhalo spustenie príkazu <i>%1</i> . - + Internal error when starting command. Počas spúšťania príkazu sa vyskytla interná chyba. - + Bad parameters for process job call. Nesprávne parametre pre volanie úlohy procesu. - + External command failed to finish. Zlyhalo dokončenie externého príkazu. - + Command <i>%1</i> failed to finish in %2 seconds. Zlyhalo dokončenie príkazu <i>%1</i> počas doby %2 sekúnd. - + External command finished with errors. Externý príkaz bol dokončený s chybami. - + Command <i>%1</i> finished with exit code %2. Príkaz <i>%1</i> skončil s ukončovacím kódom %2. @@ -2733,89 +3087,95 @@ Výstup: QObject - - Default Keyboard Model - Predvolený model klávesnice - - - - - Default - Predvolený - - - - unknown - neznámy - - - - extended - rozšírený - - - - unformatted - nenaformátovaný - - - - swap - odkladací - - - - Unpartitioned space or unknown partition table - Nerozdelené miesto alebo neznáma tabuľka oddielov - - - - (no mount point) - (žiadny bod pripojenia) - - - - Requirements checking for module <i>%1</i> is complete. - Kontrola požiadaviek modulu <i>%1</i> je dokončená. - - - + %1 (%2) %1 (%2) - - No product - Žiadny produkt + + unknown + neznámy - - No description provided. - Nie je poskytnutý żiadny popis. + + extended + rozšírený - - - - + + unformatted + nenaformátovaný + + + + swap + odkladací + + + + + Default + Predvolený + + + + + + File not found Súbor sa nenašiel - + Path <pre>%1</pre> must be an absolute path. Cesta <pre>%1</pre> musí byť úplnou cestou. - + + Directory not found + Adresár sa nenašiel + + + + Could not create new random file <pre>%1</pre>. Nepodarilo sa vytvoriť nový náhodný súbor <pre>%1</pre>. + + + No product + Žiadny produkt + + + + No description provided. + Nie je poskytnutý żiadny popis. + + + + (no mount point) + (žiadny bod pripojenia) + + + + Unpartitioned space or unknown partition table + Nerozdelené miesto alebo neznáma tabuľka oddielov + + + + Recommended + + + <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> + <p>Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/> +  Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané.</p> + RemoveUserJob - + Remove live user from target system Odstránenie live používateľa z cieľového systému @@ -2823,18 +3183,18 @@ Výstup: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Odstránenie skupiny zväzkov s názvom %1. - + Remove Volume Group named <strong>%1</strong>. Odstránenie skupiny s názvom <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Inštalátor zlyhal pri odstraňovaní skupiny zväzkov s názvom „%1“. @@ -2842,143 +3202,160 @@ Výstup: ReplaceWidget - + Form Forma - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Vyberte, kam sa má nainštalovať distribúcia %1.<br/><font color="red">Upozornenie: </font>týmto sa odstránia všetky súbory na vybranom oddieli. - + The selected item does not appear to be a valid partition. Zdá sa, že vybraná položka nie je platným oddielom. - + %1 cannot be installed on empty space. Please select an existing partition. Distribúcia %1 sa nedá nainštalovať na prázdne miesto. Prosím, vyberte existujúci oddiel. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. Distribúcia %1 sa nedá nainštalovať na rozšírený oddiel. Prosím, vyberte existujúci primárny alebo logický oddiel. - + %1 cannot be installed on this partition. Distribúcia %1 sa nedá nainštalovať na tento oddiel. - + Data partition (%1) Údajový oddiel (%1) - + Unknown system partition (%1) Neznámy systémový oddiel (%1) - + %1 system partition (%2) Systémový oddiel operačného systému %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Oddiel %1 je príliš malý pre distribúciu %2. Prosím, vyberte oddiel s kapacitou aspoň %3 GiB. - + <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. <strong>%2</strong><br/><br/>Oddiel systému EFI sa nedá v tomto počítači nájsť. Prosím, prejdite späť a použite ručné rozdelenie oddielov na inštaláciu distribúcie %1. - - - + + + <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. <strong>%3</strong><br/><br/>Distribúcia %1 bude nainštalovaná na oddiel %2.<br/><font color="red">Upozornenie: </font>všetky údaje na oddieli %2 budú stratené. - + The EFI system partition at %1 will be used for starting %2. Oddiel systému EFI na %1 bude použitý pre spustenie distribúcie %2. - + EFI system partition: Oddiel systému EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/> +  Inštalácia nemôže pokračovať.</p> + + + + <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> + <p>Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/> +  Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. + + ResizeFSJob - + Resize Filesystem Job Úloha zmeny veľkosti systému súborov - + Invalid configuration Neplatná konfigurácia - + The file-system resize job has an invalid configuration and will not run. Úloha zmeny veľkosti systému súborov má neplatnú konfiguráciu a nebude spustená. - + KPMCore not Available Jadro KPMCore nie je dostupné - + Calamares cannot start KPMCore for the file-system resize job. Inštalátor Calamares nemôže spustiť jadro KPMCore pre úlohu zmeny veľkosti systému súborov. - - - - - + + + + + Resize Failed Zlyhala zmena veľkosti - + The filesystem %1 could not be found in this system, and cannot be resized. Systém súborov %1 sa nepodarilo nájsť v tomto systéme a nemôže sa zmeniť jeho veľkosť. - + The device %1 could not be found in this system, and cannot be resized. Zariadenie %1 sa nepodarilo nájsť v tomto systéme a nemôže sa zmeniť jeho veľkosť. - - + + The filesystem %1 cannot be resized. Nedá sa zmeniť veľkosť systému súborov %1. - - + + The device %1 cannot be resized. Nedá sa zmeniť veľkosť zariadenia %1. - + The filesystem %1 must be resized, but cannot. Musí sa zmeniť veľkosť systému súborov %1, ale nedá sa vykonať. - + The device %1 must be resized, but cannot Musí sa zmeniť veľkosť zariadenia %1, ale nedá sa vykonať. @@ -2986,22 +3363,22 @@ Výstup: ResizePartitionJob - + Resize partition %1. Zmena veľkosti oddielu %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Zmena veľkosti <strong>%2MiB</strong> oddielu <strong>%1</strong> na <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Mení sa veľkosť %2MiB oddielu %1 na %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Inštalátor zlyhal pri zmene veľkosti oddielu %1 na disku „%2“. @@ -3009,7 +3386,7 @@ Výstup: ResizeVolumeGroupDialog - + Resize Volume Group Zmeniť veľkosť skupiny zväzkov @@ -3017,18 +3394,18 @@ Výstup: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Zmena veľkosti skupiny zväzkov s názvom %1 z %2 na %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Zmena veľkosti skupiny zväzkov s názvom <strong>%1</strong> z <strong>%2</strong> na <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Inštalátor zlyhal pri zmene veľkosti skupiny zväzkov s názvom „%1“. @@ -3036,53 +3413,25 @@ Výstup: ResultsListDialog - + For best results, please ensure that this computer: Pre čo najlepší výsledok, sa prosím, uistite, že tento počítač: - + System requirements Systémové požiadavky - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/>Inštalácia nemôže pokračovať. <a href="#details">Podrobnosti...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Tento počítač nespĺňa minimálne požiadavky pre inštaláciu distribúcie %1.<br/>Inštalácia nemôže pokračovať. <a href="#details">Podrobnosti...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/>Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Tento počítač nespĺňa niektoré z odporúčaných požiadaviek pre inštaláciu distribúcie %1.<br/>Inštalácia môže pokračovať, ale niektoré funkcie môžu byť zakázané. - - - - This program will ask you some questions and set up %2 on your computer. - Tento program vám položí niekoľko otázok a nainštaluje distribúciu %2 do vášho počítača. - - ScanningDialog - + Scanning storage devices... Prehľadávajú sa úložné zariadenia... - + Partitioning Rozdelenie oddielov @@ -3090,29 +3439,29 @@ Výstup: SetHostNameJob - + Set hostname %1 Nastavenie názvu hostiteľa %1 - + Set hostname <strong>%1</strong>. Nastavenie názvu hostiteľa <strong>%1</strong>. - + Setting hostname %1. Nastavuje sa názov hostiteľa %1. + - Internal Error Vnútorná chyba - - + + Cannot write hostname to target system Nedá sa zapísať názov hostiteľa do cieľového systému @@ -3120,29 +3469,29 @@ Výstup: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Nastavenie modelu klávesnice na %1 a rozloženia na %2-%3 - + Failed to write keyboard configuration for the virtual console. Zlyhalo zapísanie nastavenia klávesnice pre virtuálnu konzolu. - - - + + + Failed to write to %1 Zlyhalo zapísanie do %1 - + Failed to write keyboard configuration for X11. Zlyhalo zapísanie nastavenia klávesnice pre server X11. - + Failed to write keyboard configuration to existing /etc/default directory. Zlyhalo zapísanie nastavenia klávesnice do existujúceho adresára /etc/default. @@ -3150,82 +3499,82 @@ Výstup: SetPartFlagsJob - + Set flags on partition %1. Nastavenie príznakov na oddieli %1. - + Set flags on %1MiB %2 partition. Nastavenie príznakov na %1MiB oddieli %2. - + Set flags on new partition. Nastavenie príznakov na novom oddieli. - + Clear flags on partition <strong>%1</strong>. Vymazanie príznakov na oddieli <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Vymazanie príznakov na %1MiB oddieli <strong>%2</strong>. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Nastavenie príznaku %1MiB oddielu <strong>%2</strong> na <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Vymazávajú sa príznaky na %1MiB oddieli <strong>%2</strong>. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Nastavujú sa príznaky <strong>%3</strong> na %1MiB oddieli <strong>%2</strong>. - - - + Clear flags on new partition. Vymazanie príznakov na novom oddieli. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Nastavenie príznaku <strong>%1</strong> na <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Nastavenie príznaku %1MiB oddielu <strong>%2</strong> na <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Nastavenie príznaku nového oddielu na <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Vymazávajú sa príznaky na oddieli <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Vymazávajú sa príznaky na %1MiB oddieli <strong>%2</strong>. + + + Clearing flags on new partition. Vymazávajú sa príznaky na novom oddieli. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Nastavujú sa príznaky <strong>%2</strong> na oddieli <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Nastavujú sa príznaky <strong>%3</strong> na %1MiB oddieli <strong>%2</strong>. + + + Setting flags <strong>%1</strong> on new partition. Nastavujú sa príznaky <strong>%1</strong> na novom oddieli. - + The installer failed to set flags on partition %1. Inštalátor zlyhal pri nastavovaní príznakov na oddieli %1. @@ -3233,42 +3582,42 @@ Výstup: SetPasswordJob - + Set password for user %1 Nastavenie hesla pre používateľa %1 - + Setting password for user %1. Nastavuje sa heslo pre používateľa %1. - + Bad destination system path. Nesprávny cieľ systémovej cesty. - + rootMountPoint is %1 rootMountPoint je %1 - + Cannot disable root account. Nedá sa zakázať účet správcu. - + passwd terminated with error code %1. Príkaz passwd ukončený s chybovým kódom %1. - + Cannot set password for user %1. Nedá sa nastaviť heslo pre používateľa %1. - + usermod terminated with error code %1. Príkaz usermod ukončený s chybovým kódom %1. @@ -3276,45 +3625,82 @@ Výstup: SetTimezoneJob - + Set timezone to %1/%2 Nastavenie časovej zóny na %1/%2 - + Cannot access selected timezone path. Nedá sa získať prístup k vybranej ceste časovej zóny. - + Bad path: %1 Nesprávna cesta: %1 - + Cannot set timezone. Nedá sa nastaviť časová zóna. - + Link creation failed, target: %1; link name: %2 Zlyhalo vytvorenie odakzu, cieľ: %1; názov odkazu: %2 - + Cannot set timezone, Nedá sa nastaviť časová zóna, - + Cannot open /etc/timezone for writing Nedá sa otvoriť cesta /etc/timezone pre zapisovanie + + SetupGroupsJob + + + Preparing groups. + Pripravujú sa skupiny. + + + + + Could not create groups in target system + Nepodarilo sa vytvoriť skupiny v cieľovom systéme + + + + These groups are missing in the target system: %1 + Tieto skupiny chýbajú v cieľovom systéme: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Konfigurácia používateľov skupiny <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + Nedá sa vykonať príkaz chmod na súbori sudoers. + + + + Cannot create sudoers file for writing. + Nedá sa vytvoriť súbor sudoers na zapisovanie. + + ShellProcessJob - + Shell Processes Job Úloha procesov príkazového riadku @@ -3322,81 +3708,117 @@ Výstup: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Toto je prehľad toho, čo sa stane, keď spustíte inštaláciu. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Toto je prehľad toho, čo sa stane, keď spustíte inštaláciu. + + &Yes + Án&o - - - SummaryViewStep - - Summary - Súhrn + + &No + &Nie + + + + &Cancel + &Zrušiť + + + + &Close + &Zavrieť TrackingInstallJob - + Installation feedback Spätná väzba inštalácie - + Sending installation feedback. Odosiela sa spätná väzba inštalácie. - + Internal error in install-tracking. Interná chyba príkazu install-tracking. - + HTTP request timed out. Požiadavka HTTP vypršala. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Používateľská spätná väzba prostredia KDE + + + + Configuring KDE user feedback. + Nastavuje sa používateľská spätná väzba prostredia KDE. + + + + + Error in KDE user feedback configuration. + Chyba pri nastavovaní používateľskej spätnej väzby prostredia KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Nepodarilo sa správne nastaviť používateľskú spätnú väzbu prostredia KDE. Chyba %1 skriptu. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Nepodarilo sa správne nastaviť používateľskú spätnú väzbu prostredia KDE. Chyba %1 inštalátora Calamares. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Spätná väzba počítača - + Configuring machine feedback. Nastavuje sa spätná väzba počítača. - - + + Error in machine feedback configuration. Chyba pri nastavovaní spätnej väzby počítača. - + Could not configure machine feedback correctly, script error %1. Nepodarilo sa správne nastaviť spätnú väzbu počítača. Chyba skriptu %1. - + Could not configure machine feedback correctly, Calamares error %1. Nepodarilo sa správne nastaviť spätnú väzbu počítača. Chyba inštalátora Calamares %1. @@ -3404,106 +3826,97 @@ Výstup: TrackingPage - + Form Forma - + Placeholder Zástupný text - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Výberom tejto voľby neodošlete <span style=" font-weight:600;">žiadne informácie</span> o vašej inštalácii.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Kliknutím sem neodošlete <span style=" font-weight:600;">absolútne žiadne informácie</span> o vašej inštalácii.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Kliknutím sem získate viac informácií o spätnej väzbe od používateľa</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Inštalácia sledovania pomáha distribúcii %1 vidieť, koľko používateľov ju používa, na akom hardvéri inštalujú distribúciu %1 a (s poslednými dvoma voľbami nižšie) získavať nepretržité informácie o uprednostňovaných aplikáciách. Na zobrazenie, čo bude odosielané, prosím, kliknite na ikonu pomocníka vedľa každej oblasti. + + 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. + - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Vybraním tejto voľby odošlete informácie o vašej inštalácii a hardvéri. Tieto informácie budú <b>odoslané iba raz</b> po dokončení inštalácie. + + 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. + Vybraním tejto voľby odošlete informácie o vašej inštalácii a hardvéri. Tieto informácie budú odoslané <b>iba raz</b> po dokončení inštalácie. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Vybraním tejto voľby budete <b>pravidelne</b> odosielať informácie o vašej inštalácii, hardvéri a aplikáciách distribúcii %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Vybraním tejto voľby budete pravidelne odosielať informácie o vašom <b>počítači</b>, inštalácii, hardvéri a aplikáciách distribúcii %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Vybraním tejto voľby budete <b>neustále</b> odosielať informácie o vašej inštalácii, hardvéri, aplikáciách a charakteristike používania distribúcii %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Vybraním tejto voľby budete neustále odosielať informácie o vašej <b>používateľskej</b> inštalácii, hardvéri, aplikáciách a charakteristike používania distribúcii %1. TrackingViewStep - + Feedback Spätná väzba + + UmountJob + + + Unmount file systems. + Odpojenie súborových systémov. + + + + No target system available. + Nie je dostupný žiadny cieľový systém. + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Ak bude tento počítač používať viac ako jedna osoba, môžete nastaviť viacero účtov po inštalácii.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Ak bude tento počítač používať viac ako jedna osoba, môžete nastaviť viacero účtov po inštalácii.</small> + + + UsersQmlViewStep - - Your username is too long. - Vaše používateľské meno je príliš dlhé. - - - - Your username must start with a lowercase letter or underscore. - Vaše používateľské meno musí začínať malým písmenom alebo podčiarkovníkom. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Sú povolené iba malé písmená, číslice, podtržníky a pomlčky. - - - - Only letters, numbers, underscore and hyphen are allowed. - Sú povolené iba písmená, číslice, podtržníky a pomlčky. - - - - Your hostname is too short. - Váš názov hostiteľa je príliš krátky. - - - - Your hostname is too long. - Váš názov hostiteľa je príliš dlhý. - - - - Your passwords do not match! - Vaše heslá sa nezhodujú! + + Users + Používatelia UsersViewStep - + Users Používatelia @@ -3511,65 +3924,67 @@ Výstup: VariantModel - + Key + Column header for key/value Kľúč - + Value + Column header for key/value Hodnota VolumeGroupBaseDialog - + Create Volume Group Vytvoriť skupinu zväzkov - + List of Physical Volumes Zoznam fyzických zväzkov - + Volume Group Name: Názov skupiny zväzkov: - + Volume Group Type: Typ skupiny zväzkov: - + Physical Extent Size: Fyzická veľkosť oblasti: - + MiB MiB - + Total Size: Celková veľkosť: - + Used Size: Využitá veľkosť: - + Total Sectors: Celkom sektorov: - + Quantity of LVs: Množstvo LZ: @@ -3577,106 +3992,106 @@ Výstup: WelcomePage - + Form Forma - - + + Select application and system language Výber jazyka aplikácií a systému + &About + &O inštalátore + + + Open donations website Otvoriť webovú stránku s príspevkami - + &Donate &Prispieť - + Open help and support website Otvoriť webovú stránku s pomocou a podporou + &Support + Po&dpora + + + Open issues and bug-tracking website Otvoriť webovú stránku s problémami a chybami - Open release notes website - Otvoriť webovú stránku s poznámkami k vydaniu - - - - &Release notes - &Poznámky k vydaniu - - - &Known issues &Známe problémy - - &Support - Po&dpora + + Open release notes website + Otvoriť webovú stránku s poznámkami k vydaniu - - &About - &O inštalátore + + &Release notes + &Poznámky k vydaniu - - <h1>Welcome to the %1 installer.</h1> - <h1>Vitajte v inštalátore distribúcie %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Vitajte v aplikácii Calamares, inštalátore distribúcie %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Vitajte v inštalačnom programe Calamares pre distribúciu %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Vitajte pri inštalácii distribúcie %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Vitajte v aplikácii Calamares, inštalátore distribúcie %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Vitajte v inštalátore distribúcie %1.</h1> + + + + %1 support + Podpora distribúcie %1 + + + About %1 setup O inštalátore %1 - + About %1 installer O inštalátore %1 - + <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. - <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Autorské práva 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorské práva 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Poďakovanie patrí <a href="https://calamares.io/team/">tímu inštalátora Calamares</a> a <a href="https://www.transifex.com/calamares/calamares/">prekladateľskému tímu inštalátora Calamares</a>.<br/><br/>Vývoj inštalátora <a href="https://calamares.io/">Calamares</a> je sponzorovaný spoločnosťou <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Oslobodzujúci softvér. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - Podpora distribúcie %1 + <h1>%1</h1><br/><strong>%2<br/>pre %3</strong><br/><br/>Autorské práva 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Autorské práva 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Poďakovanie patrí <a href="https://calamares.io/team/">tímu inštalátora Calamares</a> a <a href="https://www.transifex.com/calamares/calamares/">prekladateľskému tímu inštalátora Calamares</a>.<br/><br/>Vývoj inštalátora <a href="https://calamares.io/">Calamares</a> je sponzorovaný spoločnosťou <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - oslobodzujúci softvér. WelcomeQmlViewStep - + Welcome Uvítanie @@ -3684,26 +4099,70 @@ Výstup: WelcomeViewStep - + Welcome Uvítanie + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Chyba konfigurácie + + + + No partitions are available for ZFS. + Nie sú dostupné žiadne oddiely pre ZFS. + + + + Internal data missing + Chýbajú vnútorné údaje + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + Výstup bol: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <h1>%1</h1><br/> <strong>%2<br/> @@ -3718,7 +4177,93 @@ Výstup: oslobodzujúci softvér. - + + Back + Späť + + + + calamares-sidebar + + + Show debug information + Zobraziť ladiace informácie + + + + finishedq + + + Installation Completed + Inštalácia dokončená + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + Distribúcia %1 bola nainštalovaná do vášho počítača.<br/> + Teraz môžete reštartovať váš počítač a spustiť nový systém, alebo pokračovať v používaní živého prostredia. + + + + Close Installer + Zavrieť inštalátor + + + + Restart System + Reštartovať systém + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + Inštalácia dokončená + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + Distribúcia %1 bola nainštalovaná do vášho počítača.<br/> + Teraz môžete reštartovať vaše zariadenie. + + + + Close + Zavrieť + + + + Restart + Reštartovať + + + + i18n + + + <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>. + <h1>Jazyky</h1> </br> + Miestne nastavenie systému ovplyvní jazyk a znakovú sadu pre niektoré prvky používateľského rozhrania príkazového riadku. Aktuálne nastavenie je <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Miestne nastavenie</h1> </br> + Miestne nastavenie systému ovplyvní formát čísel a dátumov. Aktuálne nastavenie je <strong>%1</strong>. + + + Back Späť @@ -3726,52 +4271,43 @@ Výstup: keyboardq - - Keyboard Model - Model klávesnice + + To activate keyboard preview, select a layout. + Na aktiváciu náhľadu klávesnice, vyberte rozloženie. - - Pick your preferred keyboard model or use the default one based on the detected hardware - Vyberte preferovaný model klávesnice, alebo použite predvolený, ktorý bol vybraný podľa rozpoznaného hardvéru + + Keyboard Model: + Model klávesnice: - - Refresh - Obnoviť - - - - + Layouts Rozloženia - - - Keyboard Layout - Rozloženie klávesnice + + Type here to test your keyboard + Tu môžete písať na odskúšanie vašej klávesnice - - Models - Modely - - - + Variants Varianty + + + localeq - - Test your keyboard - Vyskúšajte vašu klávesnicu + + Change + Zmeniť notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3779,34 +4315,242 @@ Výstup: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Vitajte v inštalátore distribúcie %1 <quote>%2</quote> </h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice je výkonným a bezplatným kancelárskym balíkom, ktorý používajú milióny ľudí po celom svete. Zahŕňa niekoľko aplikácií, ktoré ho robia najuniverzálnejším slobodným kancelárskym balíkom s otvoreným zdrojom na trhu.<br/> + Predvolená voľba. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Ak nechcete inštalovať kancelársky balík, stačí vybrať voľbu Žiadny kancelársky balík. Vždy môžete podľa potreby nejaký (alebo viacero) pridať neskôr vo vašom nainštalovanom systéme. + + + + No Office Suite + Žiadny kancelársky balík + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + Minimálna inštalácia + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + Späť + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Vyberte vaše používateľské meno a poverenia na prihlásenie a vykonávanie administrátorských úloh + + + + What is your name? + Aké je vaše meno? + + + + Your Full Name + Vaše celé meno + + + + What name do you want to use to log in? + Aké meno chcete použiť na prihlásenie? + + + + Login Name + Prihlasovacie meno + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Ak bude tento počítač používať viac ako jedna osoba, môžete po inštalácii vytvoriť viacero účtov. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Sú povolené iba malé písmená, číslice, podtržníky a pomlčky. + + + + root is not allowed as username. + root nie je možné použiť ako meno používateľa + + + + What is the name of this computer? + Aký je názov tohto počítača? + + + + Computer Name + Názov počítača + + + + This name will be used if you make the computer visible to others on a network. + Tento názov bude použitý, keď zviditeľníte počítač ostatným v sieti. + + + + localhost is not allowed as hostname. + localhost nie možné použiť ako názov hostiteľa + + + + Choose a password to keep your account safe. + Zvoľte heslo pre zachovanie vášho účtu v bezpečí. + + + + Password + Heslo + + + + Repeat Password + Zopakovanie hesla + + + + 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. + Zadajte rovnaké heslo dvakrát, aby sa predišlo preklepom. Dobré heslo by malo obsahovať mix písmen, čísel a diakritiky, malo by mať dĺžku aspoň osem znakov a malo by byť pravidelne menené. + + + + Validate passwords quality + Overiť kvalitu hesiel + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Keď je zaškrtnuté toto políčko, kontrola kvality hesla bude ukončená a nebudete môcť použiť slabé heslo. + + + + Log in automatically without asking for the password + Prihlásiť automaticky bez pýtania hesla + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Znovu použiť používateľské heslo ako heslo správcu + + + + Use the same password for the administrator account. + Použiť rovnaké heslo pre účet správcu. + + + + Choose a root password to keep your account safe. + Zvoľte heslo správcu pre zachovanie vášho účtu v bezpečí. + + + + Root Password + Heslo správcu + + + + Repeat Root Password + Zopakovanie hesla správcu + + + + Enter the same password twice, so that it can be checked for typing errors. + Zadajte rovnaké heslo dvakrát, aby sa predišlo preklepom. + + + + welcomeq + + + <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> + <h3>Vitajte v inštalátore distribúcie %1 <quote>%2</quote></h3> + <p>Tento program vám položí niekoľko otázok a nainštaluje distribúciu %1 do vášho počítača.</p> + + + About O inštalátore - + Support Podpora - + Known issues Známe problémy - + Release notes Poznámky k vydaniu - + Donate Prispieť diff --git a/lang/calamares_sl.ts b/lang/calamares_sl.ts index 7bd502601..b44c7a079 100644 --- a/lang/calamares_sl.ts +++ b/lang/calamares_sl.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition Zagonski razdelek - + System Partition Sistemski razdelek - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Oblika - + GlobalStorage - + JobQueue - + Modules - + Type: Vrsta: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Namesti @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Končano @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path Nepravilna pot delovne mape - + Working directory %1 for python job %2 is not readable. Ni mogoče brati delovne mape %1 za pythonovo opravilo %2. - + Bad main script file Nepravilna datoteka glavnega skripta - + Main script file %1 for python job %2 is not readable. Ni mogoče brati datoteke %1 glavnega skripta za pythonovo opravilo %2. - + Boost.Python error in job "%1". Napaka Boost.Python v opravilu "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -238,7 +271,7 @@ - + (%n second(s)) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. @@ -256,245 +289,236 @@ Calamares::ViewManager - - &Back - &Nazaj - - - - &Next - &Naprej - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed + Namestitev je spodletela + + + + Error + Napaka + + + + &Yes - + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &Naprej + + + + &Back + &Nazaj + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? Preklic namestitve? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Ali res želite preklicati trenutni namestitveni proces? Namestilni program se bo končal in vse spremembe bodo izgubljene. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - Napaka - - - - Installation Failed - Namestitev je spodletela - CalamaresPython::Helper - + Unknown exception type Neznana vrsta izjeme - + unparseable Python error nerazčlenljiva napaka Python - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Nazaj - - - - &Next - &Naprej - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer %1 Namestilnik + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Namestilniku ni uspelo posodobiti razpredelnice razdelkov na disku '%1'. + CheckerContainer - + Gathering system information... Zbiranje informacij o sistemu ... @@ -502,157 +526,197 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. ChoicePage - + Form Oblika - - After: - Potem: - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: + Potem: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -660,22 +724,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. ClearTempMountsJob - + Clear all temporary mounts. Počisti vse začasne priklope. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - Ni možno dobiti seznama začasnih priklopov. - - - + Cleared all temporary mounts. Vsi začasni priklopi so bili počiščeni. @@ -683,18 +742,18 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -702,100 +761,235 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> Nastavi model tipkovnice na %1.<br/> - + Set keyboard layout to %1/%2. Nastavi razporeditev tipkovnice na %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - Nastavi časovni pas na %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Namestitev je spodletela + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Povzetek + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -803,100 +997,136 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. CreatePartitionDialog - + Create a Partition Ustvari razdelek - - MiB - - - - - Partition &Type: - &Vrsta razdelka: - - - - &Primary - &Primaren - - - - E&xtended - R&azširjen - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - Zastavice: - - - - &Mount Point: - &Priklopna točka: - - - + Si&ze: Ve&likost - + + MiB + + + + + Partition &Type: + &Vrsta razdelka: + + + + Primar&y + + + + + E&xtended + R&azširjen + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + &Priklopna točka: + + + + Flags: + Zastavice: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical Logičen - + Primary Primaren - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. Namestilniku ni uspelo ustvariti razdelka na disku '%1'. @@ -904,27 +1134,27 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. CreatePartitionTableDialog - + Create Partition Table Ustvari razpredelnico razdelkov - + Creating a new partition table will delete all existing data on the disk. Ustvarjanje nove razpredelnice razdelkov bo izbrisalo vse obstoječe podatke na disku. - + What kind of partition table do you want to create? Kakšna vrsta razpredelnice razdelkov naj se ustvari? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Razpredelnica razdelkov (GPT) @@ -932,22 +1162,22 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. Namestilniku ni uspelo ustvariti razpredelnice razdelkov na %1. @@ -955,45 +1185,41 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. CreateUserJob - + Create user %1 Ustvari uporabnika %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. - Mapa sudoers ni zapisljiva. + + + Creating user %1 + - - Cannot create sudoers file for writing. - Ni mogoče ustvariti datoteke sudoers za pisanje. + + Configuring user %1 + - - Cannot chmod sudoers file. - Na datoteki sudoers ni mogoče izvesti opravila chmod. - - - - Cannot open groups file for reading. - Datoteke skupin ni bilo mogoče odpreti za branje. + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -1001,22 +1227,22 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1024,18 +1250,18 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1043,22 +1269,22 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. Namestilniku ni uspelo izbrisati razdelka %1. @@ -1066,46 +1292,46 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1114,17 +1340,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1132,7 +1358,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. DummyCppJob - + Dummy C++ Job @@ -1140,123 +1366,167 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. EditExistingPartitionDialog - + Edit Existing Partition Uredi obstoječi razdelek - - Content: - Vsebina: + + Con&tent: + - + &Keep - + Format Formatiraj - + Warning: Formatting the partition will erase all existing data. Opozorilo: Formatiranje razdelka bo izbrisalo vse obstoječe podatke. - + &Mount Point: &Priklopna točka: - + Si&ze: Ve&likost - + MiB - + Fi&le System: - + Flags: Zastavice: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form Oblika - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information Nastavi informacije razdelka - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1264,93 +1534,81 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. FinishedPage - + Form Oblika - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Končano + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + + Finish + Končano FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. Namestilniku ni uspelo formatirati razdelka %1 na disku '%2'. @@ -1358,72 +1616,72 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source je priklopljen na vir napajanja - + The system is not plugged in to a power source. - + is connected to the Internet je povezan s spletom - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1431,7 +1689,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. HostInfoJob - + Collecting information about your machine. @@ -1439,25 +1697,25 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1465,7 +1723,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1473,7 +1731,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. InitramfsJob - + Creating initramfs. @@ -1481,17 +1739,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1499,28 +1757,15 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Nastavi model tipkovnice na %1.<br/> - - - - Set keyboard layout to %1/%2. - Nastavi razporeditev tipkovnice na %1/%2. - - KeyboardQmlViewStep - + Keyboard Tipkovnica @@ -1528,7 +1773,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. KeyboardViewStep - + Keyboard Tipkovnica @@ -1536,65 +1781,88 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Oblika - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1602,7 +1870,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. LicenseViewStep - + License @@ -1610,109 +1878,102 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: Območje: - + Zone: Časovni pas: - - + + &Change... - - - Set timezone to %1/%2.<br/> - Nastavi časovni pas na %1/%2.<br/> - LocaleQmlViewStep - + Location Položaj + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Položaj @@ -1720,35 +1981,35 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1756,116 +2017,130 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1873,7 +2148,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. NotesQmlViewStep - + Notes @@ -1881,17 +2156,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1899,260 +2174,335 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + + The password is shorter than %n characters + + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2160,40 +2510,48 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PackageChooserPage - + Form Oblika - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2201,12 +2559,12 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PackageModel - + Name Ime - + Description @@ -2214,17 +2572,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. Page_Keyboard - + Form Oblika - + Keyboard Model: Model tipkovnice: - + Type here to test your keyboard Tipkajte tukaj za testiranje tipkovnice @@ -2232,96 +2590,96 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. Page_UserSetup - + Form Oblika - + What is your name? Vaše ime? - - What name do you want to use to log in? - Katero ime želite uporabiti za prijavljanje? - - - - Choose a password to keep your account safe. - Izberite geslo za zaščito vašega računa. - - - - - <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> - <small>Geslo vnesite dvakrat, da se zavarujete pred morebitnimi tipkarskimi napakami. Dobro geslo vsebuje mešanico črk, številk in ločil ter ima najmanj osem znakov. Priporočljivo je, da ga spreminjate v rednih časovnih razmikih.</small> - - - - What is the name of this computer? - Ime računalnika? - - - + Your Full Name - + + What name do you want to use to log in? + Katero ime želite uporabiti za prijavljanje? + + + login - + + What is the name of this computer? + Ime računalnika? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>To ime bo uporabljeno, če bo vaš računalnik viden drugim napravam v omrežju.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Izberite geslo za zaščito vašega računa. + + + + + <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> + <small>Geslo vnesite dvakrat, da se zavarujete pred morebitnimi tipkarskimi napakami. Dobro geslo vsebuje mešanico črk, številk in ločil ter ima najmanj osem znakov. Priporočljivo je, da ga spreminjate v rednih časovnih razmikih.</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. Izberite geslo za skrbniški račun. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Geslo vnesite dvakrat, da se zavarujete pred morebitnimi tipkarskimi napakami.</small> @@ -2329,42 +2687,42 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition Nov razdelek - + %1 %2 size[number] filesystem[name] @@ -2373,34 +2731,39 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PartitionModel - - + + Free Space Razpoložljiv prostor - - + + New partition Nov razdelek - + Name Ime - + File System Datotečni sistem - + + File System Label + + + + Mount Point Priklopna točka - + Size Velikost @@ -2408,77 +2771,77 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PartitionPage - + Form Oblika - + Storage de&vice: - + &Revert All Changes &Povrni vse spremembe - + New Partition &Table Nov razdelek &Razpredelnica - + Cre&ate - + &Edit &Urejaj - + &Delete &Izbriši - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? Ali ste prepričani, da želite ustvariti novo razpredelnico razdelkov na %1? - + Can not create new partition - + 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. @@ -2486,117 +2849,107 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PartitionViewStep - + Gathering system information... Zbiranje informacij o sistemu ... - + Partitions Razdelki - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: Potem: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2604,13 +2957,13 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2618,17 +2971,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PlasmaLnfPage - + Form Oblika - + 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. - + 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. @@ -2636,7 +2989,7 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PlasmaLnfViewStep - + Look-and-Feel @@ -2644,17 +2997,17 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2662,65 +3015,65 @@ Namestilni program se bo končal in vse spremembe bodo izgubljene. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Nepravilni parametri za klic procesa opravila. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2728,89 +3081,94 @@ Output: QObject - - Default Keyboard Model - Privzeti model tipkovnice - - - - - Default - Privzeto - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + Privzeto + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2818,18 +3176,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2837,143 +3195,158 @@ Output: ReplaceWidget - + Form Oblika - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2981,22 +3354,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -3004,7 +3377,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3012,18 +3385,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3031,53 +3404,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Za najboljše rezultate se prepričajte, da vaš računalnik izpolnjuje naslednje zahteve: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3085,29 +3430,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3115,29 +3460,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3145,82 +3490,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3228,42 +3573,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3271,45 +3616,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Na datoteki sudoers ni mogoče izvesti opravila chmod. + + + + Cannot create sudoers file for writing. + Ni mogoče ustvariti datoteke sudoers za pisanje. + + ShellProcessJob - + Shell Processes Job @@ -3317,81 +3699,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary - Povzetek + + &No + + + + + &Cancel + + + + + &Close + TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3399,106 +3817,97 @@ Output: TrackingPage - + Form Oblika - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3506,65 +3915,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3572,106 +3983,106 @@ Output: WelcomePage - + Form Oblika - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome Dobrodošli @@ -3679,31 +4090,157 @@ Output: WelcomeViewStep - + Welcome Dobrodošli + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3711,86 +4248,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Model tipkovnice: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Tipkajte tukaj za testiranje tipkovnice - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Vaše ime? + + + + Your Full Name + + + + + What name do you want to use to log in? + Katero ime želite uporabiti za prijavljanje? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Ime računalnika? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Izberite geslo za zaščito vašega računa. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_sq.ts b/lang/calamares_sq.ts index ed0abed2a..8f7ca060f 100644 --- a/lang/calamares_sq.ts +++ b/lang/calamares_sq.ts @@ -1,48 +1,56 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Administroni rregullime vetëmontimi + + BootInfoWidget - + 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. <strong>Mjedisi i nisjes</strong> i këtij sistemi.<br><br>Sisteme x86 të vjetër mbulojnë vetëm <strong>BIOS</strong>.<br>Sistemet moderne zakonisht përdorin <strong>EFI</strong>-n, por mund të shfaqen edhe si BIOS, nëse nisen nën mënyrën përputhshmëri. - + 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. - Ky sistem qe nisur me një mjedis nisjesh <strong>EFI</strong>.<br><br>Që të formësojë nisjen nga një mjedis EFI, ky instalues duhet të vërë në punë një aplikacion ngarkuesi nisësi, të tillë si <strong>GRUB</strong> ose <strong>systemd-boot</strong> në një <strong>Pjesë EFI Sistemi</strong>. Kjo bëhet vetvetiu, hiq rastin kur zgjidhni pjesëzim dorazi, rast në të cilin duhet ta zgjidhni apo krijoni ju vetë. + Ky sistem qe nisur me një mjedis nisjesh <strong>EFI</strong>.<br><br>Që të formësojë nisjen nga një mjedis EFI, ky instalues duhet të vërë në punë një aplikacion ngarkuesi nisësi, të tillë si <strong>GRUB</strong> ose <strong>systemd-boot</strong> në një <strong>Pjesë EFI Sistemi</strong>. Kjo bëhet vetvetiu, hiq rastin kur zgjidhni pjesëtim dorazi, rast në të cilin duhet ta zgjidhni apo krijoni ju vetë. - + 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. - Ky sistem qe nisur me një mjedis nisjesh <strong>BIOS</strong>.<br><br>Që të formësojë nisjen nga një mjedis BIOS, ky instalues duhet të instalojë një ngarkues nisjesh, të tillë si <strong>GRUB</strong>, ose në krye të një pjese, ose te <strong>Master Boot Record</strong> pranë fillimit të tabelës së pjesëve (e parapëlqyer). Kjo bëhet vetvetiu, veç në zgjedhshi pjesëzim dorazi, rast në të cilin duhet ta rregulloni ju vetë. + Ky sistem qe nisur me një mjedis nisjesh <strong>BIOS</strong>.<br><br>Që të formësojë nisjen nga një mjedis BIOS, ky instalues duhet të instalojë një ngarkues nisjesh, të tillë si <strong>GRUB</strong>, ose në krye të një pjese, ose te <strong>Master Boot Record</strong> pranë fillimit të tabelës së pjesëve (e parapëlqyer). Kjo bëhet vetvetiu, veç në zgjedhshi pjesëtim dorazi, rast në të cilin duhet ta rregulloni ju vetë. BootLoaderModel - + Master Boot Record of %1 Master Boot Record për %1 - + Boot Partition Pjesë Nisjesh - + System Partition Pjesë Sistemi - + Do not install a boot loader Mos instalo ngarkues nisjesh - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Faqe e Zbrazët @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Formular - + GlobalStorage GlobalStorage - + JobQueue Radhë Aktesh - + Modules Module - + Type: Lloj: - - + + none asnjë - + Interface: Ndërfaqe: - - Tools - Mjete + + Crashes Calamares, so that Dr. Konqui can look at it. + Vithis Calamares-in, që kështu Dr. Konqui të mund t’i hedhë një sy. - + + Reloads the stylesheet from the branding directory. + Ringarkon fletëstilin prej drejtorisë së markës. + + + + Uploads the session log to the configured pastebin. + Ngarkon regjistrin e sesionit te pastebin-i i formësuar. + + + + Send Session Log + Dërgo Regjistër Sesioni + + + Reload Stylesheet Ringarko Fletëstilin - + + Displays the tree of widget names in the log (for stylesheet debugging). + Shfaq pemën e emrave të widget-eve në regjistër (për diagnostikim fletëstili). + + + Widget Tree Pemë Widget-esh - + Debug information Të dhëna diagnostikimi @@ -117,25 +145,25 @@ Calamares::ExecutionViewStep - + Set up Ujdise - + Install - Instaloje + Instalim Calamares::FailJob - + Job failed (%1) Akti dështoi (%1) - + Programmed job failure was explicitly requested. Dështimi i programuar i aktit qe kërkuar shprehimisht. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done U bë @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Shembull akti (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Xhiroje urdhrin '%1' te sistemi i synuar. - + Run command '%1'. Xhiro urdhrin '%1'. - + Running command %1 %2 Po xhirohet urdhri %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Po xhirohet %1 veprim. - + Bad working directory path Shteg i gabuar drejtorie pune - + Working directory %1 for python job %2 is not readable. Drejtoria e punës %1 për aktin python %2 s’është e lexueshme. - + Bad main script file Kartelë kryesore programthi e dëmtuar - + Main script file %1 for python job %2 is not readable. Kartela kryesore e programthit file %1 për aktin python %2 s’është e lexueshme. - + Boost.Python error in job "%1". Gabim Boost.Python tek akti \"%1\". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Po ngarkohet … - + QML Step <i>%1</i>. Hapi QML <i>%1</i>. - + Loading failed. Ngarkimi dështoi. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Kontrolli i domosdoshmërive për modulin <i>%1</i> u plotësua. + - + Waiting for %n module(s). Po pritet për %n modul(e). @@ -236,7 +269,7 @@ - + (%n second(s)) (%n sekondë(a)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. Kontrolli i domosdoshmërive të sistemit u plotësua. @@ -252,247 +285,241 @@ Calamares::ViewManager - - &Back - &Mbrapsht - - - - &Next - Pas&uesi - - - - &Cancel - &Anuloje - - - - Cancel setup without changing the system. - Anuloje rregullimin pa ndryshuar sistemin. - - - - Cancel installation without changing the system. - Anuloje instalimin pa ndryshuar sistemin. - - - + Setup Failed Rregullimi Dështoi - - Would you like to paste the install log to the web? - Do të donit të hidhet në web regjistri i instalimit? + + Installation Failed + Instalimi Dështoi - + + Error + Gabim + + + + &Yes + &Po + + + + &No + &Jo + + + + &Close + &Mbylle + + + Install Log Paste URL URL Ngjitjeje Regjistri Instalimi - + The upload was unsuccessful. No web-paste was done. Ngarkimi s’qe i suksesshëm. S’u bë hedhje në web. - + + Install log posted to + +%1 + +Link copied to clipboard + Regjistri i instalimit u postua te + +%1 + +Lidhja u kopjua në të papastër + + + Calamares Initialization Failed Gatitja e Calamares-it Dështoi - + %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. - %1 s’mund të instalohet. Calamares s’qe në gjendje të ngarkonte krejt modulet e konfiguruar. Ky është një problem që lidhet me mënyrën se si përdoret Calamares nga shpërndarja. + %1 s’mund të instalohet. Calamares s’qe në gjendje të ngarkonte krejt modulet e formësuar. Ky është një problem që lidhet me mënyrën se si përdoret Calamares nga shpërndarja. - + <br/>The following modules could not be loaded: <br/>S’u ngarkuan dot modulet vijues: - + + Continue with setup? + Të vazhdohet me rregullimin? + + + Continue with installation? Të vazhdohet me instalimin? - + 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> Programi i rregullimit %1 është një hap larg nga bërja e ndryshimeve në diskun tuaj, që të mund të rregullojë %2.<br/><strong>S’do të jeni në gjendje t’i zhbëni këto ndryshime.</strong> - + + 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> + Instaluesi %1 është një hap larg nga bërja e ndryshimeve në diskun tuaj, që të mund të instalojë %2.<br/><strong>S’do të jeni në gjendje t’i zhbëni këto ndryshime.</strong> + + + &Set up now &Rregulloje tani - + + &Install now + &Instaloje tani + + + + Go &back + Kthehu &mbrapsht + + + &Set up &Rregulloje - + &Install &Instaloje - + Setup is complete. Close the setup program. Rregullimi është i plotë. Mbylleni programin e rregullimit. - + + The installation is complete. Close the installer. + Instalimi u plotësua. Mbylleni instaluesin. + + + + Cancel setup without changing the system. + Anuloje rregullimin pa ndryshuar sistemin. + + + + Cancel installation without changing the system. + Anuloje instalimin pa ndryshuar sistemin. + + + + &Next + Pas&uesi + + + + &Back + &Mbrapsht + + + + &Done + &U bë + + + + &Cancel + &Anuloje + + + Cancel setup? Të anulohet rregullimi? - + Cancel installation? Të anulohet instalimi? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Doni vërtet të anulohet procesi i tanishëm i rregullimit? Programi i rregullimit do të mbyllet dhe krejt ndryshimet do të humbin. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Doni vërtet të anulohet procesi i tanishëm i instalimit? Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. - - - - &Yes - &Po - - - - - &No - &Jo - - - - &Close - &Mbylle - - - - Continue with setup? - Të vazhdohet me rregullimin? - - - - 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> - Instaluesi %1 është një hap larg nga bërja e ndryshimeve në diskun tuaj, që të mund të instalojë %2.<br/><strong>S’do të jeni në gjendje t’i zhbëni këto ndryshime.</strong> - - - - &Install now - &Instaloje tani - - - - Go &back - Kthehu &mbrapsht - - - - &Done - &U bë - - - - The installation is complete. Close the installer. - Instalimi u plotësua. Mbylle instaluesin. - - - - Error - Gabim - - - - Installation Failed - Instalimi Dështoi - CalamaresPython::Helper - + Unknown exception type Lloj i panjohur përjashtimi - + unparseable Python error gabim kodi Python të papërtypshëm - + unparseable Python traceback <i>traceback</i> Python i papërtypshëm - + Unfetchable Python error. Gabim Python mosprurjeje kodi. - - CalamaresUtils - - - Install log posted to: -%1 - Regjistri i instalimit u postua te: -%1 - - CalamaresWindow - - &Back - &Mbrapsht - - - - &Next - Pas&uesi - - - - &Cancel - &Anuloje - - - + %1 Setup Program Programi i Rregullimit të %1 - + %1 Installer Instalues %1 + + + ChangeFilesystemLabelJob - - Show debug information - Shfaq të dhëna diagnostikimi + + Set filesystem label on %1. + Caktoni etiketë sistemi kartelash në %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Caktoni etiketë sistemi kartelash <strong>%1</strong> te pjesa <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Instaluesi s’arriti të përditësojë tabelë ndarjesh në diskun '%1'. CheckerContainer - + Gathering system information... Po grumbullohen të dhëna mbi sistemin… @@ -500,157 +527,197 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. ChoicePage - + Form Formular - - After: - Pas: - - - - Boot loader location: - Vendndodhje ngarkuesi nisjesh: - - - + Select storage de&vice: Përzgjidhni &pajisje depozitimi: - - - - + + + + Current: E tanishmja: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Pjesëzim dorazi</strong><br/>Mund të krijoni ose ripërmasoni pjesë ju vetë. Pasja e një tabele GPT pjesësh dhe <strong>512Mb fat32 /pjesë nisjeje është domosdoshmëri për instalime UEFI</strong>, ose përdorni një të tillë pa e formatuar, ose krijoni një të tillë. + + After: + Më Pas: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Pjesëzim dorazi</strong><br/>Pjesët mund t’i krijoni dhe ripërmasoni ju vetë. + + + Reuse %1 as home partition for %2. Ripërdore %1 si pjesën shtëpi për %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Përzgjidhni një pjesë që të zvogëlohet, mandej tërhiqni shtyllën e poshtme që ta ripërmasoni</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 do të zvogëlohet në %2MiB dhe për %4 do të krijohet një pjesë e re %3MiB. - + + Boot loader location: + Vendndodhje ngarkuesi nisjesh: + + + <strong>Select a partition to install on</strong> <strong>Përzgjidhni një pjesë ku të instalohet</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - Në këtë sistem s’gjendet gjëkundi një pjesë EFI sistemi. Ju lutemi, kthehuni mbrapsht dhe përdorni pjesëzimin dorazi që të rregulloni %1. + Në këtë sistem s’gjendet gjëkundi një pjesë EFI sistemi. Ju lutemi, kthehuni mbrapsht dhe përdorni pjesëtimin dorazi që të rregulloni %1. - + The EFI system partition at %1 will be used for starting %2. Për nisjen e %2 do të përdoret pjesa EFI e sistemit te %1. - + EFI system partition: - Pjesë sistemi EFI: + Pjesë EFI sistemi: - + 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. Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Fshije diskun</strong><br/>Kështu do të <font color=\"red\">fshihen</font> krejt të dhënat të pranishme tani në pajisjen e përzgjedhur. - - 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. - Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - - - - No Swap - Pa Swap - - - - Reuse Swap - Ripërdor Swap-in - - - - Swap (no Hibernate) - Swap (pa Letargji) - - - - Swap (with Hibernate) - Swap (me Letargji) - - - - Swap to file - Swap në kartelë - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Instaloje në krah të tij</strong><br/>Instaluesi do të zvogëlojë një pjesë për të bërë vend për %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Zëvendëso një pjesë</strong><br/>Zëvendëson një pjesë me %1. - + + 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. + Kjo pajisje depozitimi përmban %1 në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. + + + 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. Kjo pajisje depozitimi ka tashmë një sistem operativ në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. - + 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. Kjo pajisje depozitimi ka disa sisteme operativë në të. Ç’do të donit të bënit?<br/>Do të jeni në gjendje të rishqyrtoni dhe ripohoni zgjedhjet tuaja, para se te pajisja e depozitimit të bëhet çfarëdo ndryshimi. + + + 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/> + Kjo pajisje depozitimi ka tashmë një sistem operativ në të, por tabela e saj e pjesëve <strong>%1</strong> është e ndryshme nga ajo e duhura <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Kjo pajisje depozitimi ka një nga pjesët e saj <strong>të montuar</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Kjo pajisje depozitimi është pjesë e një pajisje <strong>RAID jo aktive</strong> device. + + + + No Swap + Pa Swap + + + + Reuse Swap + Ripërdor Swap-in + + + + Swap (no Hibernate) + Swap (pa Hibernate) + + + + Swap (with Hibernate) + Swap (me Hibernate) + + + + Swap to file + Swap në kartelë + ClearMountsJob - + + Successfully unmounted %1. + %1 u çmontua me sukses. + + + + Successfully disabled swap %1. + Pjesa swap %1 u çaktivizua me sukses. + + + + Successfully cleared swap %1. + Pjesa swap %1 u spastrua me sukses. + + + + Successfully closed mapper device %1. + Pajisja “mapper” %1 u mbyll me sukses. + + + + Successfully disabled volume group %1. + Grupi i vëllimeve %1 u çaktivizua me sukses. + + + Clear mounts for partitioning operations on %1 - Hiqi montimet për veprime pjesëzimi te %1 + Hiqi montimet për veprime pjesëtimi te %1 - + Clearing mounts for partitioning operations on %1. - Po hiqen montimet për veprime pjesëzimi te %1. + Po hiqen montimet për veprime pjesëtimi te %1. - + Cleared all mounts for %1 U hoqën krejt montimet për %1 @@ -658,22 +725,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. ClearTempMountsJob - + Clear all temporary mounts. Hiqi krejt montimet e përkohshme. - + Clearing all temporary mounts. Po hiqen krejt montimet e përkohshme. - - Cannot get list of temporary mounts. - S’merret dot lista e montimeve të përkohshme. - - - + Cleared all temporary mounts. U hoqën krejt montimet e përkohshme. @@ -681,18 +743,18 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. CommandList - - + + Could not run command. S’u xhirua dot urdhri. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Urdhri xhirohet në mjedisin strehë dhe është e nevojshme të dijë shtegun për rrënjën, por nuk ka rootMountPoint të përcaktuar. - + The command needs to know the user's name, but no username is defined. Urdhri lypset të dijë emrin e përdoruesit, por s’ka të përcaktuar emër përdoruesi. @@ -700,100 +762,235 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Ky kompjuter s’i plotëson kërkesat minimum për rregullimin e %1.<br/>Rregullimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ky kompjuter s’i plotëson kërkesat minimum për instalimin e %1.<br/>Instalimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për rregullimin e %1.<br/>Rregullimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për instalimin e %1.<br/>Instalimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. - - - - This program will ask you some questions and set up %2 on your computer. - Ky program do t’ju bëjë disa pyetje dhe do të rregullojë %2 në kompjuterin tuaj. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Mirë se vini te programi i rregullimit Calamares për %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Mirë se vini te rregullimi i %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Mirë se vini te instaluesi Calamares për %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Mirë se vini te instaluesi i %1.</h1> - - - + Set keyboard model to %1.<br/> Si model tastiere do të caktohet %1.<br/> - + Set keyboard layout to %1/%2. Si model tastiere do të caktohet %1%2. - + + Set timezone to %1/%2. + Si zonë kohore cakto %1/%2 + + + The system language will be set to %1. Si gjuhë sistemi do të caktohet %1. - + The numbers and dates locale will be set to %1. Si vendore për numra dhe data do të vihet %1. - - Set timezone to %1/%2.<br/> - Si zonë kohore do të caktohet %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Instalim Nga Rrjeti. (E çaktivizuar: Formësim i pasaktë) - + Network Installation. (Disabled: Received invalid groups data) Instalim Nga Rrjeti. (U çaktivizua: U morën të dhëna të pavlefshme grupesh) - - Network Installation. (Disabled: internal error) - Instalim Nga Rrjeti. (E çaktivizuar: gabim i brendshëm) + + Network Installation. (Disabled: Internal error) + Instalim Nga Rrjeti. (I çaktivizuar: Gabim i brendshëm) - + + Network Installation. (Disabled: No package list) + Instalim Nga Rrjeti. (I çaktivizuar: S’ka listë paketash) + + + + Package selection + Përzgjedhje paketash + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Instalim Nga Rrjeti. (U çaktivizua: S’arrihet të sillen lista paketash, kontrolloni lidhjen tuaj në rrjet) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Ky kompjuter s’i plotëson kërkesat minimum për rregullimin e %1.<br/>Rregullimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Ky kompjuter s’i plotëson kërkesat minimum për instalimin e %1.<br/>Instalimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për rregullimin e %1.<br/>Rregullimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për instalimin e %1.<br/>Instalimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. + + + + This program will ask you some questions and set up %2 on your computer. + Ky program do t’ju bëjë disa pyetje dhe do të rregullojë %2 në kompjuterin tuaj. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Mirë se vini te programi i ujdisjes së Calamares për</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Mirë se vini te udjisja e %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Mirë se vini te instaluesi Calamares për %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Mirë se vini te instaluesi i %1</h1> + + + + Your username is too long. + Emri juaj i përdoruesit është shumë i gjatë. + + + + '%1' is not allowed as username. + '%1' s’lejohet si emër përdoruesi. + + + + Your username must start with a lowercase letter or underscore. + Emri juaj i përdoruesit duhet të fillojë me një shkronjë të vogël ose nënvijë. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Lejohen vetëm shkronja të vogla, numra, nënvijë dhe vijë ndarëse. + + + + Your hostname is too short. + Strehëemri juaj është shumë i shkurtër. + + + + Your hostname is too long. + Strehëemri juaj është shumë i gjatë. + + + + '%1' is not allowed as hostname. + '%1' s’lejohet si strehëemër. + + + + Only letters, numbers, underscore and hyphen are allowed. + Lejohen vetëm shkronja, numra, nënvijë dhe vijë ndarëse. + + + + Your passwords do not match! + Fjalëkalimet tuaj s’përputhen! + + + + OK! + OK! + + + + Setup Failed + Rregullimi Dështoi + + + + Installation Failed + Instalimi Dështoi + + + + The setup of %1 did not complete successfully. + Ujdisja e %1 s’u plotësua me sukses. + + + + The installation of %1 did not complete successfully. + Instalimi i %1 s’u plotësua me sukses. + + + + Setup Complete + Rregullim i Plotësuar + + + + Installation Complete + Instalimi u Plotësua + + + + The setup of %1 is complete. + Rregullimi i %1 u plotësua. + + + + The installation of %1 is complete. + Instalimi i %1 u plotësua. + + + + Package Selection + Përzgjedhje Pakete + + + + Please pick a product from the list. The selected product will be installed. + Ju lutemi, zgjidhni prej listës një produkt. Produkti i përzgjedhur do të instalohet. + + + + Install option: <strong>%1</strong> + Mundësi instalimi: <strong>%1</strong> + + + + None + Asnjë + + + + Summary + Përmbledhje + + + + This is an overview of what will happen once you start the setup procedure. + Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e rregullimit. + + + + This is an overview of what will happen once you start the install procedure. + Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e instalimit. + ContextualProcessJob - + Contextual Processes Job Akt Procesesh Kontekstuale @@ -801,100 +998,136 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. CreatePartitionDialog - + Create a Partition Krijoni një Pjesë - - MiB - MiB - - - - Partition &Type: - &Lloj Pjese: - - - - &Primary - &Parësore - - - - E&xtended - E&xtended - - - - Fi&le System: - &Sistem Kartelash: - - - - LVM LV name - Emër VLl LVM - - - - Flags: - Flamurka: - - - - &Mount Point: - Pikë &Montimi: - - - + Si&ze: &Madhësi: - + + MiB + MiB + + + + Partition &Type: + &Lloj Pjese: + + + + Primar&y + P&arësor + + + + E&xtended + E&xtended + + + + Fi&le System: + &Sistem Kartelash: + + + + LVM LV name + Emër LV LVM + + + + &Mount Point: + Pikë &Montimi: + + + + Flags: + Parametra: + + + + Label for the filesystem + Etiketë për sistemin e kartelave + + + + FS Label: + Etiketë FS-je: + + + En&crypt &Fshehtëzoje - + Logical Logjik - + Primary Parësor - + GPT GPT - + Mountpoint already in use. Please select another one. Pikë montimi tashmë e përdorur. Ju lutemi, përzgjidhni një tjetër. + + + Mountpoint must start with a <tt>/</tt>. + Pika e montimit duhet të fillojë me një <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Krijo pjesë të re %1MiB te %3 (%2) me zëra %4. + + + + Create new %1MiB partition on %3 (%2). + Krijo pjesë të re %1MiB te %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Krijo pjesë të re %2MiB te %4 (%3) me sistem kartelash %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Krijo pjesë të re <strong>%1MiB</strong> te <strong>%3</strong> (%2) me zërat <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Krijo pjesë të re <strong>%1MiB</strong> te <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Krijo pjesë të re <strong>%2MiB</strong> te <strong>%4</strong> (%3) me sistem kartelash <strong>%1</strong>. - + + Creating new %1 partition on %2. Po krijohet pjesë e re %1 te %2. - + The installer failed to create partition on disk '%1'. Instaluesi s’arriti të krijojë pjesë në diskun '%1'. @@ -902,27 +1135,27 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. CreatePartitionTableDialog - + Create Partition Table Krijo Tabelë Pjesësh - + Creating a new partition table will delete all existing data on the disk. Krijimi i një tabele të re pjesësh do të fshijë krejt të dhënat ekzistuese në disk. - + What kind of partition table do you want to create? Ç’lloj tabele pjesësh doni të krijoni? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) Tabelë Pjesësh GUID (GPT) @@ -930,22 +1163,22 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. CreatePartitionTableJob - + Create new %1 partition table on %2. Krijo tabelë të re pjesësh %1 te %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - Krijoni tabelë pjesësh të re <strong>%1</strong> te <strong>%2</strong> (%3). + Krijo tabelë pjesësh të re <strong>%1</strong> te <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Po krijohet tabelë e re pjesësh %1 te %2. - + The installer failed to create a partition table on %1. Instaluesi s’arriti të krijojë tabelë pjesësh në diskun %1. @@ -953,45 +1186,41 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. CreateUserJob - + Create user %1 Krijo përdoruesin %1 - + Create user <strong>%1</strong>. Krijo përdoruesin <strong>%1</strong>. - - Creating user %1. - Po krijohet përdoruesi %1. + + Preserving home directory + S’po preket drejtoria shtëpi - - Sudoers dir is not writable. - Drejtoria sudoers s’është e shkrueshme. + + + Creating user %1 + Po krijohet përdoruesi %1 - - Cannot create sudoers file for writing. - S’krijohet dot kartelë sudoers për shkrim. + + Configuring user %1 + Po formësohet përdoruesi %1 - - Cannot chmod sudoers file. - S’mund të kryhet chmod mbi kartelën sudoers. - - - - Cannot open groups file for reading. - S’hapet dot kartelë grupesh për lexim. + + Setting file permissions + Po ujdisen leje mbi kartela CreateVolumeGroupDialog - + Create Volume Group Krijoni Grup Volumesh @@ -999,22 +1228,22 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. CreateVolumeGroupJob - + Create new volume group named %1. Krijo grup të ri vëllimesh të quajtur %1. - + Create new volume group named <strong>%1</strong>. Krijo grup të ri vëllimesh të quajtur <strong>%1</strong>. - + Creating new volume group named %1. Po krijohet grup i ri vëllimesh i quajtur <strong>%1</strong>. - + The installer failed to create a volume group named '%1'. Instaluesi s’arriti të krijojë grup të ri vëllimesh të quajtur '%1'. @@ -1022,18 +1251,18 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Çaktivizoje grupin e vëllimeve të quajtur %1. - + Deactivate volume group named <strong>%1</strong>. Çaktivizoje grupin e vëllimeve të quajtur <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Instaluesi s’arriti të çaktivizojë një grup vëllimesh të quajtur %1. @@ -1041,22 +1270,22 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. DeletePartitionJob - + Delete partition %1. Fshije pjesën %1. - + Delete partition <strong>%1</strong>. Fshije pjesën <strong>%1</strong>. - + Deleting partition %1. Po fshihet pjesa %1. - + The installer failed to delete partition %1. Instaluesi dështoi në fshirjen e pjesës %1. @@ -1064,46 +1293,46 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. DeviceInfoWidget - - 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. - Lloji i <strong>tabelës së pjesëve</strong> në pajisjen e përzgjedhur të depozitimeve.<br><br>Mënyra e vetme për ndryshim të tabelës së pjesëve është të fshihet dhe rikrijohet nga e para tabela e pjesëve, çka shkatërron krejt të dhënat në pajisjen e depozitimit.<br>Ky instalues do të ruajë tabelën e tanishme të pjesëve, veç në zgjedhshi ndryshe shprehimisht.<br>Nëse s’jeni i sigurt, në sisteme moderne parapëlqehet GPT. - - - + This device has a <strong>%1</strong> partition table. Kjo pajisje ka një tabelë pjesësh <strong>%1</strong>. - + 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. Kjo është një pajisje <strong>loop</strong>.<br><br>Është një pseudo-pajisje pa tabelë pjesësh, që e bën një kartelë të përdorshme si një pajisje blloqesh. Kjo lloj skeme zakonisht përmban një sistem të vetëm kartelash. - + 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. - Ky instalues <strong>s’pikas dot tabelë pjesësh</strong> te pajisja e depozitimit e përzgjedhur.<br><br>Ose pajisja s’ka tabelë pjesësh, ose tabela e pjesëve është e dëmtuar ose e një lloji të panjohur.<br>Ky instalues mund të krijojë për ju një tabelë të re pjesësh, ose vetvetiu, ose përmes faqes së pjesëzimit dorazi. + Ky instalues <strong>s’pikas dot tabelë pjesësh</strong> te pajisja e depozitimit e përzgjedhur.<br><br>Ose pajisja s’ka tabelë pjesësh, ose tabela e pjesëve është e dëmtuar ose e një lloji të panjohur.<br>Ky instalues mund të krijojë për ju një tabelë të re pjesësh, ose vetvetiu, ose përmes faqes së pjesëtimit dorazi. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Ky është lloji i parapëlqyer tabele pjesësh për sisteme modernë që nisen nga një mjedis nisjesh <strong>EFI</strong>. - + <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. <br><br>Ky lloj tabele pjesësh është i këshillueshëm vetëm në sisteme të vjetër të cilët nisen nga një mjedis nisjesh <strong>BIOS</strong>. Në shumicën e rasteve të tjera këshillohet GPT.<br><br><strong>Kujdes:</strong> Tabela e pjesëve MBR është një standard i vjetruar, i erës MS-DOS.<br>Mund të krijohen vetëm 4 pjesë <em>parësore</em>, dhe nga këto 4, një mund të jetë pjesë <em>extended</em>, e cila nga ana e vet mund të përmbajë mjaft pjesë <em>logjike</em>. + + + 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. + Lloji i <strong>tabelës së pjesëve</strong> në pajisjen e përzgjedhur të depozitimeve.<br><br>Mënyra e vetme për ndryshim të tabelës së pjesëve është të fshihet dhe rikrijohet nga e para tabela e pjesëve, çka shkatërron krejt të dhënat në pajisjen e depozitimit.<br>Ky instalues do të ruajë tabelën e tanishme të pjesëve, veç në zgjedhshi ndryshe shprehimisht.<br>Nëse s’jeni i sigurt, në sisteme moderne parapëlqehet GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1112,17 +1341,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Shkruaj formësim LUKS për Dracut te %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Anashkalo shkrim formësim LUKS për Dracut: pjesa \"/\" s’është e fshehtëzuar - + Failed to open %1 S’arrihet të hapet %1 @@ -1130,7 +1359,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. DummyCppJob - + Dummy C++ Job Akt C++ Dummy @@ -1138,123 +1367,167 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. EditExistingPartitionDialog - + Edit Existing Partition Përpuno Pjesën Ekzistuese - - Content: - Lëndë: + + Con&tent: + Lën&dë: - + &Keep &Mbaje - + Format Formatoje - + Warning: Formatting the partition will erase all existing data. Kujdes: Formatimi i pjesës do të fshijë krejt të dhënat ekzistuese. - + &Mount Point: Pikë &Montimi: - + Si&ze: &Madhësi: - + MiB MiB - + Fi&le System: &Sistem Kartelash: - + Flags: - Flamurka: + Parametra: - - Mountpoint already in use. Please select another one. - Pikë montimi tashmë e përdorur. Ju lutemi, përzgjidhni një tjetër. + + Label for the filesystem + Etiketë për sistemin e kartelave + + + + FS Label: + Etiketë FS-je: EncryptWidget - + Form Formular - + En&crypt system &Fshehtëzoje sistemin - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Sistemi juaj nuk duket se mbulon fshehtëzimin aq mirë sa të fshehtëzohet tërë sistemi. Mund të aktivizoni fshehtëzimin, por nga kjo mund të vuajë funksionimi. + + + Passphrase Frazëkalim - + Confirm passphrase Ripohoni frazëkalimin - + + Please enter the same passphrase in both boxes. Ju lutemi, jepni të njëjtin frazëkalim në të dy kutizat. + + ErrorDialog + + + Details: + Hollësi: + + + + Would you like to paste the install log to the web? + Do të donit të hidhet në web regjistri i instalimit? + + FillGlobalStorageJob - + Set partition information Caktoni të dhëna pjese - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Instalo %1 te pjesë e <strong>re</strong> %2 sistemi, me veçoritë <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Instaloje %1 në pjesë sistemi <strong>të re</strong> %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Rregullo pjesë të <strong>re</strong> %2 me pikë montimi <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Ujdisni pjesë të <strong>re</strong> %2, me pikë montimi <strong>%1</strong> dhe veçori <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Ujdisni pjesë të <strong>re</strong> %2, me pikë montimi <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Instalo %2 në pjesë sistemi %3 <strong>%1</strong>, me veçoritë <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Ujdisni pjesë %3 <strong>%1</strong>, me pikë montimi <strong>%2</strong> dhe veçori <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Ujdisni pjesë %3 <strong>%1</strong> me pikë montimi <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Instaloje %2 te pjesa e sistemit %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Rregullo pjesë %3 <strong>%1</strong> me pikë montimi <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Instalo ngarkues nisjesh në <strong>%1</strong>. - + Setting up mount points. Po rregullohen pika montimesh. @@ -1262,93 +1535,81 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. FinishedPage - + Form Formular - + &Restart now &Rinise tani - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Kaq qe.</h1><br/>%1 u rregullua në kompjuterin tuaj.<br/>Tani mundeni të filloni të përdorni sistemin tuaj të ri. - + <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> <html><head/><body><p>Kur i vihet shenjë kësaj kutie, sistemi juaj do të riniset menjëherë, kur klikoni mbi <span style=" font-style:italic;">U bë</span> ose mbyllni programin e rregullimit.</p></body></html> - + <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. <h1>Kaq qe.</h1><br/>%1 është instaluar në kompjuterin tuaj.<br/>Tani mundeni ta rinisni me sistemin tuaj të ri, ose të vazhdoni përdorimin e mjedisit %2 Live. - + <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> <html><head/><body><p>Kur i vihet shenjë kësaj kutie, sistemi juaj do të riniset menjëherë, kur klikoni mbi <span style=" font-style:italic;">U bë</span> ose mbyllni instaluesin.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Rregullimi Dështoi</h1><br/>%1 s’u rregullua në kompjuterin tuaj.<br/>Mesazhi i gabimit qe: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Instalimi Dështoi</h1><br/>%1 s’u instalua në kompjuterin tuaj.<br/>Mesazhi i gabimit qe: %2. + + FinishedQmlViewStep + + + Finish + Përfundim + + FinishedViewStep - + Finish - Përfundoje - - - - Setup Complete - Rregullim i Plotësuar - - - - Installation Complete - Instalimi u Plotësua - - - - The setup of %1 is complete. - Rregullimi i %1 u plotësua. - - - - The installation of %1 is complete. - Instalimi i %1 u plotësua. + Përfundim FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatoje pjesën %1 (sistem kartelash: %2, madhësi: %3 MiB) në %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formato pjesën <strong>%3MiB</strong> <strong>%1</strong> me sistem kartelash <strong>%2</strong>. - + Formatting partition %1 with file system %2. Po formatohet pjesa %1 me sistem kartelash %2. - + The installer failed to format partition %1 on disk '%2'. Instaluesi s’arriti të formatojë pjesën %1 në diskun '%2'. @@ -1356,72 +1617,72 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. GeneralRequirements - + has at least %1 GiB available drive space ka të paktën %1 GiB hapësirë të përdorshme - + There is not enough drive space. At least %1 GiB is required. S’ka hapësirë të mjaftueshme. Lypset të paktën %1 GiB. - + has at least %1 GiB working memory ka të paktën %1 GiB kujtesë të përdorshme - + The system does not have enough working memory. At least %1 GiB is required. Sistemi s’ka kujtesë të mjaftueshme për të punuar. Lypsen të paktën %1 GiB. - + is plugged in to a power source është në prizë - + The system is not plugged in to a power source. Sistemi s'është i lidhur me ndonjë burim rryme. - + is connected to the Internet është lidhur në Internet - + The system is not connected to the Internet. Sistemi s’është i lidhur në Internet. - + is running the installer as an administrator (root) po e xhiron instaluesin si një përgjegjës (rrënjë) - + The setup program is not running with administrator rights. Programi i rregullimit nuk po xhirohen me të drejta përgjegjësi. - + The installer is not running with administrator rights. Instaluesi s’po xhirohet me të drejta përgjegjësi. - + has a screen large enough to show the whole installer ka një ekran të mjaftueshëm për të shfaqur krejt instaluesin - + The screen is too small to display the setup program. Ekrani është shumë i vogël për të shfaqur programin e rregullimit. - + The screen is too small to display the installer. Ekrani është shumë i vogël për shfaqjen e instaluesit. @@ -1429,7 +1690,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. HostInfoJob - + Collecting information about your machine. Po grumbullohen të dhëna rreth makinës tuaj. @@ -1437,25 +1698,25 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. IDJob - - + + + - OEM Batch Identifier Identifikues Partie OEM - + Could not create directories <code>%1</code>. S’u krijuan dot drejtoritë <code>%1</code>. - + Could not open file <code>%1</code>. S’u hap dot kartela <code>%1</code>. - + Could not write to file <code>%1</code>. S’u shkrua dot te kartelë <code>%1</code>. @@ -1463,7 +1724,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. InitcpioJob - + Creating initramfs with mkinitcpio. Po krijohet initramfs me mkinitcpio. @@ -1471,7 +1732,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. InitramfsJob - + Creating initramfs. Po krijohet initramfs. @@ -1479,17 +1740,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. InteractiveTerminalPage - + Konsole not installed Konsol e painstaluar - + Please install KDE Konsole and try again! Ju lutemi, instaloni KDE Konsole dhe riprovoni! - + Executing script: &nbsp;<code>%1</code> Po përmbushet programthi: &nbsp;<code>%1</code> @@ -1497,28 +1758,15 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. InteractiveTerminalViewStep - + Script Programth - - KeyboardPage - - - Set keyboard model to %1.<br/> - Si model tastiere do të caktohet %1.<br/> - - - - Set keyboard layout to %1/%2. - Si model tastiere do të caktohet %1%2. - - KeyboardQmlViewStep - + Keyboard Tastierë @@ -1526,7 +1774,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. KeyboardViewStep - + Keyboard Tastierë @@ -1534,65 +1782,88 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. LCLocaleDialog - + System locale setting Rregullim i vendores së sistemit - + 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>. Rregullimi i vendores së sistemit ka të bëjë me gjuhën dhe shkronjat për disa elementë të ndërfaqes së përdoruesit për rresht urdhrash.<br/>Vlera e tanishme është <strong>%1</strong>. - + &Cancel &Anuloje - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Po formësohet pjesë swap e fshehtëzuar. + + + + No target system available. + S’ka sistem të synuar. + + + + No rootMountPoint is set. + S’është ujdisur rootMountPoint. + + + + No configFilePath is set. + S’është ujdisur configFilePath. + + LicensePage - + Form Formular - + <h1>License Agreement</h1> <h1>Marrëveshje Licence</h1> - + I accept the terms and conditions above. I pranoj termat dhe kushtet më sipër. - + Please review the End User License Agreements (EULAs). Ju lutemi, shqyrtoni Marrëveshjet e Licencave për Përdorues të Thjeshtë (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. Kjo procedurë ujdisjeje do të instalojë software pronësor që është subjekt kushtesh licencimi. - + If you do not agree with the terms, the setup procedure cannot continue. Nëse nuk pajtoheni me kushtet, procedura e ujdisjes s’do të vazhdojë. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Që të furnizojë veçori shtesë dhe të përmirësojë punën e përdoruesit, kjo procedurë ujdisjeje mundet të instalojë software pronësor që është subjekt kushtesh licencimi. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Nëse nuk pajtohemi me kushtet, nuk do të instalohet software pronësor, dhe në vend të tij do të përdoren alternativa nga burimi i hapët. @@ -1600,7 +1871,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. LicenseViewStep - + License Licencë @@ -1608,109 +1879,102 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>përudhës %1</strong><br/>nga %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Përudhës grafik %1</strong><br/><font color=\"Grey\">nga %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Shtojcë shfletuesi %1</strong><br/><font color=\"Grey\">nga %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Kodek %1</strong><br/><font color=\"Grey\">nga %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Paketë %1</strong><br/><font color=\"Grey\">nga %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color=\"Grey\">nga %2</font> - + File: %1 Kartelë: %1 - + + Hide license text + Fshihe tekstin e licencës + + + Show the license text Shfaq tekstin e licencës - + Open license agreement in browser. Hape marrëveshjen e licencës në shfletues. - - - Hide license text - Fshihe tekstin e licencës - LocalePage - - The system language will be set to %1. - Si gjuhë sistemi do të caktohet %1. - - - - The numbers and dates locale will be set to %1. - Si vendore për numra dhe data do të vihet %1. - - - + Region: Rajon: - + Zone: Zonë: - - + + &Change... &Ndryshojeni… - - - Set timezone to %1/%2.<br/> - Si zonë kohore do të caktohet %1/%2.<br/> - LocaleQmlViewStep - + Location Vendndodhje + + LocaleTests + + + Quit + Dil + + LocaleViewStep - + Location Vendndodhje @@ -1718,35 +1982,35 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. LuksBootKeyFileJob - + Configuring LUKS key file. Po formësohet kartelë kyçesh LUKS. - - + + No partitions are defined. S’ka pjesë të përkufizuara. - - - + + + Encrypted rootfs setup error Gabim ujdisjeje rootfs të fshehtëzuar - + Root partition %1 is LUKS but no passphrase has been set. Pjesa rrënjë %1 është LUKS, por s’është caktuar frazëkalim. - + Could not create LUKS key file for root partition %1. S’u krijua dot kartelë kyçi LUKS për ndarjen rrënjë %1. - + Could not configure LUKS key file on partition %1. S’u formësua dot kartelë kyçesh LUKS te pjesën %1. @@ -1754,116 +2018,130 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. MachineIdJob - + Generate machine-id. Prodho machine-id. - + Configuration Error Gabim Formësimi - + No root mount point is set for MachineId. S’është caktuar pikë montimi rrënjë për MachineId. + + Map + + + Timezone: %1 + Zonë kohore: %1 + + + + 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. + Ju lutemi, përzgjidhni në hartë vendin tuaj të parapëlqyer, që kështu instaluesi të mund të sugjerojë për ju vendoren dhe rregullime zone kohore. Rregullimet e sugjeruara mund të përimtoni më poshtë. Kërkoni në hartë duke tërhequr, për lëvizje, dhe duke përdorur butonat +/- për zmadhim/zvogëlim, ose përdorni rrëshqitje me miun, për zmadhim/zvogëlim. + + NetInstallViewStep - - + Package selection Përzgjedhje paketash - + Office software Software zyrash - + Office package Paketë zyrash - + Browser software Software shfletuesi - + Browser package Paketë shfletuesi - + Web browser Shfletues - + Kernel Kernel - + Services Shërbime - + Login Hyrje - + Desktop Desktop - + Applications Aplikacione - + Communication Komunikim - + Development Zhvillim - + Office Zyrë - + Multimedia Multimedia - + Internet Internet - + Theming Tema - + Gaming Lojëra - + Utilities Të dobishme @@ -1871,7 +2149,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. NotesQmlViewStep - + Notes Shënime @@ -1879,17 +2157,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. OEMPage - + Ba&tch: &amp;Parti - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Jepni këtu një identifikues partie. Ky do të depozitohet te sistemi i synuar.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Formësim OEM-i</h1><p>Calamares do të përdorë rregullime OEM ndërkohë që formëson sistemin e synuar.</p></body></html> @@ -1897,260 +2175,317 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. OEMViewStep - + OEM Configuration Formësim OEM-i - + Set the OEM Batch Identifier to <code>%1</code>. Caktoni Identifikues partie OEM si <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Përzgjidhni Rajonin tuaj të parapëlqyer, ose përdorni rregullimet parazgjedhje. + + + + + + Timezone: %1 + Zonë kohore: %1 + + + + Select your preferred Zone within your Region. + Përzgjidhni brenda Rajonit tuaj Zonën tuaj të parapëlqyer. + + + + Zones + Zona + + + + You can fine-tune Language and Locale settings below. + Më poshtë mund të përimtoni rregullimet për Gjuhën dhe Vendoren. + + PWQ - + Password is too short Fjalëkalimi është shumë i shkurtër - + Password is too long Fjalëkalimi është shumë i gjatë - + Password is too weak Fjalëkalimi është shumë i dobët - + Memory allocation error when setting '%1' Gabim caktimi kujtese kur rregullohej '%1' - + Memory allocation error Gabim caktimi kujtese - + The password is the same as the old one Fjalëkalimi është i njëjtë me të vjetrin - + The password is a palindrome Fjalëkalimi është një palindromë - + The password differs with case changes only Fjalëkalimet ndryshojnë vetëm nga shkronja të mëdha apo të vogla - + The password is too similar to the old one Fjalëkalimi është shumë i ngjashëm me të vjetrin - + The password contains the user name in some form Fjalëkalimi, në një farë mënyre, përmban emrin e përdoruesit - + The password contains words from the real name of the user in some form Fjalëkalimi, në një farë mënyre, përmban fjalë nga emri i vërtetë i përdoruesit - + The password contains forbidden words in some form Fjalëkalimi, në një farë mënyre, përmban fjalë të ndaluara - - The password contains less than %1 digits - Fjalëkalimi përmban më pak se %1 shifra - - - + The password contains too few digits Fjalëkalimi përmban shumë pak shifra - - The password contains less than %1 uppercase letters - Fjalëkalimi përmban më pak se %1 shkronja të mëdha - - - + The password contains too few uppercase letters Fjalëkalimi përmban pak shkronja të mëdha - - - The password contains less than %1 lowercase letters - Fjalëkalimi përmban më pak se %1 shkronja të vogla + + + The password contains fewer than %n lowercase letters + + Fjalëkalimi përmban më pak se %n shkronjë të vogël + Fjalëkalimi përmban më pak se %n shkronja të vogla + - + The password contains too few lowercase letters Fjalëkalimi përmban pak shkronja të vogla - - The password contains less than %1 non-alphanumeric characters - Fjalëkalimi përmban më pak se %1 shenja jo alfanumerike - - - + The password contains too few non-alphanumeric characters Fjalëkalimi përmban pak shenja jo alfanumerike - - The password is shorter than %1 characters - Fjalëkalimi është më i shkurtër se %1 shenja - - - + The password is too short Fjalëkalimi është shumë i shkurtër - - The password is just rotated old one - Fjalëkalimi është i vjetri i ricikluar - - - - The password contains less than %1 character classes - Fjalëkalimi përmban më pak se %1 klasa shenjash - - - + The password does not contain enough character classes Fjalëkalimi nuk përmban klasa të mjaftueshme shenjash - - The password contains more than %1 same characters consecutively - Fjalëkalimi përmban më shumë se %1 shenja të njëjta njëra pas tjetrës - - - + The password contains too many same characters consecutively Fjalëkalimi përmban shumë shenja të njëjta njëra pas tjetrës - - The password contains more than %1 characters of the same class consecutively - Fjalëkalimi përmban më shumë se %1 shenja të së njëjtës klasë njëra pas tjetrës - - - + The password contains too many characters of the same class consecutively Fjalëkalimi përmban shumë shenja të së njëjtës klasë njëra pas tjetrës - - - The password contains monotonic sequence longer than %1 characters - Fjalëkalimi përmban varg monoton më të gjatë se %1 shenja + + + The password contains fewer than %n digits + + Fjalëkalim përmban më pak se %n shifër + Fjalëkalimi përmban më pak se %n shifra + + + + + The password contains fewer than %n uppercase letters + + Fjalëkalimi përmban më pak se %n shkronjë të madhe + Fjalëkalimi përmban më pak se %n shkronja të mëdha + + + + + The password contains fewer than %n non-alphanumeric characters + + Fjalëkalimi përmban më pak se %n shenjë jo alfanumerike + Fjalëkalimi përmban më pak se %n shenja jo alfanumerike + + + + + The password is shorter than %n characters + + Fjalëkalimi është më i shkurtër se %n shenjë + Fjalëkalimi është më i shkurtër se %n shenja + - + + The password is a rotated version of the previous one + Fjalëkalimi është një version i ricikluar i të dikurshmit + + + + The password contains fewer than %n character classes + + Fjalëkalimi përmban më pak se %n klasë shenjash + Fjalëkalimi përmban më pak se %n klasa shenjash + + + + + The password contains more than %n same characters consecutively + + Fjalëkalimi përmban më shumë se %n shenjë të njëjtë njëra pas tjetrës + Fjalëkalimi përmban më shumë se %n shenja të njëjta njëra pas tjetrës + + + + + The password contains more than %n characters of the same class consecutively + + Fjalëkalimi përmban më shumë se %n shenjë të së njëjtës klasë njëra pas tjetrës + Fjalëkalimi përmban më shumë se %n shenja të së njëjtës klasë njëra pas tjetrës + + + + + The password contains monotonic sequence longer than %n characters + + Fjalëkalimi përmban varg monoton më të gjatë se %n shenjë + Fjalëkalimi përmban varg monoton më të gjatë se %n shenja + + + + The password contains too long of a monotonic character sequence Fjalëkalimi përmban varg monoton shumë të gjatë shenjash - + No password supplied S’u dha fjalëkalim - + Cannot obtain random numbers from the RNG device S’merren dot numra të rëndomtë nga pajisja RNG - + Password generation failed - required entropy too low for settings Prodhimi i fjalëkalimit dështoi - entropi e domosdoshme për rregullimin shumë e ulët - + The password fails the dictionary check - %1 Fjalëkalimi s’kaloi dot kontrollin kundrejt fjalorit - %1 - + The password fails the dictionary check Fjalëkalimi s’kaloi dot kontrollin kundrejt fjalorit - + Unknown setting - %1 Rregullim i panjohur - %1 - + Unknown setting Rregullim i panjohur - + Bad integer value of setting - %1 Vlerë e plotë e gabuar për rregullimin - %1 - + Bad integer value Vlerë e plotë e gabuar - + Setting %1 is not of integer type Rregullimi për %1 s’është numër i plotë - + Setting is not of integer type Rregullimi s’është numër i plotë - + Setting %1 is not of string type Rregullimi për %1 s’është i llojit varg - + Setting is not of string type Rregullimi s’është i llojit varg - + Opening the configuration file failed Dështoi hapja e kartelës së formësimit - + The configuration file is malformed Kartela e formësimit është e keqformuar - + Fatal failure Dështim fatal - + Unknown error Gabim i panjohur - + Password is empty Fjalëkalimi është i zbrazët @@ -2158,40 +2493,48 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PackageChooserPage - + Form Formular - + Product Name Emër Produkti - + TextLabel EtiketëTekst - + Long Product Description Përshkrim i Gjatë i Produktit - + Package Selection Përzgjedhje Pakete - + Please pick a product from the list. The selected product will be installed. Ju lutemi, zgjidhni prej listës një produkt. Produkti i përzgjedhur do të instalohet. + + PackageChooserQmlViewStep + + + Packages + Paketa + + PackageChooserViewStep - + Packages Paketa @@ -2199,12 +2542,12 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PackageModel - + Name Emër - + Description Përshkrim @@ -2212,17 +2555,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Page_Keyboard - + Form Formular - + Keyboard Model: Model Tastiere: - + Type here to test your keyboard Që të provoni tastierën tuaj, shtypni këtu @@ -2230,96 +2573,96 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. Page_UserSetup - + Form Formular - + What is your name? Cili është emri juaj? - - What name do you want to use to log in? - Ç’emër doni të përdorni për t’u futur? - - - - Choose a password to keep your account safe. - Zgjidhni një fjalëkalim për ta mbajtur llogarinë tuaj të parrezikuar. - - - - - <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> - <small>Jepeni të njëjtin fjalëkalim dy herë, që të kontrollohet për gabime shkrimi. Një fjalëkalim i mirë do të përmbante një përzierje shkronjash, numrash dhe shenjash pikësimi, do të duhej të ishte të paktën tetë shenja i gjatë, dhe do të duhej të ndryshohej periodikisht.</small> - - - - What is the name of this computer? - Cili është emri i këtij kompjuteri? - - - + Your Full Name Emri Juaj i Plotë - + + What name do you want to use to log in? + Ç’emër doni të përdorni për t’u futur? + + + login hyrje - + + What is the name of this computer? + Cili është emri i këtij kompjuteri? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ky emër do të përdoret nëse e bëni kompjuterin të dukshëm për të tjerët në një rrjet.</small> - + Computer Name Emër Kompjuteri - - + + Choose a password to keep your account safe. + Zgjidhni një fjalëkalim për ta mbajtur llogarinë tuaj të parrezikuar. + + + + + <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> + <small>Jepeni të njëjtin fjalëkalim dy herë, që të kontrollohet për gabime shkrimi. Një fjalëkalim i mirë do të përmbante një përzierje shkronjash, numrash dhe shenjash pikësimi, do të duhej të ishte të paktën tetë shenja i gjatë, dhe do të duhej të ndryshohej periodikisht.</small> + + + + Password Fjalëkalim - - + + Repeat Password Ripërsëritni Fjalëkalimin - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Kur i vihet shenjë kësaj kutize, bëhet kontroll fortësie fjalëkalimi dhe s’do të jeni në gjendje të përdorni një fjalëkalim të dobët. - + Require strong passwords. Kërko doemos fjalëkalimet të fuqishëm. - + Log in automatically without asking for the password. Kryej hyrje vetvetiu, pa kërkuar fjalëkalimin. - + Use the same password for the administrator account. Përdor të njëjtin fjalëkalim për llogarinë e përgjegjësit. - + Choose a password for the administrator account. Zgjidhni një fjalëkalim për llogarinë e përgjegjësit. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Jepeni të njëjtin fjalëkalim dy herë, që të mund të kontrollohet për gabime shkrimi.</small> @@ -2327,42 +2670,42 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PartitionLabelsView - + Root Rrënjë - + Home Shtëpi - + Boot Nisje - + EFI system Sistem EFI - + Swap Swap - + New partition for %1 Pjesë e re për %1 - + New partition Pjesë e re - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2371,34 +2714,39 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PartitionModel - - + + Free Space Hapësirë e Lirë - - + + New partition Pjesë e re - + Name Emër - + File System Sistem Kartelash - + + File System Label + Etiketë Sistemi Kartelash + + + Mount Point Pikë Montimi - + Size Madhësi @@ -2406,195 +2754,185 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PartitionPage - + Form Formular - + Storage de&vice: &Pajisje depozitimi: - + &Revert All Changes &Prapëso Krejt Ndryshimet - + New Partition &Table &Tabelë e Re Pjesësh - + Cre&ate &Krijoje - + &Edit &Përpunoje - + &Delete &Fshije - + New Volume Group Grup i Ri Vëllimesh - + Resize Volume Group Ripërmaso Grup Vëllimesh - + Deactivate Volume Group Çaktivizo Grup Vëllimesh - + Remove Volume Group Hiqni Grup Vëllimesh - + I&nstall boot loader on: &Instalo ngarkues nisjesh në: - + Are you sure you want to create a new partition table on %1? Jeni i sigurt se doni të krijoni një tabelë të re pjesësh në %1? - + Can not create new partition S’krijohet dot pjesë e re - + 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. - Tabela e pjesëzimit te %1 ka tashmë %2 pjesë parësore, dhe s’mund të shtohen të tjera. Ju lutemi, në vend të kësaj, hiqni një pjesë parësore dhe shtoni një pjesë të zgjeruar. + Tabela e pjesëtimit te %1 ka tashmë %2 pjesë parësore, dhe s’mund të shtohen të tjera. Ju lutemi, në vend të kësaj, hiqni një pjesë parësore dhe shtoni një pjesë të zgjeruar. PartitionViewStep - + Gathering system information... Po grumbullohen të dhëna mbi sistemin… - + Partitions Pjesë - - Install %1 <strong>alongside</strong> another operating system. - Instalojeni %1 <strong>në krah</strong> të një tjetër sistemi operativ. + + Unsafe partition actions are enabled. + Janë aktivizuar veprime jo të parrezik pjesësh. - - <strong>Erase</strong> disk and install %1. - <strong>Fshije</strong> diskun dhe instalo %1. + + Partitioning is configured to <b>always</b> fail. + Pjesëzimi është formësuar të dështojë <b>përherë</b>. - - <strong>Replace</strong> a partition with %1. - <strong>Zëvendësojeni</strong> një pjesë me %1. + + No partitions will be changed. + S’do të ndryshohet ndonjë pjesë. - - <strong>Manual</strong> partitioning. - Pjesëzim <strong>dorazi</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Instaloje %1 <strong>në krah</strong> të një tjetri sistemi operativ në diskun <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Fshije</strong> diskun <strong>%2</strong> (%3) dhe instalo %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Zëvendëso</strong> një pjesë te disku <strong>%2</strong> (%3) me %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Pjesëzim <strong>dorazi</strong> në diskun <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disku <strong>%1</strong> (%2) - - - + Current: E tanishmja: - + After: Më Pas: - + No EFI system partition configured S’ka të formësuar pjesë sistemi EFI - - 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>esp</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. - Që të niset %1, është e domosdoshme një pjesë sistemi EFI.<br/><br/>Që të formësoni një pjesë sistemi EFI, kthehuni mbrapsht dhe përzgjidhni ose krijoni një sistem kartelash FAT32 me flamurkën <strong>esp</strong> të aktivizuar dhe me pikë montimi <strong>%2</strong>.<br/><br/>Mund të vazhdoni pa rregulluar një pjesë sistemi EFI, por mundet që sistemi të mos arrijë dot të niset. + + EFI system partition configured incorrectly + Pjesë EFI sistemi e formësuar pasaktësisht - - EFI system partition flag not set - S’është vënë flamurkë EFI pjese sistemi + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Që të niset %1, është e nevojshme një pjesë EFI sistemi.<br/><br/>Që të formësoni një pjesë sistemi EFI, kthehuni nbrapsht dhe përzgjidhni ose krijoni një sistem të përshtatshëm kartelash. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Që të niset %1, është e domosdoshme një pjesë sistemi EFI.<br/><br/>Është formësuar një pjesë me pikë montimi <strong>%2</strong>, por pa i vënë flamurkën <strong>esp</strong>.<br/>Që t’ia vini, kthehuni mbrapsht dhe përpunoni pjesë.<br/><br/>Mund të vazhdoni pa i vënë flamurkën, por mundet që sistemi të mos arrijë dot të niset. + + The filesystem must be mounted on <strong>%1</strong>. + Sistemi i kartelave duhet të montohet te <strong>%1</strong>. - + + The filesystem must have type FAT32. + Sistemi i kartelave duhet të jetë i llojit FAT32. + + + + The filesystem must be at least %1 MiB in size. + Sistemi i kartelave duhet të jetë të paktën %1 MiB i madh. + + + + The filesystem must have flag <strong>%1</strong> set. + Sistemi i kartelave duhet të ketë të përzgjedhur parametrin <strong>%1</strong>. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Mund të vazhdoni pa ujdisur një pjesë EFI sistemi, por sistemi juaj mund të mos arrijë të niset. + + + Option to use GPT on BIOS Mundësi për përdorim GTP-je në BIOS - - 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. - Një tabelë pjesësh GPT është mundësia më e mirë për krejt sistemet. Ky instalues mbulon gjithashtu një ujdisje të tillë edhe për sisteme BIOS.<br/><br/>Që të formësoni një tabelë pjesësh GPT në BIOS, (nëse s’është bërë ende) kthehuni dhe ujdiseni tabelën e pjesëve si GPT, më pas krijoni një ndarje të paformatuar 8 MB me shenjën <strong>bios_grub</strong> të aktivizuar.<br/><br/>Një pjesë e paformatuar 8 MB është e nevojshme për të nisur %1 në një sistem BIOS me GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + Mundësia më e mirë për krejt sistemet është një tabelë GPT pjesësh. Ky instalues mbulon një ujdisje të tillë edhe për sisteme BIOS.<br/><br/>Që të formësoni një tabelë GPT pjesësh në BIOS, (nëse s’është bërë tashmë), kthehuni mbrapsht dhe vëreni tabelën e pjesëve si GPT, më pas, krijoni një pjesë 8 MB të paformatuar, me parametrin <strong>%2</strong> të aktivizuar.<br/><br/>Një pjesë e paformatuar 8 MB është e nevojshme për të nisur %1 në një sistem BIOS me GPT. - + Boot partition not encrypted Pjesë nisjesh e pafshehtëzuar - + 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. Tok me pjesën e fshehtëzuar <em>root</em> qe rregulluar edhe një pjesë <em>boot</em> veçmas, por pjesa <em>boot</em> s’është e fshehtëzuar.<br/><br/>Ka preokupime mbi sigurinë e këtij lloj rregullimi, ngaqë kartela të rëndësishme sistemi mbahen në një pjesë të pafshehtëzuar.<br/>Mund të vazhdoni, nëse doni, por shkyçja e sistemit të kartelave do të ndodhë më vonë, gjatë nisjes së sistemit.<br/>Që të fshehtëzoni pjesën <em>boot</em>, kthehuni mbrapsht dhe rikrijojeni, duke përzgjedhur te skena e krijimit të pjesës <strong>Fshehtëzoje</strong>. - + has at least one disk device available. ka të paktën një pajisje disku për përdorim. - + There are no partitions to install on. S’ka pjesë ku të instalohet. @@ -2602,31 +2940,31 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PlasmaLnfJob - + Plasma Look-and-Feel Job - Akt Plasma Look-and-Feel + Akt Plasma Pamje-dhe-Ndjesi - - + + Could not select KDE Plasma Look-and-Feel package - S’u përzgjodh dot paketa KDE Plasma Look-and-Feel + S’u përzgjodh dot paketa KDE Plasma Pamje-dhe-Ndjesi PlasmaLnfPage - + Form Formular - + 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. Ju lutemi, zgjidhni një grup parametrash pamje-dhe-ndjesi për KDE Plasma Desktop. Mundeni edhe ta anashkaloni këtë hap dhe të formësoni pamje-dhe-ndjesi pasi të jetë rregulluar sistemi. Klikimi mbi një përzgjedhje pamje-dhe-ndjesi do t’ju japë një paraparje të atypëratyshme të saj. - + 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. Ju lutemi, zgjidhni një grup parametrash pamje-dhe-ndjesi për KDE Plasma Desktop. Mundeni edhe ta anashkaloni këtë hap dhe të formësoni pamje-dhe-ndjesi pasi të jetë instaluar sistemi. Klikimi mbi një përzgjedhje pamje-dhe-ndjesi do t’ju japë një paraparje të atypëratyshme të saj. @@ -2634,7 +2972,7 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PlasmaLnfViewStep - + Look-and-Feel Pamje-dhe-Ndjesi @@ -2642,17 +2980,17 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. PreserveFiles - + Saving files for later ... Po ruhen kartela për më vonë ... - + No files configured to save for later. S’ka kartela të formësuara për t’i ruajtur më vonë. - + Not all of the configured files could be preserved. S’u mbajtën dot tërë kartelat e formësuara. @@ -2660,14 +2998,14 @@ Instaluesi do të mbyllet dhe krejt ndryshimet do të hidhen tej. ProcessResult - + There was no output from the command. S’pati përfundim nga urdhri. - + Output: @@ -2676,52 +3014,52 @@ Përfundim: - + External command crashed. Urdhri i jashtëm u vithis. - + Command <i>%1</i> crashed. Urdhri <i>%1</i> u vithis. - + External command failed to start. Dështoi nisja e urdhrit të jashtëm. - + Command <i>%1</i> failed to start. Dështoi nisja e urdhrit <i>%1</i>. - + Internal error when starting command. Gabim i brendshëm kur niset urdhri. - + Bad parameters for process job call. Parametra të gabuar për thirrje akti procesi. - + External command failed to finish. S’u arrit të përfundohej urdhër i jashtëm. - + Command <i>%1</i> failed to finish in %2 seconds. Urdhri <i>%1</i> s’arriti të përfundohej në %2 sekonda. - + External command finished with errors. Urdhri i jashtë përfundoi me gabime. - + Command <i>%1</i> finished with exit code %2. Urdhri <i>%1</i> përfundoi me kod daljeje %2. @@ -2729,89 +3067,95 @@ Përfundim: QObject - - Default Keyboard Model - Model Parazgjedhje Për Tastierën - - - - - Default - Parazgjedhje - - - - unknown - e panjohur - - - - extended - extended - - - - unformatted - e paformatuar - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Hapësirë e papjesëzuar ose tabelë e panjohur pjesësh - - - - (no mount point) - (s’ka pikë montimi) - - - - Requirements checking for module <i>%1</i> is complete. - Kontrolli i domosdoshmërive për modulin <i>%1</i> u plotësua. - - - + %1 (%2) %1 (%2) - - No product - S’ka produkt + + unknown + e panjohur - - No description provided. - S’u dha përshkrim. + + extended + extended - - - - + + unformatted + e paformatuar + + + + swap + swap + + + + + Default + Parazgjedhje + + + + + + File not found S’u gjet kartelë - + Path <pre>%1</pre> must be an absolute path. Shtegu <pre>%1</pre> duhet të jetë shteg absolut. - + + Directory not found + Drejtoria s’u gjet + + + + Could not create new random file <pre>%1</pre>. S’u krijua dot kartelë e re kuturu <pre>%1</pre>. + + + No product + S’ka produkt + + + + No description provided. + S’u dha përshkrim. + + + + (no mount point) + (s’ka pikë montimi) + + + + Unpartitioned space or unknown partition table + Hapësirë e papjesëtuar ose tabelë e panjohur pjesësh + + + + Recommended + + + <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> + <p>Ky kompjuter s’plotëson disa nga domosdoshmëritë e rekomanduara për ujdisjen e %1.<br/> + Ujdisja mund të vazhdohet, por disa veçori mund të jenë të çaktivizuara.</p> + RemoveUserJob - + Remove live user from target system Hiq përdoruesin live nga sistemi i synuar @@ -2819,18 +3163,18 @@ Përfundim: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Hiqe Grupin e Vëllimeve të quajtur %1. - + Remove Volume Group named <strong>%1</strong>. Hiqe Grupin e Vëllimeve të quajtur <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Instaluesi s’arriti të heqë një grup vëllimesh të quajtur '%1'. @@ -2838,143 +3182,160 @@ Përfundim: ReplaceWidget - + Form Formular - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Përzgjidhni ku të instalohet %1.<br/><font color=\"red\">Kujdes: </font>kjo do të sjellë fshirjen e krejt kartelave në pjesën e përzgjedhur. - + The selected item does not appear to be a valid partition. Objekti i përzgjedhur s’duket se është pjesë e vlefshme. - + %1 cannot be installed on empty space. Please select an existing partition. %1 s’mund të instalohet në hapësirë të zbrazët. Ju lutemi, përzgjidhni një pjesë ekzistuese. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - %1 s’mund të instalohet në një pjesë të llojit extended. Ju lutemi, përzgjidhni një pjesë parësore ose logjike ekzistuese. + %1 s’mund të instalohet në një pjesë të llojit “extended”. Ju lutemi, përzgjidhni një pjesë parësore ose logjike ekzistuese. - + %1 cannot be installed on this partition. %1 s’mund të instalohet në këtë pjesë. - + Data partition (%1) Pjesë të dhënash (%1) - + Unknown system partition (%1) Pjesë sistemi e panjohur (%1) - + %1 system partition (%2) Pjesë sistemi %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Ndarja %1 është shumë e vogël për %2. Ju lutemi, përzgjidhni një pjesë me kapacitet të paktën %3 GiB. - + <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. - <strong>%2</strong><br/><br/>Në këtë sistem s’gjendet dot ndonjë pjesë sistemi EFI. Ju lutemi, që të rregulloni %1, kthehuni mbrapsht dhe përdorni procesin e pjesëzimit dorazi. + <strong>%2</strong><br/><br/>Në këtë sistem s’gjendet dot ndonjë pjesë sistemi EFI. Ju lutemi, që të rregulloni %1, kthehuni mbrapsht dhe përdorni procesin e pjesëtimit dorazi. - - - + + + <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. <strong>%3</strong><br/><br/>%1 do të instalohet në %2.<br/><font color=\"red\">Kujdes: </font>krejt të dhënat në pjesën %2 do të humbin. - + The EFI system partition at %1 will be used for starting %2. - Për nisjen e %2 do të përdoret ndarja EFI e sistemit te %1. + Për nisjen e %2 do të përdoret pjesa EFI e sistemit te %1. - + EFI system partition: Pjesë Sistemi EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Ky kompjuter nuk plotëson domosdoshmëritë minimum për instalimin e %1.<br/> + Instalimi s’mund të vazhdojë.</p> + + + + <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> + <p>Ky kompjuter s’plotëson disa nga domosdoshmëritë e rekomanduara për ujdisjen e %1.<br/> + Ujdisja mund të vazhdohet, por disa veçori mund të jenë të çaktivizuara.</p> + + ResizeFSJob - + Resize Filesystem Job Akt Ripërmasimi Sistemi Kartelash - + Invalid configuration - Formësim i palvefshëm + Formësim i pavlefshëm - + The file-system resize job has an invalid configuration and will not run. Akti i ripërmasimit të sistemit të kartela ka një formësim të pavlefshëm dhe nuk do të kryhet. - + KPMCore not Available S’ka KPMCore - + Calamares cannot start KPMCore for the file-system resize job. Calamares s’mund të nisë KPMCore për aktin e ripërmasimit të sistemit të kartelave. - - - - - + + + + + Resize Failed Ripërmasimi Dështoi - + The filesystem %1 could not be found in this system, and cannot be resized. Sistemi %1 i kartelave s’u gjet dot në këtë sistem, dhe s’mund të ripërmasohet. - + The device %1 could not be found in this system, and cannot be resized. Pajisja %1 s’u gjet dot në këtë sistem, dhe s’mund të ripërmasohet. - - + + The filesystem %1 cannot be resized. Sistemi %1 i kartelave s’mund të ripërmasohet. - - + + The device %1 cannot be resized. Pajisja %1 s’mund të ripërmasohet. - + The filesystem %1 must be resized, but cannot. Sistemi %1 i kartelave duhet ripërmasuar, por kjo s’bëhet dot. - + The device %1 must be resized, but cannot Pajisja %1 duhet ripërmasuar, por kjo s’bëhet dot @@ -2982,22 +3343,22 @@ Përfundim: ResizePartitionJob - + Resize partition %1. Ripërmaso pjesën %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ripërmasoje pjesën <strong>%2MiB</strong> <strong>%1</strong> në <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Po ripërmasohet ndarja %2MiB %1 në %3MiB. - + The installer failed to resize partition %1 on disk '%2'. Instaluesi s’arriti të ripërmasojë pjesën %1 në diskun '%2'. @@ -3005,7 +3366,7 @@ Përfundim: ResizeVolumeGroupDialog - + Resize Volume Group Ripërmaso Grup Vëllimesh @@ -3013,18 +3374,18 @@ Përfundim: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Ripërmasoje grupin e vëllimeve të quajtur %1 nga %2 në %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Ripërmasoje grupin e vëllimeve të quajtur <strong>%1</strong> nga <strong>%2</strong> në <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Instaluesi s’arriti të ripërmasojë një grup vëllimesh të quajtur '%1'. @@ -3032,83 +3393,55 @@ Përfundim: ResultsListDialog - + For best results, please ensure that this computer: Për përfundime më të mira, ju lutemi, garantoni që ky kompjuter: - + System requirements Sistem i domosdoshëm - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Ky kompjuter s’i plotëson kërkesat minimum për rregullimin e %1.<br/>Rregullimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Ky kompjuter s’i plotëson kërkesat minimum për instalimin e %1.<br/>Instalimi s’mund të vazhdojë. <a href=\"#details\">Hollësi…</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për rregullimin e %1.<br/>Rregullimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Ky kompjuter s’i plotëson disa nga domosdoshmëritë e rekomanduara për instalimin e %1.<br/>Instalimi mund të vazhdojë, por disa veçori mund të përfundojnë të çaktivizuara. - - - - This program will ask you some questions and set up %2 on your computer. - Ky program do t’ju bëjë disa pyetje dhe do të rregullojë %2 në kompjuterin tuaj. - - ScanningDialog - + Scanning storage devices... Po kontrollohen pajisje depozitimi… - + Partitioning - Pjesëzim + Pjesëtim SetHostNameJob - + Set hostname %1 Cakto strehëemër %1 - + Set hostname <strong>%1</strong>. Cakto strehëemër <strong>%1</strong>. - + Setting hostname %1. Po caktohet strehëemri %1. + - Internal Error Gabim i Brendshëm - - + + Cannot write hostname to target system S’shkruhet dot strehëemër te sistemi i synuar @@ -3116,29 +3449,29 @@ Përfundim: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Si model tastiere do të caktohet %1, si skemë %2-%3 - + Failed to write keyboard configuration for the virtual console. S’u arrit të shkruhej formësim tastiere për konsolën virtuale. - - - + + + Failed to write to %1 S’u arrit të shkruhej te %1 - + Failed to write keyboard configuration for X11. S’u arrit të shkruhej formësim tastiere për X11. - + Failed to write keyboard configuration to existing /etc/default directory. S’u arrit të shkruhej formësim tastiere në drejtori /etc/default ekzistuese. @@ -3146,125 +3479,125 @@ Përfundim: SetPartFlagsJob - + Set flags on partition %1. - Vendos flamurka në pjesën %1. + Vendos parametra në pjesën %1. - + Set flags on %1MiB %2 partition. - Vendos flamurka në pjesën %1MiB %2. + Vendos parametra në pjesën %1MiB %2. - + Set flags on new partition. - Vendos flamurka në pjesë të re. + Vendos parametra në pjesë të re. - + Clear flags on partition <strong>%1</strong>. - Hiqi flamurkat te ndarja <strong>%1</strong>. + Hiqi parametrat te ndarja <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - Hiqi flamurkat te pjesa %1MiB <strong>%2</strong>. + Hiqi parametrat te pjesa %1MiB <strong>%2</strong>. + + + + Clear flags on new partition. + Hiqi parametrat te ndarja e re. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + Vëri pjesës <strong>%1</strong> parametrin <strong>%2</strong>. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Vëri pjesës %1MiB <strong>%2</strong> parametrin <strong>%3</strong>. - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Vëri flamurkë pjesës %1MiB <strong>%2</strong> si <strong>%3</strong>. + Flag new partition as <strong>%1</strong>. + Vëri pjesës së re parametrin <strong>%1</strong>. - + + Clearing flags on partition <strong>%1</strong>. + Po hiqen parametrat në pjesën <strong>%1</strong>. + + + Clearing flags on %1MiB <strong>%2</strong> partition. - Po hiqen flamurkat në pjesën %1MiB <strong>%2</strong>. + Po hiqen parametrat në pjesën %1MiB <strong>%2</strong>. + + + + Clearing flags on new partition. + Po hiqen parametrat në pjesën e re. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + Po vihen parametrat <strong>%2</strong> në pjesën <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Po vihen parametrat <strong>%3</strong> në pjesën %1MiB <strong>%2</strong>. - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Po vihen flamurkat <strong>%3</strong> në pjesën %1MiB <strong>%2</strong>. - - - - Clear flags on new partition. - Hiqi flamurkat te ndarja e re. - - - - Flag partition <strong>%1</strong> as <strong>%2</strong>. - Vëri flamurkë pjesës <strong>%1</strong> si <strong>%2</strong>. - - - - Flag new partition as <strong>%1</strong>. - Vëri flamurkë pjesës së re si <strong>%1</strong>. - - - - Clearing flags on partition <strong>%1</strong>. - Po hiqen flamurkat në pjesën <strong>%1</strong>. - - - - Clearing flags on new partition. - Po hiqen flamurkat në pjesën e re. - - - - Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - Po vihen flamurkat <strong>%2</strong> në pjesën <strong>%1</strong>. - - - Setting flags <strong>%1</strong> on new partition. - Po vihen flamurkat <strong>%1</strong> në pjesën e re. + Po vihen parametrat <strong>%1</strong> në pjesën e re. - + The installer failed to set flags on partition %1. - Instaluesi s’arriti të vërë flamurka në pjesën %1. + Instaluesi s’arriti të vërë parametra në pjesën %1. SetPasswordJob - + Set password for user %1 Caktoni fjalëkalim për përdoruesin %1 - + Setting password for user %1. Po caktohet fjalëkalim për përdoruesin %1. - + Bad destination system path. Shteg i gabuar destinacioni sistemi. - + rootMountPoint is %1 rootMountPoint është %1 - + Cannot disable root account. S’mund të çaktivizohet llogaria rrënjë. - + passwd terminated with error code %1. passwd përfundoi me kod gabimi %1. - + Cannot set password for user %1. S’caktohet dot fjalëkalim për përdoruesin %1. - + usermod terminated with error code %1. usermod përfundoi me kod gabimi %1. @@ -3272,45 +3605,82 @@ Përfundim: SetTimezoneJob - + Set timezone to %1/%2 Si zonë kohore do të caktohet %1/%2 - + Cannot access selected timezone path. S’përdoret dot shtegu i zonës kohore të përzgjedhur. - + Bad path: %1 Shteg i gabuar: %1 - + Cannot set timezone. S’caktohet dot zonë kohore. - + Link creation failed, target: %1; link name: %2 Krijimi i lidhjes dështoi, objektiv: %1; emër lidhjeje: %2 - + Cannot set timezone, S’caktohet dot zonë kohore, - + Cannot open /etc/timezone for writing S’hapet dot /etc/timezone për shkrim + + SetupGroupsJob + + + Preparing groups. + Po përgatiten grupe. + + + + + Could not create groups in target system + S’u krijuan dot grupe te sistemi i synuar + + + + These groups are missing in the target system: %1 + Këto grupe mungojnë te sistemi i synuar: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Formësoni përdorues <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + S’mund të kryhet chmod mbi kartelën sudoers. + + + + Cannot create sudoers file for writing. + S’krijohet dot kartelë sudoers për shkrim. + + ShellProcessJob - + Shell Processes Job Akt Procesesh Shelli @@ -3318,81 +3688,117 @@ Përfundim: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e rregullimit. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Kjo është një përmbledhje e asaj që do të ndodhë sapo të nisni procedurën e instalimit. + + &Yes + &Po - - - SummaryViewStep - - Summary - Përmbledhje + + &No + &Jo + + + + &Cancel + &Anuloje + + + + &Close + &Mbylle TrackingInstallJob - + Installation feedback Përshtypje mbi instalimin - + Sending installation feedback. Po dërgohen përshtypjet mbi instalimin. - + Internal error in install-tracking. Gabim i brendshëm në shquarjen e instalimit. - + HTTP request timed out. Kërkesës HTTP i mbaroi koha. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Përshtypje nga përdorues të KDE-së + + + + Configuring KDE user feedback. + Formësim përshtypjesh nga përdorues të KDE-së. + + + + + Error in KDE user feedback configuration. + Gabim në formësimin e përshtypjeve nga përdorues të KDE-së. + + + + Could not configure KDE user feedback correctly, script error %1. + Përshtypjet nga përdorues të KDE-së s’u formësuan dot saktë, gabim programthi %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + S’u formësuan dot saktë përshtypjet nga përdorues të KDE-së, gabim Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Të dhëna nga makina - + Configuring machine feedback. Po formësohet moduli Të dhëna nga makina. - - + + Error in machine feedback configuration. Gabim në formësimin e modulit Të dhëna nga makina. - + Could not configure machine feedback correctly, script error %1. S’u formësua dot si duhet moduli Të dhëna nga makina, gabim programthi %1. - + Could not configure machine feedback correctly, Calamares error %1. S’u formësua dot si duhet moduli Të dhëna nga makina, gabim Calamares %1. @@ -3400,106 +3806,97 @@ Përfundim: TrackingPage - + Form Formular - + Placeholder Vendmbajtëse - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Duke përzgjedhur këtë, <span style=" font-weight:600;">s’do të dërgoni fare të dhëna</span> rreth instalimit tuaj.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Klikoni këtu që të mos dërgohet <span style=" font-weight:600;">fare informacion</span> mbi instalimin tuaj.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Për më tepër të dhëna rreth përshtypjeve të përdoruesit, klikoni këtu</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Instalimi i gjurmimit e ndihmon %1 të shohë se sa përdorues ka, në çfarë hardware-i e instalojnë %1 dhe (përmes dy mundësive të fundit më poshtë), të marrë të dhëna të vazhdueshme rre aplikacioneve të parapëlqyera. Që të shihni se ç’dërgohet, ju lutemi, klikoni ikonën e ndihmës në krah të çdo fushe. + + 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. + Gjurmimi e ndihmon %1 të shoë se sa shpesh është instaluar, në çfarë hardware-i është instaluar dhe cilët aplikacione janë përdorur. Që të shihni se ç’do të dërgohet, ju lutemi, klikoni mbi ikonën e nidhmës në krah të secilës fushë. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Duke përzgjedhur këtë, do të dërgoni të dhëna mbi instalimin dhe hardware-in tuaj. Këto të dhëna do të <b>dërgohen vetëm një herë</b>, pasi të përfundojë instalimi. + + 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. + Duke përzgjedhur këtë, do të dërgoni informacion rreth instalimit dhe hardware-it tuaj. Ky informacion do të dërgohet vetëm <b>një herë</b>, pasi të përfundojë instalimi. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Duke përzgjedhur këtë, do të dërgoni <b>periodikisht</b> te %1 të dhëna mbi instalimin, hardware-in dhe aplikacionet tuaja. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Duke përzgjedhur këtë, do të dërgoni periodikisht te %1 informacion rreth instalimit, hardware-it dhe aplikacioneve të <b>makinës</b> tuaj. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Duke përzgjedhur këtë, do të dërgoni <b>rregullisht</b> te %1 të dhëna mbi instalimin, hardware-in, aplikacionet dhe rregullsitë tuaja në përdorim. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Duke përzgjedhur këtë, do të dërgoni rregullisht te %1 informacion rreth instalimit tuaj si <b>përdorues</b>, hardware-it, aplikacioneve dhe rregullsive në përdorimin e aplikacioneve. TrackingViewStep - + Feedback Përshtypje + + UmountJob + + + Unmount file systems. + Çmontoni sisteme kartelash. + + + + No target system available. + S’ka sistem të synuar. + + + + No rootMountPoint is set. + S’është ujdisur rootMountPoint. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas rregullimit.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni disa llogari, pas instalimit.</small> + + + UsersQmlViewStep - - Your username is too long. - Emri juaj i përdoruesit është shumë i gjatë. - - - - Your username must start with a lowercase letter or underscore. - Emri juaj i përdoruesit duhet të fillojë me një shkronjë të vogël ose nënvijë. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Lejohen vetëm shkronja të vogla, numra, nënvijë dhe vijë ndarëse. - - - - Only letters, numbers, underscore and hyphen are allowed. - Lejohen vetëm shkronja, numra, nënvijë dhe vijë ndarëse. - - - - Your hostname is too short. - Strehëemri juaj është shumë i shkurtër. - - - - Your hostname is too long. - Strehëemri juaj është shumë i gjatë. - - - - Your passwords do not match! - Fjalëkalimet tuaj s’përputhen! + + Users + Përdorues UsersViewStep - + Users Përdorues @@ -3507,65 +3904,67 @@ Përfundim: VariantModel - + Key + Column header for key/value Kyç - + Value + Column header for key/value Vlerë VolumeGroupBaseDialog - + Create Volume Group Krijoni Grup Volumesh - + List of Physical Volumes Listë Vëllimesh Fizike - + Volume Group Name: Emër Grupi Vëllimesh: - + Volume Group Type: Lloj Grupi Vëllimesh: - + Physical Extent Size: Madhësi e Shtrirjes Fizike: - + MiB MiB - + Total Size: Madhësi Gjithsej: - + Used Size: Madhësi e Përdorur: - + Total Sectors: Sektorë Gjithsej: - + Quantity of LVs: Sasi VL-sh: @@ -3573,106 +3972,106 @@ Përfundim: WelcomePage - + Form Formular - - + + Select application and system language Përzgjidhni gjuhë aplikacioni dhe sistemi + &About + &Mbi + + + Open donations website Hap sajtin e dhurimeve - + &Donate &Dhuroni - + Open help and support website Hap sajtin e ndihmës dhe asistencës + &Support + &Asistencë + + + Open issues and bug-tracking website Hap sajtin ndjekjes së problemeve dhe të metave - Open release notes website - Hapni sajtin e shënimeve mbi hedhjet në qarkullim - - - - &Release notes - Shënime &versioni - - - &Known issues &Probleme të njohura - - &Support - &Asistencë + + Open release notes website + Hapni sajtin e shënimeve mbi hedhjet në qarkullim - - &About - &Mbi + + &Release notes + Shënime &versioni - - <h1>Welcome to the %1 installer.</h1> - <h1>Mirë se vini te instaluesi i %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Mirë se vini te instaluesi Calamares për %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Mirë se vini te programi i rregullimit Calamares për %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Mirë se vini te rregullimi i %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Mirë se vini te instaluesi Calamares për %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Mirë se vini te instaluesi i %1.</h1> + + + + %1 support + Asistencë %1 + + + About %1 setup Mbi rregullimin e %1 - + About %1 installer Rreth instaluesit %1 - + <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. - <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Të drejta kopjimi 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Të drejta kopjimi 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Falënderime për <a href="https://calamares.io/team/">ekipin Calamares</a> dhe <a href="https://www.transifex.com/calamares/calamares/">ekipin e përkthyesve të Calamares</a>.<br/><br/>Zhvillimi i <a href="https://calamares.io/">Calamares</a> sponsorizohet nga <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Çlirim i Software-it. - - - - %1 support - Asistencë %1 + <h1>%1</h1><br/><strong>%2<br/>për %3</strong><br/><br/>Të drejta kopjimi 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Të drejta kopjimi 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Falënderime për <a href="https://calamares.io/team/">ekipin e Calamares</a> dhe <a href="https://www.transifex.com/calamares/calamares/">ekipin e përkthyesve të Calamares</a>.<br/><br/>Zhvillimi i <a href="https://calamares.io/">Calamares</a> sponsorizohet nga <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Mirë se vini @@ -3680,26 +4079,70 @@ Përfundim: WelcomeViewStep - + Welcome Mirë se vini + + ZfsJob + + + Create ZFS pools and datasets + Krijoni pool-e dhe grupe të dhënash ZFS + + + + Failed to create zpool on + S’u arrit të krijohej zpool në + + + + Configuration Error + Gabim Formësimi + + + + No partitions are available for ZFS. + S’ka pjesë të passhme për ZFS + + + + Internal data missing + Mungojnë të dhëna të brendshme + + + + + Failed to create zpool + S’u arrit të krijohej zpool + + + + Failed to create dataset + S’u arrit të krijohej grup të dhënash + + + + The output was: + Output-i qe: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <h1>%1</h1><br/> <strong>%2<br/> @@ -3715,7 +4158,94 @@ Përfundim: Liberating Software. - + + Back + Mbrapsht + + + + calamares-sidebar + + + Show debug information + Shfaq të dhëna diagnostikimi + + + + finishedq + + + Installation Completed + Instalimi u Plotësua + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 është instaluar në kompjuterin tuaj.<br/> + Tani mundeni ta rinisni me sistemin tuaj të ri, ose të vazhdoni përdorimin e mjedisit Live. + + + + Close Installer + Mbylle Instaluesin + + + + Restart System + Rinis Sistemin + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Një regjistër i plotë i instalimit gjendet si installation.log, te drejtoria shtëpi e përdoruesit Live.<br/> + Te sistemi i synuar, ky regjistër është kopjuar te /var/log/installation.log.</p> + + + + finishedq@mobile + + + Installation Completed + Instalimi u Plotësua + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 është instaluar në kompjuterin tuaj.<br/> + Tani mund të rinisni pajisjen tuaj. + + + + Close + Mbylle + + + + Restart + Rinise + + + + i18n + + + <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>. + <h1>Gjuhë</h1> </br> + Vlera për vendoren e sistemit prek gjuhën dhe shkronjat e përdorura për disa elementë të ndërfaqes rresh urdhrash të përdoruesit. Vlera e tanishme është <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Vendore</h1> </br> + Rregullimi i vendores së sistemit prek formatin e numrave dhe datave. Rregullimi i tanishëm është <strong>%1</strong>. + + + Back Mbrapsht @@ -3723,52 +4253,43 @@ Përfundim: keyboardq - - Keyboard Model - Model Tastiere + + To activate keyboard preview, select a layout. + Që të aktivizohet paraparje tastiere, përzgjidhni një skemë. - - Pick your preferred keyboard model or use the default one based on the detected hardware - Zgjidhni modelin tuaj të parapëlqyer të tastierës ose përdorni atë parazgjedhje që bazohet në hardware-in e pikasur + + Keyboard Model: + Model Tastiere: - - Refresh - Rifreskoje - - - - + Layouts Skema - - - Keyboard Layout - Skemë Tastiere + + Type here to test your keyboard + Që të provoni tastierën tuaj, shtypni këtu - - Models - Modele - - - + Variants Variante + + + localeq - - Test your keyboard - Testoni tastierën tuaj + + Change + Ndryshojeni notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3776,34 +4297,262 @@ Përfundim: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Mirë se vini te instaluesi %1 <quote>%2</quote></h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice është një suitë zyrash e lirë dhe e fuqishme, e përdorur nga miliona vetë anembanë rruzullit. Përfshin disa aplikacione, që e bëjnë suitën e Lirë dhe me Burim të Hapët më të zhdërvjellët në treg për zyra.<br/> + Mundësi parazgjedhje. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Nëse s’doni të instalohet një suitë zyre, thjesht përzgjidhni Pa Suitë Zyre. Mundeni përherë të shtoni një të tillë (ose disa) më vonë, në sistemin tuaj të instaluar, kur të jetë e nevojshme. + + + + No Office Suite + Pa Suitë Zyre + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Krijoni një instalim minimal Desktopi, hiqni krejt aplikacionet ekstra dhe vendosni më vonë se ç’doni të shtoni në sistemin tuaj. Shembuj se çfarë s’do të jenë në një instalim të tillë, s’do të ketë Suitë Zyre, as lojtës mediash, as parës figurash apo mbulim shtypësish. Do të jetë thjesht një mjedis desktop, shfletues kartelash, përgjegjës paketash, përpunues tekstesh dhe një shfletues elementar interneti. + + + + Minimal Install + Instalim Minimal + + + + Please select an option for your install, or use the default: LibreOffice included. + Ju lutemi, përzgjidhni një mundësi për instalimin tuaj, ose përdorni parazgjedhjen: me përfshirje të LibreOffice-it. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Kjo është një kartelë shembull QML, që tregon mundësi në RichText me lëndë Flickable.</p> + + <p>QML me RichText mund të përdorë etiketa HTML, lënda Flickable është e dobishme për ekrane me prekje.</p> + + <p><b>Ky është tekst me të trasha</b></p> + <p><i>Ky është tekst me të pjerrëta</i></p> + <p><u>Ky është një tekst i nënvijëzuar</u></p> + <p><center>Ky tekst do të vendoset në qendër.</center></p> + <p><s>Këtij i është hequr vijë përsipër</s></p> + + <p>Shembull kodi: + <code>ls -l /home</code></p> + + <p><b>Listë:</b></p> + <ul> + <li>Sisteme me CPU Intel</li> + <li>Sistemem me CPU AMD</li> + </ul> + + <p>Ky rrëshqitës vertikal mund të ujdiset, gjerësia e tanishme është 10.</p> + + + + Back + Mbrapsht + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Zgjidhni emrin tuaj të përdoruesit dhe kredencialet për të bërë hyrje dhe kryer veprime përgjegjësi + + + + What is your name? + Cili është emri juaj? + + + + Your Full Name + Emri Juaj i Plotë + + + + What name do you want to use to log in? + Ç’emër doni të përdorni për t’u futur? + + + + Login Name + Emër Hyrjeje + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Nëse këtë kompjuter do ta përdorë më shumë se një person, mund të krijoni llogari të shumta pas instalimit. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Lejohen vetëm shkronja të vogla, numra, nënvijë dhe vijë ndarëse. + + + + root is not allowed as username. + “root” nuk lejohet si emër përdoruesi. + + + + What is the name of this computer? + Cili është emri i këtij kompjuteri? + + + + Computer Name + Emër Kompjuteri + + + + This name will be used if you make the computer visible to others on a network. + Ky emër do të përdoret nëse e bëni kompjuterin të dukshëm për të tjerët në një rrjet. + + + + localhost is not allowed as hostname. + “localhost” s’lejohet si strehëemër. + + + + Choose a password to keep your account safe. + Zgjidhni një fjalëkalim për ta mbajtur llogarinë tuaj të parrezikuar. + + + + Password + Fjalëkalim + + + + Repeat Password + Ripërsëritni Fjalëkalimin + + + + 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. + Jepeni të njëjtin fjalëkalim dy herë, që të kontrollohet për gabime shkrimi. Një fjalëkalim i mirë do të përmbante një përzierje shkronjash, numrash dhe shenjash pikësimi, do të duhej të ishte të paktën tetë shenja i gjatë, dhe do të duhej të ndryshohej periodikisht. + + + + Validate passwords quality + Vlerëso cilësi fjalëkalimi + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Kur i vihet shenjë kësaj kutize, bëhet kontroll fortësie fjalëkalimi dhe s’do të jeni në gjendje të përdorni një fjalëkalim të dobët. + + + + Log in automatically without asking for the password + Kryej hyrje vetvetiu, pa kërkuar fjalëkalimin. + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Lejohen vetëm shkronja, numra, nënvijë dhe vijë ndarëse. minimumi dy shenja. + + + + Reuse user password as root password + Ripërdor fjalëkalim përdoruesi si fjalëkalim përdoruesi rrënjë + + + + Use the same password for the administrator account. + Përdor të njëjtin fjalëkalim për llogarinë e përgjegjësit. + + + + Choose a root password to keep your account safe. + Që ta mbani llogarinë tuaj të parrezik, zgjidhni një fjalëkalim rrënje + + + + Root Password + Fjalëkalim Rrënje + + + + Repeat Root Password + Përsëritni Fjalëkalim Rrënje + + + + Enter the same password twice, so that it can be checked for typing errors. + Jepeni të njëjtin fjalëkalim dy herë, që të mund të kontrollohet për gabime shkrimi. + + + + welcomeq + + + <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> + <h3>Mirë se vini te instaluesi %1 <quote>%2</quote></h3> + <p>Ky program do t’ju bëjë disa pyetje dhe do të ujdisë %1 në kompjuterin tuaj.</p> + + + About Mbi - + Support Asistencë - + Known issues Probleme të njohura - + Release notes Shënime hedhjeje në qarkullim - + Donate Dhuroni diff --git a/lang/calamares_sr.ts b/lang/calamares_sr.ts index cf95edc09..552052dcc 100644 --- a/lang/calamares_sr.ts +++ b/lang/calamares_sr.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition Подизна партиција - + System Partition Системска партиција - + Do not install a boot loader Не инсталирај подизни учитавач - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Форма - + GlobalStorage - + JobQueue - + Modules Модули - + Type: Тип: - - + + none ништа - + Interface: Сучеље: - - Tools - Алатке + + Crashes Calamares, so that Dr. Konqui can look at it. + - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Инсталирај @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Завршено @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 Извршавам команду %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Извршавам %1 операцију. - + Bad working directory path Лоша путања радног директоријума - + Working directory %1 for python job %2 is not readable. Радни директоријум %1 за питонов посао %2 није читљив. - + Bad main script file Лош фајл главне скрипте - + Main script file %1 for python job %2 is not readable. Фајл главне скрипте %1 за питонов посао %2 није читљив. - + Boost.Python error in job "%1". Boost.Python грешка у послу „%1“. @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -237,7 +270,7 @@ - + (%n second(s)) @@ -246,7 +279,7 @@ - + System-requirements checking is complete. @@ -254,245 +287,236 @@ Calamares::ViewManager - - &Back - &Назад - - - - &Next - &Следеће - - - - &Cancel - &Откажи - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed + Инсталација није успела + + + + Error + Грешка + + + + &Yes - + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + Наставити са подешавањем? + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + &Инсталирај сада + + + + Go &back + Иди &назад + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &Следеће + + + + &Back + &Назад + + + + &Done + + + + + &Cancel + &Откажи + + + Cancel setup? - + Cancel installation? Отказати инсталацију? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Да ли стварно желите да прекинете текући процес инсталације? Инсталер ће бити затворен и све промене ће бити изгубљене. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - Наставити са подешавањем? - - - - 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> - - - - - &Install now - &Инсталирај сада - - - - Go &back - Иди &назад - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - Грешка - - - - Installation Failed - Инсталација није успела - CalamaresPython::Helper - + Unknown exception type Непознат тип изузетка - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Назад - - - - &Next - &Следеће - - - - &Cancel - &Откажи - - - + %1 Setup Program - + %1 Installer %1 инсталер + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Инсталација није успела да ажурира табелу партиција на диску '%1'. + CheckerContainer - + Gathering system information... @@ -500,157 +524,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Форма - - After: - После: - - - - Boot loader location: - Подизни учитавач на: - - - + Select storage de&vice: Изаберите у&ређај за смештање: - - - - + + + + Current: Тренутно: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + После: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Ручно партиционисање</strong><br/>Сами можете креирати или мењати партције. + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + Подизни учитавач на: + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Уклони тачке припајања за операције партиције на %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Уклоњене све тачке припајања за %1 @@ -658,22 +722,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -681,18 +740,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -700,100 +759,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. Системски језик биће постављен на %1 - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + Избор пакета + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + Ваше корисничко име је предугачко. + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + Име вашег "домаћина" - hostname је прекратко. + + + + Your hostname is too long. + Ваше име домаћина је предуго - hostname + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Лозинке се не поклапају! + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Инсталација није успела + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Сажетак + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -801,100 +995,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition Направи партицију - - MiB - - - - - Partition &Type: - &Тип партиције - - - - &Primary - &Примарна - - - - E&xtended - П&роширена - - - - Fi&le System: - Фајл &систем: - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - Тачка &припајања: - - - + Si&ze: Вели&чина - + + MiB + + + + + Partition &Type: + &Тип партиције + + + + Primar&y + + + + + E&xtended + П&роширена + + + + Fi&le System: + Фајл &систем: + + + + LVM LV name + + + + + &Mount Point: + Тачка &припајања: + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical Логичка - + Primary Примарна - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. Инсталација није успела да направи партицију на диску '%1'. @@ -902,27 +1132,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Направи табелу партиција - + Creating a new partition table will delete all existing data on the disk. Прављење нове партиције табела ће обрисати све постојеће податке на диску. - + What kind of partition table do you want to create? Какву табелу партиција желите да направите? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID партициона табела (GPT) @@ -930,22 +1160,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. Инсталација није успела да направи табелу партиција на %1. @@ -953,45 +1183,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Направи корисника %1 - + Create user <strong>%1</strong>. - - Creating user %1. - Правим корисника %1 - - - - Sudoers dir is not writable. - Није могуће писати у "Судоерс" директоријуму. - - - - Cannot create sudoers file for writing. + + Preserving home directory - - Cannot chmod sudoers file. - Није могуће променити мод (chmod) над "судоерс" фајлом + + + Creating user %1 + - - Cannot open groups file for reading. + + Configuring user %1 + + + + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -999,22 +1225,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1022,18 +1248,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1041,22 +1267,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1064,46 +1290,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1112,17 +1338,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1130,7 +1356,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1138,123 +1364,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: - Садржај: + + Con&tent: + - + &Keep &Очувај - + Format Форматирај - + Warning: Formatting the partition will erase all existing data. Упозорење: Форматирање партиције ће обрисати све постојеће податке. - + &Mount Point: &Тачка монтирања: - + Si&ze: &Величина: - + MiB - + Fi&le System: Фајл &систем: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form Форма - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1262,93 +1532,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Форма - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Заврши + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + + Finish + Заврши FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1356,72 +1614,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1429,7 +1687,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1437,25 +1695,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1463,7 +1721,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1471,7 +1729,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1479,17 +1737,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1497,28 +1755,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Скрипта - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard Тастатура @@ -1526,7 +1771,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Тастатура @@ -1534,65 +1779,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel &Откажи - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form Форма - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1600,7 +1868,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License Лиценца @@ -1608,109 +1876,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - Системски језик биће постављен на %1 - - - - The numbers and dates locale will be set to %1. - - - - + Region: Регион: - + Zone: Зона: - - + + &Change... &Измени... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location Локација + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Локација @@ -1718,35 +1979,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1754,116 +2015,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error Грешка поставе - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection Избор пакета - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1871,7 +2146,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1879,17 +2154,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1897,260 +2172,326 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + The password is shorter than %n characters + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2158,40 +2499,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Форма - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2199,12 +2548,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name Назив - + Description Опис @@ -2212,17 +2561,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Форма - + Keyboard Model: - + Type here to test your keyboard куцајте овде да тестирате тастатуру @@ -2230,96 +2579,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Форма - + What is your name? Како се зовете? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - Изаберите лозинку да обезбедите свој налог. - - - - - <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> - - - - - What is the name of this computer? - Како ћете звати ваш рачунар? - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + Како ћете звати ваш рачунар? + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + Изаберите лозинку да обезбедите свој налог. + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2327,42 +2676,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2371,34 +2720,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name Назив - + File System Фајл систем - + + File System Label + + + + Mount Point - + Size @@ -2406,77 +2760,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Форма - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2484,117 +2838,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: Тренутно: - + After: После: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2602,13 +2946,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2616,17 +2960,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Форма - + 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. - + 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. @@ -2634,7 +2978,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2642,17 +2986,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2660,65 +3004,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Лоши параметри при позиву посла процеса. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2726,89 +3070,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - подразумевано - - - - unknown - непознато - - - - extended - проширена - - - - unformatted - неформатирана - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown + непознато + + + + extended + проширена + + + + unformatted + неформатирана + + + + swap - - No description provided. - + + + Default + подразумевано - - - - + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2816,18 +3165,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2835,143 +3184,158 @@ Output: ReplaceWidget - + Form Форма - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2979,22 +3343,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -3002,7 +3366,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3010,18 +3374,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3029,53 +3393,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: За најбоље резултате обезбедите да овај рачунар: - + System requirements Системски захтеви - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning Партиционисање @@ -3083,29 +3419,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error Интерна грешка - - + + Cannot write hostname to target system @@ -3113,29 +3449,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3143,82 +3479,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3226,42 +3562,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3269,45 +3605,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Није могуће променити мод (chmod) над "судоерс" фајлом + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3315,81 +3688,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary - Сажетак + + &No + + + + + &Cancel + &Откажи + + + + &Close + TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3397,106 +3806,97 @@ Output: TrackingPage - + Form Форма - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + Демонтирање фајл-система. + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - Ваше корисничко име је предугачко. - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - Име вашег "домаћина" - hostname је прекратко. - - - - Your hostname is too long. - Ваше име домаћина је предуго - hostname - - - - Your passwords do not match! - Лозинке се не поклапају! + + Users + Корисници UsersViewStep - + Users Корисници @@ -3504,65 +3904,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3570,106 +3972,106 @@ Output: WelcomePage - + Form Форма - - + + Select application and system language + &About + &О програму + + + Open donations website - + &Donate - + Open help and support website + &Support + По&дршка + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues &Познати проблеми - - &Support - По&дршка - - - - &About - &О програму - - - - <h1>Welcome to the %1 installer.</h1> + + Open release notes website - - <h1>Welcome to the Calamares installer for %1.</h1> + + &Release notes - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + %1 подршка + + + About %1 setup - + About %1 installer О %1 инсталатеру - + <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. - - - %1 support - %1 подршка - WelcomeQmlViewStep - + Welcome Добродошли @@ -3677,31 +4079,157 @@ Output: WelcomeViewStep - + Welcome Добродошли + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Грешка поставе + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3709,86 +4237,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + куцајте овде да тестирате тастатуру - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Како се зовете? + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Како ћете звати ваш рачунар? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Изаберите лозинку да обезбедите свој налог. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_sr@latin.ts b/lang/calamares_sr@latin.ts index f96bb54c2..1a6847300 100644 --- a/lang/calamares_sr@latin.ts +++ b/lang/calamares_sr@latin.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record na %1 - + Boot Partition Particija za pokretanje sistema - + System Partition Sistemska particija - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: Vrsta: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install Instaliraj @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Gotovo @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path Neispravna putanja do radne datoteke - + Working directory %1 for python job %2 is not readable. Nemoguće pročitati radnu datoteku %1 za funkciju %2 u Python-u. - + Bad main script file Neispravan glavna datoteka za skriptu - + Main script file %1 for python job %2 is not readable. Glavna datoteka za skriptu %1 za Python funkciju %2 se ne može pročitati. - + Boost.Python error in job "%1". Boost.Python greška u funkciji %1 @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -237,7 +270,7 @@ - + (%n second(s)) @@ -246,7 +279,7 @@ - + System-requirements checking is complete. @@ -254,245 +287,236 @@ Calamares::ViewManager - - &Back - &Nazad - - - - &Next - &Dalje - - - - &Cancel - &Prekini - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed + Neuspješna instalacija + + + + Error + Greška + + + + &Yes - + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &Dalje + + + + &Back + &Nazad + + + + &Done + + + + + &Cancel + &Prekini + + + Cancel setup? - + Cancel installation? Prekini instalaciju? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Da li stvarno želite prekinuti trenutni proces instalacije? Instaler će se zatvoriti i sve promjene će biti izgubljene. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - Greška - - - - Installation Failed - Neuspješna instalacija - CalamaresPython::Helper - + Unknown exception type Nepoznat tip izuzetka - + unparseable Python error unparseable Python error - + unparseable Python traceback unparseable Python traceback - + Unfetchable Python error. Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &Nazad - - - - &Next - &Dalje - - - - &Cancel - &Prekini - - - + %1 Setup Program - + %1 Installer %1 Instaler + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + Instaler ne može promjeniti tabelu particija na disku '%1'. + CheckerContainer - + Gathering system information... @@ -500,157 +524,197 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. ChoicePage - + Form - - After: - Poslije: - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: + Poslije: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 Skini tačke montiranja za operacije nad particijama na %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 Sve tačke montiranja na %1 skinute @@ -658,22 +722,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -681,18 +740,18 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -700,100 +759,235 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - Postavi vremensku zonu na %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + Vaše lozinke se ne poklapaju + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + Neuspješna instalacija + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Izveštaj + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -801,100 +995,136 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. CreatePartitionDialog - + Create a Partition Kreiraj particiju - - MiB - - - - - Partition &Type: - &Tip particije - - - - &Primary - &Primarna - - - - E&xtended - P&roširena - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - Tačka &montiranja: - - - + Si&ze: Veli&čina - + + MiB + + + + + Partition &Type: + &Tip particije + + + + Primar&y + + + + + E&xtended + P&roširena + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + Tačka &montiranja: + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical Logička - + Primary Primarna - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. Instaler nije uspeo napraviti particiju na disku '%1'. @@ -902,27 +1132,27 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. CreatePartitionTableDialog - + Create Partition Table Napravi novu tabelu particija - + Creating a new partition table will delete all existing data on the disk. Kreiranje nove tabele particija će obrisati sve podatke na disku. - + What kind of partition table do you want to create? Kakvu tabelu particija želite da napravite? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -930,22 +1160,22 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. Instaler nije uspjeo da napravi tabelu particija na %1. @@ -953,45 +1183,41 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. CreateUserJob - + Create user %1 Napravi korisnika %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. - Nemoguće mijenjati fajlove u sudoers direktorijumu + + + Creating user %1 + - - Cannot create sudoers file for writing. - Nemoguće napraviti sudoers fajl + + Configuring user %1 + - - Cannot chmod sudoers file. - Nemoguće uraditi chmod nad sudoers fajlom. - - - - Cannot open groups file for reading. - Nemoguće otvoriti groups fajl + + Setting file permissions + CreateVolumeGroupDialog - + Create Volume Group @@ -999,22 +1225,22 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1022,18 +1248,18 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1041,22 +1267,22 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. Instaler nije uspjeo obrisati particiju %1. @@ -1064,46 +1290,46 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1112,17 +1338,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1130,7 +1356,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. DummyCppJob - + Dummy C++ Job @@ -1138,123 +1364,167 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. EditExistingPartitionDialog - + Edit Existing Partition Promjeni postojeću particiju: - - Content: - Sadržaj: + + Con&tent: + - + &Keep - + Format Formatiraj - + Warning: Formatting the partition will erase all existing data. Upozorenje: Formatiranje particije će obrisati sve podatke. - + &Mount Point: Tačka za &montiranje: - + Si&ze: Veli&čina - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1262,93 +1532,81 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Završi + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - + + Finish + Završi FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. Instaler nije uspeo formatirati particiju %1 na disku '%2'. @@ -1356,72 +1614,72 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source je priključen na izvor struje - + The system is not plugged in to a power source. - + is connected to the Internet ima vezu sa internetom - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1429,7 +1687,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. HostInfoJob - + Collecting information about your machine. @@ -1437,25 +1695,25 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1463,7 +1721,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1471,7 +1729,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. InitramfsJob - + Creating initramfs. @@ -1479,17 +1737,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1497,28 +1755,15 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard Tastatura @@ -1526,7 +1771,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. KeyboardViewStep - + Keyboard Tastatura @@ -1534,65 +1779,88 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel &Prekini - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1600,7 +1868,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. LicenseViewStep - + License @@ -1608,109 +1876,102 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: Regija: - + Zone: Zona: - - + + &Change... - - - Set timezone to %1/%2.<br/> - Postavi vremensku zonu na %1/%2.<br/> - LocaleQmlViewStep - + Location Lokacija + + LocaleTests + + + Quit + + + LocaleViewStep - + Location Lokacija @@ -1718,35 +1979,35 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1754,116 +2015,130 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1871,7 +2146,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. NotesQmlViewStep - + Notes @@ -1879,17 +2154,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1897,260 +2172,326 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + + The password is shorter than %n characters + + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2158,40 +2499,48 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2199,12 +2548,12 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PackageModel - + Name Naziv - + Description @@ -2212,17 +2561,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. Page_Keyboard - + Form - + Keyboard Model: Model tastature: - + Type here to test your keyboard Test tastature @@ -2230,96 +2579,96 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. Page_UserSetup - + Form - + What is your name? Kako se zovete? - - What name do you want to use to log in? - Koje ime želite koristiti da se prijavite? - - - - Choose a password to keep your account safe. - Odaberite lozinku da biste zaštitili Vaš korisnički nalog. - - - - - <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> - <small>Upišite istu lozinku dvaput, da ne bi došlo do greške kod kucanja. Dobra lozinka se sastoji od mešavine slova, brojeva i interpunkcijskih znakova; trebala bi biti duga bar osam znakova, i trebalo bi da ju menjate redovno</small> - - - - What is the name of this computer? - Kako želite nazvati ovaj računar? - - - + Your Full Name - + + What name do you want to use to log in? + Koje ime želite koristiti da se prijavite? + + + login - + + What is the name of this computer? + Kako želite nazvati ovaj računar? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Ovo ime će biti vidljivo drugim računarima na mreži</small> - + Computer Name - - + + Choose a password to keep your account safe. + Odaberite lozinku da biste zaštitili Vaš korisnički nalog. + + + + + <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> + <small>Upišite istu lozinku dvaput, da ne bi došlo do greške kod kucanja. Dobra lozinka se sastoji od mešavine slova, brojeva i interpunkcijskih znakova; trebala bi biti duga bar osam znakova, i trebalo bi da ju menjate redovno</small> + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Unesite istu lozinku dvaput, da ne bi došlp do greške kod kucanja</small> @@ -2327,42 +2676,42 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition Nova particija - + %1 %2 size[number] filesystem[name] @@ -2371,34 +2720,39 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PartitionModel - - + + Free Space Slobodan prostor - - + + New partition Nova particija - + Name Naziv - + File System Fajl sistem - + + File System Label + + + + Mount Point - + Size Veličina @@ -2406,77 +2760,77 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes &Vrati sve promjene - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2484,117 +2838,107 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PartitionViewStep - + Gathering system information... - + Partitions Particije - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: Poslije: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2602,13 +2946,13 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2616,17 +2960,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2634,7 +2978,7 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PlasmaLnfViewStep - + Look-and-Feel @@ -2642,17 +2986,17 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2660,65 +3004,65 @@ Instaler će se zatvoriti i sve promjene će biti izgubljene. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. Pogrešni parametri kod poziva funkcije u procesu. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2726,89 +3070,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2816,18 +3165,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2835,143 +3184,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2979,22 +3343,22 @@ Output: ResizePartitionJob - + Resize partition %1. Promjeni veličinu particije %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -3002,7 +3366,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3010,18 +3374,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3029,53 +3393,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Za najbolje rezultate, uvjetite se da li ovaj računar: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3083,29 +3419,29 @@ Output: SetHostNameJob - + Set hostname %1 Postavi ime računara %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3113,29 +3449,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3143,82 +3479,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3226,42 +3562,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3269,45 +3605,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Nemoguće uraditi chmod nad sudoers fajlom. + + + + Cannot create sudoers file for writing. + Nemoguće napraviti sudoers fajl + + ShellProcessJob - + Shell Processes Job @@ -3315,81 +3688,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary - Izveštaj + + &No + + + + + &Cancel + &Prekini + + + + &Close + TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3397,106 +3806,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! - Vaše lozinke se ne poklapaju + + Users + Korisnici UsersViewStep - + Users Korisnici @@ -3504,65 +3904,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value Vrednost VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3570,106 +3972,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome Dobrodošli @@ -3677,31 +4079,157 @@ Output: WelcomeViewStep - + Welcome Dobrodošli + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3709,86 +4237,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Model tastature: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + Test tastature - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + Kako se zovete? + + + + Your Full Name + + + + + What name do you want to use to log in? + Koje ime želite koristiti da se prijavite? + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + Kako želite nazvati ovaj računar? + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Odaberite lozinku da biste zaštitili Vaš korisnički nalog. + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_sv.ts b/lang/calamares_sv.ts index c62b44c6b..d57227429 100644 --- a/lang/calamares_sv.ts +++ b/lang/calamares_sv.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Hantera inställningar för automatisk montering + + BootInfoWidget - + 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. Systemets <strong>startmiljö</strong>.<br><br>Äldre x86-system stöder endast <strong>BIOS</strong>.<br>Moderna system stöder vanligen <strong>EFI</strong>, men kan också vara i kompatibilitetsläge för BIOS. - + 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. Detta system startades med en <strong>EFI-miljö</strong>.<br><br>För att ställa in start från en EFI-miljö måste en starthanterare användas, t.ex. <strong>GRUB</strong> eller <strong>systemd-boot</strong> på en <strong>EFI-systempartition</strong>. Detta sker automatiskt, såvida du inte väljer att partitionera manuellt. Då måste du själv installera en starthanterare. - + 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. Detta system startades med en <strong>BIOS-miljö</strong>. <br><br>För att ställa in start från en BIOS-miljö måste en starthanterare som t.ex. <strong>GRUB</strong> installeras, antingen i början av en partition eller på <strong>huvudstartsektorn (MBR)</strong> i början av partitionstabellen. Detta sker automatiskt, såvida du inte väljer manuell partitionering. Då måste du själv installera en starthanterare. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record på %1 - + Boot Partition Startpartition - + System Partition Systempartition - + Do not install a boot loader Installera inte någon starthanterare - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Tom sida @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Form - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Moduler - + Type: Typ: - - + + none ingen - + Interface: Gränssnitt: - - Tools - Verktyg + + Crashes Calamares, so that Dr. Konqui can look at it. + Kraschar Calamares, så att Dr. Konqui kan titta på det. - + + Reloads the stylesheet from the branding directory. + Laddar om stilmall från branding katalogen. + + + + Uploads the session log to the configured pastebin. + Laddar upp sessionsloggen till den konfigurerade pastebin. + + + + Send Session Log + Skicka Session Logg + + + Reload Stylesheet Ladda om stilmall - - Widget Tree - + + Displays the tree of widget names in the log (for stylesheet debugging). + Visar trädet med widgetnamn i loggen (för stilmalls felsökning). - + + Widget Tree + Widgetträd + + + Debug information Avlusningsinformation @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Inställningar - + Install Installera @@ -130,20 +158,20 @@ Calamares::FailJob - + Job failed (%1) Uppgiften misslyckades (%1) - + Programmed job failure was explicitly requested. - + Programmerat jobbfel begärdes uttryckligen. Calamares::JobThread - + Done Klar @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Exempel jobb (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Kör kommandot '%1'. på målsystem. - + Run command '%1'. Kör kommandot '%1'. - + Running command %1 %2 Kör kommando %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Kör %1-operation - + Bad working directory path Arbetskatalogens sökväg är ogiltig - + Working directory %1 for python job %2 is not readable. Arbetskatalog %1 för pythonuppgift %2 är inte läsbar. - + Bad main script file Ogiltig huvudskriptfil - + Main script file %1 for python job %2 is not readable. Huvudskriptfil %1 för pythonuppgift %2 är inte läsbar. - + Boost.Python error in job "%1". Boost.Python-fel i uppgift "%'1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Laddar ... - + QML Step <i>%1</i>. QML steg <i>%1</i>. - + Loading failed. - + Laddning misslyckades. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Kontroll av krav för modul <i>%1</i> är färdig. + - + Waiting for %n module(s). Väntar på %n modul(er). @@ -236,7 +269,7 @@ - + (%n second(s)) (%n sekund(er)) @@ -244,254 +277,248 @@ - + System-requirements checking is complete. - + Kontroll av systemkrav är färdig Calamares::ViewManager - - &Back - &Bakåt - - - - &Next - &Nästa - - - - &Cancel - Avbryt - - - - Cancel setup without changing the system. - Avbryt inställningarna utan att förändra systemet. - - - - Cancel installation without changing the system. - Avbryt installationen utan att förändra systemet. - - - + Setup Failed Inställningarna misslyckades - - Would you like to paste the install log to the web? - + + Installation Failed + Installationen misslyckades - + + Error + Fel + + + + &Yes + &Ja + + + + &No + &Nej + + + + &Close + &Stäng + + + Install Log Paste URL - + URL till installationslogg - + The upload was unsuccessful. No web-paste was done. Sändningen misslyckades. Ingenting sparades på webbplatsen. - + + Install log posted to + +%1 + +Link copied to clipboard + Installationslogg postad till + +%1 + +Länken kopierades till urklipp + + + Calamares Initialization Failed Initieringen av Calamares misslyckades - + %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. - + %1 kan inte installeras. Calamares kunde inte ladda alla konfigurerade moduler. Detta är ett problem med hur Calamares används av distributionen. - + <br/>The following modules could not be loaded: <br/>Följande moduler kunde inte hämtas: - + + Continue with setup? + Fortsätt med installation? + + + Continue with installation? Vill du fortsätta med installationen? - + 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> - + %1-installeraren är på väg att göra ändringar på disk för att installera %2.<br/><strong>Du kommer inte att kunna ångra dessa ändringar.</strong> - + + 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> + %1-installeraren är på väg att göra ändringar för att installera %2.<br/><strong>Du kommer inte att kunna ångra dessa ändringar.</strong> + + + &Set up now &Installera nu - + + &Install now + &Installera nu + + + + Go &back + Gå &bakåt + + + &Set up &Installera - + &Install &Installera - + Setup is complete. Close the setup program. Installationen är klar. Du kan avsluta installationsprogrammet. - + + The installation is complete. Close the installer. + Installationen är klar. Du kan avsluta installationshanteraren. + + + + Cancel setup without changing the system. + Avbryt inställningarna utan att förändra systemet. + + + + Cancel installation without changing the system. + Avbryt installationen utan att förändra systemet. + + + + &Next + &Nästa + + + + &Back + &Bakåt + + + + &Done + &Klar + + + + &Cancel + Avbryt + + + Cancel setup? Avbryt inställningarna? - + Cancel installation? Avbryt installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Vill du verkligen avbryta den nuvarande uppstartsprocessen? Uppstartsprogrammet kommer avsluta och alla ändringar kommer förloras. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Är du säker på att du vill avsluta installationen i förtid? Alla ändringar kommer att gå förlorade. - - - - &Yes - &Ja - - - - - &No - &Nej - - - - &Close - &Stäng - - - - Continue with setup? - Fortsätt med installation? - - - - 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> - %1-installeraren är på väg att göra ändringar för att installera %2.<br/><strong>Du kommer inte att kunna ångra dessa ändringar.</strong> - - - - &Install now - &Installera nu - - - - Go &back - Gå &bakåt - - - - &Done - &Klar - - - - The installation is complete. Close the installer. - Installationen är klar. Du kan avsluta installationshanteraren. - - - - Error - Fel - - - - Installation Failed - Installationen misslyckades - CalamaresPython::Helper - + Unknown exception type Okänd undantagstyp - + unparseable Python error Otolkbart Pythonfel - + unparseable Python traceback Otolkbar Python-traceback - + Unfetchable Python error. Ohämtbart Pythonfel - - CalamaresUtils - - - Install log posted to: -%1 - Installationslogg postad till: -%1 - - CalamaresWindow - - &Back - &Bakåt - - - - &Next - &Nästa - - - - &Cancel - &Avsluta - - - + %1 Setup Program %1 Installationsprogram - + %1 Installer %1-installationsprogram + + + ChangeFilesystemLabelJob - - Show debug information - Visa avlusningsinformation + + Set filesystem label on %1. + Sätt filsystem etikett på %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Sätt filsystem etikett <strong>%1</strong> på partition <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Installationsprogrammet misslyckades med att uppdatera partitionstabellen på disk '%1'. CheckerContainer - + Gathering system information... Samlar systeminformation... @@ -499,157 +526,197 @@ Alla ändringar kommer att gå förlorade. ChoicePage - + Form Formulär - - After: - Efter: - - - - Boot loader location: - Sökväg till starthanterare: - - - + Select storage de&vice: Välj lagringsenhet: - - - - + + + + Current: Nuvarande: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + Efter: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Manuell partitionering</strong><br/>Du kan själv skapa och ändra storlek på partitionerna. + + + Reuse %1 as home partition for %2. Återanvänd %1 som hempartition för %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Välj en partition att minska, sen dra i nedre fältet för att ändra storlek</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 kommer att förminskas till %2MiB och en ny %3MiB partition kommer att skapas för %4. - + + Boot loader location: + Sökväg till starthanterare: + + + <strong>Select a partition to install on</strong> <strong>Välj en partition att installera på</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Ingen EFI-partition kunde inte hittas på systemet. Gå tillbaka och partitionera din lagringsenhet manuellt för att ställa in %1. - + The EFI system partition at %1 will be used for starting %2. EFI-partitionen %1 kommer att användas för att starta %2. - + EFI system partition: EFI-partition: - + 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. Denna lagringsenhet ser inte ut att ha ett operativsystem installerat. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring görs på lagringseneheten. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Rensa lagringsenhet</strong><br/>Detta kommer <font color="red">radera</font> all existerande data på den valda lagringsenheten. - - 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. - Denna lagringsenhet har %1 på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring görs på lagringsenheten. - - - - No Swap - Ingen Swap - - - - Reuse Swap - Återanvänd Swap - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - Använd en fil som växlingsenhet - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Installera på sidan om</strong><br/>Installationshanteraren kommer krympa en partition för att göra utrymme för %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Ersätt en partition</strong><br/>Ersätter en partition med %1. - + + 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. + Denna lagringsenhet har %1 på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring görs på lagringsenheten. + + + 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. Denna lagringsenhet har redan ett operativsystem på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring sker på lagringsenheten. - + 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. Denna lagringsenhet har flera operativsystem på sig. Vad vill du göra?<br/>Du kommer kunna granska och bekräfta dina val innan någon ändring sker på lagringsenheten. + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Denna lagringsenhet har en av dess partitioner <strong>monterad</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Denna lagringsenhet är en del av en <strong>inaktiv RAID</strong>enhet. + + + + No Swap + Ingen Swap + + + + Reuse Swap + Återanvänd Swap + + + + Swap (no Hibernate) + Swap (utan viloläge) + + + + Swap (with Hibernate) + Swap (med viloläge) + + + + Swap to file + Använd en fil som växlingsenhet + ClearMountsJob - + + Successfully unmounted %1. + Framgångsrikt avmonterade %1. + + + + Successfully disabled swap %1. + Framgångsrikt inaktiverade swap %1. + + + + Successfully cleared swap %1. + Framgångsrikt rensade swap %1. + + + + Successfully closed mapper device %1. + Framgångsrikt stängde krypterad enhet %1. + + + + Successfully disabled volume group %1. + Framgångsrikt inaktiverade volymgrupp %1. + + + Clear mounts for partitioning operations on %1 Rensa monteringspunkter för partitionering på %1 - + Clearing mounts for partitioning operations on %1. Rensar monteringspunkter för partitionering på %1. - + Cleared all mounts for %1 Rensade alla monteringspunkter för %1 @@ -657,22 +724,17 @@ Alla ändringar kommer att gå förlorade. ClearTempMountsJob - + Clear all temporary mounts. Rensa alla tillfälliga monteringspunkter. - + Clearing all temporary mounts. Rensar alla tillfälliga monteringspunkter. - - Cannot get list of temporary mounts. - Kunde inte hämta tillfälliga monteringspunkter. - - - + Cleared all temporary mounts. Rensade alla tillfälliga monteringspunkter @@ -680,18 +742,18 @@ Alla ändringar kommer att gå förlorade. CommandList - - + + Could not run command. Kunde inte köra kommandot. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + Kommandot körs på värden och behöver känna till sökvägen till root, men rootMonteringspunkt är inte definierat. - + The command needs to know the user's name, but no username is defined. Kommandot behöver veta användarnamnet, men inget användarnamn är definerat. @@ -699,201 +761,372 @@ Alla ändringar kommer att gå förlorade. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Datorn uppfyller inte minimikraven för inställning av %1.<br/>Inga inställningar kan inte göras. <a href="#details">Detaljer...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Denna dator uppfyller inte minimikraven för att installera %1.<br/>Installationen kan inte fortsätta. <a href="#details">Detaljer...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Några av kraven för inställning av %1 uppfylls inte av datorn.<br/>Inställningarna kan ändå göras men vissa funktioner kommer kanske inte att kunna användas. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Denna dator uppfyller inte alla rekommenderade krav för att installera %1.<br/>Installationen kan fortsätta, men alla alternativ och funktioner kanske inte kan användas. - - - - This program will ask you some questions and set up %2 on your computer. - Detta program kommer att ställa dig några frågor och installera %2 på din dator. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Välkommen till Calamares installationsprogrammet för %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Välkommen till %1 installation.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Välkommen till installationsprogrammet Calamares för %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Välkommen till %1-installeraren.</h1> - - - + Set keyboard model to %1.<br/> Sätt tangenbordsmodell till %1.<br/> - + Set keyboard layout to %1/%2. Sätt tangentbordslayout till %1/%2. - + + Set timezone to %1/%2. + Sätt tidszon till %1/%2. + + + The system language will be set to %1. Systemspråket kommer ändras till %1. - + The numbers and dates locale will be set to %1. - + Systemspråket för siffror och datum kommer sättas till %1. - - Set timezone to %1/%2.<br/> - Sätt tidszon till %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Nätverksinstallation. (Inaktiverad: inkorrekt konfiguration) - + Network Installation. (Disabled: Received invalid groups data) - + Nätverksinstallation. (Inaktiverad: Fick felaktig gruppdata) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) Nätverksinstallation. (Inaktiverad: internt fel) - + + Network Installation. (Disabled: No package list) + Nätverksinstallation. (Inaktiverad: Ingen paketlista) + + + + Package selection + Paketval + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Nätverksinstallation. (Inaktiverad: Kan inte hämta paketlistor, kontrollera nätverksanslutningen) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Datorn uppfyller inte minimikraven för inställning av %1.<br/>Inga inställningar kan inte göras. <a href="#details">Detaljer...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Denna dator uppfyller inte minimikraven för att installera %1.<br/>Installationen kan inte fortsätta. <a href="#details">Detaljer...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Några av kraven för inställning av %1 uppfylls inte av datorn.<br/>Inställningarna kan ändå göras men vissa funktioner kommer kanske inte att kunna användas. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Denna dator uppfyller inte alla rekommenderade krav för att installera %1.<br/>Installationen kan fortsätta, men alla alternativ och funktioner kanske inte kan användas. + + + + This program will ask you some questions and set up %2 on your computer. + Detta program kommer att ställa dig några frågor och installera %2 på din dator. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Välkommen till Calamares installationsprogram för %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Välkommen till %1 installation</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Välkommen till Calamares installationsprogram för %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Välkommen till %1-installeraren</h1> + + + + Your username is too long. + Ditt användarnamn är för långt. + + + + '%1' is not allowed as username. + '%1' är inte tillåtet som användarnamn. + + + + Your username must start with a lowercase letter or underscore. + Ditt användarnamn måste börja med en liten bokstav eller ett understreck. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Endast små bokstäver, nummer, understreck och bindestreck är tillåtet. + + + + Your hostname is too short. + Ditt värdnamn är för kort. + + + + Your hostname is too long. + Ditt värdnamn är för långt. + + + + '%1' is not allowed as hostname. + '%1' är inte tillåtet som värdnamn. + + + + Only letters, numbers, underscore and hyphen are allowed. + Endast bokstäver, nummer, understreck och bindestreck är tillåtet. + + + + Your passwords do not match! + Lösenorden överensstämmer inte! + + + + OK! + OK! + + + + Setup Failed + Inställningarna misslyckades + + + + Installation Failed + Installationen misslyckades + + + + The setup of %1 did not complete successfully. + Installationen av %1 slutfördes inte korrekt. + + + + The installation of %1 did not complete successfully. + Installationen av %1 slutfördes inte korrekt. + + + + Setup Complete + Inställningarna är klara + + + + Installation Complete + Installationen är klar + + + + The setup of %1 is complete. + Inställningarna för %1 är klara. + + + + The installation of %1 is complete. + Installationen av %1 är klar. + + + + Package Selection + Paketval + + + + Please pick a product from the list. The selected product will be installed. + Välj en produkt från listan. Den valda produkten kommer att installeras. + + + + Install option: <strong>%1</strong> + Installations alternativ: <strong>%1</strong> + + + + None + Ingen + + + + Summary + Översikt + + + + This is an overview of what will happen once you start the setup procedure. + Detta är en översikt över vad som kommer hända när du startar installationsprocessen. + + + + This is an overview of what will happen once you start the install procedure. + Detta är en överblick av vad som kommer att ske när du startar installationsprocessen. + ContextualProcessJob - + Contextual Processes Job - + Kontextuellt processjobb CreatePartitionDialog - + Create a Partition Skapa en partition - - MiB - MiB - - - - Partition &Type: - Partitions&typ: - - - - &Primary - &Primär - - - - E&xtended - Utökad - - - - Fi&le System: - Fi&lsystem: - - - - LVM LV name - LVM LV namn - - - - Flags: - Flaggor: - - - - &Mount Point: - &Monteringspunkt: - - - + Si&ze: Storlek: - + + MiB + MiB + + + + Partition &Type: + Partitions&typ: + + + + Primar&y + Primä&r + + + + E&xtended + Utökad + + + + Fi&le System: + Fi&lsystem: + + + + LVM LV name + LVM LV namn + + + + &Mount Point: + &Monteringspunkt: + + + + Flags: + Flaggor: + + + + Label for the filesystem + Etikett för filsystem + + + + FS Label: + FS Etikett: + + + En&crypt Kr%yptera - + Logical Logisk - + Primary Primär - + GPT GPT - + Mountpoint already in use. Please select another one. Monteringspunkt används redan. Välj en annan. + + + Mountpoint must start with a <tt>/</tt>. + Monteringspunkt måste starta med ett <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Skapa ny %1MiB partition på %3 (%2) med poster %4. + + + + Create new %1MiB partition on %3 (%2). + Skapa ny %1MiB partition på %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Skapa ny %2MiB partition på %4 (%3) med filsystem %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Skapa ny <strong>%1MiB</strong> partition på <strong>%3</strong> (%2) med poster <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Skapa ny <strong>%1MiB</strong> partition på <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Skapa ny <strong>%2MiB</strong>partition på <strong>%4</strong> (%3) med filsystem <strong>%1</strong>. - + + Creating new %1 partition on %2. Skapar ny %1 partition på %2. - + The installer failed to create partition on disk '%1'. Installationsprogrammet kunde inte skapa partition på disk '%1'. @@ -901,27 +1134,27 @@ Alla ändringar kommer att gå förlorade. CreatePartitionTableDialog - + Create Partition Table Skapa partitionstabell - + Creating a new partition table will delete all existing data on the disk. Skapa en ny partitionstabell och ta bort alla befintliga data på disken. - + What kind of partition table do you want to create? Vilken typ av partitionstabell vill du skapa? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID-partitionstabell (GPT) @@ -929,22 +1162,22 @@ Alla ändringar kommer att gå förlorade. CreatePartitionTableJob - + Create new %1 partition table on %2. Skapa ny %1 partitionstabell på %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Skapa ny <strong>%1</strong> partitionstabell på <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Skapar ny %1 partitionstabell på %2. - + The installer failed to create a partition table on %1. Installationsprogrammet kunde inte skapa en partitionstabell på %1. @@ -952,45 +1185,41 @@ Alla ändringar kommer att gå förlorade. CreateUserJob - + Create user %1 Skapar användare %1 - + Create user <strong>%1</strong>. Skapa användare <strong>%1</strong>. - - Creating user %1. + + Preserving home directory + Bevara hemkatalogen + + + + + Creating user %1 Skapar användare %1 - - Sudoers dir is not writable. - Sudoerkatalogen är inte skrivbar. + + Configuring user %1 + Konfigurerar användare %1 - - Cannot create sudoers file for writing. - Kunde inte skapa sudoerfil för skrivning. - - - - Cannot chmod sudoers file. - Kunde inte chmodda sudoerfilen. - - - - Cannot open groups file for reading. - Kunde inte öppna gruppfilen för läsning. + + Setting file permissions + Ställer in filbehörigheter CreateVolumeGroupDialog - + Create Volume Group Skapa volymgrupp @@ -998,22 +1227,22 @@ Alla ändringar kommer att gå förlorade. CreateVolumeGroupJob - + Create new volume group named %1. Skapa ny volymgrupp med namnet %1. - + Create new volume group named <strong>%1</strong>. Skapa ny volymgrupp med namnet <strong>%1</strong>. - + Creating new volume group named %1. Skapa ny volymgrupp med namnet %1. - + The installer failed to create a volume group named '%1'. Installationsprogrammet kunde inte skapa en volymgrupp med namnet '%1'. @@ -1021,18 +1250,18 @@ Alla ändringar kommer att gå förlorade. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Deaktivera volymgruppen med namnet %1. - + Deactivate volume group named <strong>%1</strong>. Deaktivera volymgruppen med namnet <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Installationsprogrammet kunde inte deaktivera volymgruppen med namnet %1. @@ -1040,22 +1269,22 @@ Alla ändringar kommer att gå förlorade. DeletePartitionJob - + Delete partition %1. Ta bort partition %1. - + Delete partition <strong>%1</strong>. Ta bort partition <strong>%1</strong>. - + Deleting partition %1. Tar bort partition %1. - + The installer failed to delete partition %1. Installationsprogrammet kunde inte ta bort partition %1. @@ -1063,46 +1292,46 @@ Alla ändringar kommer att gå förlorade. DeviceInfoWidget - - 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. - Typen av <strong>partitionstabell</strong> på den valda lagringsenheten.<br><br>Det enda sättet attt ändra typen av partitionstabell är genom att radera och återskapa partitionstabellen från början, vilket förstör all data på lagringsenheten.<br>Installationshanteraren kommer behålla den nuvarande partitionstabellen om du inte väljer något annat.<br>På moderna system är GPT att föredra. - - - + This device has a <strong>%1</strong> partition table. Denna enhet har en <strong>%1</strong> partitionstabell. - + 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. - + Detta är en <strong>loop</strong>enhet.<br><br>Det är en pseudo-enhet som inte har någon partitionstabell, och som gör en fil tillgänglig som en blockenhet. Denna typ av upplägg innehåller vanligtvis ett enda filsystem. - + 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. - + Installationsprogrammet <strong>kan inte hitta någon partitionstabell</strong> på den valda lagringsenheten.<br><br>Antingen har enheten ingen partitionstabell, eller så är partitionstabellen trasig eller av okänd typ.<br>Installationsprogrammet kan skapa en ny partitionstabell åt dig, antingen automatiskt, eller genom sidan för manuell partitionering. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Det här är den rekommenderade typen av partitionstabell för moderna system med en startpartition av typen <strong>EFI</strong>. - + <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. - + <br><br>Denna partitionstabell är endast lämplig på äldre system som startar från en <strong>BIOS</strong>-startmiljö. GPT rekommenderas i de flesta andra fall.<br><br><strong>Varning:</strong> MBR-partitionstabellen är en föråldrad standard från MS-DOS-tiden.<br>Endast 4 <em>primära</em> partitioner kan skapas, och av dessa 4 kan en vara en <em>utökad</em> partition, som i sin tur kan innehålla många <em>logiska</em> partitioner. + + + + 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. + Typen av <strong>partitionstabell</strong> på den valda lagringsenheten.<br><br>Det enda sättet attt ändra typen av partitionstabell är genom att radera och återskapa partitionstabellen från början, vilket förstör all data på lagringsenheten.<br>Installationshanteraren kommer behålla den nuvarande partitionstabellen om du inte väljer något annat.<br>På moderna system är GPT att föredra. DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1111,17 +1340,17 @@ Alla ändringar kommer att gå förlorade. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Skriv LUKS konfiguration för Dracut till %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Skippa att skriva LUKS konfiguration för Dracut "/" partition är inte krypterad - + Failed to open %1 Kunde inte öppna %1 @@ -1129,7 +1358,7 @@ Alla ändringar kommer att gå förlorade. DummyCppJob - + Dummy C++ Job Exempel C++ jobb @@ -1137,123 +1366,167 @@ Alla ändringar kommer att gå förlorade. EditExistingPartitionDialog - + Edit Existing Partition Ändra befintlig partition - - Content: - Innehåll: + + Con&tent: + Inne&håll: - + &Keep Behåll - + Format Format - + Warning: Formatting the partition will erase all existing data. Varning: Formatering av partitionen kommer att radera alla data. - + &Mount Point: &Monteringspunkt - + Si&ze: Storlek: - + MiB MiB - + Fi&le System: Fi&lsystem: - + Flags: Flaggor: - - Mountpoint already in use. Please select another one. - Monteringspunkt används redan. Välj en annan. + + Label for the filesystem + Etikett för filsystem + + + + FS Label: + FS Etikett: EncryptWidget - + Form Form - + En&crypt system Kryptera system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Ditt system verkar inte stödja kryptering tillräckligt bra för att kryptera hela systemet. Du kan aktivera kryptering, men prestandan kan bli lidande. + + + Passphrase Lösenord - + Confirm passphrase Bekräfta lösenord - + + Please enter the same passphrase in both boxes. Vänligen skriv samma lösenord i båda fälten. + + ErrorDialog + + + Details: + Detaljer: + + + + Would you like to paste the install log to the web? + Vill du ladda upp installationsloggen på webben? + + FillGlobalStorageJob - + Set partition information Ange partitionsinformation - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Installera %1 på <strong>ny</strong> %2 system partition med funktioner <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Installera %1 på <strong>ny</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Skapa <strong> ny </strong> %2 partition med monteringspunkt <strong> %1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Skapa <strong>ny</strong>%2 partition med monteringspunkt <strong>%1</strong> och funktioner <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Skapa <strong>ny</strong> %2 partition med monteringspunkt <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Installera %2 på %3 system partition <strong>%1</strong> med funktioner <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Skapa %3 partition <strong>%1</strong>med monteringspunkt <strong>%2</strong>och funktioner <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Skapa %3 partition <strong>%1</strong> med monteringspunkt <strong>%2</strong> %4. + + + Install %2 on %3 system partition <strong>%1</strong>. Installera %2 på %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Skapa %3 partition <strong>%1</strong> med monteringspunkt <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Installera uppstartshanterare på <strong>%1</strong>. - + Setting up mount points. Ställer in monteringspunkter. @@ -1261,93 +1534,81 @@ Alla ändringar kommer att gå förlorade. FinishedPage - + Form Formulär - + &Restart now Sta&rta om nu - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Allt klart.</h1><br/>%1 har installerats på din dator.<br/>Du kan nu börja använda ditt nya system. - + <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> - + <html><head/><body><p>När denna ruta är ikryssad kommer systemet starta om omedelbart när du klickar på <span style="font-style:italic;">Klar</span> eller stänger installationsprogrammet.</p></body></html> - + <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. <h1>Klappat och klart.</h1><br/>%1 har installerats på din dator.<br/>Du kan nu starta om till ditt nya system, eller fortsätta att använda %2 i liveläge. - + <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> - + <html><head/><body><p>När denna ruta är ikryssad kommer systemet starta om omedelbart när du klickar på <span style="font-style:italic;">Klar</span> eller stänger installationsprogrammet.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Installationen misslyckades</h1> <br/>%1 har inte blivit installerad på din dator. <br/>Felmeddelandet var: %2 - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Installationen misslyckades</h1> <br/>%1 har inte blivit installerad på din dator. <br/>Felmeddelandet var: %2 - FinishedViewStep + FinishedQmlViewStep - + Finish Slutför + + + FinishedViewStep - - Setup Complete - Inställningarna är klara - - - - Installation Complete - Installationen är klar - - - - The setup of %1 is complete. - Inställningarna för %1 är klara. - - - - The installation of %1 is complete. - Installationen av %1 är klar. + + Finish + Slutför FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Formatera partition %1 (filsystem: %2, storlek: %3 MiB) på %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Formatera <strong>%3MiB</strong> partition <strong>%1</strong> med filsystem <strong>%2</strong>. - + Formatting partition %1 with file system %2. Formatera partition %1 med filsystem %2. - + The installer failed to format partition %1 on disk '%2'. Installationsprogrammet misslyckades att formatera partition %1 på disk '%2'. @@ -1355,72 +1616,72 @@ Alla ändringar kommer att gå förlorade. GeneralRequirements - + has at least %1 GiB available drive space har minst %1 GiB tillgängligt på hårddisken - + There is not enough drive space. At least %1 GiB is required. Det finns inte tillräckligt med hårddiskutrymme. Minst %1 GiB krävs. - + has at least %1 GiB working memory har minst %1 GiB arbetsminne - + The system does not have enough working memory. At least %1 GiB is required. Systemet har inte tillräckligt med fungerande minne. Minst %1 GiB krävs. - + is plugged in to a power source är ansluten till en strömkälla - + The system is not plugged in to a power source. Systemet är inte anslutet till någon strömkälla. - + is connected to the Internet är ansluten till internet - + The system is not connected to the Internet. Systemet är inte anslutet till internet. - + is running the installer as an administrator (root) körs installationsprogammet med administratörsrättigheter (root) - + The setup program is not running with administrator rights. Installationsprogammet körs inte med administratörsrättigheter. - + The installer is not running with administrator rights. Installationsprogammet körs inte med administratörsrättigheter. - + has a screen large enough to show the whole installer har en tillräckligt stor skärm för att visa hela installationsprogrammet - + The screen is too small to display the setup program. Skärmen är för liten för att visa installationsprogrammet. - + The screen is too small to display the installer. Skärmen är för liten för att visa installationshanteraren. @@ -1428,7 +1689,7 @@ Alla ändringar kommer att gå förlorade. HostInfoJob - + Collecting information about your machine. Samlar in information om din maskin. @@ -1436,25 +1697,25 @@ Alla ändringar kommer att gå förlorade. IDJob - - + + + - OEM Batch Identifier - + OEM-batchidentifierare - + Could not create directories <code>%1</code>. Kunde inte skapa mappar <code>%1</code>. - + Could not open file <code>%1</code>. Kunde inte öppna fil <code>%1</code>. - + Could not write to file <code>%1</code>. Kunde inte skriva till fil <code>%1</code>. @@ -1462,7 +1723,7 @@ Alla ändringar kommer att gå förlorade. InitcpioJob - + Creating initramfs with mkinitcpio. Skapar initramfs med mkinitcpio. @@ -1470,7 +1731,7 @@ Alla ändringar kommer att gå förlorade. InitramfsJob - + Creating initramfs. Skapar initramfs. @@ -1478,17 +1739,17 @@ Alla ändringar kommer att gå förlorade. InteractiveTerminalPage - + Konsole not installed Konsole inte installerat - + Please install KDE Konsole and try again! Installera KDE Konsole och försök igen! - + Executing script: &nbsp;<code>%1</code> Kör skript: &nbsp;<code>%1</code> @@ -1496,28 +1757,15 @@ Alla ändringar kommer att gå förlorade. InteractiveTerminalViewStep - + Script Skript - - KeyboardPage - - - Set keyboard model to %1.<br/> - Sätt tangenbordsmodell till %1.<br/> - - - - Set keyboard layout to %1/%2. - Sätt tangentbordslayout till %1/%2. - - KeyboardQmlViewStep - + Keyboard Tangentbord @@ -1525,7 +1773,7 @@ Alla ändringar kommer att gå förlorade. KeyboardViewStep - + Keyboard Tangentbord @@ -1533,73 +1781,96 @@ Alla ändringar kommer att gå förlorade. LCLocaleDialog - + System locale setting Systemspråksinställning - + 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>. Systemspråket påverkar vilket språk och teckenuppsättning somliga kommandoradsprogram använder.<br/>Det nuvarande språket är <strong>%1</strong>. - + &Cancel &Avsluta - + &OK &Okej + + LOSHJob + + + Configuring encrypted swap. + Konfigurerar krypterad swap. + + + + No target system available. + Inget målsystem tillgängligt. + + + + No rootMountPoint is set. + Ingen rootMonteringspunkt är satt + + + + No configFilePath is set. + Ingen konfigurations filsökväg är satt. + + LicensePage - + Form Formulär - + <h1>License Agreement</h1> <h1>Licensavtal</h1> - + I accept the terms and conditions above. Jag accepterar villkoren och avtalet ovan. - + Please review the End User License Agreements (EULAs). - + Vänligen läs igenom licensavtalen för slutanvändare (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. - + Denna installationsprocess kommer installera proprietär mjukvara för vilken särskilda licensvillkor gäller. - + If you do not agree with the terms, the setup procedure cannot continue. - + Om du inte accepterar villkoren kan inte installationsproceduren fortsätta. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + Denna installationsprocess kan installera proprietär mjukvara för vilken särskilda licensvillkor gäller, för att kunna erbjuda ytterligare funktionalitet och förbättra användarupplevelsen. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - + Om du inte godkänner villkoren kommer inte proprietär mjukvara att installeras, och alternativ med öppen källkod kommer användas istället. LicenseViewStep - + License Licens @@ -1607,109 +1878,102 @@ Alla ändringar kommer att gå förlorade. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1-drivrutin</strong><br/>från %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafikdrivrutin</strong><br/><font color="Grey">från %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 insticksprogram</strong><br/><font color="Grey">från %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">från %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1-paket</strong><br/><font color="Grey">från %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">från %2</font> - + File: %1 Fil: %1 - + + Hide license text + Dölj licens text + + + Show the license text Visa licens text - + Open license agreement in browser. Öppna licensavtal i en webbläsare. - - - Hide license text - Dölj licens text - LocalePage - - The system language will be set to %1. - Systemspråket kommer ändras till %1. - - - - The numbers and dates locale will be set to %1. - - - - + Region: Region: - + Zone: Zon: - - + + &Change... Ändra... - - - Set timezone to %1/%2.<br/> - Sätt tidszon till %1/%2.<br/> - LocaleQmlViewStep - + Location Plats + + LocaleTests + + + Quit + Avsluta + + LocaleViewStep - + Location Plats @@ -1717,35 +1981,35 @@ Alla ändringar kommer att gå förlorade. LuksBootKeyFileJob - + Configuring LUKS key file. Konfigurerar LUKS nyckel fil. - - + + No partitions are defined. Inga partitioner är definerade. - - - + + + Encrypted rootfs setup error - + Fel vid inställning av krypterat rootfs - + Root partition %1 is LUKS but no passphrase has been set. Root partition %1 är LUKS men ingen lösenfras har ställts in. - + Could not create LUKS key file for root partition %1. Kunde inte skapa LUKS nyckelfil för root partition %1. - + Could not configure LUKS key file on partition %1. Kunde inte konfigurera LUKS nyckelfil på partition %1. @@ -1753,116 +2017,133 @@ Alla ändringar kommer att gå förlorade. MachineIdJob - + Generate machine-id. Generera maskin-id. - + Configuration Error Konfigurationsfel - + No root mount point is set for MachineId. Ingen root monteringspunkt är satt för MachineId. + + Map + + + Timezone: %1 + Tidszon: %1 + + + + 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. + Snälla välj din föredragna plats på kartan så installationsprogrammet kan föreslå nationella inställningar + och tidszons inställningar åt dig. Du kan finjustera de föreslagna inställningarna nedan. +Sök på kartan genom att dra + för att flytta och använd +/- knapparna för att zooma in/ut eller så använder du musens scrollhjul för att zooma. + + NetInstallViewStep - - + Package selection Paketval - + Office software Kontors programvara - + Office package Kontors paket - + Browser software - + Webbläsare - + Browser package - + Webbläsare - + Web browser Webbläsare - + Kernel Kärna - + Services Tjänster - + Login Inloggning - + Desktop Skrivbord - + Applications Program - + Communication Kommunikation - + Development Utveckling - + Office - + Kontorsprogram - + Multimedia Multimedia - + Internet Internet - + Theming Teman - + Gaming Gaming - + Utilities Verktyg @@ -1870,7 +2151,7 @@ Alla ändringar kommer att gå förlorade. NotesQmlViewStep - + Notes Anteckningar @@ -1878,17 +2159,17 @@ Alla ändringar kommer att gå förlorade. OEMPage - + Ba&tch: - + Gr&upp: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><p>Ange en batch-identifierare här. Den kommer lagras på målsystemet.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM-konfiguration</h1><p>Calamares kommer att använda OEM inställningar när målsystemet konfigureras.</p></body></html> @@ -1896,260 +2177,317 @@ Alla ändringar kommer att gå förlorade. OEMViewStep - + OEM Configuration OEM Konfiguration - + Set the OEM Batch Identifier to <code>%1</code>. - + Sätt OEM-batchidentifierare till <code>%1</code>. + + + + Offline + + + Select your preferred Region, or use the default settings. + Välj din föredragna Region, eller använd standardinställningarna. + + + + + + Timezone: %1 + Tidszon: %1 + + + + Select your preferred Zone within your Region. + Välj din föredragna Zon inom din region. + + + + Zones + Zoner + + + + You can fine-tune Language and Locale settings below. + Du kan finjustera språk och Nationella inställningar nedan. PWQ - + Password is too short Lösenordet är för kort - + Password is too long Lösenordet är för långt - + Password is too weak Lösenordet är för svagt - + Memory allocation error when setting '%1' - + Minnesallokerings fel då '%1' skulle ställas in - + Memory allocation error Minnesallokerings fel - + The password is the same as the old one Lösenordet är samma som det gamla - + The password is a palindrome Lösenordet är en palindrom - + The password differs with case changes only - + Endast stora och små bokstäver skiljer lösenorden åt - + The password is too similar to the old one Lösenordet liknar för mycket det gamla - + The password contains the user name in some form Lösenordet innehåller ditt användarnamn i någon form - + The password contains words from the real name of the user in some form - + Lösenordet innehåller ord från användarens namn i någon form - + The password contains forbidden words in some form Lösenordet innehåller förbjudna ord i någon form - - The password contains less than %1 digits - Lösenordet innehåller mindre än %1 siffror - - - + The password contains too few digits Lösenordet innehåller för få siffror - - The password contains less than %1 uppercase letters - Lösenordet innehåller mindre än %1 stora bokstäver - - - + The password contains too few uppercase letters Lösenordet innehåller för få stora bokstäver - - - The password contains less than %1 lowercase letters - Lösenordet innehåller mindre än %1 små bokstäver + + + The password contains fewer than %n lowercase letters + + Lösenordet innehåller färre än %n små bokstäver + Lösenordet innehåller färre än %n små bokstäver + - + The password contains too few lowercase letters Lösenordet innehåller för få små bokstäver - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters Lösenordet innehåller för få icke-alfanumeriska tecken - - The password is shorter than %1 characters - Lösenordet är kortare än %1 tecken - - - + The password is too short Detta lösenordet är för kort - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - + Lösenordet innehåller inte tillräckligt många teckenklasser - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively Lösenordet innehåller för många liknande tecken efter varandra - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - + Lösenordet innehåller för många tecken från samma klass i rad + + + + The password contains fewer than %n digits + + Lösenord innehåller mindre än %n siffror + Lösenordet innehåller mindre än %n siffror + + + + + The password contains fewer than %n uppercase letters + + Lösenord innehåller mindre än %n stora bokstäver + Lösenordet innehåller mindre än %n stora bokstäver + + + + + The password contains fewer than %n non-alphanumeric characters + + Lösenord innehåller färre än %n icke alfanumeriska tecken + Lösenordet innehåller färre än %n icke alfanumeriska tecken + + + + + The password is shorter than %n characters + + Lösenord är kortare än %n tecken + Lösenordet är kortare än %n tecken + - - The password contains monotonic sequence longer than %1 characters - + + The password is a rotated version of the previous one + Lösenordet är en roterad version av det förra + + + + The password contains fewer than %n character classes + + Lösenord innehåller färre än %n teckenklasser + Lösenordet innehåller färre än %n teckenklasser + + + + + The password contains more than %n same characters consecutively + + Lösenord innehåller fler än %n likadana tecken i rad + Lösenordet innehåller fler än %n likadana tecken i rad + + + + + The password contains more than %n characters of the same class consecutively + + Lösenord innehåller fler än %n tecken från samma klass i rad + Lösenordet innehåller fler än %n tecken från samma klass i rad + + + + + The password contains monotonic sequence longer than %n characters + + Lösenord innehåller en monoton sekvens längre än %n tecken + Lösenordet innehåller en monoton sekvens längre än %n tecken + - + The password contains too long of a monotonic character sequence - + Lösenordet innehåller en för lång monoton teckensekvens - + No password supplied Inget lösenord angivit - + Cannot obtain random numbers from the RNG device - + Kan inte hämta slumptal från slumptalsgeneratorn - + Password generation failed - required entropy too low for settings - + Lösenordsgenerering misslyckades - för lite entropi tillgänglig för givna inställningar - + The password fails the dictionary check - %1 - + Lösenordet klarar inte ordlistekontrollen - %1 - + The password fails the dictionary check - + Lösenordet klarar inte ordlistekontrollen - + Unknown setting - %1 Okänd inställning - %1 - + Unknown setting Okänd inställning - + Bad integer value of setting - %1 - + Dåligt heltals värde på inställning - %1 - + Bad integer value Dåligt heltals värde - + Setting %1 is not of integer type Inställning %1 är inte av heltals typ - + Setting is not of integer type Inställning är inte av heltals typ - + Setting %1 is not of string type Inställning %1 är inte av sträng typ - + Setting is not of string type Inställning %1 är inte av sträng typ - + Opening the configuration file failed Öppnande av konfigurationsfilen misslyckades - + The configuration file is malformed Konfigurationsfilen är felaktig - + Fatal failure Fatalt fel - + Unknown error Okänt fel - + Password is empty Lösenordet är blankt @@ -2157,40 +2495,48 @@ Alla ändringar kommer att gå förlorade. PackageChooserPage - + Form Form - + Product Name Produktnamn - + TextLabel TextLabel - + Long Product Description Lång produktbeskrivning - + Package Selection Paketval - + Please pick a product from the list. The selected product will be installed. - + Välj en produkt från listan. Den valda produkten kommer att installeras. + + + + PackageChooserQmlViewStep + + + Packages + Paket PackageChooserViewStep - + Packages Paket @@ -2198,12 +2544,12 @@ Alla ändringar kommer att gå förlorade. PackageModel - + Name Namn - + Description Beskrivning @@ -2211,17 +2557,17 @@ Alla ändringar kommer att gå förlorade. Page_Keyboard - + Form Form - + Keyboard Model: Tangentbordsmodell: - + Type here to test your keyboard Skriv här för att testa ditt tangentbord @@ -2229,96 +2575,96 @@ Alla ändringar kommer att gå förlorade. Page_UserSetup - + Form Form - + What is your name? Vad heter du? - - What name do you want to use to log in? - Vilket namn vill du använda för att logga in? - - - - Choose a password to keep your account safe. - Välj ett lösenord för att hålla ditt konto säkert. - - - - - <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> - <small>Ange samma lösenord två gånger, så att det kan kontrolleras för stavfel. Ett bra lösenord innehåller en blandning av bokstäver, nummer och interpunktion, bör vara minst åtta tecken långt, och bör ändras regelbundet.</small> - - - - What is the name of this computer? - Vad är namnet på datorn? - - - + Your Full Name Ditt Fullständiga namn - + + What name do you want to use to log in? + Vilket namn vill du använda för att logga in? + + + login inloggning - + + What is the name of this computer? + Vad är namnet på datorn? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Detta namn används om du gör datorn synlig för andra i ett nätverk.</small> - + Computer Name Datornamn - - + + Choose a password to keep your account safe. + Välj ett lösenord för att hålla ditt konto säkert. + + + + + <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> + <small>Ange samma lösenord två gånger, så att det kan kontrolleras för stavfel. Ett bra lösenord innehåller en blandning av bokstäver, nummer och interpunktion, bör vara minst åtta tecken långt, och bör ändras regelbundet.</small> + + + + Password Lösenord - - + + Repeat Password Repetera Lösenord - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + När den här rutan är förkryssad kommer kontroll av lösenordsstyrka att genomföras, och du kommer inte kunna använda ett svagt lösenord. - + Require strong passwords. Kräv starkt lösenord. - + Log in automatically without asking for the password. Logga in automatiskt utan att fråga efter lösenord. - + Use the same password for the administrator account. Använd samma lösenord för administratörskontot. - + Choose a password for the administrator account. Välj ett lösenord för administratörskontot. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Ange samma lösenord två gånger, så att det kan kontrolleras för stavfel.</small> @@ -2326,42 +2672,42 @@ Alla ändringar kommer att gå förlorade. PartitionLabelsView - + Root Root - + Home Hem - + Boot Boot - + EFI system EFI-system - + Swap Swap - + New partition for %1 Ny partition för %1 - + New partition Ny partition - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2370,34 +2716,39 @@ Alla ändringar kommer att gå förlorade. PartitionModel - - + + Free Space Ledigt utrymme - - + + New partition Ny partition - + Name Namn - + File System Filsystem - + + File System Label + Filsystem etikett + + + Mount Point Monteringspunkt - + Size Storlek @@ -2405,195 +2756,185 @@ Alla ändringar kommer att gå förlorade. PartitionPage - + Form Form - + Storage de&vice: Lagringsenhet: - + &Revert All Changes Återställ alla ändringar - + New Partition &Table Ny partitions&tabell - + Cre&ate Skapa - + &Edit Ändra - + &Delete Ta bort - + New Volume Group Ny volymgrupp - + Resize Volume Group Ändra storlek på volymgrupp - + Deactivate Volume Group Deaktivera volymgrupp - + Remove Volume Group Ta bort volymgrupp - + I&nstall boot loader on: Installera uppstartshanterare på: - + Are you sure you want to create a new partition table on %1? Är du säker på att du vill skapa en ny partitionstabell på %1? - + Can not create new partition Kan inte skapa ny partition - + 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. - + Partitionstabellen på %1 har redan %2 primära partitioner och inga fler kan läggas till. Var god ta bort en primär partition och lägg till en utökad partition istället. PartitionViewStep - + Gathering system information... Samlar systeminformation... - + Partitions Partitioner - - Install %1 <strong>alongside</strong> another operating system. - Installera %1 <strong>bredvid</strong> ett annat operativsystem. + + Unsafe partition actions are enabled. + Osäkra partitionsåtgärder är aktiverade. - - <strong>Erase</strong> disk and install %1. - <strong>Rensa</strong> disken och installera %1. + + Partitioning is configured to <b>always</b> fail. + Partitionering är konfigurerad till att <b>alltid</b> misslyckas. - - <strong>Replace</strong> a partition with %1. - <strong>Ersätt</strong> en partition med %1. + + No partitions will be changed. + Inga partitioner kommer att ändras. - - <strong>Manual</strong> partitioning. - <strong>Manuell</strong> partitionering. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Installera %1 <strong>bredvid</strong> ett annat operativsystem på disken <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Rensa</strong> disken <strong>%2</strong> (%3) och installera %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Ersätt</strong> en partition på disken <strong>%2</strong> (%3) med %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>Manuell</strong> partitionering på disken <strong>%1</strong> (%2). - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Nuvarande: - + After: Efter: - + No EFI system partition configured Ingen EFI system partition konfigurerad - - 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>esp</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. - + + EFI system partition configured incorrectly + EFI-systempartitionen felaktigt konfigurerad - - EFI system partition flag not set - EFI system partitionsflagga inte satt + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + En EFI-systempartition krävs för att starta %1 <br/><br/>För att konfigurera en EFI-systempartition, gå tillbaka och välj eller skapa ett lämpligt filsystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - + + The filesystem must be mounted on <strong>%1</strong>. + Filsystemet måste vara monterat på <strong>%1</strong>. - + + The filesystem must have type FAT32. + Filsystemet måste vara av typ FAT32. + + + + The filesystem must be at least %1 MiB in size. + Filsystemet måste vara minst %1 MiB i storlek. + + + + The filesystem must have flag <strong>%1</strong> set. + Filsystemet måste ha flagga <strong>%1</strong> satt. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Du kan fortsätta utan att ställa in en EFI-systempartition men ditt system kanske inte startar. + + + Option to use GPT on BIOS Alternativ för att använda GPT på BIOS - - 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. - + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + En GPT-partitionstabell är det bästa alternativet för alla system. Det här installationsprogrammet stöder också en sådan installation för BIOS-system. <br/><br/>för att konfigurera en GPT-partitionstabell i BIOS, (om du inte redan har gjort det) gå tillbaka och ställ in partitionstabellen till GPT, skapa sedan en 8 MB oformaterad partition med <strong>%2</strong> flaggan aktiverad.<br/><br/>En oformaterad 8 MB partition krävs för att starta %1 på ett BIOS-system med GPT. - + Boot partition not encrypted Boot partition inte krypterad - + 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. - + En separat uppstartspartition skapades tillsammans med den krypterade rootpartitionen, men uppstartspartitionen är inte krypterad.<br/><br/>Det finns säkerhetsproblem med den här inställningen, eftersom viktiga systemfiler sparas på en okrypterad partition.<br/>Du kan fortsätta om du vill, men upplåsning av filsystemet kommer hända senare under uppstart av systemet.<br/>För att kryptera uppstartspartitionen, gå tillbaka och återskapa den, och välj <strong>Kryptera</strong> i fönstret när du skapar partitionen. - + has at least one disk device available. - + har åtminstone en diskenhet tillgänglig. - + There are no partitions to install on. Det finns inga partitioner att installera på. @@ -2601,57 +2942,57 @@ Alla ändringar kommer att gå förlorade. PlasmaLnfJob - + Plasma Look-and-Feel Job - + Jobb för Plasmas utseende och känsla - - + + Could not select KDE Plasma Look-and-Feel package - + Kunde inte välja KDE Plasma-paket för utseende och känsla PlasmaLnfPage - + Form Form - + 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. - + Var god välj ett utseende och känsla för KDE Plasma skrivbordet. Du kan hoppa över detta steget och ställa in utseende och känsla när systemet är installerat. Klicka på ett val för utseende och känsla för att få en förhandsgranskning av det valet. - + 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. - + Var god välj ett utseende och känsla för KDE Plasma skrivbordet. Du kan hoppa över detta steget och ställa in utseende och känsla när systemet är installerat. Klicka på ett val för utseende och känsla för att få en förhandsgranskning av det valet. PlasmaLnfViewStep - + Look-and-Feel - + Utseende och känsla PreserveFiles - + Saving files for later ... Sparar filer tills senare ... - + No files configured to save for later. Inga filer konfigurerade att spara till senare. - + Not all of the configured files could be preserved. Inte alla av konfigurationsfilerna kunde bevaras. @@ -2659,14 +3000,14 @@ Alla ändringar kommer att gå förlorade. ProcessResult - + There was no output from the command. Det kom ingen utdata från kommandot. - + Output: @@ -2675,52 +3016,52 @@ Utdata: - + External command crashed. Externt kommando kraschade. - + Command <i>%1</i> crashed. Kommando <i>%1</i> kraschade. - + External command failed to start. Externt kommando misslyckades med att starta - + Command <i>%1</i> failed to start. Kommando <i>%1</i> misslyckades med att starta.  - + Internal error when starting command. Internt fel under kommandostart. - + Bad parameters for process job call. Ogiltiga parametrar för processens uppgiftsanrop. - + External command failed to finish. Fel inträffade när externt kommando kördes. - + Command <i>%1</i> failed to finish in %2 seconds. Kommando <i>%1</i> misslyckades att slutföras på %2 sekunder. - + External command finished with errors. Externt kommando kördes färdigt med fel. - + Command <i>%1</i> finished with exit code %2. Kommando <i>%1</i>avslutades under körning med avslutningskod %2. @@ -2728,89 +3069,95 @@ Utdata: QObject - - Default Keyboard Model - Standardtangentbordsmodell - - - - - Default - Standard - - - - unknown - okänd - - - - extended - utökad - - - - unformatted - oformaterad - - - - swap - swap - - - - Unpartitioned space or unknown partition table - Opartitionerat utrymme eller okänd partitionstabell - - - - (no mount point) - (ingen monteringspunkt) - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product - Ingen produkt + + unknown + okänd - - No description provided. - Ingen beskrivning tillhandahålls. + + extended + utökad - - - - + + unformatted + oformaterad + + + + swap + swap + + + + + Default + Standard + + + + + + File not found Filen hittades inte - + Path <pre>%1</pre> must be an absolute path. - + Sökväg <pre>%1</pre> måste vara en absolut sökväg. - + + Directory not found + Katalog hittades inte + + + + Could not create new random file <pre>%1</pre>. Kunde inte skapa ny slumpmässig fil <pre>%1</pre>. + + + No product + Ingen produkt + + + + No description provided. + Ingen beskrivning tillhandahålls. + + + + (no mount point) + (ingen monteringspunkt) + + + + Unpartitioned space or unknown partition table + Opartitionerat utrymme eller okänd partitionstabell + + + + Recommended + + + <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> + <p>Denna dator uppfyller inte alla rekommenderade krav för att installera %1. +<br/>Installationen kan fortsätta, men alla alternativ och funktioner kanske inte kan användas.</p> + RemoveUserJob - + Remove live user from target system Tar bort live användare från målsystemet @@ -2818,18 +3165,18 @@ Utdata: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Ta bort volymgrupp med namnet %1. - + Remove Volume Group named <strong>%1</strong>. Ta bort volymgrupp med namnet <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Installationsprogrammet misslyckades att ta bort en volymgrupp med namnet '%1'. @@ -2837,166 +3184,183 @@ Utdata: ReplaceWidget - + Form Formulär - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Välj var du vill installera %1.<br/><font color="red">Varning: </font>detta kommer att radera alla filer på den valda partitionen. - + The selected item does not appear to be a valid partition. Det valda alternativet verkar inte vara en giltig partition. - + %1 cannot be installed on empty space. Please select an existing partition. %1 kan inte installeras i tomt utrymme. Välj en existerande partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 kan inte installeras på en utökad partition. Välj en existerande primär eller logisk partition. - + %1 cannot be installed on this partition. %1 kan inte installeras på den här partitionen. - + Data partition (%1) Datapartition (%1) - + Unknown system partition (%1) Okänd systempartition (%1) - + %1 system partition (%2) Systempartition för %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Partitionen %1 är för liten för %2. Välj en partition med minst storleken %3 GiB. - + <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. - + <strong>%2</strong><br/><br/>Kan inte hitta en EFI-systempartition någonstans på detta system. Var god gå tillbaka och använd manuell partitionering för att installera %1. - - - + + + <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. <strong>%3</strong><br/><br/>%1 kommer att installeras på %2.<br/><font color="red">Varning: </font>all data på partition %2 kommer att gå förlorad. - + The EFI system partition at %1 will be used for starting %2. EFI-systempartitionen %1 kommer att användas för att starta %2. - + EFI system partition: EFI-systempartition: - ResizeFSJob + Requirements - - Resize Filesystem Job - + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Denna dator uppfyller inte minimikraven för att installera %1.<br/> +Installationen kan inte fortsätta.</p> - + + <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> + <p>Denna dator uppfyller inte alla rekommenderade krav för att installera %1. +<br/>Installationen kan fortsätta, men alla alternativ och funktioner kanske inte kan användas.</p> + + + + ResizeFSJob + + + Resize Filesystem Job + Jobb för storleksförändring av filsystem + + + Invalid configuration Ogiltig konfiguration - + The file-system resize job has an invalid configuration and will not run. - + Jobbet för storleksförändring av filsystem har en felaktig konfiguration och kommer inte köras. - + KPMCore not Available KPMCore inte tillgänglig - + Calamares cannot start KPMCore for the file-system resize job. - + Calamares kan inte starta KPMCore för jobbet att ändra filsystemsstorlek. - - - - - + + + + + Resize Failed Storleksändringen misslyckades - + The filesystem %1 could not be found in this system, and cannot be resized. - + Kunde inte hitta filsystemet %1 på systemet, och kan inte ändra storlek på det. - + The device %1 could not be found in this system, and cannot be resized. - + Kunde inte hitta enheten %1 på systemet, och kan inte ändra storlek på den. - - + + The filesystem %1 cannot be resized. - + Det går inte att ändra storlek på filsystemet %1. - - + + The device %1 cannot be resized. - + Det går inte att ändra storlek på enheten %1. - + The filesystem %1 must be resized, but cannot. - + Filsystemet %1 måste ändra storlek, men storleken kan inte ändras. - + The device %1 must be resized, but cannot - + Enheten %1 måste ändra storlek, men storleken kan inte ändras ResizePartitionJob - + Resize partition %1. Ändra storlek på partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Ändra <strong>%2MiB</strong>-partitionen <strong>%1</strong> till <strong>%3MB</strong>. - + Resizing %2MiB partition %1 to %3MiB. Ändrar storlek på partitionen %1 från %2MB till %3MB. - + The installer failed to resize partition %1 on disk '%2'. Installationsprogrammet misslyckades med att ändra storleken på partition %1 på disk '%2'. @@ -3004,7 +3368,7 @@ Utdata: ResizeVolumeGroupDialog - + Resize Volume Group Ändra storlek på volymgrupp @@ -3012,18 +3376,18 @@ Utdata: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Ändra storlek på volymgruppen som heter %1 från %2 till %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Byt storlek på volymgrupp med namn <strong>%1</strong> från <strong>%2</strong>till <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Installationsprogrammet misslyckades att byta storlek på en volymgrupp med namn '%1'. @@ -3031,53 +3395,25 @@ Utdata: ResultsListDialog - + For best results, please ensure that this computer: För bästa resultat, vänligen se till att datorn: - + System requirements Systemkrav - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Datorn uppfyller inte minimikraven för inställning av %1.<br/>Inga inställningar kan inte göras. <a href="#details">Detaljer...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Denna dator uppfyller inte minimikraven för att installera %1.<br/>Installationen kan inte fortsätta. <a href="#details">Detaljer...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Några av kraven för inställning av %1 uppfylls inte av datorn.<br/>Inställningarna kan ändå göras men vissa funktioner kommer kanske inte att kunna användas. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Denna dator uppfyller inte alla rekommenderade krav för att installera %1.<br/>Installationen kan fortsätta, men alla alternativ och funktioner kanske inte kan användas. - - - - This program will ask you some questions and set up %2 on your computer. - Detta program kommer att ställa dig några frågor och installera %2 på din dator. - - ScanningDialog - + Scanning storage devices... Skannar lagringsenheter... - + Partitioning Partitionering @@ -3085,29 +3421,29 @@ Utdata: SetHostNameJob - + Set hostname %1 Ange värdnamn %1 - + Set hostname <strong>%1</strong>. Ange värdnamn <strong>%1</strong>. - + Setting hostname %1. Anger värdnamn %1. + - Internal Error Internt fel - - + + Cannot write hostname to target system Kan inte skriva värdnamn till målsystem @@ -3115,29 +3451,29 @@ Utdata: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Sätt tangentbordsmodell till %1, layout till %2-%3 - + Failed to write keyboard configuration for the virtual console. Misslyckades med att skriva tangentbordskonfiguration för konsolen. - - - + + + Failed to write to %1 Misslyckades med att skriva %1 - + Failed to write keyboard configuration for X11. Misslyckades med att skriva tangentbordskonfiguration för X11. - + Failed to write keyboard configuration to existing /etc/default directory. Misslyckades med att skriva tangentbordskonfiguration till den existerande katalogen /etc/default. @@ -3145,82 +3481,82 @@ Utdata: SetPartFlagsJob - + Set flags on partition %1. Sätt flaggor på partition %1. - + Set flags on %1MiB %2 partition. Sätt flaggor på %1MiB %2 partition. - + Set flags on new partition. Sätt flaggor på ny partition. - + Clear flags on partition <strong>%1</strong>. Rensa flaggor på partition <strong>%1</strong>, - + Clear flags on %1MiB <strong>%2</strong> partition. Rensa flaggor på %1MiB <strong>%2</strong>partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Flagga %1MiB <strong>%2</strong>partition som <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Rensa flaggor på %1MiB <strong>%2</strong>partition. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Sätter flaggor <strong>%3</strong> på %11MiB <strong>%2</strong>partition. - - - + Clear flags on new partition. Rensa flaggor på ny partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Flagga partition <strong>%1</strong> som <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Flagga %1MiB <strong>%2</strong>partition som <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Flagga ny partition som <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. Rensar flaggor på partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Rensa flaggor på %1MiB <strong>%2</strong>partition. + + + Clearing flags on new partition. Rensar flaggor på ny partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Sätter flaggor <strong>%2</strong> på partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Sätter flaggor <strong>%3</strong> på %11MiB <strong>%2</strong>partition. + + + Setting flags <strong>%1</strong> on new partition. Sätter flaggor <strong>%1</strong> på ny partition - + The installer failed to set flags on partition %1. Installationsprogrammet misslyckades med att sätta flaggor på partition %1. @@ -3228,42 +3564,42 @@ Utdata: SetPasswordJob - + Set password for user %1 Ange lösenord för användare %1 - + Setting password for user %1. Ställer in lösenord för användaren %1. - + Bad destination system path. Ogiltig systemsökväg till målet. - + rootMountPoint is %1 rootMonteringspunkt är %1 - + Cannot disable root account. Kunde inte inaktivera root konto. - + passwd terminated with error code %1. passwd stoppades med felkod %1. - + Cannot set password for user %1. Kan inte ställa in lösenord för användare %1. - + usermod terminated with error code %1. usermod avslutade med felkod %1. @@ -3271,127 +3607,200 @@ Utdata: SetTimezoneJob - + Set timezone to %1/%2 Sätt tidszon till %1/%2 - + Cannot access selected timezone path. Kan inte komma åt vald tidszonssökväg. - + Bad path: %1 Ogiltig sökväg: %1 - + Cannot set timezone. Kan inte ställa in tidszon. - + Link creation failed, target: %1; link name: %2 Skapande av länk misslyckades, mål: %1; länknamn: %2 - + Cannot set timezone, Kan inte ställa in tidszon, - + Cannot open /etc/timezone for writing Kunde inte öppna /etc/timezone för skrivning + + SetupGroupsJob + + + Preparing groups. + Förbereder grupper. + + + + + Could not create groups in target system + Kunde inte skapa grupper på målsystemet + + + + These groups are missing in the target system: %1 + Dessa grupper saknas på målsystemet: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Konfigurerar <pre>sudo</pre> användare. + + + + Cannot chmod sudoers file. + Kunde inte chmodda sudoerfilen. + + + + Cannot create sudoers file for writing. + Kunde inte skapa sudoerfil för skrivning. + + ShellProcessJob - + Shell Processes Job - + Jobb för skalprocesser SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &Okej - - This is an overview of what will happen once you start the install procedure. - Detta är en överblick av vad som kommer att ske när du startar installationsprocessen. + + &Yes + &Ja - - - SummaryViewStep - - Summary - Översikt + + &No + &Nej + + + + &Cancel + &Avsluta + + + + &Close + &Stäng TrackingInstallJob - + Installation feedback - + Installationsåterkoppling - + Sending installation feedback. - + Skickar installationsåterkoppling - + Internal error in install-tracking. - + Internt fel i install-tracking. - + HTTP request timed out. - + HTTP-begäran tog för lång tid. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE användarfeedback + + + + Configuring KDE user feedback. + Konfigurerar KDE användarfeedback. + + + + + Error in KDE user feedback configuration. + Fel vid konfigurering av KDE användarfeedback. + + + + Could not configure KDE user feedback correctly, script error %1. + Kunde inte konfigurera KDE användarfeedback korrekt, script fel %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Kunde inte konfigurera KDE användarfeedback korrekt, Calamares fel %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Maskin feedback - + Configuring machine feedback. Konfigurerar maskin feedback - - + + Error in machine feedback configuration. - + Fel vid konfigurering av maskin feedback - + Could not configure machine feedback correctly, script error %1. Kunde inte konfigurera maskin feedback korrekt, script fel %1. - + Could not configure machine feedback correctly, Calamares error %1. Kunde inte konfigurera maskin feedback korrekt, Calamares fel %1. @@ -3399,106 +3808,97 @@ Utdata: TrackingPage - + Form Form - + Placeholder Platshållare - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Klicka här för att inte <span style=" font-weight:600;"> skicka någon information alls om din installation.</p></body></html> - + <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> - + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;"> Klicka här för information om användarfeedback </span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - + + 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. + Spårning hjälper %1 att se hur ofta den är installerad, vilken hårdvara den är installerad på och vilka program som används. För att se vad som skickas, Klicka på hjälp ikonen vad sidan av varje område för att se vad som skickas. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - + + 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. + Genom att välja detta, kommer du skicka information om din installation och hårdvara. Denna information kommer <b>enbart skickas en gång</b> efter att installationen slutförts. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Genom att välja detta, kommer du periodiskt skicka information om din <b>maskin</b>installation, hårdvara och program, till %1 - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Genom att välja detta, kommer du regelbundet skicka information om din <b>användar</b>installation, hårdvara, program och dina program användningsmönster till %1. TrackingViewStep - + Feedback Feedback + + UmountJob + + + Unmount file systems. + Avmontera filsystem. + + + + No target system available. + Inget målsystem tillgängligt. + + + + No rootMountPoint is set. + Ingen rootMonteringspunkt är satt + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Om mer än en person skall använda datorn så kan du skapa flera användarkonton när inställningarna är klara.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Om mer än en person skall använda datorn så kan du skapa flera användarkonton när installationen är klar.</small> + + + UsersQmlViewStep - - Your username is too long. - Ditt användarnamn är för långt. - - - - Your username must start with a lowercase letter or underscore. - Ditt användarnamn måste börja med en liten bokstav eller ett understreck. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Endast små bokstäver, nummer, understreck och bindestreck är tillåtet. - - - - Only letters, numbers, underscore and hyphen are allowed. - Endast bokstäver, nummer, understreck och bindestreck är tillåtet. - - - - Your hostname is too short. - Ditt värdnamn är för kort. - - - - Your hostname is too long. - Ditt värdnamn är för långt. - - - - Your passwords do not match! - Lösenorden överensstämmer inte! + + Users + Användare UsersViewStep - + Users Användare @@ -3506,172 +3906,174 @@ Utdata: VariantModel - + Key + Column header for key/value Nyckel - + Value + Column header for key/value Värde VolumeGroupBaseDialog - + Create Volume Group Skapa volymgrupp - + List of Physical Volumes Lista på fysiska volymer - + Volume Group Name: Volymgrupp namn: - + Volume Group Type: Volymgrupp typ: - + Physical Extent Size: - + Storlek på fysisk volymdel (PE): - + MiB MiB - + Total Size: Total storlek: - + Used Size: Använd storlek: - + Total Sectors: Totala sektorer: - + Quantity of LVs: - + Antal LV: WelcomePage - + Form Formulär - - + + Select application and system language Välj program och system språk + &About + &Om + + + Open donations website Besök webbplatsen för donationer - + &Donate &Donera - + Open help and support website Besök webbplatsen för hjälp och support + &Support + &Support + + + Open issues and bug-tracking website Besök webbplatsen för problem och felsökning - Open release notes website - Besök webbplatsen för versionsinformation - - - - &Release notes - Versionsinformation, &R - - - &Known issues &Kända problem - - &Support - &Support + + Open release notes website + Besök webbplatsen för versionsinformation - - &About - Om, &A + + &Release notes + Versionsinformation, &R - - <h1>Welcome to the %1 installer.</h1> - <h1>Välkommen till %1-installeraren.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Välkommen till installationsprogrammet Calamares för %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Välkommen till Calamares installationsprogrammet för %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Välkommen till %1 installation.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Välkommen till installationsprogrammet Calamares för %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Välkommen till %1-installeraren.</h1> + + + + %1 support + %1-support + + + About %1 setup Om inställningarna för %1 - + About %1 installer Om %1-installationsprogrammet - + <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. - - - - - %1 support - %1-support + <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/>Tack till <a href="https://calamares.io/team/">Calamares-teamet</a> och <a href="https://www.transifex.com/calamares/calamares/">Calamares översättar-team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> utveckling sponsras av <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. WelcomeQmlViewStep - + Welcome Välkommen @@ -3679,31 +4081,173 @@ Utdata: WelcomeViewStep - + Welcome Välkommen + + ZfsJob + + + Create ZFS pools and datasets + Skapa ZFS pools och datasets + + + + Failed to create zpool on + Misslyckades att skapa zpool på + + + + Configuration Error + Konfigurationsfel + + + + No partitions are available for ZFS. + Inga partitioner är tillgängliga för ZFS. + + + + Internal data missing + Intern data saknas + + + + + Failed to create zpool + Misslyckades med att skapa zpool + + + + Failed to create dataset + Misslyckades med att skapa dataset + + + + The output was: + Utdatan var: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%2<br/> + för %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/> + Tack till <a href='https://calamares.io/team/'>Calamares-teamet</a> + och <a href='https://www.transifex.com/calamares/calamares/'>Calamares + översättar-team</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + utveckling sponsras av <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a>- + Liberating Software. - + + Back + Bakåt + + + + calamares-sidebar + + + Show debug information + Visa avlusningsinformation + + + + finishedq + + + Installation Completed + Installationen är klar + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 har installerats på din dator. <br/> + Du kan nu starta om i ditt nya system eller fortsätta använda Live-miljön. + + + + Close Installer + Stäng installationsprogrammet + + + + Restart System + Starta om System + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>En fullständig logg över installationen är tillgänglig som installation.log i hemkatalogen av Live användaren.<br/> + Denna logg är kopierad till /var/log/installation.log på målsystemet.</p> + + + + finishedq@mobile + + + Installation Completed + Installationen är klar + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 har nu installerats på din dator.<br/> + Du kan nu starta om din enhet. + + + + Close + Stäng + + + + Restart + Starta om + + + + i18n + + + <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>. + <h1>Språk</h1> </br> +Systemspråket påverkar vilket språk och teckenuppsättning somliga kommandoradsprogram använder. Den nuvarande inställningen är <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Nationella inställningar</h1> </br> +Systems nationella inställningar påverkar nummer och datumformat. Den nuvarande inställningen är <strong>%3</strong>. + + + Back Bakåt @@ -3711,52 +4255,43 @@ Utdata: keyboardq - - Keyboard Model - Tangentbordsmodell + + To activate keyboard preview, select a layout. + Välj en layout för att aktivera förhandsgranskning av tangentbord. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Tangentbordsmodell: - - Refresh - - - - - + Layouts Layouter - - - Keyboard Layout - Tangentbordslayout + + Type here to test your keyboard + Skriv här för att testa ditt tangentbord - - Models - Modeller - - - + Variants Varianter + + + localeq - - Test your keyboard - Testa ditt tangentbord + + Change + Ändra notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3764,34 +4299,262 @@ Utdata: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice är ett kraftfull och gratis Office paket, som används av miljontals människor runt om i världen. Det innehåller flera program som gör det till de mest mångsidiga Office paketet som är gratis och öppen källkod på marknaden.<br/> + Standard alternativ. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Om du inte vill installera ett office paket, bara välj Inget Office paket. Du kan alltid lägga till ett (eller mer) senare på ditt installerade system om behovet uppstår. + + + + No Office Suite + Inget Office paket + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Skapa en minimal skrivbordsinstallation, ta bort alla extra program och välj senare på vad du vill lägga till i ditt system. Exempel på vad som inte kommer att finnas på en sådan installation, det kommer inte att finnas något Office paket, inga mediaspelare, ingen bildvisare eller utskriftsstöd. Det kommer bara att finnas en skrivbordsmiljö, filbläddrare, pakethanterare, textredigerare och enkel webbläsare. + + + + Minimal Install + Minimal installation + + + + Please select an option for your install, or use the default: LibreOffice included. + Välj ett alternativ för din installation, eller använd standard: LibreOffice ingår. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Detta är en exempelfil för QML, som visar inställningar för RichText och innehåll som är Flickable.</p> + + <p>QML med RichText kan använda HTML-taggar. Innehåll som är Flickable är användbart på pekskärmar.</p> + + <p><b>Detta är fet text</b></p> + <p><i>Detta är kursiv text</i></p> + <p>Detta är understruken text</p> + <p><center>Denna text är centrerad.</center></p> + <p><s>Detta är överstruket</s></p> + + <p>Kodexample: + <code>ls -l /home</code></p> + + <p><b>Listor:</b></p> + <ul> + <li>System med Intel-processor</li> + <li>System med AMD-processor</li> + </ul> + + <p>Den vertikala rullningslisten är justerbar, nuvarande bredd är satt till 10.</p> + + + + Back + Bakåt + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Välj ditt användarnamn och inloggningsuppgifter för att logga in och utföra admin-uppgifter + + + + What is your name? + Vad heter du? + + + + Your Full Name + Ditt Fullständiga namn + + + + What name do you want to use to log in? + Vilket namn vill du använda för att logga in? + + + + Login Name + Inloggningsnamn + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Om mer än en person skall använda datorn så kan du skapa flera användarkonton efter installationen. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Endast små bokstäver, nummer, understreck och bindestreck är tillåtet. + + + + root is not allowed as username. + root är inte tillåtet som användarnamn. + + + + What is the name of this computer? + Vad är namnet på datorn? + + + + Computer Name + Datornamn + + + + This name will be used if you make the computer visible to others on a network. + Detta namn kommer användas om du gör datorn synlig för andra i ett nätverk. + + + + localhost is not allowed as hostname. + localhost är inte tillåtet som värdnamn. + + + + Choose a password to keep your account safe. + Välj ett lösenord för att hålla ditt konto säkert. + + + + Password + Lösenord + + + + Repeat Password + Repetera Lösenord + + + + 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. + Ange samma lösenord två gånger, så att det kan kontrolleras för stavfel. Ett bra lösenord innehåller en blandning av bokstäver, nummer och interpunktion, bör vara minst åtta tecken långt, och bör ändras regelbundet. + + + + Validate passwords quality + Validera lösenords kvalite + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + När den här rutan är förkryssad kommer kontroll av lösenordsstyrka att genomföras, och du kommer inte kunna använda ett svagt lösenord. + + + + Log in automatically without asking for the password + Logga in automatiskt utan att fråga efter ett lösenord. + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Endast bokstäver, nummer, understreck och bindestreck är tillåtet, minst två tecken. + + + + Reuse user password as root password + Återanvänd användarlösenord som root lösenord + + + + Use the same password for the administrator account. + Använd samma lösenord för administratörskontot. + + + + Choose a root password to keep your account safe. + Välj ett root lösenord för att hålla ditt konto säkert. + + + + Root Password + Root Lösenord + + + + Repeat Root Password + Repetera Root Lösenord + + + + Enter the same password twice, so that it can be checked for typing errors. + Ange samma lösenord två gånger, så att det kan kontrolleras för stavfel. + + + + welcomeq + + + <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> + <h3>Välkommen till %2 installationsprogram för <quote>%1</quote></h3> + <p>Detta program kommer ställa några frågor och installera %1 på din dator.</p> + + + About Om - + Support Support - + Known issues Kända problem - + Release notes Versionsinformation - + Donate Donera diff --git a/lang/calamares_ta_IN.ts b/lang/calamares_ta_IN.ts new file mode 100644 index 000000000..a0a84ebfb --- /dev/null +++ b/lang/calamares_ta_IN.ts @@ -0,0 +1,4509 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + + + + + 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. + + + + + 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. + + + + + BootLoaderModel + + + Master Boot Record of %1 + + + + + Boot Partition + இயக்கப் பகுதிப்பிரிப்பு + + + + System Partition + + + + + Do not install a boot loader + + + + + %1 (%2) + + + + + Calamares::BlankViewStep + + + Blank Page + + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + + + + + Type: + + + + + + none + + + + + Interface: + + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + + + + + Debug information + + + + + Calamares::ExecutionViewStep + + + Set up + + + + + Install + + + + + Calamares::FailJob + + + Job failed (%1) + + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + (%n second(s)) + + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + + + + + Installation Failed + + + + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + + + + + Continue with installation? + + + + + 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> + + + + + 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> + + + + + &Set up now + + + + + &Install now + + + + + Go &back + + + + + &Set up + + + + + &Install + + + + + Setup is complete. Close the setup program. + + + + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + + Cancel setup? + + + + + Cancel installation? + + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Setup Program + + + + + %1 Installer + + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + + + + + Select storage de&vice: + + + + + + + + Current: + + + + + After: + + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + 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. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + + + + + Si&ze: + + + + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + 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. + + + + + 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. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <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. + + + + + 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. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + + + + + %1 - (%2) + device[name] - (device-node[name]) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Con&tent: + + + + + &Keep + + + + + Format + + + + + Warning: Formatting the partition will erase all existing data. + + + + + &Mount Point: + + + + + Si&ze: + + + + + MiB + + + + + Fi&le System: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + &Restart now + + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + + + + + FinishedViewStep + + + Finish + + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + + + + + KeyboardQmlViewStep + + + Keyboard + + + + + KeyboardViewStep + + + Keyboard + + + + + LCLocaleDialog + + + System locale setting + + + + + 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>. + + + + + &Cancel + + + + + &OK + + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + + + + + <h1>License Agreement</h1> + + + + + I accept the terms and conditions above. + + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + + + + + LicenseWidget + + + URL: %1 + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + + + + + Zone: + + + + + + &Change... + + + + + LocaleQmlViewStep + + + Location + + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + + + + + 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. + + + + + NetInstallViewStep + + + Package selection + + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + + + + + Services + + + + + Login + + + + + Desktop + + + + + Applications + + + + + Communication + + + + + Development + + + + + Office + + + + + Multimedia + + + + + Internet + + + + + Theming + + + + + Gaming + + + + + Utilities + + + + + NotesQmlViewStep + + + Notes + + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Password is empty + + + + + PackageChooserPage + + + Form + + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + + + + + PackageChooserViewStep + + + Packages + + + + + PackageModel + + + Name + + + + + Description + + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + + + + + Type here to test your keyboard + + + + + Page_UserSetup + + + Form + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + login + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + + + + + Choose a password to keep your account safe. + + + + + + <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> + + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + + + + + Boot + + + + + EFI system + + + + + Swap + + + + + New partition for %1 + + + + + New partition + + + + + %1 %2 + size[number] filesystem[name] + + + + + PartitionModel + + + + Free Space + + + + + + New partition + + + + + Name + + + + + File System + + + + + File System Label + + + + + Mount Point + + + + + Size + + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + + + + + After: + + + + + No EFI system partition configured + + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + + + + + unknown + + + + + extended + + + + + unformatted + + + + + swap + + + + + + Default + + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <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. + + + + + + + <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. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + StandardButtons + + + &OK + + + + + &Yes + + + + + &No + + + + + &Cancel + + + + + &Close + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + + + + + UsersViewStep + + + Users + + + + + VariantModel + + + Key + Column header for key/value + + + + + Value + Column header for key/value + + + + + VolumeGroupBaseDialog + + + Create Volume Group + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + + Select application and system language + + + + + &About + + + + + Open donations website + + + + + &Donate + + + + + Open help and support website + + + + + &Support + + + + + Open issues and bug-tracking website + + + + + &Known issues + + + + + Open release notes website + + + + + &Release notes + + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + + + + + <h1>Welcome to %1 setup.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + + About %1 setup + + + + + About %1 installer + + + + + <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. + + + + + WelcomeQmlViewStep + + + Welcome + + + + + WelcomeViewStep + + + Welcome + + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + + + + + Layouts + + + + + Type here to test your keyboard + + + + + Variants + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + + + + + Support + + + + + Known issues + + + + + Release notes + + + + + Donate + + + + diff --git a/lang/calamares_te.ts b/lang/calamares_te.ts new file mode 100644 index 000000000..f50d09bbc --- /dev/null +++ b/lang/calamares_te.ts @@ -0,0 +1,4511 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + + + + + BootInfoWidget + + + 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. + ఈ సిస్టమ్ యొక్క బూట్ ఎన్విరాన్మెంట్. పాత x86 సిస్టమ్ BIOS కి మాత్రమే మద్దతు ఇస్తుంది. ఆధునిక వ్యవస్థలు సాధారణంగా EFI ని ఉపయోగిస్తాయి, కాని compatibility మోడ్‌లో ప్రారంభిస్తే BIOS గా కూడా కనిపిస్తాయి. + + + + 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. + ఈ సిస్టమ్ EFI బూట్ ఎన్విరాన్మెంట్‌తో ప్రారంభించబడింది. EFI ఎన్విరాన్మెంట్ నుండి స్టార్టప్‌ను కాన్ఫిగర్ చేయడానికి, ఈ ఇన్‌స్టాలర్ తప్పనిసరిగా EFI సిస్టమ్ విభజనలో GRUB లేదా systemd-boot వంటి బూట్ లోడర్ అప్లికేషన్‌ను అమర్చాలి. ఇది +automatic ఉంటుంది, మీరు మాన్యువల్ విభజనను ఎంచుకుంటే తప్ప, ఈ సందర్భంలో మీరు దీన్ని ఎంచుకోవాలి లేదా మీ స్వంతంగా సృష్టించాలి. + + + + 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. + ఈ సిస్టమ్ BIOS బూట్ environment తో ప్రారంభించబడింది. BIOS environment నుండి ప్రారంభాన్ని కాన్ఫిగర్ చేయడానికి, ఈ ఇన్స్టాలర్ GRUB వంటి బూట్ లోడర్‌ను ఒక విభజన ప్రారంభంలో లేదా విభజన పట్టిక ప్రారంభంలో మాస్టర్ బూట్ రికార్డ్‌లో ఇన్‌స్టాల్ చేయాలి ( ప్రాధాన్యత ఇవ్వబడింది). ఇది స్వయంచాలకంగా ఉంటుంది, మీరు మాన్యువల్ విభజనను ఎంచుకుంటే తప్ప, ఈ సందర్భంలో మీరు దీన్ని మీ స్వంతంగా సెటప్ చేయాలి + + + + BootLoaderModel + + + Master Boot Record of %1 + %1 యొక్క మాస్టర్ బూట్ రికార్డ్ + + + + Boot Partition + బూట్ పార్టిషన్ + + + + System Partition + సిస్టమ్ పార్టిషన్ + + + + Do not install a boot loader + బూట్ లోడర్‌ను ఇన్‌స్టాల్ చేయవద్దు + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + ఖాళీ పేజీ + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + గ్లోబల్ స్టోరేజ్ +  + + + + JobQueue + జాబ్ క్యూ + + + + Modules + మోడ్యూల్స్ + + + + Type: + టైప్: + + + + + none + + + + + Interface: + ఇంటర్ఫేస్ + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + రీలోడ్ స్టైల్షీట్ + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + విడ్జెట్ ట్రీ + + + + Debug information + డీబగ్ సమాచారం + + + + Calamares::ExecutionViewStep + + + Set up + సెట్ అప్ + + + + Install + ఇన్‌స్టాల్ + + + + Calamares::FailJob + + + Job failed (%1) + జాబ్ విఫలమైంది (%1) + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + ముగించు + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + + (%n second(s)) + + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + + + + + Installation Failed + + + + + Error + లోపం + + + + &Yes + + + + + &No + + + + + &Close + + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + + + + + Continue with installation? + + + + + 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> + + + + + 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> + + + + + &Set up now + + + + + &Install now + + + + + Go &back + + + + + &Set up + + + + + &Install + + + + + Setup is complete. Close the setup program. + + + + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + + Cancel setup? + + + + + Cancel installation? + + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Setup Program + + + + + %1 Installer + + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + + + + + Select storage de&vice: + + + + + + + + Current: + + + + + After: + + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + 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. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + + + + + Si&ze: + + + + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + 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. + + + + + 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. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <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. + + + + + 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. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + + + + + %1 - (%2) + device[name] - (device-node[name]) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Con&tent: + + + + + &Keep + + + + + Format + తుడిచివేయు + + + + Warning: Formatting the partition will erase all existing data. + హెచ్చరిక : తుడిచివేయటం వలన ఈ విభజనలోని సమాచారం మొత్తం పోతుంది + + + + &Mount Point: + + + + + Si&ze: + + + + + MiB + + + + + Fi&le System: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + విభజన సమాచారం ఏర్పాటు + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + &Restart now + + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + + + + + FinishedViewStep + + + Finish + + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + + + + + KeyboardQmlViewStep + + + Keyboard + + + + + KeyboardViewStep + + + Keyboard + + + + + LCLocaleDialog + + + System locale setting + + + + + 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>. + + + + + &Cancel + + + + + &OK + + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + + + + + <h1>License Agreement</h1> + + + + + I accept the terms and conditions above. + + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + + + + + LicenseWidget + + + URL: %1 + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + + + + + Zone: + + + + + + &Change... + + + + + LocaleQmlViewStep + + + Location + + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + + + + + 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. + + + + + NetInstallViewStep + + + Package selection + + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + + + + + Services + + + + + Login + + + + + Desktop + + + + + Applications + + + + + Communication + + + + + Development + + + + + Office + + + + + Multimedia + + + + + Internet + + + + + Theming + + + + + Gaming + + + + + Utilities + + + + + NotesQmlViewStep + + + Notes + + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Password is empty + + + + + PackageChooserPage + + + Form + + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + + + + + PackageChooserViewStep + + + Packages + + + + + PackageModel + + + Name + + + + + Description + + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + + + + + Type here to test your keyboard + + + + + Page_UserSetup + + + Form + + + + + What is your name? + మీ పేరు ఏమిటి ? + + + + Your Full Name + + + + + What name do you want to use to log in? + ప్రవేశించడానికి ఈ పేరుని ఉపయోగిస్తారు + + + + login + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + + + + + Choose a password to keep your account safe. + మీ ఖాతా ను భద్రపరుచుకోవడానికి ఒక మంత్రమును ఎంచుకోండి + + + + + <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> + అదే మంత్రిని మళ్ళీ ఇక్కడ ఇవ్వండి, దానివలన మీరు పైన ఇచ్చిన దాంట్లో ఏమి అయినా దోషములు ఉంటే సరిదిద్దుకోవచ్చు. ఒక మంచి మంత్రంలో, ఒక అక్షరము, ఒక సంఖ్యా, ఒక విరామచిహ్నం, ఉండాలి. అది కనీసం ఎనిమిది అక్షరాలా పొడవు ఉండాలి. దీనిని కొన్ని వారాలు కానీ నెలలకు కానీ మార్చాలి. + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + + + + + Boot + + + + + EFI system + + + + + Swap + + + + + New partition for %1 + + + + + New partition + + + + + %1 %2 + size[number] filesystem[name] + + + + + PartitionModel + + + + Free Space + + + + + + New partition + + + + + Name + + + + + File System + + + + + File System Label + + + + + Mount Point + + + + + Size + + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + + + + + After: + + + + + No EFI system partition configured + + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + + + + + extended + + + + + unformatted + + + + + swap + + + + + + Default + + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <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. + + + + + + + <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. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + StandardButtons + + + &OK + + + + + &Yes + + + + + &No + + + + + &Cancel + + + + + &Close + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + + + + + UsersViewStep + + + Users + + + + + VariantModel + + + Key + Column header for key/value + + + + + Value + Column header for key/value + + + + + VolumeGroupBaseDialog + + + Create Volume Group + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + + Select application and system language + + + + + &About + + + + + Open donations website + + + + + &Donate + + + + + Open help and support website + + + + + &Support + + + + + Open issues and bug-tracking website + + + + + &Known issues + + + + + Open release notes website + + + + + &Release notes + + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + + + + + <h1>Welcome to %1 setup.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + + About %1 setup + + + + + About %1 installer + + + + + <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. + + + + + WelcomeQmlViewStep + + + Welcome + + + + + WelcomeViewStep + + + Welcome + + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + + + + + Layouts + + + + + Type here to test your keyboard + + + + + Variants + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + మీ పేరు ఏమిటి ? + + + + Your Full Name + + + + + What name do you want to use to log in? + ప్రవేశించడానికి ఈ పేరుని ఉపయోగిస్తారు + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + మీ ఖాతా ను భద్రపరుచుకోవడానికి ఒక మంత్రమును ఎంచుకోండి + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + + + + + Support + + + + + Known issues + + + + + Release notes + + + + + Donate + + + + diff --git a/lang/calamares_tg.ts b/lang/calamares_tg.ts new file mode 100644 index 000000000..6f3a223e8 --- /dev/null +++ b/lang/calamares_tg.ts @@ -0,0 +1,4554 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + Идора кардани танзимоти васлкунии худкор + + + + BootInfoWidget + + + 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. + <strong>Муҳити роҳандозӣ</strong> барои низоми ҷорӣ.<br><br>Низомҳои x86-и куҳна танҳо <strong>BIOS</strong>-ро дастгирӣ менамоянд.<br>Низомҳои муосир одатан <strong>EFI</strong>-ро истифода мебаранд, аммо инчунин метавонанд ҳамчун BIOS намоиш дода шаванд, агар дар реҷаи мувофиқсозӣ оғоз шаванд. + + + + 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. + Низоми ҷорӣ бо муҳити роҳандозии <strong>EFI</strong> оғоз ёфт.<br><br>Барои танзими оғози кор аз муҳити EFI насбкунандаи ҷорӣ бояд барномаи боркунандаи роҳандозиро монанди <strong>GRUB</strong> ё <strong>systemd-boot</strong> дар <strong>Қисми диски низомии EFI</strong> ба кор дарорад. Ин амал бояд ба таври худкор иҷро шавад, агар шумо барои қисмбандии диск тарзи дастиро интихоб накунед. Дар ин маврид шумо бояд онро мустақилона интихоб ё эҷод кунед. + + + + 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. + Низоми ҷорӣ бо муҳити роҳандозии <strong>BIOS</strong> оғоз ёфт.<br><br>Барои танзими оғози кор аз муҳити BIOS насбкунандаи ҷорӣ бояд боркунандаи роҳандозиро монанди <strong>GRUB</strong> дар аввали қисми диск ё дар <strong>Сабти роҳандозии асосӣ</strong> назди аввали ҷадвали қисми диск (тарзи пазируфта) насб намояд. Ин амал бояд ба таври худкор иҷро шавад, агар шумо барои қисмбандии диск тарзи дастиро интихоб накунед. Дар ин маврид шумо бояд онро мустақилона интихоб ё эҷод кунед. + + + + BootLoaderModel + + + Master Boot Record of %1 + Сабти роҳандозии асосӣ барои %1 + + + + Boot Partition + Қисми диски роҳандозӣ + + + + System Partition + Қисми диски низомӣ + + + + Do not install a boot loader + Боркунандаи роҳандозӣ насб карда нашавад + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Саҳифаи холӣ + + + + Calamares::DebugWindow + + + Form + Шакл + + + + GlobalStorage + Захирагоҳи умумӣ + + + + JobQueue + Навбати вазифа + + + + Modules + Модулҳо + + + + Type: + Навъ: + + + + + none + ҳеҷ чиз + + + + Interface: + Интерфейс: + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + Аз нав бор кардани варақаи услубҳо + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + Дарахти виҷетҳо + + + + Debug information + Иттилооти ислоҳи нуқсонҳо + + + + Calamares::ExecutionViewStep + + + Set up + Танзимкунӣ + + + + Install + Насбкунӣ + + + + Calamares::FailJob + + + Job failed (%1) + Вазифа иҷро нашуд (%1) + + + + Programmed job failure was explicitly requested. + Қатъшавии вазифаи барномавӣ ботафсил дархост карда шуд. + + + + Calamares::JobThread + + + Done + Анҷоми кор + + + + Calamares::NamedJob + + + Example job (%1) + Вазифаи намунавӣ (%1) + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + Иҷро кардани фармони '%1' дар низоми интихобшуда. + + + + Run command '%1'. + Иҷро кардани фармони '%1'. + + + + Running command %1 %2 + Иҷрокунии фармони %1 %2 + + + + Calamares::PythonJob + + + Running %1 operation. + Иҷрокунии амалиёти %1. + + + + Bad working directory path + Масири феҳристи корӣ нодуруст аст + + + + Working directory %1 for python job %2 is not readable. + Феҳристи кории %1 барои вазифаи "python"-и %2 хонда намешавад. + + + + Bad main script file + Файли нақши асосӣ нодуруст аст + + + + Main script file %1 for python job %2 is not readable. + Файли нақши асосии %1 барои вазифаи "python"-и %2 хонда намешавад. + + + + Boost.Python error in job "%1". + Хатои "Boost.Python" дар вазифаи "%1". + + + + Calamares::QmlViewStep + + + Loading ... + Бор шуда истодааст... + + + + QML Step <i>%1</i>. + Қадами QML <i>%1</i>. + + + + Loading failed. + Боршавӣ қатъ шуд. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Санҷиши талабот барои модули <i>%1</i> ба анҷом расид. + + + + Waiting for %n module(s). + + Дар ҳоли интизори %n модул. + Дар ҳоли интизори %n модул. + + + + + (%n second(s)) + + (%n сония) + (%n сония) + + + + + System-requirements checking is complete. + Санҷиши талаботи низомӣ ба анҷом расид. + + + + Calamares::ViewManager + + + Setup Failed + Танзимкунӣ қатъ шуд + + + + Installation Failed + Насбкунӣ қатъ шуд + + + + Error + Хато + + + + &Yes + &Ҳа + + + + &No + &Не + + + + &Close + &Пӯшидан + + + + Install Log Paste URL + Гузоштани нишонии URL-и сабти рӯйдодҳои насб + + + + The upload was unsuccessful. No web-paste was done. + Боркунӣ иҷро нашуд. Гузариш ба шабака иҷро нашуд. + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + Омодашавии Calamares қатъ шуд + + + + %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. + %1 насб карда намешавад. Calamares ҳамаи модулҳои танзимкардашударо бор карда натавонист. Ин мушкилие мебошад, ки бо ҳамин роҳ Calamares дар дистрибутиви ҷорӣ кор мекунад. + + + + <br/>The following modules could not be loaded: + <br/>Модулҳои зерин бор карда намешаванд: + + + + Continue with setup? + Танзимкуниро идома медиҳед? + + + + Continue with installation? + Насбкуниро идома медиҳед? + + + + 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> + Барномаи танзимкунии %1 барои танзим кардани %2 ба диски компютери шумо тағйиротро ворид мекунад.<br/><strong>Шумо ин тағйиротро ботил карда наметавонед.</strong> + + + + 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> + Насбкунандаи %1 барои насб кардани %2 ба диски компютери шумо тағйиротро ворид мекунад.<br/><strong>Шумо ин тағйиротро ботил карда наметавонед.</strong> + + + + &Set up now + &Ҳозир танзим карда шавад + + + + &Install now + &Ҳозир насб карда шавад + + + + Go &back + &Бозгашт + + + + &Set up + &Танзим кардан + + + + &Install + &Насб кардан + + + + Setup is complete. Close the setup program. + Танзим ба анҷом расид. Барномаи танзимкуниро пӯшед. + + + + The installation is complete. Close the installer. + Насб ба анҷом расид. Барномаи насбкуниро пӯшед. + + + + Cancel setup without changing the system. + Бекор кардани танзимкунӣ бе тағйирдиҳии низом. + + + + Cancel installation without changing the system. + Бекор кардани насбкунӣ бе тағйирдиҳии низом. + + + + &Next + &Навбатӣ + + + + &Back + &Ба қафо + + + + &Done + &Анҷоми кор + + + + &Cancel + &Бекор кардан + + + + Cancel setup? + Танзимкуниро бекор мекунед? + + + + Cancel installation? + Насбкуниро бекор мекунед? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + Шумо дар ҳақиқат мехоҳед, ки раванди танзимкунии ҷориро бекор намоед? +Барномаи танзимкунӣ хомӯш карда мешавад ва ҳамаи тағйирот гум карда мешаванд. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + Шумо дар ҳақиқат мехоҳед, ки раванди насбкунии ҷориро бекор намоед? +Насбкунанда хомӯш карда мешавад ва ҳамаи тағйирот гум карда мешаванд. + + + + CalamaresPython::Helper + + + Unknown exception type + Навъи истисноии номаълум + + + + unparseable Python error + Хатои таҳлилнашавандаи Python + + + + unparseable Python traceback + Барориши таҳлилнашавандаи Python + + + + Unfetchable Python error. + Хатои кашиданашавандаи Python. + + + + CalamaresWindow + + + %1 Setup Program + Барномаи танзимкунии %1 + + + + %1 Installer + Насбкунандаи %1 + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + Ҷамъкунии иттилооти низомӣ... + + + + ChoicePage + + + Form + Шакл + + + + Select storage de&vice: + Интихоби дастгоҳи &захирагоҳ: + + + + + + + Current: + Танзимоти ҷорӣ: + + + + After: + Баъд аз тағйир: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Қисмбандии диск ба таври дастӣ</strong><br/>Шумо худатон метавонед қисмҳои дискро эҷод кунед ё андозаи онҳоро иваз намоед. + + + + Reuse %1 as home partition for %2. + Дубора истифода бурдани %1 ҳамчун диски асосӣ барои %2. + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <strong>Қисми дискеро, ки мехоҳед хурдтар кунед, интихоб намоед, пас лавҳаи поёнро барои ивази андоза кашед</strong> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 то андозаи %2MiB хурдтар мешавад ва қисми диски нав бо андозаи %3MiB барои %4 эҷод карда мешавад. + + + + Boot loader location: + Ҷойгиршавии боркунандаи роҳандозӣ: + + + + <strong>Select a partition to install on</strong> + <strong>Қисми дискеро барои насб интихоб намоед</strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + Қисми диски низомии EFI дар дохили низоми ҷорӣ ёфт нашуд. Лутфан, ба қафо гузаред ва барои танзим кардани %1 аз имкони қисмбандии диск ба таври дастӣ истифода баред. + + + + The EFI system partition at %1 will be used for starting %2. + Қисми диски низомии EFI дар %1 барои оғоз кардани %2 истифода бурда мешавад. + + + + EFI system partition: + Қисми диски низомии: + + + + 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. + Чунин менамояд, ки ин захирагоҳ низоми амалкунандаро дар бар намегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <strong>Пок кардани диск</strong><br/>Ин амал ҳамаи иттилооти ҷориро дар дастгоҳи захирагоҳи интихобшуда <font color="red">нест мекунад</font>. + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <strong>Насбкунии паҳлуӣ</strong><br/>Насбкунанда барои %1 фазоро омода карда, қисми дискеро хурдтар мекунад. + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong>Ивазкунии қисми диск</strong><br/>Қисми дисекро бо %1 иваз мекунад. + + + + 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. + Ин захирагоҳ %1-ро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. + + + + 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. + Ин захирагоҳ аллакай низоми амалкунандаро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. + + + + 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. + Ин захирагоҳ якчанд низоми амалкунандаро дар бар мегирад. Шумо чӣ кор кардан мехоҳед?<br/>Шумо метавонед пеш аз татбиқ кардани тағйирот ба дастгоҳи захирагоҳ интихоби худро аз назар гузаронед ва тасдиқ кунед. + + + + 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/> + Ин дастгоҳи захирагоҳ аллакай дорои низоми амалкунанда мебошад, аммо ҷадвали қисми диски <strong>%1</strong> аз диски лозимии <strong>%2</strong> фарқ мекунад.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Яке аз қисмҳои диски ин дастгоҳи захирагоҳ <strong>васлшуда</strong> мебошад. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Ин дастгоҳи захирагоҳ қисми дасгоҳи <strong>RAID-и ғайрифаъол</strong> мебошад. + + + + No Swap + Бе мубодила + + + + Reuse Swap + Истифодаи муҷаддади мубодила + + + + Swap (no Hibernate) + Мубодила (бе реҷаи Нигаҳдорӣ) + + + + Swap (with Hibernate) + Мубодила (бо реҷаи Нигаҳдорӣ) + + + + Swap to file + Мубодила ба файл + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + Пок кардани васлҳо барои амалиётҳои қисмбандӣ дар %1 + + + + Clearing mounts for partitioning operations on %1. + Поксозии васлҳо барои амалиётҳои қисмбандӣ дар %1 + + + + Cleared all mounts for %1 + Ҳамаи васлҳо барои %1 пок карда шуданд. + + + + ClearTempMountsJob + + + Clear all temporary mounts. + Пок кардани ҳамаи васлҳои муваққатӣ. + + + + Clearing all temporary mounts. + Поксозии ҳамаи васлҳои муваққатӣ. + + + + Cleared all temporary mounts. + Ҳамаи васлҳои муваққатӣ пок карда шуданд. + + + + CommandList + + + + Could not run command. + Фармон иҷро карда нашуд. + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + Фармон дар муҳити мизбон иҷро мешавад ва бояд масири реша (root)-ро донад, аммо масири rootMountPoint муайян нашудааст. + + + + The command needs to know the user's name, but no username is defined. + Фармон бояд номи корбари шуморо донад, аммо номи корбар муайян нашудааст. + + + + Config + + + Set keyboard model to %1.<br/> + Намунаи клавиатура ба %1 танзим карда мешавад.<br/> + + + + Set keyboard layout to %1/%2. + Тарҳбандии клавиатура ба %1 %1/%2 танзим карда мешавад. + + + + Set timezone to %1/%2. + Минтақаи вақт ба %1/%2 танзим карда мешавад. + + + + The system language will be set to %1. + Забони низом ба %1 танзим карда мешавад. + + + + The numbers and dates locale will be set to %1. + Низоми рақамҳо ва санаҳо ба %1 танзим карда мешавад. + + + + Network Installation. (Disabled: Incorrect configuration) + Насбкунии шабака. (Ғайрифаъол: Танзимоти нодуруст) + + + + Network Installation. (Disabled: Received invalid groups data) + Насбкунии шабака. (Ғайрифаъол: Иттилооти гурӯҳии нодуруст қабул шуд) + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Интихоби бастаҳо + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + Насбкунии шабака. (Ғайрифаъол: Рӯйхати қуттиҳо гирифта намешавад. Пайвасти шабакаро тафтиш кунед) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Ин компютер ба талаботи камтарин барои танзимкунии %1 ҷавобгӯ намебошад.<br/>Танзимот идома дода намешавад. <a href="#details">Тафсилот...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Ин компютер ба талаботи камтарин барои насбкунии %1 ҷавобгӯ намебошад.<br/>Насбкунӣ идома дода намешавад. <a href="#details">Тафсилот...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Ин компютер ба баъзеи талаботи тавсияшуда барои танзимкунии %1 ҷавобгӯ намебошад.<br/>Танзимот идома дода мешавад, аммо баъзеи хусусиятҳо ғайрифаъол карда мешаванд. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Ин компютер ба баъзеи талаботи тавсияшуда барои насбкунии %1 ҷавобгӯ намебошад.<br/>Насбкунӣ идома дода мешавад, аммо баъзеи хусусиятҳо ғайрифаъол карда мешаванд. + + + + This program will ask you some questions and set up %2 on your computer. + Ин барнома аз Шумо якчанд савол мепурсад ва %2-ро дар компютери шумо танзим мекунад. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Хуш омадед ба барномаи танзимкунии Calamares барои %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Хуш омадед ба танзимкунии %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Хуш омадед ба насбкунандаи Calamares барои %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Хуш омадед ба насбкунандаи %1</h1> + + + + Your username is too long. + Номи корбари шумо хеле дароз аст. + + + + '%1' is not allowed as username. + '%1' ҳамчун номи корбар истифода намешавад. + + + + Your username must start with a lowercase letter or underscore. + Номи корбари шумо бояд бо ҳарфи хурд ё зерхат сар шавад. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Шумо метавонед танҳо ҳарфҳои хурд, рақамҳо, зерхат ва нимтиреро истифода баред. + + + + Your hostname is too short. + Номи мизбони шумо хеле кӯтоҳ аст. + + + + Your hostname is too long. + Номи мизбони шумо хеле дароз аст. + + + + '%1' is not allowed as hostname. + '%1' ҳамчун номи мизбон истифода намешавад. + + + + Only letters, numbers, underscore and hyphen are allowed. + Шумо метавонед танҳо ҳарфҳо, рақамҳо, зерхат ва нимтиреро истифода баред. + + + + Your passwords do not match! + Ниҳонвожаҳои шумо мувофиқат намекунанд! + + + + OK! + + + + + Setup Failed + Танзимкунӣ қатъ шуд + + + + Installation Failed + Насбкунӣ қатъ шуд + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Анҷоми танзимкунӣ + + + + Installation Complete + Насбкунӣ ба анҷом расид + + + + The setup of %1 is complete. + Танзимкунии %1 ба анҷом расид. + + + + The installation of %1 is complete. + Насбкунии %1 ба анҷом расид. + + + + Package Selection + Интихоби бастаҳо + + + + Please pick a product from the list. The selected product will be installed. + Лутфан, маҳсулеро аз рӯйхат интихоб намоед. Маҳсули интихобшуда насб карда мешавад. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Ҷамъбаст + + + + This is an overview of what will happen once you start the setup procedure. + Дар ин ҷамъбаст шумо мебинед, ки чӣ мешавад пас аз он ки шумо раванди танзимкуниро оғоз мекунед. + + + + This is an overview of what will happen once you start the install procedure. + Дар ин ҷамъбаст шумо мебинед, ки чӣ мешавад пас аз он ки шумо раванди насбкуниро оғоз мекунед. + + + + ContextualProcessJob + + + Contextual Processes Job + Вазифаи равандҳои мазмунӣ + + + + CreatePartitionDialog + + + Create a Partition + Эҷод кардани қисми диск + + + + Si&ze: + &Андоза: + + + + MiB + МБ + + + + Partition &Type: + &Навъи қисми диск: + + + + Primar&y + + + + + E&xtended + &Афзуда + + + + Fi&le System: + &Низоми файлӣ: + + + + LVM LV name + Номи LVM LV + + + + &Mount Point: + &Нуқтаи васл: + + + + Flags: + Нишонҳо: + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + &Рамзгузорӣ + + + + Logical + Мантиқӣ + + + + Primary + Асосӣ + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + Нуқтаи васл аллакай дар истифода аст. Лутфан, нуқтаи васли дигареро интихоб намоед. + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + Қисми диски нав бо ҳаҷми %2MiB дар %4 (%3) бо низоми файлии %1 эҷод карда мешавад. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + Қисми диски нав бо ҳаҷми <strong>%2MiB</strong> дар <strong>%4</strong> (%3) бо низоми файлии <strong>%1</strong> эҷод карда мешавад. + + + + + Creating new %1 partition on %2. + Эҷодкунии қисми диски нави %1 дар %2. + + + + The installer failed to create partition on disk '%1'. + Насбкунанда қисми дискро дар '%1' эҷод карда натавонист. + + + + CreatePartitionTableDialog + + + Create Partition Table + Эҷод кардани ҷадвали қисми диск + + + + Creating a new partition table will delete all existing data on the disk. + Эҷодкунии ҷадвали қисми диски нав ҳамаи иттилооти дар диск мавҷудбударо нест мекунад. + + + + What kind of partition table do you want to create? + Шумо кадом навъи ҷадвали қисми дискро эҷод кардан мехоҳед? + + + + Master Boot Record (MBR) + Сабти роҳандозии асосӣ (MBR) + + + + GUID Partition Table (GPT) + Ҷадвали қисми диски GUID (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + Ҷадвали қисми диски нави %1 дар %2 эҷод карда мешавад. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + Ҷадвали қисми диски нави <strong>%1</strong> дар <strong>%2</strong> (%3) эҷод карда мешавад. + + + + Creating new %1 partition table on %2. + Эҷодкунии ҷадвали қисми диски нави %1 дар %2. + + + + The installer failed to create a partition table on %1. + Насбкунанда ҷадвали қисми дискро дар '%1' эҷод карда натавонист. + + + + CreateUserJob + + + Create user %1 + Эҷод кардани корбари %1 + + + + Create user <strong>%1</strong>. + Эҷод кардани корбари <strong>%1</strong>. + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + Эҷод кардани гурӯҳи ҳаҷм + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + Гурӯҳи ҳаҷми нав бо номи %1 эҷод карда мешавад. + + + + Create new volume group named <strong>%1</strong>. + Гурӯҳи ҳаҷми нав бо номи <strong>%1</strong> эҷод карда мешавад. + + + + Creating new volume group named %1. + Эҷодкунии гурӯҳи ҳаҷм бо номи %1. + + + + The installer failed to create a volume group named '%1'. + Насбкунанда гурӯҳи ҳаҷмро бо номи '%1' эҷод карда натавонист. + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + Ғайрифаъол кардани гурӯҳи ҳаҷм бо номи %1. + + + + Deactivate volume group named <strong>%1</strong>. + Ғайрифаъол кардани гурӯҳи ҳаҷм бо номи <strong>%1</strong>. + + + + The installer failed to deactivate a volume group named %1. + Насбкунанда гурӯҳи ҳаҷмро бо номи %1 ғайрифаъол карда натавонист. + + + + DeletePartitionJob + + + Delete partition %1. + Қисми диски %1 нест карда мешавад. + + + + Delete partition <strong>%1</strong>. + Қисми диски <strong>%1</strong> нест карда мешавад. + + + + Deleting partition %1. + Несткунии қисми диски %1. + + + + The installer failed to delete partition %1. + Насбкунанда қисми диски %1-ро нест карда натавонист. + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + Ин дастгоҳ ҷадвали қисми диски <strong>%1</strong>-ро дар бар мегирад. + + + + 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. + Ин дастгоҳи <strong>даврӣ</strong> мебошад.<br><br>Ин дастгоҳи сохтагӣ мебошад ва ҷадвали қисми дискеро дар бар намегирад, ки файлеро ҳамчун блоки дастгоҳ дастрас мекунад. Ин навъи танзимкунӣ одатан танҳо як низоми файлиро дар бар мегирад. + + + + 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. + Ин насбкунанда дар дастгоҳи захирагоҳи интихобшуда <strong>ҷадвали қисми дискеро муайян карда наметавонад</strong>.<br><br>Эҳтимол аст, ки дастгоҳ дорои ҷадвали қисми диск намебошад ё ҷадвали қисми диск вайрон ё номаълум аст.<br>Ин насбкунанда метавонад барои шумо ҷадвали қисми диски наверо ба таври худкор ё ба таври дастӣ дар саҳифаи қисмбандии дастӣ эҷод намояд. + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <br><br>Ин навъи ҷадвали қисми диски тавсияшуда барои низомҳои муосир мебошад, ки аз муҳити роҳандозии <strong>EFI</strong> ба роҳ монда мешавад. + + + + <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. + <br><br>Ин навъи ҷадвали қисми диск танҳо барои низомҳои куҳна тавсия карда мешавад, ки аз муҳити роҳандозии <strong>BIOS</strong> корро оғоз мекунад. GPT дар аксарияти мавридҳои дигар тавсия карда мешавад.<br><br><strong>Огоҳӣ:</strong> Ҷадвали қисми диски MBR ба стандатри куҳнаи давраи MS-DOS тааллуқ дорад.<br>Танҳо 4 қисми диски <em>асосӣ</em> эҷод карда мешаванд ва аз он 4 қисм танҳо як қисми диск <em>афзуда</em> мешавад, ки дар натиҷа метавонад бисёр қисмҳои диски <em>мантиқиро</em> дар бар гирад. + + + + 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. + Навъи <strong>ҷадвали қисми диск</strong> дар дастгоҳи захирагоҳи интихобшуда.<br><br>Навъи ҷадвали қисми диск танҳо тавассути пок кардан ва аз нав эҷод кардани ҷадвали қисми диск иваз карда мешавад, ки дар ин марвид ҳамаи иттилоот дар дастгоҳи захирагоҳ нест карда мешавад.<br>Ин насбкунанда ҷадвали қисми диски ҷориро нигоҳ медорад, агар шумо онро тағйир надиҳед.<br>Агар надонед, ки чӣ кор кардан лозим аст, GPT дар низомҳои муосир бояд истифода бурда шавад. + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + Танзимоти LUKS барои Dracut ба %1 сабт карда мешавад + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + Сабти танзимоти LUKS барои Dracut иҷро карда намешавад: қисми диски "/" рамзгузорӣ нашудааст + + + + Failed to open %1 + %1 кушода нашуд + + + + DummyCppJob + + + Dummy C++ Job + Вазифаи амсилаи C++ + + + + EditExistingPartitionDialog + + + Edit Existing Partition + Таҳрир кардани қисми диски мавҷудбуда + + + + Con&tent: + + + + + &Keep + &Нигоҳ доштан + + + + Format + Шаклбандӣ + + + + Warning: Formatting the partition will erase all existing data. + Огоҳӣ: Амали шаклбандӣ ҳамаи иттилооти мавҷудбударо дар қиски диск пок мекунад. + + + + &Mount Point: + &Нуқтаи васл: + + + + Si&ze: + &Андоза: + + + + MiB + МБ + + + + Fi&le System: + &Низоми файлӣ: + + + + Flags: + Нишонҳо: + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + Шакл + + + + En&crypt system + &Рамзгузории низом + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + Гузарвожаро ворид намоед + + + + Confirm passphrase + Гузарвожаро тасдиқ намоед + + + + + Please enter the same passphrase in both boxes. + Лутфан, гузарвожаи ягонаро дар ҳар дуи сатр ворид намоед. + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Шумо мехоҳед, ки сабти рӯйдодҳои насбро ба шабака нусха бардоред? + + + + FillGlobalStorageJob + + + Set partition information + Танзими иттилооти қисми диск + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + Насбкунии %1 дар қисми диски низомии <strong>нави</strong> %2. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + Насбкунии %2 дар қисми диски низомии %3 <strong>%1</strong>. + + + + Install boot loader on <strong>%1</strong>. + Боркунандаи роҳандозӣ дар <strong>%1</strong> насб карда мешавад. + + + + Setting up mount points. + Танзимкунии нуқтаҳои васл. + + + + FinishedPage + + + Form + Шакл + + + + &Restart now + &Ҳозир аз нав оғоз карда шавад + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + <h1>Ҳамааш тайёр.</h1><br/>%1 дар компютери шумо танзим карда шуд.<br/>Акнун шумо метавонед истифодаи низоми навро оғоз намоед. + + + + <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> + <html><head/><body><p>Агар ин имконро интихоб кунед, низоми шумо пас аз зер кардани тугмаи <span style="font-style:italic;">Анҷоми кор</span> ё пӯшидани барномаи танзимкунӣ дарҳол аз нав оғоз карда мешавад.</p></body></html> + + + + <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. + <h1>Ҳамааш тайёр.</h1><br/>%1 дар компютери шумо насб карда шуд.<br/>Акнун шумо метавонед компютерро аз нав оғоз карда, ба низоми нав ворид шавед ё истифодаи муҳити зиндаи %2-ро идома диҳед. + + + + <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> + <html><head/><body><p>Агар ин имконро интихоб кунед, низоми шумо пас аз зер кардани тугмаи <span style="font-style:italic;">Анҷоми кор</span> ё пӯшидани насбкунанда дарҳол аз нав оғоз карда мешавад.</p></body></html> + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + <h1>Танзимкунӣ қатъ шуд</h1><br/>%1 дар компютери шумо танзим карда нашуд.<br/>Паёми хато: %2. + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + <h1>Насбкунӣ қатъ шуд</h1><br/>%1 дар компютери шумо насб карда нашуд.<br/>Паёми хато: %2. + + + + FinishedQmlViewStep + + + Finish + Анҷом + + + + FinishedViewStep + + + Finish + Анҷом + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + Шаклбандии қисми диски %1 (низоми файлӣ: %2, андоза: %3 МБ) дар %4. + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + Шаклбандии қисми диск бо ҳаҷми <strong>%3MiB</strong> - <strong>%1</strong> бо низоми файлии <strong>%2</strong>. + + + + Formatting partition %1 with file system %2. + Шаклбандии қисми диски %1 бо низоми файлии %2. + + + + The installer failed to format partition %1 on disk '%2'. + Насбкунанда қисми диски %1-ро дар диски '%2' шаклбандӣ карда натавонист. + + + + GeneralRequirements + + + has at least %1 GiB available drive space + ақаллан %1 ГБ фазои диск дастрас аст + + + + There is not enough drive space. At least %1 GiB is required. + Дар диск фазои кофӣ нест. Ақаллан %1 ГБ лозим аст. + + + + has at least %1 GiB working memory + ақаллан %1 ГБ ҳофизаи корӣ дастрас аст + + + + The system does not have enough working memory. At least %1 GiB is required. + Низом дорои ҳофизаи кории кофӣ намебошад. Ақаллан %1 ГБ лозим аст. + + + + is plugged in to a power source + низом ба манбаи барқ пайваст карда шуд + + + + The system is not plugged in to a power source. + Компютер бояд ба манбаи барқ пайваст карда шавад + + + + is connected to the Internet + пайвасти Интернет дастрас аст + + + + The system is not connected to the Internet. + Компютер ба Интернет пайваст карда нашуд. + + + + is running the installer as an administrator (root) + насбкунанда бо ҳуқуқҳои маъмурӣ (root) иҷро шуда истодааст. + + + + The setup program is not running with administrator rights. + Барномаи насбкунӣ бе ҳуқуқҳои маъмурӣ иҷро шуда истодааст. + + + + The installer is not running with administrator rights. + Насбкунанда бе ҳуқуқҳои маъмурӣ иҷро шуда истодааст. + + + + has a screen large enough to show the whole installer + экран равзанаи насбкунандаро ба таври пурра нишон медиҳад + + + + The screen is too small to display the setup program. + Экран барои нишон додани барномаи насбкунӣ хеле хурд аст. + + + + The screen is too small to display the installer. + Экран барои нишон додани насбкунанда хеле хурд аст. + + + + HostInfoJob + + + Collecting information about your machine. + Ҷамъкунии иттилоот дар бораи компютери шумо. + + + + IDJob + + + + + + OEM Batch Identifier + Муайянкунандаи бастаи OEM + + + + Could not create directories <code>%1</code>. + Феҳристҳои <code>%1</code> эҷод карда намешаванд. + + + + Could not open file <code>%1</code>. + Файли <code>%1</code> кушода нашуд. + + + + Could not write to file <code>%1</code>. + Ба файли <code>%1</code> навишта натавонист. + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + Эҷодкунии initramfs бо mkinitcpio. + + + + InitramfsJob + + + Creating initramfs. + Эҷодкунии initramfs. + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole насб нашудааст + + + + Please install KDE Konsole and try again! + Лутфан, KDE Konsole-ро насб намуда, аз нав кӯшиш кунед! + + + + Executing script: &nbsp;<code>%1</code> + Иҷрокунии нақши: &nbsp;<code>%1</code> + + + + InteractiveTerminalViewStep + + + Script + Нақш + + + + KeyboardQmlViewStep + + + Keyboard + Клавиатура + + + + KeyboardViewStep + + + Keyboard + Клавиатура + + + + LCLocaleDialog + + + System locale setting + Танзими маҳаллигардонии низом + + + + 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>. + Танзими маҳаллигардонии низом ба забон ва маҷмӯаи аломатҳо барои баъзеи унсурҳои интерфейси корбарӣ дар сатри фармондиҳӣ таъсир мерасонад.<br/>Танзимоти ҷорӣ: <strong>%1</strong>. + + + + &Cancel + &Бекор кардан + + + + &OK + &ХУБ + + + + LOSHJob + + + Configuring encrypted swap. + Танзимкунии мубодилаи рамзгузоришуда. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + Шакл + + + + <h1>License Agreement</h1> + <h1>Созишномаи иҷозатномавӣ</h1> + + + + I accept the terms and conditions above. + Ман шарту шароитҳои дар боло зикршударо қабул мекунам. + + + + Please review the End User License Agreements (EULAs). + Лутфан, Созишномаҳои иҷозатномавии корбари ниҳоиро (EULA-ҳо) мутолиа намоед. + + + + This setup procedure will install proprietary software that is subject to licensing terms. + Раванди танзимкунӣ нармафзори патентдореро, ки дорои шартҳои иҷозатномавӣ мебошад, насб мекунад. + + + + If you do not agree with the terms, the setup procedure cannot continue. + Агар шумо шартҳоро қабул накунед, раванди насбкунӣ бояд идома дода нашавад. + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + Раванди танзимкунӣ метавонад нармафзори патентдореро насб кунад, ки дорои шартҳои иҷозатномавӣ барои таъмини хусусиятҳои иловагӣ ва беҳтар кардани таҷрибаи корбарӣ мебошад. + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + Агар шумо шартҳоро қабул накунед, нармафзори патентдор насб карда намешавад, аммо ба ҷояш нармафзори имконпазири ройгон истифода бурда мешавад. + + + + LicenseViewStep + + + License + Иҷозатнома + + + + LicenseWidget + + + URL: %1 + Нишонии URL: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>Драйвери %1</strong><br/>аз ҷониби %2 + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>Драйвери графикии %1</strong><br/><font color="Grey">аз ҷониби %2</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>Васлкунаки браузери %1</strong><br/><font color="Grey">аз ҷониби %2</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>Кодеки %1</strong><br/><font color="Grey">аз ҷониби %2</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>Бастаи %1</strong><br/><font color="Grey">аз ҷониби %2</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">аз ҷониби %2</font> + + + + File: %1 + Файл: %1 + + + + Hide license text + Пинҳон кардани матни иҷозатнома + + + + Show the license text + Нишон додани матни иҷозатнома + + + + Open license agreement in browser. + Созишномаи иҷозатномавиро дар браузер кушоед. + + + + LocalePage + + + Region: + Минтақа: + + + + Zone: + Шаҳр: + + + + + &Change... + &Тағйир додан... + + + + LocaleQmlViewStep + + + Location + Ҷойгиршавӣ + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + Ҷойгиршавӣ + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + Танзимкунии файли калиди LUKS. + + + + + No partitions are defined. + Ягон қисми диск муайян карда нашуд. + + + + + + Encrypted rootfs setup error + Хатои танзими рамзгузории "rootfs" + + + + Root partition %1 is LUKS but no passphrase has been set. + Қисми диски реша (root)-и %1 дар LUKS асос меёбад, вале гузарвожа танзим нашудааст. + + + + Could not create LUKS key file for root partition %1. + Файли калидии LUKS барои қисми диски реша (root)-и %1 эҷод карда нашуд. + + + + Could not configure LUKS key file on partition %1. + Файли калидии LUKS дар қисми диски %1 танзим карда нашуд. + + + + MachineIdJob + + + Generate machine-id. + Эҷодкунии рақами мушаххаси компютер (machine-id). + + + + Configuration Error + Хатои танзимкунӣ + + + + No root mount point is set for MachineId. + Нуқтаи васли реша (root) барои MachineId танзим нашудааст. + + + + Map + + + Timezone: %1 + Минтақаи вақт: %1 + + + + 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. + Лутфан, ҷойгиршавии пазируфтаи худро аз рӯи харита интихоб намоед, то ки насбкунанда тавонад танзимоти +маҳаллисозӣ ва минтақаи вақти шуморо пешниҳод намояд. Шумо метавонед танзимоти пешниҳодшударо дар зер дақиқ кунед. Барои ҷустуҷӯи макон дар харита +тугмаҳои +/- ё тугмаи чархии мушро барои калон ва хурд кардани харита истифода баред ё харитаро кашида, ҳаракат кунед. + + + + NetInstallViewStep + + + Package selection + Интихоби бастаҳо + + + + Office software + Нармафзори идорӣ + + + + Office package + Бастаҳои идорӣ + + + + Browser software + Нармафзори браузерӣ + + + + Browser package + Бастаҳои браузерӣ + + + + Web browser + Браузери сомона + + + + Kernel + Ҳаста + + + + Services + Хидматҳо + + + + Login + Воридшавӣ + + + + Desktop + Мизи корӣ + + + + Applications + Барномаҳо + + + + Communication + Воситаҳои алоқа + + + + Development + Барномарезӣ + + + + Office + Идора + + + + Multimedia + Мултимедиа + + + + Internet + Интернет + + + + Theming + Мавзӯъҳо + + + + Gaming + Бозиҳо + + + + Utilities + Барномаҳои муфид + + + + NotesQmlViewStep + + + Notes + Ёддоштҳо + + + + OEMPage + + + Ba&tch: + &Баста: + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + <html><head/><body><p>Муайянкунандаи бастаро дар ин ҷо ворид намоед. Он дар низоми интихобшуда нигоҳ дошта мешавад.</p></body></html> + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + <html><head/><body><h1>Танзимоти OEM</h1><p>Calamares ҳангоми танзимкунии низоми интихобшуда танзимоти OEM-ро истифода мебарад.</p></body></html> + + + + OEMViewStep + + + OEM Configuration + Танзимоти OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + Муайянкунандаи бастаи OEM ба <code>%1</code> танзим карда мешавад. + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Минтақаи вақт: %1 + + + + Select your preferred Zone within your Region. + Шаҳри пазируфтаи худро дар ҳудуди минтақаи худ интихоб намоед. + + + + Zones + Шаҳрҳо + + + + You can fine-tune Language and Locale settings below. + Шумо метавонед танзимоти забон ва маҳаллисозиро дар зер дуруст кунед. + + + + PWQ + + + Password is too short + Ниҳонвожа хеле кӯтоҳ аст + + + + Password is too long + Ниҳонвожа хеле дароз аст + + + + Password is too weak + Ниҳонвожа хеле заиф аст + + + + Memory allocation error when setting '%1' + Хатои ҷойдиҳии ҳофиза ҳангоми танзими '%1' ба миён омад + + + + Memory allocation error + Хатои ҷойдиҳии ҳофиза + + + + The password is the same as the old one + Ниҳонвожаи нав ба ниҳонвожаи куҳна менамояд + + + + The password is a palindrome + Ниҳонвожа аз чапу рост як хел хонда мешавад + + + + The password differs with case changes only + Ниҳонвожа танҳо бо ивази ҳарфҳои хурду калон фарқ мекунад + + + + The password is too similar to the old one + Ниҳонвожаи нав хеле ба ниҳонвожаи куҳна менамояд + + + + The password contains the user name in some form + Ниҳонвожа номи корбареро дар бар мегирад + + + + The password contains words from the real name of the user in some form + Ниҳонвожа калимаҳоро аз номи ҳақиқии шумо ё номи корбар дар бар мегирад + + + + The password contains forbidden words in some form + Ниҳонвожа калимаҳои нораворо дар бар мегирад + + + + The password contains too few digits + Ниҳонвожа якчанд рақамро дар бар мегирад + + + + The password contains too few uppercase letters + Ниҳонвожа якчанд ҳарфи калонро дар бар мегирад + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains too few lowercase letters + Ниҳонвожа якчанд ҳарфи хурдро дар бар мегирад + + + + The password contains too few non-alphanumeric characters + Ниҳонвожа якчанд аломати ғайри алифбоӣ-ададиро дар бар мегирад + + + + The password is too short + Ниҳонвожа хеле кӯтоҳ аст + + + + The password does not contain enough character classes + Ниҳонвожа синфҳои аломатии кофиро дар бар намегирад + + + + The password contains too many same characters consecutively + Ниҳонвожа аз ҳад зиёд аломати ягонаро пай дар пай дар бар мегирад + + + + The password contains too many characters of the same class consecutively + Ниҳонвожа бисёр аломатро бо синфи ягона пай дар пай дар бар мегирад + + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + + The password contains too long of a monotonic character sequence + Ниҳонвожа аломати пайдарпаии ҳаммонанди дарозро дар бар мегирад + + + + No password supplied + Ниҳонвожа ворид нашудааст + + + + Cannot obtain random numbers from the RNG device + Рақамҳои тасодуфӣ аз дастгоҳи RNG гирифта намешаванд + + + + Password generation failed - required entropy too low for settings + Ниҳонвожа эҷод карда нашуд - энтропияи зарурӣ барои танзимот хеле паст аст + + + + The password fails the dictionary check - %1 + Ниҳонвожа аз санҷиши луғавӣ нагузашт - %1 + + + + The password fails the dictionary check + Ниҳонвожа аз санҷиши луғавӣ нагузашт + + + + Unknown setting - %1 + Танзими номаълум - %1 + + + + Unknown setting + Танзими номаълум + + + + Bad integer value of setting - %1 + Қимати адади бутуни танзим нодуруст аст - %1 + + + + Bad integer value + Қимати адади бутун нодуруст аст + + + + Setting %1 is not of integer type + Танзими %1 ба адади бутун мувофиқат намекунад + + + + Setting is not of integer type + Танзим ба адади бутун мувофиқат намекунад + + + + Setting %1 is not of string type + Танзими %1 ба сатр мувофиқат намекунад + + + + Setting is not of string type + Танзим ба сатр мувофиқат намекунад + + + + Opening the configuration file failed + Файли танзимӣ кушода нашуд + + + + The configuration file is malformed + Файли танзимӣ дар шакли норуруст мебошад + + + + Fatal failure + Хатои ҷиддӣ + + + + Unknown error + Хатои номаълум + + + + Password is empty + Ниҳонвожаро ворид накардед + + + + PackageChooserPage + + + Form + Шакл + + + + Product Name + Номи маҳсул + + + + TextLabel + Тамғаи матнӣ + + + + Long Product Description + Маълумоти муфассал дар бораи маҳсул + + + + Package Selection + Интихоби бастаҳо + + + + Please pick a product from the list. The selected product will be installed. + Лутфан, маҳсулеро аз рӯйхат интихоб намоед. Маҳсули интихобшуда насб карда мешавад. + + + + PackageChooserQmlViewStep + + + Packages + Бастаҳо + + + + PackageChooserViewStep + + + Packages + Бастаҳо + + + + PackageModel + + + Name + Ном + + + + Description + Маълумоти муфассал + + + + Page_Keyboard + + + Form + Шакл + + + + Keyboard Model: + Намунаи клавиатура: + + + + Type here to test your keyboard + Барои санҷидани клавиатура ҳарфҳоро дар ин сатр ворид намоед + + + + Page_UserSetup + + + Form + Шакл + + + + What is your name? + Номи шумо чист? + + + + Your Full Name + Номи пурраи шумо + + + + What name do you want to use to log in? + Кадом номро барои ворид шудан ба низом истифода мебаред? + + + + login + Номи корбари шумо + + + + What is the name of this computer? + Номи ин компютер чист? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>Ин ном истифода мешавад, агар шумо компютери худро барои дигарон дар шабака намоён кунед.</small> + + + + Computer Name + Номи компютери шумо + + + + Choose a password to keep your account safe. + Барои эмин нигоҳ доштани ҳисоби худ ниҳонвожаеро интихоб намоед. + + + + + <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> + <small>Ниҳонвожаи ягонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад. Ниҳонвожаи хуб бояд дар омезиш калимаҳо, рақамҳо ва аломатҳои китобатиро дар бар гирад, ақаллан аз ҳашт аломат иборат шавад ва мунтазам иваз карда шавад.</small> + + + + + Password + Ниҳонвожаро ворид намоед + + + + + Repeat Password + Ниҳонвожаро тасдиқ намоед + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Агар шумо ин имконро интихоб кунед, қувваи ниҳонвожа тафтиш карда мешавад ва шумо ниҳонвожаи заифро истифода карда наметавонед. + + + + Require strong passwords. + Ниҳонвожаҳои қавӣ лозиманд. + + + + Log in automatically without asking for the password. + Ба таври худкор бе дархости ниҳонвожа ворид карда шавад. + + + + Use the same password for the administrator account. + Ниҳонвожаи ягона барои ҳисоби маъмурӣ истифода бурда шавад. + + + + Choose a password for the administrator account. + Барои ҳисоби маъмурӣ ниҳонвожаеро интихоб намоед. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>Ниҳонвожаи ягонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад.</small> + + + + PartitionLabelsView + + + Root + Реша (root) + + + + Home + Асосӣ + + + + Boot + Роҳандозӣ + + + + EFI system + Низоми EFI + + + + Swap + Мубодила + + + + New partition for %1 + Қисми диски нав барои %1 + + + + New partition + Қисми диски нав + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + Фазои озод + + + + + New partition + Қисми диски нав + + + + Name + Ном + + + + File System + Низоми файлӣ + + + + File System Label + + + + + Mount Point + Нуқтаи васл + + + + Size + Андоза + + + + PartitionPage + + + Form + Шакл + + + + Storage de&vice: + &Дастгоҳи захирагоҳ: + + + + &Revert All Changes + &Бозгардонидани ҳамаи тағйирот + + + + New Partition &Table + &Ҷадвали қисми диски нав + + + + Cre&ate + &Эҷод кардан + + + + &Edit + &Таҳрир кардан + + + + &Delete + &Нест кардан + + + + New Volume Group + Гурӯҳи ҳаҷми нав + + + + Resize Volume Group + Иваз кардани андозаи гурӯҳи ҳаҷм + + + + Deactivate Volume Group + Ғайрифаъол кардани гурӯҳи ҳаҷм + + + + Remove Volume Group + Тоза кардани гурӯҳи ҳаҷм + + + + I&nstall boot loader on: + &Насб кардани боркунандаи роҳандозӣ дар: + + + + Are you sure you want to create a new partition table on %1? + Шумо мутмаин ҳастед, ки мехоҳед ҷадвали қисми диски навро дар %1 эҷод намоед? + + + + Can not create new partition + Қисми диски нав эҷод карда намешавад + + + + 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. + Ҷадвали қисми диск дар %1 аллакай %2 қисми диски асосиро дар бар мегирад ва қисмҳои бештар илова карда намешаванд. Лутфан, як қисми диски асосиро нест кунед ва ба ҷояш қисми диски афзударо илова намоед. + + + + PartitionViewStep + + + Gathering system information... + Ҷамъкунии иттилооти низомӣ... + + + + Partitions + Қисмҳои диск + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + Танзимоти ҷорӣ: + + + + After: + Баъд аз тағйир: + + + + No EFI system partition configured + Ягон қисми диски низомии EFI танзим нашуд + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + Имкони истифодаи GPT дар BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + Қисми диски роҳандозӣ рамзгузорӣ нашудааст + + + + 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. + Қисми диски роҳандозии алоҳида дар як ҷой бо қисми диски реша (root)-и рамзгузоришуда танзим карда шуд, аммо қисми диски роҳандозӣ рамзгузорӣ нашудааст.<br/><br/>Барои ҳамин навъи танзимкунӣ масъалаи амниятӣ аҳамият дорад, зеро ки файлҳои низомии муҳим дар қисми диски рамзгузоринашуда нигоҳ дошта мешаванд.<br/>Агар шумо хоҳед, метавонед идома диҳед, аммо қулфкушоии низоми файлӣ дертар ҳангоми оғози кори низом иҷро карда мешавад.<br/>Барои рамзгзорӣ кардани қисми диски роҳандозӣ ба қафо гузаред ва бо интихоби тугмаи <strong>Рамзгузорӣ</strong> дар равзанаи эҷодкунии қисми диск онро аз нав эҷод намоед. + + + + has at least one disk device available. + ақаллан як дастгоҳи диск дастрас аст. + + + + There are no partitions to install on. + Ягон қисми диск барои насб вуҷуд надорад. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + Вазифаи намуди зоҳирии Plasma + + + + + Could not select KDE Plasma Look-and-Feel package + Бастаи намуди зоҳирии KDE Plasma интихоб карда намешавад + + + + PlasmaLnfPage + + + Form + Шакл + + + + 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. + Лутфан, намуди зоҳириро барои мизи кории KDE Plasma интихоб намоед. Шумо инчунин метавонед ин қадамро ҳозир ба назар нагиред, аммо намуди зоҳириро пас аз анҷоми танзимкунии низом дар вақти дилхоҳ танзим намоед. Барои пешнамоиш кардани намуди зоҳирии интихобшуда, онро зер кунед. + + + + 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. + Лутфан, намуди зоҳириро барои мизи кории KDE Plasma интихоб намоед. Шумо инчунин метавонед ин қадамро ҳозир ба назар нагиред, аммо намуди зоҳириро пас аз анҷоми насбкунии низом дар вақти дилхоҳ танзим намоед. Барои пешнамоиш кардани намуди зоҳирии интихобшуда, онро зер кунед. + + + + PlasmaLnfViewStep + + + Look-and-Feel + Намуди зоҳирӣ + + + + PreserveFiles + + + Saving files for later ... + Нигоҳдории файлҳо барои коркарди минбаъда ... + + + + No files configured to save for later. + Ягон файл барои коркарди минбаъда танзим карда нашуд. + + + + Not all of the configured files could be preserved. + На ҳамаи файлҳои танзимшуда метавонанд нигоҳ дошта шаванд. + + + + ProcessResult + + + +There was no output from the command. + +Фармони иҷрошуда ягон натиҷа надод. + + + + +Output: + + +Натиҷа: + + + + + External command crashed. + Фармони берунӣ иҷро нашуд. + + + + Command <i>%1</i> crashed. + Фармони <i>%1</i> иҷро нашуд. + + + + External command failed to start. + Фармони берунӣ оғоз нашуд. + + + + Command <i>%1</i> failed to start. + Фармони <i>%1</i> оғоз нашуд. + + + + Internal error when starting command. + Ҳангоми оғоз кардани фармон хатои дохилӣ ба миён омад. + + + + Bad parameters for process job call. + Имконоти нодуруст барои дархости вазифаи раванд. + + + + External command failed to finish. + Фармони берунӣ ба анҷом нарасид. + + + + Command <i>%1</i> failed to finish in %2 seconds. + Фармони <i>%1</i> дар муддати %2 сония ба анҷом нарасид. + + + + External command finished with errors. + Фармони берунӣ бо хатоҳо ба анҷом расид. + + + + Command <i>%1</i> finished with exit code %2. + Фармони <i>%1</i> бо рамзи барориши %2 ба анҷом расид. + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + номаълум + + + + extended + афзуда + + + + unformatted + шаклбандинашуда + + + + swap + мубодила + + + + + Default + Муқаррар + + + + + + + File not found + Файл ёфт нашуд + + + + Path <pre>%1</pre> must be an absolute path. + Масири <pre>%1</pre> бояд масири мутлақ бошад. + + + + Directory not found + Феҳрист ёфт нашуд + + + + + Could not create new random file <pre>%1</pre>. + Файл тасодуфии нави <pre>%1</pre> эҷод карда нашуд. + + + + No product + Ягон маҳсул нест + + + + No description provided. + Ягон тафсилот нест + + + + (no mount point) + (бе нуқтаи васл) + + + + Unpartitioned space or unknown partition table + Фазои диск бо қисми диски ҷудонашуда ё ҷадвали қисми диски номаълум + + + + Recommended + + + <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> + <p>Ин компютер ба баъзеи талаботи тавсияшуда барои насбкунии %1 ҷавобгӯ намебошад.<br/> + Танзимот идома дода мешавад, аммо баъзеи хусусиятҳо ғайрифаъол карда мешаванд.</p> + + + + RemoveUserJob + + + Remove live user from target system + Тоза кардани корбари фаъол аз низоми интихобшуда + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + Тоза кардани гурӯҳи ҳаҷм бо номи %1. + + + + Remove Volume Group named <strong>%1</strong>. + Тоза кардани гурӯҳи ҳаҷм бо номи <strong>%1</strong>. + + + + The installer failed to remove a volume group named '%1'. + Насбкунанда гурӯҳи ҳаҷмро бо номи '%1' тоза карда натавонист. + + + + ReplaceWidget + + + Form + Шакл + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + Интихоб кунед, ки %1 дар куҷо бояд насб карда шавад.<br/><font color="red">Огоҳӣ: </font>Ин амал ҳамаи файлҳоро дар қисми диски интихобшуда нест мекунад. + + + + The selected item does not appear to be a valid partition. + Чунин менамояд, ки ҷузъи интихобшуда қисми диски дуруст намебошад. + + + + %1 cannot be installed on empty space. Please select an existing partition. + %1 дар фазои холӣ насб карда намешавад. Лутфан, қисми диски мавҷудбударо интихоб намоед. + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %1 дар қисми диски афзуда насб карда намешавад. Лутфан, қисми диски мавҷудбудаи асосӣ ё мантиқиро интихоб намоед. + + + + %1 cannot be installed on this partition. + %1 дар ин қисми диск насб карда намешавад. + + + + Data partition (%1) + Қисми диски иттилоотӣ (%1) + + + + Unknown system partition (%1) + Қисми диски низомии номаълум (%1) + + + + %1 system partition (%2) + Қисми диски низомии %1 (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <strong>%4</strong><br/><br/>Қисми диски %1 барои %2 хеле хурд аст. Лутфан, қисми дискеро бо ҳаҷми ақаллан %3 ГБ интихоб намоед. + + + + <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. + <strong>%2</strong><br/><br/>Қисми диски низомии EFI дар дохили низоми ҷорӣ ёфт нашуд. Лутфан, ба қафо гузаред ва барои танзим кардани %1 аз имкони қисмбандии диск ба таври дастӣ истифода баред. + + + + + + <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. + <strong>%3</strong><br/><br/>%1 дар %2 насб карда мешавад.<br/><font color="red">Огоҳӣ: </font>Ҳамаи иттилоот дар қисми диски %2 гум карда мешавад. + + + + The EFI system partition at %1 will be used for starting %2. + Қисми диски низомии EFI дар %1 барои оғоз кардани %2 истифода бурда мешавад. + + + + EFI system partition: + Қисми диски низомии: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Ин компютер ба талаботи камтарин барои насбкунии %1 ҷавобгӯ намебошад.<br/> + Насбкунӣ идома дода намешавад.</p> + + + + <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> + <p>Ин компютер ба баъзеи талаботи тавсияшуда барои насбкунии %1 ҷавобгӯ намебошад.<br/> + Танзимот идома дода мешавад, аммо баъзеи хусусиятҳо ғайрифаъол карда мешаванд.</p> + + + + ResizeFSJob + + + Resize Filesystem Job + Вазифаи ивазкунии андозаи низоми файлӣ + + + + Invalid configuration + Танзимоти нодуруст + + + + The file-system resize job has an invalid configuration and will not run. + Вазифаи ивазкунии андозаи низоми файлӣ танзимоти нодуруст дорад ва иҷро карда намешавад. + + + + KPMCore not Available + KPMCore дастнорас аст + + + + Calamares cannot start KPMCore for the file-system resize job. + Calamares барои вазифаи ивазкунии андозаи низоми файлӣ KPMCore-ро оғоз карда наметавонад. + + + + + + + + Resize Failed + Андоза иваз карда нашуд + + + + The filesystem %1 could not be found in this system, and cannot be resized. + Низоми файлии %1 дар ин низом ёфт нашуд ва андозаи он иваз карда намешавад. + + + + The device %1 could not be found in this system, and cannot be resized. + Дастгоҳи %1 дар ин низом ёфт нашуд ва андозаи он иваз карда намешавад. + + + + + The filesystem %1 cannot be resized. + Андозаи низоми файлии %1 иваз карда намешавад. + + + + + The device %1 cannot be resized. + Андозаи дастгоҳи %1 иваз карда намешавад. + + + + The filesystem %1 must be resized, but cannot. + Андозаи низоми файлии %1 бояд иваз карда шавад, аммо иваз карда намешавад. + + + + The device %1 must be resized, but cannot + Андозаи дастгоҳи %1 бояд иваз карда шавад, аммо иваз карда намешавад. + + + + ResizePartitionJob + + + Resize partition %1. + Иваз кардани андозаи қисми диски %1. + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + Андозаи қисми диск бо ҳаҷми <strong>%2MiB</strong> - <strong>%1</strong> ба ҳаҷми<strong>%3MiB</strong> иваз карда мешавад. + + + + Resizing %2MiB partition %1 to %3MiB. + Ивазкунии андозаи қисми диски %1 бо ҳаҷми %2MiB то ҳаҷми %3MiB. + + + + The installer failed to resize partition %1 on disk '%2'. + Насбкунанда андозаи қисми диски %1-ро дар диски '%2' иваз карда натавонист. + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + Иваз кардани андозаи гурӯҳи ҳаҷм + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + Иваз кардани андозаи гурӯҳи ҳаҷм бо номи %1 аз %2 ба %3. + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + Иваз кардани андозаи гурӯҳи ҳаҷм бо номи <strong>%1</strong> аз <strong>%2</strong> ба <strong>%3</strong>. + + + + The installer failed to resize a volume group named '%1'. + Насбкунанда андозаи гурӯҳи ҳаҷмро бо номи '%1' иваз карда натавонист. + + + + ResultsListDialog + + + For best results, please ensure that this computer: + Барои натиҷаҳои беҳтарин, мутмаин шавед, ки дар ин компютер: + + + + System requirements + Талаботи низом + + + + ScanningDialog + + + Scanning storage devices... + Ҷустуҷӯи дастгоҳҳои захирагоҳ... + + + + Partitioning + Қисмбандии диск + + + + SetHostNameJob + + + Set hostname %1 + Танзими номи мизбони %1 + + + + Set hostname <strong>%1</strong>. + Танзими номи мизбони <strong>%1</strong>. + + + + Setting hostname %1. + Танзимкунии номи мизбони %1. + + + + + Internal Error + Хатои дохилӣ + + + + + Cannot write hostname to target system + Номи мизбон ба низоми интихобшуда сабт нашуд + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + Намунаи клавиатура ба %1 ва тарҳбандӣ ба %2-%3 танзим карда мешавад + + + + Failed to write keyboard configuration for the virtual console. + Танзимоти клавиатура барои консоли маҷозӣ сабт нашуд. + + + + + + Failed to write to %1 + Ба %1 сабт нашуд + + + + Failed to write keyboard configuration for X11. + Танзимоти клавиатура барои X11 сабт нашуд. + + + + Failed to write keyboard configuration to existing /etc/default directory. + Танзимоти клавиатура ба феҳристи мавҷудбудаи /etc/default сабт нашуд. + + + + SetPartFlagsJob + + + Set flags on partition %1. + Танзим кардани нишонҳо дар қисми диски %1. + + + + Set flags on %1MiB %2 partition. + Танзим кардани нишонҳо дар қисми диски %1MiB %2. + + + + Set flags on new partition. + Танзим кардани нишонҳо дар қисми диски нав. + + + + Clear flags on partition <strong>%1</strong>. + Пок кардани нишонҳо дар қисми диски <strong>%1</strong>. + + + + Clear flags on %1MiB <strong>%2</strong> partition. + Пок кардани нишонҳо дар қисми диски <strong>%2</strong> %1MiB. + + + + Clear flags on new partition. + Пок кардани нишонҳо дар қисми диски нав. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + Нишони қисми диски <strong>%1</strong> ҳамчун <strong>%2</strong> танзим карда мешавад. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Нишони қисми диски <strong>%2</strong> бо ҳаҷми %1MiB <strong>%3</strong> танзим карда мешавад. + + + + Flag new partition as <strong>%1</strong>. + Нишони қисми диски нав ҳамчун <strong>%1</strong> танзим карда мешавад. + + + + Clearing flags on partition <strong>%1</strong>. + Поксозии нишонҳо дар қисми диски <strong>%1</strong>. + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + Поксозии нишонҳо дар қисми диски <strong>%2</strong> бо ҳаҷми %1MiB. + + + + Clearing flags on new partition. + Поксозии нишонҳо дар қисми диски нав + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + Танзимкунии нишонҳои <strong>%2</strong> дар қисми диски <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Танзимкунии нишонҳои <strong>%3</strong> дар қисми диски <strong>%2</strong> бо ҳаҷми %1MiB. + + + + Setting flags <strong>%1</strong> on new partition. + Танзимкунии нишонҳои <strong>%1</strong> дар қисми диски нав + + + + The installer failed to set flags on partition %1. + Насбкунанда нишонҳоро дар қисми диски %1 танзим карда натавонист. + + + + SetPasswordJob + + + Set password for user %1 + Танзими ниҳонвожа барои корбари %1 + + + + Setting password for user %1. + Танзимкунии ниҳонвожа барои корбари %1. + + + + Bad destination system path. + Масири ҷойи таъиноти низомӣ нодуруст аст. + + + + rootMountPoint is %1 + rootMountPoint: %1 + + + + Cannot disable root account. + Ҳисоби реша (root) ғайрифаъол карда намешавад. + + + + passwd terminated with error code %1. + passwd бо рамзи хатои %1 қатъ шуд. + + + + Cannot set password for user %1. + Ниҳонвожа барои корбари %1 танзим карда намешавад. + + + + usermod terminated with error code %1. + usermod бо рамзи хатои %1 қатъ шуд. + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Минтақаи вақт ба %1/%2 танзим карда мешавад + + + + Cannot access selected timezone path. + Масири минтақаи вақти интихобшуда дастнорас аст + + + + Bad path: %1 + Масири нодуруст: %1 + + + + Cannot set timezone. + Минтақаи вақт танзим карда намешавад + + + + Link creation failed, target: %1; link name: %2 + Пайванд эҷод карда нашуд, вазифа: %1; номи пайванд: %2 + + + + Cannot set timezone, + Минтақаи вақт танзим карда намешавад. + + + + Cannot open /etc/timezone for writing + Файли /etc/timezone барои сабт кушода намешавад + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Фармони chmod барои файли sudoers иҷро намешавад. + + + + Cannot create sudoers file for writing. + Файли sudoers барои сабт эҷод карда намешавад. + + + + ShellProcessJob + + + Shell Processes Job + Вазифаи равандҳои восит + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &ХУБ + + + + &Yes + &Ҳа + + + + &No + &Не + + + + &Cancel + &Бекор кардан + + + + &Close + &Пӯшидан + + + + TrackingInstallJob + + + Installation feedback + Алоқаи бозгашти насбкунӣ + + + + Sending installation feedback. + Фиристодани алоқаи бозгашти насбкунӣ. + + + + Internal error in install-tracking. + Хатои дохилӣ дар пайгирии насб. + + + + HTTP request timed out. + Вақти дархости HTTP ба анҷом расид. + + + + TrackingKUserFeedbackJob + + + KDE user feedback + Изҳори назари корбари KDE + + + + Configuring KDE user feedback. + Танзимкунии изҳори назари корбари KDE. + + + + + Error in KDE user feedback configuration. + Хато дар танзимкунии изҳори назари корбари KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Изҳори назари корбари KDE ба таври дуруст танзим карда нашуд. Хатои нақш: %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Изҳори назари корбари KDE ба таври дуруст танзим карда нашуд. Хатои Calamares: %1. + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + Низоми изҳори назар ва алоқаи бозгашт + + + + Configuring machine feedback. + Танзимкунии алоқаи бозгашти компютерӣ. + + + + + Error in machine feedback configuration. + Хато дар танзимкунии алоқаи бозгашти компютерӣ. + + + + Could not configure machine feedback correctly, script error %1. + Алоқаи бозгашти компютерӣ ба таври дуруст танзим карда нашуд. Хатои нақш: %1. + + + + Could not configure machine feedback correctly, Calamares error %1. + Алоқаи бозгашти компютерӣ ба таври дуруст танзим карда нашуд. Хатои Calamares: %1. + + + + TrackingPage + + + Form + Шакл + + + + Placeholder + Пуркунандаи фазо + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Дар ин ҷо зер кунед, то ки <span style=" font-weight:600;">ягон маълумот</span> дар бораи насбкунии шумо фиристода нашавад.</p></body></html> + + + + <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> + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Барои гирифтани маълумоти муфассал оид ба изҳори назари корбар, дар ин ҷо зер кунед</span></a></p></body></html> + + + + 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. + Пайгирӣ ба %1 барои дидани шумораи насбҳо, намудҳои сахтафзорҳо ва маҷмӯаи барномаҳои истифодашуда кумак мерасонад. Барои дидани маълумоте, ки фиристода мешавад нишонаи кумакро дар назди ҳар як мавод зер кунед. + + + + 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. + Агар ин имконро интихоб кунед, шумо маълумотро дар бораи насбкунӣ ва сахтафзори худ мефиристонед. Ин маълумот <b>танҳо як маротиба</b> баъд аз анҷоми насбкунӣ фиристода мешавад. + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Агар ин имконро интихоб кунед, шумо маълумотро ба таври мунтазам дар бораи насбкунӣ, сахтафзор ва барномаҳои <b>компютери</b> худ ба %1 мефиристонед. + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Агар ин имконро интихоб кунед, шумо маълумотро ба таври мунтазам дар бораи насбкунӣ, сахтафзор ва барномаҳои <b>корбари</b> худ ба %1 мефиристонед. + + + + TrackingViewStep + + + Feedback + Изҳори назар ва алоқаи бозгашт + + + + UmountJob + + + Unmount file systems. + Ҷудо кардани низомҳои файлӣ. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + <small>Агар зиёда аз як корбар ин компютерро истифода барад, шумо метавонед баъд аз танзимкунӣ якчанд ҳисобро эҷод намоед.</small> + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + <small>Агар зиёда аз як корбар ин компютерро истифода барад, шумо метавонед баъд аз насбкунӣ якчанд ҳисобро эҷод намоед.</small> + + + + UsersQmlViewStep + + + Users + Корбарон + + + + UsersViewStep + + + Users + Корбарон + + + + VariantModel + + + Key + Column header for key/value + Тугма + + + + Value + Column header for key/value + Қимат + + + + VolumeGroupBaseDialog + + + Create Volume Group + Эҷод кардани гурӯҳи ҳаҷм + + + + List of Physical Volumes + Рӯйхати ҳаҷмҳои ҷисмонӣ + + + + Volume Group Name: + Номи гурӯҳи ҳаҷм: + + + + Volume Group Type: + Навъи гурӯҳи ҳаҷм: + + + + Physical Extent Size: + Андозаи меъёри ҷисмонӣ: + + + + MiB + МБ + + + + Total Size: + Андозаи умумӣ: + + + + Used Size: + Андозаи истифодашуда: + + + + Total Sectors: + Бахшҳои умумӣ: + + + + Quantity of LVs: + Шумораи LV-ҳо: + + + + WelcomePage + + + Form + Шакл + + + + + Select application and system language + Интихоби забон барои низом ва барномаҳо + + + + &About + &Дар бораи барнома + + + + Open donations website + Сомонаи саҳмгузориро кушоед + + + + &Donate + &Саҳмгузорӣ + + + + Open help and support website + Сомонаи кумак ва дастгириро кушоед + + + + &Support + &Дастгирӣ + + + + Open issues and bug-tracking website + Сомонаи масъалаҳо ва пайгирии нуқсонҳоро кушоед + + + + &Known issues + &Масъалаҳои маълум + + + + Open release notes website + Сомонаро бо қайдҳои нашр кушоед + + + + &Release notes + &Қайдҳои нашр + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>Хуш омадед ба барномаи танзимкунии Calamares барои %1.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>Хуш омадед ба танзимкунии %1.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Хуш омадед ба насбкунандаи Calamares барои %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Хуш омадед ба насбкунандаи %1.</h1> + + + + %1 support + Дастгирии %1 + + + + About %1 setup + Дар бораи танзими %1 + + + + About %1 installer + Дар бораи насбкунандаи %1 + + + + <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. + <h1>%1</h1><br/><strong>%2<br/>барои %3</strong><br/><br/>Ҳуқуқи муаллиф 2014-2017 Тео Марҷавак &lt;teo@kde.org&gt;<br/>Ҳуқуқи муаллиф 2017-2020 Адриан де Грут &lt;groot@kde.org&gt;<br/>Ташаккури зиёд ба <a href="https://calamares.io/team/">дастаи Calamares</a> ва <a href="https://www.transifex.com/calamares/calamares/">гурӯҳи тарҷумонони Calamares</a> (тарҷумаи тоҷикӣ аз ҷониби Виктор Ибрагимов &lt;victor.ibragimov@gmail.com&gt;).<br/><br/>Барномарезии насбкунандаи <a href="https://calamares.io/">Calamares</a> аз тарафи <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software дастгирӣ карда мешавад. + + + + WelcomeQmlViewStep + + + Welcome + Хуш омадед + + + + WelcomeViewStep + + + Welcome + Хуш омадед + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Хатои танзимкунӣ + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + <h1>%1</h1><br/> + <strong>%2<br/> + барои %3</strong><br/><br/> + Ҳуқуқи муаллиф 2014-2017 Тео Марҷавак &lt;teo@kde.org&gt;<br/> + Ҳуқуқи муаллиф 2017-2020 Адриан де Грут &lt;groot@kde.org&gt;<br/> + Ташаккури зиёд ба <a href='https://calamares.io/team/'>дастаи Calamares</a> + ва <a href='https://www.transifex.com/calamares/calamares/'>гурӯҳи тарҷумонони Calamares</a> (тарҷумаи тоҷикӣ аз ҷониби Виктор Ибрагимов &lt;victor.ibragimov@gmail.com&gt;).<br/><br/> + Барномарезии насбкунандаи <a href='https://calamares.io/'>Calamares</a> + аз тарафи <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Liberating Software дастгирӣ карда мешавад. + + + + Back + Ба қафо + + + + calamares-sidebar + + + Show debug information + Намоиши иттилооти +ислоҳи нуқсонҳо + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <h1>Забонҳо</h1> </br> + Танзими маҳаллигардонии низом ба забон ва маҷмӯаи аломатҳо барои баъзеи унсурҳои интерфейси корбарӣ дар сатри фармондиҳӣ таъсир мерасонад. Танзими ҷорӣ: <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Маҳаллигардонӣ</h1> </br> + Танзими маҳаллигардонии низом ба забон ва маҷмӯаи аломатҳо барои баъзеи унсурҳои интерфейси корбарӣ дар сатри фармондиҳӣ таъсир мерасонад. Танзими ҷорӣ: <strong>%1</strong>. + + + + Back + Ба қафо + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + Намунаи клавиатура: + + + + Layouts + Тарҳбандиҳо + + + + Type here to test your keyboard + Барои санҷидани клавиатура ҳарфҳоро дар ин сатр ворид намоед + + + + Variants + Имконот + + + + localeq + + + Change + Тағйир додан + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + <h3>%1</h3> + <p>Матни намунавии қайдҳои нашр.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <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></p> + <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> + + + + Back + Ба қафо + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Барои ворид шудан ба низом ва иҷро кардани вазифаҳои маъмурӣ, номи корбар ва маълумоти корбариро муайян кунед. + + + + What is your name? + Номи шумо чист? + + + + Your Full Name + Номи пурраи шумо + + + + What name do you want to use to log in? + Кадом номро барои ворид шудан ба низом истифода мебаред? + + + + Login Name + Номи корбар + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Агар зиёда аз як корбар ин компютерро истифода барад, шумо метавонед баъд аз насбкунӣ якчанд ҳисобро эҷод намоед. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Шумо метавонед танҳо ҳарфҳои хурд, рақамҳо, зерхат ва нимтиреро истифода баред. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Номи ин компютер чист? + + + + Computer Name + Номи компютери шумо + + + + This name will be used if you make the computer visible to others on a network. + Ин ном истифода мешавад, агар шумо компютери худро барои дигарон дар шабака намоён кунед. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Барои эмин нигоҳ доштани ҳисоби худ ниҳонвожаеро интихоб намоед. + + + + Password + Ниҳонвожаро ворид намоед + + + + Repeat Password + Ниҳонвожаро тасдиқ намоед + + + + 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. + Ниҳонвожаи ягонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад. Ниҳонвожаи хуб бояд дар омезиш калимаҳо, рақамҳо ва аломатҳои китобатиро дар бар гирад, ақаллан аз ҳашт аломат иборат шавад ва мунтазам иваз карда шавад. + + + + Validate passwords quality + Санҷиши сифати ниҳонвожаҳо + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Агар шумо ин имконро интихоб кунед, қувваи ниҳонвожа тафтиш карда мешавад ва шумо ниҳонвожаи заифро истифода карда наметавонед. + + + + Log in automatically without asking for the password + Ба таври худкор бе дархости ниҳонвожа ворид карда шавад + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Ниҳонвожаи корбар ҳам барои ниҳонвожаи root истифода карда шавад + + + + Use the same password for the administrator account. + Ниҳонвожаи ягона барои ҳисоби маъмурӣ истифода бурда шавад. + + + + Choose a root password to keep your account safe. + Барои эмин нигоҳ доштани ҳисоби худ ниҳонвожаи root-ро интихоб намоед. + + + + Root Password + Ниҳонвожаи root + + + + Repeat Root Password + Ниҳонвожаи root-ро тасдиқ намоед + + + + Enter the same password twice, so that it can be checked for typing errors. + Ниҳонвожаи ягонаро ду маротиба ворид намоед, то ки он барои хатоҳои имлоӣ тафтиш карда шавад. + + + + welcomeq + + + <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> + <h3>Хуш омадед ба насбкунандаи <quote>%2</quote> барои %1</h3> + <p>Ин барнома аз Шумо якчанд савол мепурсад ва %1-ро дар компютери шумо танзим мекунад.</p> + + + + About + Дар бораи барнома + + + + Support + Дастгирӣ + + + + Known issues + Масъалаҳои маълум + + + + Release notes + Қайдҳои нашр + + + + Donate + Саҳмгузорӣ + + + diff --git a/lang/calamares_th.ts b/lang/calamares_th.ts index 8845f7f65..51433aaeb 100644 --- a/lang/calamares_th.ts +++ b/lang/calamares_th.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Master Boot Record ของ %1 - + Boot Partition - พาร์ทิชัน Boot + พาร์ทิชันบูต - + System Partition พาร์ทิชันระบบ - + Do not install a boot loader ไม่ต้องติดตั้งบูตโหลดเดอร์ - + %1 (%2) %1 (%2) @@ -50,66 +58,86 @@ Calamares::BlankViewStep - + Blank Page - + หน้าว่าง Calamares::DebugWindow - + Form ฟอร์ม - + GlobalStorage GlobalStorage - + JobQueue JobQueue - + Modules Modules - + Type: ประเภท: - - + + none - + ไม่มี - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information ข้อมูลดีบั๊ก @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + ตั้งค่า - + Install ติดตั้ง @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done เสร็จสิ้น @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 กำลังเรียกใช้คำสั่ง %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. การปฏิบัติการ %1 กำลังทำงาน - + Bad working directory path เส้นทางไดเรคทอรีที่ใช้ทำงานไม่ถูกต้อง - + Working directory %1 for python job %2 is not readable. ไม่สามารถอ่านไดเรคทอรีที่ใช้ทำงาน %1 สำหรับ python %2 ได้ - + Bad main script file ไฟล์สคริปต์หลักไม่ถูกต้อง - + Main script file %1 for python job %2 is not readable. ไม่สามารถอ่านไฟล์สคริปต์หลัก %1 สำหรับ python %2 ได้ - + Boost.Python error in job "%1". Boost.Python ผิดพลาดที่งาน "%1". @@ -210,39 +238,44 @@ Calamares::QmlViewStep - + Loading ... กำลังโหลด ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). - - + + กำลังรอ %n โมดูล - + (%n second(s)) - - + + (%n วินาที) - + System-requirements checking is complete. @@ -250,245 +283,236 @@ Calamares::ViewManager - - &Back - &B ย้อนกลับ - - - - &Next - &N ถัดไป - - - - &Cancel - &C ยกเลิก - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - + การตั้งค่าล้มเหลว - - Would you like to paste the install log to the web? - + + Installation Failed + การติดตั้งล้มเหลว - + + Error + ข้อผิดพลาด + + + + &Yes + &ใช่ + + + + &No + &ไม่ + + + + &Close + ปิ&ด + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - - Continue with installation? - + + Continue with setup? + ดำเนินการติดตั้งต่อหรือไม่? - + + Continue with installation? + ดำเนินการติดตั้งต่อหรือไม่? + + + 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> - + + 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> + ตัวติดตั้ง %1 กำลังพยายามที่จะทำการเปลี่ยนแปลงในดิสก์ของคุณเพื่อติดตั้ง %2<br/><strong>คุณจะไม่สามารถยกเลิกการเปลี่ยนแปลงเหล่านี้ได้</strong> + + + &Set up now - + ตั้&งค่าตอนนี้ - + + &Install now + &ติดตั้งตอนนี้ + + + + Go &back + กลั&บไป + + + &Set up - + ตั้&งค่า - + &Install - + ติ&ดตั้ง - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + &N ถัดไป + + + + &Back + &B ย้อนกลับ + + + + &Done + + + + + &Cancel + &C ยกเลิก + + + Cancel setup? - + Cancel installation? ยกเลิกการติดตั้ง? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. คุณต้องการยกเลิกกระบวนการติดตั้งที่กำลังดำเนินการอยู่หรือไม่? ตัวติดตั้งจะสิ้นสุดการทำงานและไม่บันทึกการเปลี่ยนแปลงที่ได้ดำเนินการก่อนหน้านี้ - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - ดำเนินการติดตั้งต่อหรือไม่? - - - - 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> - ตัวติดตั้ง %1 กำลังพยายามที่จะทำการเปลี่ยนแปลงในดิสก์ของคุณเพื่อติดตั้ง %2<br/><strong>คุณจะไม่สามารถยกเลิกการเปลี่ยนแปลงเหล่านี้ได้</strong> - - - - &Install now - &ติดตั้งตอนนี้ - - - - Go &back - กลั&บไป - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - ข้อผิดพลาด - - - - Installation Failed - การติดตั้งล้มเหลว - CalamaresPython::Helper - + Unknown exception type ข้อผิดพลาดไม่ทราบประเภท - + unparseable Python error ข้อผิดพลาด unparseable Python - + unparseable Python traceback ประวัติย้อนหลัง unparseable Python - + Unfetchable Python error. ข้อผิดพลาด Unfetchable Python - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - &B ย้อนกลับ - - - - &Next - &N ถัดไป - - - - &Cancel - &C ยกเลิก - - - + %1 Setup Program - + %1 Installer ตัวติดตั้ง %1 + + + ChangeFilesystemLabelJob - - Show debug information - แสดงข้อมูลการดีบั๊ก + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + ตัวติดตั้งไม่สามารถอัพเดทตารางพาร์ทิชันบนดิสก์ '%1' CheckerContainer - + Gathering system information... กำลังรวบรวมข้อมูลของระบบ... @@ -496,157 +520,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form ฟอร์ม - - After: - หลัง: - - - - Boot loader location: - ที่อยู่บูตโหลดเดอร์: - - - + Select storage de&vice: - + เลือกอุปก&รณ์จัดเก็บ: - - - - + + + + Current: ปัจจุบัน: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - + + After: + หลัง: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>กำหนดพาร์ทิชันด้วยตนเอง</strong><br/>คุณสามารถสร้างหรือเปลี่ยนขนาดของพาร์ทิชันได้ด้วยตนเอง + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + <strong>เลือกพาร์ทิชันที่จะลดขนาด แล้วลากแถบด้านล่างเพื่อปรับขนาด</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - - <strong>Select a partition to install on</strong> - + + Boot loader location: + ที่อยู่บูตโหลดเดอร์: - + + <strong>Select a partition to install on</strong> + <strong>เลือกพาร์ทิชันที่จะติดตั้ง</strong> + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. ไม่พบพาร์ทิชันสำหรับระบบ EFI อยู่ที่ไหนเลยในระบบนี้ กรุณากลับไปเลือกใช้การแบ่งพาร์ทิชันด้วยตนเอง เพื่อติดตั้ง %1 - + The EFI system partition at %1 will be used for starting %2. พาร์ทิชันสำหรับระบบ EFI ที่ %1 จะถูกใช้เพื่อเริ่มต้น %2 - + EFI system partition: พาร์ทิชันสำหรับระบบ EFI: - + 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. - + ดูเหมือนว่าอุปกรณ์จัดเก็บข้อมูลนี้ไม่มีระบบปฏิบัติการ คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บข้อมูลของคุณ - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - + <strong>ล้างดิสก์</strong><br/>การกระทำนี้จะ<font color="red">ลบ</font>ข้อมูลทั้งหมดที่อยู่บนอุปกรณ์จัดเก็บข้อมูลที่เลือก - - 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. - อุปกรณ์จัดเก็บนี้มีระบบปฏิบัติการ %1 อยู่ คุณต้องการทำอย่างไร?<br/> คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บของคุณ - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>ติดตั้งควบคู่กับระบบปฏิบัติการเดิม</strong><br/>ตัวติดตั้งจะลดเนื้อที่พาร์ทิชันเพื่อให้มีเนื้อที่สำหรับ %1 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>แทนที่พาร์ทิชัน</strong><br/>แทนที่พาร์ทิชันด้วย %1 - - 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. - อุปกรณ์จัดเก็บนี้มีระบบปฏิบัติการอยู่แล้ว คุณต้องการทำอย่างไร?<br/> คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บของคุณ + + 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. + อุปกรณ์จัดเก็บข้อมูลนี้มีระบบปฏิบัติการ %1 อยู่ คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บข้อมูลของคุณ - + + 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. + อุปกรณ์จัดเก็บข้อมูลนี้มีระบบปฏิบัติการอยู่แล้ว คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บข้อมูลของคุณ + + + 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. + อุปกรณ์จัดเก็บข้อมูลนี้มีหลายระบบปฏิบัติการ คุณต้องการทำอย่างไร?<br/>คุณจะสามารถทบทวนและยืนยันตัวเลือกของคุณก่อนที่จะกระทำการเปลี่ยนแปลงไปยังอุปกรณ์จัดเก็บข้อมูลของคุณ + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 ล้างจุดเชื่อมต่อสำหรับการแบ่งพาร์ทิชันบน %1 - + Clearing mounts for partitioning operations on %1. กำลังล้างจุดเชื่อมต่อสำหรับการดำเนินงานเกี่ยวกับพาร์ทิชันบน %1 - + Cleared all mounts for %1 ล้างจุดเชื่อมต่อทั้งหมดแล้วสำหรับ %1 @@ -654,22 +718,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. ล้างจุดเชื่อมต่อชั่วคราวทั้งหมด - + Clearing all temporary mounts. กำลังล้างจุดเชื่อมต่อชั่วคราวทุกจุด - - Cannot get list of temporary mounts. - ไม่สามารถดึงรายการจุดเชื่อมต่อชั่วคราวได้ - - - + Cleared all temporary mounts. จุดเชื่อมต่อชั่วคราวทั้งหมดถูกล้างแล้ว @@ -677,18 +736,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -696,100 +755,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - ขณะที่กำลังติดตั้ง ตัวติดตั้งฟ้องว่า คอมพิวเตอร์นี้มีความต้องการไม่เพียงพอที่จะติดตั้ง %1.<br/>ไม่สามารถทำการติดตั้งต่อไปได้ <a href="#details">รายละเอียด...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - คอมพิวเตอร์มีความต้องการไม่เพียงพอที่จะติดตั้ง %1<br/>สามารถทำการติดตั้งต่อไปได้ แต่ฟีเจอร์บางอย่างจะถูกปิดไว้ - - - - This program will ask you some questions and set up %2 on your computer. - โปรแกรมนี้จะถามคุณบางอย่าง เพื่อติดตั้ง %2 ไว้ในคอมพิวเตอร์ของคุณ - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>ยินดีต้อนรับสู่ตัวติดตั้ง Calamares สำหรับ %1</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>ยินดีต้อนรับสู่ตัวติดตั้ง %1</h1> - - - + Set keyboard model to %1.<br/> ตั้งค่าโมเดลแป้นพิมพ์เป็น %1<br/> - + Set keyboard layout to %1/%2. ตั้งค่าแบบแป้นพิมพ์เป็น %1/%2 - + + Set timezone to %1/%2. + ตั้งค่าโซนเวลาเป็น %1/%2 + + + The system language will be set to %1. ภาษาของระบบจะถูกตั้งค่าเป็น %1 - + The numbers and dates locale will be set to %1. - + ตำแหน่งที่ตั้งสำหรับหมายเลขและวันที่จะถูกตั้งค่าเป็น %1 - - Set timezone to %1/%2.<br/> - ตั้งโซนเวลาเป็น %1/%2<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + เลือกแพ็กเกจ + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + คอมพิวเตอร์เครื่องนี้มีความต้องการไม่เพียงพอที่จะตั้งค่า %1<br/>ไม่สามารถทำการตั้งค่าต่อไปได้ <a href="#details">รายละเอียด...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + คอมพิวเตอร์เครื่องนี้มีความต้องการไม่เพียงพอที่จะติดตั้ง %1<br/>ไม่สามารถทำการติดตั้งต่อไปได้ <a href="#details">รายละเอียด...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + คอมพิวเตอร์มีความต้องการไม่เพียงพอที่จะติดตั้ง %1<br/>สามารถทำการติดตั้งต่อไปได้ แต่ฟีเจอร์บางอย่างจะถูกปิดไว้ + + + + This program will ask you some questions and set up %2 on your computer. + โปรแกรมนี้จะถามคำถามต่าง ๆ เพื่อติดตั้ง %2 ลงในคอมพิวเตอร์ของคุณ + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + <h1>ยินดีต้อนรับสู่ตัวตั้งค่า %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>ยินดีต้อนรับสู่ตัวติดตั้ง Calamares สำหรับ %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>ยินดีต้อนรับสู่ตัวติดตั้ง %1</h1> + + + + Your username is too long. + ชื่อผู้ใช้ของคุณยาวเกินไป + + + + '%1' is not allowed as username. + ไม่อนุญาตให้ใช้ '%1' เป็นชื่อผู้ใช้ + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + ชื่อโฮสต์ของคุณสั้นเกินไป + + + + Your hostname is too long. + ชื่อโฮสต์ของคุณยาวเกินไป + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + รหัสผ่านของคุณไม่ตรงกัน! + + + + OK! + ตกลง! + + + + Setup Failed + การตั้งค่าล้มเหลว + + + + Installation Failed + การติดตั้งล้มเหลว + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + การติดตั้งเสร็จสิ้น + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + การติดตั้ง %1 เสร็จสิ้น + + + + Package Selection + เลือกแพ็กเกจ + + + + Please pick a product from the list. The selected product will be installed. + เลือกผลิตภัณฑ์จากรายการ ผลิตภัณฑ์ที่เลือกไว้จะถูกติดตั้ง + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + สาระสำคัญ + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -797,100 +991,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition สร้างพาร์ทิชัน - - MiB - - - - - Partition &Type: - &T พาร์ทิชันและประเภท: - - - - &Primary - &P หลัก - - - - E&xtended - &X ขยาย - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - Flags: - - - - &Mount Point: - &M จุดเชื่อมต่อ: - - - + Si&ze: &Z ขนาด: - + + MiB + + + + + Partition &Type: + &T พาร์ทิชันและประเภท: + + + + Primar&y + + + + + E&xtended + &X ขยาย + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + &M จุดเชื่อมต่อ: + + + + Flags: + Flags: + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical โลจิคอล - + Primary หลัก - + GPT GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. ตัวติดตั้งไม่สามารถสร้างพาร์ทิชันบนดิสก์ '%1' @@ -898,27 +1128,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table สร้างตารางพาร์ทิชัน - + Creating a new partition table will delete all existing data on the disk. การสร้างตารางพาร์ทิชันใหม่จะลบข้อมูลทั้งหมดบนดิสก์ - + What kind of partition table do you want to create? คุณต้องการสร้างตารางพาร์ทิชันชนิดใด? - + Master Boot Record (MBR) Master Boot Record (MBR) - + GUID Partition Table (GPT) GUID Partition Table (GPT) @@ -926,22 +1156,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + สร้างตารางพาร์ทิชัน %1 ใหม่บน %2 - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + สร้างตารางพาร์ทิชัน <strong>%1</strong> ใหม่บน <strong>%2</strong> (%3) - + Creating new %1 partition table on %2. - + กำลังสร้างตารางพาร์ทิชัน %1 ใหม่บน %2 - + The installer failed to create a partition table on %1. ตัวติดตั้งไม่สามารถสร้างตารางพาร์ทิชันบน %1 @@ -949,45 +1179,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 สร้างผู้ใช้ %1 - + Create user <strong>%1</strong>. + สร้างผู้ใช้ <strong>%1</strong> + + + + Preserving home directory - - Creating user %1. + + + Creating user %1 + กำลังสร้างผู้ใช้ %1 + + + + Configuring user %1 + กำลังกำหนดค่าผู้ใช้ %1 + + + + Setting file permissions - - - Sudoers dir is not writable. - ไม่สามารถเขียนไดเรคทอรี Sudoers ได้ - - - - Cannot create sudoers file for writing. - ไม่สามารถสร้างไฟล์ sudoers เพื่อเขียนได้ - - - - Cannot chmod sudoers file. - ไม่สามารถ chmod ไฟล์ sudoers - - - - Cannot open groups file for reading. - ไม่สามารถเปิดไฟล์ groups เพื่ออ่านได้ - CreateVolumeGroupDialog - + Create Volume Group @@ -995,22 +1221,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1018,18 +1244,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1037,22 +1263,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + ลบพาร์ทิชัน %1 - + Delete partition <strong>%1</strong>. - + ลบพาร์ทิชัน <strong>%1</strong> - + Deleting partition %1. - + กำลังลบพาร์ทิชัน %1 - + The installer failed to delete partition %1. ตัวติดตั้งไม่สามารถลบพาร์ทิชัน %1 @@ -1060,46 +1286,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + อุปกรณ์นี้มีตารางพาร์ทิชัน <strong>%1</strong> - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) @@ -1108,25 +1334,25 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 - + ไม่สามารถเปิด %1 DummyCppJob - + Dummy C++ Job @@ -1134,123 +1360,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition แก้ไขพาร์ทิชันที่มีอยู่เดิม - - Content: - เนื้อหา: - - - - &Keep + + Con&tent: - + + &Keep + &เก็บไว้ + + + Format ฟอร์แมท - + Warning: Formatting the partition will erase all existing data. คำเตือน: การฟอร์แมทพาร์ทิชันจะลบข้อมูลที่มีอยู่เดิมทั้งหมด - + &Mount Point: &M จุดเชื่อมต่อ: - + Si&ze: &Z ขนาด: - + MiB - + Fi&le System: - + Flags: Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form ฟอร์ม - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information ตั้งค่าข้อมูลพาร์ทิชัน - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1258,93 +1528,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form ฟอร์ม - + &Restart now &R เริ่มต้นใหม่ทันที - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - <h1>เสร็จสิ้น</h1><br/>%1 ติดตั้งบนคอมพิวเตอร์ของคุณเรียบร้อย<br/>คุณสามารถเริ่มทำงานเพื่อเข้าระบบใหม่ของคุณ หรือดำเนินการใช้ %2 Live environment ต่อไป + <h1>เสร็จสิ้น</h1><br/>%1 ติดตั้งบนคอมพิวเตอร์ของคุณเรียบร้อย<br/>คุณสามารถเริ่มต้นใหม่เพื่อเข้าสู่ระบบใหม่ของคุณ หรือดำเนินการใช้ %2 ในแบบไม่ต้องติดตั้ง (Live) ต่อไป - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>การติดตั้งไม่สำเร็จ</h1><br/>%1 ไม่ได้ถูกติดตั้งลงบนคอมพิวเตอร์ของคุณ<br/>ข้อความข้อผิดพลาดคือ: %2 - FinishedViewStep + FinishedQmlViewStep - + Finish สิ้นสุด + + + FinishedViewStep - - Setup Complete - - - - - Installation Complete - การติดตั้งเสร็จสิ้น - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - การติดตั้ง %1 เสร็จสิ้น + + Finish + สิ้นสุด FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. ตัวติดตั้งไม่สามารถฟอร์แมทพาร์ทิชัน %1 บนดิสก์ '%2' @@ -1352,106 +1610,106 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source เชื่อมต่อปลั๊กเข้ากับแหล่งจ่ายไฟ - + The system is not plugged in to a power source. - + ระบบนี้ไม่ได้เชื่อมต่อปลั๊กเข้ากับแหล่งจ่ายไฟ - + is connected to the Internet เชื่อมต่อกับอินเทอร์เน็ต - + The system is not connected to the Internet. ระบบไม่ได้เชื่อมต่อกับอินเทอร์เน็ต - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + มีหน้าจอใหญ่พอที่จะแสดงผลตัวติดตั้งได้ทั้งหมด - + The screen is too small to display the setup program. - + The screen is too small to display the installer. - + หน้าจอเล็กเกินกว่าที่จะแสดงผลตัวติดตั้ง HostInfoJob - + Collecting information about your machine. - + กำลังรวบรวมข้อมูลเกี่ยวกับเครื่องของคุณ IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1459,7 +1717,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1467,7 +1725,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1475,17 +1733,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + ไม่ได้ติดตั้ง Konsole - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1493,28 +1751,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - ตั้งค่าโมเดลแป้นพิมพ์เป็น %1<br/> - - - - Set keyboard layout to %1/%2. - ตั้งค่าแบบแป้นพิมพ์เป็น %1/%2 - - KeyboardQmlViewStep - + Keyboard แป้นพิมพ์ @@ -1522,7 +1767,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard แป้นพิมพ์ @@ -1530,65 +1775,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - การตั้งค่า locale ระบบ + การตั้งค่าตำแหน่งที่ตั้งระบบ - + 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>. - + &Cancel &C ยกเลิก - + &OK + &O ตกลง + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. LicensePage - + Form แบบฟอร์ม - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1596,7 +1864,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1604,109 +1872,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 + ไฟล์: %1 + + + + Hide license text - + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - ภาษาของระบบจะถูกตั้งค่าเป็น %1 - - - - The numbers and dates locale will be set to %1. - - - - + Region: ภูมิภาค: - + Zone: โซน: - - + + &Change... &C เปลี่ยนแปลง... - - - Set timezone to %1/%2.<br/> - ตั้งโซนเวลาเป็น %1/%2<br/> - LocaleQmlViewStep - + Location ตำแหน่ง + + LocaleTests + + + Quit + ออก + + LocaleViewStep - + Location ตำแหน่ง @@ -1714,35 +1975,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1750,116 +2011,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + เขตเวลา: %1 + + + + 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. + + + NetInstallViewStep - - + Package selection - + เลือกแพ็กเกจ - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel เคอร์เนล - + Services บริการ - + Login - + เข้าสู่ระบบ - + Desktop - + เดสก์ท็อป - + Applications - + แอปพลิเคชัน - + Communication - + การสื่อสาร - + Development - + การพัฒนา - + Office - + ออฟฟิศ - + Multimedia - + สื่อ - + Internet - + อินเทอร์เน็ต - + Theming - + การปรับแต่ง - + Gaming - + เกม - + Utilities @@ -1867,7 +2142,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1875,17 +2150,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1893,260 +2168,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + เขตเวลา: %1 + + + + Select your preferred Zone within your Region. + + + + + Zones + เขต + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short รหัสผ่านสั้นเกินไป - + Password is too long รหัสผ่านยาวเกินไป - + Password is too weak รหัสผ่านอ่อนเกินไป - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one รหัสผ่านเหมือนกับรหัสผ่านเก่า - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one รหัสผ่านคล้ายกับรหัสผ่านเก่าจนเกินไป - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short รหัสผ่านสั้นเกินไป - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + The password is shorter than %n characters + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + The password contains more than %n same characters consecutively + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + The password contains too long of a monotonic character sequence - + No password supplied ไม่ได้กำหนดรหัสผ่าน - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error ข้อผิดพลาดที่ไม่รู้จัก - + Password is empty รหัสผ่านว่าง @@ -2154,53 +2477,61 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form ฟอร์ม - + Product Name - + ชื่อผลิตภัณฑ์ - + TextLabel - + Long Product Description - + คำอธิบายผลิตภัณฑ์แบบยาว - + Package Selection - + เลือกแพ็กเกจ - + Please pick a product from the list. The selected product will be installed. - + เลือกผลิตภัณฑ์จากรายการ ผลิตภัณฑ์ที่เลือกไว้จะถูกติดตั้ง + + + + PackageChooserQmlViewStep + + + Packages + แพ็กเกจ PackageChooserViewStep - + Packages - + แพ็กเกจ PackageModel - + Name ชื่อ - + Description คำอธิบาย @@ -2208,17 +2539,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form ฟอร์ม - + Keyboard Model: โมเดลแป้นพิมพ์: - + Type here to test your keyboard พิมพ์ที่นี่เพื่อทดสอบแป้นพิมพ์ของคุณ @@ -2226,96 +2557,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form ฟอร์ม - + What is your name? - ชื่อของคุณคือ? + ชื่อของคุณคืออะไร? - - What name do you want to use to log in? - ชื่อที่คุณต้องการใช้ในการล็อกอิน? - - - - Choose a password to keep your account safe. - เลือกรหัสผ่านเพื่อรักษาบัญชีผู้ใช้ของคุณให้ปลอดภัย - - - - - <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> - <small>ใส่รหัสผ่านเดียวกันซ้ำ 2 ครั้ง เพื่อเป็นการตรวจสอบข้อผิดพลาดจากการพิมพ์ รหัสผ่านที่ดีจะต้องมีการผสมกันระหว่าง ตัวอักษรภาษาอังกฤษ ตัวเลข และสัญลักษณ์ ควรมีความยาวอย่างน้อย 8 ตัวอักขระ และควรมีการเปลี่ยนรหัสผ่านเป็นประจำ</small> - - - - What is the name of this computer? - คอมพิวเตอร์เครื่องนี้ชื่อ? - - - + Your Full Name ชื่อเต็มของคุณ - + + What name do you want to use to log in? + ใส่ชื่อที่คุณต้องการใช้ในการเข้าสู่ระบบ + + + login เข้าสู่ระบบ - + + What is the name of this computer? + คอมพิวเตอร์เครื่องนี้ชื่ออะไร? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>ชื่อนี้จะถูกใช้ถ้าคุณตั้งค่าให้เครื่องอื่นๆ มองเห็นคอมพิวเตอร์ของคุณบนเครือข่าย</small> - + Computer Name ชื่อคอมพิวเตอร์ - - + + Choose a password to keep your account safe. + เลือกรหัสผ่านเพื่อรักษาบัญชีผู้ใช้ของคุณให้ปลอดภัย + + + + + <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> + <small>ใส่รหัสผ่านเดียวกันซ้ำ 2 ครั้ง เพื่อเป็นการตรวจสอบข้อผิดพลาดจากการพิมพ์ รหัสผ่านที่ดีจะต้องมีการผสมกันระหว่าง ตัวอักษรภาษาอังกฤษ ตัวเลข และสัญลักษณ์ ควรมีความยาวอย่างน้อย 8 ตัวอักขระ และควรมีการเปลี่ยนรหัสผ่านเป็นประจำ</small> + + + + Password รหัสผ่าน - - + + Repeat Password กรอกรหัสผ่านซ้ำ - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. เลือกรหัสผ่านสำหรับบัญชีผู้ใช้ผู้ดูแลระบบ - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>ใส่รหัสผ่านเดิมซ้ำ 2 ครั้ง เพื่อเป็นการตรวจสอบข้อผิดพลาดที่เกิดจากการพิมพ์</small> @@ -2323,42 +2654,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition พาร์ทิชันใหม่ - + %1 %2 size[number] filesystem[name] @@ -2367,34 +2698,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space พื้นที่ว่าง - - + + New partition พาร์ทิชันใหม่ - + Name ชื่อ - + File System ระบบไฟล์ - + + File System Label + + + + Mount Point จุดเชื่อมต่อ - + Size ขนาด @@ -2402,77 +2738,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form ฟอร์ม - + Storage de&vice: - + &Revert All Changes &R คืนค่าการเปลี่ยนแปลงทั้งหมด - + New Partition &Table &T ตารางพาร์ทิชันใหม่ - + Cre&ate - + &Edit &E แก้ไข - + &Delete &D ลบ - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? คุณแน่ใจว่าจะสร้างตารางพาร์ทิชันใหม่บน %1? - + Can not create new partition - + 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. @@ -2480,117 +2816,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... กำลังรวบรวมข้อมูลของระบบ... - + Partitions พาร์ทิชัน - - Install %1 <strong>alongside</strong> another operating system. - ติดตั้ง %1 <strong>ควบคู่</strong>กับระบบปฏิบัติการเดิม - - - - <strong>Erase</strong> disk and install %1. + + Unsafe partition actions are enabled. - - <strong>Replace</strong> a partition with %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Manual</strong> partitioning. + + No partitions will be changed. - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: ปัจจุบัน: - + After: หลัง: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2598,13 +2924,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2612,17 +2938,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form ฟอร์ม - + 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. - + 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. @@ -2630,7 +2956,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2638,17 +2964,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2656,65 +2982,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. พารามิเตอร์ไม่ถูกต้องสำหรับการเรียกการทำงาน - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2722,89 +3048,94 @@ Output: QObject - - Default Keyboard Model - โมเดลแป้นพิมพ์ค่าเริ่มต้น - - - - - Default - ค่าเริ่มต้น - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) %1 (%2) - - No product + + unknown - - No description provided. - ไม่ได้ระบุคำอธิบาย + + extended + - - - - + + unformatted + + + + + swap + + + + + + Default + ค่าเริ่มต้น + + + + + + File not found ไม่พบไฟล์ - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + ไม่ได้ระบุคำอธิบาย + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2812,18 +3143,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2831,143 +3162,158 @@ Output: ReplaceWidget - + Form ฟอร์ม - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. เลือกที่ที่จะติดตั้ง %1<br/><font color="red">คำเตือน: </font>ตัวเลือกนี้จะลบไฟล์ทั้งหมดบนพาร์ทิชันที่เลือก - + The selected item does not appear to be a valid partition. ไอเทมที่เลือกไม่ใช่พาร์ทิชันที่ถูกต้อง - + %1 cannot be installed on empty space. Please select an existing partition. ไม่สามารถติดตั้ง %1 บนพื้นที่ว่าง กรุณาเลือกพาร์ทิชันที่มี - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. ไม่สามารถติดตั้ง %1 บนพาร์ทิชัน extended กรุณาเลือกพาร์ทิชันหลักหรือพาร์ทิชันโลจิคัลที่มีอยู่ - + %1 cannot be installed on this partition. ไม่สามารถติดตั้ง %1 บนพาร์ทิชันนี้ - + Data partition (%1) พาร์ทิชันข้อมูล (%1) - + Unknown system partition (%1) พาร์ทิชันระบบที่ไม่รู้จัก (%1) - + %1 system partition (%2) %1 พาร์ทิชันระบบ (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. พาร์ทิชันสำหรับระบบ EFI ที่ %1 จะถูกใช้เพื่อเริ่มต้น %2 - + EFI system partition: พาร์ทิชันสำหรับระบบ EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2975,22 +3321,22 @@ Output: ResizePartitionJob - + Resize partition %1. เปลี่ยนขนาดพาร์ทิชัน %1 - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. ตัวติดตั้งไม่สามารถเปลี่ยนขนาดพาร์ทิชัน %1 บนดิสก์ '%2' @@ -2998,7 +3344,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3006,18 +3352,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3025,53 +3371,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: สำหรับผลลัพธ์ที่ดีขึ้น โปรดตรวจสอบให้แน่ใจว่าคอมพิวเตอร์เครื่องนี้: - + System requirements ความต้องการของระบบ - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - ขณะที่กำลังติดตั้ง ตัวติดตั้งฟ้องว่า คอมพิวเตอร์นี้มีความต้องการไม่เพียงพอที่จะติดตั้ง %1.<br/>ไม่สามารถทำการติดตั้งต่อไปได้ <a href="#details">รายละเอียด...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - คอมพิวเตอร์มีความต้องการไม่เพียงพอที่จะติดตั้ง %1<br/>สามารถทำการติดตั้งต่อไปได้ แต่ฟีเจอร์บางอย่างจะถูกปิดไว้ - - - - This program will ask you some questions and set up %2 on your computer. - โปรแกรมนี้จะถามคุณบางอย่าง เพื่อติดตั้ง %2 ไว้ในคอมพิวเตอร์ของคุณ - - ScanningDialog - + Scanning storage devices... กำลังสแกนอุปกรณ์จัดเก็บข้อมูล... - + Partitioning @@ -3079,29 +3397,29 @@ Output: SetHostNameJob - + Set hostname %1 ตั้งค่าชื่อโฮสต์ %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error ข้อผิดพลาดภายใน - - + + Cannot write hostname to target system ไม่สามารถเขียนชื่อโฮสต์ไปที่ระบบเป้าหมาย @@ -3109,29 +3427,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 ตั้งค่าโมเดลแป้นพิมพ์เป็น %1 แบบ %2-%3 - + Failed to write keyboard configuration for the virtual console. ไม่สามารถเขียนการตั้งค่าแป้นพิมพ์สำหรับคอนโซลเสมือน - - - + + + Failed to write to %1 ไม่สามารถเขียนไปที่ %1 - + Failed to write keyboard configuration for X11. ไม่สามาถเขียนการตั้งค่าแป้นพิมพ์สำหรับ X11 - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3139,82 +3457,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3222,42 +3540,42 @@ Output: SetPasswordJob - + Set password for user %1 ตั้งรหัสผ่านสำหรับผู้ใช้ %1 - + Setting password for user %1. - + Bad destination system path. path ของระบบเป้าหมายไม่ถูกต้อง - + rootMountPoint is %1 rootMountPoint คือ %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. ไม่สามารถตั้งค่ารหัสผ่านสำหรับผู้ใช้ %1 - + usermod terminated with error code %1. usermod จบด้วยโค้ดข้อผิดพลาด %1 @@ -3265,45 +3583,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 ตั้งโซนเวลาเป็น %1/%2 - + Cannot access selected timezone path. ไม่สามารถเข้าถึง path โซนเวลาที่เลือก - + Bad path: %1 path ไม่ถูกต้อง: %1 - + Cannot set timezone. ไม่สามารถตั้งค่าโซนเวลาได้ - + Link creation failed, target: %1; link name: %2 การสร้างการเชื่อมโยงล้มเหลว เป้าหมาย: %1 ชื่อการเชื่อมโยง: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + กำหนดค่าผู้ใช้ <pre>sudo</pre> + + + + Cannot chmod sudoers file. + ไม่สามารถ chmod ไฟล์ sudoers + + + + Cannot create sudoers file for writing. + ไม่สามารถสร้างไฟล์ sudoers เพื่อเขียนได้ + + ShellProcessJob - + Shell Processes Job @@ -3311,81 +3666,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - + + &OK + &O ตกลง - - This is an overview of what will happen once you start the install procedure. - + + &Yes + &ใช่ - - - SummaryViewStep - - Summary - สาระสำคัญ + + &No + &ไม่ + + + + &Cancel + &C ยกเลิก + + + + &Close + ปิ&ด TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3393,106 +3784,97 @@ Output: TrackingPage - + Form ฟอร์ม - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - ชื่อผู้ใช้ของคุณยาวเกินไป - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - ชื่อโฮสต์ของคุณสั้นเกินไป - - - - Your hostname is too long. - ชื่อโฮสต์ของคุณยาวเกินไป - - - - Your passwords do not match! - รหัสผ่านของคุณไม่ตรงกัน! + + Users + ผู้ใช้ UsersViewStep - + Users ผู้ใช้ @@ -3500,65 +3882,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value ค่า VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + ขนาดทั้งหมด: - + Used Size: - + ขนาดที่ใช้ไป: - + Total Sectors: - + Quantity of LVs: @@ -3566,106 +3950,106 @@ Output: WelcomePage - + Form แบบฟอร์ม - - + + Select application and system language + &About + &เกี่ยวกับ + + + Open donations website - + &Donate - + Open help and support website เปิดเว็บไซต์ช่วยเหลือและสนับสนุน + &Support + &S ช่วยเหลือ + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues &K ปัญหาที่รู้จัก - - &Support - &S ช่วยเหลือ + + Open release notes website + - - &About - &A เกี่ยวกับ + + &Release notes + - - <h1>Welcome to the %1 installer.</h1> - <h1>ยินดีต้อนรับสู่ตัวติดตั้ง %1</h1> + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>ยินดีต้อนรับสู่โปรแกรมตั้งค่า Calamares สำหรับ %1</h1> - + + <h1>Welcome to %1 setup.</h1> + <h1>ยินดีต้อนรับสู่ตัวตั้งค่า %1</h1> + + + <h1>Welcome to the Calamares installer for %1.</h1> <h1>ยินดีต้อนรับสู่ตัวติดตั้ง Calamares สำหรับ %1</h1> - - <h1>Welcome to the Calamares setup program for %1.</h1> + + <h1>Welcome to the %1 installer.</h1> + <h1>ยินดีต้อนรับสู่ตัวติดตั้ง %1</h1> + + + + %1 support - - <h1>Welcome to %1 setup.</h1> - - - - + About %1 setup - + เกี่ยวกับตัวตั้งค่า %1 - + About %1 installer เกี่ยวกับตัวติดตั้ง %1 - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome ยินดีต้อนรับ @@ -3673,118 +4057,441 @@ Output: WelcomeViewStep - + Welcome ยินดีต้อนรับ + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + ย้อนกลับ + + + + calamares-sidebar + + + Show debug information + แสดงข้อมูลการดีบั๊ก + + + + finishedq + + + Installation Completed + การติดตั้งเสร็จสิ้น + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + Close Installer + ปิดตัวติดตั้ง + + + + Restart System + เริ่มต้นระบบใหม่ + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + การติดตั้งเสร็จสิ้น + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + ย้อนกลับ + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + โมเดลแป้นพิมพ์: - - Refresh - - - - - + Layouts - - - Keyboard Layout - + + Type here to test your keyboard + พิมพ์ที่นี่เพื่อทดสอบแป้นพิมพ์ของคุณ - - Models - - - - + Variants + + + localeq - - Test your keyboard - + + Change + เปลี่ยน notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + ย้อนกลับ + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + ชื่อของคุณคืออะไร? + + + + Your Full Name + ชื่อเต็มของคุณ + + + + What name do you want to use to log in? + ใส่ชื่อที่คุณต้องการใช้ในการเข้าสู่ระบบ + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + คอมพิวเตอร์เครื่องนี้ชื่ออะไร? + + + + Computer Name + ชื่อคอมพิวเตอร์ + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + เลือกรหัสผ่านเพื่อรักษาบัญชีผู้ใช้ของคุณให้ปลอดภัย + + + + Password + รหัสผ่าน + + + + Repeat Password + กรอกรหัสผ่านซ้ำ + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About เกี่ยวกับ - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_tr_TR.ts b/lang/calamares_tr_TR.ts index d2470a551..d730f4867 100644 --- a/lang/calamares_tr_TR.ts +++ b/lang/calamares_tr_TR.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Otomatik bağlama ayarlarını yönet + + BootInfoWidget - + 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. Bu sistemdeki<br> <strong>önyükleme arayüzü</strong> sadece eski x86 sistem ve <strong>BIOS</strong> destekler. <br>Modern sistemler genellikle <strong>EFI</strong> kullanır fakat önyükleme arayüzü uyumlu modda ise BIOS seçilebilir. - + 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. Bu sistem, bir <strong>EFI</strong> önyükleme arayüzü ile başladı.<br><br>EFI ortamından başlangıcı yapılandırmak için, bu yükleyici <strong>EFI Sistem Bölümü</strong> üzerinde <strong>GRUB</strong> veya <strong>systemd-boot</strong> gibi bir önyükleyici oluşturmalıdır. Bunu otomatik olarak yapabileceğiniz gibi elle disk bölümleri oluşturarak ta yapabilirsiniz. - + 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. Bu sistem, bir <strong>BIOS</strong> önyükleme arayüzü ile başladı.<br><br>BIOS ortamında önyükleme için, yükleyici bölümün başında veya bölüm tablosu başlangıcına yakın <strong>Master Boot Record</strong> üzerine <strong>GRUB</strong> gibi bir önyükleyici yüklemeniz gerekir (önerilir). Eğer bu işlemin otomatik olarak yapılmasını istemez iseniz elle bölümleme yapabilirsiniz. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1 Üzerine Önyükleyici Kur - + Boot Partition Önyükleyici Disk Bölümü - + System Partition Sistem Disk Bölümü - + Do not install a boot loader Bir önyükleyici kurmayın - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Boş Sayfa @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Biçim - + GlobalStorage KüreselDepo - + JobQueue İşKuyruğu - + Modules Eklentiler - + Type: Tipi: - - + + none hiçbiri - + Interface: Arayüz: - - Tools - Araçlar + + Crashes Calamares, so that Dr. Konqui can look at it. + Calamares çöker, böylece Dr. Konqui bakabilir. - + + Reloads the stylesheet from the branding directory. + Stil sayfasını marka dizininden yeniden yükler. + + + + Uploads the session log to the configured pastebin. + Oturum günlüğünü yapılandırılmış pastebin'e yükler. + + + + Send Session Log + Oturum Günlüğünü Gönder + + + Reload Stylesheet Stil Sayfasını Yeniden Yükle - + + Displays the tree of widget names in the log (for stylesheet debugging). + Günlükte pencere öğesi adlarının ağacını görüntüler (stil sayfası hata ayıklaması için). + + + Widget Tree Gereç Ağacı - + Debug information Hata ayıklama bilgisi @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Kur - + Install Sistem Kuruluyor @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) İş hatası (%1) - + Programmed job failure was explicitly requested. Programlanmış iş arızası açıkça istendi. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Sistem kurulumu tamamlandı, kurulum aracından çıkabilirsiniz. @@ -151,25 +179,25 @@ Calamares::NamedJob - + Example job (%1) - Örnek İş (%1) + Örnek iş (%1) Calamares::ProcessJob - + Run command '%1' in target system. Hedef sistemde '%1' komutunu çalıştırın. - + Run command '%1'. '%1' komutunu çalıştırın. - + Running command %1 %2 %1 Komutu çalışıyor %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. %1 işlemleri yapılıyor. - + Bad working directory path Dizin yolu kötü çalışıyor - + Working directory %1 for python job %2 is not readable. %2 python işleri için %1 dizinleme çalışırken okunamadı. - + Bad main script file Sorunlu betik dosyası - + Main script file %1 for python job %2 is not readable. %2 python işleri için %1 sorunlu betik okunamadı. - + Boost.Python error in job "%1". Boost.Python iş hatası "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Yükleniyor ... - + QML Step <i>%1</i>. QML Adımı <i>%1</i>. - + Loading failed. Yükleme başarısız. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + <i>%1</i> modülü için gerekenler tamamlandı. + - + Waiting for %n module(s). %n modülü bekleniyor. @@ -236,15 +269,15 @@ - + (%n second(s)) (%n saniye(ler)) - (%n saniye) + (%n saniye(ler)) - + System-requirements checking is complete. Sistem gereksinimleri kontrolü tamamlandı. @@ -252,247 +285,241 @@ Calamares::ViewManager - - &Back - &Geri - - - - &Next - &Sonraki - - - - &Cancel - &Vazgeç - - - - Cancel setup without changing the system. - Sistemi değiştirmeden kurulumu iptal edin. - - - - Cancel installation without changing the system. - Sistemi değiştirmeden kurulumu iptal edin. - - - + Setup Failed Kurulum Başarısız - - Would you like to paste the install log to the web? - Yükleme günlüğünü web'e yapıştırmak ister misiniz? + + Installation Failed + Kurulum Başarısız - + + Error + Hata + + + + &Yes + &Evet + + + + &No + &Hayır + + + + &Close + &Kapat + + + Install Log Paste URL Günlük Yapıştırma URL'sini Yükle - + The upload was unsuccessful. No web-paste was done. Yükleme başarısız oldu. Web yapıştırması yapılmadı. - + + Install log posted to + +%1 + +Link copied to clipboard + Şurada yayınlanan günlüğü yükle + +%1 + +link panoya kopyalandı + + + Calamares Initialization Failed Calamares Başlatılamadı - + %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. %1 yüklenemedi. Calamares yapılandırılmış modüllerin bazılarını yükleyemedi. Bu, Calamares'in kullandığınız dağıtıma uyarlamasından kaynaklanan bir sorundur. - + <br/>The following modules could not be loaded: <br/>Aşağıdaki modüller yüklenemedi: - - Continue with installation? - Kuruluma devam edilsin mi? + + Continue with setup? + Kuruluma devam et? - + + Continue with installation? + Kurulum devam etsin mi? + + + 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> %1 sistem kurulum uygulaması,%2 ayarlamak için diskinizde değişiklik yapmak üzere. <br/><strong>Bu değişiklikleri geri alamayacaksınız.</strong> - + + 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> + %1 sistem yükleyici %2 yüklemek için diskinizde değişiklik yapacak.<br/><strong>Bu değişiklikleri geri almak mümkün olmayacak.</strong> + + + &Set up now &Şimdi kur - + + &Install now + &Şimdi yükle + + + + Go &back + Geri &git + + + &Set up &Kur - + &Install &Yükle - + Setup is complete. Close the setup program. Kurulum tamamlandı. Kurulum programını kapatın. - + + The installation is complete. Close the installer. + Yükleme işi tamamlandı. Sistem yükleyiciyi kapatın. + + + + Cancel setup without changing the system. + Sistemi değiştirmeden kurulumu iptal edin. + + + + Cancel installation without changing the system. + Sistemi değiştirmeden kurulumu iptal edin. + + + + &Next + &Sonraki + + + + &Back + &Geri + + + + &Done + &Tamam + + + + &Cancel + &Vazgeç + + + Cancel setup? Kurulum iptal edilsin mi? - + Cancel installation? Yüklemeyi iptal et? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Mevcut kurulum işlemini gerçekten iptal etmek istiyor musunuz? Kurulum uygulaması sonlandırılacak ve tüm değişiklikler kaybedilecek. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Yükleme işlemini gerçekten iptal etmek istiyor musunuz? Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. - - - - &Yes - &Evet - - - - - &No - &Hayır - - - - &Close - &Kapat - - - - Continue with setup? - Kuruluma devam et? - - - - 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> - %1 sistem yükleyici %2 yüklemek için diskinizde değişiklik yapacak.<br/><strong>Bu değişiklikleri geri almak mümkün olmayacak.</strong> - - - - &Install now - &Şimdi yükle - - - - Go &back - Geri &git - - - - &Done - &Tamam - - - - The installation is complete. Close the installer. - Yükleme işi tamamlandı. Sistem yükleyiciyi kapatın. - - - - Error - Hata - - - - Installation Failed - Kurulum Başarısız - CalamaresPython::Helper - + Unknown exception type Bilinmeyen Özel Durum Tipi - + unparseable Python error Python hata ayıklaması - + unparseable Python traceback Python geri çekme ayıklaması - + Unfetchable Python error. Okunamayan Python hatası. - - CalamaresUtils - - - Install log posted to: -%1 - Gönderilen log yüklemesi: -%1 - - CalamaresWindow - - &Back - &Geri - - - - &Next - &Sonraki - - - - &Cancel - &Vazgeç - - - + %1 Setup Program %1 Kurulum Uygulaması - + %1 Installer %1 Yükleniyor + + + ChangeFilesystemLabelJob - - Show debug information - Hata ayıklama bilgisini göster + + Set filesystem label on %1. + Dosya sistemi etiketini %1 olarak ayarla. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + <strong>%1</strong> dosya sistemi etiketini <strong>%2</strong> bölümüne ayarlayın. + + + + The installer failed to update partition table on disk '%1'. + Yükleyici '%1' diskinde bölümleme tablosunu güncelleyemedi. CheckerContainer - + Gathering system information... Sistem bilgileri toplanıyor... @@ -500,158 +527,198 @@ Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. ChoicePage - + Form Biçim - - After: - Sonra: - - - - Boot loader location: - Önyükleyici konumu: - - - + Select storage de&vice: Depolama ay&gıtı seç: - - - - + + + + Current: Geçerli: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>El ile bölümleme</strong><br/> Bölümleri kendiniz oluşturabilir veya yeniden boyutlandırabilirsiniz. Bir GPT bölüm tablosu ve <strong>fat32 512Mb / önyükleme bölümlemesi olması UEFI yüklemeleri için bir gerekliliktir,</strong> ya biçimlendirme olmadan mevcut kullanın veya bir tane oluşturun. + + After: + Sonra: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Elle bölümleme</strong><br/>Bölümler oluşturabilir ve boyutlandırabilirsiniz. + + + Reuse %1 as home partition for %2. %2 ev bölümü olarak %1 yeniden kullanılsın. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Küçültmek için bir bölüm seçip alttaki çubuğu sürükleyerek boyutlandır</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1, %2MB'a küçülecek ve %4 için yeni bir %3MB disk bölümü oluşturulacak. - + + Boot loader location: + Önyükleyici konumu: + + + <strong>Select a partition to install on</strong> <strong>Yükleyeceğin disk bölümünü seç</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. Bu sistemde EFI disk bölümü bulunamadı. Lütfen geri dönün ve %1 kurmak için gelişmiş kurulum seçeneğini kullanın. - + The EFI system partition at %1 will be used for starting %2. %1 EFI sistem bölümü %2 başlatmak için kullanılacaktır. - + EFI system partition: EFI sistem bölümü: - + 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. Bu depolama aygıtı üzerinde yüklü herhangi bir işletim sistemi tespit etmedik. Ne yapmak istersiniz?<br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Diski sil</strong><br/>Seçili depolama bölümündeki mevcut veriler şu anda <font color="red">silinecektir.</font> - - 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. - Bu depolama aygıtı üzerinde %1 vardır. Ne yapmak istersiniz?<br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - - - - No Swap - Takas alanı yok - - - - Reuse Swap - Yeniden takas alanı - - - - Swap (no Hibernate) - Takas Alanı (uyku modu yok) - - - - Swap (with Hibernate) - Takas Alanı (uyku moduyla) - - - - Swap to file - Takas alanı dosyası - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Yanına yükleyin</strong><br/>Sistem yükleyici disk bölümünü küçülterek %1 için yer açacak. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Varolan bir disk bölümüne kur</strong><br/>Varolan bir disk bölümü üzerine %1 kur. - + + 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. + Bu depolama aygıtı üzerinde %1 vardır. Ne yapmak istersiniz?<br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. + + + 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. Bu depolama aygıtı üzerinde bir işletim sistemi yüklü. Ne yapmak istersiniz? <br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. - + 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. Bu depolama aygıtı üzerinde birden fazla işletim sistemi var. Ne yapmak istersiniz? <br/>Yaptığınız değişiklikler disk bölümü üzerine uygulanmadan önce gözden geçirme fırsatınız olacak. + + + 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/> + Bu depolama aygıtının üzerinde zaten bir işletim sistemi var, ancak <strong>%1</strong> bölüm tablosu, gerekli <strong>%2</strong>'den farklı. <br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + Bu depolama aygıtının disk bölümlerinden biri <strong>bağlı</strong>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Bu depolama aygıtı, <strong>etkin olmayan bir RAID</strong> cihazının parçasıdır. + + + + No Swap + Takas alanı yok + + + + Reuse Swap + Yeniden takas alanı + + + + Swap (no Hibernate) + Takas Alanı (uyku modu yok) + + + + Swap (with Hibernate) + Takas Alanı (uyku moduyla) + + + + Swap to file + Takas alanı dosyası + ClearMountsJob - + + Successfully unmounted %1. + %1 bağlantısı başarıyla kaldırıldı. + + + + Successfully disabled swap %1. + %1 takas alanı başarıyla devre dışı bırakıldı. + + + + Successfully cleared swap %1. + %1 takas alanı başarıyla temizlendi. + + + + Successfully closed mapper device %1. + %1 eşleyici aygıtı başarıyla kapatıldı. + + + + Successfully disabled volume group %1. + %1 birim grubu başarıyla devre dışı bırakıldı. + + + Clear mounts for partitioning operations on %1 %1 bölümleme işlemleri için sorunsuz bağla - + Clearing mounts for partitioning operations on %1. %1 bölümleme işlemleri için bağlama noktaları temizleniyor. - + Cleared all mounts for %1 %1 için tüm bağlı bölümler ayrıldı @@ -659,22 +726,17 @@ Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. ClearTempMountsJob - + Clear all temporary mounts. Tüm geçici bağları temizleyin. - + Clearing all temporary mounts. Geçici olarak bağlananlar temizleniyor. - - Cannot get list of temporary mounts. - Geçici bağların listesi alınamadı. - - - + Cleared all temporary mounts. Tüm geçici bağlar temizlendi. @@ -682,18 +744,18 @@ Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. CommandList - - + + Could not run command. Komut çalıştırılamadı. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Komut, ana bilgisayar ortamında çalışır ve kök yolunu bilmesi gerekir, ancak kökMontajNoktası tanımlanmamıştır. - + The command needs to know the user's name, but no username is defined. Komutun kullanıcının adını bilmesi gerekir, ancak kullanıcı adı tanımlanmamıştır. @@ -701,102 +763,237 @@ Yükleyiciden çıkınca tüm değişiklikler kaybedilecek. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Bu bilgisayar %1 kurulumu için minimum gereksinimleri karşılamıyor.<br/>Kurulum devam etmeyecek. <a href="#details">Detaylar...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Bu bilgisayara %1 yüklemek için minimum gereksinimler karşılanamadı. -Kurulum devam edemiyor. <a href="#detaylar">Detaylar...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Bu bilgisayar %1 kurulumu için önerilen gereksinimlerin bazılarına uymuyor. Kurulum devam edebilirsiniz ancak bazı özellikler devre dışı bırakılabilir. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Bu bilgisayara %1 yüklemek için önerilen gereksinimlerin bazıları karşılanamadı.<br/> -Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. - - - - This program will ask you some questions and set up %2 on your computer. - Bu program size bazı sorular soracak ve bilgisayarınıza %2 kuracak. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>%1 için Calamares sistem kurulum uygulamasına hoş geldiniz.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>%1 Kurulumuna Hoşgeldiniz.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 Calamares Sistem Yükleyici .</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 Sistem Yükleyiciye Hoşgeldiniz.</h1> - - - + Set keyboard model to %1.<br/> %1 Klavye düzeni olarak seçildi.<br/> - + Set keyboard layout to %1/%2. Alt klavye türevi olarak %1/%2 seçildi. - + + Set timezone to %1/%2. + %1/%2 Zaman dilimi ayarla. + + + The system language will be set to %1. Sistem dili %1 olarak ayarlanacak. - + The numbers and dates locale will be set to %1. Sayılar ve günler için sistem yereli %1 olarak ayarlanacak. - - Set timezone to %1/%2.<br/> - Bölge ve zaman dilimi %1/%2 olarak ayarlandı.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) - Ağ Kurulumu. (Devre dışı: Yanlış yapılandırma) + Ağ Kurulum. (Devre dışı: Yanlış yapılandırma) - + Network Installation. (Disabled: Received invalid groups data) Ağ Kurulum. (Devre dışı: Geçersiz grup verileri alındı) - - Network Installation. (Disabled: internal error) - Ağ Yüklemesi. (Devre dışı: dahili hata) + + Network Installation. (Disabled: Internal error) + Ağ Kurulumu. (Devre Dışı: Dahili hata) - + + Network Installation. (Disabled: No package list) + Ağ Kurulumu. (Devre Dışı: Paket listesi yok) + + + + Package selection + Paket seçimi + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Ağ Üzerinden Kurulum. (Devre Dışı: Paket listeleri alınamıyor, ağ bağlantısını kontrol ediniz) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Bu bilgisayar %1 kurulumu için minimum gereksinimleri karşılamıyor.<br/>Kurulum devam etmeyecek. <a href="#details">Detaylar...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Bu bilgisayara %1 yüklemek için asgari gereksinimler karşılanamadı. +Kurulum devam edemiyor. <a href="#detaylar">Detaylar...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Bu bilgisayar %1 kurulumu için önerilen gereksinimlerin bazılarına uymuyor. Kurulum devam edebilirsiniz ancak bazı özellikler devre dışı bırakılabilir. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Bu bilgisayara %1 yüklemek için önerilen gereksinimlerin bazıları karşılanamadı.<br/> +Kurulum devam edebilir fakat bazı özellikler devre dışı kalabilir. + + + + This program will ask you some questions and set up %2 on your computer. + Bu program size bazı sorular soracak ve bilgisayarınıza %2 kuracak. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>%1 için Calamares kurulum programına hoş geldiniz</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>%1 kurulumuna hoş geldiniz</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>%1 Calamares Sistem Yükleyiciye Hoş Geldiniz</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>%1 Sistem Yükleyiciye Hoş Geldiniz</h1> + + + + Your username is too long. + Kullanıcı adınız çok uzun. + + + + '%1' is not allowed as username. + '%1' kullanıcı adı olarak izin verilmiyor. + + + + Your username must start with a lowercase letter or underscore. + Kullanıcı adınız küçük harf veya alt çizgi ile başlamalıdır. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Sadece küçük harflere, sayılara, alt çizgi ve kısa çizgilere izin verilir. + + + + Your hostname is too short. + Makine adınız çok kısa. + + + + Your hostname is too long. + Makine adınız çok uzun. + + + + '%1' is not allowed as hostname. + '%1' ana bilgisayar adı olarak kullanılamaz. + + + + Only letters, numbers, underscore and hyphen are allowed. + Sadece harfler, rakamlar, alt çizgi ve kısa çizgi izin verilir. + + + + Your passwords do not match! + Parolanız eşleşmiyor! + + + + OK! + TAMAM! + + + + Setup Failed + Kurulum Başarısız + + + + Installation Failed + Kurulum Başarısız + + + + The setup of %1 did not complete successfully. + %1 kurulumu başarısız oldu tamamlanmadı. + + + + The installation of %1 did not complete successfully. + %1 kurulumu başarısız oldu tamamlanmadı. + + + + Setup Complete + Kurulum Tamanlandı + + + + Installation Complete + Kurulum Tamamlandı + + + + The setup of %1 is complete. + %1 kurulumu tamamlandı. + + + + The installation of %1 is complete. + Kurulum %1 oranında tamamlandı. + + + + Package Selection + Paket seçimi + + + + Please pick a product from the list. The selected product will be installed. + Lütfen listeden bir ürün seçin. Seçilen ürün yüklenecek. + + + + Install option: <strong>%1</strong> + Kurulum seçeneği: <strong>%1</strong> + + + + None + Hiçbiri + + + + Summary + Kurulum Özeti + + + + This is an overview of what will happen once you start the setup procedure. + Bu, kurulum prosedürü başlatıldıktan sonra ne gibi değişiklikler dair olacağına genel bir bakış. + + + + This is an overview of what will happen once you start the install procedure. + Yükleme işlemleri başladıktan sonra yapılacak işlere genel bir bakış. + ContextualProcessJob - + Contextual Processes Job Bağlamsal Süreç İşleri @@ -804,100 +1001,136 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. CreatePartitionDialog - + Create a Partition Yeni Bölüm Oluştur - - MiB - MB - - - - Partition &Type: - Bölüm &Tip: - - - - &Primary - &Birincil - - - - E&xtended - U&zatılmış - - - - Fi&le System: - D&osya Sistemi: - - - - LVM LV name - LVM LV adı - - - - Flags: - Bayraklar: - - - - &Mount Point: - &Bağlama Noktası: - - - + Si&ze: Bo&yut: - + + MiB + MB + + + + Partition &Type: + Bölüm &Tip: + + + + Primar&y + Birinci&l + + + + E&xtended + U&zatılmış + + + + Fi&le System: + D&osya Sistemi: + + + + LVM LV name + LVM LV adı + + + + &Mount Point: + &Bağlama Noktası: + + + + Flags: + Bayraklar: + + + + Label for the filesystem + Dosya sistemi için etiket + + + + FS Label: + DS Etiketi: + + + En&crypt Şif&rele - + Logical Mantıksal - + Primary Birincil - + GPT GPT - + Mountpoint already in use. Please select another one. Bağlama noktası zaten kullanımda. Lütfen diğerini seçiniz. + + + Mountpoint must start with a <tt>/</tt>. + Bağlantı noktası bir <tt>/</tt> ile başlamalıdır. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + %3 (%2) üzerinde %4 girdisi ile yeni bir %1MiB bölüm oluşturun. + + + + Create new %1MiB partition on %3 (%2). + %3 (%2) üzerinde yeni bir %1MiB bölüm oluşturun. + + + Create new %2MiB partition on %4 (%3) with file system %1. %4 üzerinde (%3) ile %1 dosya sisteminde %2MB disk bölümü oluştur. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + <strong>%3</strong> (%2) üzerinde <em>%4</em> girdisi ile yeni bir <strong>%1MiB</strong> bölüm oluşturun. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + <strong>%3</strong> (%2) üzerinde yeni bir <strong>%1MiB</strong> bölüm oluşturun. + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. <strong>%4</strong> üzerinde (%3) ile <strong>%1</strong> dosya sisteminde <strong>%2MB</strong> disk bölümü oluştur. - + + Creating new %1 partition on %2. %2 üzerinde %1 yeni disk bölümü oluştur. - + The installer failed to create partition on disk '%1'. Yükleyici '%1' diski üzerinde yeni bölüm oluşturamadı. @@ -905,27 +1138,27 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. CreatePartitionTableDialog - + Create Partition Table Bölümleme Tablosu Oluştur - + Creating a new partition table will delete all existing data on the disk. Yeni bir bölüm tablosu oluşturmak disk üzerindeki tüm verileri silecektir. - + What kind of partition table do you want to create? Ne tür bölüm tablosu oluşturmak istiyorsunuz? - + Master Boot Record (MBR) Önyükleme Bölümü (MBR) - + GUID Partition Table (GPT) GUID Bölüm Tablosu (GPT) @@ -933,22 +1166,22 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. CreatePartitionTableJob - + Create new %1 partition table on %2. %2 üzerinde %1 yeni disk tablosu oluştur. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). <strong>%2</strong> (%3) üzerinde <strong>%1</strong> yeni disk tablosu oluştur. - + Creating new %1 partition table on %2. %2 üzerinde %1 yeni disk tablosu oluştur. - + The installer failed to create a partition table on %1. Yükleyici %1 üzerinde yeni bir bölüm tablosu oluşturamadı. @@ -956,45 +1189,41 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. CreateUserJob - + Create user %1 %1 Kullanıcısı oluşturuluyor... - + Create user <strong>%1</strong>. <strong>%1</strong> kullanıcı oluştur. - - Creating user %1. - %1 Kullanıcısı oluşturuluyor... + + Preserving home directory + Ana dizini koru - - Sudoers dir is not writable. - Sudoers dosyası yazılabilir değil. + + + Creating user %1 + %1 kullanıcısı oluşturuluyor - - Cannot create sudoers file for writing. - sudoers dosyası oluşturulamadı ve yazılamadı. + + Configuring user %1 + %1 kullanıcısı yapılandırılıyor - - Cannot chmod sudoers file. - Sudoers dosya izinleri ayarlanamadı. - - - - Cannot open groups file for reading. - groups dosyası okunamadı. + + Setting file permissions + Dosya izinlerini ayarla CreateVolumeGroupDialog - + Create Volume Group Birim Grubu Oluştur @@ -1002,22 +1231,22 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. CreateVolumeGroupJob - + Create new volume group named %1. %1 adında yeni birim grubu oluşturun. - + Create new volume group named <strong>%1</strong>. <strong>%1</strong>adlı yeni birim grubu oluştur - + Creating new volume group named %1. %1 adlı yeni birim grubu oluşturuluyor. - + The installer failed to create a volume group named '%1'. Yükleyici, '%1' adında bir birim grubu oluşturamadı. @@ -1025,18 +1254,18 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. %1 adlı birim grubunu devre dışı bırakın. - + Deactivate volume group named <strong>%1</strong>. <strong>%1</strong> adlı birim grubunu devre dışı bırakın. - + The installer failed to deactivate a volume group named %1. Yükleyici, %1 adında bir birim grubunu devre dışı bırakamadı. @@ -1044,22 +1273,22 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. DeletePartitionJob - + Delete partition %1. %1 disk bölümünü sil. - + Delete partition <strong>%1</strong>. <strong>%1</strong> disk bölümünü sil. - + Deleting partition %1. %1 disk bölümü siliniyor. - + The installer failed to delete partition %1. Yükleyici %1 bölümünü silemedi. @@ -1067,46 +1296,46 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. DeviceInfoWidget - - 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. - Seçili depolama aygıtında bir <strong>bölümleme tablosu</strong> oluştur.<br><br>Bölümleme tablosu oluşturmanın tek yolu aygıt üzerindeki bölümleri silmek, verileri yoketmek ve yeni bölümleme tablosu oluşturmaktır.<br>Sistem yükleyici aksi bir seçeneğe başvurmaz iseniz geçerli bölümlemeyi koruyacaktır.<br>Emin değilseniz, modern sistemler için GPT tercih edebilirsiniz. - - - + This device has a <strong>%1</strong> partition table. Bu aygıt bir <strong>%1</strong> bölümleme tablosuna sahip. - + 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. Bu bir <strong>döngüsel</strong> aygıttır.<br><br>Bu bir pseudo-device aygıt olup disk bölümlemesi yoktur ve dosyalara erişim sağlayan blok bir aygıttır. Kurulum genelde sadece bir tek dosya sistemini içerir. - + 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. Sistem yükleyici seçili depolama aygıtında bir bölümleme tablosu tespit edemedi.<br><br>Aygıt üzerinde bir disk bölümleme tablosu hiç oluşturulmamış ya da disk yapısı bilinmeyen bir tiptedir.<br>Sistem yükleyiciyi kullanarak elle ya da otomatik olarak bir disk bölümü tablosu oluşturabilirsiniz. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Bu bölümleme tablosu modern sistemlerdeki <strong>EFI</strong> önyükleme arayüzünü başlatmak için önerilir. - + <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. <br><br>Bu bölümleme tablosu <strong>BIOS</strong>önyükleme arayüzü kullanan eski sistemlerde tercih edilir. Birçok durumda GPT tavsiye edilmektedir.<br><br><strong>Uyarı:</strong> MBR bölüm tablosu eski tip MS-DOS biçimi için standarttır.<br>Sadece 4 <em>birincil</em> birim oluşturulabilir ve 4 ten fazla bölüm için <em>uzatılmış</em> bölümler oluşturulmalıdır, böylece daha çok <em>mantıksal</em> bölüm oluşturulabilir. + + + 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. + Seçili depolama aygıtında bir <strong>bölümleme tablosu</strong> oluştur.<br><br>Bölümleme tablosu oluşturmanın tek yolu aygıt üzerindeki bölümleri silmek, verileri yoketmek ve yeni bölümleme tablosu oluşturmaktır.<br>Sistem yükleyici aksi bir seçeneğe başvurmaz iseniz geçerli bölümlemeyi koruyacaktır.<br>Emin değilseniz, modern sistemler için GPT tercih edebilirsiniz. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1115,17 +1344,17 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 %1 aygıtına Dracut için LUKS yapılandırmasını yaz - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut için LUKS yapılandırma işlemi atlanıyor: "/" diski şifrelenemedi - + Failed to open %1 %1 Açılamadı @@ -1133,7 +1362,7 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. DummyCppJob - + Dummy C++ Job Dummy C++ Job @@ -1141,123 +1370,167 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. EditExistingPartitionDialog - + Edit Existing Partition Mevcut Bölümü Düzenle - - Content: - İçerik: + + Con&tent: + İçe&rik: - + &Keep &Tut - + Format Biçimle - + Warning: Formatting the partition will erase all existing data. Uyarı: Biçimlenen bölümdeki tüm veriler silinecek. - + &Mount Point: &Bağlama Noktası: - + Si&ze: Bo&yut: - + MiB MB - + Fi&le System: D&osya Sistemi: - + Flags: Bayraklar: - - Mountpoint already in use. Please select another one. - Bağlama noktası zaten kullanımda. Lütfen diğerini seçiniz. + + Label for the filesystem + Dosya sistemi için etiket + + + + FS Label: + DS Etiketi: EncryptWidget - + Form Biçim - + En&crypt system Sistemi Şif&rele - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Sisteminiz, tüm sistemi şifrelemek için yeterince şifrelemeyi desteklemiyor gibi görünüyor. Şifrelemeyi etkinleştirebilirsiniz, ancak performans düşebilir. + + + Passphrase Parola - + Confirm passphrase Parolayı doğrula - + + Please enter the same passphrase in both boxes. Her iki kutuya da aynı parolayı giriniz. + + ErrorDialog + + + Details: + Detaylar: + + + + Would you like to paste the install log to the web? + Kurulum günlüğünü web'e yapıştırmak ister misiniz? + + FillGlobalStorageJob - + Set partition information Bölüm bilgilendirmesini ayarla - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + <em>%3</em> özelliklerine sahip <strong>yeni</strong> %2 sistem bölümüne %1 yükleyin + + + Install %1 on <strong>new</strong> %2 system partition. %2 <strong>yeni</strong> sistem diskine %1 yükle. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - %2 <strong>yeni</strong> disk bölümünü <strong>%1</strong> ile ayarlayıp bağla. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + <strong>%1</strong> bağlama noktası ve <em>%3</em> özelliklerine sahip <strong>yeni</strong> %2 bölümü kurun. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Bağlama noktası <strong>%1</strong> %3 olan <strong>yeni</strong> %2 bölümü kurun. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + <em>%4</em> özelliklerine sahip %3 sistem bölümü <strong>%1</strong> üzerine %2 yükleyin. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Bağlama noktası <strong>%2</strong> ve özellikleri <em>%4</em> ile %3 bölümüne <strong>%1</strong> kurun. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + <strong>%2</strong> %4 bağlama noktası ile %3 bölümüne <strong>%1</strong> kurun. + + + Install %2 on %3 system partition <strong>%1</strong>. %3 <strong>%1</strong> sistem diskine %2 yükle. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - %3 diskine<strong>%1</strong> ile <strong>%2</strong> bağlama noktası ayarla. - - - + Install boot loader on <strong>%1</strong>. <strong>%1</strong> üzerine sistem ön yükleyiciyi kur. - + Setting up mount points. Bağlama noktalarını ayarla. @@ -1265,93 +1538,81 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. FinishedPage - + Form Biçim - + &Restart now &Şimdi yeniden başlat - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Kurulum Tamamlandı.</h1><br/>%1 bilgisayarınıza kuruldu.<br/>Şimdi yeni kurduğunuz işletim sistemini kullanabilirsiniz. - + <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> <html><head/><body><p>Bu kutucuk işaretlenerek <span style="font-style:italic;">Tamam</span> butonu tıklandığında ya da kurulum uygulaması kapatıldığında bilgisayarınız yeniden başlatılacaktır.</p></body></html> - + <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. - <h1>Tüm işlem tamamlandı.</h1><br/>%1 bilgisayarınıza yüklendi<br/>Yeni kurduğunuz sistemi kullanmak için yeniden başlatabilir veya %2 Çalışan sistem ile devam edebilirsiniz. + <h1>Kurulum işlemleri tamamlandı.</h1><br/>%1 bilgisayarınıza yüklendi<br/>Yeni kurduğunuz sistemi kullanmak için yeniden başlatabilir veya %2 Çalışan sistem ile devam edebilirsiniz. - + <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> <html><head/><body><p>Bu kutucuk işaretlenerek <span style="font-style:italic;">Tamam</span> butonu tıklandığında ya da sistem yükleyici kapatıldığında bilgisayarınız yeniden başlatılacaktır.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Kurulum Başarısız</h1><br/>%1 bilgisayarınıza kurulamadı.<br/>Hata mesajı: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Yükleme Başarısız</h1><br/>%1 bilgisayarınıza yüklenemedi.<br/>Hata mesajı çıktısı: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Kurulum Tamam + + + FinishedViewStep - - Setup Complete - Kurulum Tamanlandı - - - - Installation Complete - Kurulum Tamamlandı - - - - The setup of %1 is complete. - %1 kurulumu tamamlandı. - - - - The installation of %1 is complete. - Kurulum %1 oranında tamamlandı. + + Finish + Kurulum Tamam FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. %1 disk bölümü biçimle (dosya sistemi: %2 boyut: %3) %4 üzerinde. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. <strong>%1</strong> diskine <strong>%2</strong> dosya sistemi ile <strong>%3MB</strong> disk bölümü oluştur. - + Formatting partition %1 with file system %2. %1 disk bölümü %2 dosya sistemi ile biçimlendiriliyor. - + The installer failed to format partition %1 on disk '%2'. Yükleyici %1 bölümünü '%2' diski üzerinde biçimlendiremedi. @@ -1359,73 +1620,73 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. GeneralRequirements - + has at least %1 GiB available drive space En az %1 GB disk sürücü alanı var - + There is not enough drive space. At least %1 GiB is required. Yeterli disk sürücü alanı mevcut değil. En az %1 GB disk alanı gereklidir. - + has at least %1 GiB working memory En az %1 GB bellek var - + The system does not have enough working memory. At least %1 GiB is required. Yeterli ram bellek gereksinimi karşılanamıyor. En az %1 GB ram bellek gereklidir. - + is plugged in to a power source Bir güç kaynağına takılı olduğundan... - + The system is not plugged in to a power source. Sistem güç kaynağına bağlı değil. - + is connected to the Internet İnternete bağlı olduğundan... - + The system is not connected to the Internet. Sistem internete bağlı değil. - + is running the installer as an administrator (root) yükleyiciyi yönetici (kök) olarak çalıştırıyor - + The setup program is not running with administrator rights. Kurulum uygulaması yönetici haklarıyla çalışmıyor. - + The installer is not running with administrator rights. Sistem yükleyici yönetici haklarına sahip olmadan çalışmıyor. - + has a screen large enough to show the whole installer yükleyicinin tamamını gösterecek kadar büyük bir ekrana sahip - + The screen is too small to display the setup program. Kurulum uygulamasını görüntülemek için ekran çok küçük. - + The screen is too small to display the installer. Ekran, sistem yükleyiciyi görüntülemek için çok küçük. @@ -1433,7 +1694,7 @@ Sistem güç kaynağına bağlı değil. HostInfoJob - + Collecting information about your machine. Makineniz hakkında bilgi toplama. @@ -1441,25 +1702,25 @@ Sistem güç kaynağına bağlı değil. IDJob - - + + + - OEM Batch Identifier OEM Toplu Tanımlayıcı - + Could not create directories <code>%1</code>. <code>%1</code> dizinleri oluşturulamadı. - + Could not open file <code>%1</code>. <code>%1</code> dosyası açılamadı. - + Could not write to file <code>%1</code>. <code>%1</code> dosyasına yazılamadı. @@ -1467,7 +1728,7 @@ Sistem güç kaynağına bağlı değil. InitcpioJob - + Creating initramfs with mkinitcpio. Mkinitcpio ile initramfs oluşturuluyor. @@ -1475,7 +1736,7 @@ Sistem güç kaynağına bağlı değil. InitramfsJob - + Creating initramfs. Initramfs oluşturuluyor. @@ -1483,17 +1744,17 @@ Sistem güç kaynağına bağlı değil. InteractiveTerminalPage - + Konsole not installed Konsole uygulaması yüklü değil - + Please install KDE Konsole and try again! Lütfen KDE Konsole yükle ve tekrar dene! - + Executing script: &nbsp;<code>%1</code> Komut durumu: &nbsp;<code>%1</code> @@ -1501,28 +1762,15 @@ Sistem güç kaynağına bağlı değil. InteractiveTerminalViewStep - + Script Betik - - KeyboardPage - - - Set keyboard model to %1.<br/> - %1 Klavye düzeni olarak seçildi.<br/> - - - - Set keyboard layout to %1/%2. - Alt klavye türevi olarak %1/%2 seçildi. - - KeyboardQmlViewStep - + Keyboard Klavye Düzeni @@ -1530,7 +1778,7 @@ Sistem güç kaynağına bağlı değil. KeyboardViewStep - + Keyboard Klavye Düzeni @@ -1538,65 +1786,88 @@ Sistem güç kaynağına bağlı değil. LCLocaleDialog - + System locale setting Sistem yerel ayarları - + 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>. Sistem yerel ayarı, bazı uçbirim, kullanıcı ayarlamaları ve başkaca dil seçeneklerini belirler ve etkiler. <br/>Varsayılan geçerli ayarlar <strong>%1</strong>. - + &Cancel &Vazgeç - + &OK &TAMAM + + LOSHJob + + + Configuring encrypted swap. + Şifreli takas alanı yapılandırılıyor. + + + + No target system available. + Mevcut hedef sistemi yok. + + + + No rootMountPoint is set. + Hiçbir rootMountPoint ayarlanmadı. + + + + No configFilePath is set. + configFilePath ayarlanmadı. + + LicensePage - + Form Form - + <h1>License Agreement</h1> <h1>Lisans Anlaşması</h1> - + I accept the terms and conditions above. Yukarıdaki şartları ve koşulları kabul ediyorum. - + Please review the End User License Agreements (EULAs). Lütfen Son Kullanıcı Lisans Sözleşmelerini (EULA) inceleyin. - + This setup procedure will install proprietary software that is subject to licensing terms. Bu kurulum prosedürü, lisanslama koşullarına tabi olan tescilli yazılımı kuracaktır. - + If you do not agree with the terms, the setup procedure cannot continue. Koşulları kabul etmiyorsanız kurulum prosedürü devam edemez. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Bu kurulum prosedürü, ek özellikler sağlamak ve kullanıcı deneyimini geliştirmek için lisans koşullarına tabi olan özel yazılımlar yükleyebilir. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Koşulları kabul etmiyorsanız, tescilli yazılım yüklenmeyecek ve bunun yerine açık kaynak alternatifleri kullanılacaktır. @@ -1604,7 +1875,7 @@ Sistem güç kaynağına bağlı değil. LicenseViewStep - + License Lisans @@ -1612,109 +1883,102 @@ Sistem güç kaynağına bağlı değil. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 sürücü</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 grafik sürücü</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 tarayıcı eklentisi</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 kodek</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 paketi</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 Dosya: %1 - + + Hide license text + Lisans metnini gizle + + + Show the license text Lisans metnini göster - + Open license agreement in browser. Tarayıcıda açık lisans sözleşmesi. - - - Hide license text - Lisans metnini gizle - LocalePage - - The system language will be set to %1. - Sistem dili %1 olarak ayarlanacak. - - - - The numbers and dates locale will be set to %1. - Sayılar ve günler için sistem yereli %1 olarak ayarlanacak. - - - + Region: Bölge: - + Zone: Şehir: - - + + &Change... &Değiştir... - - - Set timezone to %1/%2.<br/> - Bölge ve zaman dilimi %1/%2 olarak ayarlandı.<br/> - LocaleQmlViewStep - + Location Sistem Yereli + + LocaleTests + + + Quit + Çıkış + + LocaleViewStep - + Location Sistem Yereli @@ -1722,35 +1986,35 @@ Sistem güç kaynağına bağlı değil. LuksBootKeyFileJob - + Configuring LUKS key file. LUKS anahtar dosyası yapılandırılıyor. - - + + No partitions are defined. Hiçbir disk bölümü tanımlanmadı. - - - + + + Encrypted rootfs setup error Şifrelenmiş rootfs kurulum hatası - + Root partition %1 is LUKS but no passphrase has been set. %1 kök disk bölümü LUKS olacak fakat bunun için parola belirlenmedi. - + Could not create LUKS key file for root partition %1. %1 kök disk bölümü için LUKS anahtar dosyası oluşturulamadı. - + Could not configure LUKS key file on partition %1. %1 disk bölümü LUKS anahtar dosyası yapılandırılamadı. @@ -1758,124 +2022,140 @@ Sistem güç kaynağına bağlı değil. MachineIdJob - + Generate machine-id. Makine kimliği oluştur. - + Configuration Error Yapılandırma Hatası - + No root mount point is set for MachineId. MachineId için kök bağlama noktası ayarlanmadı. + + Map + + + Timezone: %1 + Zaman dilimi: %1 + + + + 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. + Yükleyicinin yerel ayarı önerebilmesi için lütfen haritada tercih ettiğiniz konumu seçin + ve saat dilimi ayarları. Aşağıdaki önerilen ayarlarda ince ayar yapabilirsiniz. Haritada sürükleyerek arama yapın + yakınlaştırmak / uzaklaştırmak için +/- düğmelerini kullanın veya yakınlaştırma için fare kaydırmayı kullanın. + + NetInstallViewStep - - + Package selection Paket seçimi - + Office software Ofis yazılımı - + Office package Ofis paketi - + Browser software Tarayıcı yazılımı - + Browser package Tarayıcı paketi - + Web browser İnternet tarayıcısı - + Kernel Çekirdek - + Services Servisler - + Login Oturum aç - + Desktop Masaüstü - + Applications Uygulamalar - + Communication - + İletişim - + Development - + Gelişim - + Office - + Ofis - + Multimedia - + Multimedya - + Internet - + İnternet - + Theming - + Temalar - + Gaming - + Oyunlar - + Utilities - + Bileşenler NotesQmlViewStep - + Notes Notlar @@ -1883,17 +2163,17 @@ Sistem güç kaynağına bağlı değil. OEMPage - + Ba&tch: Top&lu: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Buraya toplu tanımlayıcı girin. Bu hedef sistemde depolanır.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM Yapılandırma</h1><p>Calamares hedef sistemi yapılandırırken OEM ayarlarını kullanacaktır.</p></body></html> @@ -1901,260 +2181,317 @@ Sistem güç kaynağına bağlı değil. OEMViewStep - + OEM Configuration OEM Yapılandırma - + Set the OEM Batch Identifier to <code>%1</code>. OEM Toplu Tanımlayıcıyı <code>%1</code>'e Ayarlayın. + + Offline + + + Select your preferred Region, or use the default settings. + Tercih ettiğiniz Bölgeyi seçin veya varsayılan ayarları kullanın. + + + + + + Timezone: %1 + Zaman dilimi: %1 + + + + Select your preferred Zone within your Region. + Konumunuzda tercih ettiğiniz Bölgeyi seçin. + + + + Zones + Bölge + + + + You can fine-tune Language and Locale settings below. + Aşağıda Dil ve Yerel Ayar ayarlarında ince ayar yapabilirsiniz. + + PWQ - + Password is too short Şifre çok kısa - + Password is too long Şifre çok uzun - + Password is too weak Şifre çok zayıf - + Memory allocation error when setting '%1' '%1' ayarlanırken bellek ayırma hatası - + Memory allocation error Bellek ayırma hatası - + The password is the same as the old one Şifre eski şifreyle aynı - + The password is a palindrome Parola eskilerden birinin ters okunuşu olabilir - + The password differs with case changes only Parola sadece vaka değişiklikleri ile farklılık gösterir - + The password is too similar to the old one Parola eski parolaya çok benzer - + The password contains the user name in some form Parola kullanıcı adını bir biçimde içeriyor - + The password contains words from the real name of the user in some form Şifre, kullanıcının gerçek adına ait kelimeleri bazı biçimde içerir - + The password contains forbidden words in some form Şifre, bazı biçimde yasak kelimeler içeriyor - - The password contains less than %1 digits - Şifre %1 den az hane içeriyor - - - + The password contains too few digits Parola çok az basamak içeriyor - - The password contains less than %1 uppercase letters - Parola %1 den az büyük harf içeriyor - - - + The password contains too few uppercase letters Parola çok az harf içermektedir - - - The password contains less than %1 lowercase letters - Parola %1 den daha küçük harf içermektedir + + + The password contains fewer than %n lowercase letters + + Parola %n'den daha az küçük harf içeriyor + Parola %n'den daha az küçük harf içeriyor + - + The password contains too few lowercase letters Parola çok az küçük harf içeriyor - - The password contains less than %1 non-alphanumeric characters - Şifre %1 den az alfasayısal olmayan karakter içeriyor - - - + The password contains too few non-alphanumeric characters Parola çok az sayıda alfasayısal olmayan karakter içeriyor - - The password is shorter than %1 characters - Parola %1 karakterden kısa - - - + The password is too short Parola çok kısa - - The password is just rotated old one - Şifre önceden kullanıldı - - - - The password contains less than %1 character classes - Parola %1 den az karakter sınıfı içeriyor - - - + The password does not contain enough character classes Parola yeterli sayıda karakter sınıfı içermiyor - - The password contains more than %1 same characters consecutively - Şifre, %1 den fazla aynı karakteri ardışık olarak içeriyor - - - + The password contains too many same characters consecutively Parola ardışık olarak aynı sayıda çok karakter içeriyor - - The password contains more than %1 characters of the same class consecutively - Parola, aynı sınıftan %1 den fazla karakter ardışık olarak içeriyor - - - + The password contains too many characters of the same class consecutively Parola aynı sınıfta çok fazla karakter içeriyor - - - The password contains monotonic sequence longer than %1 characters - Şifre, %1 karakterden daha uzun monoton dizilim içeriyor + + + The password contains fewer than %n digits + + Parola %n'den az basamak içeriyor + Parola %n'den az basamak içeriyor + + + + + The password contains fewer than %n uppercase letters + + Parola %n'den daha az büyük harf içeriyor + Parola %n'den daha az büyük harf içeriyor + + + + + The password contains fewer than %n non-alphanumeric characters + + Parola %n'den daha az alfasayısal olmayan karakter içeriyor + Parola %n'den daha az alfasayısal olmayan karakter içeriyor + + + + + The password is shorter than %n characters + + Parola %n karakterden kısa + Parola %n karakterden kısa + - + + The password is a rotated version of the previous one + Parola, öncekinin döndürülmüş bir sürümüdür + + + + The password contains fewer than %n character classes + + Parola %n karakter sınıfından daha azını içeriyor + Parola %n karakter sınıfından daha azını içeriyor + + + + + The password contains more than %n same characters consecutively + + Parola art arda %n'den fazla aynı karakter içeriyor + Parola art arda %n'den fazla aynı karakter içeriyor + + + + + The password contains more than %n characters of the same class consecutively + + Parola aynı sınıftan art arda %n'den fazla karakter içeriyor + Parola aynı sınıftan art arda %n'den fazla karakter içeriyor + + + + + The password contains monotonic sequence longer than %n characters + + Parola, %n karakterden uzun monoton bir sıra içeriyor + Parola, %n karakterden uzun monoton bir sıra içeriyor + + + + The password contains too long of a monotonic character sequence Parola çok uzun monoton karakter dizisi içeriyor - + No password supplied Parola sağlanmadı - + Cannot obtain random numbers from the RNG device RNG cihazından rastgele sayılar elde edemiyor - + Password generation failed - required entropy too low for settings Şifre üretimi başarısız oldu - ayarlar için entropi çok düşük gerekli - + The password fails the dictionary check - %1 Parola, sözlüğü kontrolü başarısız - %1 - + The password fails the dictionary check Parola, sözlük onayı başarısız - + Unknown setting - %1 Bilinmeyen ayar - %1 - + Unknown setting Bilinmeyen ayar - + Bad integer value of setting - %1 Ayarın bozuk tam sayı değeri - %1 - + Bad integer value Yanlış tamsayı değeri - + Setting %1 is not of integer type - %1 ayarı tamsayı tipi değil + %1 ayarı tamsayı tipinde değil - + Setting is not of integer type - Ayar tamsayı tipi değil + Ayar tamsayı tipinde değil - + Setting %1 is not of string type - Ayar %1, dize tipi değil + Ayar %1, dizgi tipi değil - + Setting is not of string type - Ayar, dize tipi değil + Ayar, dizgi tipi değil - + Opening the configuration file failed Yapılandırma dosyasını açma başarısız oldu - + The configuration file is malformed Yapılandırma dosyası hatalı biçimlendirildi - + Fatal failure Ölümcül arıza - + Unknown error Bilinmeyen hata - + Password is empty Şifre boş @@ -2162,40 +2499,48 @@ Sistem güç kaynağına bağlı değil. PackageChooserPage - + Form Biçim - + Product Name Ürün adı - + TextLabel MetinEtiketi - + Long Product Description Uzun ürün açıklaması - + Package Selection Paket seçimi - + Please pick a product from the list. The selected product will be installed. Lütfen listeden bir ürün seçin. Seçilen ürün yüklenecek. + + PackageChooserQmlViewStep + + + Packages + Paketler + + PackageChooserViewStep - + Packages Paketler @@ -2203,12 +2548,12 @@ Sistem güç kaynağına bağlı değil. PackageModel - + Name İsim - + Description Açıklama @@ -2216,17 +2561,17 @@ Sistem güç kaynağına bağlı değil. Page_Keyboard - + Form Form - + Keyboard Model: Klavye Modeli: - + Type here to test your keyboard Klavye seçiminizi burada test edebilirsiniz @@ -2234,96 +2579,96 @@ Sistem güç kaynağına bağlı değil. Page_UserSetup - + Form Form - + What is your name? Adınız nedir? - - What name do you want to use to log in? - Giriş için hangi adı kullanmak istersiniz? - - - - Choose a password to keep your account safe. - Hesabınızın güvenliğini sağlamak için bir parola belirleyiniz. - - - - - <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> - <small>Yazım hatası ihtimaline karşı parolanızı iki kere yazınız. Güçlü bir parola en az sekiz karakter olmalı ve rakamları, harfleri, karakterleri içermelidir, düzenli aralıklarla değiştirilmelidir.</small> - - - - What is the name of this computer? - Bu bilgisayarın adı nedir? - - - + Your Full Name Tam Adınız - + + What name do you want to use to log in? + Giriş için hangi adı kullanmak istersiniz? + + + login oturum aç - + + What is the name of this computer? + Bu bilgisayarın adı nedir? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Bilgisayarınız herhangi bir ağ üzerinde görünür ise bu adı kullanacak.</small> - + Computer Name Bilgisayar Adı - - + + Choose a password to keep your account safe. + Hesabınızın güvenliğini sağlamak için bir parola belirleyiniz. + + + + + <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> + <small>Yazım hatası ihtimaline karşı parolanızı iki kere yazınız. Güçlü bir parola en az sekiz karakter olmalı ve rakamları, harfleri, karakterleri içermelidir, düzenli aralıklarla değiştirilmelidir.</small> + + + + Password Şifre - - + + Repeat Password Şifreyi Tekrarla - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Bu kutu işaretlendiğinde parola gücü kontrolü yapılır ve zayıf bir parola kullanamazsınız. - + Require strong passwords. Güçlü şifre gerekir. - + Log in automatically without asking for the password. Şifre sormadan otomatik olarak giriş yap. - + Use the same password for the administrator account. Yönetici ile kullanıcı aynı şifreyi kullansın. - + Choose a password for the administrator account. Yönetici-Root hesabı için bir parola belirle. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Yazım hatası ihtimaline karşı aynı şifreyi tekrar giriniz.</small> @@ -2331,42 +2676,42 @@ Sistem güç kaynağına bağlı değil. PartitionLabelsView - + Root Root - + Home Home - + Boot Boot - + EFI system EFI sistem - + Swap Swap-Takas - + New partition for %1 %1 için yeni disk bölümü - + New partition Yeni disk bölümü - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2375,34 +2720,39 @@ Sistem güç kaynağına bağlı değil. PartitionModel - - + + Free Space Boş Alan - - + + New partition Yeni bölüm - + Name İsim - + File System Dosya Sistemi - + + File System Label + Dosya Sistemi Etiketi + + + Mount Point Bağlama Noktası - + Size Boyut @@ -2410,77 +2760,77 @@ Sistem güç kaynağına bağlı değil. PartitionPage - + Form Form - + Storage de&vice: Depolama ay&gıtı: - + &Revert All Changes &Tüm Değişiklikleri Geri Al - + New Partition &Table Yeni Bölüm &Tablo - + Cre&ate Oluş&tur - + &Edit &Düzenle - + &Delete &Sil - + New Volume Group Yeni Birim Grubu - + Resize Volume Group Birim Grubunu Yeniden Boyutlandır - + Deactivate Volume Group Birim Grubunu Devre Dışı Bırak - + Remove Volume Group Birim Grubunu Kaldır - + I&nstall boot loader on: Ö&nyükleyiciyi şuraya kurun: - + Are you sure you want to create a new partition table on %1? %1 tablosunda yeni bölüm oluşturmaya devam etmek istiyor musunuz? - + Can not create new partition Yeni disk bölümü oluşturulamıyor - + 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. %1 üzerindeki disk bölümü tablosu zaten %2 birincil disk bölümüne sahip ve artık eklenemiyor. Lütfen bir birincil disk bölümü kaldırın ve bunun yerine uzatılmış bir disk bölümü ekleyin. @@ -2488,118 +2838,108 @@ Sistem güç kaynağına bağlı değil. PartitionViewStep - + Gathering system information... Sistem bilgileri toplanıyor... - + Partitions Disk Bölümleme - - Install %1 <strong>alongside</strong> another operating system. - Diğer işletim sisteminin <strong>yanına</strong> %1 yükle. + + Unsafe partition actions are enabled. + Güvenli olmayan bölümleme eylemi etkinleştirildi. - - <strong>Erase</strong> disk and install %1. - Diski <strong>sil</strong> ve %1 yükle. + + Partitioning is configured to <b>always</b> fail. + Bölümleme, <b>her zaman</b> başarısız olacak şekilde yapılandırılmıştır. - - <strong>Replace</strong> a partition with %1. - %1 ile disk bölümünün üzerine <strong>yaz</strong>. + + No partitions will be changed. + Hiçbir bölüm değiştirilmeyecek. - - <strong>Manual</strong> partitioning. - <strong>Manuel</strong> bölümleme. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - <strong>%2</strong> (%3) diskindeki diğer işletim sisteminin <strong>yanına</strong> %1 yükle. - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>%2</strong> (%3) diski <strong>sil</strong> ve %1 yükle. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>%2</strong> (%3) disk bölümünün %1 ile <strong>üzerine yaz</strong>. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - <strong>%1</strong> (%2) disk bölümünü <strong>manuel</strong> bölümle. - - - - Disk <strong>%1</strong> (%2) - Disk <strong>%1</strong> (%2) - - - + Current: Geçerli: - + After: Sonra: - + No EFI system partition configured EFI sistem bölümü yapılandırılmamış - - 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>esp</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. - %1 başlatmak için bir EFI sistem bölümü gereklidir.<br/><br/>EFI sistem bölümünü yapılandırmak için geri dönün ve seçim yapın veya FAT32 dosya sistemi ile <strong>esp</strong> etiketiyle <strong>%2</strong> noktasına bağlayın.<br/><br/>Bir EFI sistem bölümü kurmadan devam edebilirsiniz fakat işletim sistemi başlatılamayabilir. + + EFI system partition configured incorrectly + EFI sistem bölümü yanlış yapılandırılmış - - EFI system partition flag not set - EFI sistem bölümü bayrağı ayarlanmadı + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + %1 başlatmak için bir EFI sistem bölümü gereklidir. <br/><br/> Bir EFI sistem bölümü yapılandırmak için geri dönün ve uygun bir dosya sistemi seçin veya oluşturun. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - %1 başlatmak için bir EFI sistem bölümü gereklidir.<br/><br/>Bir bağlama noktası <strong>%2</strong> olarak yapılandırıldı fakat <strong>esp</strong>bayrağı ayarlanmadı.<br/>Bayrağı ayarlamak için, geri dönün ve bölümü düzenleyin.<br/><br/>Sen bayrağı ayarlamadan devam edebilirsin fakat işletim sistemi başlatılamayabilir. + + The filesystem must be mounted on <strong>%1</strong>. + Dosya sistemi <strong>%1</strong> üzerine bağlanmalıdır. - + + The filesystem must have type FAT32. + Dosya sistemi FAT32 tipine sahip olmalıdır. + + + + The filesystem must be at least %1 MiB in size. + Dosya sisteminin boyutu en az %1 MB olmalıdır. + + + + The filesystem must have flag <strong>%1</strong> set. + Dosya sisteminde <strong>%1</strong> bayrağı ayarlanmış olmalıdır. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Bir EFI sistem bölümü kurmadan devam edebilirsiniz ancak sisteminiz başlamayabilir. + + + Option to use GPT on BIOS BIOS'ta GPT kullanma seçeneği - - 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. - GPT bölümleme tablosu tüm sistemler için en iyi seçenektir. Bu yükleyici BIOS sistemleri için de böyle bir kurulumu destekler. <br/><br/>BIOS'ta bir GPT bölümleme tablosu yapılandırmak için (daha önce yapılmadıysa) geri gidin ve bölümleme tablosunu GPT'ye ayarlayın, ardından <strong>bios_grub</strong> bayrağı etkinken 8 MB biçimlendirilmemiş bir bölüm oluşturun.<br/> <br/>GPT'li bir BIOS sisteminde% 1'i başlatmak için biçimlendirilmemiş 8 MB'lik bir bölüm gereklidir. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT bölüm tablosu, tüm sistemler için en iyi seçenektir. Bu yükleyici, BIOS sistemleri için de böyle bir kurulumu destekler. <br/><br/>BIOS'ta bir GPT bölüm tablosu yapılandırmak için (önceden yapılmadıysa) geri dönün ve bölüm tablosunu GPT olarak ayarlayın, ardından <strong>%2</strong> bayrağı etkinleştirilmiş.<br/><br/> 8 MB biçimlendirilmemiş bölüm oluşturun .GPT' ile BIOS sisteminde %1 başlatmak için biçimlendirilmemiş 8 MB bir bölüm gereklidir. - + Boot partition not encrypted Önyükleme yani boot diski şifrelenmedi - + 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. Ayrı bir önyükleme yani boot disk bölümü, şifrenmiş bir kök bölüm ile birlikte ayarlandı, fakat önyükleme bölümü şifrelenmedi.<br/><br/>Bu tip kurulumun güvenlik endişeleri vardır, çünkü önemli sistem dosyaları şifrelenmemiş bir bölümde saklanır.<br/>İsterseniz kuruluma devam edebilirsiniz, fakat dosya sistemi kilidi daha sonra sistem başlatılırken açılacak.<br/> Önyükleme bölümünü şifrelemek için geri dönün ve bölüm oluşturma penceresinde <strong>Şifreleme</strong>seçeneği ile yeniden oluşturun. - + has at least one disk device available. Mevcut en az bir disk aygıtı var. - + There are no partitions to install on. Kurulacak disk bölümü yok. @@ -2607,13 +2947,13 @@ Sistem güç kaynağına bağlı değil. PlasmaLnfJob - + Plasma Look-and-Feel Job Plazma Look-and-Feel İşleri - - + + Could not select KDE Plasma Look-and-Feel package KDE Plazma Look-and-Feel paketi seçilemedi @@ -2621,17 +2961,17 @@ Sistem güç kaynağına bağlı değil. PlasmaLnfPage - + Form Biçim - + 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. Lütfen KDE Plazma Masaüstü için temalardan Bak ve Hisset bölümünü seçin. Ayrıca bu adımı atlayabilir ve sistem ayarlandıktan sonra bak ve hisset tema yapılandırabilirsiniz. Bir bak ve hisset seçeneğine tıklarsanız size canlı bir önizleme gösterilecektir. - + 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. Lütfen KDE Plazma Masaüstü için bir görünüm seçin. Ayrıca, bu adımı atlayabilir ve sistem kurulduktan sonra görünümü yapılandırabilirsiniz. Bir görünüm ve tercihe tıkladığınızda size look-and-feel yani canlı bir önizleme sunulur. @@ -2639,7 +2979,7 @@ Sistem güç kaynağına bağlı değil. PlasmaLnfViewStep - + Look-and-Feel Look-and-Feel @@ -2647,17 +2987,17 @@ Sistem güç kaynağına bağlı değil. PreserveFiles - + Saving files for later ... Dosyalar daha sonrası için kaydediliyor ... - + No files configured to save for later. Daha sonra kaydetmek için dosya yapılandırılmamış. - + Not all of the configured files could be preserved. Yapılandırılmış dosyaların tümü korunamadı. @@ -2665,14 +3005,14 @@ Sistem güç kaynağına bağlı değil. ProcessResult - + There was no output from the command. Komut çıktısı yok. - + Output: @@ -2681,52 +3021,52 @@ Output: - + External command crashed. Harici komut çöktü. - + Command <i>%1</i> crashed. Komut <i>%1</i> çöktü. - + External command failed to start. Harici komut başlatılamadı. - + Command <i>%1</i> failed to start. Komut <i>%1</i> başlatılamadı. - + Internal error when starting command. Komut başlatılırken dahili hata. - + Bad parameters for process job call. Çalışma adımları başarısız oldu. - + External command failed to finish. Harici komut başarısız oldu. - + Command <i>%1</i> failed to finish in %2 seconds. Komut <i>%1</i> %2 saniyede başarısız oldu. - + External command finished with errors. Harici komut hatalarla bitti. - + Command <i>%1</i> finished with exit code %2. Komut <i>%1</i> %2 çıkış kodu ile tamamlandı @@ -2734,89 +3074,95 @@ Output: QObject - - Default Keyboard Model - Varsayılan Klavye Modeli - - - - - Default - Varsayılan - - - - unknown - bilinmeyen - - - - extended - uzatılmış - - - - unformatted - biçimlenmemiş - - - - swap - Swap-Takas - - - - Unpartitioned space or unknown partition table - Bölümlenmemiş alan veya bilinmeyen bölüm tablosu - - - - (no mount point) - (bağlama noktası yok) - - - - Requirements checking for module <i>%1</i> is complete. - <i>%1</i> modülü için gerekenler tamamlandı. - - - + %1 (%2) %1 (%2) - - No product - Ürün yok + + unknown + bilinmeyen - - No description provided. - Açıklama bulunamadı. + + extended + uzatılmış - - - - + + unformatted + biçimlenmemiş + + + + swap + Swap-Takas + + + + + Default + Varsayılan + + + + + + File not found Dosya bulunamadı - + Path <pre>%1</pre> must be an absolute path. <pre>%1</pre> yolu mutlak bir yol olmalı. - + + Directory not found + Dizin bulunamadı + + + + Could not create new random file <pre>%1</pre>. <pre>%1</pre>yeni rasgele dosya oluşturulamadı. + + + No product + Ürün yok + + + + No description provided. + Açıklama bulunamadı. + + + + (no mount point) + (bağlama noktası yok) + + + + Unpartitioned space or unknown partition table + Bölümlenmemiş alan veya bilinmeyen bölüm tablosu + + + + Recommended + + + <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> + <p>Bu bilgisayar %1 kurmak için önerilen gereksinimlerin bazılarını karşılamıyor.<br/> + Kurulum devam edebilir, ancak bazı özellikler devre dışı kalabilir.</p> + RemoveUserJob - + Remove live user from target system Liveuser kullanıcısını hedef sistemden kaldırın @@ -2824,18 +3170,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. %1 adlı Birim Grubunu kaldır. - + Remove Volume Group named <strong>%1</strong>. <strong>%1</strong> adlı Birim Grubunu kaldır. - + The installer failed to remove a volume group named '%1'. Yükleyici, '%1' adında bir birim grubunu kaldıramadı. @@ -2843,143 +3189,160 @@ Output: ReplaceWidget - + Form Biçim - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. %1 kurulacak diski seçin.<br/><font color="red">Uyarı: </font>Bu işlem seçili disk üzerindeki tüm dosyaları silecek. - + The selected item does not appear to be a valid partition. Seçili nesne, geçerli bir disk bölümü olarak görünmüyor. - + %1 cannot be installed on empty space. Please select an existing partition. %1 tanımlanmamış boş bir alana kurulamaz. Lütfen geçerli bir disk bölümü seçin. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 uzatılmış bir disk bölümüne kurulamaz. Geçerli bir, birincil disk ya da mantıksal disk bölümü seçiniz. - + %1 cannot be installed on this partition. %1 bu disk bölümüne yüklenemedi. - + Data partition (%1) Veri diski (%1) - + Unknown system partition (%1) Bilinmeyen sistem bölümü (%1) - + %1 system partition (%2) %1 sistem bölümü (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>disk bölümü %2 için %1 daha küçük. Lütfen, en az %3 GB kapasiteli bir disk bölümü seçiniz. - + <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. <strong>%2</strong><br/><br/>Bu sistemde EFI disk bölümü bulamadı. Lütfen geri dönün ve %1 kurmak için gelişmiş kurulum seçeneğini kullanın. - - - + + + <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. <strong>%3</strong><br/><br/>%2 üzerine %1 kuracak.<br/><font color="red">Uyarı: </font>%2 diskindeki tüm veriler kaybedilecek. - + The EFI system partition at %1 will be used for starting %2. %1 EFI sistem bölümü %2 başlatmak için kullanılacaktır. - + EFI system partition: EFI sistem bölümü: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Bu bilgisayar %1 yüklemek için asgari sistem gereksinimleri karşılamıyor.<br/> + Kurulum devam edemiyor.</p> + + + + <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> + <p>Bu bilgisayar %1 kurmak için önerilen gereksinimlerin bazılarını karşılamıyor.<br/> + Kurulum devam edebilir, ancak bazı özellikler devre dışı kalabilir.</p> + + ResizeFSJob - + Resize Filesystem Job Dosya Sistemini Yeniden Boyutlandır - + Invalid configuration Geçersiz yapılandırma - + The file-system resize job has an invalid configuration and will not run. Dosya sistemi yeniden boyutlandırma işi sorunlu yapılandırıldı ve çalışmayacak. - + KPMCore not Available KPMCore Hazır değil - + Calamares cannot start KPMCore for the file-system resize job. Calamares dosya sistemi yeniden boyutlandırma işi için KPMCore başlatılamıyor. - - - - - + + + + + Resize Failed Yeniden Boyutlandırılamadı - + The filesystem %1 could not be found in this system, and cannot be resized. %1 dosya sistemi bu sistemde bulunamadı ve yeniden boyutlandırılamıyor. - + The device %1 could not be found in this system, and cannot be resized. %1 aygıtı bu sistemde bulunamadı ve yeniden boyutlandırılamıyor. - - + + The filesystem %1 cannot be resized. %1 dosya sistemi yeniden boyutlandırılamıyor. - - + + The device %1 cannot be resized. %1 aygıtı yeniden boyutlandırılamıyor. - + The filesystem %1 must be resized, but cannot. %1 dosya sistemi yeniden boyutlandırılmalıdır, fakat yapılamaz. - + The device %1 must be resized, but cannot %1 dosya sistemi yeniden boyutlandırılmalıdır, ancak yapılamaz. @@ -2987,22 +3350,22 @@ Output: ResizePartitionJob - + Resize partition %1. %1 bölümünü yeniden boyutlandır. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. <strong>%2MB</strong> <strong>%1</strong> disk bölümü <strong>%3MB</strong> olarak yeniden boyutlandır. - + Resizing %2MiB partition %1 to %3MiB. %1 disk bölümü %2 boyutundan %3 boyutuna ayarlanıyor. - + The installer failed to resize partition %1 on disk '%2'. Yükleyici %1 bölümünü '%2' diski üzerinde yeniden boyutlandırılamadı. @@ -3010,7 +3373,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group Birim Grubunu Yeniden Boyutlandır @@ -3018,18 +3381,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. %1 adındaki birim grubunu %2'den %3'e kadar yeniden boyutlandırın. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. <strong>%1</strong>adındaki birim grubunu <strong>%2</strong>'den <strong>%3</strong>'e yeniden boyutlandırın - + The installer failed to resize a volume group named '%1'. Yükleyici, '%1' adında bir birim grubunu yeniden boyutlandıramadı. @@ -3037,55 +3400,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: En iyi sonucu elde etmek için bilgisayarınızın aşağıdaki gereksinimleri karşıladığından emin olunuz: - + System requirements Sistem gereksinimleri - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Bu bilgisayar %1 kurulumu için minimum gereksinimleri karşılamıyor.<br/>Kurulum devam etmeyecek. <a href="#details">Detaylar...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Bu bilgisayara %1 yüklemek için minimum gereksinimler karşılanamadı. -Kurulum devam edemiyor. <a href="#detaylar">Detaylar...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Bu bilgisayar %1 kurulumu için önerilen gereksinimlerin bazılarına uymuyor. Kurulum devam edebilirsiniz ancak bazı özellikler devre dışı bırakılabilir. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Bu bilgisayara %1 yüklemek için önerilen gereksinimlerin bazıları karşılanamadı.<br/> -Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. - - - - This program will ask you some questions and set up %2 on your computer. - Bu program size bazı sorular soracak ve bilgisayarınıza %2 kuracak. - - ScanningDialog - + Scanning storage devices... Depolama aygıtları taranıyor... - + Partitioning Bölümleme @@ -3093,29 +3426,29 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. SetHostNameJob - + Set hostname %1 %1 sunucu-adı ayarla - + Set hostname <strong>%1</strong>. <strong>%1</strong> sunucu-adı ayarla. - + Setting hostname %1. %1 sunucu-adı ayarlanıyor. + - Internal Error Dahili Hata - - + + Cannot write hostname to target system Hedef sisteme sunucu-adı yazılamadı @@ -3123,29 +3456,29 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Klavye düzeni %1 olarak, alt türevi %2-%3 olarak ayarlandı. - + Failed to write keyboard configuration for the virtual console. Uçbirim için klavye yapılandırmasını kaydetmek başarısız oldu. - - - + + + Failed to write to %1 %1 üzerine kaydedilemedi - + Failed to write keyboard configuration for X11. X11 için klavye yapılandırmaları kaydedilemedi. - + Failed to write keyboard configuration to existing /etc/default directory. /etc/default dizine klavye yapılandırması yazılamadı. @@ -3153,82 +3486,82 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. SetPartFlagsJob - + Set flags on partition %1. %1 bölüm bayrağını ayarla. - + Set flags on %1MiB %2 partition. %1MB %2 disk bölümüne bayrak ayarla. - + Set flags on new partition. Yeni disk bölümüne bayrak ayarla. - + Clear flags on partition <strong>%1</strong>. <strong>%1</strong> bölüm bayrağını kaldır. - + Clear flags on %1MiB <strong>%2</strong> partition. %1MB <strong>%2</strong> disk bölümünden bayrakları temizle. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - %1MB <strong>%2</strong> disk bölüm bayrağı <strong>%3</strong> olarak belirlendi. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - %1MB <strong>%2</strong> disk bölümünden bayraklar temizleniyor. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - <strong>%3</strong> bayrağı %1MB <strong>%2</strong> disk bölümüne ayarlanıyor. - - - + Clear flags on new partition. Yeni disk bölümünden bayrakları temizle. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Bayrak bölüm <strong>%1</strong> olarak <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + %1MB <strong>%2</strong> disk bölüm bayrağı <strong>%3</strong> olarak belirlendi. + + + Flag new partition as <strong>%1</strong>. Yeni disk bölümü <strong>%1</strong> olarak belirlendi. - + Clearing flags on partition <strong>%1</strong>. <strong>%1</strong> bölümünden bayraklar kaldırılıyor. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + %1MB <strong>%2</strong> disk bölümünden bayraklar temizleniyor. + + + Clearing flags on new partition. Yeni disk bölümünden bayraklar temizleniyor. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. <strong>%2</strong> bayrakları <strong>%1</strong> bölümüne ayarlandı. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + <strong>%3</strong> bayrağı %1MB <strong>%2</strong> disk bölümüne ayarlanıyor. + + + Setting flags <strong>%1</strong> on new partition. Yeni disk bölümüne <strong>%1</strong> bayrağı ayarlanıyor. - + The installer failed to set flags on partition %1. Yükleyici %1 bölüm bayraklarını ayarlamakta başarısız oldu. @@ -3236,42 +3569,42 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. SetPasswordJob - + Set password for user %1 %1 Kullanıcı için parola ayarla - + Setting password for user %1. %1 Kullanıcısı için parola ayarlanıyor. - + Bad destination system path. Hedef sistem yolu bozuk. - + rootMountPoint is %1 rootBağlamaNoktası %1 - + Cannot disable root account. root hesap devre dışı bırakılamaz. - + passwd terminated with error code %1. passwd %1 hata kodu ile sonlandı. - + Cannot set password for user %1. %1 Kullanıcısı için parola ayarlanamadı. - + usermod terminated with error code %1. usermod %1 hata koduyla çöktü. @@ -3279,127 +3612,200 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. SetTimezoneJob - + Set timezone to %1/%2 %1/%2 Zaman dilimi ayarla - + Cannot access selected timezone path. Seçilen zaman dilimini yoluna erişilemedi. - + Bad path: %1 Hatalı yol: %1 - + Cannot set timezone. Zaman dilimi ayarlanamadı. - + Link creation failed, target: %1; link name: %2 Link oluşturulamadı, hedef: %1; link adı: %2 - + Cannot set timezone, Bölge ve zaman dilimi ayarlanmadı, - + Cannot open /etc/timezone for writing /etc/timezone açılamadığından düzenlenemedi + + SetupGroupsJob + + + Preparing groups. + Gruplar hazırlanıyor. + + + + + Could not create groups in target system + Hedef sistemde gruplar oluşturulamadı + + + + These groups are missing in the target system: %1 + Bu gruplar hedef sistemde eksik, :%1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + <pre>sudo</pre> kullanıcını yapılandır. + + + + Cannot chmod sudoers file. + Sudoers dosya izinleri ayarlanamadı. + + + + Cannot create sudoers file for writing. + sudoers dosyası oluşturulamadı ve yazılamadı. + + ShellProcessJob - + Shell Processes Job - Kabuk İşlemleri İşi + Uçbirim İşlemleri SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Bu, kurulum prosedürü başlatıldıktan sonra ne gibi değişiklikler dair olacağına genel bir bakış. + + &OK + &TAMAM - - This is an overview of what will happen once you start the install procedure. - Yükleme işlemleri başladıktan sonra yapılacak işlere genel bir bakış. + + &Yes + &Evet - - - SummaryViewStep - - Summary - Kurulum Bilgileri + + &No + &Hayır + + + + &Cancel + &Vazgeç + + + + &Close + &Kapat TrackingInstallJob - + Installation feedback Kurulum geribildirimi - + Sending installation feedback. Kurulum geribildirimi gönderiliyor. - + Internal error in install-tracking. Kurulum izlemede dahili hata. - + HTTP request timed out. HTTP isteği zaman aşımına uğradı. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE kullanıcı geri bildirimi + + + + Configuring KDE user feedback. + KDE kullanıcı geri bildirimleri yapılandırılıyor. + + + + + Error in KDE user feedback configuration. + KDE kullanıcı geri bildirimi yapılandırmasında hata. + + + + Could not configure KDE user feedback correctly, script error %1. + KDE kullanıcı geri bildirimi doğru yapılandırılamadı, komut dosyası hatası %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + KDE kullanıcı geri bildirimi doğru şekilde yapılandırılamadı, %1 Calamares hatası. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Makine geri bildirimi - + Configuring machine feedback. Makine geribildirimini yapılandırma. - - + + Error in machine feedback configuration. - Makine geri bildirim yapılandırmasında hata var. + Makine geri bildirim yapılandırma hatası var. - + Could not configure machine feedback correctly, script error %1. Makine geribildirimi doğru yapılandırılamadı, betik hatası %1. - + Could not configure machine feedback correctly, Calamares error %1. Makine geribildirimini doğru bir şekilde yapılandıramadı, Calamares hata %1. @@ -3407,106 +3813,97 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. TrackingPage - + Form Biçim - + Placeholder Yer tutucu - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Bunu seçerseniz <span style=" font-weight:600;">kurulum hakkında</span> hiçbir bilgi gönderemezsiniz.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Buraya tıklayın <span style=" font-weight:600;">hiçbir bilgi göndermemek için</span> kurulan sisteminiz hakkında.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Kullanıcı geri bildirimi hakkında daha fazla bilgi için burayı tıklayın</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Yükleme takibi, sahip oldukları kaç kullanıcının, hangi donanımın %1'e kurulduğunu ve (son iki seçenekle birlikte) tercih edilen uygulamalar hakkında sürekli bilgi sahibi olmasını sağlamak için %1'e yardımcı olur. Ne gönderileceğini görmek için, lütfen her alanın yanındaki yardım simgesini tıklayın. + + 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. + İzleme, %1 ne sıklıkla yüklendiğini, hangi donanıma kurulduğunu ve hangi uygulamaların kullanıldığını görmesine yardımcı olur. Nelerin gönderileceğini görmek için lütfen her bir alanın yanındaki yardım simgesini tıklayın. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Bunu seçerseniz kurulum ve donanımınız hakkında bilgi gönderirsiniz. Bu bilgi, <b>kurulum tamamlandıktan sonra</b> yalnızca bir kez gönderilecektir. + + 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. + Bunu seçerek kurulumunuz ve donanımınız hakkında bilgi göndereceksiniz. Bu bilgiler, kurulum bittikten sonra <b> yalnızca bir kez </b> gönderilecektir. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Bunu seçerek <b>kurulum, donanım ve uygulamalarınızla ilgili bilgileri</b> düzenli olarak %1'e gönderirsiniz. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Bunu seçerek, periyodik olarak %1'e <b> makine </b> kurulum, donanım ve uygulamalarınız hakkında bilgi gönderirsiniz. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Bunu seçerek <b>kurulum, donanım ve uygulamalarınızla ilgili bilgileri </b> düzenli olarak %1 adresine gönderirsiniz. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Bunu seçerek, <b> kullanıcı </b> kurulumunuz, donanımınız, uygulamalarınız ve uygulama kullanım alışkanlıklarınız hakkında düzenli olarak %1'e bilgi gönderirsiniz. TrackingViewStep - + Feedback Geribildirim + + UmountJob + + + Unmount file systems. + Dosya sistemlerini ayırın. + + + + No target system available. + Mevcut hedef sistemi yok. + + + + No rootMountPoint is set. + Hiçbir rootMountPoint ayarlanmadı. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Bu bilgisayarı birden fazla kişi kullanacaksa, kurulumdan sonra birden fazla kullanıcı hesabı oluşturabilirsiniz.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> - <small>Bu bilgisayarı birden fazla kişi kullanacaksa, yükleme bittikten sonra birden fazla kullanıcı hesabı oluşturabilirsiniz.</small> + <small>Bu bilgisayarı birden fazla kişi kullanacaksa, kurulum bittikten sonra birden fazla kullanıcı hesabı oluşturabilirsiniz.</small> + + + UsersQmlViewStep - - Your username is too long. - Kullanıcı adınız çok uzun. - - - - Your username must start with a lowercase letter or underscore. - Kullanıcı adınız küçük harf veya alt çizgi ile başlamalıdır. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Sadece küçük harflere, sayılara, alt çizgi ve kısa çizgilere izin verilir. - - - - Only letters, numbers, underscore and hyphen are allowed. - Sadece harfler, rakamlar, alt çizgi ve kısa çizgi izin verilir. - - - - Your hostname is too short. - Makine adınız çok kısa. - - - - Your hostname is too long. - Makine adınız çok uzun. - - - - Your passwords do not match! - Parolanız eşleşmiyor! + + Users + Kullanıcı Tercihleri UsersViewStep - + Users Kullanıcı Tercihleri @@ -3514,65 +3911,67 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. VariantModel - + Key + Column header for key/value Anahtar - + Value + Column header for key/value Değer VolumeGroupBaseDialog - + Create Volume Group Birim Grubu Oluştur - + List of Physical Volumes Fiziksel Birimlerin Listesi - + Volume Group Name: Birim Grubu Adı: - + Volume Group Type: Birim Grubu Tipi: - + Physical Extent Size: Fiziksel Genişleme Boyutu: - + MiB MB - + Total Size: Toplam Boyut: - + Used Size: Kullanılan Boyut: - + Total Sectors: Toplam Sektörler: - + Quantity of LVs: LVs Miktarı: @@ -3580,191 +3979,324 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. WelcomePage - + Form Biçim - - + + Select application and system language Uygulama ve sistem dilini seçin + &About + &Hakkında + + + Open donations website Bağış web sitesini aç - + &Donate &Bağış - + Open help and support website Yardım ve destek web sitesini açın + &Support + &Destek + + + Open issues and bug-tracking website Geri bildirim ve hata izleme web sitesi - Open release notes website - Sürüm Notları web sitesini aç - - - - &Release notes - &Sürüm notları - - - &Known issues &Bilinen hatalar - - &Support - &Destek + + Open release notes website + Sürüm Notları web sitesini aç - - &About - &Hakkında + + &Release notes + &Sürüm notları - - <h1>Welcome to the %1 installer.</h1> - <h1>%1 Sistem Yükleyiciye Hoşgeldiniz.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>%1 Calamares Sistem Yükleyici .</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>%1 için Calamares sistem kurulum uygulamasına hoş geldiniz.</h1> - + <h1>Welcome to %1 setup.</h1> - <h1>%1 Kurulumuna Hoşgeldiniz.</h1> + <h1>%1 Kurulumuna Hoş Geldiniz.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>%1 Calamares Sistem Yükleyici .</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>%1 Sistem Yükleyiciye Hoşgeldiniz.</h1> + + + + %1 support + %1 destek + + + About %1 setup %1 kurulum hakkında - + About %1 installer %1 sistem yükleyici hakkında - + <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. - <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Telif Hakkı 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Telif Hakkı 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Teşekkürler <a href="https://calamares.io/team/">Calamares gelişim takımı</a> ve <a href="https://www.transifex.com/calamares/calamares/">Calamares çeviri takımı</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> gelişim sponsoru by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Özgür Yazılım. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 destek + <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Telif Hakkı 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Telif Hakkı 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Teşekkürler <a href="https://calamares.io/team/">Calamares takımı</a> ve <a href="https://www.transifex.com/calamares/calamares/">Calamares çeviri ekibi</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> gelişim sponsoru <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Özgür Yazılım WelcomeQmlViewStep - + Welcome - Hoşgeldiniz + Hoş geldiniz WelcomeViewStep - + Welcome - Hoşgeldiniz + Hoş geldiniz + + + + ZfsJob + + + Create ZFS pools and datasets + ZFS havuzları ve veri kümeleri oluşturun + + + + Failed to create zpool on + üzerinde zpool oluşturulamadı + + + + Configuration Error + Yapılandırma Hatası + + + + No partitions are available for ZFS. + ZFS için disk bölümü yok. + + + + Internal data missing + Dahili veri eksik + + + + + Failed to create zpool + zpool oluşturulamadı + + + + Failed to create dataset + Veri kümesi oluşturulamadı + + + + The output was: + Çıktı şuydu: about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/> + <strong>%3<br/> + için %2</strong><br/><br/> + Telif Hakkı 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/> + Telif Hakkı 2017-2020 Adriaan de Groot &lt;groot@kde.org&gt;<br/> + Teşekkürler <a href='https://calamares.io/team/'>Calamares takımı</a> + ve <a href='https://www.transifex.com/calamares/calamares/'>Calamares + çeviri takımı</a>.<br/><br/> + <a href='https://calamares.io/'>Calamares</a> + gelişim sponsoru <br/> + <a href='http://www.blue-systems.com/'>Blue Systems</a> - + Özgür Yazılım. - + Back - + Geri + + + + calamares-sidebar + + + Show debug information + Hata ayıklama bilgisini göster + + + + finishedq + + + Installation Completed + Yükleme Tamamlandı + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 bilgisayarınıza yüklendi.<br/> + Kurduğunuz sistemi şimdi yeniden başlayabilir veya Canlı ortamı kullanmaya devam edebilirsiniz. + + + + Close Installer + Yükleyiciyi Kapat + + + + Restart System + Sistemi Yeniden Başlat + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Kurulumun tam günlüğü, Live kullanıcısının ana dizininde installation.log olarak mevcuttur.<br/> + Bu günlük, hedef sistemin /var/log/installation.log dosyasına kopyalanır.</p> + + + + finishedq@mobile + + + Installation Completed + Yükleme Tamamlandı + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 bilgisayarınıza yüklendi.<br/> + Artık cihazınızı yeniden başlatabilirsiniz. + + + + Close + Kapat + + + + Restart + Yeniden Başlat + + + + i18n + + + <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>. + <h1>Dil</h1> </br> + Sistem yerel ayarı, bazı komut satırı kullanıcı arabirimi öğelerinin dilini ve karakter kümesini etkiler. Geçerli ayar <strong>%1</strong>'dir + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Yerelleştirme</h1> </br> + Sistem yerel ayarı, sayıları ve tarih biçimini etkiler. Geçerli yerel ayarı <strong>%1</strong>. + + + + Back + Geri keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + Klavye önizlemesini etkinleştirmek için bir düzen seçin. - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + Klavye Modeli: - - Refresh - - - - - + Layouts - + Düzenler - - - Keyboard Layout - + + Type here to test your keyboard + Klavye seçiminizi burada test edebilirsiniz - - Models - - - - + Variants - + Türevler + + + localeq - - Test your keyboard - + + Change + Değiştir notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3772,34 +4304,262 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir. - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice, dünya çapında milyonlarca insan tarafından kullanılan güçlü ve ücretsiz bir ofis paketidir. Onu piyasadaki en çok yönlü Ücretsiz ve Açık Kaynak ofis paketi yapan çeşitli uygulamalar içerir. <br/> + Varsayılan seçenek. - + + LibreOffice + LibreOfis + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Bir ofis paketi yüklemek istemiyorsanız, Office Paketi Yok'u seçmeniz yeterlidir. İhtiyaç duyulduğunda, kurulu sisteminize her zaman bir (veya daha fazlasını) ekleyebilirsiniz. + + + + No Office Suite + Ofis Paketi Yok + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Minimal bir Masaüstü kurulumu oluşturun, tüm ekstra uygulamaları kaldırın ve sisteminize ne eklemek istediğinize daha sonra karar verin. Böyle bir kurulumda nelerin olmayacağına dair örnekler, Office Suite olmayacak, medya oynatıcı olmayacak, resim görüntüleyici veya baskı desteği olmayacak. Yalnızca bir masaüstü, dosya tarayıcısı, paket yöneticisi, metin düzenleyici ve basit web tarayıcısı olacak. + + + + Minimal Install + Asgari Kurulum + + + + Please select an option for your install, or use the default: LibreOffice included. + Lütfen yüklemeniz için bir seçenek seçin veya varsayılanı kullanın: LibreOffice dahildir. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Bu, Flickable içeriğine sahip RichText'teki seçenekleri gösteren örnek bir QML dosyası.</p> + + <p>RichText ile QML HTML etiketleri kullanabilir, Flickable içerik dokunmatik ekranlar için yararlıdır.</p> + + <p><b>Kalın yazı</b></p> + <p><i>Yatık yazı</i></p> + <p><u>Altı çizili yazı</u></p> + <p><center>Ortaya hizalı yazı.</center></p> + <p><s>Üstü çizili yazı</s></p> + + <p>Kod örneği: + <code>ls -l /home</code></p> + + <p><b>Listeler:</b></p> + <ul> + <li>Intel CPU sistemler</li> + <li>AMD CPU sistemler</li> + </ul> + + <p>Dikey kaydırma çubuğu ayarlanabilir, mevcut genişlik 10 olarak ayarlanmıştır.</p> + + + + Back + Geri + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Oturum açmak ve yönetici görevlerini gerçekleştirmek için kullanıcı adınızı ve kimlik bilgilerinizi seçin + + + + What is your name? + Adınız nedir? + + + + Your Full Name + Tam Adınız + + + + What name do you want to use to log in? + Giriş için hangi adı kullanmak istersiniz? + + + + Login Name + Kullanıcı adı + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Bu bilgisayarı birden fazla kişi kullanacaksa, kurulumdan sonra birden fazla hesap oluşturabilirsiniz. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Sadece küçük harflere, sayılara, alt çizgi ve kısa çizgilere izin verilir. + + + + root is not allowed as username. + root kullanıcı adı olarak kulanılmasına izin verilmez. + + + + What is the name of this computer? + Bu bilgisayarın adı nedir? + + + + Computer Name + Bilgisayar Adı + + + + This name will be used if you make the computer visible to others on a network. + Bilgisayarı ağ üzerinde herkese görünür yaparsanız bu ad kullanılacaktır. + + + + localhost is not allowed as hostname. + localhost ana bilgisayar adı olarak kullanılmasına izin verilmez. + + + + Choose a password to keep your account safe. + Hesabınızın güvenliğini sağlamak için bir parola belirleyiniz. + + + + Password + Şifre + + + + Repeat Password + Şifreyi Tekrarla + + + + 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. + Yazım hataları açısından kontrol edilebilmesi için aynı parolayı iki kez girin. İyi bir şifre, harflerin, sayıların ve noktalama işaretlerinin bir karışımını içerecektir, en az sekiz karakter uzunluğunda olmalı ve düzenli aralıklarla değiştirilmelidir. + + + + Validate passwords quality + Parola kalitesini doğrulayın + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Bu kutu işaretlendiğinde parola gücü kontrolü yapılır ve zayıf bir parola kullanamazsınız. + + + + Log in automatically without asking for the password + Parola sormadan otomatik olarak oturum açın + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + En az iki karakter olmak üzere yalnızca harflere, sayılara, alt çizgiye ve kısa çizgiye izin verilir. + + + + Reuse user password as root password + Kullanıcı şifresini yetkili kök şifre olarak kullan + + + + Use the same password for the administrator account. + Yönetici ile kullanıcı aynı şifreyi kullansın. + + + + Choose a root password to keep your account safe. + Hesabınızı güvende tutmak için bir kök şifre seçin. + + + + Root Password + Kök Şifre + + + + Repeat Root Password + Kök Şifresini Tekrarla + + + + Enter the same password twice, so that it can be checked for typing errors. + Yazım hataları açısından kontrol edilebilmesi için aynı parolayı iki kez girin. + + + + welcomeq + + + <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> + <h3>%1 <quote>%2</quote> sistem yükleyicisine hoş geldiniz</h3> + <p>Bu program size bazı sorular soracak ve bilgisayarınıza %1 kuracak.</p> + + + About Hakkında - + Support Destek - + Known issues Bilinen sorunlar - + Release notes Sürüm notları - + Donate Bağış diff --git a/lang/calamares_uk.ts b/lang/calamares_uk.ts index 0fa009f6f..1d1001140 100644 --- a/lang/calamares_uk.ts +++ b/lang/calamares_uk.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + Керування параметрами автомонтування + + BootInfoWidget - + 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. <strong>Завантажувальне середовище</strong> цієї системи.<br><br>Старі x86-системи підтримують тільки <strong>BIOS</strong>.<br>Нові системи зазвичай використовують<strong>EFI</strong>, проте їх може бути показано як BIOS, якщо запущено у режимі сумісності. - + 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. Цю систему було запущено із завантажувальним середовищем <strong>EFI</strong>.<br><br>Щоб налаштувати завантаження з середовища EFI, засіб встановлення повинен встановити на <strong>Системний Розділ EFI</strong> програму-завантажувач таку, як <strong>GRUB</strong> або <strong>systemd-boot</strong>. Це буде зроблено автоматично, якщо ви не обрали розподілення диску вручну. В останньому випадку вам потрібно обрати завантажувач або встановити його власноруч. - + 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. Цю систему було запущено із завантажувальним середовищем <strong>BIOS</strong>.<br><br>Щоб налаштувати завантаження з середовища BIOS, засіб встановлення повинен встановити завантажувач, такий, як <strong>GRUB</strong> або на початку розділу або у <strong>Головний Завантажувальний Запис (Master Boot Record)</strong> біля початку таблиці розділів (рекомендовано). Це буде зроблено автоматично, якщо вами не вибрано поділ диска вручну. В останньому випадку вам потрібно встановити завантажувач власноруч. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 Головний Завантажувальний Запис (Master Boot Record) %1 - + Boot Partition Завантажувальний розділ - + System Partition Системний розділ - + Do not install a boot loader Не встановлювати завантажувач - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page Порожня сторінка @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form Форма - + GlobalStorage Глобальне сховище - + JobQueue Черга завдань - + Modules Модулі - + Type: Тип: - - + + none немає - + Interface: Інтерфейс: - - Tools - Інструменти + + Crashes Calamares, so that Dr. Konqui can look at it. + Ініціює аварійне завершення роботи Calamares, щоб дані можна було переглянути у Dr. Konqui. - + + Reloads the stylesheet from the branding directory. + Перезавантажує таблицю стилів із каталогу бренда. + + + + Uploads the session log to the configured pastebin. + Вивантажує журнал сеансу до налаштованої служби зберігання. + + + + Send Session Log + Надіслати журнал сеансу + + + Reload Stylesheet Перезавантажити таблицю стилів - + + Displays the tree of widget names in the log (for stylesheet debugging). + Показує ієрархію назв віджетів у журналі (для діагностики таблиці стилів). + + + Widget Tree Дерево віджетів - + Debug information Діагностична інформація @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up Налаштувати - + Install Встановити @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) Не вдалося виконати завдання (%1) - + Programmed job failure was explicitly requested. Невдача в запрограмованому завданні була чітко задана. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done Готово @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) Приклад завдання (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. Виконати команду «%1» у системі призначення. - + Run command '%1'. Виконати команду «%1». - + Running command %1 %2 Виконуємо команду %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. Запуск операції %1. - + Bad working directory path Неправильний шлях робочого каталогу - + Working directory %1 for python job %2 is not readable. Неможливо прочитати робочу директорію %1 для завдання python %2. - + Bad main script file Неправильний файл головного сценарію - + Main script file %1 for python job %2 is not readable. Неможливо прочитати файл головного сценарію %1 для завдання python %2. - + Boost.Python error in job "%1". Помилка Boost.Python у завданні "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... Завантаження… - + QML Step <i>%1</i>. Крок QML <i>%1</i>. - + Loading failed. Не вдалося завантажити. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Перевірку виконання вимог щодо модуля <i>%1</i> завершено. + - + Waiting for %n module(s). Очікування %n модулю. @@ -238,7 +271,7 @@ - + (%n second(s)) (%n секунда) @@ -248,7 +281,7 @@ - + System-requirements checking is complete. Перевірка системних вимог завершена. @@ -256,247 +289,241 @@ Calamares::ViewManager - - &Back - &Назад - - - - &Next - &Вперед - - - - &Cancel - &Скасувати - - - - Cancel setup without changing the system. - Скасувати налаштування без зміни системи. - - - - Cancel installation without changing the system. - Скасувати встановлення без зміни системи. - - - + Setup Failed Помилка встановлення - - Would you like to paste the install log to the web? - Хочете викласти журнал встановлення у мережі? + + Installation Failed + Помилка під час встановлення - + + Error + Помилка + + + + &Yes + &Так + + + + &No + &Ні + + + + &Close + &Закрити + + + Install Log Paste URL Адреса для вставлення журналу встановлення - + The upload was unsuccessful. No web-paste was done. Не вдалося вивантажити дані. - + + Install log posted to + +%1 + +Link copied to clipboard + Журнал встановлення записано до + +%1 + +Посилання скопійовано до буфера обміну + + + Calamares Initialization Failed Помилка ініціалізації Calamares - + %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. %1 неможливо встановити. Calamares не зміг завантажити всі налаштовані модулі. Ця проблема зв'язана з тим, як Calamares використовується дистрибутивом. - + <br/>The following modules could not be loaded: <br/>Не вдалося завантажити наступні модулі: - + + Continue with setup? + Продовжити встановлення? + + + Continue with installation? Продовжити встановлення? - + 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> Програма налаштування %1 збирається внести зміни до вашого диска, щоб налаштувати %2. <br/><strong> Ви не зможете скасувати ці зміни.</strong> - + + 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> + Засіб встановлення %1 має намір внести зміни до розподілу вашого диска, щоб встановити %2.<br/><strong>Ці зміни неможливо буде скасувати.</strong> + + + &Set up now &Налаштувати зараз - + + &Install now + &Встановити зараз + + + + Go &back + Перейти &назад + + + &Set up &Налаштувати - + &Install &Встановити - + Setup is complete. Close the setup program. Встановлення виконано. Закрити програму встановлення. - + + The installation is complete. Close the installer. + Встановлення виконано. Завершити роботу засобу встановлення. + + + + Cancel setup without changing the system. + Скасувати налаштування без зміни системи. + + + + Cancel installation without changing the system. + Скасувати встановлення без зміни системи. + + + + &Next + &Вперед + + + + &Back + &Назад + + + + &Done + &Закінчити + + + + &Cancel + &Скасувати + + + Cancel setup? Скасувати налаштування? - + Cancel installation? Скасувати встановлення? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. Ви насправді бажаєте скасувати поточну процедуру налаштовування? Роботу програми для налаштовування буде завершено, а усі зміни буде втрачено. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. Чи ви насправді бажаєте скасувати процес встановлення? Роботу засобу встановлення буде завершено, і всі зміни буде втрачено. - - - - &Yes - &Так - - - - - &No - &Ні - - - - &Close - &Закрити - - - - Continue with setup? - Продовжити встановлення? - - - - 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> - Засіб встановлення %1 має намір внести зміни до розподілу вашого диска, щоб встановити %2.<br/><strong>Ці зміни неможливо буде скасувати.</strong> - - - - &Install now - &Встановити зараз - - - - Go &back - Перейти &назад - - - - &Done - &Закінчити - - - - The installation is complete. Close the installer. - Встановлення виконано. Завершити роботу засобу встановлення. - - - - Error - Помилка - - - - Installation Failed - Помилка під час встановлення - CalamaresPython::Helper - + Unknown exception type Невідомий тип виключної ситуації - + unparseable Python error нерозбірлива помилка Python - + unparseable Python traceback нерозбірливе відстеження помилки Python - + Unfetchable Python error. Помилка Python, інформацію про яку неможливо отримати. - - CalamaresUtils - - - Install log posted to: -%1 - Журнал встановлення викладено за адресою: -%1 - - CalamaresWindow - - &Back - &Назад - - - - &Next - &Вперед - - - - &Cancel - &Скасувати - - - + %1 Setup Program Програма для налаштовування %1 - + %1 Installer Засіб встановлення %1 + + + ChangeFilesystemLabelJob - - Show debug information - Показати діагностичну інформацію + + Set filesystem label on %1. + Встановити мітку файлової системи для %1. + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + Встановити мітку файлової системи <strong>%1</strong> для розділу <strong>%2</strong>. + + + + The installer failed to update partition table on disk '%1'. + Установник зазнав невдачі під час оновлення таблиці розділів на диску '%1'. CheckerContainer - + Gathering system information... Збираємо інформацію про систему... @@ -504,157 +531,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form Форма - - After: - Після: - - - - Boot loader location: - Розташування завантажувача: - - - + Select storage de&vice: Обрати &пристрій зберігання: - - - - + + + + Current: Зараз: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>Поділ на розділи вручну</strong><br/>Ви можете створити розділи або змінити розміри наявних розділів власноруч. Обов'язково слід мати таблицю розділів GPT і <strong>розділ /boot у форматі fat32 розміром 512МБ, якщо встановлення відбувається у системі з UEFI</strong>. Скористайтеся вже створеним розділом без його форматування або створіть новий. + + After: + Після: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>Розподілення вручну</strong><br/>Ви можете створити або змінити розмір розділів власноруч. + + + Reuse %1 as home partition for %2. Використати %1 як домашній розділ (home) для %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>Оберіть розділ для зменшення, потім тягніть повзунок, щоб змінити розмір</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 буде стиснуто до %2 МіБ. Натомість буде створено розділ розміром %3 МіБ для %4. - + + Boot loader location: + Розташування завантажувача: + + + <strong>Select a partition to install on</strong> <strong>Оберіть розділ, на який встановити</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. В цій системі не знайдено жодного системного розділу EFI. Щоб встановити %1, будь ласка, поверніться та оберіть розподілення вручну. - + The EFI system partition at %1 will be used for starting %2. Системний розділ EFI %1 буде використано для встановлення %2. - + EFI system partition: Системний розділ EFI: - + 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. Цей пристрій зберігання, схоже, не має жодної операційної системи. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Очистити диск</strong><br/>Це <font color="red">знищить</font> всі данні, присутні на обраному пристрої зберігання. - - 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. - На цьому пристрої зберігання є %1. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - - - - No Swap - Без резервної пам'яті - - - - Reuse Swap - Повторно використати резервну пам'ять - - - - Swap (no Hibernate) - Резервна пам'ять (без присипляння) - - - - Swap (with Hibernate) - Резервна пам'ять (із присиплянням) - - - - Swap to file - Резервна пам'ять у файлі - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Встановити поруч</strong><br/>Засіб встановлення зменшить розмір розділу, щоб вивільнити простір для %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Замінити розділ</strong><br/>Замінити розділу на %1. - + + 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. + На цьому пристрої зберігання є %1. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. + + + 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. На цьому пристрої зберігання вже є операційна система. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. - + 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. На цьому пристрої зберігання вже є декілька операційних систем. Що ви бажаєте зробити?<br/>У вас буде можливість переглянути та підтвердити все, що ви обрали перед тим, як будуть зроблені будь-які зміни на пристрої зберігання. + + + 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/> + На пристрої для зберігання даних може бути інша операційна система, але його таблиця розділів <strong>%1</strong> не є потрібною — <strong>%2</strong>.<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + На цьому пристрої для зберігання даних <strong>змонтовано</strong> один із його розділів. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + Цей пристрій для зберігання даних є частиною пристрою <strong>неактивного RAID</strong>. + + + + No Swap + Без резервної пам'яті + + + + Reuse Swap + Повторно використати резервну пам'ять + + + + Swap (no Hibernate) + Резервна пам'ять (без присипляння) + + + + Swap (with Hibernate) + Резервна пам'ять (із присиплянням) + + + + Swap to file + Резервна пам'ять у файлі + ClearMountsJob - + + Successfully unmounted %1. + %1 успішно демонтовано. + + + + Successfully disabled swap %1. + Успішно вимкнено резервну пам'ять %1. + + + + Successfully cleared swap %1. + Успішно очищено резервну пам'ять %1. + + + + Successfully closed mapper device %1. + Успішно закрито пристрій прив'язки %1. + + + + Successfully disabled volume group %1. + Успішно вимкнено групу томів %1. + + + Clear mounts for partitioning operations on %1 Очистити точки підключення для операцій над розділами на %1 - + Clearing mounts for partitioning operations on %1. Очищення точок підключення для операцій над розділами на %1. - + Cleared all mounts for %1 Очищено всі точки підключення для %1 @@ -662,22 +729,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. Очистити всі тимчасові точки підключення. - + Clearing all temporary mounts. Очищення всіх тимчасових точок підключення. - - Cannot get list of temporary mounts. - Неможливо отримати список тимчасових точок підключення. - - - + Cleared all temporary mounts. Очищено всі тимчасові точки підключення. @@ -685,18 +747,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. Не вдалося виконати команду. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. Програма запускається у середовищі основної системи і потребує даних щодо кореневої теки, але не визначено rootMountPoint. - + The command needs to know the user's name, but no username is defined. Команді потрібні дані щодо імені користувача, але ім'я користувача не визначено. @@ -704,100 +766,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Цей комп'ютер не задовольняє мінімальні вимоги для налаштовування %1.<br/>Налаштовування неможливо продовжити. <a href="#details">Докладніше...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Цей комп'ютер не задовольняє мінімальні вимоги для встановлення %1.<br/>Встановлення неможливо продовжити. <a href="#details">Докладніше...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Цей комп'ютер не задовольняє рекомендовані вимоги щодо налаштовування %1. Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Цей комп'ютер не задовольняє рекомендовані вимоги для встановлення %1.<br/>Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними. - - - - This program will ask you some questions and set up %2 on your computer. - Ця програма поставить кілька питань та встановить %2 на ваш комп'ютер. - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>Вітаємо у програмі налаштовування Calamares для %1.</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>Вітаємо у програмі для налаштовування %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Ласкаво просимо до засобу встановлення Calamares для %1.</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>Ласкаво просимо до засобу встановлення %1.</h1> - - - + Set keyboard model to %1.<br/> Встановити модель клавіатури як %1.<br/> - + Set keyboard layout to %1/%2. Встановити розкладку клавіатури як %1/%2. - + + Set timezone to %1/%2. + Встановити часовий пояс %1/%2. + + + The system language will be set to %1. Мову %1 буде встановлено як системну. - + The numbers and dates locale will be set to %1. %1 буде встановлено як локаль чисел та дат. - - Set timezone to %1/%2.<br/> - Встановити зону %1/%2.<br/> - - - + Network Installation. (Disabled: Incorrect configuration) Встановлення за допомогою мережі. (Вимкнено: помилкові налаштування) - + Network Installation. (Disabled: Received invalid groups data) Встановлення через мережу. (Вимкнено: Отримано неправильні дані про групи) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) Встановлення з мережі. (Вимкнено: внутрішня помилка) - + + Network Installation. (Disabled: No package list) + Встановлення з мережі. (Вимкнено: немає списку пакунків) + + + + Package selection + Вибір пакетів + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) Встановлення через мережу. (Вимкнено: Неможливо отримати список пакетів, перевірте ваше підключення до мережі) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + Цей комп'ютер не задовольняє мінімальні вимоги для налаштовування %1.<br/>Налаштовування неможливо продовжити. <a href="#details">Докладніше...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + Цей комп'ютер не задовольняє мінімальні вимоги для встановлення %1.<br/>Встановлення неможливо продовжити. <a href="#details">Докладніше...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + Цей комп'ютер не задовольняє рекомендовані вимоги щодо налаштовування %1. Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + Цей комп'ютер не задовольняє рекомендовані вимоги для встановлення %1.<br/>Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними. + + + + This program will ask you some questions and set up %2 on your computer. + Ця програма поставить кілька питань та встановить %2 на ваш комп'ютер. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Вітаємо у програмі налаштовування Calamares для %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Вітаємо у програмі для налаштовування %1</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Ласкаво просимо до засобу встановлення Calamares для %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Ласкаво просимо до засобу встановлення %1</h1> + + + + Your username is too long. + Ваше ім'я задовге. + + + + '%1' is not allowed as username. + «%1» не можна використовувати як ім'я користувача. + + + + Your username must start with a lowercase letter or underscore. + Ваше ім'я користувача має починатися із малої літери або символу підкреслювання. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Можна використовувати лише латинські літери нижнього регістру, цифри, символи підкреслювання та дефіси. + + + + Your hostname is too short. + Назва вузла є надто короткою. + + + + Your hostname is too long. + Назва вузла є надто довгою. + + + + '%1' is not allowed as hostname. + «%1» не можна використовувати як назву вузла. + + + + Only letters, numbers, underscore and hyphen are allowed. + Можна використовувати лише латинські літери, цифри, символи підкреслювання та дефіси. + + + + Your passwords do not match! + Паролі не збігаються! + + + + OK! + Гаразд! + + + + Setup Failed + Помилка встановлення + + + + Installation Failed + Помилка під час встановлення + + + + The setup of %1 did not complete successfully. + Налаштування %1 не завершено успішно. + + + + The installation of %1 did not complete successfully. + Встановлення %1 не завершено успішно. + + + + Setup Complete + Налаштовування завершено + + + + Installation Complete + Встановлення завершено + + + + The setup of %1 is complete. + Налаштовування %1 завершено. + + + + The installation of %1 is complete. + Встановлення %1 завершено. + + + + Package Selection + Вибір пакетів + + + + Please pick a product from the list. The selected product will be installed. + Будь ласка, виберіть продукт зі списку. Буде встановлено вибраний продукт. + + + + Install option: <strong>%1</strong> + Варіант встановлення: <strong>%1</strong> + + + + None + Немає + + + + Summary + Огляд + + + + This is an overview of what will happen once you start the setup procedure. + Це огляд того, що трапиться коли ви почнете процедуру налаштовування. + + + + This is an overview of what will happen once you start the install procedure. + Це огляд того, що трапиться коли ви почнете процедуру встановлення. + ContextualProcessJob - + Contextual Processes Job Завдання контекстових процесів @@ -805,100 +1002,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition Створити розділ - - MiB - МіБ - - - - Partition &Type: - &Тип розділу: - - - - &Primary - &Основний - - - - E&xtended - &Розширений - - - - Fi&le System: - &Файлова система: - - - - LVM LV name - Назва логічного тому LVM - - - - Flags: - Прапорці: - - - - &Mount Point: - Точка &підключення: - - - + Si&ze: Ро&змір: - + + MiB + МіБ + + + + Partition &Type: + &Тип розділу: + + + + Primar&y + Ос&новний + + + + E&xtended + &Розширений + + + + Fi&le System: + &Файлова система: + + + + LVM LV name + Назва логічного тому LVM + + + + &Mount Point: + Точка &підключення: + + + + Flags: + Прапорці: + + + + Label for the filesystem + Мітка файлової системи + + + + FS Label: + Мітка ФС: + + + En&crypt За&шифрувати - + Logical Логічний - + Primary Основний - + GPT GPT - + Mountpoint already in use. Please select another one. Точка підключення наразі використовується. Оберіть, будь ласка, іншу. + + + Mountpoint must start with a <tt>/</tt>. + Точка монтування має починатися з <tt>/</tt>. + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + Створити розділ %1МіБ на %3 (%2) із записами %4. + + + + Create new %1MiB partition on %3 (%2). + Створити розділ %1МіБ на %3 (%2). + + + Create new %2MiB partition on %4 (%3) with file system %1. Створити розділ у %2 МіБ на %4 (%3) із файловою системою %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + Створити розділ <strong>%1МіБ</strong> на <strong>%3</strong> (%2) із записами <em>%4</em>. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + Створити розділ <strong>%1МіБ</strong> на <strong>%3</strong> (%2). + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. Створити розділ у <strong>%2 МіБ</strong> на <strong>%4</strong> (%3) із файловою системою <strong>%1</strong>. - + + Creating new %1 partition on %2. Створення нового розділу %1 на %2. - + The installer failed to create partition on disk '%1'. Засобу встановлення не вдалося створити розділ на диску «%1». @@ -906,27 +1139,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table Створити таблицю розділів - + Creating a new partition table will delete all existing data on the disk. Створення нової таблиці розділів знищить всі данні, які зберігалися на диску. - + What kind of partition table do you want to create? Таблицю розділів якого типу ви бажаєте створити? - + Master Boot Record (MBR) Головний завантажувальний запис (MBR) - + GUID Partition Table (GPT) Таблиця розділів GUID (GPT) @@ -934,22 +1167,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. Створити нову таблицю розділів %1 на %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). Створити нову таблицю розділів <strong>%1</strong> на <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. Створення нової таблиці розділів %1 на %2. - + The installer failed to create a partition table on %1. Засобу встановлення не вдалося створити таблицю розділів на %1. @@ -957,45 +1190,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Створити користувача %1 - + Create user <strong>%1</strong>. Створити користувача <strong>%1</strong>. - - Creating user %1. - Створення користувача %1. + + Preserving home directory + Зберігаємо домашній каталог - - Sudoers dir is not writable. - Каталог sudoers є непридатним до запису. + + + Creating user %1 + Створення запису користувача %1 - - Cannot create sudoers file for writing. - Неможливо створити файл sudoers для запису. + + Configuring user %1 + Налаштовуємо запис користувача %1 - - Cannot chmod sudoers file. - Неможливо встановити права на файл sudoers. - - - - Cannot open groups file for reading. - Неможливо відкрити файл груп для читання. + + Setting file permissions + Встановлюємо права доступу до файлів CreateVolumeGroupDialog - + Create Volume Group Створити групу томів @@ -1003,22 +1232,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. Створити групу томів із назвою %1. - + Create new volume group named <strong>%1</strong>. Створити групу томів із назвою <strong>%1</strong>. - + Creating new volume group named %1. Створення групи томів із назвою %1. - + The installer failed to create a volume group named '%1'. Засобу встановлення не вдалося створити групу томів із назвою «%1». @@ -1026,18 +1255,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. Скасувати активацію групи томів із назвою %1. - + Deactivate volume group named <strong>%1</strong>. Скасувати активацію групи томів із назвою <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. Засобу встановлення не вдалося скасувати активацію групи томів із назвою «%1». @@ -1045,22 +1274,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. Видалити розділ %1. - + Delete partition <strong>%1</strong>. Видалити розділ <strong>%1</strong>. - + Deleting partition %1. Видалення розділу %1. - + The installer failed to delete partition %1. Засобу встановлення не вдалося вилучити розділ %1. @@ -1068,46 +1297,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - Тип <strong>таблиці розділів</strong> на вибраному пристрої зберігання даних.<br><br>Єдиний спосіб змінити таблицю розділів — це очистити і створити таблицю розділів з нуля, що знищить всі дані на пристрої зберігання.<br>Засіб встановлення залишить поточну таблицю розділів, якщо ви явно не виберете інше.<br>Якщо не впевнені, на більш сучасних системах надайте перевагу GPT. - - - + This device has a <strong>%1</strong> partition table. На цьому пристрої таблиця розділів <strong>%1</strong>. - + 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. Це <strong>loop-пристрій</strong>.Це псевдо-пристрій, що не має таблиці розділів та дозволяє доступ до файлу як до блокового пристрою. Цей спосіб налаштування зазвичай містить одну єдину файлову систему. - + 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. Засобу встановлення <strong>не вдалося визначити таблицю розділів</strong> на обраному пристрої зберігання.<br><br>Пристрій або на має таблиці розділів, або таблицю розділів пошкоджено чи вона невідомого типу.<br>Засіб встановлення може створити нову таблицю розділів для вас, автоматично або за допомогою сторінки розподілення вручну. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>Це рекомендований тип таблиці розділів для сучасних систем, які запускаються за допомогою завантажувального середовища <strong>EFI</strong>. - + <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. <br><br>Цей тип таблиці розділів рекомендований лише для старих систем, які запускаються за допомогою завантажувального середовища <strong>BIOS</strong>. GPT рекомендовано у більшості інших випадків.<br><br><strong>Попередження:</strong> таблиця розділів MBR - це застарілий стандарт часів MS-DOS. Можливо створити <br>Лише 4 <em>основних</em> розділів, один зі яких може бути <em>розширеним</em>, який в свою чергу може містити багато <em>логічних</em> розділів. + + + 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. + Тип <strong>таблиці розділів</strong> на вибраному пристрої зберігання даних.<br><br>Єдиний спосіб змінити таблицю розділів — це очистити і створити таблицю розділів з нуля, що знищить всі дані на пристрої зберігання.<br>Засіб встановлення залишить поточну таблицю розділів, якщо ви явно не виберете інше.<br>Якщо не впевнені, на більш сучасних системах надайте перевагу GPT. + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 – (%2) @@ -1116,17 +1345,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 Записати налаштування LUKS для Dracut до %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Пропустити запис налаштування LUKS для Dracut: розділ "/" не зашифрований - + Failed to open %1 Не вдалося відкрити %1 @@ -1134,7 +1363,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job Завдання-макет C++ @@ -1142,123 +1371,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition Редагування розділу - - Content: - Вміст: + + Con&tent: + В&міст: - + &Keep За&лишити - + Format Форматувати - + Warning: Formatting the partition will erase all existing data. Попередження: Форматування розділу знищить всі присутні на ньому дані. - + &Mount Point: Точка &підключення: - + Si&ze: Ро&змір: - + MiB МіБ - + Fi&le System: &Файлова система: - + Flags: Прапорці: - - Mountpoint already in use. Please select another one. - Точка підключення наразі використовується. Оберіть, будь ласка, іншу. + + Label for the filesystem + Мітка файлової системи + + + + FS Label: + Мітка ФС: EncryptWidget - + Form Форма - + En&crypt system За&шифрувати систему - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + Здається, у вашій системі недостатня підтримка шифрування для шифрування усієї системи. Ви можете увімкнути шифрування, але від цього може постраждати швидкодія. + + + Passphrase Ключова фраза - + Confirm passphrase Підтвердження ключової фрази - + + Please enter the same passphrase in both boxes. Будь ласка, введіть однакову ключову фразу у обидва текстові вікна. + + ErrorDialog + + + Details: + Подробиці: + + + + Would you like to paste the install log to the web? + Хочете викласти журнал встановлення у мережі? + + FillGlobalStorageJob - + Set partition information Ввести інформацію про розділ - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + Встановити %1 на <strong>новий</strong> системний розділ %2 із можливостями <em>%3</em> + + + Install %1 on <strong>new</strong> %2 system partition. Встановити %1 на <strong>новий</strong> системний розділ %2. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - Налаштувати <strong>новий</strong> розділ %2 з точкою підключення <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + Налаштувати <strong>новий</strong> розділ %2 із точкою монтування <strong>%1</strong> і можливостями <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + Налаштувати <strong>новий</strong> розділ %2 із точкою монтування <strong>%1</strong>%3. + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + Встановити %2 на системний розділ %3 <strong>%1</strong> із можливостями <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + Налаштувати розділ %3 <strong>%1</strong> із точкою монтування <strong>%2</strong> і можливостями <em>%4</em>. + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + Налаштувати розділ %3 <strong>%1</strong> із точкою монтування <strong>%2</strong>%4. + + + Install %2 on %3 system partition <strong>%1</strong>. Встановити %2 на системний розділ %3 <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - Налаштувати розділ %3 <strong>%1</strong> з точкою підключення <strong>%2</strong>. - - - + Install boot loader on <strong>%1</strong>. Встановити завантажувач на <strong>%1</strong>. - + Setting up mount points. Налаштування точок підключення. @@ -1266,93 +1539,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form Форма - + &Restart now &Перезавантажити зараз - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>Виконано.</h1><br/>На вашому комп'ютері було налаштовано %1.<br/>Можете починати користуватися вашою новою системою. - + <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> <html><head/><body><p>Якщо позначено цей пункт, вашу систему буде негайно перезапущено після натискання кнопки <span style="font-style:italic;">Закінчити</span> або закриття вікна програми для налаштовування.</p></body></html> - + <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. <h1>Все зроблено.</h1><br/>%1 встановлено на ваш комп'ютер.<br/>Ви можете перезавантажитися до вашої нової системи або продовжити використання Live-середовища %2. - + <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> <html><head/><body><p>Якщо позначено цей пункт, вашу систему буде негайно перезапущено після натискання кнопки <span style="font-style:italic;">Закінчити</span> або закриття вікна засобу встановлення.</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>Не вдалося налаштувати</h1><br/>%1 не було налаштовано на вашому комп'ютері.<br/>Повідомлення про помилку: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>Встановлення зазнало невдачі</h1><br/>%1 не було встановлено на Ваш комп'ютер.<br/>Повідомлення про помилку: %2. - FinishedViewStep + FinishedQmlViewStep - + Finish Завершити + + + FinishedViewStep - - Setup Complete - Налаштовування завершено - - - - Installation Complete - Встановлення завершено - - - - The setup of %1 is complete. - Налаштовування %1 завершено. - - - - The installation of %1 is complete. - Встановлення %1 завершено. + + Finish + Завершити FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. Форматувати розділ %1 (файлова система: %2, розмір: %3 МіБ) на %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. Форматувати розділ у <strong>%3 МіБ</strong> <strong>%1</strong> з використанням файлової системи <strong>%2</strong>. - + Formatting partition %1 with file system %2. Форматування розділу %1 з файловою системою %2. - + The installer failed to format partition %1 on disk '%2'. Засобу встановлення не вдалося виконати форматування розділу %1 на диску «%2». @@ -1360,72 +1621,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space містить принаймні %1 ГіБ місця на диску - + There is not enough drive space. At least %1 GiB is required. На диску недостатньо місця. Потрібно принаймні %1 ГіБ. - + has at least %1 GiB working memory має принаймні %1 ГіБ робочої пам'яті - + The system does not have enough working memory. At least %1 GiB is required. У системі немає достатнього об'єму робочої пам'яті. Потрібно принаймні %1 ГіБ. - + is plugged in to a power source підключена до джерела живлення - + The system is not plugged in to a power source. Система не підключена до джерела живлення. - + is connected to the Internet з'єднано з мережею Інтернет - + The system is not connected to the Internet. Система не з'єднана з мережею Інтернет. - + is running the installer as an administrator (root) виконує засіб встановлення від імені адміністратора (root) - + The setup program is not running with administrator rights. Програму для налаштовування запущено не від імені адміністратора. - + The installer is not running with administrator rights. Засіб встановлення запущено без прав адміністратора. - + has a screen large enough to show the whole installer має достатньо великий для усього вікна засобу встановлення екран - + The screen is too small to display the setup program. Екран є замалим для показу вікна засобу налаштовування. - + The screen is too small to display the installer. Екран замалий для показу вікна засобу встановлення. @@ -1433,7 +1694,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. Збираємо дані щодо вашого комп'ютера. @@ -1441,25 +1702,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier Пакетний ідентифікатор OEM - + Could not create directories <code>%1</code>. Не вдалося створити каталоги <code>%1</code>. - + Could not open file <code>%1</code>. Не вдалося відкрити файл <code>%1</code>. - + Could not write to file <code>%1</code>. Не вдалося виконати запис до файла <code>%1</code>. @@ -1467,7 +1728,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. Створення initramfs за допомогою mkinitcpio. @@ -1475,7 +1736,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. Створюємо initramfs. @@ -1483,17 +1744,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed Konsole не встановлено - + Please install KDE Konsole and try again! Будь ласка встановіть KDE Konsole і спробуйте знову! - + Executing script: &nbsp;<code>%1</code> Виконується скрипт: &nbsp;<code>%1</code> @@ -1501,28 +1762,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script Скрипт - - KeyboardPage - - - Set keyboard model to %1.<br/> - Встановити модель клавіатури як %1.<br/> - - - - Set keyboard layout to %1/%2. - Встановити розкладку клавіатури як %1/%2. - - KeyboardQmlViewStep - + Keyboard Клавіатура @@ -1530,7 +1778,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Клавіатура @@ -1538,65 +1786,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting Налаштування системної локалі - + 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>. - Налаштування системної локалі впливає на мову та набір символів для деяких елементів інтерфейсу командного рядку.<br/>Наразі встановлено <strong>%1</strong>. + Налаштування системної локалі впливає на мову та набір символів для деяких елементів інтерфейсу командного рядка.<br/>Зараз встановлено <strong>%1</strong>. - + &Cancel &Скасувати - + &OK &OK + + LOSHJob + + + Configuring encrypted swap. + Налаштовуємо зашифрований розділ резервної пам'яті. + + + + No target system available. + Немає доступної цільової системи. + + + + No rootMountPoint is set. + Не встановлено rootMountPoint. + + + + No configFilePath is set. + Не встановлено configFilePath. + + LicensePage - + Form Форма - + <h1>License Agreement</h1> <h1>Ліцензійна угода</h1> - + I accept the terms and conditions above. Я приймаю положення та умови, що наведені вище. - + Please review the End User License Agreements (EULAs). Будь ласка, перегляньте ліцензійні угоди із кінцевим користувачем (EULA). - + This setup procedure will install proprietary software that is subject to licensing terms. Під час цієї процедури налаштовування буде встановлено закрите програмне забезпечення, використання якого передбачає згоду із умовами ліцензійної угоди. - + If you do not agree with the terms, the setup procedure cannot continue. Якщо ви не погодитеся із умовами, виконання подальшої процедури налаштовування стане неможливим. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. Під час цієї процедури налаштовування може бути встановлено закрите програмне забезпечення з метою забезпечення реалізації та розширення додаткових можливостей. Використання цього програмного забезпечення передбачає згоду із умовами ліцензійної угоди. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. Якщо ви не погодитеся із умовами ліцензування, закрите програмне забезпечення не буде встановлено. Замість нього буде використано альтернативи із відкритим кодом. @@ -1604,7 +1875,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License Ліцензія @@ -1612,109 +1883,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 Адреса: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>Драйвер %1</strong><br/>від %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>Графічний драйвер %1</strong><br/><font color="Grey">від %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>Додаток для програми для перегляду інтернету %1</strong><br/><font color="Grey">%2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>Кодек %1</strong><br/><font color="Grey">від %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>Пакет %1</strong><br/><font color="Grey">від %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">від %2</font> - + File: %1 Файл: %1 - + + Hide license text + Сховати текст ліцензійної угоди + + + Show the license text Показати текст ліцензійної угоди - + Open license agreement in browser. Відкрити ліцензійну угоду у програмі для перегляду. - - - Hide license text - Сховати текст ліцензійної угоди - LocalePage - - The system language will be set to %1. - Мову %1 буде встановлено як системну. - - - - The numbers and dates locale will be set to %1. - %1 буде встановлено як локаль чисел та дат. - - - + Region: Регіон: - + Zone: Зона: - - + + &Change... &Змінити... - - - Set timezone to %1/%2.<br/> - Встановити зону %1/%2.<br/> - LocaleQmlViewStep - + Location Розташування + + LocaleTests + + + Quit + Вийти + + LocaleViewStep - + Location Розташування @@ -1722,35 +1986,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. Налаштовуємо файл ключа LUKS. - - + + No partitions are defined. Не визначено жодного розділу. - - - + + + Encrypted rootfs setup error Помилка налаштовування зашифрованих rootfs - + Root partition %1 is LUKS but no passphrase has been set. Кореневим розділом %1 є розділ LUKS, але пароль до нього не встановлено. - + Could not create LUKS key file for root partition %1. Не вдалося створити файл ключа LUKS для кореневого розділу %1. - + Could not configure LUKS key file on partition %1. Не вдалося налаштувати файл ключа LUKS на розділі %1. @@ -1758,116 +2022,132 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. Створити ідентифікатор машини. - + Configuration Error Помилка налаштовування - + No root mount point is set for MachineId. Не встановлено точки монтування кореневої файлової системи для MachineId. + + Map + + + Timezone: %1 + Часовий пояс: %1 + + + + 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. + Будь ласка, виберіть бажане місце на мапі, щоб засіб встановлення запропонував вам + параметри локалі і часового поясу. Нижче ви можете скоригувати запропоновані параметри. Пошук на мапі можна виконати перетягуванням + для пересування позиції та використанням кнопок +/- для збільшення або зменшення масштабу, а також гортанням коліщатка для зміни масштабу. + + NetInstallViewStep - - + Package selection Вибір пакетів - + Office software Офісні програми - + Office package Офісний пакунок - + Browser software Браузери - + Browser package Пакунок браузера - + Web browser Переглядач інтернету - + Kernel Ядро - + Services Служби - + Login Вхід до системи - + Desktop Стільниця - + Applications Програми - + Communication Спілкування - + Development Розробка - + Office Офіс - + Multimedia Звук та відео - + Internet Інтернет - + Theming Теми - + Gaming Ігри - + Utilities Інструменти @@ -1875,7 +2155,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes Нотатки @@ -1883,17 +2163,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: П&акетна обробка: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>Тут слід вказати пакетний ідентифікатор. Його буде збережено у системі призначення.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>Налаштовування параметрів OEM</h1><p>Calamares використовуватиме параметри OEM під час налаштовування системи призначення.</p></body></html> @@ -1901,261 +2181,336 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration Налаштування OEM - + Set the OEM Batch Identifier to <code>%1</code>. Встановити пакетний ідентифікатор OEM у значення <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + Виберіть ваш бажаний регіон або скористайтеся типовими параметрами. + + + + + + Timezone: %1 + Часовий пояс: %1 + + + + Select your preferred Zone within your Region. + Виберіть бажану для вас зону у межах вашого регіону. + + + + Zones + Зони + + + + You can fine-tune Language and Locale settings below. + Нижче ви можете скоригувати параметри мови і локалі. + + PWQ - + Password is too short Пароль занадто короткий - + Password is too long Пароль задовгий - + Password is too weak Пароль надто ненадійний - + Memory allocation error when setting '%1' Помилка під час спроби отримати пам'ять для налаштовування «%1» - + Memory allocation error Помилка виділення пам'яті - + The password is the same as the old one Цей пароль такий же як і старий - + The password is a palindrome Пароль є паліндромом - + The password differs with case changes only Паролі відрізняються лише регістром літер - + The password is too similar to the old one Цей пароль надто схожий на попередній - + The password contains the user name in some form Цей пароль якимось чином містить ім'я користувача - + The password contains words from the real name of the user in some form Цей пароль містить слова зі справжнього імені користувача в якійсь із форм - + The password contains forbidden words in some form Пароль містить певні форми заборонених слів - - The password contains less than %1 digits - Цей пароль містить менше ніж %1 символ - - - + The password contains too few digits Цей пароль містить замало символів - - The password contains less than %1 uppercase letters - У паролі міститься менше за %1 літер верхнього регістру - - - + The password contains too few uppercase letters У паролі міститься надто мало літер верхнього регістру - - - The password contains less than %1 lowercase letters - У паролі міститься менше за %1 літер нижнього регістру + + + The password contains fewer than %n lowercase letters + + У паролі міститься менше за %n літеру нижнього регістру + У паролі міститься менше за %n літери нижнього регістру + У паролі міститься менше за %n літер нижнього регістру + У паролі міститься менше за %n літеру нижнього регістру + - + The password contains too few lowercase letters У паролі міститься надто мало літер нижнього регістру - - The password contains less than %1 non-alphanumeric characters - Цей пароль містить менше ніж %1 символів, які не є літерами або цифрами - - - + The password contains too few non-alphanumeric characters Цей пароль містить надто мало символів, які не є літерами або цифрами - - The password is shorter than %1 characters - Пароль є коротшим за %1 символів - - - + The password is too short Цей пароль занадто короткий - - The password is just rotated old one - Пароль є оберненою версією старого пароля - - - - The password contains less than %1 character classes - Пароль складається із символів, які належать до класів, кількість яких менша за %1 - - - + The password does not contain enough character classes Кількість класів, до яких належать символи пароля, є надто малою - - The password contains more than %1 same characters consecutively - У паролі міститься послідовність із понад %1 однакових символів - - - + The password contains too many same characters consecutively У паролі міститься надто довга послідовність із однакових символів - - The password contains more than %1 characters of the same class consecutively - У паролі міститься послідовність із понад %1 символів одного класу - - - + The password contains too many characters of the same class consecutively У паролі міститься надто довга послідовність із символів одного класу - - - The password contains monotonic sequence longer than %1 characters - У паролі міститься послідовність із одного символу, яка є довшою за %1 символів + + + The password contains fewer than %n digits + + Цей пароль містить менше ніж %n цифру + Цей пароль містить менше ніж %n цифри + Цей пароль містить менше ніж %n цифр + Цей пароль містить менше ніж %n цифру + + + + + The password contains fewer than %n uppercase letters + + У паролі міститься менше за %n літеру верхнього регістру + У паролі міститься менше за %n літери верхнього регістру + У паролі міститься менше за %n літер верхнього регістру + У паролі міститься менше за %n літеру верхнього регістру + + + + + The password contains fewer than %n non-alphanumeric characters + + Цей пароль містить менше ніж %n символ, які не є літерами або цифрами + Цей пароль містить менше ніж %n символи, які не є літерами або цифрами + Цей пароль містить менше ніж %n символів, які не є літерами або цифрами + Цей пароль містить менше ніж %n символ, які не є літерами або цифрами + + + + + The password is shorter than %n characters + + Пароль є коротшим за %n символ + Пароль є коротшим за %n символи + Пароль є коротшим за %n символів + Пароль є коротшим за %n символ + - + + The password is a rotated version of the previous one + Пароль є оберненою версією старого пароля + + + + The password contains fewer than %n character classes + + Кількість класів символів у паролі є меншою за %n + Кількість класів символів у паролі є меншою за %n + Кількість класів символів у паролі є меншою за %n + Кількість класів символів у паролі є меншою за %n + + + + + The password contains more than %n same characters consecutively + + У паролі міститься послідовність із понад %n однакового символу + У паролі міститься послідовність із понад %n однакових символів + У паролі міститься послідовність із понад %n однакових символів + У паролі міститься послідовність із понад %n однакового символу + + + + + The password contains more than %n characters of the same class consecutively + + У паролі міститься послідовність із понад %n символу одного класу + У паролі міститься послідовність із понад %n символів одного класу + У паролі міститься послідовність із понад %n символів одного класу + У паролі міститься послідовність із понад %n символу одного класу + + + + + The password contains monotonic sequence longer than %n characters + + У паролі міститься послідовність із одного символу, яка є довшою за %n символ + У паролі міститься послідовність із одного символу, яка є довшою за %n символи + У паролі міститься послідовність із одного символу, яка є довшою за %n символів + У паролі міститься послідовність із одного символу, яка є довшою за %n символ + + + + The password contains too long of a monotonic character sequence У паролі міститься надто довга послідовність із одного символу - + No password supplied Пароль не надано - + Cannot obtain random numbers from the RNG device Не вдалося отримати випадкові числа з пристрою RNG - + Password generation failed - required entropy too low for settings Не вдалося створити пароль — не досягнуто вказаного у параметрах рівня ентропії - + The password fails the dictionary check - %1 Пароль не пройшов перевірки за словником — %1 - + The password fails the dictionary check Пароль не пройшов перевірки за словником - + Unknown setting - %1 Невідомий параметр – %1 - + Unknown setting Невідомий параметр - + Bad integer value of setting - %1 Помилкове цілочисельне значення параметра — %1 - + Bad integer value Помилкове ціле значення - + Setting %1 is not of integer type Значення параметра %1 не належить до типу цілих чисел - + Setting is not of integer type Значення параметра не належить до типу цілих чисел - + Setting %1 is not of string type Значення параметра %1 не належить до рядкового типу - + Setting is not of string type Значення параметра не належить до рядкового типу - + Opening the configuration file failed Не вдалося відкрити файл налаштувань - + The configuration file is malformed Форматування файла налаштувань є помилковим - + Fatal failure Фатальна помилка - + Unknown error Невідома помилка - + Password is empty Пароль є порожнім @@ -2163,40 +2518,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form Форма - + Product Name Назва продукту - + TextLabel Текстова мітка - + Long Product Description Довгий опис продукту - + Package Selection Вибір пакетів - + Please pick a product from the list. The selected product will be installed. Будь ласка, виберіть продукт зі списку. Буде встановлено вибраний продукт. + + PackageChooserQmlViewStep + + + Packages + Пакунки + + PackageChooserViewStep - + Packages Пакунки @@ -2204,12 +2567,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name Назва - + Description Опис @@ -2217,17 +2580,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Форма - + Keyboard Model: Модель клавіатури: - + Type here to test your keyboard Напишіть тут, щоб перевірити клавіатуру @@ -2235,96 +2598,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Форма - + What is your name? Ваше ім'я? - - What name do you want to use to log in? - Яке ім'я ви бажаєте використовувати для входу? - - - - Choose a password to keep your account safe. - Оберіть пароль, щоб тримати ваш обліковий рахунок у безпеці. - - - - - <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> - <small>Введіть один й той самий пароль двічі, для перевірки щодо помилок введення. Надійному паролю слід містити суміш літер, чисел та розділових знаків, бути довжиною хоча б вісім символів та регулярно змінюватись.</small> - - - - What is the name of this computer? - Назва цього комп'ютера? - - - + Your Full Name Ваше ім'я повністю - + + What name do you want to use to log in? + Яке ім'я ви бажаєте використовувати для входу? + + + login запис - + + What is the name of this computer? + Назва цього комп'ютера? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>Цю назву буде використано, якщо ви зробите комп'ютер видимим іншим у мережі.</small> - + Computer Name Назва комп'ютера - - + + Choose a password to keep your account safe. + Оберіть пароль, щоб тримати ваш обліковий рахунок у безпеці. + + + + + <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> + <small>Введіть один й той самий пароль двічі, для перевірки щодо помилок введення. Надійному паролю слід містити суміш літер, чисел та розділових знаків, бути довжиною хоча б вісім символів та регулярно змінюватись.</small> + + + + Password Пароль - - + + Repeat Password Повторіть пароль - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. Якщо позначено цей пункт, буде виконано перевірку складності пароля. Ви не зможете скористатися надто простим паролем. - + Require strong passwords. Вимагати складні паролі. - + Log in automatically without asking for the password. Входити автоматично без паролю. - + Use the same password for the administrator account. Використовувати той самий пароль і для облікового рахунку адміністратора. - + Choose a password for the administrator account. Оберіть пароль для облікового рахунку адміністратора. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>Введіть один й той самий пароль двічі, для перевірки щодо помилок введення.</small> @@ -2332,42 +2695,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root Корінь - + Home Домівка - + Boot Завантажувальний розділ - + EFI system EFI-система - + Swap Резервна пам'ять - + New partition for %1 Новий розділ для %1 - + New partition Новий розділ - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2376,34 +2739,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space Вільний простір - - + + New partition Новий розділ - + Name Назва - + File System Файлова система - + + File System Label + Мітка файлової системи + + + Mount Point Точка підключення - + Size Розмір @@ -2411,77 +2779,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Форма - + Storage de&vice: &Пристрій зберігання: - + &Revert All Changes Скинути всі &зміни - + New Partition &Table Нова &таблиця розділів - + Cre&ate С&творити - + &Edit З&мінити - + &Delete &Вилучити - + New Volume Group Створити групу томів - + Resize Volume Group Змінити розміри групи томів - + Deactivate Volume Group Вимкнути групу томів - + Remove Volume Group Вилучити групу томів - + I&nstall boot loader on: Місце вст&ановлення завантажувача: - + Are you sure you want to create a new partition table on %1? Ви впевнені, що бажаєте створити нову таблицю розділів на %1? - + Can not create new partition Не вдалося створити новий розділ - + 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. Таблиця розділів на %1 вже містить %2 основних розділи. Додавання основних розділів неможливе. Будь ласка, вилучіть один основний розділ або додайте замість нього розширений розділ. @@ -2489,117 +2857,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Збір інформації про систему... - + Partitions Розділи - - Install %1 <strong>alongside</strong> another operating system. - Встановити %1 <strong>поруч</strong> з іншою операційною системою. + + Unsafe partition actions are enabled. + Увімкнено небезпечні дії із розділами. - - <strong>Erase</strong> disk and install %1. - <strong>Очистити</strong> диск та встановити %1. + + Partitioning is configured to <b>always</b> fail. + Поділ на розділи налаштовано так, щоб <b>завжди</b> завершуватися помилкою. - - <strong>Replace</strong> a partition with %1. - <strong>Замінити</strong> розділ на %1. + + No partitions will be changed. + Змін до розділів внесено не буде. - - <strong>Manual</strong> partitioning. - Розподіл диска <strong>вручну</strong>. - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - Встановити %1 <strong>поруч</strong> з іншою операційною системою на диск <strong>%2</strong> (%3). - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>Очистити</strong> диск <strong>%2</strong> (%3) та встановити %1. - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - <strong>Замінити</strong> розділ на диску <strong>%2</strong> (%3) на %1. - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - Розподіл диска <strong>%1</strong> (%2) <strong>вручну</strong>. - - - - Disk <strong>%1</strong> (%2) - Диск <strong>%1</strong> (%2) - - - + Current: Зараз: - + After: Після: - + No EFI system partition configured Не налаштовано жодного системного розділу EFI - - 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>esp</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. - Щоб запустити %1, потрібен системний розділ EFI.<br/><br/>Щоб налаштувати системний розділ EFI, поверніться і виберіть або створіть файлову систему FAT32 з увімкненим параметром <strong>esp</strong> та точкою монтування <strong>%2</strong>.<br/><br/>Ви можете продовжити, не налаштовуючи системний розділ EFI, але тоді у вашої системи можуть виникнути проблеми із запуском. + + EFI system partition configured incorrectly + Системний розділ EFI налаштовано неправильно - - EFI system partition flag not set - Опцію системного розділу EFI не встановлено + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + Для запуску %1 потрібен системний розділ EFI.<br/><br/>Щоб налаштувати системний розділ EFI, поверніться до попередніх пунктів і виберіть створення відповідної файлової системи. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - Для запуску %1 потрібен системний розділ EFI.<br/><br/>Розділ налаштовано з точкою підключення <strong>%2</strong>, але опція <strong>esp</strong> не встановлено.<br/>Щоб встановити опцію, поверніться та відредагуйте розділ.<br/><br/>Ви можете продовжити не налаштовуючи цю опцію, але ваша система може не запускатись. + + The filesystem must be mounted on <strong>%1</strong>. + Файлову систему має бути змоновано до <strong>%1</strong>. - + + The filesystem must have type FAT32. + Файлова система має належати до типу FAT32. + + + + The filesystem must be at least %1 MiB in size. + Розмір файлової системи має бути не меншим за %1 МіБ. + + + + The filesystem must have flag <strong>%1</strong> set. + Для файлової системи має бути встановлено прапорець <strong>%1</strong>. + + + + You can continue without setting up an EFI system partition but your system may fail to start. + Ви можете продовжити без встановлення системного розділу EFI, але це може призвести до неможливості запуску вашої операційної системи. + + + Option to use GPT on BIOS Варіант із використанням GPT на BIOS - - 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. - Таблиця розділів GPT є найкращим варіантом для усіх систем. У цьому засобі встановлення передбачено підтримку відповідних налаштувань і для систем BIOS.<br/><br/>Щоб скористатися таблицею розділів GPT у системі з BIOS, (якщо цього ще не було зроблено) поверніться назад і встановіть для таблиці розділів значення GPT, далі створіть неформатований розділ розміром 8 МБ з увімкненим прапорцем <strong>bios_grub</strong>.<br/><br/>Неформатований розділ розміром 8 МБ потрібен для запуску %1 на системі з BIOS за допомогою GPT. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + Таблиця розділів GPT є найкращим варіантом для усіх систем. У цьому засобі для встановлення передбачено підтримку таких налаштувань і для систем із BIOS.<br/><br/>Щоб налаштувати таблицю розділів GPT на BIOS, (якщо цього ще не зроблено) поверніться і встановіть для таблиці розділів значення GPT, потім створіть неформатований розділ розміром 8 МБ з увімкненим прапорцем <strong>%2</strong>.<br/><br/>Неформатований розділ у 8 МБ не обов'язковим для запуску %1 у системі з BIOS і GPT. - + Boot partition not encrypted Завантажувальний розділ незашифрований - + 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. Було налаштовано окремий завантажувальний розділ поряд із зашифрованим кореневим розділом, але завантажувальний розділ незашифрований.<br/><br/>Існують проблеми з безпекою такого типу, оскільки важливі системні файли зберігаються на незашифрованому розділі.<br/>Ви можете продовжувати, якщо бажаєте, але розблокування файлової системи відбудеться пізніше під час запуску системи.<br/>Щоб зашифрувати завантажувальний розділ, поверніться і створіть його знов, обравши <strong>Зашифрувати</strong> у вікні створення розділів. - + has at least one disk device available. має принаймні один доступний дисковий пристрій. - + There are no partitions to install on. Немає розділів для встановлення. @@ -2607,13 +2965,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job Завдання із налаштовування вигляду і поведінки Плазми - - + + Could not select KDE Plasma Look-and-Feel package Не вдалося вибрати пакунок вигляду і поведінки Плазми KDE @@ -2621,17 +2979,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form Форма - + 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. Будь ласка, виберіть параметри вигляду і поведінки стільниці Плазми KDE. Ви також можете пропустити цей крок і налаштувати вигляд і поведінку після налаштовування системи. Натискання пункту вибору вигляду і поведінки відкриє вікно із інтерактивним переглядом відповідних параметрів. - + 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. Будь ласка, виберіть параметри вигляду і поведінки стільниці Плазми KDE Ви також можете пропустити цей крок і налаштувати вигляд і поведінку після встановлення системи. Натискання пункту вибору вигляду і поведінки відкриє вікно із інтерактивним переглядом відповідних параметрів. @@ -2639,7 +2997,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel Вигляд і поведінка @@ -2647,17 +3005,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... Збереження файлів на потім ... - + No files configured to save for later. Не налаштовано файлів для зберігання на майбутнє. - + Not all of the configured files could be preserved. Не усі налаштовані файли може бути збережено. @@ -2665,14 +3023,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. У результаті виконання команди не отримано виведених даних. - + Output: @@ -2681,52 +3039,52 @@ Output: - + External command crashed. Виконання зовнішньої команди завершилося помилкою. - + Command <i>%1</i> crashed. Аварійне завершення виконання команди <i>%1</i>. - + External command failed to start. Не вдалося виконати зовнішню команду. - + Command <i>%1</i> failed to start. Не вдалося виконати команду <i>%1</i>. - + Internal error when starting command. Внутрішня помилка під час спроби виконати команду. - + Bad parameters for process job call. Неправильні параметри виклику завдання обробки. - + External command failed to finish. Не вдалося завершити виконання зовнішньої команди. - + Command <i>%1</i> failed to finish in %2 seconds. Не вдалося завершити виконання команди <i>%1</i> за %2 секунд. - + External command finished with errors. Виконання зовнішньої команди завершено із помилками. - + Command <i>%1</i> finished with exit code %2. Виконання команди <i>%1</i> завершено повідомленням із кодом виходу %2. @@ -2734,89 +3092,95 @@ Output: QObject - - Default Keyboard Model - Типова модель клавіатури - - - - - Default - Типовий - - - - unknown - невідома - - - - extended - розширений - - - - unformatted - не форматовано - - - - swap - резервна пам'ять - - - - Unpartitioned space or unknown partition table - Нерозподілений простір або невідома таблиця розділів - - - - (no mount point) - (немає точки монтування) - - - - Requirements checking for module <i>%1</i> is complete. - Перевірку виконання вимог щодо модуля <i>%1</i> завершено. - - - + %1 (%2) %1 (%2) - - No product - Немає продукту + + unknown + невідома - - No description provided. - Опису не надано. + + extended + розширений - - - - + + unformatted + не форматовано + + + + swap + резервна пам'ять + + + + + Default + Типовий + + + + + + File not found Файл не знайдено - + Path <pre>%1</pre> must be an absolute path. Шлях <pre>%1</pre> має бути абсолютним. - + + Directory not found + Каталог не знайдено + + + + Could not create new random file <pre>%1</pre>. Не вдалося створити випадковий файл <pre>%1</pre>. + + + No product + Немає продукту + + + + No description provided. + Опису не надано. + + + + (no mount point) + (немає точки монтування) + + + + Unpartitioned space or unknown partition table + Нерозподілений простір або невідома таблиця розділів + + + + Recommended + + + <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> + <p>Цей комп'ютер не задовольняє рекомендовані вимоги щодо налаштовування %1.<br/> +Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними.</p> + RemoveUserJob - + Remove live user from target system Вилучити користувача портативної системи із системи призначення @@ -2824,18 +3188,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. Вилучити групу томів із назвою %1. - + Remove Volume Group named <strong>%1</strong>. Вилучити групу томів із назвою <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. Засобу встановлення не вдалося вилучити групу томів із назвою «%1». @@ -2843,143 +3207,160 @@ Output: ReplaceWidget - + Form Форма - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. Виберіть місце встановлення %1.<br/><font color="red">Увага:</font> у результаті виконання цієї дії усі файли на вибраному розділі буде витерто. - + The selected item does not appear to be a valid partition. Вибраний елемент не є дійсним розділом. - + %1 cannot be installed on empty space. Please select an existing partition. %1 не можна встановити на порожній простір. Будь ласка, оберіть дійсний розділ. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 не можна встановити на розширений розділ. Будь ласка, оберіть дійсний первинний або логічний розділ. - + %1 cannot be installed on this partition. %1 не можна встановити на цей розділ. - + Data partition (%1) Розділ з даними (%1) - + Unknown system partition (%1) Невідомий системний розділ (%1) - + %1 system partition (%2) Системний розділ %1 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>Розділ %1 замалий для %2. Будь ласка оберіть розділ розміром хоча б %3 Гб. - + <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. <strong>%2</strong><br/><br/>Системний розділ EFI у цій системі не знайдено. Для встановлення %1, будь ласка, поверніться назад і скористайтеся розподіленням вручну. - - - + + + <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. <strong>%3</strong><br/><br/>%1 буде встановлено на %2.<br/><font color="red">Увага: </font>всі дані на розділі %2 буде загублено. - + The EFI system partition at %1 will be used for starting %2. Системний розділ EFI на %1 буде використано для запуску %2. - + EFI system partition: Системний розділ EFI: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>Цей комп'ютер не задовольняє мінімальні вимоги до встановлення %1.<br/> +Неможливо продовжувати процес встановлення.</p> + + + + <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> + <p>Цей комп'ютер не задовольняє рекомендовані вимоги щодо налаштовування %1.<br/> +Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними.</p> + + ResizeFSJob - + Resize Filesystem Job Завдання зі зміни розмірів файлової системи - + Invalid configuration Некоректні налаштування - + The file-system resize job has an invalid configuration and will not run. Завдання зі зміни розмірів файлової системи налаштовано некоректно. Його не буде виконано. - + KPMCore not Available Немає доступу до KPMCore - + Calamares cannot start KPMCore for the file-system resize job. Calamares не вдалося запустити KPMCore для виконання завдання зі зміни розмірів файлової системи. - - - - - + + + + + Resize Failed Помилка під час зміни розмірів - + The filesystem %1 could not be found in this system, and cannot be resized. Не вдалося знайти файлову систему %1 у цій системі. Зміна розмірів цієї файлової системи неможлива. - + The device %1 could not be found in this system, and cannot be resized. Не вдалося знайти пристрій %1 у цій системі. Зміна розмірів файлової системи на пристрої неможлива. - - + + The filesystem %1 cannot be resized. Не вдалося виконати зміну розмірів файлової системи %1. - - + + The device %1 cannot be resized. Не вдалося змінити розміри пристрою %1. - + The filesystem %1 must be resized, but cannot. Розміри файлової системи %1 має бути змінено, але виконати зміну не вдалося. - + The device %1 must be resized, but cannot Розміри пристрою %1 має бути змінено, але виконати зміну не вдалося @@ -2987,22 +3368,22 @@ Output: ResizePartitionJob - + Resize partition %1. Змінити розмір розділу %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. Змінити розміри розділу у <strong>%2 МіБ</strong> <strong>%1</strong> до <strong>%3 МіБ</strong>. - + Resizing %2MiB partition %1 to %3MiB. Змінюємо розміри розділу %2 МіБ %1 до %3 МіБ. - + The installer failed to resize partition %1 on disk '%2'. Засобу встановлення не вдалося змінити розміри розділу %1 на диску «%2». @@ -3010,7 +3391,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group Змінити розміри групи томів @@ -3018,18 +3399,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. Змінити розміри групи томів із назвою %1 з %2 до %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. Змінити розміри групи томів із назвою <strong>%1</strong> з <strong>%2</strong> до <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. Засобу встановлення не вдалося змінити розміри групи томів із назвою «%1». @@ -3037,53 +3418,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: Щоб отримати найкращий результат, будь ласка, переконайтеся, що цей комп'ютер: - + System requirements Вимоги до системи - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - Цей комп'ютер не задовольняє мінімальні вимоги для налаштовування %1.<br/>Налаштовування неможливо продовжити. <a href="#details">Докладніше...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - Цей комп'ютер не задовольняє мінімальні вимоги для встановлення %1.<br/>Встановлення неможливо продовжити. <a href="#details">Докладніше...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - Цей комп'ютер не задовольняє рекомендовані вимоги щодо налаштовування %1. Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними. - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - Цей комп'ютер не задовольняє рекомендовані вимоги для встановлення %1.<br/>Встановлення можна продовжити, але деякі можливості можуть виявитися недоступними. - - - - This program will ask you some questions and set up %2 on your computer. - Ця програма поставить кілька питань та встановить %2 на ваш комп'ютер. - - ScanningDialog - + Scanning storage devices... Скануємо пристрої зберігання... - + Partitioning Поділ на розділи @@ -3091,29 +3444,29 @@ Output: SetHostNameJob - + Set hostname %1 Встановити назву вузла %1 - + Set hostname <strong>%1</strong>. Встановити назву вузла <strong>%1</strong>. - + Setting hostname %1. Встановлення назви вузла %1. + - Internal Error Внутрішня помилка - - + + Cannot write hostname to target system Не вдалося записати назву вузла до системи призначення @@ -3121,29 +3474,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Встановити модель клавіатури %1, розкладку %2-%3 - + Failed to write keyboard configuration for the virtual console. Не вдалося записати налаштування клавіатури для віртуальної консолі. - - - + + + Failed to write to %1 Невдача під час запису до %1 - + Failed to write keyboard configuration for X11. Невдача під час запису конфігурації клавіатури для X11. - + Failed to write keyboard configuration to existing /etc/default directory. Не вдалося записати налаштування клавіатури до наявного каталогу /etc/default. @@ -3151,82 +3504,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. Встановити прапорці на розділі %1. - + Set flags on %1MiB %2 partition. Встановити прапорці для розділу у %1 МіБ %2. - + Set flags on new partition. Встановити прапорці на новому розділі. - + Clear flags on partition <strong>%1</strong>. Очистити прапорці на розділі <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. Зняти прапорці на розділі у %1 МіБ <strong>%2</strong>. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - Встановлення прапорця на розділі у %1 МіБ <strong>%2</strong> як <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - Знімаємо прапорці на розділі у %1 МіБ <strong>%2</strong>. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - Встановлюємо прапорці <strong>%3</strong> на розділі у %1 МіБ <strong>%2</strong>. - - - + Clear flags on new partition. Очистити прапорці на новому розділі. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. Встановити прапорці <strong>%2</strong> для розділу <strong>%1</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Встановлення прапорця на розділі у %1 МіБ <strong>%2</strong> як <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. Встановити прапорці <strong>%1</strong> для нового розділу. - + Clearing flags on partition <strong>%1</strong>. Очищуємо прапорці для розділу <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + Знімаємо прапорці на розділі у %1 МіБ <strong>%2</strong>. + + + Clearing flags on new partition. Очищуємо прапорці для нового розділу. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. Встановлюємо прапорці <strong>%2</strong> для розділу <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Встановлюємо прапорці <strong>%3</strong> на розділі у %1 МіБ <strong>%2</strong>. + + + Setting flags <strong>%1</strong> on new partition. Встановлюємо прапорці <strong>%1</strong> для нового розділу. - + The installer failed to set flags on partition %1. Засобу встановлення не вдалося встановити прапорці для розділу %1. @@ -3234,42 +3587,42 @@ Output: SetPasswordJob - + Set password for user %1 Встановити пароль для користувача %1 - + Setting password for user %1. Встановлення паролю для користувача %1. - + Bad destination system path. Поганий шлях призначення системи. - + rootMountPoint is %1 Коренева точка підключення %1 - + Cannot disable root account. Неможливо вимкнути обліковий запис root. - + passwd terminated with error code %1. passwd завершив роботу з кодом помилки %1. - + Cannot set password for user %1. Не можу встановити пароль для користувача %1. - + usermod terminated with error code %1. usermod завершилася з кодом помилки %1. @@ -3277,45 +3630,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 Встановити часову зону %1.%2 - + Cannot access selected timezone path. Не можу дістатися до шляху обраної часової зони. - + Bad path: %1 Поганий шлях: %1 - + Cannot set timezone. Не можу встановити часову зону. - + Link creation failed, target: %1; link name: %2 Невдача під час створення посилання, ціль: %1, назва посилання: %2 - + Cannot set timezone, Не вдалося встановити часовий пояс. - + Cannot open /etc/timezone for writing Не можу відкрити /etc/timezone для запису + + SetupGroupsJob + + + Preparing groups. + Готуємо групи. + + + + + Could not create groups in target system + Не вдалося створити групи у системі призначення + + + + These groups are missing in the target system: %1 + У системі призначення не вистачає таких груп: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Налаштувати користувачів <pre>sudo</pre>. + + + + Cannot chmod sudoers file. + Неможливо встановити права на файл sudoers. + + + + Cannot create sudoers file for writing. + Неможливо створити файл sudoers для запису. + + ShellProcessJob - + Shell Processes Job Завдання для процесів командної оболонки @@ -3323,81 +3713,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 з %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - Це огляд того, що трапиться коли ви почнете процедуру налаштовування. + + &OK + &OK - - This is an overview of what will happen once you start the install procedure. - Це огляд того, що трапиться коли ви почнете процедуру встановлення. + + &Yes + &Так - - - SummaryViewStep - - Summary - Огляд + + &No + &Ні + + + + &Cancel + &Скасувати + + + + &Close + &Закрити TrackingInstallJob - + Installation feedback Відгуки щодо встановлення - + Sending installation feedback. Надсилання відгуків щодо встановлення. - + Internal error in install-tracking. Внутрішня помилка під час стеження за встановленням. - + HTTP request timed out. Перевищено час очікування на обробку запиту HTTP. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + Зворотних зв'язок для користувачів KDE + + + + Configuring KDE user feedback. + Налаштовування зворотного зв'язку для користувачів KDE. + + + + + Error in KDE user feedback configuration. + Помилка у налаштуваннях зворотного зв'язку користувачів KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + Не вдалося налаштувати належним чином зворотний зв'язок для користувачів KDE. Помилка скрипту %1. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + Не вдалося налаштувати належним чином зворотний зв'язок для користувачів KDE. Помилка Calamares %1. + + + + TrackingMachineUpdateManagerJob + + Machine feedback Дані щодо комп'ютера - + Configuring machine feedback. Налаштовування надсилання даних щодо комп'ютера. - - + + Error in machine feedback configuration. Помилка у налаштуваннях надсилання даних щодо комп'ютера. - + Could not configure machine feedback correctly, script error %1. Не вдалося налаштувати надсилання даних щодо комп'ютера належним чином. Помилка скрипту: %1. - + Could not configure machine feedback correctly, Calamares error %1. Не вдалося налаштувати надсилання даних щодо комп'ютера належним чином. Помилка у Calamares: %1. @@ -3405,106 +3831,97 @@ Output: TrackingPage - + Form Форма - + Placeholder Замінник - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>Якщо буде позначено цей пункт, програма <span style=" font-weight:600;">не надсилатиме ніяких даних</span> щодо встановленої системи.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Натисніть тут, щоб не надсилати <span style=" font-weight:600;">взагалі ніяких даних</span> щодо вашого встановлення.</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Натисніть, щоб дізнатися більше про відгуки користувачів</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - Стеження за встановленням допоможе визначити %1 кількість користувачів, параметри обладнання, на якому встановлюють %1 і (якщо позначено останні два пункти нижче) неперервно отримувати дані щодо програм, які використовуються у системі. Щоб ознайомитися із даними, які буде надіслано, натисніть піктограму довідки, розташовану поряд із кожним із варіантів. + + 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. + Стеження допоможе %1 визначити частоту встановлення, параметри обладнання для встановлення та перелік використовуваних програм. Щоб переглянути дані, які буде надіслано, будь ласка, натисніть піктограму довідки, яку розташовано поряд із кожним пунктом. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - Якщо буде позначено цей пункт, програма надішле дані щодо встановленої системи та обладнання. Ці дані буде <b>надіслано лише один раз</b> після завершення встановлення. + + 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. + Якщо буде позначено цей пункт, програма надішле дані щодо встановленої системи та обладнання. Ці дані буде надіслано <b>лише один раз</b> після завершення встановлення. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - Якщо позначити цей пункт, програма <b>періодично</b> надсилатиме дані щодо встановленої вами системи, обладнання і програм до %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + Якщо позначити цей пункт, програма періодично надсилатиме дані щодо <b>встановленої вами системи загалом</b>, обладнання і програм до %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - Якщо позначити цей пункт, програма <b>регулярно</b> надсилатиме дані щодо встановленої вами системи, обладнання, програм та користування системою до %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + Якщо позначити цей пункт, програма регулярно надсилатиме дані щодо встановленої вами системи користувача, обладнання, програм та користування системою до %1. TrackingViewStep - + Feedback Відгуки + + UmountJob + + + Unmount file systems. + Демонтувати файлові системи. + + + + No target system available. + Немає доступної цільової системи. + + + + No rootMountPoint is set. + Не встановлено rootMountPoint. + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>Якщо за цим комп'ютером працюватимуть декілька користувачів, ви можете створити декілька облікових записів після налаштовування.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>Якщо за цим комп'ютером працюватимуть декілька користувачів, ви можете створити декілька облікових записів після встановлення.</small> + + + UsersQmlViewStep - - Your username is too long. - Ваше ім'я задовге. - - - - Your username must start with a lowercase letter or underscore. - Ваше ім'я користувача має починатися із малої літери або символу підкреслювання. - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - Можна використовувати лише латинські літери нижнього регістру, цифри, символи підкреслювання та дефіси. - - - - Only letters, numbers, underscore and hyphen are allowed. - Можна використовувати лише латинські літери, цифри, символи підкреслювання та дефіси. - - - - Your hostname is too short. - Назва вузла є надто короткою. - - - - Your hostname is too long. - Назва вузла є надто довгою. - - - - Your passwords do not match! - Паролі не збігаються! + + Users + Користувачі UsersViewStep - + Users Користувачі @@ -3512,65 +3929,67 @@ Output: VariantModel - + Key + Column header for key/value Ключ - + Value + Column header for key/value Значення VolumeGroupBaseDialog - + Create Volume Group Створити групу томів - + List of Physical Volumes Список фізичний томів - + Volume Group Name: Назва групи томів: - + Volume Group Type: Тип групи томів: - + Physical Extent Size: Розмір фізичного розширення: - + MiB МіБ - + Total Size: Загальний розмір: - + Used Size: Використано: - + Total Sectors: Загалом секторів: - + Quantity of LVs: Кількість логічних томів: @@ -3578,106 +3997,106 @@ Output: WelcomePage - + Form Форма - - + + Select application and system language Виберіть мову програм і системи + &About + &Про програму + + + Open donations website Відкрити сторінку сайта із посиланнями для фінансової підтримки - + &Donate Підтримати &фінансово - + Open help and support website Відкрити сторінку сайта із посиланнями на довідку та технічну підтримку + &Support + Під&тримка + + + Open issues and bug-tracking website Відкрити сторінку сайта стеження за вадами у програмі - Open release notes website - Відкрити сторінку сайта із нотатками щодо випуску - - - - &Release notes - При&мітки до випуску - - - &Known issues &Відомі проблеми - - &Support - Під&тримка + + Open release notes website + Відкрити сторінку сайта із нотатками щодо випуску - - &About - &Про програму + + &Release notes + При&мітки до випуску - - <h1>Welcome to the %1 installer.</h1> - <h1>Ласкаво просимо до засобу встановлення %1.</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Ласкаво просимо до засобу встановлення Calamares для %1.</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Вітаємо у програмі налаштовування Calamares для %1.</h1> - + <h1>Welcome to %1 setup.</h1> <h1>Вітаємо у програмі для налаштовування %1.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Ласкаво просимо до засобу встановлення Calamares для %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Ласкаво просимо до засобу встановлення %1.</h1> + + + + %1 support + Підтримка %1 + + + About %1 setup Про засіб налаштовування %1 - + About %1 installer Про засіб встановлення %1 - + <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. - <h1>%1</h1><br/><strong>%2<br/>для %3</strong><br/><br/>© Teo Mrnjavac &lt;teo@kde.org&gt;, 2014–2017<br/>© Adriaan de Groot &lt;groot@kde.org&gt;, 2017–2019<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. {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - Підтримка %1 + <h1>%1</h1><br/><strong>%2<br/>для %3</strong><br/><br/>© Teo Mrnjavac &lt;teo@kde.org&gt;, 2014–2017<br/>© Adriaan de Groot &lt;groot@kde.org&gt;, 2017–2020<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. WelcomeQmlViewStep - + Welcome Вітаємо @@ -3685,26 +4104,70 @@ Output: WelcomeViewStep - + Welcome Вітаємо + + ZfsJob + + + Create ZFS pools and datasets + Створити буфери і набори даних ZFS + + + + Failed to create zpool on + Не вдалося створити zpool на + + + + Configuration Error + Помилка налаштовування + + + + No partitions are available for ZFS. + Немає доступних розділів для ZFS. + + + + Internal data missing + Не вистачає внутрішніх даних + + + + + Failed to create zpool + Не вдалося створити zpool + + + + Failed to create dataset + Не вдалося створити набір даних + + + + The output was: + Виведені дані: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <h1>%1</h1><br/> <strong>%2<br/> @@ -3719,7 +4182,94 @@ Output: Liberating Software. - + + Back + Назад + + + + calamares-sidebar + + + Show debug information + Показати діагностичну інформацію + + + + finishedq + + + Installation Completed + Встановлення завершено + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + На ваш комп'ютер встановлено %1.<br/> + Тепер ви можете перезапустити вашу нову систему або продовжити користуватися середовищем портативної системи. + + + + Close Installer + Закрити засіб встановлення + + + + Restart System + Перезапустити систему + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>Повний журнал встановлення записано до файла installation.log у домашньому каталозі користувача портативної системи.<br/> + Цей журнал скопійовано до /var/log/installation.log системи призначення.</p> + + + + finishedq@mobile + + + Installation Completed + Встановлення завершено + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + На ваш комп'ютер встановлено %1.<br/> + Тепер ви можете перезавантажити пристрій. + + + + Close + Закрити + + + + Restart + Перезапустити + + + + i18n + + + <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>. + <h1>Мови</h1></br> +Налаштування системної локалі впливає на мову та набір символів для деяких елементів інтерфейсу командного рядка. Зараз встановлено значення локалі <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>Локалі</h1></br> +Налаштування системної локалі впливає на показ чисел та формат дат. Зараз встановлено значення локалі <strong>%1</strong>. + + + Back Назад @@ -3727,52 +4277,43 @@ Output: keyboardq - - Keyboard Model - Модель клавіатури + + To activate keyboard preview, select a layout. + Щоб активувати перегляд клавіатури, виберіть розкладку. - - Pick your preferred keyboard model or use the default one based on the detected hardware - Виберіть бажану для вас модель клавіатури або скористайтеся типовою, визначеною на основі виявленого обладнання + + Keyboard Model: + Модель клавіатури: - - Refresh - Освіжити - - - - + Layouts Розкладки - - - Keyboard Layout - Розкладка клавіатури + + Type here to test your keyboard + Напишіть тут, щоб перевірити клавіатуру - - Models - Моделі - - - + Variants Варіанти + + + localeq - - Test your keyboard - Перевірте вашу клавіатуру + + Change + Змінити notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3780,34 +4321,262 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>Вітаємо у засобі встановлення %1 <quote>%2</quote></h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice — потужний і вільний комплект офісних програм, яким користуються мільйони людей з усього світу. До нього включено декілька програм, які роблять його найгнучкішим на ринку вільним комплектом офісних програм із відкритим кодом.<br/> + Типовий варіант. - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + Якщо вам не потрібен комплект офісних програм, просто виберіть «Без офісного комплекту». Ви завжди зможете додати до вже встановленої системи якийсь комплект (або декілька комплектів), якщо у цьому виникне потреба. + + + + No Office Suite + Без офісного комплекту + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + Створити мінімалістичну робочу станцію, вилучити усі зайві програми і вирішити згодом, що саме слід додати до системи. Прикладами того, чого може не бути у такій системі, є комплект офісних програм, програвачів мультимедійних даних, програм для перегляду зображень або друку на папері. Це буде лише сама стільниця, програма для роботи з файлами, програма для керування пакунками та проста програма для перегляду інтернету. + + + + Minimal Install + Мінімальне встановлення + + + + Please select an option for your install, or use the default: LibreOffice included. + Будь ласка, виберіть варіант для встановлення або скористайтеся типовим: LibreOffice включено. + + + + release_notes + + + <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> + <h3>%1</h3> + <p>Це приклад файла QML, у якому параметри показано із використанням форматування та даних із блиманням.</p> + + <p>У QML з RichText можна використовувати теґи HTML, а вміст з Flickable є корисним для сенсорних екранів.</p> + + <p><b>Це текст напівжирним</b></p> + <p><i>Це текст курсивом</i></p> + <p><u>Це підкреслений текст</u></p> + <p><center>Цей фрагмент буде вирівняно за центром.</center></p> + <p><s>Цей фрагмент перекреслено</s></p> + + <p>Приклад коду: + <code>ls -l /home</code></p> + + <p><b>Списки:</b></p> + <ul> + <li>Системи з процесорами Intel</li> + <li>Системи з процесорами AMD</li> + </ul> + + <p>Корегована вертикальна смужка гортання, поточна ширина — 10.</p> + + + + Back + Назад + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + Виберіть ім'я користувача та реєстраційні дані для виконання адміністративних завдань у системі + + + + What is your name? + Ваше ім'я? + + + + Your Full Name + Ваше ім'я повністю + + + + What name do you want to use to log in? + Яке ім'я ви бажаєте використовувати для входу? + + + + Login Name + Запис для входу + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Якщо за цим комп'ютером працюватимуть декілька користувачів, ви можете створити декілька облікових записів після встановлення. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Можна використовувати лише латинські літери нижнього регістру, цифри, символи підкреслювання та дефіси. + + + + root is not allowed as username. + Не можна використовувати ім'я користувача «root». + + + + What is the name of this computer? + Назва цього комп'ютера? + + + + Computer Name + Назва комп'ютера + + + + This name will be used if you make the computer visible to others on a network. + Цю назву буде використано, якщо ви зробите комп'ютер видимим іншим у мережі. + + + + localhost is not allowed as hostname. + «localhost» не можна використовувати як назву вузла. + + + + Choose a password to keep your account safe. + Оберіть пароль, щоб тримати ваш обліковий рахунок у безпеці. + + + + Password + Пароль + + + + Repeat Password + Повторіть пароль + + + + 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. + Введіть один й той самий пароль двічі, для перевірки щодо помилок введення. Надійному паролю слід містити суміш літер, чисел та розділових знаків, бути довжиною хоча б вісім символів та регулярно змінюватись. + + + + Validate passwords quality + Перевіряти якість паролів + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Якщо позначено цей пункт, буде виконано перевірку складності пароля. Ви не зможете скористатися надто простим паролем. + + + + Log in automatically without asking for the password + Входити автоматично без пароля + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + Можна використовувати лише латинські літери, цифри, символи підкреслювання та дефіси; не менше двох символів. + + + + Reuse user password as root password + Використати пароль користувача як пароль root + + + + Use the same password for the administrator account. + Використовувати той самий пароль і для облікового рахунку адміністратора. + + + + Choose a root password to keep your account safe. + Виберіть пароль root для захисту вашого облікового запису. + + + + Root Password + Пароль root + + + + Repeat Root Password + Повторіть пароль root + + + + Enter the same password twice, so that it can be checked for typing errors. + Введіть один й той самий пароль двічі, щоб убезпечитися від помилок при введенні. + + + + welcomeq + + + <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> + <h3>Вітаємо у засобі встановлення %1 <quote>%2</quote></h3> + <p>Ця програма задасть вам декілька питань і налаштує %1 для роботи на вашому комп'ютері.</p> + + + About Про програму - + Support Підтримка - + Known issues Відомі вади - + Release notes Нотатки щодо випуску - + Donate Підтримати фінансово diff --git a/lang/calamares_ur.ts b/lang/calamares_ur.ts index 299223c36..c0ddba0e9 100644 --- a/lang/calamares_ur.ts +++ b/lang/calamares_ur.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,25 +238,30 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). @@ -236,7 +269,7 @@ - + (%n second(s)) @@ -244,7 +277,7 @@ - + System-requirements checking is complete. @@ -252,244 +285,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +521,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +719,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +737,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +756,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +992,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1129,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1157,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1180,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1222,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1245,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1264,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1287,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1335,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1353,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1361,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1529,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1611,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1684,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1692,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1718,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1726,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1734,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1752,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1768,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1776,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1865,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1873,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1976,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2012,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2143,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2151,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2169,317 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2487,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2536,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2549,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2567,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2664,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2708,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2748,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2826,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2934,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2948,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2631,7 +2966,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2974,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2992,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3058,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3153,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3172,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3331,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3354,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3362,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3381,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3407,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3437,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3467,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3550,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3593,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3676,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3794,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3892,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,227 +3960,551 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - - About %1 setup - + + <h1>Welcome to the Calamares installer for %1.</h1> + ٪ 1 Calamares کے انسٹالر میں خوش آمدید - - About %1 installer - + + <h1>Welcome to the %1 installer.</h1> + <h1>٪ 1 انسٹالر میں خوش آمدید۔</h1> - - <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. - - - - + %1 support + ٪ 1 سپورٹ + + + + About %1 setup + تقریبا٪ 1 سیٹ اپ + + + + About %1 installer + لگ بھگ٪ 1 انسٹال + + + + <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. WelcomeQmlViewStep - + Welcome - + خوش آمدید WelcomeViewStep - + Welcome + خوش آمدید + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + Back + واپس + + + + calamares-sidebar + + + Show debug information + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + واپس + + keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts + لے آؤٹ + + + + Type here to test your keyboard - - - Keyboard Layout - - - - - Models - - - - + Variants - + متغیرات + + + localeq - - Test your keyboard - + + Change + تبدیلی notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - - About + + LibreOffice - - Support + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. - - Known issues + + No Office Suite - - Release notes + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. - - Donate + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + release_notes + + + <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> + + + + + Back + واپس + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + <h3>٪ 1 میں خوش آمدید<quote>2٪</quote>انسٹالر</h3> +<p>یہ پروگرام آپ سے کچھ سوالات پوچھے گا اور آپ کے کمپیوٹر پر٪ 1 مرتب کرے گا۔</p> + + + + About + متعلق + + + + Support + حمائیت + + + + Known issues + معلوم مسائل + + + + Release notes + جاری کردہ نوٹس + + + + Donate + عطیہ + + diff --git a/lang/calamares_vi.ts b/lang/calamares_vi.ts new file mode 100644 index 000000000..a252bf7de --- /dev/null +++ b/lang/calamares_vi.ts @@ -0,0 +1,4542 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + Quản lý cài đặt tự động gắn kết(auto-mount) + + + + BootInfoWidget + + + 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. + <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. + + + + 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. + 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ó. + + + + 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. + 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ó. + + + + BootLoaderModel + + + Master Boot Record of %1 + Bản ghi khởi động chính của %1 + + + + Boot Partition + Phân vùng khởi động + + + + System Partition + Phân vùng hệ thống + + + + Do not install a boot loader + Không cài đặt bộ tải khởi động + + + + %1 (%2) + %1 (%2) + + + + Calamares::BlankViewStep + + + Blank Page + Trang trắng + + + + Calamares::DebugWindow + + + Form + Mẫu + + + + GlobalStorage + Lưu trữ tổng quát + + + + JobQueue + Hàng đợi công việc + + + + Modules + Mô-đun + + + + Type: + Kiểu: + + + + + none + không + + + + Interface: + Giao diện: + + + + Crashes Calamares, so that Dr. Konqui can look at it. + Gây crash Calamares, để Dr. Konqui có thể xem nó. + + + + Reloads the stylesheet from the branding directory. + Tải lại stylesheet từ thư mục branding + + + + Uploads the session log to the configured pastebin. + Đăng tải log của phiên này lên pastebin đã được cấu hình + + + + Send Session Log + Gửi log của phiên này + + + + Reload Stylesheet + Tải lại bảng định kiểu + + + + Displays the tree of widget names in the log (for stylesheet debugging). + Hiễn thị cây của tên widget trong log(để gỡ lỗi stylesheet) + + + + Widget Tree + Cây công cụ + + + + Debug information + Thông tin gỡ lỗi + + + + Calamares::ExecutionViewStep + + + Set up + Thiết lập + + + + Install + Cài đặt + + + + Calamares::FailJob + + + Job failed (%1) + Công việc thất bại (%1) + + + + Programmed job failure was explicitly requested. + Lỗi công việc được lập trình đã được yêu cầu rõ ràng. + + + + Calamares::JobThread + + + Done + Xong + + + + Calamares::NamedJob + + + Example job (%1) + Ví dụ về công việc (%1) + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + Chạy lệnh '%1' trong hệ thống đích. + + + + Run command '%1'. + Chạy lệnh '%1'. + + + + Running command %1 %2 + Đang chạy lệnh %1 %2 + + + + Calamares::PythonJob + + + Running %1 operation. + Đang chạy %1 thao tác. + + + + Bad working directory path + Sai đường dẫn thư mục làm việc + + + + Working directory %1 for python job %2 is not readable. + Không thể đọc thư mục làm việc %1 của công việc python %2. + + + + Bad main script file + Sai tệp kịch bản chính + + + + Main script file %1 for python job %2 is not readable. + Không thể đọc tập tin kịch bản chính %1 của công việc python %2. + + + + Boost.Python error in job "%1". + Lỗi Boost.Python trong công việc "%1". + + + + Calamares::QmlViewStep + + + Loading ... + Đang tải ... + + + + QML Step <i>%1</i>. + QML bước <i>%1</i>. + + + + Loading failed. + Không tải được. + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + Kiểm tra các yêu cầu cho mô-đun <i> %1 </i> đã hoàn tất. + + + + Waiting for %n module(s). + + Đang đợi %n mô-đun. + + + + + (%n second(s)) + + (%n giây) + + + + + System-requirements checking is complete. + Kiểm tra yêu cầu hệ thống đã hoàn tất. + + + + Calamares::ViewManager + + + Setup Failed + Thiết lập không thành công + + + + Installation Failed + Cài đặt thất bại + + + + Error + Lỗi + + + + &Yes + &Có + + + + &No + &Không + + + + &Close + Đón&g + + + + Install Log Paste URL + URL để gửi nhật ký cài đặt + + + + The upload was unsuccessful. No web-paste was done. + 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. + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + Khởi tạo không thành công + + + + %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. + %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. + + + + <br/>The following modules could not be loaded: + <br/> Không thể tải các mô-đun sau: + + + + Continue with setup? + Tiếp tục thiết lập? + + + + Continue with installation? + Tiếp tục cài đặt? + + + + 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> + 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> + + + + 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> + 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> + + + + &Set up now + &Thiết lập ngay + + + + &Install now + &Cài đặt ngay + + + + Go &back + &Quay lại + + + + &Set up + &Thiết lập + + + + &Install + &Cài đặt + + + + Setup is complete. Close the setup program. + Thiết lập hoàn tất. Đóng chương trình cài đặt. + + + + The installation is complete. Close the installer. + Quá trình cài đặt hoàn tất. Đóng trình cài đặt. + + + + Cancel setup without changing the system. + Hủy thiết lập mà không thay đổi hệ thống. + + + + Cancel installation without changing the system. + Hủy cài đặt mà không thay đổi hệ thống. + + + + &Next + &Tiếp + + + + &Back + &Quay lại + + + + &Done + &Xong + + + + &Cancel + &Hủy + + + + Cancel setup? + Hủy thiết lập? + + + + Cancel installation? + Hủy cài đặt? + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + 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. + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + 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. + + + + CalamaresPython::Helper + + + Unknown exception type + Không nhận ra kiểu của ngoại lệ + + + + unparseable Python error + lỗi không thể phân tích cú pháp Python + + + + unparseable Python traceback + truy vết không thể phân tích cú pháp Python + + + + Unfetchable Python error. + Lỗi Python không thể try cập. + + + + CalamaresWindow + + + %1 Setup Program + %1 Thiết lập chương trình + + + + %1 Installer + %1 cài đặt hệ điều hành + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + Thu thập thông tin hệ thống ... + + + + ChoicePage + + + Form + Biểu mẫu + + + + Select storage de&vice: + &Chọn thiết bị lưu trữ: + + + + + + + Current: + Hiện tại: + + + + After: + Sau khi cài đặt: + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <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. + + + + Reuse %1 as home partition for %2. + Sử dụng lại %1 làm phân vùng chính cho %2. + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + <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> + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + %1 sẽ được thu nhỏ thành %2MiB và phân vùng %3MiB mới sẽ được tạo cho %4. + + + + Boot loader location: + Vị trí bộ tải khởi động: + + + + <strong>Select a partition to install on</strong> + <strong> Chọn phân vùng để cài đặt </strong> + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + 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. + + + + The EFI system partition at %1 will be used for starting %2. + Phân vùng hệ thống EFI tại %1 sẽ được sử dụng để bắt đầu %2. + + + + EFI system partition: + Phân vùng hệ thống EFI: + + + + 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. + 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ữ. + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + <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. + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + <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. + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + <strong> Thay thế phân vùng </strong> <br/> Thay thế phân vùng bằng %1. + + + + 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. + 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ữ. + + + + 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. + 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ữ. + + + + 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. + 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ữ. + + + + 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/> + 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/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + 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>. + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + 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>. + + + + No Swap + Không hoán đổi + + + + Reuse Swap + Sử dụng lại Hoán đổi + + + + Swap (no Hibernate) + Hoán đổi (không ngủ đông) + + + + Swap (with Hibernate) + Hoán đổi (ngủ đông) + + + + Swap to file + Hoán đổi sang tệp + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + Xóa gắn kết cho các hoạt động phân vùng trên %1 + + + + Clearing mounts for partitioning operations on %1. + Xóa các gắn kết cho các hoạt động phân vùng trên %1. + + + + Cleared all mounts for %1 + Đã xóa tất cả các gắn kết cho %1 + + + + ClearTempMountsJob + + + Clear all temporary mounts. + Xóa tất cả các gắn kết tạm thời. + + + + Clearing all temporary mounts. + Đang xóa tất cả các gắn kết tạm thời. + + + + Cleared all temporary mounts. + Xóa tất cả các gắn kết tạm thời. + + + + CommandList + + + + Could not run command. + Không thể chạy lệnh. + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + 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. + + + + The command needs to know the user's name, but no username is defined. + 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. + + + + Config + + + Set keyboard model to %1.<br/> + Thiệt lập bàn phím kiểu %1.<br/> + + + + Set keyboard layout to %1/%2. + Thiết lập bố cục bàn phím thành %1/%2. + + + + Set timezone to %1/%2. + Thiết lập múi giờ sang %1/%2. + + + + The system language will be set to %1. + Ngôn ngữ hệ thống sẽ được đặt thành %1. + + + + The numbers and dates locale will be set to %1. + Định dạng ngôn ngữ của số và ngày tháng sẽ được chuyển thành %1. + + + + Network Installation. (Disabled: Incorrect configuration) + Cài đặt mạng. (Tắt: Sai cấu hình) + + + + Network Installation. (Disabled: Received invalid groups data) + Cài đặt mạng. (Tắt: Nhận được dữ liệu nhóm bị sai) + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + Chọn phân vùng + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + 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) + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + 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> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + 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> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + 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. + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + 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. + + + + This program will ask you some questions and set up %2 on your computer. + 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. + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>Chào mừng đến với chương trình Calamares để thiết lập %1</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>Chào mừng đến với thiết lập %1 </h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>Chào mừng đến với chương trình Calamares để cài đặt %1</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>Chào mừng đến với bộ cài đặt %1 </h1> + + + + Your username is too long. + Tên bạn hơi dài. + + + + '%1' is not allowed as username. + '%1' không được phép dùng làm tên. + + + + Your username must start with a lowercase letter or underscore. + 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. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Chỉ cho phép các chữ cái viết thường, số, gạch dưới và gạch nối. + + + + Your hostname is too short. + Tên máy chủ quá ngắn. + + + + Your hostname is too long. + Tên máy chủ quá dài. + + + + '%1' is not allowed as hostname. + '%1' không được phép dùng làm tên máy chủ. + + + + Only letters, numbers, underscore and hyphen are allowed. + Chỉ cho phép các chữ cái, số, gạch dưới và gạch nối. + + + + Your passwords do not match! + Mật khẩu nhập lại không khớp! + + + + OK! + + + + + Setup Failed + Thiết lập không thành công + + + + Installation Failed + Cài đặt thất bại + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + Thiết lập xong + + + + Installation Complete + Cài đặt xong + + + + The setup of %1 is complete. + Thiết lập %1 đã xong. + + + + The installation of %1 is complete. + Cài đặt của %1 đã xong. + + + + Package Selection + Lựa chọn gói + + + + Please pick a product from the list. The selected product will be installed. + 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. + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + Tổng quan + + + + This is an overview of what will happen once you start the setup procedure. + Đâ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. + + + + This is an overview of what will happen once you start the install procedure. + Đâ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. + + + + ContextualProcessJob + + + Contextual Processes Job + Công việc xử lý theo ngữ cảnh + + + + CreatePartitionDialog + + + Create a Partition + Tạo phân vùng + + + + Si&ze: + &Kích thước: + + + + MiB + MiB + + + + Partition &Type: + &Loại phân vùng: + + + + Primar&y + + + + + E&xtended + &Mở rộng + + + + Fi&le System: + &Tập tin hệ thống: + + + + LVM LV name + Tên LVM LV + + + + &Mount Point: + &Điểm gắn kết: + + + + Flags: + Cờ: + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + &Mã hóa + + + + Logical + Lô-gic + + + + Primary + Sơ cấp + + + + GPT + GPT + + + + Mountpoint already in use. Please select another one. + Điểm gắn kết đã được sử dụng. Vui lòng chọn một cái khác. + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + Tạo phân vùng %2MiB mới trên %4 (%3) với hệ thống tệp %1. + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + 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>. + + + + + Creating new %1 partition on %2. + Tạo phân vùng %1 mới trên %2. + + + + The installer failed to create partition on disk '%1'. + Trình cài đặt không tạo được phân vùng trên đĩa '%1'. + + + + CreatePartitionTableDialog + + + Create Partition Table + Tạo bảng phân vùng + + + + Creating a new partition table will delete all existing data on the disk. + 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. + + + + What kind of partition table do you want to create? + Bạn muốn tạo loại bảng phân vùng nào? + + + + Master Boot Record (MBR) + Bản ghi khởi động chính (MBR) + + + + GUID Partition Table (GPT) + Bảng phân vùng GUID (GPT) + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + Tạo bảng phân vùng %1 mới trên %2. + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + Tạo bảng phân vùng <strong>%1 </strong> mới trên <strong>%2 </strong> (%3). + + + + Creating new %1 partition table on %2. + Tạo bảng phân vùng %1 mới trên %2. + + + + The installer failed to create a partition table on %1. + Trình cài đặt không tạo được bảng phân vùng trên %1. + + + + CreateUserJob + + + Create user %1 + Khởi tạo người dùng %1 + + + + Create user <strong>%1</strong>. + Tạo người dùng <strong>%1</strong>. + + + + Preserving home directory + Giữ lại thư mục home + + + + + Creating user %1 + Đang tạo người dùng %1 + + + + Configuring user %1 + Đang cấu hình cho người dùng %1 + + + + Setting file permissions + Đang thiết lập quyền hạn với tập tin + + + + CreateVolumeGroupDialog + + + Create Volume Group + Tạo nhóm ổ đĩa + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + Tạo nhóm ổ đĩa mới có tên %1. + + + + Create new volume group named <strong>%1</strong>. + Tạo nhóm ổ đĩa mới có tên <strong>%1</strong>. + + + + Creating new volume group named %1. + Đang tạo nhóm ổ đĩa mới có tên %1. + + + + The installer failed to create a volume group named '%1'. + Trình cài đặt không tạo được nhóm ổ đĩa có tên '%1'. + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + Hủy kích hoạt nhóm ổ đĩa có tên %1. + + + + Deactivate volume group named <strong>%1</strong>. + Hủy kích hoạt nhóm ổ đĩa có tên <strong>%1</strong>. + + + + The installer failed to deactivate a volume group named %1. + Trình cài đặt không thể hủy kích hoạt nhóm ổ đĩa có tên %1. + + + + DeletePartitionJob + + + Delete partition %1. + Xóa phân vùng %1. + + + + Delete partition <strong>%1</strong>. + Xóa phân vùng <strong>%1</strong>. + + + + Deleting partition %1. + Đang xóa phân vùng %1. + + + + The installer failed to delete partition %1. + Trình cài đặt không thể xóa phân vùng %1. + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + Thiết bị này có bảng phân vùng <strong> %1 </strong>. + + + + 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. + Đâ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. + + + + 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. + 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. + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + <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>. + + + + <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. + <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>. + + + + 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. + 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. + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + %1 - %2 (%3) + + + + %1 - (%2) + device[name] - (device-node[name]) + %1 - (%2) + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + Lưu cấu hình LUKS cho Dracut vào %1 + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + Không lưu cấu hình LUKS cho Dracut: phân vùng "/" không được mã hoá + + + + Failed to open %1 + Mở %1 thất bại + + + + DummyCppJob + + + Dummy C++ Job + Công việc C++ ví dụ + + + + EditExistingPartitionDialog + + + Edit Existing Partition + Chỉnh sửa phân vùng hiện có + + + + Con&tent: + + + + + &Keep + &Giữ + + + + Format + Định dạng + + + + Warning: Formatting the partition will erase all existing data. + Cảnh báo: Định dạng phân vùng sẽ xóa tất cả dữ liệu hiện có. + + + + &Mount Point: + &Điểm gắn kết: + + + + Si&ze: + &Kích thước: + + + + MiB + MiB + + + + Fi&le System: + &Tập tin hệ thống: + + + + Flags: + Cờ: + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + Biểu mẫu + + + + En&crypt system + &Mã hóa hệ thống + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + Cụm mật khẩu + + + + Confirm passphrase + Xác nhận cụm mật khẩu + + + + + Please enter the same passphrase in both boxes. + Vui lòng nhập cùng một cụm mật khẩu vào cả hai hộp. + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + Bạn có muốn gửi nhật ký cài đặt lên web không? + + + + FillGlobalStorageJob + + + Set partition information + Đặt thông tin phân vùng + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + Cài đặt %1 trên phân vùng hệ thống <strong> mới </strong> %2. + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + Cài đặt %2 trên phân vùng hệ thống %3 <strong> %1 </strong>. + + + + Install boot loader on <strong>%1</strong>. + Cài đặt trình tải khởi động trên <strong> %1 </strong>. + + + + Setting up mount points. + Thiết lập điểm gắn kết. + + + + FinishedPage + + + Form + Biểu mẫu + + + + &Restart now + &Khởi động lại ngay + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + <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. + + + + <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> + <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> + + + + <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. + <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. + + + + <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> + <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> + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + <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. + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + <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. + + + + FinishedQmlViewStep + + + Finish + Hoàn thành + + + + FinishedViewStep + + + Finish + Hoàn thành + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + Định dạng phân vùng %1 (tập tin hệ thống:%2, kích thước: %3 MiB) trên %4. + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + Định dạng <strong>%3MiB</strong> phân vùng <strong>%1</strong>với tập tin hệ thống <strong>%2</strong>. + + + + Formatting partition %1 with file system %2. + Đang định dạng phân vùng %1 với tập tin hệ thống %2. + + + + The installer failed to format partition %1 on disk '%2'. + Không thể định dạng %1 ở đĩa '%2'. + + + + GeneralRequirements + + + has at least %1 GiB available drive space + có ít nhất %1 GiB dung lượng ổ đĩa khả dụng + + + + There is not enough drive space. At least %1 GiB is required. + Không có đủ dung lượng ổ đĩa. Ít nhất %1 GiB là bắt buộc. + + + + has at least %1 GiB working memory + có ít nhất %1 GiB bộ nhớ làm việc + + + + The system does not have enough working memory. At least %1 GiB is required. + Hệ thống không có đủ bộ nhớ hoạt động. Ít nhất %1 GiB là bắt buộc. + + + + is plugged in to a power source + được cắm vào nguồn điện + + + + The system is not plugged in to a power source. + Hệ thống chưa được cắm vào nguồn điện. + + + + is connected to the Internet + được kết nối với Internet + + + + The system is not connected to the Internet. + Hệ thống không được kết nối với Internet. + + + + is running the installer as an administrator (root) + đang chạy trình cài đặt với tư cách quản trị viên (root) + + + + The setup program is not running with administrator rights. + Chương trình thiết lập không chạy với quyền quản trị viên. + + + + The installer is not running with administrator rights. + Trình cài đặt không chạy với quyền quản trị viên. + + + + has a screen large enough to show the whole installer + có màn hình đủ lớn để hiển thị toàn bộ trình cài đặt + + + + The screen is too small to display the setup program. + Màn hình quá nhỏ để hiển thị chương trình cài đặt. + + + + The screen is too small to display the installer. + Màn hình quá nhỏ để hiển thị trình cài đặt. + + + + HostInfoJob + + + Collecting information about your machine. + Thu thập thông tin về máy của bạn. + + + + IDJob + + + + + + OEM Batch Identifier + Định danh lô OEM + + + + Could not create directories <code>%1</code>. + Không thể tạo thư mục <code> %1 </code>. + + + + Could not open file <code>%1</code>. + Không thể mở được tệp <code> %1 </code>. + + + + Could not write to file <code>%1</code>. + Không thể ghi vào tệp <code> %1 </code>. + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + Đang tạo initramfs bằng mkinitcpio. + + + + InitramfsJob + + + Creating initramfs. + Đang tạo initramfs. + + + + InteractiveTerminalPage + + + Konsole not installed + Konsole chưa được cài đặt + + + + Please install KDE Konsole and try again! + Vui lòng cài đặt KDE Konsole rồi thử lại! + + + + Executing script: &nbsp;<code>%1</code> + Đang thực thi kịch bản: &nbsp;<code>%1</code> + + + + InteractiveTerminalViewStep + + + Script + Kịch bản + + + + KeyboardQmlViewStep + + + Keyboard + Bàn phím + + + + KeyboardViewStep + + + Keyboard + Bàn phím + + + + LCLocaleDialog + + + System locale setting + Cài đặt ngôn ngữ hệ thống + + + + 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>. + 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>. + + + + &Cancel + &Huỷ bỏ + + + + &OK + &OK + + + + LOSHJob + + + Configuring encrypted swap. + Đang cấu hình hoán đổi mã hoá + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + Biểu mẫu + + + + <h1>License Agreement</h1> + <h1>Điều khoản giấy phép</h1> + + + + I accept the terms and conditions above. + Tôi đồng ý với điều khoản và điều kiện trên. + + + + Please review the End User License Agreements (EULAs). + Vui lòng đọc thoả thuận giấy phép người dùng cuối (EULAs). + + + + This setup procedure will install proprietary software that is subject to licensing terms. + 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. + + + + If you do not agree with the terms, the setup procedure cannot continue. + 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. + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + 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. + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + 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ế. + + + + LicenseViewStep + + + License + Giấy phép + + + + LicenseWidget + + + URL: %1 + URL: %1 + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + <strong>trình điều khiển %1</strong><br/>bởi %2 + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + <strong>trình điều khiển đồ hoạc %1</strong><br/><font color="Grey">bởi %2</font> + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + <strong>plugin trình duyệt %1</strong><br/><font color="Grey">bởi %2</font> + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + <strong>%1 codec</strong><br/><font color="Grey">bởi %2</font> + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + <strong>gói %1</strong><br/><font color="Grey">bởi %2</font> + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + <strong>%1</strong><br/><font color="Grey">bởi %2</font> + + + + File: %1 + Tệp: %1 + + + + Hide license text + Ẩn thông tin giấy phép + + + + Show the license text + Hiện thông tin giấy phép + + + + Open license agreement in browser. + Mở điều khoản giấy phép trên trình duyệt. + + + + LocalePage + + + Region: + Khu vực: + + + + Zone: + Vùng: + + + + + &Change... + &Thay đổi... + + + + LocaleQmlViewStep + + + Location + Vị trí + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + Vị trí + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + Định cấu hình tệp khóa LUKS. + + + + + No partitions are defined. + Không có phân vùng nào được xác định. + + + + + + Encrypted rootfs setup error + Lỗi thiết lập rootfs mã hóa + + + + Root partition %1 is LUKS but no passphrase has been set. + Phân vùng gốc %1 là LUKS nhưng không có cụm mật khẩu nào được đặt. + + + + Could not create LUKS key file for root partition %1. + Không thể tạo tệp khóa LUKS cho phân vùng gốc %1. + + + + Could not configure LUKS key file on partition %1. + Không thể định cấu hình tệp khóa LUKS trên phân vùng %1. + + + + MachineIdJob + + + Generate machine-id. + Tạo ID máy. + + + + Configuration Error + Lỗi cấu hình + + + + No root mount point is set for MachineId. + Không có điểm gắn kết gốc nào được đặt cho ID máy + + + + Map + + + Timezone: %1 + Múi giờ: %1 + + + + 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. + 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. + + + + NetInstallViewStep + + + Package selection + Chọn phân vùng + + + + Office software + Phần mềm văn phòng + + + + Office package + Gói văn phòng + + + + Browser software + Phần mềm trình duyệt + + + + Browser package + Gói trình duyệt + + + + Web browser + Trình duyệt web + + + + Kernel + Lõi + + + + Services + Dịch vụ + + + + Login + Đăng nhập + + + + Desktop + Màn hình chính + + + + Applications + Ứng dụng + + + + Communication + Cộng đồng + + + + Development + Phát triển + + + + Office + Văn phòng + + + + Multimedia + Đa phương tiện + + + + Internet + Mạng Internet + + + + Theming + Chủ đề + + + + Gaming + Trò chơi + + + + Utilities + Tiện ích + + + + NotesQmlViewStep + + + Notes + Ghi chú + + + + OEMPage + + + Ba&tch: + &Lô: + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + <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> + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + <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> + + + + OEMViewStep + + + OEM Configuration + Cấu hình OEM + + + + Set the OEM Batch Identifier to <code>%1</code>. + Đặt số nhận dạng lô OEM thành <code> %1 </code>. + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + Múi giờ: %1 + + + + Select your preferred Zone within your Region. + Chọn vùng ưa thích của bạn trong khu vực của bạn. + + + + Zones + Vùng + + + + You can fine-tune Language and Locale settings below. + Bạn có thể tinh chỉnh cài đặt Ngôn ngữ và Bản địa bên dưới. + + + + PWQ + + + Password is too short + Mật khẩu quá ngắn + + + + Password is too long + Mật khẩu quá dài + + + + Password is too weak + Mật khẩu quá yếu + + + + Memory allocation error when setting '%1' + Lỗi phân bổ bộ nhớ khi cài đặt '%1' + + + + Memory allocation error + Lỗi phân bổ bộ nhớ + + + + The password is the same as the old one + Mật khẩu giống với mật khẩu cũ + + + + The password is a palindrome + Mật khẩu là chuỗi đối xứng + + + + The password differs with case changes only + Mật khẩu chỉ khác khi thay đổi chữ hoa chữ thường + + + + The password is too similar to the old one + Mật khẩu giống mật khẩu cũ + + + + The password contains the user name in some form + Mật khẩu chứa tên người dùng ở một số dạng + + + + The password contains words from the real name of the user in some form + 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 + + + + The password contains forbidden words in some form + Mật khẩu chứa các từ bị cấm dưới một số hình thức + + + + The password contains too few digits + Mật khẩu chứa quá ít ký tự + + + + The password contains too few uppercase letters + Mật khẩu chứa quá ít chữ hoa + + + + The password contains fewer than %n lowercase letters + + Mật khẩu chứa ít hơn %n chữ cái thường + + + + + The password contains too few lowercase letters + Mật khẩu chứa quá ít chữ thường + + + + The password contains too few non-alphanumeric characters + Mật khẩu chứa quá ít ký tự không phải chữ và số + + + + The password is too short + Mật khẩu quá ngắn + + + + The password does not contain enough character classes + Mật khẩu không chứa đủ các lớp ký tự + + + + The password contains too many same characters consecutively + Mật khẩu chứa quá nhiều ký tự giống nhau liên tiếp + + + + The password contains too many characters of the same class consecutively + Mật khẩu chứa quá nhiều ký tự của cùng một lớp liên tiếp + + + + The password contains fewer than %n digits + + Mật khẩu chứa ít hơn %n chữ số + + + + + The password contains fewer than %n uppercase letters + + Mật khẩu chứa ít hơn %n chữ in hoa + + + + + The password contains fewer than %n non-alphanumeric characters + + Mật khẩu chứa ít hơn %n kí tự không phải là chữ và số + + + + + The password is shorter than %n characters + + Mật khẩu ngắn hơn %n kí tự + + + + + The password is a rotated version of the previous one + Mật khẩu là phiên bản đảo chiều của mật khẩu trước đó + + + + The password contains fewer than %n character classes + + Mật khẩu chứ ít hơn %n lớp kí tự + + + + + The password contains more than %n same characters consecutively + + Mật khẩu chứa nhiều hơn %n kí tự giống nhau liên tiếp + + + + + The password contains more than %n characters of the same class consecutively + + Mật khẩu chứa nhiều hơn %n kí tự của cùng một lớp liên tiếp + + + + + The password contains monotonic sequence longer than %n characters + + Mật khẩu chứa chuỗi kí tự dài hơn %n kí tự + + + + + The password contains too long of a monotonic character sequence + Mật khẩu chứa một chuỗi ký tự đơn điệu quá dài + + + + No password supplied + Chưa cung cấp mật khẩu + + + + Cannot obtain random numbers from the RNG device + Không thể lấy số ngẫu nhiên từ thiết bị RNG + + + + Password generation failed - required entropy too low for settings + Tạo mật khẩu không thành công - yêu cầu entropy quá thấp để cài đặt + + + + The password fails the dictionary check - %1 + Mật khẩu không kiểm tra được từ điển - %1 + + + + The password fails the dictionary check + Mật khẩu không kiểm tra được từ điển + + + + Unknown setting - %1 + Cài đặt không xác định - %1 + + + + Unknown setting + Cài đặt không xác định + + + + Bad integer value of setting - %1 + Giá trị số nguyên không hợp lệ của cài đặt - %1 + + + + Bad integer value + Giá trị số nguyên không hợp lệ + + + + Setting %1 is not of integer type + Cài đặt %1 không thuộc kiểu số nguyên + + + + Setting is not of integer type + Cài đặt không thuộc kiểu số nguyên + + + + Setting %1 is not of string type + Cài đặt %1 không thuộc loại chuỗi + + + + Setting is not of string type + Cài đặt không thuộc loại chuỗi + + + + Opening the configuration file failed + Không mở được tệp cấu hình + + + + The configuration file is malformed + Tệp cấu hình không đúng định dạng + + + + Fatal failure + Thất bại nghiêm trọng + + + + Unknown error + Lỗi không xác định + + + + Password is empty + Mật khẩu trống + + + + PackageChooserPage + + + Form + Biểu mẫu + + + + Product Name + Tên sản phẩm + + + + TextLabel + Nhãn văn bản + + + + Long Product Description + Mô tả đầy đủ sản phẩm + + + + Package Selection + Lựa chọn gói + + + + Please pick a product from the list. The selected product will be installed. + 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. + + + + PackageChooserQmlViewStep + + + Packages + Gói + + + + PackageChooserViewStep + + + Packages + Gói + + + + PackageModel + + + Name + Tên + + + + Description + Mô tả + + + + Page_Keyboard + + + Form + Biểu mẫu + + + + Keyboard Model: + Mẫu bàn phím: + + + + Type here to test your keyboard + Gõ vào đây để thử bàn phím + + + + Page_UserSetup + + + Form + Mẫu + + + + What is your name? + Hãy cho Vigo biết tên đầy đủ của bạn? + + + + Your Full Name + Tên đầy đủ + + + + What name do you want to use to log in? + Bạn sẽ dùng tên nào để đăng nhập vào máy tính? + + + + login + Tên đăng nhập + + + + What is the name of this computer? + Tên máy tính này là? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + <small>Tên này được dùng nếu máy tính được nhìn thấy trong mạng.</small> + + + + Computer Name + Tên máy + + + + Choose a password to keep your account safe. + Chọn một mật khẩu để giữ an toàn cho tài khoản của bạn. + + + + + <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> + <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> + + + + + Password + Mật khẩu + + + + + Repeat Password + Nhập lại mật khẩu + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Khi chọn mục này, bạn có thể chọn mật khẩu yếu. + + + + Require strong passwords. + Yêu cầu mật khẩu mạnh. + + + + Log in automatically without asking for the password. + Tự đăng nhật không cần mật khẩu. + + + + Use the same password for the administrator account. + Dùng cùng một mật khẩu cho tài khoản quản trị. + + + + Choose a password for the administrator account. + Chọn một mật khẩu cho tài khoản quản trị. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + <small>Nhập mật khẩu hai lần giống nhau để kiểm tra nếu gõ sai.</small> + + + + PartitionLabelsView + + + Root + Gốc + + + + Home + Nhà + + + + Boot + Khởi động + + + + EFI system + Hệ thống EFI + + + + Swap + Hoán đổi + + + + New partition for %1 + Phân vùng mới cho %1 + + + + New partition + Phân vùng mới + + + + %1 %2 + size[number] filesystem[name] + %1 %2 + + + + PartitionModel + + + + Free Space + Không gian trống + + + + + New partition + Phân vùng mới + + + + Name + Tên + + + + File System + Tập tin hệ thống + + + + File System Label + + + + + Mount Point + Điểm gắn kết + + + + Size + Kích cỡ + + + + PartitionPage + + + Form + Biểu mẫu + + + + Storage de&vice: + Thiết &bị lưu trữ: + + + + &Revert All Changes + &Hoàn tác tất cả thay đổi + + + + New Partition &Table + Phân vùng &Bảng mới + + + + Cre&ate + &Tạo + + + + &Edit + &Sửa + + + + &Delete + &Xóa + + + + New Volume Group + Nhóm ổ đĩa mới + + + + Resize Volume Group + Thay đổi kích thước nhóm ổ đĩa + + + + Deactivate Volume Group + Hủy kích hoạt nhóm ổ đĩa + + + + Remove Volume Group + Xóa nhóm ổ đĩa + + + + I&nstall boot loader on: + &Cài đặt bộ tải khởi động trên: + + + + Are you sure you want to create a new partition table on %1? + 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? + + + + Can not create new partition + Không thể tạo phân vùng mới + + + + 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. + 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 đó. + + + + PartitionViewStep + + + Gathering system information... + Thu thập thông tin hệ thống ... + + + + Partitions + Phân vùng + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + Hiện tại: + + + + After: + Sau: + + + + No EFI system partition configured + Không có hệ thống phân vùng EFI được cài đặt + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + Lựa chọn dùng GPT trên BIOS + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + Phân vùng khởi động không được mã hóa + + + + 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. + 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. + + + + has at least one disk device available. + có sẵn ít nhất một thiết bị đĩa. + + + + There are no partitions to install on. + Không có phân vùng để cài đặt. + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + Công việc Plasma Look-and-Feel + + + + + Could not select KDE Plasma Look-and-Feel package + Không thể chọn gói KDE Plasma Look-and-Feel + + + + PlasmaLnfPage + + + Form + Biểu mẫu + + + + 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. + 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 đó. + + + + 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. + 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 đó. + + + + PlasmaLnfViewStep + + + Look-and-Feel + Look-and-Feel + + + + PreserveFiles + + + Saving files for later ... + Đang lưu tập tin để dùng sau ... + + + + No files configured to save for later. + Không có tệp nào được định cấu hình để lưu sau này. + + + + Not all of the configured files could be preserved. + Không phải tất cả các tệp đã định cấu hình đều có thể được giữ nguyên. + + + + ProcessResult + + + +There was no output from the command. + +Không có đầu ra từ lệnh. + + + + +Output: + + +Đầu ra: + + + + + External command crashed. + Lệnh bên ngoài bị lỗi. + + + + Command <i>%1</i> crashed. + Lệnh <i>%1</i> bị lỗi. + + + + External command failed to start. + Lệnh ngoài không thể bắt đầu. + + + + Command <i>%1</i> failed to start. + Lệnh <i>%1</i> không thể bắt đầu. + + + + Internal error when starting command. + Lỗi nội bộ khi bắt đầu lệnh. + + + + Bad parameters for process job call. + Tham số không hợp lệ cho lệnh gọi công việc của quy trình. + + + + External command failed to finish. + Không thể hoàn tất lệnh bên ngoài. + + + + Command <i>%1</i> failed to finish in %2 seconds. + Lệnh <i>%1</i> không thể hoàn thành trong %2 giây. + + + + External command finished with errors. + Lệnh bên ngoài kết thúc với lỗi. + + + + Command <i>%1</i> finished with exit code %2. + Lệnh <i>%1</i> hoàn thành với lỗi %2. + + + + QObject + + + %1 (%2) + %1 (%2) + + + + unknown + không xác định + + + + extended + gia tăng + + + + unformatted + không định dạng + + + + swap + hoán đổi + + + + + Default + Mặc định + + + + + + + File not found + Không tìm thấy tập tin + + + + Path <pre>%1</pre> must be an absolute path. + Đường dẫn <pre>%1</pre> phải là đường dẫn tuyệt đối. + + + + Directory not found + Thư mục không tìm thấy + + + + + Could not create new random file <pre>%1</pre>. + Không thể tạo tập tin ngẫu nhiên <pre>%1</pre>. + + + + No product + Không có sản phẩm + + + + No description provided. + Không có mô tả được cung cấp. + + + + (no mount point) + (không có điểm gắn kết) + + + + Unpartitioned space or unknown partition table + Không gian chưa được phân vùng hoặc bảng phân vùng không xác định + + + + Recommended + + + <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> + <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> + + + + RemoveUserJob + + + Remove live user from target system + Xóa người dùng trực tiếp khỏi hệ thống đích + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + Xóa nhóm ổ đĩa có tên %1. + + + + Remove Volume Group named <strong>%1</strong>. + Xóa nhóm ổ đĩa có tên <strong>%1</strong>. + + + + The installer failed to remove a volume group named '%1'. + Trình cài đặt không xóa được nhóm ổ đĩa có tên '%1'. + + + + ReplaceWidget + + + Form + Biểu mẫu + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + 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. + + + + The selected item does not appear to be a valid partition. + Mục đã chọn dường như không phải là một phân vùng hợp lệ. + + + + %1 cannot be installed on empty space. Please select an existing partition. + %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ó. + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + %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ó. + + + + %1 cannot be installed on this partition. + %1 không thể cài đặt trên phân vùng này. + + + + Data partition (%1) + Phân vùng dữ liệu (%1) + + + + Unknown system partition (%1) + Phân vùng hệ thống không xác định (%1) + + + + %1 system partition (%2) + %1 phân vùng hệ thống (%2) + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + <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. + + + + <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. + <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. + + + + + + <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. + <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. + + + + The EFI system partition at %1 will be used for starting %2. + Phân vùng hệ thống EFI tại %1 sẽ được sử dụng để bắt đầu %2. + + + + EFI system partition: + Phân vùng hệ thống EFI: + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <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> + + + + <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> + <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> + + + + ResizeFSJob + + + Resize Filesystem Job + Thay đổi kích thước tệp công việc hệ thống + + + + Invalid configuration + Cấu hình không hợp lệ + + + + The file-system resize job has an invalid configuration and will not run. + 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. + + + + KPMCore not Available + KPMCore không khả dụng + + + + Calamares cannot start KPMCore for the file-system resize job. + Calamares không thể khởi động KPMCore cho công việc thay đổi kích thước hệ thống tệp. + + + + + + + + Resize Failed + Thay đổi kích thước không thành công + + + + The filesystem %1 could not be found in this system, and cannot be resized. + 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. + + + + The device %1 could not be found in this system, and cannot be resized. + 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. + + + + + The filesystem %1 cannot be resized. + Không thể thay đổi kích thước tệp hệ thống %1. + + + + + The device %1 cannot be resized. + Không thể thay đổi kích thước thiết bị %1. + + + + The filesystem %1 must be resized, but cannot. + Hệ thống tệp %1 phải được thay đổi kích thước, nhưng không thể. + + + + The device %1 must be resized, but cannot + Thiết bị %1 phải được thay đổi kích thước, nhưng không thể + + + + ResizePartitionJob + + + Resize partition %1. + Đổi kích thước phân vùng %1. + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + Thay đổi kích thước <strong>%2MiB</strong> phân vùng <strong>%1</strong> toùng <strong>%3đếnMiB</strong>. + + + + Resizing %2MiB partition %1 to %3MiB. + Thay đổi %2MiB phân vùng %1 thành %3MiB. + + + + The installer failed to resize partition %1 on disk '%2'. + Thất bại trong việc thay đổi kích thước phân vùng %1 trên đĩa '%2'. + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + Thay đổi kích thước nhóm ổ đĩa + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + Thay đổi kích thước nhóm ổ đĩa có tên %1 từ %2 thành %3. + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + Thay đổi kích thước nhóm ổ đĩa có tên <strong> %1 </strong> từ <strong> %2 </strong> thành <strong> %3 </strong>. + + + + The installer failed to resize a volume group named '%1'. + Trình cài đặt không thể thay đổi kích thước một nhóm ổ đĩa có tên ' %1'. + + + + ResultsListDialog + + + For best results, please ensure that this computer: + Để có kết quả tốt nhất, hãy đảm bảo rằng máy tính này: + + + + System requirements + Yêu cầu hệ thống + + + + ScanningDialog + + + Scanning storage devices... + Quét thiết bị lưu trữ... + + + + Partitioning + Đang phân vùng + + + + SetHostNameJob + + + Set hostname %1 + Đặt tên máy %1 + + + + Set hostname <strong>%1</strong>. + Đặt tên máy <strong>%1</strong>. + + + + Setting hostname %1. + Đặt tên máy %1. + + + + + Internal Error + Lỗi bên trong + + + + + Cannot write hostname to target system + Không thể ghi tên máy chủ vào hệ thống đích + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + Cài đặt bàn phím kiểu %1, bố cục %2-%3 + + + + Failed to write keyboard configuration for the virtual console. + Lỗi khi ghi cấu hình bàn phím cho virtual console. + + + + + + Failed to write to %1 + Lỗi khi ghi vào %1 + + + + Failed to write keyboard configuration for X11. + Lỗi khi ghi cấu hình bàn phím cho X11. + + + + Failed to write keyboard configuration to existing /etc/default directory. + Lỗi khi ghi cấu hình bàn phím vào thư mục /etc/default. + + + + SetPartFlagsJob + + + Set flags on partition %1. + Chọn cờ trong phân vùng %1. + + + + Set flags on %1MiB %2 partition. + Chọn cờ %1MiB %2 phân vùng. + + + + Set flags on new partition. + Chọn cờ trong phân vùng mới. + + + + Clear flags on partition <strong>%1</strong>. + Xóa cờ trong phân vùng<strong>%1</strong>. + + + + Clear flags on %1MiB <strong>%2</strong> partition. + Xóa cờ trong %1MiB <strong>%2</strong> phân vùng. + + + + Clear flags on new partition. + Xóa cờ trong phân vùng mới. + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + Cờ phân vùng <strong>%1</strong> như <strong>%2</strong>. + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + Cờ %1MiB <strong>%2</strong> phân vùng như <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. + Cờ phân vùng mới như <strong>%1</strong>. + + + + Clearing flags on partition <strong>%1</strong>. + Đang xóa cờ trên phân vùng <strong>%1</strong>. + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + Đang xóa cờ trên %1MiB <strong>%2</strong> phân vùng. + + + + Clearing flags on new partition. + Đang xóa cờ trên phân vùng mới. + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + Chọn cờ <strong>%2</strong> trong phân vùng <strong>%1</strong>. + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + Chọn cờ <strong>%3</strong> trong %1MiB <strong>%2</strong> phân vùng. + + + + Setting flags <strong>%1</strong> on new partition. + Chọn cờ <strong>%1</strong> trong phân vùng mới. + + + + The installer failed to set flags on partition %1. + Không thể tạo cờ cho phân vùng %1. + + + + SetPasswordJob + + + Set password for user %1 + Tạo mật khẩu người dùng %1 + + + + Setting password for user %1. + Đang tạo mật khẩu người dùng %1. + + + + Bad destination system path. + Đường dẫn hệ thống đích không hợp lệ. + + + + rootMountPoint is %1 + Điểm gắn kết gốc là %1 + + + + Cannot disable root account. + Không thể vô hiệu hoá tài khoản quản trị. + + + + passwd terminated with error code %1. + passwd bị kết thúc với mã lỗi %1. + + + + Cannot set password for user %1. + Không thể đặt mật khẩu cho người dùng %1. + + + + usermod terminated with error code %1. + usermod bị chấm dứt với mã lỗi %1. + + + + SetTimezoneJob + + + Set timezone to %1/%2 + Đặt múi giờ thành %1/%2 + + + + Cannot access selected timezone path. + Không thể truy cập đường dẫn múi giờ đã chọn. + + + + Bad path: %1 + Đường dẫn sai: %1 + + + + Cannot set timezone. + Không thể cài đặt múi giờ. + + + + Link creation failed, target: %1; link name: %2 + Không tạo được liên kết, target: %1; tên liên kết: %2 + + + + Cannot set timezone, + Không thể cài đặt múi giờ + + + + Cannot open /etc/timezone for writing + Không thể mở để viết vào /etc/timezone + + + + SetupGroupsJob + + + Preparing groups. + Đang chuẩn bị các nhóm + + + + + Could not create groups in target system + Không thể tạo các nhóm trên hệ thống đích + + + + These groups are missing in the target system: %1 + Có vài nhóm đang bị thiếu trong hệ thống đích: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + Cấu hình <pre>sudo</pre>cho người dùng. + + + + Cannot chmod sudoers file. + Không thể sửa đổi mod của tệp sudoers. + + + + Cannot create sudoers file for writing. + Không thể tạo tệp sudoers để viết. + + + + ShellProcessJob + + + Shell Processes Job + Shell Xử lý Công việc + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + %L1 / %L2 + + + + StandardButtons + + + &OK + &OK + + + + &Yes + &Có + + + + &No + &Không + + + + &Cancel + &Huỷ bỏ + + + + &Close + Đón&g + + + + TrackingInstallJob + + + Installation feedback + Phản hồi cài đặt + + + + Sending installation feedback. + Gửi phản hồi cài đặt. + + + + Internal error in install-tracking. + Lỗi nội bộ trong theo dõi cài đặt. + + + + HTTP request timed out. + Yêu cầu HTTP đã hết thời gian chờ. + + + + TrackingKUserFeedbackJob + + + KDE user feedback + Người dùng KDE phản hồi + + + + Configuring KDE user feedback. + Định cấu hình phản hồi của người dùng KDE. + + + + + Error in KDE user feedback configuration. + Lỗi trong cấu hình phản hồi của người dùng KDE. + + + + Could not configure KDE user feedback correctly, script error %1. + 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. + + + + Could not configure KDE user feedback correctly, Calamares error %1. + 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. + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + Phản hồi máy + + + + Configuring machine feedback. + Cấu hình phản hồi máy. + + + + + Error in machine feedback configuration. + Lỗi cấu hình phản hồi máy. + + + + Could not configure machine feedback correctly, script error %1. + Không thể cấu hình phản hồi máy chính xác, kịch bản lỗi %1. + + + + Could not configure machine feedback correctly, Calamares error %1. + Không thể cấu hình phản hồi máy chính xác, lỗi %1. + + + + TrackingPage + + + Form + Biểu mẫu + + + + Placeholder + Trình giữ chỗ + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <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> + + + + <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> + <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> + + + + 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. + 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. + + + + 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. + 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. + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + 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. + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + 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. + + + + TrackingViewStep + + + Feedback + Phản hồi + + + + UmountJob + + + Unmount file systems. + Gỡ kết nối các hệ thống tập tin. + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + <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> + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + <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> + + + + UsersQmlViewStep + + + Users + Người dùng + + + + UsersViewStep + + + Users + Người dùng + + + + VariantModel + + + Key + Column header for key/value + Khóa + + + + Value + Column header for key/value + Giá trị + + + + VolumeGroupBaseDialog + + + Create Volume Group + Tạo nhóm ổ đĩa + + + + List of Physical Volumes + Danh sách các đĩa vật lý + + + + Volume Group Name: + Tên nhóm ổ đĩa: + + + + Volume Group Type: + Loại nhóm ổ đĩa: + + + + Physical Extent Size: + Kích thước phạm vi vật lý: + + + + MiB + MiB + + + + Total Size: + Tổng kích thước: + + + + Used Size: + Đã dùng: + + + + Total Sectors: + Tổng số Sec-tơ: + + + + Quantity of LVs: + Số lượng của LVs: + + + + WelcomePage + + + Form + Biểu mẫu + + + + + Select application and system language + Chọn ngôn ngữ ứng dụng và hệ thống + + + + &About + &Giới thiệu + + + + Open donations website + Mở trang web ủng hộ + + + + &Donate + Ủng &hộ + + + + Open help and support website + Mở trang web trợ giúp + + + + &Support + &Hỗ trợ + + + + Open issues and bug-tracking website + Mở trang web theo dõi lỗi và vấn đề + + + + &Known issues + &Vấn đề đã biết + + + + Open release notes website + Mở trang web ghi chú phát hành + + + + &Release notes + &Ghi chú phát hành + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + <h1>Chào mừng đến với chương trình Calamares để thiết lập cho %1.</h1> + + + + <h1>Welcome to %1 setup.</h1> + <h1>Chào mừng đến với thiết lập %1.</h1> + + + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>Chào mừng đến với chương trình Calamares để cài đặt cho %1.</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>Chào mừng đến với bộ cài đặt %1.</h1> + + + + %1 support + Hỗ trợ %1 + + + + About %1 setup + Về thiết lập %1 + + + + About %1 installer + Về bộ cài đặt %1 + + + + <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. + <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. + + + + WelcomeQmlViewStep + + + Welcome + Chào mừng + + + + WelcomeViewStep + + + Welcome + Chào mừng + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + Lỗi cấu hình + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + <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. + + + + Back + Quay lại + + + + calamares-sidebar + + + Show debug information + Hiện thông tin gỡ lỗi + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + <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>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <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>. + + + + Back + Trở lại + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + Mẫu bàn phím: + + + + Layouts + Bố cục + + + + Type here to test your keyboard + Gõ vào đây để thử bàn phím + + + + Variants + Các biến thể + + + + localeq + + + Change + Đổi + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + <h3>%1</h3> + <p>Đây là ghi chú phát hành mẫu.</p> + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + <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> + + + + Back + Quay lại + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + 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ị + + + + What is your name? + Hãy cho Vigo biết tên đầy đủ của bạn? + + + + Your Full Name + Tên đầy đủ + + + + What name do you want to use to log in? + Bạn muốn dùng tên nào để đăng nhập máy tính? + + + + Login Name + Tên đăng nhập + + + + If more than one person will use this computer, you can create multiple accounts after installation. + Tạo nhiều tài khoản sau khi cài đặt nếu có nhiều người dùng chung. + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + Chỉ cho phép các chữ cái viết thường, số, gạch dưới và gạch nối. + + + + root is not allowed as username. + + + + + What is the name of this computer? + Tên của máy tính này là? + + + + Computer Name + Tên máy tính + + + + This name will be used if you make the computer visible to others on a network. + Tên này sẽ hiển thị khi bạn kết nối vào một mạng. + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + Chọn mật khẩu để giữ máy tính an toàn. + + + + Password + Mật khẩu + + + + Repeat Password + Lặp lại mật khẩu + + + + 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. + 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. + + + + Validate passwords quality + Xác thực chất lượng mật khẩu + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + Khi tích chọn, bạn có thể chọn mật khẩu yếu. + + + + Log in automatically without asking for the password + Tự động đăng nhập không hỏi mật khẩu + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + Dùng lại mật khẩu người dùng như mật khẩu quản trị + + + + Use the same password for the administrator account. + Dùng cùng một mật khẩu cho tài khoản quản trị. + + + + Choose a root password to keep your account safe. + Chọn mật khẩu quản trị để giữ máy tính an toàn. + + + + Root Password + Mật khẩu quản trị + + + + Repeat Root Password + Lặp lại mật khẩu quản trị + + + + Enter the same password twice, so that it can be checked for typing errors. + Nhập lại mật khẩu hai lần để kiểm tra. + + + + welcomeq + + + <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> + <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> + + + + About + Giới thiệu + + + + Support + Hỗ trợ + + + + Known issues + Các vấn đề đã biết + + + + Release notes + Ghi chú phát hành + + + + Donate + Ủng hộ + + + diff --git a/lang/calamares_fr_CH.ts b/lang/calamares_zh.ts similarity index 72% rename from lang/calamares_fr_CH.ts rename to lang/calamares_zh.ts index b8122151d..ebac02047 100644 --- a/lang/calamares_fr_CH.ts +++ b/lang/calamares_zh.ts @@ -1,20 +1,28 @@ - + + + AutoMountManagementJob + + + Manage auto-mount settings + + + BootInfoWidget - + 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. - + 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. - + 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. @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 - + Boot Partition - + System Partition - + Do not install a boot loader - + %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form - + GlobalStorage - + JobQueue - + Modules - + Type: - - + + none - + Interface: - - Tools + + Crashes Calamares, so that Dr. Konqui can look at it. - + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + Reload Stylesheet - + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + Widget Tree - + Debug information @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up - + Install @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) - + Programmed job failure was explicitly requested. @@ -143,7 +171,7 @@ Calamares::JobThread - + Done @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. - + Run command '%1'. - + Running command %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. - + Bad working directory path - + Working directory %1 for python job %2 is not readable. - + Bad main script file - + Main script file %1 for python job %2 is not readable. - + Boost.Python error in job "%1". @@ -210,41 +238,44 @@ Calamares::QmlViewStep - + Loading ... - + QML Step <i>%1</i>. - + Loading failed. Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + - + Waiting for %n module(s). - - + (%n second(s)) - - + System-requirements checking is complete. @@ -252,244 +283,235 @@ Calamares::ViewManager - - &Back - - - - - &Next - - - - - &Cancel - - - - - Cancel setup without changing the system. - - - - - Cancel installation without changing the system. - - - - + Setup Failed - - Would you like to paste the install log to the web? + + Installation Failed - + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + Install Log Paste URL - + The upload was unsuccessful. No web-paste was done. - + + Install log posted to + +%1 + +Link copied to clipboard + + + + Calamares Initialization Failed - + %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. - + <br/>The following modules could not be loaded: - + + Continue with setup? + + + + Continue with installation? - + 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> - + + 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> + + + + &Set up now - + + &Install now + + + + + Go &back + + + + &Set up - + &Install - + Setup is complete. Close the setup program. - + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + Cancel setup? - + Cancel installation? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - - - - &Yes - - - - - - &No - - - - - &Close - - - - - Continue with setup? - - - - - 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> - - - - - &Install now - - - - - Go &back - - - - - &Done - - - - - The installation is complete. Close the installer. - - - - - Error - - - - - Installation Failed - - CalamaresPython::Helper - + Unknown exception type - + unparseable Python error - + unparseable Python traceback - + Unfetchable Python error. - - CalamaresUtils - - - Install log posted to: -%1 - - - CalamaresWindow - - &Back - - - - - &Next - - - - - &Cancel - - - - + %1 Setup Program - + %1 Installer + + + ChangeFilesystemLabelJob - - Show debug information + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. CheckerContainer - + Gathering system information... @@ -497,157 +519,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form - - After: - - - - - Boot loader location: - - - - + Select storage de&vice: - - - - + + + + Current: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. + + After: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + Reuse %1 as home partition for %2. - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. - + + Boot loader location: + + + + <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: - + 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. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - 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. - - - - - No Swap - - - - - Reuse Swap - - - - - Swap (no Hibernate) - - - - - Swap (with Hibernate) - - - - - Swap to file - - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + + 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. + + + + 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. - + 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. + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + ClearMountsJob - + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + Clear mounts for partitioning operations on %1 - + Clearing mounts for partitioning operations on %1. - + Cleared all mounts for %1 @@ -655,22 +717,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. - + Clearing all temporary mounts. - - Cannot get list of temporary mounts. - - - - + Cleared all temporary mounts. @@ -678,18 +735,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + The command needs to know the user's name, but no username is defined. @@ -697,100 +754,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - - - - - <h1>Welcome to %1 setup.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - - <h1>Welcome to the %1 installer.</h1> - - - - + Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. - + + Set timezone to %1/%2. + + + + The system language will be set to %1. - + The numbers and dates locale will be set to %1. - - Set timezone to %1/%2.<br/> - - - - + Network Installation. (Disabled: Incorrect configuration) - + Network Installation. (Disabled: Received invalid groups data) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) - + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + ContextualProcessJob - + Contextual Processes Job @@ -798,100 +990,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition - - MiB - - - - - Partition &Type: - - - - - &Primary - - - - - E&xtended - - - - - Fi&le System: - - - - - LVM LV name - - - - - Flags: - - - - - &Mount Point: - - - - + Si&ze: - + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + En&crypt - + Logical - + Primary - + GPT - + Mountpoint already in use. Please select another one. + + + Mountpoint must start with a <tt>/</tt>. + + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + Create new %2MiB partition on %4 (%3) with file system %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + + Creating new %1 partition on %2. - + The installer failed to create partition on disk '%1'. @@ -899,27 +1127,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table - + Creating a new partition table will delete all existing data on the disk. - + What kind of partition table do you want to create? - + Master Boot Record (MBR) - + GUID Partition Table (GPT) @@ -927,22 +1155,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Creating new %1 partition table on %2. - + The installer failed to create a partition table on %1. @@ -950,45 +1178,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 - + Create user <strong>%1</strong>. - - Creating user %1. + + Preserving home directory - - Sudoers dir is not writable. + + + Creating user %1 - - Cannot create sudoers file for writing. + + Configuring user %1 - - Cannot chmod sudoers file. - - - - - Cannot open groups file for reading. + + Setting file permissions CreateVolumeGroupDialog - + Create Volume Group @@ -996,22 +1220,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. - + Create new volume group named <strong>%1</strong>. - + Creating new volume group named %1. - + The installer failed to create a volume group named '%1'. @@ -1019,18 +1243,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. - + Deactivate volume group named <strong>%1</strong>. - + The installer failed to deactivate a volume group named %1. @@ -1038,22 +1262,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. - + Delete partition <strong>%1</strong>. - + Deleting partition %1. - + The installer failed to delete partition %1. @@ -1061,46 +1285,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - - - - + This device has a <strong>%1</strong> partition table. - + 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. - + 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. - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. - + <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. + + + 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. + + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) - + %1 - (%2) device[name] - (device-node[name]) @@ -1109,17 +1333,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted - + Failed to open %1 @@ -1127,7 +1351,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job @@ -1135,123 +1359,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition - - Content: + + Con&tent: - + &Keep - + Format - + Warning: Formatting the partition will erase all existing data. - + &Mount Point: - + Si&ze: - + MiB - + Fi&le System: - + Flags: - - Mountpoint already in use. Please select another one. + + Label for the filesystem + + + + + FS Label: EncryptWidget - + Form - + En&crypt system - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + Passphrase - + Confirm passphrase - + + Please enter the same passphrase in both boxes. + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + FillGlobalStorageJob - + Set partition information - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + Install %1 on <strong>new</strong> %2 system partition. - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + Install %2 on %3 system partition <strong>%1</strong>. - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - - - - + Install boot loader on <strong>%1</strong>. - + Setting up mount points. @@ -1259,93 +1527,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form - + &Restart now - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - + <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> - + <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. - + <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> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + FinishedQmlViewStep + + + Finish + + + FinishedViewStep - + Finish - - - Setup Complete - - - - - Installation Complete - - - - - The setup of %1 is complete. - - - - - The installation of %1 is complete. - - FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. - + Formatting partition %1 with file system %2. - + The installer failed to format partition %1 on disk '%2'. @@ -1353,72 +1609,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space - + There is not enough drive space. At least %1 GiB is required. - + has at least %1 GiB working memory - + The system does not have enough working memory. At least %1 GiB is required. - + is plugged in to a power source - + The system is not plugged in to a power source. - + is connected to the Internet - + The system is not connected to the Internet. - + is running the installer as an administrator (root) - + The setup program is not running with administrator rights. - + The installer is not running with administrator rights. - + has a screen large enough to show the whole installer - + The screen is too small to display the setup program. - + The screen is too small to display the installer. @@ -1426,7 +1682,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. @@ -1434,25 +1690,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier - + Could not create directories <code>%1</code>. - + Could not open file <code>%1</code>. - + Could not write to file <code>%1</code>. @@ -1460,7 +1716,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. @@ -1468,7 +1724,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. @@ -1476,17 +1732,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed - + Please install KDE Konsole and try again! - + Executing script: &nbsp;<code>%1</code> @@ -1494,28 +1750,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - - - - - Set keyboard layout to %1/%2. - - - KeyboardQmlViewStep - + Keyboard @@ -1523,7 +1766,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard @@ -1531,65 +1774,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting - + 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>. - + &Cancel - + &OK + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + LicensePage - + Form - + <h1>License Agreement</h1> - + I accept the terms and conditions above. - + Please review the End User License Agreements (EULAs). - + This setup procedure will install proprietary software that is subject to licensing terms. - + If you do not agree with the terms, the setup procedure cannot continue. - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. @@ -1597,7 +1863,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License @@ -1605,109 +1871,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 - + + Hide license text + + + + Show the license text - + Open license agreement in browser. - - - Hide license text - - LocalePage - - The system language will be set to %1. - - - - - The numbers and dates locale will be set to %1. - - - - + Region: - + Zone: - - + + &Change... - - - Set timezone to %1/%2.<br/> - - LocaleQmlViewStep - + Location + + LocaleTests + + + Quit + + + LocaleViewStep - + Location @@ -1715,35 +1974,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. - - + + No partitions are defined. - - - + + + Encrypted rootfs setup error - + Root partition %1 is LUKS but no passphrase has been set. - + Could not create LUKS key file for root partition %1. - + Could not configure LUKS key file on partition %1. @@ -1751,116 +2010,130 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. - + Configuration Error - + No root mount point is set for MachineId. + + Map + + + Timezone: %1 + + + + + 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. + + + NetInstallViewStep - - + Package selection - + Office software - + Office package - + Browser software - + Browser package - + Web browser - + Kernel - + Services - + Login - + Desktop - + Applications - + Communication - + Development - + Office - + Multimedia - + Internet - + Theming - + Gaming - + Utilities @@ -1868,7 +2141,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes @@ -1876,17 +2149,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> @@ -1894,260 +2167,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration - + Set the OEM Batch Identifier to <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + PWQ - + Password is too short - + Password is too long - + Password is too weak - + Memory allocation error when setting '%1' - + Memory allocation error - + The password is the same as the old one - + The password is a palindrome - + The password differs with case changes only - + The password is too similar to the old one - + The password contains the user name in some form - + The password contains words from the real name of the user in some form - + The password contains forbidden words in some form - - The password contains less than %1 digits - - - - + The password contains too few digits - - The password contains less than %1 uppercase letters - - - - + The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - + + + The password contains fewer than %n lowercase letters + + + - + The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - - - - + The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - - - - + The password is too short - - The password is just rotated old one - - - - - The password contains less than %1 character classes - - - - + The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - - - - + The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - - - - + The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - + + + The password contains fewer than %n digits + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + The password is shorter than %n characters + + + - + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + The password contains more than %n same characters consecutively + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + The password contains too long of a monotonic character sequence - + No password supplied - + Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 - + The password fails the dictionary check - + Unknown setting - %1 - + Unknown setting - + Bad integer value of setting - %1 - + Bad integer value - + Setting %1 is not of integer type - + Setting is not of integer type - + Setting %1 is not of string type - + Setting is not of string type - + Opening the configuration file failed - + The configuration file is malformed - + Fatal failure - + Unknown error - + Password is empty @@ -2155,40 +2476,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form - + Product Name - + TextLabel - + Long Product Description - + Package Selection - + Please pick a product from the list. The selected product will be installed. + + PackageChooserQmlViewStep + + + Packages + + + PackageChooserViewStep - + Packages @@ -2196,12 +2525,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name - + Description @@ -2209,17 +2538,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form - + Keyboard Model: - + Type here to test your keyboard @@ -2227,96 +2556,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form - + What is your name? - - What name do you want to use to log in? - - - - - Choose a password to keep your account safe. - - - - - - <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> - - - - - What is the name of this computer? - - - - + Your Full Name - + + What name do you want to use to log in? + + + + login - + + What is the name of this computer? + + + + <small>This name will be used if you make the computer visible to others on a network.</small> - + Computer Name - - + + Choose a password to keep your account safe. + + + + + + <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> + + + + + Password - - + + Repeat Password - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. - + Require strong passwords. - + Log in automatically without asking for the password. - + Use the same password for the administrator account. - + Choose a password for the administrator account. - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> @@ -2324,42 +2653,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root - + Home - + Boot - + EFI system - + Swap - + New partition for %1 - + New partition - + %1 %2 size[number] filesystem[name] @@ -2368,34 +2697,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space - - + + New partition - + Name - + File System - + + File System Label + + + + Mount Point - + Size @@ -2403,77 +2737,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form - + Storage de&vice: - + &Revert All Changes - + New Partition &Table - + Cre&ate - + &Edit - + &Delete - + New Volume Group - + Resize Volume Group - + Deactivate Volume Group - + Remove Volume Group - + I&nstall boot loader on: - + Are you sure you want to create a new partition table on %1? - + Can not create new partition - + 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. @@ -2481,117 +2815,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... - + Partitions - - Install %1 <strong>alongside</strong> another operating system. + + Unsafe partition actions are enabled. - - <strong>Erase</strong> disk and install %1. + + Partitioning is configured to <b>always</b> fail. - - <strong>Replace</strong> a partition with %1. + + No partitions will be changed. - - <strong>Manual</strong> partitioning. - - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - - - - - Disk <strong>%1</strong> (%2) - - - - + Current: - + After: - + No EFI system partition configured - - 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>esp</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. + + EFI system partition configured incorrectly - - EFI system partition flag not set + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. + + The filesystem must be mounted on <strong>%1</strong>. - + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + Option to use GPT on BIOS - - 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. + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted - + 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. - + has at least one disk device available. - + There are no partitions to install on. @@ -2599,13 +2923,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job - - + + Could not select KDE Plasma Look-and-Feel package @@ -2613,17 +2937,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form - + 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. - + 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. @@ -2631,7 +2955,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel @@ -2639,17 +2963,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... - + No files configured to save for later. - + Not all of the configured files could be preserved. @@ -2657,65 +2981,65 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. - + Output: - + External command crashed. - + Command <i>%1</i> crashed. - + External command failed to start. - + Command <i>%1</i> failed to start. - + Internal error when starting command. - + Bad parameters for process job call. - + External command failed to finish. - + Command <i>%1</i> failed to finish in %2 seconds. - + External command finished with errors. - + Command <i>%1</i> finished with exit code %2. @@ -2723,89 +3047,94 @@ Output: QObject - - Default Keyboard Model - - - - - - Default - - - - - unknown - - - - - extended - - - - - unformatted - - - - - swap - - - - - Unpartitioned space or unknown partition table - - - - - (no mount point) - - - - - Requirements checking for module <i>%1</i> is complete. - - - - + %1 (%2) - - No product + + unknown - - No description provided. + + extended - - - - + + unformatted + + + + + swap + + + + + + Default + + + + + + + File not found - + Path <pre>%1</pre> must be an absolute path. - + + Directory not found + + + + + Could not create new random file <pre>%1</pre>. + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + RemoveUserJob - + Remove live user from target system @@ -2813,18 +3142,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. - + Remove Volume Group named <strong>%1</strong>. - + The installer failed to remove a volume group named '%1'. @@ -2832,143 +3161,158 @@ Output: ReplaceWidget - + Form - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - + The selected item does not appear to be a valid partition. - + %1 cannot be installed on empty space. Please select an existing partition. - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. - + %1 cannot be installed on this partition. - + Data partition (%1) - + Unknown system partition (%1) - + %1 system partition (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. - + <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. - - - + + + <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. - + The EFI system partition at %1 will be used for starting %2. - + EFI system partition: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + ResizeFSJob - + Resize Filesystem Job - + Invalid configuration - + The file-system resize job has an invalid configuration and will not run. - + KPMCore not Available - + Calamares cannot start KPMCore for the file-system resize job. - - - - - + + + + + Resize Failed - + The filesystem %1 could not be found in this system, and cannot be resized. - + The device %1 could not be found in this system, and cannot be resized. - - + + The filesystem %1 cannot be resized. - - + + The device %1 cannot be resized. - + The filesystem %1 must be resized, but cannot. - + The device %1 must be resized, but cannot @@ -2976,22 +3320,22 @@ Output: ResizePartitionJob - + Resize partition %1. - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. - + Resizing %2MiB partition %1 to %3MiB. - + The installer failed to resize partition %1 on disk '%2'. @@ -2999,7 +3343,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group @@ -3007,18 +3351,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + The installer failed to resize a volume group named '%1'. @@ -3026,53 +3370,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: - + System requirements - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - - - - - This program will ask you some questions and set up %2 on your computer. - - - ScanningDialog - + Scanning storage devices... - + Partitioning @@ -3080,29 +3396,29 @@ Output: SetHostNameJob - + Set hostname %1 - + Set hostname <strong>%1</strong>. - + Setting hostname %1. + - Internal Error - - + + Cannot write hostname to target system @@ -3110,29 +3426,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 - + Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. @@ -3140,82 +3456,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. - + Set flags on %1MiB %2 partition. - + Set flags on new partition. - + Clear flags on partition <strong>%1</strong>. - + Clear flags on %1MiB <strong>%2</strong> partition. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - - - - + Clear flags on new partition. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + Flag new partition as <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. - + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + Clearing flags on new partition. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + Setting flags <strong>%1</strong> on new partition. - + The installer failed to set flags on partition %1. @@ -3223,42 +3539,42 @@ Output: SetPasswordJob - + Set password for user %1 - + Setting password for user %1. - + Bad destination system path. - + rootMountPoint is %1 - + Cannot disable root account. - + passwd terminated with error code %1. - + Cannot set password for user %1. - + usermod terminated with error code %1. @@ -3266,45 +3582,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 - + Cannot access selected timezone path. - + Bad path: %1 - + Cannot set timezone. - + Link creation failed, target: %1; link name: %2 - + Cannot set timezone, - + Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + ShellProcessJob - + Shell Processes Job @@ -3312,81 +3665,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. + + &OK - - This is an overview of what will happen once you start the install procedure. + + &Yes - - - SummaryViewStep - - Summary + + &No + + + + + &Cancel + + + + + &Close TrackingInstallJob - + Installation feedback - + Sending installation feedback. - + Internal error in install-tracking. - + HTTP request timed out. - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + Machine feedback - + Configuring machine feedback. - - + + Error in machine feedback configuration. - + Could not configure machine feedback correctly, script error %1. - + Could not configure machine feedback correctly, Calamares error %1. @@ -3394,106 +3783,97 @@ Output: TrackingPage - + Form - + Placeholder - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - + <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> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + 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. - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + 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. - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. TrackingViewStep - + Feedback + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + UsersQmlViewStep - - Your username is too long. - - - - - Your username must start with a lowercase letter or underscore. - - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - - - - - Only letters, numbers, underscore and hyphen are allowed. - - - - - Your hostname is too short. - - - - - Your hostname is too long. - - - - - Your passwords do not match! + + Users UsersViewStep - + Users @@ -3501,65 +3881,67 @@ Output: VariantModel - + Key + Column header for key/value - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group - + List of Physical Volumes - + Volume Group Name: - + Volume Group Type: - + Physical Extent Size: - + MiB - + Total Size: - + Used Size: - + Total Sectors: - + Quantity of LVs: @@ -3567,106 +3949,106 @@ Output: WelcomePage - + Form - - + + Select application and system language + &About + + + + Open donations website - + &Donate - + Open help and support website + &Support + + + + Open issues and bug-tracking website - Open release notes website - - - - - &Release notes - - - - &Known issues - - &Support + + Open release notes website - - &About + + &Release notes - - <h1>Welcome to the %1 installer.</h1> - - - - - <h1>Welcome to the Calamares installer for %1.</h1> - - - - + <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>Welcome to %1 setup.</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + About %1 setup - + About %1 installer - + <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. - - - %1 support - - WelcomeQmlViewStep - + Welcome @@ -3674,31 +4056,157 @@ Output: WelcomeViewStep - + Welcome + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + Back @@ -3706,86 +4214,283 @@ Output: keyboardq - - Keyboard Model + + To activate keyboard preview, select a layout. - - Pick your preferred keyboard model or use the default one based on the detected hardware + + Keyboard Model: - - Refresh - - - - - + Layouts - - - Keyboard Layout + + Type here to test your keyboard - - Models - - - - + Variants + + + localeq - - Test your keyboard + + Change notesqml - + <h3>%1</h3> <p>These are example release notes.</p> - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. - + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + About - + Support - + Known issues - + Release notes - + Donate diff --git a/lang/calamares_zh_CN.ts b/lang/calamares_zh_CN.ts index 0d515a0d6..b5b1e0ebb 100644 --- a/lang/calamares_zh_CN.ts +++ b/lang/calamares_zh_CN.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + 管理自动挂载设置 + + BootInfoWidget - + 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. 这个系统的<strong>引导环境</strong>。<br><br>较旧的 x86 系统只支持 <strong>BIOS</strong>。<br>现代的系统则通常使用 <strong>EFI</strong>,但若引导时使用了兼容模式,也可以变为 BIOS。 - + 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. 此系统从 <strong>EFI</strong> 引导环境启动。<br><br>若要配置EFI环境的启动项,本安装器必须在<strong>EFI系统分区</strong>中安装一个引导程序, 例如 <strong>GRUB</strong>或 <strong>systemd-boot</strong> 。这个过程是自动的,但若你选择手动分区,那你将必须手动选择或者创建。 - + 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. 这个系统从 <strong>BIOS</strong> 引导环境启动。<br><br> 要从 BIOS 环境引导,本安装程序必须安装引导器(如 <strong>GRUB</strong>),一般而言要么安装在分区的开头,要么就是在靠进分区表开头的 <strong>主引导记录</strong>(推荐)中。这个步骤是自动的,除非您选择手动分区——此时您必须自行配置。 @@ -23,27 +31,27 @@ BootLoaderModel - + Master Boot Record of %1 主引导记录 %1 - + Boot Partition 引导分区 - + System Partition 系统分区 - + Do not install a boot loader 不要安装引导程序 - + %1 (%2) %1 (%2) @@ -51,7 +59,7 @@ Calamares::BlankViewStep - + Blank Page 空白页 @@ -59,58 +67,78 @@ Calamares::DebugWindow - + Form 表单 - + GlobalStorage 全局存储 - + JobQueue 任务队列 - + Modules 模块 - + Type: 类型: - - + + none - + Interface: 接口: - - Tools - 工具 + + Crashes Calamares, so that Dr. Konqui can look at it. + 使 Calamares 崩溃,以便 Konqui 医生可以查看它。 - + + Reloads the stylesheet from the branding directory. + 从Branding目录重新载入样式表 + + + + Uploads the session log to the configured pastebin. + 将会话日志上传至预设的pastebin网站 + + + + Send Session Log + 发送会话日志 + + + Reload Stylesheet 重载样式表 - + + Displays the tree of widget names in the log (for stylesheet debugging). + 在日志中显示小部件名称树(用于样式表调试)。 + + + Widget Tree 树形控件 - + Debug information 调试信息 @@ -118,12 +146,12 @@ Calamares::ExecutionViewStep - + Set up 建立 - + Install 安装 @@ -131,12 +159,12 @@ Calamares::FailJob - + Job failed (%1) 任务失败(%1) - + Programmed job failure was explicitly requested. 出现明确抛出的任务执行失败。 @@ -144,7 +172,7 @@ Calamares::JobThread - + Done 完成 @@ -152,7 +180,7 @@ Calamares::NamedJob - + Example job (%1) 示例任务 (%1) @@ -160,17 +188,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. 在目标系统上执行 '%1'。 - + Run command '%1'. 运行命令 '%1'. - + Running command %1 %2 正在运行命令 %1 %2 @@ -178,32 +206,32 @@ Calamares::PythonJob - + Running %1 operation. 正在运行 %1 个操作。 - + Bad working directory path 错误的工作目录路径 - + Working directory %1 for python job %2 is not readable. 用于 python 任务 %2 的工作目录 %1 不可读。 - + Bad main script file 错误的主脚本文件 - + Main script file %1 for python job %2 is not readable. 用于 python 任务 %2 的主脚本文件 %1 不可读。 - + Boost.Python error in job "%1". 任务“%1”出现 Boost.Python 错误。 @@ -211,39 +239,44 @@ Calamares::QmlViewStep - + Loading ... 正在加载... - + QML Step <i>%1</i>. QML 步骤 <i>%1</i>. - + Loading failed. 加载失败。 Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + 模块<i>%1</i>的需求检查已完成。 + - + Waiting for %n module(s). 等待 %n 模块。 - + (%n second(s)) (%n 秒) - + System-requirements checking is complete. 已经完成系统需求检查。 @@ -251,247 +284,241 @@ Calamares::ViewManager - - &Back - 后退(&B) - - - - &Next - 下一步(&N) - - - - &Cancel - 取消(&C) - - - - Cancel setup without changing the system. - 取消安装,保持系统不变。 - - - - Cancel installation without changing the system. - 取消安装,并不做任何更改。 - - - + Setup Failed 安装失败 - - Would you like to paste the install log to the web? - 需要将安装日志粘贴到网页吗? + + Installation Failed + 安装失败 - + + Error + 错误 + + + + &Yes + &是 + + + + &No + &否 + + + + &Close + &关闭 + + + Install Log Paste URL 安装日志粘贴 URL - + The upload was unsuccessful. No web-paste was done. 上传失败,未完成网页粘贴。 - + + Install log posted to + +%1 + +Link copied to clipboard + 发送至 + +%1 + +的链接已保存至剪贴板 + + + Calamares Initialization Failed Calamares初始化失败 - + %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. %1无法安装。 Calamares无法加载所有已配置的模块。这个问题是发行版配置Calamares不当导致的。 - + <br/>The following modules could not be loaded: <br/>无法加载以下模块: - + + Continue with setup? + 要继续安装吗? + + + Continue with installation? 继续安装? - + 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> 为了安装%2, %1 安装程序即将对磁盘进行更改。<br/><strong>这些更改无法撤销。</strong> - + + 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> + %1 安装程序将在您的磁盘上做出变更以安装 %2。<br/><strong>您将无法复原这些变更。</strong> + + + &Set up now 现在安装(&S) - + + &Install now + 现在安装 (&I) + + + + Go &back + 返回 (&B) + + + &Set up 安装(&S) - + &Install 安装(&I) - + Setup is complete. Close the setup program. 安装完成。关闭安装程序。 - + + The installation is complete. Close the installer. + 安装已完成。请关闭安装程序。 + + + + Cancel setup without changing the system. + 取消安装,保持系统不变。 + + + + Cancel installation without changing the system. + 取消安装,并不做任何更改。 + + + + &Next + 下一步(&N) + + + + &Back + 后退(&B) + + + + &Done + &完成 + + + + &Cancel + 取消(&C) + + + Cancel setup? 取消安装? - + Cancel installation? 取消安装? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 确定要取消当前安装吗? 安装程序将会退出,所有修改都会丢失。 - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 确定要取消当前的安装吗? 安装程序将退出,所有修改都会丢失。 - - - - &Yes - &是 - - - - - &No - &否 - - - - &Close - &关闭 - - - - Continue with setup? - 要继续安装吗? - - - - 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> - %1 安装程序将在您的磁盘上做出变更以安装 %2。<br/><strong>您将无法复原这些变更。</strong> - - - - &Install now - 现在安装 (&I) - - - - Go &back - 返回 (&B) - - - - &Done - &完成 - - - - The installation is complete. Close the installer. - 安装已完成。请关闭安装程序。 - - - - Error - 错误 - - - - Installation Failed - 安装失败 - CalamaresPython::Helper - + Unknown exception type 未知异常类型 - + unparseable Python error 无法解析的 Python 错误 - + unparseable Python traceback 无法解析的 Python 回溯 - + Unfetchable Python error. 无法获取的 Python 错误。 - - CalamaresUtils - - - Install log posted to: -%1 - 安装日志发布到: -%1 - - CalamaresWindow - - &Back - 后退(&B) - - - - &Next - 下一步(&N) - - - - &Cancel - 取消(&C) - - - + %1 Setup Program %1 安装程序 - + %1 Installer %1 安装程序 + + + ChangeFilesystemLabelJob - - Show debug information - 显示调试信息 + + Set filesystem label on %1. + 在%1设置文件系统卷标 + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + 设置文件系统标签 <strong>%1</strong> 至分区 <strong>%2</strong>。 + + + + The installer failed to update partition table on disk '%1'. + 安装程序更新磁盘“%1”分区表失败。 CheckerContainer - + Gathering system information... 正在收集系统信息 ... @@ -499,157 +526,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form 表单 - - After: - 之后: - - - - Boot loader location: - 引导程序位置: - - - + Select storage de&vice: 选择存储器(&V): - - - - + + + + Current: 当前: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>手动分区</strong><br/>分区你可以自行创建或调整分区。一个 GPT 分区表和<strong>一个 512MB 的 fat32 /boot 分区对于 UEFI 模式下的安装来说是必须的</strong>,你可以使用原有的 /boot 分区,无需格式化,也可以创建一个新的。 + + After: + 之后: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>手动分区</strong><br/>您可以自行创建或重新调整分区大小。 + + + Reuse %1 as home partition for %2. 重复使用 %1 作为 %2 的 home 分区。 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>选择要缩小的分区,然后拖动底栏改变大小</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 将会缩减未 %2MiB,然后为 %4 创建一个 %3MiB 分区。 - + + Boot loader location: + 引导程序位置: + + + <strong>Select a partition to install on</strong> <strong>选择要安装到的分区</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 在此系统上找不到任何 EFI 系统分区。请后退到上一步并使用手动分区配置 %1。 - + The EFI system partition at %1 will be used for starting %2. %1 处的 EFI 系统分区将被用来启动 %2。 - + EFI system partition: EFI 系统分区: - + 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. 这个存储器上似乎还没有操作系统。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>抹除磁盘</strong><br/>这将会<font color="red">删除</font>目前选定的存储器上所有的数据。 - - 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. - 这个存储器上已经有 %1 了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - - - - No Swap - 无交换分区 - - - - Reuse Swap - 重用交换分区 - - - - Swap (no Hibernate) - 交换分区(无休眠) - - - - Swap (with Hibernate) - 交换分区(带休眠) - - - - Swap to file - 交换到文件 - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>并存安装</strong><br/>安装程序将会缩小一个分区,为 %1 腾出空间。 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>取代一个分区</strong><br/>以 %1 <strong>替代</strong>一个分区。 - + + 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. + 这个存储器上已经有 %1 了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 + + + 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. 这个存储器上已经有一个操作系统了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 - + 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. 这个存储器上已经有多个操作系统了。您想要怎么做?<br/>在任何变更应用到存储器上前,您都可以重新查看并确认您的选择。 + + + 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/> + 此存储设备已经有操作系统,但是分区表 <strong>%1</strong> 与所需的 <strong>%2</strong>.<br/>不同。 + + + + This storage device has one of its partitions <strong>mounted</strong>. + 此存储设备 <strong>已挂载</strong>其中一个分区。 + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + 该存储设备是 <strong>非活动RAID</strong> 设备的一部分。 + + + + No Swap + 无交换分区 + + + + Reuse Swap + 重用交换分区 + + + + Swap (no Hibernate) + 交换分区(无休眠) + + + + Swap (with Hibernate) + 交换分区(带休眠) + + + + Swap to file + 交换到文件 + ClearMountsJob - + + Successfully unmounted %1. + 成功卸载了 %1。 + + + + Successfully disabled swap %1. + 成功禁用了交换空间 %1。 + + + + Successfully cleared swap %1. + 成功清理了交换空间 %1。 + + + + Successfully closed mapper device %1. + 成功关闭了映射设备 %1。 + + + + Successfully disabled volume group %1. + 成功禁用了卷组 %1。 + + + Clear mounts for partitioning operations on %1 清理挂载了的分区以在 %1 进行分区操作 - + Clearing mounts for partitioning operations on %1. 正在清理挂载了的分区以在 %1 进行分区操作。 - + Cleared all mounts for %1 已清除 %1 的所有挂载点 @@ -657,22 +724,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. 清除所有临时挂载点。 - + Clearing all temporary mounts. 正在清除所有临时挂载点。 - - Cannot get list of temporary mounts. - 无法获取临时挂载点列表。 - - - + Cleared all temporary mounts. 所有临时挂载点都已经清除。 @@ -680,18 +742,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. 无法运行命令 - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. 该命令在主机环境中运行,且需要知道根路径,但没有定义root挂载点。 - + The command needs to know the user's name, but no username is defined. 命令行需要知道用户的名字,但用户名没有被设置 @@ -699,102 +761,237 @@ The installer will quit and all changes will be lost. Config - + + Set keyboard model to %1.<br/> + 设置键盘型号为 %1。<br/> + + + + Set keyboard layout to %1/%2. + 设置键盘布局为 %1/%2。 + + + + Set timezone to %1/%2. + 将时区设置为 %1/%2 。 + + + + The system language will be set to %1. + 系统语言将设置为 %1。 + + + + The numbers and dates locale will be set to %1. + 数字和日期地域将设置为 %1。 + + + + Network Installation. (Disabled: Incorrect configuration) + 网络安装。(禁用:错误的设置) + + + + Network Installation. (Disabled: Received invalid groups data) + 联网安装。(已禁用:收到无效组数据) + + + + Network Installation. (Disabled: Internal error) + 网络安装(因内部错误而被禁用) + + + + Network Installation. (Disabled: No package list) + 网络安装(因无软件包列表而被禁用) + + + + Package selection + 软件包选择 + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + 网络安装。(已禁用:无法获取软件包列表,请检查网络连接) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> 此计算机不满足安装 %1 的某些推荐配置。 安装可以继续,但是一些特性可能被禁用。 - + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> 此电脑未满足安装 %1 的最低需求。<br/>安装无法继续。<a href="#details">详细信息...</a> - + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. 此计算机不满足安装 %1 的某些推荐配置。 安装可以继续,但是一些特性可能被禁用。 - + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. 此电脑未满足一些安装 %1 的推荐需求。<br/>可以继续安装,但一些功能可能会被停用。 - + This program will ask you some questions and set up %2 on your computer. 本程序将会问您一些问题并在您的电脑上安装及设置 %2 。 - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>欢迎使用 %1 的 Calamares 安装程序。</h1> + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>欢迎使用 %1 的 Calamares 安装程序</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>欢迎使用 %1 设置</h1> - <h1>Welcome to %1 setup.</h1> - <h1>欢迎使用 %1 安装程序。</h1> + <h1>Welcome to the Calamares installer for %1</h1> + <h1>欢迎使用 %1 的 Calamares 安装程序</h1> - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>欢迎使用 Calamares 安装程序 - %1。</h1> + + <h1>Welcome to the %1 installer</h1> + <h1>欢迎使用 %1 安装程序</h1> - - <h1>Welcome to the %1 installer.</h1> - <h1>欢迎使用 %1 安装程序。</h1> + + Your username is too long. + 用户名太长。 - - Set keyboard model to %1.<br/> - 设置键盘型号为 %1。<br/> + + '%1' is not allowed as username. + '%1' 不允许作为用户名。 - - Set keyboard layout to %1/%2. - 设置键盘布局为 %1/%2。 + + Your username must start with a lowercase letter or underscore. + 用户名必须以小写字母或下划线"_"开头 - - The system language will be set to %1. - 系统语言将设置为 %1。 + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 只允许小写字母、数组、下划线"_" 和 连字符"-" - - The numbers and dates locale will be set to %1. - 数字和日期地域将设置为 %1。 + + Your hostname is too short. + 主机名太短。 - - Set timezone to %1/%2.<br/> - 设置时区为 %1/%2。<br/> + + Your hostname is too long. + 主机名太长。 - - Network Installation. (Disabled: Incorrect configuration) - 网络安装。(禁用:错误的设置) + + '%1' is not allowed as hostname. + '%1' 不允许作为主机名。 - - Network Installation. (Disabled: Received invalid groups data) - 联网安装。(已禁用:收到无效组数据) + + Only letters, numbers, underscore and hyphen are allowed. + 只允许字母、数组、下划线"_" 和 连字符"-" - - Network Installation. (Disabled: internal error) - 网络安装。(已禁用:内部错误) + + Your passwords do not match! + 密码不匹配! - - Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - 网络安装。(已禁用:无法获取软件包列表,请检查网络连接) + + OK! + 确定 + + + + Setup Failed + 安装失败 + + + + Installation Failed + 安装失败 + + + + The setup of %1 did not complete successfully. + %1的设置未成功完成 + + + + The installation of %1 did not complete successfully. + %1的安装未成功完成 + + + + Setup Complete + 安装完成 + + + + Installation Complete + 安装完成 + + + + The setup of %1 is complete. + %1 安装完成。 + + + + The installation of %1 is complete. + %1 的安装操作已完成。 + + + + Package Selection + 软件包选择 + + + + Please pick a product from the list. The selected product will be installed. + 请在列表中选一个产品。被选中的产品将会被安装。 + + + + Install option: <strong>%1</strong> + 安装选项:<strong>%1</strong> + + + + None + + + + + Summary + 摘要 + + + + This is an overview of what will happen once you start the setup procedure. + 预览——当你启动安装过程,以下行为将被执行 + + + + This is an overview of what will happen once you start the install procedure. + 这是您开始安装后所会发生的事情的概览。 ContextualProcessJob - + Contextual Processes Job 后台任务 @@ -802,100 +999,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition 创建分区 - - MiB - MiB - - - - Partition &Type: - 分区类型(&T): - - - - &Primary - 主分区(&P) - - - - E&xtended - 扩展分区(&E) - - - - Fi&le System: - 文件系统 (&L): - - - - LVM LV name - LVM 逻辑卷名称 - - - - Flags: - 标记: - - - - &Mount Point: - 挂载点(&M): - - - + Si&ze: 大小(&Z): - + + MiB + MiB + + + + Partition &Type: + 分区类型(&T): + + + + Primar&y + 主分区(&Y) + + + + E&xtended + 扩展分区(&E) + + + + Fi&le System: + 文件系统 (&L): + + + + LVM LV name + LVM 逻辑卷名称 + + + + &Mount Point: + 挂载点(&M): + + + + Flags: + 标记: + + + + Label for the filesystem + 此文件系统的卷标名 + + + + FS Label: + 文件系统卷标 + + + En&crypt 加密(&C) - + Logical 逻辑分区 - + Primary 主分区 - + GPT GPT - + Mountpoint already in use. Please select another one. 挂载点已被占用。请选择另一个。 + + + Mountpoint must start with a <tt>/</tt>. + 挂载点必须以<tt>/</tt>开头。 + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + 在 %3 (%2) 上使用 %4 建立新的 %1MiB 分区。 + + + + Create new %1MiB partition on %3 (%2). + 在 %3 (%2) 上建立新的 %1MiB 分区。 + + + Create new %2MiB partition on %4 (%3) with file system %1. 在 %4 (%3) 上创建新的 %2MiB 分区,文件系统为 %1. - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + 在 <strong>%3</strong> (%2) 上使用 <em>%4</em> 建立新的 <strong>%1MiB</strong> 分区。 + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + 在<strong>%3</strong>(%2)上创建新的<strong>%1MiB</strong>分区 + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. 在<strong>%4</strong>(%3)上创建一个<strong>%2MiB</strong>的%1分区。 - + + Creating new %1 partition on %2. 正在 %2 上创建新的 %1 分区。 - + The installer failed to create partition on disk '%1'. 安装程序在磁盘“%1”创建分区失败。 @@ -903,27 +1136,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table 创建分区表 - + Creating a new partition table will delete all existing data on the disk. 创建新分区表将删除磁盘上所有已有数据。 - + What kind of partition table do you want to create? 您想要创建哪种分区表? - + Master Boot Record (MBR) 主引导记录 (MBR) - + GUID Partition Table (GPT) GUID 分区表 (GPT) @@ -931,22 +1164,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. 在 %2 上创建新的 %1 分区表。 - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). 在 <strong>%2</strong> (%3) 上创建新的 <strong>%1</strong> 分区表。 - + Creating new %1 partition table on %2. 正在 %2 上创建新的 %1 分区表。 - + The installer failed to create a partition table on %1. 安装程序于 %1 创建分区表失败。 @@ -954,45 +1187,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 创建用户 %1 - + Create user <strong>%1</strong>. 创建用户 <strong>%1</strong>。 - - Creating user %1. - 正在创建用户 %1。 + + Preserving home directory + 保留家目录 - - Sudoers dir is not writable. - Sudoers 目录不可写。 + + + Creating user %1 + 创建用户 %1 - - Cannot create sudoers file for writing. - 无法创建要写入的 sudoers 文件。 + + Configuring user %1 + 配置用户 %1 - - Cannot chmod sudoers file. - 无法修改 sudoers 文件权限。 - - - - Cannot open groups file for reading. - 无法打开要读取的 groups 文件。 + + Setting file permissions + 设置文件权限 CreateVolumeGroupDialog - + Create Volume Group 创建存储组 @@ -1000,22 +1229,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. 新建分卷组 %1. - + Create new volume group named <strong>%1</strong>. 新建名为 <strong>%1</strong>的分卷组。 - + Creating new volume group named %1. 新建名为 %1的分卷组。 - + The installer failed to create a volume group named '%1'. 安装器未能创建名为'%1'的分卷组 @@ -1023,18 +1252,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. 停用分卷组 %1。 - + Deactivate volume group named <strong>%1</strong>. 停用分卷组<strong>%1</strong>。 - + The installer failed to deactivate a volume group named %1. 安装器未能创建名为'%1'的分卷组 @@ -1042,22 +1271,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. 删除分区 %1。 - + Delete partition <strong>%1</strong>. 删除分区 <strong>%1</strong>。 - + Deleting partition %1. 正在删除分区 %1。 - + The installer failed to delete partition %1. 安装程序删除分区 %1 失败。 @@ -1065,47 +1294,47 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - 目前选定存储器的<strong>分区表</strong>类型。<br><br>变更分区表类型的唯一方法就是抹除再重新从头建立分区表,这会破坏在该存储器上所有的数据。<br>除非您特别选择,否则本安装程序将会保留目前的分区表。<br>若不确定,在现代的系统上,建议使用 GPT。 - - - + This device has a <strong>%1</strong> partition table. 此设备上有一个 <strong>%1</strong> 分区表。 - + 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. 选定的存储器是一个 <strong>回环</strong> 设备。<br><br>此伪设备不含一个真正的分区表,它只是能让一个文件可如块设备那样访问。这种配置一般只包含一个单独的文件系统。 - + 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. 本安装程序在选定的存储器上<strong>探测不到分区表</strong>。<br><br>此设备要不是没有分区表,就是其分区表已毁损又或者是一个未知类型的分区表。<br>本安装程序将会为您建立一个新的分区表,可以自动或通过手动分割页面完成。 - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>此分区表类型推荐用于使用 <strong>EFI</strong> 引导环境的系统。 - + <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. <br><br>此分区表类型只建议用于使用 <strong>BIOS</strong> 引导环境的较旧系统,否则一般建议使用 GPT。<br> <strong>警告:</strong>MSDOS 分区表是一个有着重大缺点、已被弃用的标准。<br>MSDOS 分区表上只能创建 4 个<u>主要</u>分区,其中一个可以是<u>拓展</u>分区,此分区可以再分为许多<u>逻辑</u>分区。 + + + 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. + 目前选定存储器的<strong>分区表</strong>类型。<br><br>变更分区表类型的唯一方法就是抹除再重新从头建立分区表,这会破坏在该存储器上所有的数据。<br>除非您特别选择,否则本安装程序将会保留目前的分区表。<br>若不确定,在现代的系统上,建议使用 GPT。 + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1114,17 +1343,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 将 Dracut 的 LUKS 配置写入到 %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut 的“/”分区未加密,因而跳过写入 LUKS 配置 - + Failed to open %1 无法打开 %1 @@ -1132,7 +1361,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job 虚设 C++ 任务 @@ -1140,123 +1369,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition 编辑已有分区 - - Content: - 内容: + + Con&tent: + 内容:(&T) - + &Keep 保留 (&K) - + Format 格式化 - + Warning: Formatting the partition will erase all existing data. 警告:格式化分区将删除所有已有数据。 - + &Mount Point: 挂载点(&M): - + Si&ze: 尺寸 (&Z): - + MiB MiB - + Fi&le System: 文件系统 (&L): - + Flags: 标记: - - Mountpoint already in use. Please select another one. - 挂载点已被占用。请选择另一个。 + + Label for the filesystem + 此文件系统的卷标名 + + + + FS Label: + 文件系统卷标 EncryptWidget - + Form 表单 - + En&crypt system 加密系统 - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + 您的系统似乎不太支持加密,无法对整个系统进行加密。您可以启用加密,但性能可能会受到影响。 + + + Passphrase 密码 - + Confirm passphrase 确认密码 - + + Please enter the same passphrase in both boxes. 请在两个输入框中输入同样的密码。 + + ErrorDialog + + + Details: + 详情: + + + + Would you like to paste the install log to the web? + 需要将安装日志粘贴到网页吗? + + FillGlobalStorageJob - + Set partition information 设置分区信息 - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + 在有 <em>%3</em> 特性的<strong>新</strong> %2 系統分区上安裝 %1 + + + Install %1 on <strong>new</strong> %2 system partition. 在 <strong>新的</strong>系统分区 %2 上安装 %1。 - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - 设置 <strong>新的</strong> 含挂载点 <strong>%1</strong> 的 %2 分区。 + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + 设置 <strong>新的</strong> 含挂载点 <strong>%1</strong>%3 的 %2 分区。 - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + 设置 <strong>新的</strong> 含挂载点 <strong>%1</strong>%3 的 %2 分区。 + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + 在具有功能<em>%4</em>的 %3 系统分区<strong>%1</strong>上安装 %2。 + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + 为分区 %3 <strong>%1</strong> 设定挂载点 <strong>%2</strong> 与特性 <em>%4</em>。 + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + 设置%3 分区的挂载点 + + + Install %2 on %3 system partition <strong>%1</strong>. 在 %3 系统割区 <strong>%1</strong> 上安装 %2。 - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - 为分区 %3 <strong>%1</strong> 设置挂载点 <strong>%2</strong>。 - - - + Install boot loader on <strong>%1</strong>. 在 <strong>%1</strong>上安装引导程序。 - + Setting up mount points. 正在设置挂载点。 @@ -1264,93 +1537,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form 表单 - + &Restart now 现在重启(&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>安装成功!</h1><br/>%1 已安装在您的电脑上了。<br/>您现在可以重新启动到新系统。 - + <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> <html><head/><body><p>当选中此项时,系统会在您关闭安装器或点击 <span style=" font-style:italic;">完成</span> 按钮时立即重启</p></body></html> - + <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. <h1>安装成功!</h1><br/>%1 已安装在您的电脑上了。<br/>您现在可以重新启动到新系统,或是继续使用 %2 Live 环境。 - + <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> <html><head/><body><p>当选中此项时,系统会在您关闭安装器或点击 <span style=" font-style:italic;">完成</span> 按钮时立即重启</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>安装失败</h1><br/>%1 未在你的电脑上安装。<br/>错误信息:%2。 - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>安装失败</h1><br/>%1 未在你的电脑上安装。<br/>错误信息:%2。 - FinishedViewStep + FinishedQmlViewStep - + Finish 结束 + + + FinishedViewStep - - Setup Complete - 安装完成 - - - - Installation Complete - 安装完成 - - - - The setup of %1 is complete. - %1 安装完成。 - - - - The installation of %1 is complete. - %1 的安装操作已完成。 + + Finish + 结束 FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. 格式化在 %4 的分区 %1 (文件系统:%2,大小:%3 MB)。 - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. 以文件系统 <strong>%2</strong> 格式化 <strong>%3MB</strong> 的分区 <strong>%1</strong>。 - + Formatting partition %1 with file system %2. 正在使用 %2 文件系统格式化分区 %1。 - + The installer failed to format partition %1 on disk '%2'. 安装程序格式化磁盘“%2”上的分区 %1 失败。 @@ -1358,72 +1619,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space 有至少 %1 GB 可用磁盘空间 - + There is not enough drive space. At least %1 GiB is required. 没有足够的磁盘空间。至少需要 %1 GB。 - + has at least %1 GiB working memory 至少 %1 GB 可用内存 - + The system does not have enough working memory. At least %1 GiB is required. 系统没有足够的内存。至少需要 %1 GB。 - + is plugged in to a power source 已连接到电源 - + The system is not plugged in to a power source. 系统未连接到电源。 - + is connected to the Internet 已连接到互联网 - + The system is not connected to the Internet. 系统未连接到互联网。 - + is running the installer as an administrator (root) 正以管理员(root)权限运行安装器 - + The setup program is not running with administrator rights. 安装器未以管理员权限运行 - + The installer is not running with administrator rights. 安装器未以管理员权限运行 - + has a screen large enough to show the whole installer 有一个足够大的屏幕来显示整个安装器 - + The screen is too small to display the setup program. 屏幕太小无法显示安装程序。 - + The screen is too small to display the installer. 屏幕不能完整显示安装器。 @@ -1431,7 +1692,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. 正在收集此计算机的信息。 @@ -1439,25 +1700,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier OEM批量标识 - + Could not create directories <code>%1</code>. 无法创建目录<code>%1</code>。 - + Could not open file <code>%1</code>. 无法打开文件<code>%1</code>。 - + Could not write to file <code>%1</code>. 无法写入文件<code>%1</code>。 @@ -1465,7 +1726,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. 正在用mkinitcpio创建initramfs。 @@ -1473,7 +1734,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. 正在创建initramfs。 @@ -1481,17 +1742,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed 未安装 Konsole - + Please install KDE Konsole and try again! 请安装 KDE Konsole 后重试! - + Executing script: &nbsp;<code>%1</code> 正在运行脚本:&nbsp;<code>%1</code> @@ -1499,28 +1760,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script 脚本 - - KeyboardPage - - - Set keyboard model to %1.<br/> - 设置键盘型号为 %1。<br/> - - - - Set keyboard layout to %1/%2. - 设置键盘布局为 %1/%2。 - - KeyboardQmlViewStep - + Keyboard 键盘 @@ -1528,7 +1776,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard 键盘 @@ -1536,65 +1784,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting 系统语区设置 - + 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>. 系统语言区域设置会影响部份命令行用户界面的语言及字符集。<br/>目前的设置为 <strong>%1</strong>。 - + &Cancel 取消(&C) - + &OK &确定 + + LOSHJob + + + Configuring encrypted swap. + 配置加密交换分区。 + + + + No target system available. + 没有可用的目标系统。 + + + + No rootMountPoint is set. + 没有设定 root 挂载点。 + + + + No configFilePath is set. + 未设置配置文件路径。 + + LicensePage - + Form 表单 - + <h1>License Agreement</h1> <h1>许可证</h1> - + I accept the terms and conditions above. 我同意如上条款。 - + Please review the End User License Agreements (EULAs). 请查阅最终用户许可协议 (EULAs)。 - + This setup procedure will install proprietary software that is subject to licensing terms. 此安装过程会安装受许可条款约束的专有软件。 - + If you do not agree with the terms, the setup procedure cannot continue. 如果您不同意这些条款,安装过程将无法继续。 - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. 此安装过程会安装受许可条款约束的专有软件,用于提供额外功能和提升用户体验。 - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 如果您不同意这些条款,专有软件不会被安装,相应的开源软件替代品将被安装。 @@ -1602,7 +1873,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License 许可证 @@ -1610,109 +1881,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 驱动程序</strong><br/>由 %2 提供 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 显卡驱动程序</strong><br/><font color="Grey">由 %2 提供</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 浏览器插件</strong><br/><font color="Grey">由 %2 提供</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 编解码器</strong><br/><font color="Grey">由 %2 提供</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 软件包</strong><br/><font color="Grey">由 %2 提供</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">由 %2 提供</font> - + File: %1 文件:%1 - + + Hide license text + 隐藏协议文本 + + + Show the license text 显示协议文本 - + Open license agreement in browser. 在浏览器中打开许可协议。 - - - Hide license text - 隐藏协议文本 - LocalePage - - The system language will be set to %1. - 系统语言将设置为 %1。 - - - - The numbers and dates locale will be set to %1. - 数字和日期地域将设置为 %1。 - - - + Region: 地区: - + Zone: 区域: - - + + &Change... 更改 (&C) ... - - - Set timezone to %1/%2.<br/> - 设置时区为 %1/%2。<br/> - LocaleQmlViewStep - + Location 位置 + + LocaleTests + + + Quit + 退出 + + LocaleViewStep - + Location 位置 @@ -1720,35 +1984,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. 配置 LUKS key 文件。 - - + + No partitions are defined. 未定义分区。 - - - + + + Encrypted rootfs setup error 加密根文件系时配置错误 - + Root partition %1 is LUKS but no passphrase has been set. 根分区%1为LUKS但没有设置密钥。 - + Could not create LUKS key file for root partition %1. 无法创建根分区%1的LUKS密钥文件。 - + Could not configure LUKS key file on partition %1. 无法配置根分区%1的LUKS密钥文件。 @@ -1756,124 +2020,140 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. 生成 machine-id。 - + Configuration Error 配置错误 - + No root mount point is set for MachineId. MachineId未配置根挂载点/ + + Map + + + Timezone: %1 + 时区: %1 + + + + 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. + 请在地图上选择您的首选位置,安装程序可以为您提供可参考的区域 +设置和时区设置。 您可以在下面微调推荐的设置。 拖动以搜索地图,然后 +用 +/- 按钮进行放大/缩小,或使用鼠标滚动进行缩放。 + + NetInstallViewStep - - + Package selection 软件包选择 - + Office software 办公软件 - + Office package 办公软件包 - + Browser software 浏览器软件 - + Browser package 浏览器安装包 - + Web browser 网页浏览器 - + Kernel 内核 - + Services 服务 - + Login 登录 - + Desktop 桌面 - + Applications 应用程序 - + Communication - + 通讯 - + Development - + 开发 - + Office - + 办公 - + Multimedia - + 多媒体 - + Internet - + 互联网 - + Theming - + 主题化 - + Gaming - + 游戏 - + Utilities - + 实用工具 NotesQmlViewStep - + Notes 备注 @@ -1881,17 +2161,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: 批量(&T): - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>请输入批量标识。它会被保存到目标系统上。</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM 配置信息</h1><p>Calamares会使用OEM配置信息来配置目标系统。</p></body></html> @@ -1899,260 +2179,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration OEM 配置 - + Set the OEM Batch Identifier to <code>%1</code>. 设置OEM批量标识为 <code>%1</code>. + + Offline + + + Select your preferred Region, or use the default settings. + 请选择你偏好打地区或者使用当期默认设置 + + + + + + Timezone: %1 + 时区: %1 + + + + Select your preferred Zone within your Region. + 在您的区域中选择您的首选区域。 + + + + Zones + 区域 + + + + You can fine-tune Language and Locale settings below. + 您可以在下面微调“语言”和“区域设置”。 + + PWQ - + Password is too short 密码太短 - + Password is too long 密码太长 - + Password is too weak 密码强度太弱 - + Memory allocation error when setting '%1' 设置“%1”时发生内存分配错误 - + Memory allocation error 内存分配错误 - + The password is the same as the old one 新密码和老密码一致 - + The password is a palindrome 新密码为回文 - + The password differs with case changes only 新密码和老密码只有大小写区别 - + The password is too similar to the old one 新密码和老密码过于相似 - + The password contains the user name in some form 新密码包含用户名 - + The password contains words from the real name of the user in some form 新密码包含用户真实姓名 - + The password contains forbidden words in some form 新密码包含不允许使用的词组 - - The password contains less than %1 digits - 新密码包含少于 %1 个数字 - - - + The password contains too few digits 新密码包含太少数字 - - The password contains less than %1 uppercase letters - 新密码包含少于 %1 个大写字母 - - - + The password contains too few uppercase letters 新密码包含太少大写字母 - - - The password contains less than %1 lowercase letters - 新密码包含少于 %1 个小写字母 + + + The password contains fewer than %n lowercase letters + + 密码包含的小写字母少于 %n 个 + - + The password contains too few lowercase letters 新密码包含太少小写字母 - - The password contains less than %1 non-alphanumeric characters - 新密码包含少于 %1 个非字母/数字字符 - - - + The password contains too few non-alphanumeric characters 新密码包含太少非字母/数字字符 - - The password is shorter than %1 characters - 新密码短于 %1 位 - - - + The password is too short 新密码过短 - - The password is just rotated old one - 新密码仅对老密码作了字序调整 - - - - The password contains less than %1 character classes - 新密码包含少于 %1 个字符类型 - - - + The password does not contain enough character classes 新密码包含太少字符类型 - - The password contains more than %1 same characters consecutively - 新密码包含超过 %1 个连续的相同字符 - - - + The password contains too many same characters consecutively 新密码包含过多连续的相同字符 - - The password contains more than %1 characters of the same class consecutively - 新密码包含超过 %1 个连续的同类型字符 - - - + The password contains too many characters of the same class consecutively 新密码包含过多连续的同类型字符 - - - The password contains monotonic sequence longer than %1 characters - 新密码包含超过 %1 个字符长度的单调序列 + + + The password contains fewer than %n digits + + 密码包含的数字少于 %n 个 + + + + + The password contains fewer than %n uppercase letters + + 密码包含的大写字母少于 %n 个 + + + + + The password contains fewer than %n non-alphanumeric characters + + 密码包含的非字母数字字符少于 %n 个 + + + + + The password is shorter than %n characters + + 密码少于 %n 个字符 + - + + The password is a rotated version of the previous one + 此密码是上一个的字序调整版本 + + + + The password contains fewer than %n character classes + + 新密码包含字符类型少于 %n 个 + + + + + The password contains more than %n same characters consecutively + + 新密码包含超过 %n 个连续的相同字符 + + + + + The password contains more than %n characters of the same class consecutively + + 新密码包含超过 %n 个连续的同类型字符 + + + + + The password contains monotonic sequence longer than %n characters + + 新密码包含超过 %n 个字符长度的单调序列 + + + + The password contains too long of a monotonic character sequence 新密码包含过长的单调序列 - + No password supplied 未输入密码 - + Cannot obtain random numbers from the RNG device 无法从随机数生成器 (RNG) 设备获取随机数 - + Password generation failed - required entropy too low for settings 无法生成密码 - 熵值过低 - + The password fails the dictionary check - %1 新密码无法通过字典检查 - %1 - + The password fails the dictionary check 新密码无法通过字典检查 - + Unknown setting - %1 未知设置 - %1 - + Unknown setting 未知设置 - + Bad integer value of setting - %1 设置的整数值非法 - %1 - + Bad integer value 设置的整数值非法 - + Setting %1 is not of integer type 设定值 %1 不是整数类型 - + Setting is not of integer type 设定值不是整数类型 - + Setting %1 is not of string type 设定值 %1 不是字符串类型 - + Setting is not of string type 设定值不是字符串类型 - + Opening the configuration file failed 无法打开配置文件 - + The configuration file is malformed 配置文件格式不正确 - + Fatal failure 致命错误 - + Unknown error 未知错误 - + Password is empty 密码是空 @@ -2160,40 +2488,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form 表单 - + Product Name 产品名称 - + TextLabel 文本标签 - + Long Product Description 长产品描述 - + Package Selection 软件包选择 - + Please pick a product from the list. The selected product will be installed. 请在列表中选一个产品。被选中的产品将会被安装。 + + PackageChooserQmlViewStep + + + Packages + 软件包 + + PackageChooserViewStep - + Packages 软件包 @@ -2201,12 +2537,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name 名称 - + Description 描述 @@ -2214,17 +2550,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form 窗体 - + Keyboard Model: 键盘型号: - + Type here to test your keyboard 在此处数据以测试键盘 @@ -2232,96 +2568,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form 窗体 - + What is your name? 您的姓名? - - What name do you want to use to log in? - 您想要使用的登录用户名是? - - - - Choose a password to keep your account safe. - 选择一个密码来保证您的账户安全。 - - - - - <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> - <small>输入相同密码两次,以检查输入错误。好的密码包含字母,数字,标点的组合,应当至少为 8 个字符长,并且应按一定周期更换。</small> - - - - What is the name of this computer? - 计算机名称为? - - - + Your Full Name 全名 - + + What name do you want to use to log in? + 您想要使用的登录用户名是? + + + login 登录 - + + What is the name of this computer? + 计算机名称为? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>将计算机设置为对其他网络上计算机可见时将使用此名称。</small> - + Computer Name 计算机名称 - - + + Choose a password to keep your account safe. + 选择一个密码来保证您的账户安全。 + + + + + <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> + <small>输入相同密码两次,以检查输入错误。好的密码包含字母,数字,标点的组合,应当至少为 8 个字符长,并且应按一定周期更换。</small> + + + + Password 密码 - - + + Repeat Password 重复密码 - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. 若选中此项,密码强度检测会开启,你将不被允许使用弱密码。 - + Require strong passwords. 要求使用强密码。 - + Log in automatically without asking for the password. 不询问密码自动登录。 - + Use the same password for the administrator account. 为管理员帐号使用同样的密码。 - + Choose a password for the administrator account. 选择管理员账户的密码。 - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>输入相同密码两次,以检查输入错误。</small> @@ -2329,42 +2665,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root 根目录 - + Home 主目录 - + Boot 引导 - + EFI system EFI 系统 - + Swap 交换 - + New partition for %1 %1 的新分区 - + New partition 新建分区 - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2373,34 +2709,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space 空闲空间 - - + + New partition 新建分区 - + Name 名称 - + File System 文件系统 - + + File System Label + 文件系统卷标 + + + Mount Point 挂载点 - + Size 大小 @@ -2408,77 +2749,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form 窗体 - + Storage de&vice: 存储器(&V): - + &Revert All Changes 撤销所有修改(&R) - + New Partition &Table 新建分区表(&T) - + Cre&ate 创建 - + &Edit 编辑(&E) - + &Delete 删除(&D) - + New Volume Group 新分卷组 - + Resize Volume Group 调整分卷组大小 - + Deactivate Volume Group 停用分卷组 - + Remove Volume Group 移除分卷组 - + I&nstall boot loader on: 安装引导程序至: - + Are you sure you want to create a new partition table on %1? 您是否确定要在 %1 上创建新分区表? - + Can not create new partition 无法创建新分区 - + 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. %1上的分区表已经有%2个主分区,并且不能再添加。请删除一个主分区并添加扩展分区。 @@ -2486,117 +2827,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... 正在收集系统信息... - + Partitions 分区 - - Install %1 <strong>alongside</strong> another operating system. - 将 %1 安装在其他操作系统<strong>旁边</strong>。 + + Unsafe partition actions are enabled. + - - <strong>Erase</strong> disk and install %1. - <strong>抹除</strong>磁盘并安装 %1。 + + Partitioning is configured to <b>always</b> fail. + - - <strong>Replace</strong> a partition with %1. - 以 %1 <strong>替代</strong>一个分区。 + + No partitions will be changed. + - - <strong>Manual</strong> partitioning. - <strong>手动</strong>分区 - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - 将 %1 安装在磁盘 <strong>%2</strong> (%3) 上的另一个操作系统<strong>旁边</strong>。 - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>抹除</strong> 磁盘 <strong>%2</strong> (%3) 并且安装 %1。 - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - 以 %1 <strong>替代</strong> 一个在磁盘 <strong>%2</strong> (%3) 上的分区。 - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - 在磁盘 <strong>%1</strong> (%2) 上<strong>手动</strong>分区。 - - - - Disk <strong>%1</strong> (%2) - 磁盘 <strong>%1</strong> (%2) - - - + Current: 当前: - + After: 之后: - + No EFI system partition configured 未配置 EFI 系统分区 - - 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>esp</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. - 必须有 EFI 系统分区才能启动 %1 。<br/><br/>要配置 EFI 系统分区,后退一步,然后创建或选中一个 FAT32 分区并为之设置 <strong>esp</strong> 标记及挂载点 <strong>%2</strong>。<br/><br/>你可以不创建 EFI 系统分区并继续安装,但是你的系统可能无法启动。 + + EFI system partition configured incorrectly + EFI系统分区配置错误 - - EFI system partition flag not set - 未设置 EFI 系统分区标记 + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + 启动 %1 必须需要 EFI 系統分区。<br/><br/>要設定 EFI 系统分区,返回并选择或者建立符合要求的分区。 - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - 必须有 EFI 系统分区才能启动 %1 。<br/><br/>已有挂载点为 <strong>%2</strong> 的分区,但是未设置 <strong>esp</strong> 标记。<br/>要设置此标记,后退并编辑分区。<br/><br/>你可以不创建 EFI 系统分区并继续安装,但是你的系统可能无法启动。 + + The filesystem must be mounted on <strong>%1</strong>. + 文件系统必须挂载于 <strong>%1</strong>。 - + + The filesystem must have type FAT32. + 此文件系统必须为FAT32 + + + + The filesystem must be at least %1 MiB in size. + 文件系统必须要有%1 MiB 的大小。 + + + + The filesystem must have flag <strong>%1</strong> set. + 文件系统必须有 <strong>%1</strong> 标志设定。 + + + + You can continue without setting up an EFI system partition but your system may fail to start. + 您可以在不设置EFI系统分区的情况下继续,但您的系統可能无法启动。 + + + Option to use GPT on BIOS 在 BIOS 上使用 GPT - - 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. - GPT 分区表对于所有系统来说都是最佳选项。本安装程序支持在 BIOS 模式下设置 GPT 分区表。<br/><br/>要在 BIOS 模式下配置 GPT 分区表,(若你尚未配置好)返回并设置分区表为 GPT,然后创建一个 8MB 的、未经格式化的、启用<strong>bios_grub</strong> 标记的分区。<br/><br/>一个未格式化的 8MB 的分区对于在 BIOS 模式下使用 GPT 启动 %1 来说是非常有必要的。 + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + - + Boot partition not encrypted 引导分区未加密 - + 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. 您尝试用单独的引导分区配合已加密的根分区使用,但引导分区未加密。<br/><br/>这种配置方式可能存在安全隐患,因为重要的系统文件存储在了未加密的分区上。<br/>您可以继续保持此配置,但是系统解密将在系统启动时而不是引导时进行。<br/>要加密引导分区,请返回上一步并重新创建此分区,并在分区创建窗口选中 <strong>加密</strong> 选项。 - + has at least one disk device available. 有至少一个可用的磁盘设备。 - + There are no partitions to install on. 无可用于安装的分区。 @@ -2604,13 +2935,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma 外观主题任务 - - + + Could not select KDE Plasma Look-and-Feel package 无法选中 KDE Plasma 外观主题包 @@ -2618,17 +2949,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form 表单 - + 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. 请选择一个 KDE Plasma 桌面外观。你也可以忽略此步骤并在系统安装完成后配置外观。点击外观后可以实时预览效果。 - + 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. 请选择一个 KDE Plasma 桌面外观,可以忽略此步骤并在系统安装完成后配置外观。点击一个外观后可以实时预览效果。 @@ -2636,7 +2967,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel 外观主题 @@ -2644,17 +2975,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... 保存文件以供日后使用 - + No files configured to save for later. 没有已保存且供日后使用的配置文件。 - + Not all of the configured files could be preserved. 并不是所有配置文件都可以被保留 @@ -2662,14 +2993,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. 命令没有输出。 - + Output: @@ -2678,52 +3009,52 @@ Output: - + External command crashed. 外部命令已崩溃。 - + Command <i>%1</i> crashed. 命令 <i>%1</i> 已崩溃。 - + External command failed to start. 无法启动外部命令。 - + Command <i>%1</i> failed to start. 无法启动命令 <i>%1</i>。 - + Internal error when starting command. 启动命令时出现内部错误。 - + Bad parameters for process job call. 呼叫进程任务出现错误参数 - + External command failed to finish. 外部命令未成功完成。 - + Command <i>%1</i> failed to finish in %2 seconds. 命令 <i>%1</i> 未能在 %2 秒内完成。 - + External command finished with errors. 外部命令已完成,但出现了错误。 - + Command <i>%1</i> finished with exit code %2. 命令 <i>%1</i> 以退出代码 %2 完成。 @@ -2731,89 +3062,95 @@ Output: QObject - - Default Keyboard Model - 默认键盘型号 - - - - - Default - 默认 - - - - unknown - 未知 - - - - extended - 扩展分区 - - - - unformatted - 未格式化 - - - - swap - 临时存储空间 - - - - Unpartitioned space or unknown partition table - 尚未分区的空间或分区表未知 - - - - (no mount point) - (无挂载点) - - - - Requirements checking for module <i>%1</i> is complete. - 模块<i>%1</i>的需求检查已完成。 - - - + %1 (%2) %1(%2) - - No product - 无产品 + + unknown + 未知 - - No description provided. - 未提供描述信息 + + extended + 扩展分区 - - - - + + unformatted + 未格式化 + + + + swap + 交换分区 + + + + + Default + 默认 + + + + + + File not found 找不到文件 - + Path <pre>%1</pre> must be an absolute path. 路径 <pre>%1</pre> 必须是绝对路径。 - + + Directory not found + 找不到目录 + + + + Could not create new random file <pre>%1</pre>. 无法创建新的随机文件 <pre>%1</pre>. + + + No product + 无产品 + + + + No description provided. + 未提供描述信息 + + + + (no mount point) + (无挂载点) + + + + Unpartitioned space or unknown partition table + 尚未分区的空间或分区表未知 + + + + Recommended + + + <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> + <p>此计算机不满足安装 %1 的某些推荐配置。<br/> + 安装可以继续,但是一些特性可能被禁用。</p> + RemoveUserJob - + Remove live user from target system 从目标系统删除 live 用户 @@ -2821,18 +3158,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. 移除分卷组 %1。 - + Remove Volume Group named <strong>%1</strong>. 移除分卷组 <strong>%1</strong>。 - + The installer failed to remove a volume group named '%1'. 安装器无法移除分卷组 '%1'。 @@ -2840,143 +3177,160 @@ Output: ReplaceWidget - + Form 表单 - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. <b>选择要安装 %1 的地方。</b><br/><font color="red">警告:</font>这将会删除所有已选取的分区上的文件。 - + The selected item does not appear to be a valid partition. 选中项似乎不是有效分区。 - + %1 cannot be installed on empty space. Please select an existing partition. 无法在空白空间中安装 %1。请选取一个存在的分区。 - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. 无法在拓展分区上安装 %1。请选取一个存在的主要或逻辑分区。 - + %1 cannot be installed on this partition. 无法安装 %1 到此分区。 - + Data partition (%1) 数据分区 (%1) - + Unknown system partition (%1) 未知系统分区 (%1) - + %1 system partition (%2) %1 系统分区 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>分区 %1 对 %2 来说太小了。请选取一个容量至少有 %3 GiB 的分区。 - + <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. <strong>%2</strong><br/><br/>在此系统上找不到任何 EFI 系统分区。请后退到上一步并使用手动分区配置 %1。 - - - + + + <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. <strong>%3</strong><br/><br/>即将安装 %1 到 %2 上。<br/><font color="red">警告: </font>分区 %2 上的所有数据都将丢失。 - + The EFI system partition at %1 will be used for starting %2. 将使用 %1 处的 EFI 系统分区启动 %2。 - + EFI system partition: EFI 系统分区: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>此计算机不满足安装 %1 的最低配置。<br/> + 安装无法继续。</p> + + + + <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> + <p>此计算机不满足安装 %1 的某些推荐配置。<br/> + 安装可以继续,但是一些特性可能被禁用。</p> + + ResizeFSJob - + Resize Filesystem Job 调整文件系统大小的任务 - + Invalid configuration 无效配置 - + The file-system resize job has an invalid configuration and will not run. 调整文件系统大小的任务 因为配置文件无效不会被执行。 - + KPMCore not Available KPMCore不可用 - + Calamares cannot start KPMCore for the file-system resize job. Calamares 无法启动 KPMCore来完成调整文件系统大小的任务。 - - - - - + + + + + Resize Failed 调整大小失败 - + The filesystem %1 could not be found in this system, and cannot be resized. 文件系统 %1 未能在此系统上找到,因此无法调整大小。 - + The device %1 could not be found in this system, and cannot be resized. 设备 %1 未能在此系统上找到,因此无法调整大小。 - - + + The filesystem %1 cannot be resized. 文件系统 %1 无法被调整大小。 - - + + The device %1 cannot be resized. 设备 %1 无法被调整大小。 - + The filesystem %1 must be resized, but cannot. 文件系统 %1 必须调整大小,但无法做到。 - + The device %1 must be resized, but cannot 设备 %1 必须调整大小,但无法做到。 @@ -2984,22 +3338,22 @@ Output: ResizePartitionJob - + Resize partition %1. 调整分区 %1 大小。 - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. 将 <strong>%2MiB</strong> 分区的大小从<strong>%1</strong> 调整至<strong>%3MiB</strong>。 - + Resizing %2MiB partition %1 to %3MiB. 正将 %2MB 的分区%1调整为 %3MB。 - + The installer failed to resize partition %1 on disk '%2'. 安装程序调整磁盘“%2”上的分区 %1 大小失败。 @@ -3007,7 +3361,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group 调整分卷组大小 @@ -3015,18 +3369,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. 将分卷组%1的大小从%2调整为%3。 - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. 将分卷组<strong>%1</strong>的大小从<strong>%2</strong>调整为<strong>%3</strong>。 - + The installer failed to resize a volume group named '%1'. 安装器未能调整分卷组'%1'的大小 @@ -3034,55 +3388,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: 为了更好的体验,请确保这台电脑: - + System requirements 系统需求 - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - 此计算机不满足安装 %1 的某些推荐配置。 -安装可以继续,但是一些特性可能被禁用。 - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - 此电脑未满足安装 %1 的最低需求。<br/>安装无法继续。<a href="#details">详细信息...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - 此计算机不满足安装 %1 的某些推荐配置。 -安装可以继续,但是一些特性可能被禁用。 - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - 此电脑未满足一些安装 %1 的推荐需求。<br/>可以继续安装,但一些功能可能会被停用。 - - - - This program will ask you some questions and set up %2 on your computer. - 本程序将会问您一些问题并在您的电脑上安装及设置 %2 。 - - ScanningDialog - + Scanning storage devices... 正在扫描存储器… - + Partitioning 正在分区 @@ -3090,29 +3414,29 @@ Output: SetHostNameJob - + Set hostname %1 设置主机名 %1 - + Set hostname <strong>%1</strong>. 设置主机名 <strong>%1</strong>。 - + Setting hostname %1. 正在设置主机名 %1。 + - Internal Error 内部错误 - - + + Cannot write hostname to target system 无法向目标系统写入主机名 @@ -3120,29 +3444,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 将键盘型号设置为 %1,布局设置为 %2-%3 - + Failed to write keyboard configuration for the virtual console. 无法将键盘配置写入到虚拟控制台。 - - - + + + Failed to write to %1 写入到 %1 失败 - + Failed to write keyboard configuration for X11. 无法为 X11 写入键盘配置。 - + Failed to write keyboard configuration to existing /etc/default directory. 无法将键盘配置写入到现有的 /etc/default 目录。 @@ -3150,82 +3474,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. 设置分区 %1 的标记. - + Set flags on %1MiB %2 partition. 设置 %1MB %2 分区的标记. - + Set flags on new partition. 设置新分区的标记. - + Clear flags on partition <strong>%1</strong>. 清空分区 <strong>%1</strong> 上的标记. - + Clear flags on %1MiB <strong>%2</strong> partition. 删除 %1MB <strong>%2</strong> 分区的标记. - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - 将 %1MB <strong>%2</strong> 分区标记为 <strong>%3</strong>. - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - 正在删除 %1MB <strong>%2</strong> 分区的标记. - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - 正在将 %1MB <strong>%2</strong> 分区标记为 <strong>%3</strong>. - - - + Clear flags on new partition. 删除新分区的标记. - + Flag partition <strong>%1</strong> as <strong>%2</strong>. 将分区 <strong>%2</strong> 标记为 <strong>%1</strong>。 - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + 将 %1MB <strong>%2</strong> 分区标记为 <strong>%3</strong>. + + + Flag new partition as <strong>%1</strong>. 将新分区标记为 <strong>%1</strong>. - + Clearing flags on partition <strong>%1</strong>. 正在清理分区 <strong>%1</strong> 上的标记。 - + + Clearing flags on %1MiB <strong>%2</strong> partition. + 正在删除 %1MB <strong>%2</strong> 分区的标记. + + + Clearing flags on new partition. 正在删除新分区的标记. - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. 正在为分区 <strong>%1</strong> 设置标记 <strong>%2</strong>。 - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + 正在将 %1MB <strong>%2</strong> 分区标记为 <strong>%3</strong>. + + + Setting flags <strong>%1</strong> on new partition. 正在将新分区标记为 <strong>%1</strong>. - + The installer failed to set flags on partition %1. 安装程序没有成功设置分区 %1 的标记. @@ -3233,42 +3557,42 @@ Output: SetPasswordJob - + Set password for user %1 设置用户 %1 的密码 - + Setting password for user %1. 正在为用户 %1 设置密码。 - + Bad destination system path. 非法的目标系统路径。 - + rootMountPoint is %1 根挂载点为 %1 - + Cannot disable root account. 无法禁用 root 帐号。 - + passwd terminated with error code %1. passwd 以错误代码 %1 终止。 - + Cannot set password for user %1. 无法设置用户 %1 的密码。 - + usermod terminated with error code %1. usermod 以错误代码 %1 中止。 @@ -3276,45 +3600,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 设置时区为 %1/%2 - + Cannot access selected timezone path. 无法访问指定的时区路径。 - + Bad path: %1 非法路径:%1 - + Cannot set timezone. 无法设置时区。 - + Link creation failed, target: %1; link name: %2 链接创建失败,目标:%1,链接名称:%2 - + Cannot set timezone, 无法设置时区, - + Cannot open /etc/timezone for writing 无法打开要写入的 /etc/timezone + + SetupGroupsJob + + + Preparing groups. + 正在准备群组。 + + + + + Could not create groups in target system + 无法在目标系统中创建群组 + + + + These groups are missing in the target system: %1 + 目标系统中缺少以下群组: %1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + 配置 <pre>sudo</pre> 用户。 + + + + Cannot chmod sudoers file. + 无法修改 sudoers 文件权限。 + + + + Cannot create sudoers file for writing. + 无法创建要写入的 sudoers 文件。 + + ShellProcessJob - + Shell Processes Job Shell 进程任务 @@ -3322,81 +3683,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - 预览——当你启动安装过程,以下行为将被执行 + + &OK + &确定 - - This is an overview of what will happen once you start the install procedure. - 这是您开始安装后所会发生的事情的概览。 + + &Yes + &是 - - - SummaryViewStep - - Summary - 摘要 + + &No + &否 + + + + &Cancel + 取消(&C) + + + + &Close + &关闭 TrackingInstallJob - + Installation feedback 安装反馈 - + Sending installation feedback. 发送安装反馈。 - + Internal error in install-tracking. 在 install-tracking 步骤发生内部错误。 - + HTTP request timed out. HTTP 请求超时。 - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE 用户反馈 + + + + Configuring KDE user feedback. + 配置 KDE 用户反馈。 + + + + + Error in KDE user feedback configuration. + KDE 用户反馈配置中存在错误。 + + + + Could not configure KDE user feedback correctly, script error %1. + 无法正确 KDE 用户反馈,脚本错误代码 %1。 + + + + Could not configure KDE user feedback correctly, Calamares error %1. + 无法正确 KDE 用户反馈,Calamares 错误代码 %1。 + + + + TrackingMachineUpdateManagerJob + + Machine feedback 机器反馈 - + Configuring machine feedback. 正在配置机器反馈。 - - + + Error in machine feedback configuration. 机器反馈配置中存在错误。 - + Could not configure machine feedback correctly, script error %1. 无法正确配置机器反馈,脚本错误代码 %1。 - + Could not configure machine feedback correctly, Calamares error %1. 无法正确配置机器反馈,Calamares 错误代码 %1。 @@ -3404,106 +3801,97 @@ Output: TrackingPage - + Form 表单 - + Placeholder 占位符 - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>选中此项时,不会发送关于安装的 <span style=" font-weight:600;">no information at all</span>。</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>单击此处 <span style=" font-weight:600;">不发送任何</span> 有关安装的信息。</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">点击此处以获取关于用户反馈的详细信息</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - 安装跟踪可帮助 %1 获取关于用户数量,安装 %1 的硬件(选中下方最后两项)及长期以来受欢迎应用程序的信息。请点按每项旁的帮助图标以查看即将被发送的信息。 + + 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. + 跟踪帮助 %1 以查看它的安装频率、安装硬件以及使用的应用程序。请点按每项旁的帮助图标以查看即将被发送的信息。 - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - 选中此项时,安装器将发送关于安装过程和硬件的信息。该信息只会在安装结束后 <b>发送一次</b>。 + + 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. + 选中此项时,安装器将发送关于安装过程和硬件的信息。该信息仅会在安装结束后发送<b>一次</b> 。 - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - 选中此项时,安装器将给 %1 <b>定时</b> 发送关于安装进程,硬件及应用程序的信息。 + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + 通过选择此选项,您将定期将有关您 <b>计算机</b>的安装,硬件和应用程序的信息发送到 %1。 - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - 选中此项时,安装器和系统将给 %1 <b>定时</b> 发送关于安装进程,硬件,应用程序及使用规律的信息。 + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + 通过选择此选项,您将定期将有关<b>用户</b> 安装,硬件,应用程序和应用程序使用方式的信息发送到 %1。 TrackingViewStep - + Feedback 反馈 + + UmountJob + + + Unmount file systems. + 卸载文件系统。 + + + + No target system available. + 没有可用的目标系统。 + + + + No rootMountPoint is set. + 没有设定 root挂载点。 + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果有多人要使用此计算机,您可以在安装后创建多个账户。</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果有多人要使用此计算机,您可以在安装后创建多个账户。</small> + + + UsersQmlViewStep - - Your username is too long. - 用户名太长。 - - - - Your username must start with a lowercase letter or underscore. - 用户名必须以小写字母或下划线"_"开头 - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - 只允许小写字母、数组、下划线"_" 和 连字符"-" - - - - Only letters, numbers, underscore and hyphen are allowed. - 只允许字母、数组、下划线"_" 和 连字符"-" - - - - Your hostname is too short. - 主机名太短。 - - - - Your hostname is too long. - 主机名太长。 - - - - Your passwords do not match! - 密码不匹配! + + Users + 用户 UsersViewStep - + Users 用户 @@ -3511,65 +3899,67 @@ Output: VariantModel - + Key + Column header for key/value Key - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group 创建存储组 - + List of Physical Volumes 物理分卷列表: - + Volume Group Name: 分卷组名称: - + Volume Group Type: 分卷组类型: - + Physical Extent Size: 物理区域PE大小: - + MiB MiB - + Total Size: 大小: - + Used Size: 已用空间: - + Total Sectors: 总扇区数: - + Quantity of LVs: 逻辑分卷数量: @@ -3577,106 +3967,106 @@ Output: WelcomePage - + Form 表单 - - + + Select application and system language 选择应用程序和系统语言 + &About + 关于(&A) + + + Open donations website 打开捐赠信息网页 - + &Donate 捐赠(&D) - + Open help and support website 打开帮助和支持页面 + &Support + 支持信息(&S) + + + Open issues and bug-tracking website 打开问题追踪网站 - Open release notes website - 打开发布日志网页 - - - - &Release notes - 发行注记(&R) - - - &Known issues 已知问题(&K) - - &Support - 支持信息(&S) + + Open release notes website + 打开发布日志网页 - - &About - 关于(&A) + + &Release notes + 发行注记(&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>欢迎使用 %1 安装程序。</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>欢迎使用 Calamares 安装程序 - %1。</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>欢迎使用 %1 的 Calamares 安装程序。</h1> - + <h1>Welcome to %1 setup.</h1> <h1>欢迎使用 %1 安装程序。</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>欢迎使用 Calamares 安装程序 - %1。</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>欢迎使用 %1 安装程序。</h1> + + + + %1 support + %1 的支持信息 + + + About %1 setup 关于 %1 安装程序 - + About %1 installer 关于 %1 安装程序 - + <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. - <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-2019 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> 赞助。 {1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 的支持信息 + <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/>致谢 <a href="https://calamares.io/team/">Calamares开发团队和<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. WelcomeQmlViewStep - + Welcome 欢迎 @@ -3684,84 +4074,217 @@ Output: WelcomeViewStep - + Welcome 欢迎 + + ZfsJob + + + Create ZFS pools and datasets + 创建 ZFS 池和数据集 + + + + Failed to create zpool on + 创建 zpool 失败于 + + + + Configuration Error + 配置错误 + + + + No partitions are available for ZFS. + 没有可用于 ZFS 的分区。 + + + + Internal data missing + 内部数据丢失 + + + + + Failed to create zpool + 创建 zpool 失败 + + + + Failed to create dataset + 创建数据集失败 + + + + The output was: + 输出为: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. - + <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/> + 致谢 <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. - + Back - + 后退 + + + + calamares-sidebar + + + Show debug information + 显示调试信息 + + + + finishedq + + + Installation Completed + 安装完成 + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 已安装在您的电脑上了。<br/> + 您现在可以重新启动到新系统,或是继续使用 Live 环境。 + + + + Close Installer + 关闭安装程序 + + + + Restart System + 重启系统 + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + 安装过程中的翻译已经复制到了临时用户的家目录下 +于此同时安装日志也已经复制到了目标系统,路径为:/var/log/installation.log + + + + finishedq@mobile + + + Installation Completed + 安装完成 + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 已安装在您的计算机上。<br/> + 现在可以重新启动设备了。 + + + + Close + 关闭 + + + + Restart + 重启 + + + + i18n + + + <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>. + <h1>语言</h1> </br> + 系统语言区域设置会影响部份命令行用户界面的语言及字符集。 当前设置是 <strong>%1</strong>. + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>区域</h1> </br> + 系统区域设置会影响数字和日期格式。 当前设置是 <strong>%1</strong>。 + + + + Back + 后退 keyboardq - - Keyboard Model - + + To activate keyboard preview, select a layout. + 要启用键盘预览,请选择一个键盘布局 - - Pick your preferred keyboard model or use the default one based on the detected hardware - + + Keyboard Model: + 键盘型号: - - Refresh - - - - - + Layouts - + 布局 - - - Keyboard Layout - + + Type here to test your keyboard + 在此处数据以测试键盘 - - Models - - - - + Variants - + 变体 + + + localeq - - Test your keyboard - + + Change + 更改 notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3769,34 +4292,263 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice 是強大且自由的辦办公软件,世界上有百万级别的用户量。其中包括多种组件模块使其成为世界上最强大的开源并自由的办公软件。<br/> + 预设选项。 - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + 如果你不想安装办公软件,请选择不安装办公软件的选项即可。稍后您可以在安装好的系统上根据个人喜好自行选择安装办公软件与否。您可以随时在安装好的系统上添加一个(或多个)办公软件。 + + + + No Office Suite + 无办公软件 + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + 建立最小化的桌面安装,移除所有的附加应用。在稍后自行选择需要安装至系统的应用。同时不会有任何的模板和例子可供选择。无办公软件,无媒体播放器,无图片查看器或者打印支持。仅仅有一个桌面,文件管理器,包管理器,文本编辑器和一个网页浏览器。 + + + + Minimal Install + 最小化安装 + + + + Please select an option for your install, or use the default: LibreOffice included. + 请为你的安装指定一个选项,或者使用默认选项:安装LibreOffice + + + + release_notes + + + <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> + <h3>%1</h3> + <p>这是一个QML 示例文件,显示了具有 Flickable 内容的 RichText 选项。</p> + + <p>带有 RichText 的 QML 可以使用 HTML 标签, + Flickable 内容对于触摸屏很有用。</p> + + <p><b>这是粗体字</b></p> + <p><i>这是斜体字</i></p> + <p><u>这是带下划线的文字</u></p> + <p><center>此文本将居中对齐。</center></p> + <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> + + + + Back + 后退 + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + 选择您的用户名和凭据登录并执行管理任务 + + + + What is your name? + 您的姓名? + + + + Your Full Name + 全名 + + + + What name do you want to use to log in? + 您想要使用的登录用户名是? + + + + Login Name + 登录名 + + + + If more than one person will use this computer, you can create multiple accounts after installation. + 如果有多人要使用此计算机,您可以在安装后创建多个账户。 + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 只允许小写字母、数组、下划线"_" 和 连字符"-" + + + + root is not allowed as username. + 用户名不能为root + + + + What is the name of this computer? + 计算机名称为? + + + + Computer Name + 计算机名称 + + + + This name will be used if you make the computer visible to others on a network. + 将计算机设置为对其他网络上计算机可见时将使用此名称。 + + + + localhost is not allowed as hostname. + localhost不能为用户名 + + + + Choose a password to keep your account safe. + 选择一个密码来保证您的账户安全。 + + + + Password + 密码 + + + + Repeat Password + 重复密码 + + + + 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. + 输入相同密码两次,以检查输入错误。好的密码包含字母,数字,标点的组合,应当至少为 8 个字符长,并且应按一定周期更换。 + + + + Validate passwords quality + 验证密码质量 + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + 若选中此项,密码强度检测会开启,你将不被允许使用弱密码。 + + + + Log in automatically without asking for the password + 不询问密码自动登录 + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + 只允许字母、数组、下划线"_" 和 连字符"-",最少两个字符。 + + + + Reuse user password as root password + 重用用户密码作为 root 密码 + + + + Use the same password for the administrator account. + 为管理员帐号使用同样的密码。 + + + + Choose a root password to keep your account safe. + 选择一个 root 密码来保证您的账户安全。 + + + + Root Password + Root 密码 + + + + Repeat Root Password + 重复 Root 密码 + + + + Enter the same password twice, so that it can be checked for typing errors. + 输入相同密码两次,以检查输入错误。 + + + + welcomeq + + + <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> + <h3>欢迎来到 %1 <quote>%2</quote> 安装程序</h3> + <p>这个程序将询问您一些问题并在您的计算机上安装 %1。</p> + + + About 关于 - + Support 支持 - + Known issues 已知问题 - + Release notes 发行说明 - + Donate 捐赠 diff --git a/lang/calamares_zh_HK.ts b/lang/calamares_zh_HK.ts new file mode 100644 index 000000000..bd0e73672 --- /dev/null +++ b/lang/calamares_zh_HK.ts @@ -0,0 +1,4498 @@ + + + + + AutoMountManagementJob + + + Manage auto-mount settings + 管理自動掛載設定 + + + + BootInfoWidget + + + 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. + 這個系統的<strong>開機環境</strong>。<br><br>較舊的 x86 系統只支援 <strong>BIOS</strong>。<br>現時的系統則通常使用 <strong>EFI</strong>,但若使用相容模式 (CSM),也可能顯示為 BIOS。 + + + + 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. + 這個系統以 <strong>EFI</strong> 開機。<br><br>要從 EFI 環境開機,本安裝程式必須安裝開機載入器程式,像是 <strong>GRUB</strong> 或 <strong>systemd-boot</strong> 在 <strong>EFI 系統分割區</strong>。這是自動的,除非選擇手動分割;在這種情況,您必須自行選取或建立它。 + + + + 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. + + + + + BootLoaderModel + + + Master Boot Record of %1 + + + + + Boot Partition + + + + + System Partition + + + + + Do not install a boot loader + + + + + %1 (%2) + + + + + Calamares::BlankViewStep + + + Blank Page + + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + + + + + Type: + + + + + + none + + + + + Interface: + + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + + + Reloads the stylesheet from the branding directory. + + + + + Uploads the session log to the configured pastebin. + + + + + Send Session Log + + + + + Reload Stylesheet + + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + + + Widget Tree + + + + + Debug information + + + + + Calamares::ExecutionViewStep + + + Set up + + + + + Install + + + + + Calamares::FailJob + + + Job failed (%1) + + + + + Programmed job failure was explicitly requested. + + + + + Calamares::JobThread + + + Done + + + + + Calamares::NamedJob + + + Example job (%1) + + + + + Calamares::ProcessJob + + + Run command '%1' in target system. + + + + + Run command '%1'. + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::QmlViewStep + + + Loading ... + + + + + QML Step <i>%1</i>. + + + + + Loading failed. + + + + + Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + + + + + Waiting for %n module(s). + + + + + + + (%n second(s)) + + + + + + + System-requirements checking is complete. + + + + + Calamares::ViewManager + + + Setup Failed + + + + + Installation Failed + + + + + Error + + + + + &Yes + + + + + &No + + + + + &Close + + + + + Install Log Paste URL + + + + + The upload was unsuccessful. No web-paste was done. + + + + + Install log posted to + +%1 + +Link copied to clipboard + + + + + Calamares Initialization Failed + + + + + %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. + + + + + <br/>The following modules could not be loaded: + + + + + Continue with setup? + + + + + Continue with installation? + + + + + 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> + + + + + 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> + + + + + &Set up now + + + + + &Install now + + + + + Go &back + + + + + &Set up + + + + + &Install + + + + + Setup is complete. Close the setup program. + + + + + The installation is complete. Close the installer. + + + + + Cancel setup without changing the system. + + + + + Cancel installation without changing the system. + + + + + &Next + + + + + &Back + + + + + &Done + + + + + &Cancel + + + + + Cancel setup? + + + + + Cancel installation? + + + + + Do you really want to cancel the current setup process? +The setup program will quit and all changes will be lost. + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Setup Program + + + + + %1 Installer + + + + + ChangeFilesystemLabelJob + + + Set filesystem label on %1. + + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + + + + + The installer failed to update partition table on disk '%1'. + + + + + CheckerContainer + + + Gathering system information... + + + + + ChoicePage + + + Form + + + + + Select storage de&vice: + + + + + + + + Current: + + + + + After: + + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. + + + + + Boot loader location: + + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + 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. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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/> + + + + + This storage device has one of its partitions <strong>mounted</strong>. + + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + + + + + No Swap + + + + + Reuse Swap + + + + + Swap (no Hibernate) + + + + + Swap (with Hibernate) + + + + + Swap to file + + + + + ClearMountsJob + + + Successfully unmounted %1. + + + + + Successfully disabled swap %1. + + + + + Successfully cleared swap %1. + + + + + Successfully closed mapper device %1. + + + + + Successfully disabled volume group %1. + + + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + Config + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + Set timezone to %1/%2. + + + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Network Installation. (Disabled: Incorrect configuration) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + Network Installation. (Disabled: Internal error) + + + + + Network Installation. (Disabled: No package list) + + + + + Package selection + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + <h1>Welcome to the Calamares setup program for %1</h1> + + + + + <h1>Welcome to %1 setup</h1> + + + + + <h1>Welcome to the Calamares installer for %1</h1> + + + + + <h1>Welcome to the %1 installer</h1> + + + + + Your username is too long. + + + + + '%1' is not allowed as username. + + + + + Your username must start with a lowercase letter or underscore. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + '%1' is not allowed as hostname. + + + + + Only letters, numbers, underscore and hyphen are allowed. + + + + + Your passwords do not match! + + + + + OK! + + + + + Setup Failed + + + + + Installation Failed + + + + + The setup of %1 did not complete successfully. + + + + + The installation of %1 did not complete successfully. + + + + + Setup Complete + + + + + Installation Complete + + + + + The setup of %1 is complete. + + + + + The installation of %1 is complete. + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + Install option: <strong>%1</strong> + + + + + None + + + + + Summary + + + + + This is an overview of what will happen once you start the setup procedure. + + + + + This is an overview of what will happen once you start the install procedure. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + + + + + Si&ze: + + + + + MiB + + + + + Partition &Type: + + + + + Primar&y + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + &Mount Point: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + Mountpoint must start with a <tt>/</tt>. + + + + + CreatePartitionJob + + + Create new %1MiB partition on %3 (%2) with entries %4. + + + + + Create new %1MiB partition on %3 (%2). + + + + + Create new %2MiB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + + + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Preserving home directory + + + + + + Creating user %1 + + + + + Configuring user %1 + + + + + Setting file permissions + + + + + CreateVolumeGroupDialog + + + Create Volume Group + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + This device has a <strong>%1</strong> partition table. + + + + + 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. + + + + + 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. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <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. + + + + + 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. + + + + + DeviceModel + + + %1 - %2 (%3) + device[name] - size[number] (device-node[name]) + + + + + %1 - (%2) + device[name] - (device-node[name]) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Con&tent: + + + + + &Keep + + + + + Format + + + + + Warning: Formatting the partition will erase all existing data. + + + + + &Mount Point: + + + + + Si&ze: + + + + + MiB + + + + + Fi&le System: + + + + + Flags: + + + + + Label for the filesystem + + + + + FS Label: + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + + + Passphrase + + + + + Confirm passphrase + + + + + + Please enter the same passphrase in both boxes. + + + + + ErrorDialog + + + Details: + + + + + Would you like to paste the install log to the web? + + + + + FillGlobalStorageJob + + + Set partition information + + + + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + &Restart now + + + + + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. + + + + + <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> + + + + + <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. + + + + + <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> + + + + + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedQmlViewStep + + + Finish + + + + + FinishedViewStep + + + Finish + + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MiB) on %4. + + + + + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + GeneralRequirements + + + has at least %1 GiB available drive space + + + + + There is not enough drive space. At least %1 GiB is required. + + + + + has at least %1 GiB working memory + + + + + The system does not have enough working memory. At least %1 GiB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + is running the installer as an administrator (root) + + + + + The setup program is not running with administrator rights. + + + + + The installer is not running with administrator rights. + + + + + has a screen large enough to show the whole installer + + + + + The screen is too small to display the setup program. + + + + + The screen is too small to display the installer. + + + + + HostInfoJob + + + Collecting information about your machine. + + + + + IDJob + + + + + + OEM Batch Identifier + + + + + Could not create directories <code>%1</code>. + + + + + Could not open file <code>%1</code>. + + + + + Could not write to file <code>%1</code>. + + + + + InitcpioJob + + + Creating initramfs with mkinitcpio. + + + + + InitramfsJob + + + Creating initramfs. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + + + + + KeyboardQmlViewStep + + + Keyboard + + + + + KeyboardViewStep + + + Keyboard + + + + + LCLocaleDialog + + + System locale setting + + + + + 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>. + + + + + &Cancel + + + + + &OK + + + + + LOSHJob + + + Configuring encrypted swap. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + No configFilePath is set. + + + + + LicensePage + + + Form + + + + + <h1>License Agreement</h1> + + + + + I accept the terms and conditions above. + + + + + Please review the End User License Agreements (EULAs). + + + + + This setup procedure will install proprietary software that is subject to licensing terms. + + + + + If you do not agree with the terms, the setup procedure cannot continue. + + + + + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + LicenseViewStep + + + License + + + + + LicenseWidget + + + URL: %1 + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + File: %1 + + + + + Hide license text + + + + + Show the license text + + + + + Open license agreement in browser. + + + + + LocalePage + + + Region: + + + + + Zone: + + + + + + &Change... + + + + + LocaleQmlViewStep + + + Location + + + + + LocaleTests + + + Quit + + + + + LocaleViewStep + + + Location + + + + + LuksBootKeyFileJob + + + Configuring LUKS key file. + + + + + + No partitions are defined. + + + + + + + Encrypted rootfs setup error + + + + + Root partition %1 is LUKS but no passphrase has been set. + + + + + Could not create LUKS key file for root partition %1. + + + + + Could not configure LUKS key file on partition %1. + + + + + MachineIdJob + + + Generate machine-id. + + + + + Configuration Error + + + + + No root mount point is set for MachineId. + + + + + Map + + + Timezone: %1 + + + + + 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. + + + + + NetInstallViewStep + + + Package selection + + + + + Office software + + + + + Office package + + + + + Browser software + + + + + Browser package + + + + + Web browser + + + + + Kernel + + + + + Services + + + + + Login + + + + + Desktop + + + + + Applications + + + + + Communication + + + + + Development + + + + + Office + + + + + Multimedia + + + + + Internet + + + + + Theming + + + + + Gaming + + + + + Utilities + + + + + NotesQmlViewStep + + + Notes + + + + + OEMPage + + + Ba&tch: + + + + + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> + + + + + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> + + + + + OEMViewStep + + + OEM Configuration + + + + + Set the OEM Batch Identifier to <code>%1</code>. + + + + + Offline + + + Select your preferred Region, or use the default settings. + + + + + + + Timezone: %1 + + + + + Select your preferred Zone within your Region. + + + + + Zones + + + + + You can fine-tune Language and Locale settings below. + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains too few digits + + + + + The password contains too few uppercase letters + + + + + The password contains fewer than %n lowercase letters + + + + + + + The password contains too few lowercase letters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is too short + + + + + The password does not contain enough character classes + + + + + The password contains too many same characters consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains fewer than %n digits + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + The password is shorter than %n characters + + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + The password contains more than %n same characters consecutively + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Password is empty + + + + + PackageChooserPage + + + Form + + + + + Product Name + + + + + TextLabel + + + + + Long Product Description + + + + + Package Selection + + + + + Please pick a product from the list. The selected product will be installed. + + + + + PackageChooserQmlViewStep + + + Packages + + + + + PackageChooserViewStep + + + Packages + + + + + PackageModel + + + Name + + + + + Description + + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + + + + + Type here to test your keyboard + + + + + Page_UserSetup + + + Form + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + login + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Computer Name + + + + + Choose a password to keep your account safe. + + + + + + <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> + + + + + + Password + + + + + + Repeat Password + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Require strong passwords. + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + + + + + Boot + + + + + EFI system + + + + + Swap + + + + + New partition for %1 + + + + + New partition + + + + + %1 %2 + size[number] filesystem[name] + + + + + PartitionModel + + + + Free Space + + + + + + New partition + + + + + Name + + + + + File System + + + + + File System Label + + + + + Mount Point + + + + + Size + + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + 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. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Unsafe partition actions are enabled. + + + + + Partitioning is configured to <b>always</b> fail. + + + + + No partitions will be changed. + + + + + Current: + + + + + After: + + + + + No EFI system partition configured + + + + + EFI system partition configured incorrectly + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + + + + + The filesystem must be mounted on <strong>%1</strong>. + + + + + The filesystem must have type FAT32. + + + + + The filesystem must be at least %1 MiB in size. + + + + + The filesystem must have flag <strong>%1</strong> set. + + + + + You can continue without setting up an EFI system partition but your system may fail to start. + + + + + Option to use GPT on BIOS + + + + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + + + + + Boot partition not encrypted + + + + + 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. + + + + + has at least one disk device available. + + + + + There are no partitions to install on. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + 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. + + + + + 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. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + %1 (%2) + + + + + unknown + + + + + extended + + + + + unformatted + + + + + swap + + + + + + Default + + + + + + + + File not found + + + + + Path <pre>%1</pre> must be an absolute path. + + + + + Directory not found + + + + + + Could not create new random file <pre>%1</pre>. + + + + + No product + + + + + No description provided. + + + + + (no mount point) + + + + + Unpartitioned space or unknown partition table + + + + + Recommended + + + <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> + + + + + RemoveUserJob + + + Remove live user from target system + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <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. + + + + + + + <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. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + + + + + <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> + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + KPMCore not Available + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. + + + + + Resizing %2MiB partition %1 to %3MiB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupDialog + + + Resize Volume Group + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ResultsListDialog + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MiB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MiB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MiB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + + + + + Cannot create sudoers file for writing. + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + StandardButtons + + + &OK + + + + + &Yes + + + + + &No + + + + + &Cancel + + + + + &Close + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingKUserFeedbackJob + + + KDE user feedback + + + + + Configuring KDE user feedback. + + + + + + Error in KDE user feedback configuration. + + + + + Could not configure KDE user feedback correctly, script error %1. + + + + + Could not configure KDE user feedback correctly, Calamares error %1. + + + + + TrackingMachineUpdateManagerJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + <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> + + + + + 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. + + + + + 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. + + + + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + + + + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UmountJob + + + Unmount file systems. + + + + + No target system available. + + + + + No rootMountPoint is set. + + + + + UsersPage + + + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> + + + + + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> + + + + + UsersQmlViewStep + + + Users + + + + + UsersViewStep + + + Users + + + + + VariantModel + + + Key + Column header for key/value + + + + + Value + Column header for key/value + + + + + VolumeGroupBaseDialog + + + Create Volume Group + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + + Select application and system language + + + + + &About + + + + + Open donations website + + + + + &Donate + + + + + Open help and support website + + + + + &Support + + + + + Open issues and bug-tracking website + + + + + &Known issues + + + + + Open release notes website + + + + + &Release notes + + + + + <h1>Welcome to the Calamares setup program for %1.</h1> + + + + + <h1>Welcome to %1 setup.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + %1 support + + + + + About %1 setup + + + + + About %1 installer + + + + + <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. + + + + + WelcomeQmlViewStep + + + Welcome + + + + + WelcomeViewStep + + + Welcome + + + + + ZfsJob + + + Create ZFS pools and datasets + + + + + Failed to create zpool on + + + + + Configuration Error + + + + + No partitions are available for ZFS. + + + + + Internal data missing + + + + + + Failed to create zpool + + + + + Failed to create dataset + + + + + The output was: + + + + + about + + + <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. + + + + + Back + + + + + calamares-sidebar + + + Show debug information + + + + + finishedq + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + + + + + Close Installer + + + + + Restart System + + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + + + + + finishedq@mobile + + + Installation Completed + + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + + + + + Close + + + + + Restart + + + + + i18n + + + <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>. + + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + + + + + Back + + + + + keyboardq + + + To activate keyboard preview, select a layout. + + + + + Keyboard Model: + + + + + Layouts + + + + + Type here to test your keyboard + + + + + Variants + + + + + localeq + + + Change + + + + + notesqml + + + <h3>%1</h3> + <p>These are example release notes.</p> + + + + + packagechooserq + + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + + + + + LibreOffice + + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + + + + + No Office Suite + + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + + + + + Minimal Install + + + + + Please select an option for your install, or use the default: LibreOffice included. + + + + + release_notes + + + <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> + + + + + Back + + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + + + + + What is your name? + + + + + Your Full Name + + + + + What name do you want to use to log in? + + + + + Login Name + + + + + If more than one person will use this computer, you can create multiple accounts after installation. + + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + + + + + root is not allowed as username. + + + + + What is the name of this computer? + + + + + Computer Name + + + + + This name will be used if you make the computer visible to others on a network. + + + + + localhost is not allowed as hostname. + + + + + Choose a password to keep your account safe. + + + + + Password + + + + + Repeat Password + + + + + 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. + + + + + Validate passwords quality + + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + + + + + Log in automatically without asking for the password + + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + + + + + Reuse user password as root password + + + + + Use the same password for the administrator account. + + + + + Choose a root password to keep your account safe. + + + + + Root Password + + + + + Repeat Root Password + + + + + Enter the same password twice, so that it can be checked for typing errors. + + + + + welcomeq + + + <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> + + + + + About + + + + + Support + + + + + Known issues + + + + + Release notes + + + + + Donate + + + + diff --git a/lang/calamares_zh_TW.ts b/lang/calamares_zh_TW.ts index 84f1d3f68..de3e26cfc 100644 --- a/lang/calamares_zh_TW.ts +++ b/lang/calamares_zh_TW.ts @@ -1,20 +1,28 @@ + + AutoMountManagementJob + + + Manage auto-mount settings + 管理自動掛載設定 + + BootInfoWidget - + 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. 這個系統的<strong>開機環境</strong>。<br><br>較舊的 x86 系統只支援 <strong>BIOS</strong>。<br>現時的系統則通常使用 <strong>EFI</strong>,但若使用相容模式 (CSM),也可能顯示為 BIOS。 - + 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. 這個系統以 <strong>EFI</strong> 開機。<br><br>要從 EFI 環境開機,本安裝程式必須安裝開機載入器程式,像是 <strong>GRUB</strong> 或 <strong>systemd-boot</strong> 在 <strong>EFI 系統分割區</strong>。這是自動的,除非選擇手動分割;在這種情況,您必須自行選取或建立它。 - + 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. 這個系統以 <strong>BIOS</strong> 開機。<br><br>要從 BIOS 環境開機,本安裝程式必須安裝開機載入器程式,像是 <strong>GRUB</strong>。而且通常安裝在分割區的開首,又或最好安裝在靠近分割表開首的 <strong>主要開機記錄 (MBR)</strong>。這是自動的,除非選擇手動分割;在這種情況,您必須自行設定它。 @@ -22,27 +30,27 @@ BootLoaderModel - + Master Boot Record of %1 %1 的主要開機紀錄 (MBR) - + Boot Partition 開機分割區 - + System Partition 系統分割區 - + Do not install a boot loader 無法安裝開機載入器 - + %1 (%2) %1 (%2) @@ -50,7 +58,7 @@ Calamares::BlankViewStep - + Blank Page 空白頁 @@ -58,58 +66,78 @@ Calamares::DebugWindow - + Form 型式 - + GlobalStorage 全域儲存 - + JobQueue 工作佇列 - + Modules 模組 - + Type: 類型: - - + + none - + Interface: 介面: - - Tools - 工具 + + Crashes Calamares, so that Dr. Konqui can look at it. + 讓 Calamares 當機,這樣 Dr. Konqui 就能檢視。 - + + Reloads the stylesheet from the branding directory. + 重新自品牌目錄載入樣式表。 + + + + Uploads the session log to the configured pastebin. + 將工作階段紀錄檔上傳到設定好的 pastebin。 + + + + Send Session Log + 傳送工作階段紀錄檔 + + + Reload Stylesheet 重新載入樣式表 - + + Displays the tree of widget names in the log (for stylesheet debugging). + 在紀錄檔中顯示小工具名稱樹(供樣式表除錯使用)。 + + + Widget Tree 小工具樹 - + Debug information 除錯資訊 @@ -117,12 +145,12 @@ Calamares::ExecutionViewStep - + Set up 設定 - + Install 安裝 @@ -130,12 +158,12 @@ Calamares::FailJob - + Job failed (%1) 排程失敗 (%1) - + Programmed job failure was explicitly requested. 明確要求程式化排程失敗。 @@ -143,7 +171,7 @@ Calamares::JobThread - + Done 完成 @@ -151,7 +179,7 @@ Calamares::NamedJob - + Example job (%1) 範例排程 (%1) @@ -159,17 +187,17 @@ Calamares::ProcessJob - + Run command '%1' in target system. 在目標系統中執行指令「%1」。 - + Run command '%1'. 執行指令「%1」。 - + Running command %1 %2 正在執行命令 %1 %2 @@ -177,32 +205,32 @@ Calamares::PythonJob - + Running %1 operation. 正在執行 %1 操作。 - + Bad working directory path 不良的工作目錄路徑 - + Working directory %1 for python job %2 is not readable. Python 行程 %2 作用中的目錄 %1 不具讀取權限。 - + Bad main script file 錯誤的主要腳本檔 - + Main script file %1 for python job %2 is not readable. Python 行程 %2 的主要腳本檔 %1 無法讀取。 - + Boost.Python error in job "%1". 行程 %1 中 Boost.Python 錯誤。 @@ -210,39 +238,44 @@ Calamares::QmlViewStep - + Loading ... 正在載入 ... - + QML Step <i>%1</i>. QML 第 <i>%1</i> 步 - + Loading failed. 載入失敗。 Calamares::RequirementsChecker + + + Requirements checking for module <i>%1</i> is complete. + 模組 <i>%1</i> 需求檢查完成。 + - + Waiting for %n module(s). 正在等待 %n 個模組。 - + (%n second(s)) (%n 秒) - + System-requirements checking is complete. 系統需求檢查完成。 @@ -250,247 +283,241 @@ Calamares::ViewManager - - &Back - 返回 (&B) - - - - &Next - 下一步 (&N) - - - - &Cancel - 取消(&C) - - - - Cancel setup without changing the system. - 取消安裝,不更改系統。 - - - - Cancel installation without changing the system. - 不變更系統並取消安裝。 - - - + Setup Failed 設定失敗 - - Would you like to paste the install log to the web? - 想要將安裝紀錄檔貼到網路上嗎? + + Installation Failed + 安裝失敗 - + + Error + 錯誤 + + + + &Yes + 是(&Y) + + + + &No + 否(&N) + + + + &Close + 關閉(&C) + + + Install Log Paste URL 安裝紀錄檔張貼 URL - + The upload was unsuccessful. No web-paste was done. 上傳不成功。並未完成網路張貼。 - + + Install log posted to + +%1 + +Link copied to clipboard + 安裝紀錄檔已張貼到: + +%1 + +連結已複製到剪貼簿 + + + Calamares Initialization Failed Calamares 初始化失敗 - + %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. %1 無法安裝。Calamares 無法載入所有已設定的模組。散佈版使用 Calamares 的方式有問題。 - + <br/>The following modules could not be loaded: <br/>以下的模組無法載入: - + + Continue with setup? + 繼續安裝? + + + Continue with installation? 繼續安裝? - + 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> %1 設定程式將在您的磁碟上做出變更以設定 %2。<br/><strong>您將無法復原這些變更。</strong> - + + 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> + %1 安裝程式將在您的磁碟上做出變更以安裝 %2。<br/><strong>您將無法復原這些變更。</strong> + + + &Set up now 馬上進行設定 (&S) - + + &Install now + 現在安裝 (&I) + + + + Go &back + 上一步 (&B) + + + &Set up 設定 (&S) - + &Install 安裝(&I) - + Setup is complete. Close the setup program. 設定完成。關閉設定程式。 - + + The installation is complete. Close the installer. + 安裝完成。關閉安裝程式。 + + + + Cancel setup without changing the system. + 取消安裝,不更改系統。 + + + + Cancel installation without changing the system. + 不變更系統並取消安裝。 + + + + &Next + 下一步 (&N) + + + + &Back + 返回 (&B) + + + + &Done + 完成(&D) + + + + &Cancel + 取消(&C) + + + Cancel setup? 取消設定? - + Cancel installation? 取消安裝? - + Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost. 真的想要取消目前的設定程序嗎? 設定程式將會結束,所有變更都將會遺失。 - + Do you really want to cancel the current install process? The installer will quit and all changes will be lost. 您真的想要取消目前的安裝程序嗎? 安裝程式將會退出且所有變動將會遺失。 - - - - &Yes - 是(&Y) - - - - - &No - 否(&N) - - - - &Close - 關閉(&C) - - - - Continue with setup? - 繼續安裝? - - - - 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> - %1 安裝程式將在您的磁碟上做出變更以安裝 %2。<br/><strong>您將無法復原這些變更。</strong> - - - - &Install now - 現在安裝 (&I) - - - - Go &back - 上一步 (&B) - - - - &Done - 完成(&D) - - - - The installation is complete. Close the installer. - 安裝完成。關閉安裝程式。 - - - - Error - 錯誤 - - - - Installation Failed - 安裝失敗 - CalamaresPython::Helper - + Unknown exception type 未知的例外型別 - + unparseable Python error 無法解析的 Python 錯誤 - + unparseable Python traceback 無法解析的 Python 回溯紀錄 - + Unfetchable Python error. 無法讀取的 Python 錯誤。 - - CalamaresUtils - - - Install log posted to: -%1 - 安裝紀錄檔已張貼到: -%1 - - CalamaresWindow - - &Back - 返回 (&B) - - - - &Next - 下一步 (&N) - - - - &Cancel - 取消(&C) - - - + %1 Setup Program %1 設定程式 - + %1 Installer %1 安裝程式 + + + ChangeFilesystemLabelJob - - Show debug information - 顯示除錯資訊 + + Set filesystem label on %1. + 在 %1 上設定檔案系統標籤。 + + + + Set filesystem label <strong>%1</strong> to partition <strong>%2</strong>. + 設定檔案系統標籤 <strong>%1</strong> 到分割區 <strong>%2</strong>。 + + + + The installer failed to update partition table on disk '%1'. + 安裝程式在磁碟 '%1' 上更新分割區表格失敗。 CheckerContainer - + Gathering system information... 收集系統資訊中... @@ -498,157 +525,197 @@ The installer will quit and all changes will be lost. ChoicePage - + Form 表單 - - After: - 之後: - - - - Boot loader location: - 開機載入器位置: - - - + Select storage de&vice: 選取儲存裝置(&V): - - - - + + + + Current: 目前: - - <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. Having a GPT partition table and <strong>fat32 512Mb /boot partition is a must for UEFI installs</strong>, either use an existing without formatting or create one. - <strong>手動分割</strong><br/>您可以自行建立或調整分割區大小。要用 GPT 分割表<strong>與 512Mb /boot 分割區必須是 UEFI 安裝</strong>,不管是使用現有的分割區或建立新的都可以。 + + After: + 之後: - + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + <strong>手動分割</strong><br/>可以自行建立或重新調整分割區大小。 + + + Reuse %1 as home partition for %2. 重新使用 %1 作為 %2 的家目錄分割區。 - + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> <strong>選取要縮減的分割區,然後拖曳底部條狀物來調整大小</strong> - + %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4. %1 會縮減到 %2MiB,並且會為 %4 建立新的 %3MiB 分割區。 - + + Boot loader location: + 開機載入器位置: + + + <strong>Select a partition to install on</strong> <strong>選取分割區以安裝在其上</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. 在這個系統找不到 EFI 系統分割區。請回到上一步並使用手動分割以設定 %1。 - + The EFI system partition at %1 will be used for starting %2. 在 %1 的 EFI 系統分割區將會在開始 %2 時使用。 - + EFI system partition: EFI 系統分割區: - + 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. 這個儲存裝置上似乎還沒有作業系統。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>抹除磁碟</strong><br/>這將會<font color="red">刪除</font>目前選取的儲存裝置所有的資料。 - - 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. - 這個儲存裝置上已經有 %1 了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - - - - No Swap - 沒有 Swap - - - - Reuse Swap - 重用 Swap - - - - Swap (no Hibernate) - Swap(沒有冬眠) - - - - Swap (with Hibernate) - Swap(有冬眠) - - - - Swap to file - Swap 到檔案 - - - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>並存安裝</strong><br/>安裝程式會縮小一個分割區,以讓出空間給 %1。 - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>取代一個分割區</strong><br/>用 %1 取代一個分割區。 - + + 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. + 這個儲存裝置上已經有 %1 了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 + + + 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. 這個儲存裝置上已經有一個作業系統了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 - + 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. 這個儲存裝置上已經有多個作業系統了。您想要怎麼做?<br/>在任何變更套用到儲存裝置上前,您都可以重新檢視並確認您的選擇。 + + + 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/> + 此儲存裝置上已有作業系統,但分割表 <strong>%1</strong> 與需要的 <strong>%2</strong> 不同。<br/> + + + + This storage device has one of its partitions <strong>mounted</strong>. + 此裝置<strong>已掛載</strong>其中一個分割區。 + + + + This storage device is a part of an <strong>inactive RAID</strong> device. + 此儲存裝置是<strong>非作用中 RAID</strong> 裝置的一部份。 + + + + No Swap + 沒有 Swap + + + + Reuse Swap + 重用 Swap + + + + Swap (no Hibernate) + Swap(沒有冬眠) + + + + Swap (with Hibernate) + Swap(有冬眠) + + + + Swap to file + Swap 到檔案 + ClearMountsJob - + + Successfully unmounted %1. + 成功解除掛載 %1。 + + + + Successfully disabled swap %1. + 成功停用 swap %1。 + + + + Successfully cleared swap %1. + 成功清除 swap %1。 + + + + Successfully closed mapper device %1. + 成功關閉對映裝置 %1。 + + + + Successfully disabled volume group %1. + 成功停用捲軸群組 %1。 + + + Clear mounts for partitioning operations on %1 為了準備分割區操作而完全卸載 %1 - + Clearing mounts for partitioning operations on %1. 正在為了準備分割區操作而完全卸載 %1 - + Cleared all mounts for %1 已清除所有與 %1 相關的掛載 @@ -656,22 +723,17 @@ The installer will quit and all changes will be lost. ClearTempMountsJob - + Clear all temporary mounts. 清除所有暫時掛載。 - + Clearing all temporary mounts. 正在清除所有暫時掛載。 - - Cannot get list of temporary mounts. - 無法取得暫時掛載的列表。 - - - + Cleared all temporary mounts. 已清除所有暫時掛載。 @@ -679,18 +741,18 @@ The installer will quit and all changes will be lost. CommandList - - + + Could not run command. 無法執行指令。 - + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. 指令執行於主機環境中,且需要知道根路徑,但根掛載點未定義。 - + The command needs to know the user's name, but no username is defined. 指令需要知道使用者名稱,但是使用者名稱未定義。 @@ -698,100 +760,235 @@ The installer will quit and all changes will be lost. Config - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - 此電腦未滿足安裝 %1 的最低配備。<br/>設定無法繼續。<a href="#details">詳細資訊...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - 此電腦未滿足安裝 %1 的最低配備。<br/>安裝無法繼續。<a href="#details">詳細資訊...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - 此電腦未滿足一些安裝 %1 的推薦需求。<br/>設定可以繼續,但部份功能可能會被停用。 - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - 此電腦未滿足一些安裝 %1 的推薦需求。<br/>安裝可以繼續,但部份功能可能會被停用。 - - - - This program will ask you some questions and set up %2 on your computer. - 本程式會問您一些問題,然後在您的電腦安裝及設定 %2。 - - - - <h1>Welcome to the Calamares setup program for %1.</h1> - <h1>歡迎使用 %1 的 Calamares 安裝程式。</h1> - - - - <h1>Welcome to %1 setup.</h1> - <h1>歡迎使用 %1 安裝程式。</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>歡迎使用 %1 的 Calamares 安裝程式。</h1> - - - - <h1>Welcome to the %1 installer.</h1> - <h1>歡迎使用 %1 安裝程式。</h1> - - - + Set keyboard model to %1.<br/> 設定鍵盤型號為 %1 。<br/> - + Set keyboard layout to %1/%2. 設定鍵盤佈局為 %1/%2 。 - + + Set timezone to %1/%2. + 設定時區為 %1/%2。 + + + The system language will be set to %1. 系統語言會設定為%1。 - + The numbers and dates locale will be set to %1. 數字與日期語系會設定為%1。 - - Set timezone to %1/%2.<br/> - 設定時區為 %1/%2 。<br/> - - - + Network Installation. (Disabled: Incorrect configuration) 網路安裝。(已停用:設定不正確) - + Network Installation. (Disabled: Received invalid groups data) 網路安裝。(已停用:收到無效的群組資料) - - Network Installation. (Disabled: internal error) + + Network Installation. (Disabled: Internal error) 網路安裝。(已停用:內部錯誤) - + + Network Installation. (Disabled: No package list) + 網路安裝。(已停用:無軟體包清單) + + + + Package selection + 軟體包選擇 + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) 網路安裝。(已停用:無法擷取軟體包清單,請檢查您的網路連線) + + + This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> + 此電腦未滿足安裝 %1 的最低配備。<br/>設定無法繼續。<a href="#details">詳細資訊...</a> + + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + 此電腦未滿足安裝 %1 的最低配備。<br/>安裝無法繼續。<a href="#details">詳細資訊...</a> + + + + This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. + 此電腦未滿足一些安裝 %1 的推薦需求。<br/>設定可以繼續,但部份功能可能會被停用。 + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + 此電腦未滿足一些安裝 %1 的推薦需求。<br/>安裝可以繼續,但部份功能可能會被停用。 + + + + This program will ask you some questions and set up %2 on your computer. + 本程式會問您一些問題,然後在您的電腦安裝及設定 %2。 + + + + <h1>Welcome to the Calamares setup program for %1</h1> + <h1>歡迎使用 %1 的 Calamares 安裝程式</h1> + + + + <h1>Welcome to %1 setup</h1> + <h1>歡迎使用 %1 安裝程式</h1> + + + + <h1>Welcome to the Calamares installer for %1</h1> + <h1>歡迎使用 %1 的 Calamares 安裝程式</h1> + + + + <h1>Welcome to the %1 installer</h1> + <h1>歡迎使用 %1 安裝程式</h1> + + + + Your username is too long. + 您的使用者名稱太長了。 + + + + '%1' is not allowed as username. + 「%1」無法作為使用者名稱。 + + + + Your username must start with a lowercase letter or underscore. + 您的使用者名稱必須以小寫字母或底線開頭。 + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 僅允許小寫字母、數字、底線與連接號。 + + + + Your hostname is too short. + 您的主機名稱太短了。 + + + + Your hostname is too long. + 您的主機名稱太長了。 + + + + '%1' is not allowed as hostname. + 「%1」無法作為主機名稱。 + + + + Only letters, numbers, underscore and hyphen are allowed. + 僅允許字母、數字、底線與連接號。 + + + + Your passwords do not match! + 密碼不符! + + + + OK! + 確定! + + + + Setup Failed + 設定失敗 + + + + Installation Failed + 安裝失敗 + + + + The setup of %1 did not complete successfully. + %1 的設定並未成功完成。 + + + + The installation of %1 did not complete successfully. + %1 的安裝並未成功完成。 + + + + Setup Complete + 設定完成 + + + + Installation Complete + 安裝完成 + + + + The setup of %1 is complete. + %1 的設定完成。 + + + + The installation of %1 is complete. + %1 的安裝已完成。 + + + + Package Selection + 軟體包選擇 + + + + Please pick a product from the list. The selected product will be installed. + 請從清單中挑選產品。將會安裝選定的產品。 + + + + Install option: <strong>%1</strong> + 安裝選項:<strong>%1</strong> + + + + None + + + + + Summary + 總覽 + + + + This is an overview of what will happen once you start the setup procedure. + 這是開始安裝後所會發生的事的概覽。 + + + + This is an overview of what will happen once you start the install procedure. + 這是您開始安裝後所會發生的事的概覽。 + ContextualProcessJob - + Contextual Processes Job 情境處理程序工作 @@ -799,100 +996,136 @@ The installer will quit and all changes will be lost. CreatePartitionDialog - + Create a Partition 建立一個分割區 - - MiB - MiB - - - - Partition &Type: - 分割區與類型 (&T): - - - - &Primary - 主要分割區 (&P) - - - - E&xtended - 延伸分割區 (&x) - - - - Fi&le System: - 檔案系統 (&I): - - - - LVM LV name - LVM LV 名稱 - - - - Flags: - 旗標: - - - - &Mount Point: - 掛載點 (&M): - - - + Si&ze: 容量大小 (&z) : - + + MiB + MiB + + + + Partition &Type: + 分割區與類型 (&T): + + + + Primar&y + 基本(&Y) + + + + E&xtended + 延伸分割區 (&x) + + + + Fi&le System: + 檔案系統 (&I): + + + + LVM LV name + LVM LV 名稱 + + + + &Mount Point: + 掛載點 (&M): + + + + Flags: + 旗標: + + + + Label for the filesystem + 檔案系統標籤 + + + + FS Label: + 檔案系統標籤: + + + En&crypt 加密(&C) - + Logical 邏輯磁區 - + Primary 主要磁區 - + GPT GPT - + Mountpoint already in use. Please select another one. 掛載點使用中。請選擇其他的。 + + + Mountpoint must start with a <tt>/</tt>. + 掛載點必須以 <tt>/</tt> 開頭。 + CreatePartitionJob - + + Create new %1MiB partition on %3 (%2) with entries %4. + 在 %3 (%2) 上使用項目 %4 建立新的 %1MiB 分割區。 + + + + Create new %1MiB partition on %3 (%2). + 在 %3 (%2) 上建立新的 %1MiB 分割區。 + + + Create new %2MiB partition on %4 (%3) with file system %1. 使用檔案系統 %1 在 %4 (%3) 建立新的 %2MiB 分割區。 - + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>. + 在 <strong>%3</strong> (%2) 上使用項目 <em>%4</em> 建立新的 <strong>%1MiB</strong> 分割區。 + + + + Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2). + 在 <strong>%3</strong> (%2) 上建立新的 <strong>%1MiB</strong> 分割區。 + + + Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. 使用檔案系統 <strong>%1</strong> 在 <strong>%4</strong> (%3) 建立新的 <strong>%2MiB</strong> 分割區。 - + + Creating new %1 partition on %2. 正在於 %2 建立新的 %1 分割區。 - + The installer failed to create partition on disk '%1'. 安裝程式在磁碟 '%1' 上建立分割區失敗。 @@ -900,27 +1133,27 @@ The installer will quit and all changes will be lost. CreatePartitionTableDialog - + Create Partition Table 建立分割區表格 - + Creating a new partition table will delete all existing data on the disk. 新增一個分割區表格將會刪除硬碟上所有已存在的資料 - + What kind of partition table do you want to create? 您想要建立哪一種分割區表格? - + Master Boot Record (MBR) 主要開機紀錄 (MBR) - + GUID Partition Table (GPT) GUID 分割區表格 (GPT) @@ -928,22 +1161,22 @@ The installer will quit and all changes will be lost. CreatePartitionTableJob - + Create new %1 partition table on %2. 在 %2 上建立新的 %1 分割表。 - + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). 在 <strong>%2</strong> (%3) 上建立新的 <strong>%1</strong> 分割表。 - + Creating new %1 partition table on %2. 正在於 %2 建立新的 %1 分割表。 - + The installer failed to create a partition table on %1. 安裝程式在 %1 上建立分割區表格失敗。 @@ -951,45 +1184,41 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 建立使用者 %1 - + Create user <strong>%1</strong>. 建立使用者 <strong>%1</strong>。 - - Creating user %1. - 正在建立使用者 %1。 + + Preserving home directory + 保留家目錄 - - Sudoers dir is not writable. - Sudoers 目錄不可寫入。 + + + Creating user %1 + 正在建立使用者 %1 - - Cannot create sudoers file for writing. - 無法建立要寫入的 sudoers 檔案。 + + Configuring user %1 + 正在設定使用者 %1 - - Cannot chmod sudoers file. - 無法修改 sudoers 檔案權限。 - - - - Cannot open groups file for reading. - 無法開啟要讀取的 groups 檔案。 + + Setting file permissions + 正在設定檔案權限 CreateVolumeGroupDialog - + Create Volume Group 建立卷冊群組 @@ -997,22 +1226,22 @@ The installer will quit and all changes will be lost. CreateVolumeGroupJob - + Create new volume group named %1. 建立名為 %1 的新卷冊群組。 - + Create new volume group named <strong>%1</strong>. 建立名為 <strong>%1</strong> 的新卷冊群組。 - + Creating new volume group named %1. 正在建立名為 %1 的新卷冊群組。 - + The installer failed to create a volume group named '%1'. 安裝程式建立名為「%1」的新卷冊群組失敗。 @@ -1020,18 +1249,18 @@ The installer will quit and all changes will be lost. DeactivateVolumeGroupJob - - + + Deactivate volume group named %1. 停用名為 %1 的新卷冊群組。 - + Deactivate volume group named <strong>%1</strong>. 停用名為 <strong>%1</strong> 的新卷冊群組。 - + The installer failed to deactivate a volume group named %1. 安裝程式停用名為「%1」的新卷冊群組失敗。 @@ -1039,22 +1268,22 @@ The installer will quit and all changes will be lost. DeletePartitionJob - + Delete partition %1. 刪除分割區 %1。 - + Delete partition <strong>%1</strong>. 刪除分割區 <strong>%1</strong>。 - + Deleting partition %1. 正在刪除分割區 %1。 - + The installer failed to delete partition %1. 安裝程式刪除分割區 %1 失敗。 @@ -1062,46 +1291,46 @@ The installer will quit and all changes will be lost. DeviceInfoWidget - - 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. - 選定的儲存裝置的<strong>分割表</strong>類型。<br><br>變更分割表的唯一方法,就是抹除再重新從頭建立分割表,這會破壞在該儲存裝置所有的資料。<br>除非特別選擇,否則本安裝程式會保留目前的分割表。<br>若不確定,現時的系統建議使用 GPT。 - - - + This device has a <strong>%1</strong> partition table. 此裝置已有 <strong>%1</strong> 分割表。 - + 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. 這是一個 <strong>迴圈</strong> 裝置。<br><br>它是一個沒有分割表,但讓檔案可以被像塊裝置一樣存取的偽裝置。此種設定通常只包含一個單一的檔案系統。 - + 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. 本安裝程式在選定的儲存裝置上<strong>偵測不到分割表</strong>。<br><br>此裝置要不是沒有分割表,就是其分割表已毀損又或者是一個未知類型的分割表。<br>本安裝程式將會為您建立一個新的分割表,不論是自動或是透過手動分割頁面。 - + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. <br><br>這是對 <strong>EFI</strong> 開機環境而言的現代系統建議分割表類型。 - + <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. <br><br>建議這個分割表類型只在以 <strong>BIOS</strong> 開機的舊系統使用。其他大多數情況建議使用 GPT。<br><strong>警告:</strong>MBR 分割表是已過時、源自 MS-DOS 時代的標準。<br>最多只能建立 4 個<em>主要</em>分割區;其中一個可以是<em>延伸</em>分割區,其可以包含許多<em>邏輯</em>分割區。 + + + 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. + 選定的儲存裝置的<strong>分割表</strong>類型。<br><br>變更分割表的唯一方法,就是抹除再重新從頭建立分割表,這會破壞在該儲存裝置所有的資料。<br>除非特別選擇,否則本安裝程式會保留目前的分割表。<br>若不確定,現時的系統建議使用 GPT。 + DeviceModel - + %1 - %2 (%3) device[name] - size[number] (device-node[name]) %1 - %2 (%3) - + %1 - (%2) device[name] - (device-node[name]) %1 - (%2) @@ -1110,17 +1339,17 @@ The installer will quit and all changes will be lost. DracutLuksCfgJob - + Write LUKS configuration for Dracut to %1 為 Dracut 寫入 LUKS 設定到 %1 - + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted 跳過為 Dracut 寫入 LUKS 設定:"/" 分割區未加密 - + Failed to open %1 開啟 %1 失敗 @@ -1128,7 +1357,7 @@ The installer will quit and all changes will be lost. DummyCppJob - + Dummy C++ Job 虛設 C++ 排程 @@ -1136,123 +1365,167 @@ The installer will quit and all changes will be lost. EditExistingPartitionDialog - + Edit Existing Partition 編輯已經存在的分割區 - - Content: - 內容: + + Con&tent: + 內容:(&T) - + &Keep 保留(&K) - + Format 格式化 - + Warning: Formatting the partition will erase all existing data. 警告:格式化該分割區換抹除所有已存在的資料。 - + &Mount Point: 掛載點 (&M): - + Si&ze: 容量大小 (&Z) : - + MiB MiB - + Fi&le System: 檔案系統 (&I): - + Flags: 旗標: - - Mountpoint already in use. Please select another one. - 掛載點使用中。請選擇其他的。 + + Label for the filesystem + 檔案系統標籤 + + + + FS Label: + 檔案系統標籤: EncryptWidget - + Form 形式 - + En&crypt system 加密系統(&C) - + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + 您的系統對加密的支援似乎不夠好,無法加密整個系統。您可以啟用加密,但效能可能會受到影響。 + + + Passphrase 通關密語 - + Confirm passphrase 確認通關密語 - + + Please enter the same passphrase in both boxes. 請在兩個框框中輸入相同的通關密語。 + + ErrorDialog + + + Details: + 詳細資訊: + + + + Would you like to paste the install log to the web? + 想要將安裝紀錄檔貼到網路上嗎? + + FillGlobalStorageJob - + Set partition information 設定分割區資訊 - + + Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> + 在有 <em>%3</em> 功能的<strong>新</strong> %2 系統分割區上安裝 %1 + + + Install %1 on <strong>new</strong> %2 system partition. 在 <strong>新的</strong>系統分割區 %2 上安裝 %1。 - - Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. - 設定 <strong>新的</strong> 不含掛載點 <strong>%1</strong> 的 %2 分割區。 + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>. + 設定有掛載點 <strong>%1</strong> 與 <em>%3</em> 的<strong>新</strong> %2 分割區。 - + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3. + 設定有掛載點 <strong>%1</strong> %3 的<strong>新</strong> %2 分割區。 + + + + Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>. + 在有功能 <em>%4</em> 的 %3 系統分割區 <strong>%1</strong> 上安裝 %2。 + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>. + 為分割區 %3 <strong>%1</strong> 設定掛載點 <strong>%2</strong> 與功能 <em>%4</em>。 + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4. + 為分割區 %3 <strong>%1</strong> 設定掛載點 <strong>%2</strong> %4。 + + + Install %2 on %3 system partition <strong>%1</strong>. 在 %3 系統分割區 <strong>%1</strong> 上安裝 %2。 - - Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. - 為分割區 %3 <strong>%1</strong> 設定掛載點 <strong>%2</strong>。 - - - + Install boot loader on <strong>%1</strong>. 安裝開機載入器於 <strong>%1</strong>。 - + Setting up mount points. 正在設定掛載點。 @@ -1260,93 +1533,81 @@ The installer will quit and all changes will be lost. FinishedPage - + Form 型式 - + &Restart now 現在重新啟動 (&R) - + <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. <h1>都完成了。</h1><br/>%1 已經在您的電腦上設定好了。<br/>您現在可能會想要開始使用您的新系統。 - + <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> <html><head/><body><p>當這個勾選框被選取時,您的系統將會在按下<span style="font-style:italic;">完成</span>或關閉設定程式時立刻重新啟動。</p></body></html> - + <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. <h1>都完成了。</h1><br/>%1 已經安裝在您的電腦上了。<br/>您現在可能會想要重新啟動到您的新系統中,或是繼續使用 %2 Live 環境。 - + <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> <html><head/><body><p>當這個勾選框被選取時,您的系統將會在按下<span style="font-style:italic;">完成</span>或關閉安裝程式時立刻重新啟動。</p></body></html> - + <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2. <h1>設定失敗</h1><br/>%1 並未在您的電腦設定好。<br/>錯誤訊息為:%2。 - + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. <h1>安裝失敗</h1><br/>%1 並未安裝到您的電腦上。<br/>錯誤訊息為:%2。 - FinishedViewStep + FinishedQmlViewStep - + Finish 完成 + + + FinishedViewStep - - Setup Complete - 設定完成 - - - - Installation Complete - 安裝完成 - - - - The setup of %1 is complete. - %1 的設定完成。 - - - - The installation of %1 is complete. - %1 的安裝已完成。 + + Finish + 完成 FormatPartitionJob - + Format partition %1 (file system: %2, size: %3 MiB) on %4. 格式化分割區 %1(檔案系統:%2,大小:%3 MiB)在 %4。 - + Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. 格式化 <strong>%3MiB</strong> 分割區 <strong>%1</strong>,使用檔案系統 <strong>%2</strong>。 - + Formatting partition %1 with file system %2. 正在以 %2 檔案系統格式化分割區 %1。 - + The installer failed to format partition %1 on disk '%2'. 安裝程式格式化在磁碟 '%2' 上的分割區 %1 失敗。 @@ -1354,72 +1615,72 @@ The installer will quit and all changes will be lost. GeneralRequirements - + has at least %1 GiB available drive space 有至少 %1 GiB 的可用磁碟空間 - + There is not enough drive space. At least %1 GiB is required. 沒有足夠的磁碟空間。至少需要 %1 GiB。 - + has at least %1 GiB working memory 有至少 %1 GiB 的可用記憶體 - + The system does not have enough working memory. At least %1 GiB is required. 系統沒有足夠的記憶體。至少需要 %1 GiB。 - + is plugged in to a power source 已插入外接電源 - + The system is not plugged in to a power source. 系統未插入外接電源。 - + is connected to the Internet 已連上網際網路 - + The system is not connected to the Internet. 系統未連上網際網路 - + is running the installer as an administrator (root) 以管理員 (root) 權限執行安裝程式 - + The setup program is not running with administrator rights. 設定程式並未以管理員權限執行。 - + The installer is not running with administrator rights. 安裝程式並未以管理員權限執行。 - + has a screen large enough to show the whole installer 螢幕夠大,可以顯示整個安裝程式 - + The screen is too small to display the setup program. 螢幕太小了,沒辦法顯示設定程式。 - + The screen is too small to display the installer. 螢幕太小了,沒辦法顯示安裝程式。 @@ -1427,7 +1688,7 @@ The installer will quit and all changes will be lost. HostInfoJob - + Collecting information about your machine. 正在蒐集關於您機器的資訊。 @@ -1435,25 +1696,25 @@ The installer will quit and all changes will be lost. IDJob - - + + + - OEM Batch Identifier OEM 批次識別記號 - + Could not create directories <code>%1</code>. 無法建立目錄 <code>%1</code>。 - + Could not open file <code>%1</code>. 無法開啟檔案 <code>%1</code>。 - + Could not write to file <code>%1</code>. 無法寫入至檔案 <code>%1</code>。 @@ -1461,7 +1722,7 @@ The installer will quit and all changes will be lost. InitcpioJob - + Creating initramfs with mkinitcpio. 正在使用 mkinitcpio 建立 initramfs。 @@ -1469,7 +1730,7 @@ The installer will quit and all changes will be lost. InitramfsJob - + Creating initramfs. 正在建立 initramfs。 @@ -1477,17 +1738,17 @@ The installer will quit and all changes will be lost. InteractiveTerminalPage - + Konsole not installed 未安裝 Konsole - + Please install KDE Konsole and try again! 請安裝 KDE Konsole 並再試一次! - + Executing script: &nbsp;<code>%1</code> 正在執行指令稿:&nbsp;<code>%1</code> @@ -1495,28 +1756,15 @@ The installer will quit and all changes will be lost. InteractiveTerminalViewStep - + Script 指令稿 - - KeyboardPage - - - Set keyboard model to %1.<br/> - 設定鍵盤型號為 %1 。<br/> - - - - Set keyboard layout to %1/%2. - 設定鍵盤佈局為 %1/%2 。 - - KeyboardQmlViewStep - + Keyboard 鍵盤 @@ -1524,7 +1772,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard 鍵盤 @@ -1532,65 +1780,88 @@ The installer will quit and all changes will be lost. LCLocaleDialog - + System locale setting 系統語系設定 - + 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>. 系統語系設定會影響部份命令列使用者介面的語言及字元集。<br/>目前的設定為 <strong>%1</strong>。 - + &Cancel 取消(&C) - + &OK 確定(&O) + + LOSHJob + + + Configuring encrypted swap. + 正在設定已加密的 swap。 + + + + No target system available. + 沒有可用的目標系統。 + + + + No rootMountPoint is set. + 未設定 rootMountPoint。 + + + + No configFilePath is set. + 未設定 configFilePath。 + + LicensePage - + Form 表單 - + <h1>License Agreement</h1> <h1>授權條款</h1> - + I accept the terms and conditions above. 我接受上述的條款與條件。 - + Please review the End User License Agreements (EULAs). 請審閱終端使用者授權條款 (EULAs)。 - + This setup procedure will install proprietary software that is subject to licensing terms. 此設定過程將會安裝需要同意其授權條款的專有軟體。 - + If you do not agree with the terms, the setup procedure cannot continue. 如果您不同意此條款,安裝程序就無法繼續。 - + This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. 此設定過程會安裝需要同意授權條款的專有軟體以提供附加功能並強化使用者體驗。 - + If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. 如果您不同意條款,就不會安裝專有軟體,而將會使用開放原始碼的替代方案。 @@ -1598,7 +1869,7 @@ The installer will quit and all changes will be lost. LicenseViewStep - + License 授權條款 @@ -1606,109 +1877,102 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL:%1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 驅動程式</strong><br/>由 %2 所提供 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 顯示卡驅動程式</strong><br/><font color="Grey">由 %2 所提供</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 瀏覽器外掛程式</strong><br/><font color="Grey">由 %2 所提供</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 編解碼器</strong><br/><font color="Grey">由 %2 所提供</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 軟體包</strong><br/><font color="Grey">由 %2 所提供</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">由 %2 所提供</font> - + File: %1 檔案:%1 - + + Hide license text + 隱藏授權條款文字 + + + Show the license text 顯示授權條款文字 - + Open license agreement in browser. 在瀏覽器中開啟授權條款文字。 - - - Hide license text - 隱藏授權條款文字 - LocalePage - - The system language will be set to %1. - 系統語言會設定為%1。 - - - - The numbers and dates locale will be set to %1. - 數字與日期語系會設定為%1。 - - - + Region: 地區 - + Zone: 時區 - - + + &Change... 變更...(&C) - - - Set timezone to %1/%2.<br/> - 設定時區為 %1/%2 。<br/> - LocaleQmlViewStep - + Location 位置 + + LocaleTests + + + Quit + 結束 + + LocaleViewStep - + Location 位置 @@ -1716,35 +1980,35 @@ The installer will quit and all changes will be lost. LuksBootKeyFileJob - + Configuring LUKS key file. 正在設定 LUKS 金鑰檔案。 - - + + No partitions are defined. 沒有已定義的分割區。 - - - + + + Encrypted rootfs setup error 已加密的 rootfs 設定錯誤 - + Root partition %1 is LUKS but no passphrase has been set. 根分割區 %1 為 LUKS 但沒有設定密碼。 - + Could not create LUKS key file for root partition %1. 無法為根分割區 %1 建立 LUKS 金鑰檔。 - + Could not configure LUKS key file on partition %1. 無法於分割區 %1 設定 LUKS 金鑰檔。 @@ -1752,116 +2016,132 @@ The installer will quit and all changes will be lost. MachineIdJob - + Generate machine-id. 生成 machine-id。 - + Configuration Error 設定錯誤 - + No root mount point is set for MachineId. 未為 MachineId 設定根掛載點。 + + Map + + + Timezone: %1 + 時區:%1 + + + + 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. + 請在地圖上選取您的偏好位置,這樣安裝程式就可以為您建議 + 語系與時區。您可以在下面微調建議的設定。透過拖曳來移動地圖, + 並使用 +/- 按鈕來縮放,或是使用滑鼠滾輪來縮放。 + + NetInstallViewStep - - + Package selection 軟體包選擇 - + Office software 辦公軟體 - + Office package 辦公套件 - + Browser software 瀏覽器軟體 - + Browser package 瀏覽器套件 - + Web browser 網頁瀏覽器 - + Kernel 內核 - + Services 服務 - + Login 登入 - + Desktop 桌面 - + Applications 應用程式 - + Communication 通訊 - + Development 開發 - + Office - 辦公室 + 辦公 - + Multimedia 多媒體 - + Internet 網際網路 - + Theming 主題 - + Gaming 遊戲 - + Utilities 實用工具 @@ -1869,7 +2149,7 @@ The installer will quit and all changes will be lost. NotesQmlViewStep - + Notes 記事 @@ -1877,17 +2157,17 @@ The installer will quit and all changes will be lost. OEMPage - + Ba&tch: 批次:(&T) - + <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> <html><head/><body><p>在此輸入批次識別記號。這將會儲存在目標系統中。</p></body></html> - + <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> <html><head/><body><h1>OEM 設定</h1><p>在設定目標系統時,Calamares 將會使用 OEM 設定。</p></body></html> @@ -1895,260 +2175,308 @@ The installer will quit and all changes will be lost. OEMViewStep - + OEM Configuration OEM 設定 - + Set the OEM Batch Identifier to <code>%1</code>. 設定 OEM 批次識別符號為 <code>%1</code>。 + + Offline + + + Select your preferred Region, or use the default settings. + 選取您偏好的區域,或是使用預設設定。 + + + + + + Timezone: %1 + 時區:%1 + + + + Select your preferred Zone within your Region. + 在您的區域中選取您偏好的時區。 + + + + Zones + 時區 + + + + You can fine-tune Language and Locale settings below. + 您可以在下方微調語言與語系設定。 + + PWQ - + Password is too short 密碼太短 - + Password is too long 密碼太長 - + Password is too weak 密碼太弱 - + Memory allocation error when setting '%1' 當設定「%1」時記憶體分配錯誤 - + Memory allocation error 記憶體分配錯誤 - + The password is the same as the old one 密碼與舊的相同 - + The password is a palindrome 此密碼為迴文 - + The password differs with case changes only 密碼僅大小寫不同 - + The password is too similar to the old one 密碼與舊的太過相似 - + The password contains the user name in some form 密碼包含某種形式的使用者名稱 - + The password contains words from the real name of the user in some form 密碼包含了某種形式的使用者真實姓名 - + The password contains forbidden words in some form 密碼包含了某種形式的無效文字 - - The password contains less than %1 digits - 密碼中的數字少於 %1 個 - - - + The password contains too few digits 密碼包含的數字太少了 - - The password contains less than %1 uppercase letters - 密碼包含少於 %1 個大寫字母 - - - + The password contains too few uppercase letters 密碼包含的大寫字母太少了 - - - The password contains less than %1 lowercase letters - 密碼包含少於 %1 個小寫字母 + + + The password contains fewer than %n lowercase letters + + 密碼中僅有少於 %n 個小寫字母 + - + The password contains too few lowercase letters 密碼包含的小寫字母太少了 - - The password contains less than %1 non-alphanumeric characters - 密碼包含了少於 %1 個非字母與數字的字元 - - - + The password contains too few non-alphanumeric characters 密碼包含的非字母與數字的字元太少了 - - The password is shorter than %1 characters - 密碼短於 %1 個字元 - - - + The password is too short 密碼太短 - - The password is just rotated old one - 密碼只是輪換過的舊密碼 - - - - The password contains less than %1 character classes - 密碼包含了少於 %1 種字元類型 - - - + The password does not contain enough character classes 密碼未包含足夠的字元類型 - - The password contains more than %1 same characters consecutively - 密碼包含了連續超過 %1 個相同字元 - - - + The password contains too many same characters consecutively 密碼包含連續太多個相同的字元 - - The password contains more than %1 characters of the same class consecutively - 密碼包含了連續多於 %1 個相同的字元類型 - - - + The password contains too many characters of the same class consecutively 密碼包含了連續太多相同類型的字元 - - - The password contains monotonic sequence longer than %1 characters - 密碼包含了長度超過 %1 個字元的單調序列 + + + The password contains fewer than %n digits + + 密碼中僅有少於 %n 位數字 + + + + + The password contains fewer than %n uppercase letters + + 密碼中僅有少於 %n 個大寫字母 + + + + + The password contains fewer than %n non-alphanumeric characters + + 密碼中僅有少於 %n 個非字母字元 + + + + + The password is shorter than %n characters + + 密碼短於 %n 個字元 + - + + The password is a rotated version of the previous one + 密碼是上一個密碼的輪換版本 + + + + The password contains fewer than %n character classes + + 密碼中僅有少於 %n 種字元類型 + + + + + The password contains more than %n same characters consecutively + + 密碼中包含了 %n 個連續的相同字元 + + + + + The password contains more than %n characters of the same class consecutively + + 密碼中包含了 %n 個連續的相同類型字元 + + + + + The password contains monotonic sequence longer than %n characters + + 密碼包含了長度超過 %n 個字元的單調序列 + + + + The password contains too long of a monotonic character sequence 密碼包含了長度過長的單調字元序列 - + No password supplied 未提供密碼 - + Cannot obtain random numbers from the RNG device 無法從 RNG 裝置中取得隨機數 - + Password generation failed - required entropy too low for settings 密碼生成失敗,設定的必要熵太低 - + The password fails the dictionary check - %1 密碼在字典檢查時失敗 - %1 - + The password fails the dictionary check 密碼在字典檢查時失敗 - + Unknown setting - %1 未知的設定 - %1 - + Unknown setting 未知的設定 - + Bad integer value of setting - %1 整數值設定不正確 - %1 - + Bad integer value 整數值不正確 - + Setting %1 is not of integer type 設定 %1 不是整數類型 - + Setting is not of integer type 設定不是整數類型 - + Setting %1 is not of string type 設定 %1 不是字串類型 - + Setting is not of string type 設定不是字串類型 - + Opening the configuration file failed 開啟設定檔失敗 - + The configuration file is malformed 設定檔格式不正確 - + Fatal failure 無法挽回的失敗 - + Unknown error 未知的錯誤 - + Password is empty 密碼為空 @@ -2156,40 +2484,48 @@ The installer will quit and all changes will be lost. PackageChooserPage - + Form 形式 - + Product Name 產品名稱 - + TextLabel 文字標籤 - + Long Product Description 較長的產品描述 - + Package Selection 軟體包選擇 - + Please pick a product from the list. The selected product will be installed. 請從清單中挑選產品。將會安裝選定的產品。 + + PackageChooserQmlViewStep + + + Packages + 軟體包 + + PackageChooserViewStep - + Packages 軟體包 @@ -2197,12 +2533,12 @@ The installer will quit and all changes will be lost. PackageModel - + Name 名稱 - + Description 描述 @@ -2210,17 +2546,17 @@ The installer will quit and all changes will be lost. Page_Keyboard - + Form Form - + Keyboard Model: 鍵盤型號: - + Type here to test your keyboard 在此輸入以測試您的鍵盤 @@ -2228,96 +2564,96 @@ The installer will quit and all changes will be lost. Page_UserSetup - + Form Form - + What is your name? 該如何稱呼您? - - What name do you want to use to log in? - 您想使用何種登入名稱? - - - - Choose a password to keep your account safe. - 輸入密碼以確保帳號的安全性。 - - - - - <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> - <small>輸入同一個密碼兩次,以檢查輸入錯誤。一個好的密碼包含了字母、數字及標點符號的組合、至少八個字母長,且按一固定週期更換。</small> - - - - What is the name of this computer? - 這部電腦的名字是? - - - + Your Full Name 您的全名 - + + What name do you want to use to log in? + 您想使用何種登入名稱? + + + login 登入 - + + What is the name of this computer? + 這部電腦的名字是? + + + <small>This name will be used if you make the computer visible to others on a network.</small> <small>若您將此電腦設定為讓網路上的其他電腦可見時將會使用此名稱。</small> - + Computer Name 電腦名稱 - - + + Choose a password to keep your account safe. + 輸入密碼以確保帳號的安全性。 + + + + + <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> + <small>輸入同一個密碼兩次,以檢查輸入錯誤。一個好的密碼包含了字母、數字及標點符號的組合、至少八個字母長,且按一固定週期更換。</small> + + + + Password 密碼 - - + + Repeat Password 確認密碼 - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. 當此勾選框被勾選,密碼強度檢查即完成,您也無法再使用弱密碼。 - + Require strong passwords. 需要強密碼。 - + Log in automatically without asking for the password. 不詢問密碼自動登入。 - + Use the same password for the administrator account. 為管理員帳號使用同樣的密碼。 - + Choose a password for the administrator account. 替系統管理員帳號設定一組密碼 - - + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> <small>輸入同樣的密碼兩次,這樣可以檢查輸入錯誤。</small> @@ -2325,42 +2661,42 @@ The installer will quit and all changes will be lost. PartitionLabelsView - + Root 根目錄 - + Home 家目錄 - + Boot Boot - + EFI system EFI 系統 - + Swap Swap - + New partition for %1 %1 的新分割區 - + New partition 新分割區 - + %1 %2 size[number] filesystem[name] %1 %2 @@ -2369,34 +2705,39 @@ The installer will quit and all changes will be lost. PartitionModel - - + + Free Space 剩餘空間 - - + + New partition 新分割區 - + Name 名稱 - + File System 檔案系統 - + + File System Label + 檔案系統標籤 + + + Mount Point 掛載點 - + Size 大小 @@ -2404,77 +2745,77 @@ The installer will quit and all changes will be lost. PartitionPage - + Form Form - + Storage de&vice: 儲存裝置(&V): - + &Revert All Changes 將所有變更恢復原狀 (&R) - + New Partition &Table 新的分割表格 (&T) - + Cre&ate 建立(&A) - + &Edit 編輯 (&E) - + &Delete 刪除 (&D) - + New Volume Group 新卷冊群組 - + Resize Volume Group 調整卷冊群組大小 - + Deactivate Volume Group 停用卷冊群組 - + Remove Volume Group 移除卷冊群組 - + I&nstall boot loader on: 安裝開機管理程式於: - + Are you sure you want to create a new partition table on %1? 您是否確定要在 %1 上建立一個新的分割區表格? - + Can not create new partition 無法建立新分割區 - + 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. 在 %1 上的分割表已有 %2 個主要分割區,無法再新增。請移除一個主要分割區並新增一個延伸分割區。 @@ -2482,117 +2823,107 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... 蒐集系統資訊中... - + Partitions 分割區 - - Install %1 <strong>alongside</strong> another operating system. - 將 %1 安裝在其他作業系統<strong>旁邊</strong>。 + + Unsafe partition actions are enabled. + 啟用了不安全的分割動作。 - - <strong>Erase</strong> disk and install %1. - <strong>抹除</strong>磁碟並安裝 %1。 + + Partitioning is configured to <b>always</b> fail. + 分割被設定為<b>一律</b>失敗。 - - <strong>Replace</strong> a partition with %1. - 以 %1 <strong>取代</strong>一個分割區。 + + No partitions will be changed. + 不會更動任何分割區。 - - <strong>Manual</strong> partitioning. - <strong>手動</strong>分割 - - - - Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - 將 %1 安裝在磁碟 <strong>%2</strong> (%3) 上的另一個作業系統<strong>旁邊</strong>。 - - - - <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <strong>抹除</strong> 磁碟 <strong>%2</strong> (%3) 並且安裝 %1。 - - - - <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - 以 %1 <strong>取代</strong> 一個在磁碟 <strong>%2</strong> (%3) 上的分割區。 - - - - <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - 在磁碟 <strong>%1</strong> (%2) 上<strong>手動</strong>分割。 - - - - Disk <strong>%1</strong> (%2) - 磁碟 <strong>%1</strong> (%2) - - - + Current: 目前: - + After: 之後: - + No EFI system partition configured 未設定 EFI 系統分割區 - - 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>esp</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. - 需要 EFI 系統分割區以啟動 %1。<br/><br/>要設定 EFI 系統分割區,回到上一步並選取或建立一個包含啟用 <strong>esp</strong> 旗標以及掛載點位於 <strong>%2</strong> 的 FAT32 檔案系統。<br/><br/>您也可以不設定 EFI 系統分割區並繼續,但是您的系統可能會無法啟動。 + + EFI system partition configured incorrectly + EFI 系統分割區設定不正確 - - EFI system partition flag not set - 未設定 EFI 系統分割區旗標 + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem. + 要啟動 %1 必須要有 EFI 系統分割區。<br/><br/>要設定 EFI 系統分割區,返回並選取或建立適合的檔案系統。 - - An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</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. - 需要 EFI 系統分割區以啟動 %1。<br/><br/>有一個分割區的掛載點設定為 <strong>%2</strong>,但未設定 <strong>esp</strong> 旗標。<br/>要設定此旗標,回到上一步並編輯分割區。<br/><br/>您也可以不設定旗標並繼續,但您的系統可能會無法啟動。 + + The filesystem must be mounted on <strong>%1</strong>. + 檔案系統必須掛載於 <strong>%1</strong>。 - + + The filesystem must have type FAT32. + 檔案系統必須有類型 FAT32。 + + + + The filesystem must be at least %1 MiB in size. + 檔案系統必須至少有 %1 MiB 的大小。 + + + + The filesystem must have flag <strong>%1</strong> set. + 檔案系統必須有旗標 <strong>%1</strong> 設定。 + + + + You can continue without setting up an EFI system partition but your system may fail to start. + 您可以在不設定 EFI 系統分割區的情況下繼續,但您的系統可能無法啟動。 + + + Option to use GPT on BIOS 在 BIOS 上使用 GPT 的選項 - - 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. - GPT 分割表對所有系統都是最佳選項。此安裝程式同時也支援 BIOS 系統。<br/><br/>要在 BIOS 上設定 GPT 分割表,(如果還沒有完成的話)請回上一步並將分割表設定為 GPT,然後建立 8 MB 的未格式化分割區,並啟用 <strong>bios_grub</strong> 旗標。<br/>要在 BIOS 系統上使用 GPT 分割區啟動 %1 則必須使用未格式化的 8MB 分割區。 + + 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>%2</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. + GPT 分割表對所有系統都是最佳選項。此安裝程式同時也支援 BIOS 系統。<br/><br/>要在 BIOS 上設定 GPT 分割表,(如果還沒有完成的話)請回上一步並將分割表設定為 GPT,然後建立 8 MB 的未格式化分割區,並啟用 <strong>%2</strong> 旗標。<br/><br/>要在 BIOS 系統上使用 GPT 分割區啟動 %1 則必須使用未格式化的 8MB 分割區。 - + Boot partition not encrypted 開機分割區未加密 - + 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. 設定了單獨的開機分割區以及加密的根分割區,但是開機分割區並不會被加密。<br/><br/>這種設定可能會造成安全問題,因為重要的系統檔案是放在未加密的分割區中。<br/>您也可以繼續,但是檔案系統的解鎖會在系統啟動後才發生。<br/>要加密開機分割區,回到上一頁並重新建立它,並在分割區建立視窗選取<strong>加密</strong>。 - + has at least one disk device available. 有至少一個可用的磁碟裝置。 - + There are no partitions to install on. 沒有可用於安裝的分割區。 @@ -2600,13 +2931,13 @@ The installer will quit and all changes will be lost. PlasmaLnfJob - + Plasma Look-and-Feel Job Plasma 外觀與感覺工作 - - + + Could not select KDE Plasma Look-and-Feel package 無法選取 KDE Plasma 外觀與感覺軟體包 @@ -2614,17 +2945,17 @@ The installer will quit and all changes will be lost. PlasmaLnfPage - + Form 形式 - + 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. 請為 KDE Plasma 桌面選擇外觀與感覺。您也可以跳過此步驟並在系統設定好之後再設定。在外觀與感覺小節點按將會給您特定外觀與感覺的即時預覽。 - + 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. 請為 KDE Plasma 桌面選擇外觀與感覺。您也可以跳過此步驟並在系統安裝好之後再設定。在外觀與感覺小節點按將會給您特定外觀與感覺的即時預覽。 @@ -2632,7 +2963,7 @@ The installer will quit and all changes will be lost. PlasmaLnfViewStep - + Look-and-Feel 外觀與感覺 @@ -2640,17 +2971,17 @@ The installer will quit and all changes will be lost. PreserveFiles - + Saving files for later ... 稍後儲存檔案…… - + No files configured to save for later. 沒有檔案被設定為稍後儲存。 - + Not all of the configured files could be preserved. 並非所有已設定的檔案都可以被保留。 @@ -2658,14 +2989,14 @@ The installer will quit and all changes will be lost. ProcessResult - + There was no output from the command. 指令沒有輸出。 - + Output: @@ -2674,52 +3005,52 @@ Output: - + External command crashed. 外部指令當機。 - + Command <i>%1</i> crashed. 指令 <i>%1</i> 已當機。 - + External command failed to start. 外部指令啟動失敗。 - + Command <i>%1</i> failed to start. 指令 <i>%1</i> 啟動失敗。 - + Internal error when starting command. 當啟動指令時發生內部錯誤。 - + Bad parameters for process job call. 呼叫程序的參數無效。 - + External command failed to finish. 外部指令結束失敗。 - + Command <i>%1</i> failed to finish in %2 seconds. 指令 <i>%1</i> 在結束 %2 秒內失敗。 - + External command finished with errors. 外部指令結束時發生錯誤。 - + Command <i>%1</i> finished with exit code %2. 指令 <i>%1</i> 結束時有錯誤碼 %2。 @@ -2727,89 +3058,95 @@ Output: QObject - - Default Keyboard Model - 預設鍵盤型號 - - - - - Default - 預設值 - - - - unknown - 未知 - - - - extended - 延伸分割區 - - - - unformatted - 未格式化 - - - - swap - swap - - - - Unpartitioned space or unknown partition table - 尚未分割的空間或是不明的分割表 - - - - (no mount point) - (沒有掛載點) - - - - Requirements checking for module <i>%1</i> is complete. - 模組 <i>%1</i> 需求檢查完成。 - - - + %1 (%2) %1 (%2) - - No product - 沒有產品 + + unknown + 未知 - - No description provided. - 未提供描述。 + + extended + 延伸分割區 - - - - + + unformatted + 未格式化 + + + + swap + swap + + + + + Default + 預設值 + + + + + + File not found 找不到檔案 - + Path <pre>%1</pre> must be an absolute path. 路徑 <pre>%1</pre> 必須為絕對路徑。 - + + Directory not found + 找不到目錄 + + + + Could not create new random file <pre>%1</pre>. 無法建立新的隨機檔案 <pre>%1</pre>。 + + + No product + 沒有產品 + + + + No description provided. + 未提供描述。 + + + + (no mount point) + (沒有掛載點) + + + + Unpartitioned space or unknown partition table + 尚未分割的空間或是不明的分割表 + + + + Recommended + + + <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> + <p>此電腦未滿足部份安裝 %1 的建議系統需求。<br/> + 可以繼續安裝,但某些功能可能會被停用。</p> + RemoveUserJob - + Remove live user from target system 從目標系統移除 live 使用者 @@ -2817,18 +3154,18 @@ Output: RemoveVolumeGroupJob - - + + Remove Volume Group named %1. 移除名為 %1 的卷冊群組。 - + Remove Volume Group named <strong>%1</strong>. 移除名為 <strong>%1</strong> 的卷冊群組。 - + The installer failed to remove a volume group named '%1'. 安裝程式移除名為「%1」的新卷冊群組失敗。 @@ -2836,143 +3173,160 @@ Output: ReplaceWidget - + Form 表單 - + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. 選取要在哪裡安裝 %1。<br/><font color="red">警告:</font>這將會刪除所有在選定分割區中的檔案。 - + The selected item does not appear to be a valid partition. 選定的項目似乎不是一個有效的分割區。 - + %1 cannot be installed on empty space. Please select an existing partition. %1 無法在空白的空間中安裝。請選取一個存在的分割區。 - + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. %1 無法在延伸分割區上安裝。請選取一個存在的主要或邏輯分割區。 - + %1 cannot be installed on this partition. %1 無法在此分割區上安裝。 - + Data partition (%1) 資料分割區 (%1) - + Unknown system partition (%1) 不明的系統分割區 (%1) - + %1 system partition (%2) %1 系統分割區 (%2) - + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. <strong>%4</strong><br/><br/>分割區 %1 對 %2 來說太小了。請選取一個容量至少有 %3 GiB 的分割區。 - + <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. <strong>%2</strong><br/><br/>在這個系統找不到 EFI 系統分割區。請回到上一步並使用手動分割以設定 %1。 - - - + + + <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. <strong>%3</strong><br/><br/>%1 將會安裝在 %2。<br/><font color="red">警告:</font>所有在分割區 %2 的資料都會消失。 - + The EFI system partition at %1 will be used for starting %2. 在 %1 的 EFI 系統分割區將會在開始 %2 時使用。 - + EFI system partition: EFI 系統分割區: + + Requirements + + + <p>This computer does not satisfy the minimum requirements for installing %1.<br/> + Installation cannot continue.</p> + <p>此電腦未滿足安裝 %1 的最低系統需求。<br/> + 無法繼˙續安裝。</p> + + + + <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> + <p>此電腦未滿足部份安裝 %1 的建議系統需求。<br/> + 可以繼續安裝,但某些功能可能會被停用。</p> + + ResizeFSJob - + Resize Filesystem Job 調整檔案系統大小工作 - + Invalid configuration 無效的設定 - + The file-system resize job has an invalid configuration and will not run. 檔案系統調整大小工作有無效的設定且將不會執行。 - + KPMCore not Available KPMCore 未提供 - + Calamares cannot start KPMCore for the file-system resize job. Calamares 無法啟動 KPMCore 來進行調整檔案系統大小的工作。 - - - - - + + + + + Resize Failed 調整大小失敗 - + The filesystem %1 could not be found in this system, and cannot be resized. 檔案系統 %1 在此系統中找不到,且無法調整大小。 - + The device %1 could not be found in this system, and cannot be resized. 裝置 %1 在此系統中找不到,且無法調整大小。 - - + + The filesystem %1 cannot be resized. 檔案系統 %1 無法調整大小。 - - + + The device %1 cannot be resized. 裝置 %1 無法調整大小。 - + The filesystem %1 must be resized, but cannot. 檔案系統 %1 必須調整大小,但是無法調整。 - + The device %1 must be resized, but cannot 裝置 %1 必須調整大小,但是無法調整。 @@ -2980,22 +3334,22 @@ Output: ResizePartitionJob - + Resize partition %1. 調整分割區 %1 大小。 - + Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>. 調整 <strong>%2MiB</strong> 分割區 <strong>%1</strong> 大小為 <strong>%3MiB</strong>。 - + Resizing %2MiB partition %1 to %3MiB. 正在調整 %2MiB 分割區 %1 大小為 %3MiB。 - + The installer failed to resize partition %1 on disk '%2'. 安裝程式調整在磁碟 '%2' 上的分割區 %1 的大小失敗。 @@ -3003,7 +3357,7 @@ Output: ResizeVolumeGroupDialog - + Resize Volume Group 調整卷冊群組大小 @@ -3011,18 +3365,18 @@ Output: ResizeVolumeGroupJob - - + + Resize volume group named %1 from %2 to %3. 調整名為 %1 的卷冊群組從 %2 到 %3。 - + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. 調整名為 <strong>%1</strong> 的卷冊群組從 <strong>%2</strong> 到 <strong>%3</strong>。 - + The installer failed to resize a volume group named '%1'. 安裝程式對名為「%1」的新卷冊群組調整大小失敗。 @@ -3030,53 +3384,25 @@ Output: ResultsListDialog - + For best results, please ensure that this computer: 為了得到最佳的結果,請確保此電腦: - + System requirements 系統需求 - - ResultsListWidget - - - This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - 此電腦未滿足安裝 %1 的最低配備。<br/>設定無法繼續。<a href="#details">詳細資訊...</a> - - - - This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - 此電腦未滿足安裝 %1 的最低配備。<br/>安裝無法繼續。<a href="#details">詳細資訊...</a> - - - - This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - 此電腦未滿足一些安裝 %1 的推薦需求。<br/>設定可以繼續,但部份功能可能會被停用。 - - - - This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - 此電腦未滿足一些安裝 %1 的推薦需求。<br/>安裝可以繼續,但部份功能可能會被停用。 - - - - This program will ask you some questions and set up %2 on your computer. - 本程式會問您一些問題,然後在您的電腦安裝及設定 %2。 - - ScanningDialog - + Scanning storage devices... 正在掃描儲存裝置... - + Partitioning 分割 @@ -3084,29 +3410,29 @@ Output: SetHostNameJob - + Set hostname %1 設定主機名 %1 - + Set hostname <strong>%1</strong>. 設定主機名稱 <strong>%1</strong>。 - + Setting hostname %1. 正在設定主機名稱 %1。 + - Internal Error 內部錯誤 - - + + Cannot write hostname to target system 無法寫入主機名稱到目標系統 @@ -3114,29 +3440,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 將鍵盤型號設定為 %1,佈局為 %2-%3 - + Failed to write keyboard configuration for the virtual console. 為虛擬終端機寫入鍵盤設定失敗。 - - - + + + Failed to write to %1 寫入到 %1 失敗 - + Failed to write keyboard configuration for X11. 為 X11 寫入鍵盤設定失敗。 - + Failed to write keyboard configuration to existing /etc/default directory. 寫入鍵盤設定到已存在的 /etc/default 目錄失敗。 @@ -3144,82 +3470,82 @@ Output: SetPartFlagsJob - + Set flags on partition %1. 設定分割區 %1 的旗標。 - + Set flags on %1MiB %2 partition. 設定 %1MiB %2 分割區的旗標。 - + Set flags on new partition. 設定新分割區的旗標。 - + Clear flags on partition <strong>%1</strong>. 清除分割區 <strong>%1</strong> 的旗標。 - + Clear flags on %1MiB <strong>%2</strong> partition. 清除 %1MiB <strong>%2</strong> 分割區的旗標。 - - Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. - 將 %1MiB <strong>%2</strong> 分割區標記為 <strong>%3</strong>。 - - - - Clearing flags on %1MiB <strong>%2</strong> partition. - 正在清除 %1MiB <strong>%2</strong> 分割區的旗標。 - - - - Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. - 正在設定 %1MiB <strong>%2</strong> 分割區的 <strong>%3</strong> 旗標。 - - - + Clear flags on new partition. 清除新分割區的旗標。 - + Flag partition <strong>%1</strong> as <strong>%2</strong>. 設定分割區 <strong>%1</strong> 的旗標為 <strong>%2</strong>。 - + + Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>. + 將 %1MiB <strong>%2</strong> 分割區標記為 <strong>%3</strong>。 + + + Flag new partition as <strong>%1</strong>. 設定新分割區的旗標為 <strong>%1</strong>。 - + Clearing flags on partition <strong>%1</strong>. 正在清除分割區 <strong>%1</strong> 的旗標。 - + + Clearing flags on %1MiB <strong>%2</strong> partition. + 正在清除 %1MiB <strong>%2</strong> 分割區的旗標。 + + + Clearing flags on new partition. 清除新分割區的旗標。 - + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. 正在設定 <strong>%1</strong> 分割區的 <strong>%2</strong> 旗標。 - + + Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition. + 正在設定 %1MiB <strong>%2</strong> 分割區的 <strong>%3</strong> 旗標。 + + + Setting flags <strong>%1</strong> on new partition. 正在設定新分割區的 <strong>%1</strong> 旗標。 - + The installer failed to set flags on partition %1. 安裝程式未能在分割區 %1 設定旗標。 @@ -3227,42 +3553,42 @@ Output: SetPasswordJob - + Set password for user %1 為使用者 %1 設定密碼 - + Setting password for user %1. 正在為使用者 %1 設定密碼。 - + Bad destination system path. 非法的目標系統路徑。 - + rootMountPoint is %1 根掛載點為 %1 - + Cannot disable root account. 無法停用 root 帳號。 - + passwd terminated with error code %1. passwd 以錯誤代碼 %1 終止。 - + Cannot set password for user %1. 無法為使用者 %1 設定密碼。 - + usermod terminated with error code %1. usermod 以錯誤代碼 %1 終止。 @@ -3270,45 +3596,82 @@ Output: SetTimezoneJob - + Set timezone to %1/%2 設定時區為 %1/%2 - + Cannot access selected timezone path. 無法存取指定的時區路徑。 - + Bad path: %1 非法路徑:%1 - + Cannot set timezone. 無法設定時區。 - + Link creation failed, target: %1; link name: %2 連結建立失敗,目標:%1;連結名稱:%2 - + Cannot set timezone, 無法設定時區。 - + Cannot open /etc/timezone for writing 無法開啟要寫入的 /etc/timezone + + SetupGroupsJob + + + Preparing groups. + 正在準備群組。 + + + + + Could not create groups in target system + 無法在目標系統中建立群組 + + + + These groups are missing in the target system: %1 + 這些群組在目標系統中不存在:%1 + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + 設定 <pre>sudo</pre> 使用者。 + + + + Cannot chmod sudoers file. + 無法修改 sudoers 檔案權限。 + + + + Cannot create sudoers file for writing. + 無法建立要寫入的 sudoers 檔案。 + + ShellProcessJob - + Shell Processes Job 殼層處理程序工作 @@ -3316,81 +3679,117 @@ Output: SlideCounter - + %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 - SummaryPage + StandardButtons - - This is an overview of what will happen once you start the setup procedure. - 這是開始安裝後所會發生的事的概覽。 + + &OK + 確定(&O) - - This is an overview of what will happen once you start the install procedure. - 這是您開始安裝後所會發生的事的概覽。 + + &Yes + 是(&Y) - - - SummaryViewStep - - Summary - 總覽 + + &No + 否(&N) + + + + &Cancel + 取消(&C) + + + + &Close + 關閉(&C) TrackingInstallJob - + Installation feedback 安裝回饋 - + Sending installation feedback. 傳送安裝回饋 - + Internal error in install-tracking. 在安裝追蹤裡的內部錯誤。 - + HTTP request timed out. HTTP 請求逾時。 - TrackingMachineNeonJob + TrackingKUserFeedbackJob - + + KDE user feedback + KDE 使用者回饋 + + + + Configuring KDE user feedback. + 設定 KDE 使用者回饋。 + + + + + Error in KDE user feedback configuration. + KDE 使用者回饋設定錯誤。 + + + + Could not configure KDE user feedback correctly, script error %1. + 無法正確設定 KDE 使用者回饋,指令稿錯誤 %1。 + + + + Could not configure KDE user feedback correctly, Calamares error %1. + 無法正確設定 KDE 使用者回饋,Calamares 錯誤 %1。 + + + + TrackingMachineUpdateManagerJob + + Machine feedback 機器回饋 - + Configuring machine feedback. 設定機器回饋。 - - + + Error in machine feedback configuration. 在機器回饋設定中的錯誤。 - + Could not configure machine feedback correctly, script error %1. 無法正確設定機器回饋,指令稿錯誤 %1。 - + Could not configure machine feedback correctly, Calamares error %1. 無法正確設定機器回饋,Calamares 錯誤 %1。 @@ -3398,106 +3797,97 @@ Output: TrackingPage - + Form 形式 - + Placeholder 佔位符 - - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>選取這個,您不會傳送 <span style=" font-weight:600;">任何關於</span> 您安裝的資訊。</p></body></html> + + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>點擊此處<span style=" font-weight:600;">不會傳送任何</span>關於您安裝的資訊。</p></body></html> - + <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> <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">點選這裡來取得更多關於使用者回饋的資訊</span></a></p></body></html> - - Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - 安裝追蹤協助 %1 看見他們有多少使用者,用什麼硬體安裝 %1 ,以及(下面的最後兩個選項)取得持續性的資訊,如偏好的應用程式等。要檢視傳送了哪些東西,請點選在每個區域旁邊的說明按鈕。 + + 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. + 追蹤可以協助 %1 檢視其安裝頻率、安裝在什麼硬體上以及使用了哪些應用程式。要檢視會傳送哪些資訊,請點擊每個區域旁的說明按鈕。 - - By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - 選取這個後,您將會傳送關於您的安裝與硬體的資訊。這個資訊將<b>只會傳送一次</b>,且在安裝完成後。 + + 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. + 選取這個後,您將會傳送關於您的安裝與硬體的資訊。這個資訊將只會傳送</b>一次</b>,且在安裝完成後。 - - By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - 選取這個後,您將會<b>週期性地</b>傳送關於您的安裝、硬體與應用程式的資訊給 %1。 + + By selecting this you will periodically send information about your <b>machine</b> installation, hardware and applications, to %1. + 選取這個後,您將會週期性地傳送關於您的<b>機器</b>安裝、硬體與應用程式的資訊給 %1。 - - By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. - 選取這個後,您將會<b>經常</b>傳送關於您的安裝、硬體、應用程式與使用模式的資訊給 %1。 + + By selecting this you will regularly send information about your <b>user</b> installation, hardware, applications and application usage patterns, to %1. + 選取這個後,您將會經常傳送關於您的<b>使用者</b>安裝、硬體、應用程式與使用模式的資訊給 %1。 TrackingViewStep - + Feedback 回饋 + + UmountJob + + + Unmount file systems. + 解除掛載檔案系統。 + + + + No target system available. + 沒有可用的目標系統。 + + + + No rootMountPoint is set. + 未設定根掛載點。 + + UsersPage - + <small>If more than one person will use this computer, you can create multiple accounts after setup.</small> <small>如果將會有多於一人使用這臺電腦,您可以在安裝後設定多個帳號。</small> - + <small>If more than one person will use this computer, you can create multiple accounts after installation.</small> <small>如果將會有多於一人使用這臺電腦,您可以在安裝後設定多個帳號。</small> + + + UsersQmlViewStep - - Your username is too long. - 您的使用者名稱太長了。 - - - - Your username must start with a lowercase letter or underscore. - 您的使用者名稱必須以小寫字母或底線開頭。 - - - - Only lowercase letters, numbers, underscore and hyphen are allowed. - 僅允許小寫字母、數字、底線與連接號。 - - - - Only letters, numbers, underscore and hyphen are allowed. - 僅允許字母、數字、底線與連接號。 - - - - Your hostname is too short. - 您的主機名稱太短了。 - - - - Your hostname is too long. - 您的主機名稱太長了。 - - - - Your passwords do not match! - 密碼不符! + + Users + 使用者 UsersViewStep - + Users 使用者 @@ -3505,65 +3895,67 @@ Output: VariantModel - + Key + Column header for key/value 金鑰 - + Value + Column header for key/value VolumeGroupBaseDialog - + Create Volume Group 建立卷冊群組 - + List of Physical Volumes 物理卷冊清單 - + Volume Group Name: 卷冊群組名稱: - + Volume Group Type: 卷冊群組類型: - + Physical Extent Size: 物理延展大小: - + MiB MiB - + Total Size: 大小總計: - + Used Size: 已使用大小: - + Total Sectors: 總磁區數: - + Quantity of LVs: 邏輯卷冊數量: @@ -3571,106 +3963,106 @@ Output: WelcomePage - + Form 表單 - - + + Select application and system language 選取應用程式與系統語言 + &About + 關於(&A) + + + Open donations website 開啟捐款網頁 - + &Donate 捐款(&D) - + Open help and support website 開啟說明與支援網頁 + &Support + 支援(&S) + + + Open issues and bug-tracking website 開啟問題與錯誤追蹤網頁 - Open release notes website - 開啟發行手記網站 - - - - &Release notes - 發行註記(&R) - - - &Known issues 已知問題(&K) - - &Support - 支援(&S) + + Open release notes website + 開啟發行記事網站 - - &About - 關於(&A) + + &Release notes + 發行註記(&R) - - <h1>Welcome to the %1 installer.</h1> - <h1>歡迎使用 %1 安裝程式。</h1> - - - - <h1>Welcome to the Calamares installer for %1.</h1> - <h1>歡迎使用 %1 的 Calamares 安裝程式。</h1> - - - + <h1>Welcome to the Calamares setup program for %1.</h1> <h1>歡迎使用 %1 的 Calamares 安裝程式。</h1> - + <h1>Welcome to %1 setup.</h1> <h1>歡迎使用 %1 安裝程式。</h1> - + + <h1>Welcome to the Calamares installer for %1.</h1> + <h1>歡迎使用 %1 的 Calamares 安裝程式。</h1> + + + + <h1>Welcome to the %1 installer.</h1> + <h1>歡迎使用 %1 安裝程式。</h1> + + + + %1 support + %1 支援 + + + About %1 setup 關於 %1 安裝程式 - + About %1 installer 關於 %1 安裝程式 - + <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. - <h1>%1</h1><br/><strong>%2<br/>為 %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 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 贊助。{1>?} {1<?} {1>?} {2<?} {3<?} {2014-2017 ?} {2017-2020 ?} - - - - %1 support - %1 支援 + <h1>%1</h1><br/><strong>%2<br/>為 %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/>感謝 <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 贊助。 WelcomeQmlViewStep - + Welcome 歡迎 @@ -3678,26 +4070,70 @@ Output: WelcomeViewStep - + Welcome 歡迎 + + ZfsJob + + + Create ZFS pools and datasets + 建立 ZFS 池與資料集 + + + + Failed to create zpool on + 建立 zpool 失敗於 + + + + Configuration Error + 設定錯誤 + + + + No partitions are available for ZFS. + ZFS 沒有可用的分割區。 + + + + Internal data missing + 內部資料遺失 + + + + + Failed to create zpool + 建立 zpool 失敗 + + + + Failed to create dataset + 建立資料集失敗 + + + + The output was: + 輸出為: + + about - + <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 + 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> + <a href='https://calamares.io/'>Calamares</a> development is sponsored by <br/> - <a href='http://www.blue-systems.com/'>Blue Systems</a> - + <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software. <h1>%1</h1><br/> <strong>%2<br/> @@ -3708,12 +4144,99 @@ Output: 與 <a href='https://www.transifex.com/calamares/calamares/'>Calamares 翻譯團隊</a>。<br/><br/> <a href='https://calamares.io/'>Calamares</a> - 的開開由 <br/> + 的開發由 <br/> <a href='http://www.blue-systems.com/'>Blue Systems</a> - Liberating Software 贊助。 - + + Back + 返回 + + + + calamares-sidebar + + + Show debug information + 顯示除錯資訊 + + + + finishedq + + + Installation Completed + 安裝完成 + + + + %1 has been installed on your computer.<br/> + You may now restart into your new system, or continue using the Live environment. + %1 已安裝到您的電腦上。<br/> + 現在,您可以重新啟動到您的新系統,或繼續使用 Live 環境。 + + + + Close Installer + 關閉安裝程式 + + + + Restart System + 重新啟動系統 + + + + <p>A full log of the install is available as installation.log in the home directory of the Live user.<br/> + This log is copied to /var/log/installation.log of the target system.</p> + <p>完整安裝紀錄檔可在 Live 使用者的家目錄中以 installation.log 的名稱取得。<br/> + 此紀錄檔已複製到目標系統的 /var/log/installation.log。</p> + + + + finishedq@mobile + + + Installation Completed + 安裝完成 + + + + %1 has been installed on your computer.<br/> + You may now restart your device. + %1 已安裝到您的電腦上。<br/> + 您現在可以重新啟動您的裝置了。 + + + + Close + 關閉 + + + + Restart + 重新啟動 + + + + i18n + + + <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>. + <h1>語言</h1> </br> + 系統語系設定會影響某些命令列使用者介面元素的語言與字元集。目前的設定為 <strong>%1</strong>。 + + + + <h1>Locales</h1> </br> + The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>. + <h1>語系</h1> </br> + 系統語系設定會影響數字與日期格式。目前的設定為 <strong>%1</strong>。 + + + Back 返回 @@ -3721,52 +4244,43 @@ Output: keyboardq - - Keyboard Model - 鍵盤型號 + + To activate keyboard preview, select a layout. + 要啟用鍵盤預覽,請選取佈局。 - - Pick your preferred keyboard model or use the default one based on the detected hardware - 挑選您偏好的鍵盤型號或使用基於偵測到的硬體的預設值 + + Keyboard Model: + 鍵盤型號: - - Refresh - 重新整理 - - - - + Layouts 佈局 - - - Keyboard Layout - 鍵盤佈局 + + Type here to test your keyboard + 在此輸入以測試您的鍵盤 - - Models - 型號 - - - + Variants 變種 + + + localeq - - Test your keyboard - 測試您的鍵盤 + + Change + 變更 notesqml - + <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> @@ -3774,34 +4288,262 @@ Output: - welcomeq + packagechooserq - - <h3>Welcome to the %1 <quote>%2</quote> installer</h3> - <h3>歡迎使用 %1 <quote>%2</quote> 安裝程式</h3> + + LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.<br/> + Default option. + LibreOffice 是強大且自由的辦公室套裝軟體,被世界上數以百萬計的人們使用。其包含了多個應用程式,使其成為市場上功能最強大的自由與開放原始碼辦公室套裝軟體。<br/> + 預設選項。 - + + LibreOffice + LibreOffice + + + + If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives. + 如果您不想安裝辦公室套裝軟體,只要選取「不要辦公室套裝軟體」就好。您隨時都可以在已安裝的系統上新增一個或多個您需要的軟體。 + + + + No Office Suite + 不要辦公室套裝軟體 + + + + Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser. + 建立最小化的桌面安裝,移除所有額外的應用程式並稍後再決定您想要新增哪些東西到您的系統中。如此的安裝不會有什麼例子,其不會有辦公室套裝軟體、沒有多媒體播放程式、沒有圖片檢視程式或列印支援。其就只有桌面、檔案瀏覽器、軟體包管理程式、文字編輯器與簡易的網路瀏覽器。 + + + + Minimal Install + 最小安裝 + + + + Please select an option for your install, or use the default: LibreOffice included. + 請選取您安裝的選項,或使用預設:包含 LibreOffice。 + + + + release_notes + + + <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> + <h3>%1</h3> + <p>這是範例 QML 檔案,展示了 RichText 的各種選項,並有可縮放的內容。</p> + + <p>有 RichText 的 QML 可以使用 HTML 標籤,可縮放的內容則對觸控螢幕非常有用。</p> + + <p><b>這是粗體</b></p> + <p><i>這是義式斜體</i></p> + <p><u>這是有底線的文字</u></p> + <p><center>此文字將會對齊中央。</center></p> + <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> + + + + Back + 返回 + + + + usersq + + + Pick your user name and credentials to login and perform admin tasks + 挑選您的使用者名稱與憑證以登入並執行管理工作 + + + + What is your name? + 該如何稱呼您? + + + + Your Full Name + 您的全名 + + + + What name do you want to use to log in? + 您想使用何種登入名稱? + + + + Login Name + 登入名稱 + + + + If more than one person will use this computer, you can create multiple accounts after installation. + 若有多於一個人使用此電腦,您可以在安裝後建立多個帳號。 + + + + Only lowercase letters, numbers, underscore and hyphen are allowed. + 僅允許小寫字母、數字、底線與連接號。 + + + + root is not allowed as username. + 不允許使用 root 作為使用者名稱。 + + + + What is the name of this computer? + 這部電腦的名字是? + + + + Computer Name + 電腦名稱 + + + + This name will be used if you make the computer visible to others on a network. + 若您將此電腦設定為讓網路上的其他電腦可見時將會使用此名稱。 + + + + localhost is not allowed as hostname. + 不允許使用 localhost 作為主機名稱。 + + + + Choose a password to keep your account safe. + 輸入密碼以確保帳號的安全性。 + + + + Password + 密碼 + + + + Repeat Password + 確認密碼 + + + + 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. + 輸入同一個密碼兩次,以檢查輸入錯誤。一個好的密碼包含了字母、數字及標點符號的組合、至少八個字母長,且按一固定週期更換。 + + + + Validate passwords quality + 驗證密碼品質 + + + + When this box is checked, password-strength checking is done and you will not be able to use a weak password. + 當此勾選框被勾選,密碼強度檢查即完成,您也無法再使用弱密碼。 + + + + Log in automatically without asking for the password + 自動登入,無需輸入密碼 + + + + Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. + 僅允許字母、數字、底線與連接號,最少兩個字元。 + + + + Reuse user password as root password + 重用使用者密碼為 root 密碼 + + + + Use the same password for the administrator account. + 為管理員帳號使用同樣的密碼。 + + + + Choose a root password to keep your account safe. + 選擇 root 密碼來維護您的帳號安全。 + + + + Root Password + Root 密碼 + + + + Repeat Root Password + 確認 Root 密碼 + + + + Enter the same password twice, so that it can be checked for typing errors. + 輸入同樣的密碼兩次,這樣可以檢查輸入錯誤。 + + + + welcomeq + + + <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> + <h3>歡迎使用 %1 <quote>%2</quote> 安裝程式</h3> + <p>本程式將會問您一些問題並在您的電腦上安裝及設定 %1。</p> + + + About 關於 - + Support 支援 - + Known issues 已知問題 - + Release notes 發行記事 - + Donate 捐助 diff --git a/lang/kb_en.ts b/lang/kb_en.ts new file mode 100644 index 000000000..08dc54905 --- /dev/null +++ b/lang/kb_en.ts @@ -0,0 +1,4621 @@ + + + + + kb_layouts + + + Afghani + kb_layouts + + + + + Albanian + kb_layouts + + + + + Amharic + kb_layouts + + + + + Arabic + kb_layouts + + + + + Arabic (Morocco) + kb_layouts + + + + + Arabic (Syria) + kb_layouts + + + + + Armenian + kb_layouts + + + + + Azerbaijani + kb_layouts + + + + + Bambara + kb_layouts + + + + + Bangla + kb_layouts + + + + + Belarusian + kb_layouts + + + + + Belgian + kb_layouts + + + + + Bosnian + kb_layouts + + + + + Braille + kb_layouts + + + + + Bulgarian + kb_layouts + + + + + Burmese + kb_layouts + + + + + Chinese + kb_layouts + + + + + Croatian + kb_layouts + + + + + Czech + kb_layouts + + + + + Danish + kb_layouts + + + + + Dhivehi + kb_layouts + + + + + Dutch + kb_layouts + + + + + Dzongkha + kb_layouts + + + + + English (Australian) + kb_layouts + + + + + English (Cameroon) + kb_layouts + + + + + English (Ghana) + kb_layouts + + + + + English (Nigeria) + kb_layouts + + + + + English (South Africa) + kb_layouts + + + + + English (UK) + kb_layouts + + + + + English (US) + kb_layouts + + + + + Esperanto + kb_layouts + + + + + Estonian + kb_layouts + + + + + Faroese + kb_layouts + + + + + Filipino + kb_layouts + + + + + Finnish + kb_layouts + + + + + French + kb_layouts + + + + + French (Canada) + kb_layouts + + + + + French (Democratic Republic of the Congo) + kb_layouts + + + + + French (Guinea) + kb_layouts + + + + + French (Togo) + kb_layouts + + + + + Georgian + kb_layouts + + + + + German + kb_layouts + + + + + German (Austria) + kb_layouts + + + + + German (Switzerland) + kb_layouts + + + + + Greek + kb_layouts + + + + + Hebrew + kb_layouts + + + + + Hungarian + kb_layouts + + + + + Icelandic + kb_layouts + + + + + Indian + kb_layouts + + + + + Indonesian (Arab Melayu, phonetic) + kb_layouts + + + + + Indonesian (Javanese) + kb_layouts + + + + + Iraqi + kb_layouts + + + + + Irish + kb_layouts + + + + + Italian + kb_layouts + + + + + Japanese + kb_layouts + + + + + Japanese (PC-98) + kb_layouts + + + + + Kabylian (azerty layout, no dead keys) + kb_layouts + + + + + Kazakh + kb_layouts + + + + + Khmer (Cambodia) + kb_layouts + + + + + Korean + kb_layouts + + + + + Kyrgyz + kb_layouts + + + + + Lao + kb_layouts + + + + + Latvian + kb_layouts + + + + + Lithuanian + kb_layouts + + + + + Macedonian + kb_layouts + + + + + Malay (Jawi, Arabic Keyboard) + kb_layouts + + + + + Maltese + kb_layouts + + + + + Maori + kb_layouts + + + + + Moldavian + kb_layouts + + + + + Mongolian + kb_layouts + + + + + Montenegrin + kb_layouts + + + + + Nepali + kb_layouts + + + + + Norwegian + kb_layouts + + + + + Persian + kb_layouts + + + + + Polish + kb_layouts + + + + + Portuguese + kb_layouts + + + + + Portuguese (Brazil) + kb_layouts + + + + + Romanian + kb_layouts + + + + + Russian + kb_layouts + + + + + Serbian + kb_layouts + + + + + Sinhala (phonetic) + kb_layouts + + + + + Slovak + kb_layouts + + + + + Slovenian + kb_layouts + + + + + Spanish + kb_layouts + + + + + Spanish (Latin American) + kb_layouts + + + + + Swahili (Kenya) + kb_layouts + + + + + Swahili (Tanzania) + kb_layouts + + + + + Swedish + kb_layouts + + + + + Taiwanese + kb_layouts + + + + + Tajik + kb_layouts + + + + + Thai + kb_layouts + + + + + Tswana + kb_layouts + + + + + Turkish + kb_layouts + + + + + Turkmen + kb_layouts + + + + + Ukrainian + kb_layouts + + + + + Urdu (Pakistan) + kb_layouts + + + + + Uzbek + kb_layouts + + + + + Vietnamese + kb_layouts + + + + + Wolof + kb_layouts + + + + + kb_models + + + A4Tech KB-21 + kb_models + + + + + A4Tech KBS-8 + kb_models + + + + + A4Tech Wireless Desktop RFKB-23 + kb_models + + + + + Acer AirKey V + kb_models + + + + + Acer C300 + kb_models + + + + + Acer Ferrari 4000 + kb_models + + + + + Acer laptop + kb_models + + + + + Advance Scorpius KI + kb_models + + + + + Apple + kb_models + + + + + Apple Aluminium (ANSI) + kb_models + + + + + Apple Aluminium (ISO) + kb_models + + + + + Apple Aluminium (JIS) + kb_models + + + + + Apple laptop + kb_models + + + + + Asus laptop + kb_models + + + + + Azona RF2300 wireless Internet + kb_models + + + + + BTC 5090 + kb_models + + + + + BTC 5113RF Multimedia + kb_models + + + + + BTC 5126T + kb_models + + + + + BTC 6301URF + kb_models + + + + + BTC 9000 + kb_models + + + + + BTC 9000A + kb_models + + + + + BTC 9001AH + kb_models + + + + + BTC 9019U + kb_models + + + + + BTC 9116U Mini Wireless Internet and Gaming + kb_models + + + + + BenQ X-Touch + kb_models + + + + + BenQ X-Touch 730 + kb_models + + + + + BenQ X-Touch 800 + kb_models + + + + + Brother Internet + kb_models + + + + + Cherry B.UNLIMITED + kb_models + + + + + Cherry Blue Line CyBo@rd + kb_models + + + + + Cherry Blue Line CyBo@rd (alt.) + kb_models + + + + + Cherry CyBo@rd USB-Hub + kb_models + + + + + Cherry CyMotion Expert + kb_models + + + + + Cherry CyMotion Master Linux + kb_models + + + + + Cherry CyMotion Master XPress + kb_models + + + + + Chicony Internet + kb_models + + + + + Chicony KB-9885 + kb_models + + + + + Chicony KU-0108 + kb_models + + + + + Chicony KU-0420 + kb_models + + + + + Chromebook + kb_models + + + + + Classmate PC + kb_models + + + + + Compaq Armada laptop + kb_models + + + + + Compaq Easy Access + kb_models + + + + + Compaq Internet (13 keys) + kb_models + + + + + Compaq Internet (18 keys) + kb_models + + + + + Compaq Internet (7 keys) + kb_models + + + + + Compaq Presario laptop + kb_models + + + + + Compaq iPaq + kb_models + + + + + Creative Desktop Wireless 7000 + kb_models + + + + + DTK2000 + kb_models + + + + + Dell + kb_models + + + + + Dell 101-key PC + kb_models + + + + + Dell Inspiron 6000/8000 laptop + kb_models + + + + + Dell Latitude laptop + kb_models + + + + + Dell Precision M laptop + kb_models + + + + + Dell Precision M65 laptop + kb_models + + + + + Dell SK-8125 + kb_models + + + + + Dell SK-8135 + kb_models + + + + + Dell USB Multimedia + kb_models + + + + + Dexxa Wireless Desktop + kb_models + + + + + Diamond 9801/9802 + kb_models + + + + + Ennyah DKB-1008 + kb_models + + + + + Everex STEPnote + kb_models + + + + + FL90 + kb_models + + + + + Fujitsu-Siemens Amilo laptop + kb_models + + + + + Generic 101-key PC + kb_models + + + + + Generic 102-key PC + kb_models + + + + + Generic 104-key PC + kb_models + + + + + Generic 104-key PC with L-shaped Enter key + kb_models + + + + + Generic 105-key PC + kb_models + + + + + Generic 86-key PC + kb_models + + + + + Genius Comfy KB-12e + kb_models + + + + + Genius Comfy KB-16M/Multimedia KWD-910 + kb_models + + + + + Genius Comfy KB-21e-Scroll + kb_models + + + + + Genius KB-19e NB + kb_models + + + + + Genius KKB-2050HS + kb_models + + + + + Gyration + kb_models + + + + + Happy Hacking + kb_models + + + + + Happy Hacking for Mac + kb_models + + + + + Hewlett-Packard Internet + kb_models + + + + + Hewlett-Packard Mini 110 laptop + kb_models + + + + + Hewlett-Packard NEC SK-2500 Multimedia + kb_models + + + + + Hewlett-Packard Omnibook 500 + kb_models + + + + + Hewlett-Packard Omnibook 500 FA + kb_models + + + + + Hewlett-Packard Omnibook 6000/6100 + kb_models + + + + + Hewlett-Packard Omnibook XE3 GC + kb_models + + + + + Hewlett-Packard Omnibook XE3 GF + kb_models + + + + + Hewlett-Packard Omnibook XT1000 + kb_models + + + + + Hewlett-Packard Pavilion ZT1100 + kb_models + + + + + Hewlett-Packard Pavilion dv5 + kb_models + + + + + Hewlett-Packard nx9020 + kb_models + + + + + Honeywell Euroboard + kb_models + + + + + IBM Rapid Access + kb_models + + + + + IBM Rapid Access II + kb_models + + + + + IBM Space Saver + kb_models + + + + + IBM ThinkPad 560Z/600/600E/A22E + kb_models + + + + + IBM ThinkPad R60/T60/R61/T61 + kb_models + + + + + IBM ThinkPad Z60m/Z60t/Z61m/Z61t + kb_models + + + + + Keytronic FlexPro + kb_models + + + + + Kinesis + kb_models + + + + + Logitech + kb_models + + + + + Logitech Access + kb_models + + + + + Logitech Cordless Desktop + kb_models + + + + + Logitech Cordless Desktop (alt.) + kb_models + + + + + Logitech Cordless Desktop EX110 + kb_models + + + + + Logitech Cordless Desktop LX-300 + kb_models + + + + + Logitech Cordless Desktop Navigator + kb_models + + + + + Logitech Cordless Desktop Optical + kb_models + + + + + Logitech Cordless Desktop Pro (2nd alt.) + kb_models + + + + + Logitech Cordless Desktop iTouch + kb_models + + + + + Logitech Cordless Freedom/Desktop Navigator + kb_models + + + + + Logitech G15 extra keys via G15daemon + kb_models + + + + + Logitech Internet + kb_models + + + + + Logitech Internet 350 + kb_models + + + + + Logitech Internet Navigator + kb_models + + + + + Logitech Ultra-X + kb_models + + + + + Logitech Ultra-X Cordless Media Desktop + kb_models + + + + + Logitech diNovo + kb_models + + + + + Logitech diNovo Edge + kb_models + + + + + Logitech iTouch + kb_models + + + + + Logitech iTouch Cordless Y-RB6 + kb_models + + + + + Logitech iTouch Internet Navigator SE + kb_models + + + + + Logitech iTouch Internet Navigator SE USB + kb_models + + + + + MacBook/MacBook Pro + kb_models + + + + + MacBook/MacBook Pro (intl.) + kb_models + + + + + Macintosh + kb_models + + + + + Macintosh Old + kb_models + + + + + Memorex MX1998 + kb_models + + + + + Memorex MX2500 EZ-Access + kb_models + + + + + Memorex MX2750 + kb_models + + + + + Microsoft Comfort Curve 2000 + kb_models + + + + + Microsoft Internet + kb_models + + + + + Microsoft Internet Pro (Swedish) + kb_models + + + + + Microsoft Natural + kb_models + + + + + Microsoft Natural Elite + kb_models + + + + + Microsoft Natural Ergonomic 4000 + kb_models + + + + + Microsoft Natural Pro OEM + kb_models + + + + + Microsoft Natural Pro USB/Internet Pro + kb_models + + + + + Microsoft Natural Pro/Internet Pro + kb_models + + + + + Microsoft Natural Wireless Ergonomic 7000 + kb_models + + + + + Microsoft Office Keyboard + kb_models + + + + + Microsoft Surface + kb_models + + + + + Microsoft Wireless Multimedia 1.0A + kb_models + + + + + NEC SK-1300 + kb_models + + + + + NEC SK-2500 + kb_models + + + + + NEC SK-6200 + kb_models + + + + + NEC SK-7100 + kb_models + + + + + Northgate OmniKey 101 + kb_models + + + + + OLPC + kb_models + + + + + Ortek Multimedia/Internet MCK-800 + kb_models + + + + + PC-98 + kb_models + + + + + Propeller Voyager KTEZ-1000 + kb_models + + + + + QTronix Scorpius 98N+ + kb_models + + + + + SVEN Ergonomic 2500 + kb_models + + + + + SVEN Slim 303 + kb_models + + + + + Samsung SDM 4500P + kb_models + + + + + Samsung SDM 4510P + kb_models + + + + + Sanwa Supply SKB-KG3 + kb_models + + + + + Silvercrest Multimedia Wireless + kb_models + + + + + SteelSeries Apex 300 (Apex RAW) + kb_models + + + + + Sun Type 6 (Japanese) + kb_models + + + + + Sun Type 6 USB (Japanese) + kb_models + + + + + Sun Type 6 USB (Unix) + kb_models + + + + + Sun Type 6/7 USB + kb_models + + + + + Sun Type 6/7 USB (European) + kb_models + + + + + Sun Type 7 USB + kb_models + + + + + Sun Type 7 USB (European) + kb_models + + + + + Sun Type 7 USB (Japanese)/Japanese 106-key + kb_models + + + + + Sun Type 7 USB (Unix) + kb_models + + + + + Super Power Multimedia + kb_models + + + + + Symplon PaceBook tablet + kb_models + + + + + Targa Visionary 811 + kb_models + + + + + Toshiba Satellite S3000 + kb_models + + + + + Truly Ergonomic 227 + kb_models + + + + + Truly Ergonomic 229 + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) + kb_models + + + + + Trust Direct Access + kb_models + + + + + Trust Slimline + kb_models + + + + + Trust Wireless Classic + kb_models + + + + + TypeMatrix EZ-Reach 2020 + kb_models + + + + + TypeMatrix EZ-Reach 2030 PS2 + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (106:JP mode) + kb_models + + + + + Unitek KB-1925 + kb_models + + + + + ViewSonic KU-306 Internet + kb_models + + + + + Winbook Model XP5 + kb_models + + + + + Yahoo! Internet + kb_models + + + + + eMachines m6800 laptop + kb_models + + + + + kb_variants + + + Akan + kb_variants + + + + + Albanian (Plisi) + kb_variants + + + + + Albanian (Veqilharxhi) + kb_variants + + + + + Arabic (AZERTY) + kb_variants + + + + + Arabic (AZERTY, Eastern Arabic numerals) + kb_variants + + + + + Arabic (Algeria) + kb_variants + + + + + Arabic (Buckwalter) + kb_variants + + + + + Arabic (Eastern Arabic numerals) + kb_variants + + + + + Arabic (Macintosh) + kb_variants + + + + + Arabic (OLPC) + kb_variants + + + + + Arabic (Pakistan) + kb_variants + + + + + Arabic (QWERTY) + kb_variants + + + + + Arabic (QWERTY, Eastern Arabic numerals) + kb_variants + + + + + Armenian (alt. eastern) + kb_variants + + + + + Armenian (alt. phonetic) + kb_variants + + + + + Armenian (eastern) + kb_variants + + + + + Armenian (phonetic) + kb_variants + + + + + Armenian (western) + kb_variants + + + + + Asturian (Spain, with bottom-dot H and L) + kb_variants + + + + + Avatime + kb_variants + + + + + Azerbaijani (Cyrillic) + kb_variants + + + + + Bangla (India) + kb_variants + + + + + Bangla (India, Baishakhi Inscript) + kb_variants + + + + + Bangla (India, Baishakhi) + kb_variants + + + + + Bangla (India, Bornona) + kb_variants + + + + + Bangla (India, Gitanjali) + kb_variants + + + + + Bangla (India, Probhat) + kb_variants + + + + + Bangla (Probhat) + kb_variants + + + + + Bashkirian + kb_variants + + + + + Belarusian (Latin) + kb_variants + + + + + Belarusian (intl.) + kb_variants + + + + + Belarusian (legacy) + kb_variants + + + + + Belgian (ISO, alt.) + kb_variants + + + + + Belgian (Latin-9 only, alt.) + kb_variants + + + + + Belgian (Sun dead keys) + kb_variants + + + + + Belgian (Sun dead keys, alt.) + kb_variants + + + + + Belgian (Wang 724 AZERTY) + kb_variants + + + + + Belgian (alt.) + kb_variants + + + + + Belgian (no dead keys) + kb_variants + + + + + Berber (Morocco, Tifinagh alt.) + kb_variants + + + + + Berber (Morocco, Tifinagh extended phonetic) + kb_variants + + + + + Berber (Morocco, Tifinagh extended) + kb_variants + + + + + Berber (Morocco, Tifinagh phonetic) + kb_variants + + + + + Berber (Morocco, Tifinagh phonetic, alt.) + kb_variants + + + + + Berber (Morocco, Tifinagh) + kb_variants + + + + + Bosnian (US) + kb_variants + + + + + Bosnian (US, with Bosnian digraphs) + kb_variants + + + + + Bosnian (with Bosnian digraphs) + kb_variants + + + + + Bosnian (with guillemets) + kb_variants + + + + + Braille (left-handed inverted thumb) + kb_variants + + + + + Braille (left-handed) + kb_variants + + + + + Braille (right-handed inverted thumb) + kb_variants + + + + + Braille (right-handed) + kb_variants + + + + + Bulgarian (enhanced) + kb_variants + + + + + Bulgarian (new phonetic) + kb_variants + + + + + Bulgarian (traditional phonetic) + kb_variants + + + + + Burmese Zawgyi + kb_variants + + + + + Cameroon (AZERTY, intl.) + kb_variants + + + + + Cameroon (Dvorak, intl.) + kb_variants + + + + + Cameroon Multilingual (QWERTY, intl.) + kb_variants + + + + + Canadian (intl.) + kb_variants + + + + + Canadian (intl., 1st part) + kb_variants + + + + + Canadian (intl., 2nd part) + kb_variants + + + + + Catalan (Spain, with middle-dot L) + kb_variants + + + + + Cherokee + kb_variants + + + + + Chuvash + kb_variants + + + + + Chuvash (Latin) + kb_variants + + + + + CloGaelach + kb_variants + + + + + Crimean Tatar (Turkish Alt-Q) + kb_variants + + + + + Crimean Tatar (Turkish F) + kb_variants + + + + + Crimean Tatar (Turkish Q) + kb_variants + + + + + Croatian (US) + kb_variants + + + + + Croatian (US, with Croatian digraphs) + kb_variants + + + + + Croatian (with Croatian digraphs) + kb_variants + + + + + Croatian (with guillemets) + kb_variants + + + + + Czech (QWERTY) + kb_variants + + + + + Czech (QWERTY, Macintosh) + kb_variants + + + + + Czech (QWERTY, extended backslash) + kb_variants + + + + + Czech (UCW, only accented letters) + kb_variants + + + + + Czech (US, Dvorak, UCW support) + kb_variants + + + + + Czech (with &lt;|&gt; key) + kb_variants + + + + + Danish (Dvorak) + kb_variants + + + + + Danish (Macintosh) + kb_variants + + + + + Danish (Macintosh, no dead keys) + kb_variants + + + + + Danish (Windows) + kb_variants + + + + + Danish (no dead keys) + kb_variants + + + + + Default + kb_variants + + + + + Dutch (Macintosh) + kb_variants + + + + + Dutch (Sun dead keys) + kb_variants + + + + + Dutch (standard) + kb_variants + + + + + English (Canada) + kb_variants + + + + + English (Colemak) + kb_variants + + + + + English (Dvorak) + kb_variants + + + + + English (Dvorak, alt. intl.) + kb_variants + + + + + English (Dvorak, intl., with dead keys) + kb_variants + + + + + English (Dvorak, left-handed) + kb_variants + + + + + English (Dvorak, right-handed) + kb_variants + + + + + English (Ghana, GILLBT) + kb_variants + + + + + English (Ghana, multilingual) + kb_variants + + + + + English (India, with rupee) + kb_variants + + + + + English (Macintosh) + kb_variants + + + + + English (Mali, US, Macintosh) + kb_variants + + + + + English (Mali, US, intl.) + kb_variants + + + + + English (Norman) + kb_variants + + + + + English (UK, Colemak) + kb_variants + + + + + English (UK, Dvorak) + kb_variants + + + + + English (UK, Dvorak, with UK punctuation) + kb_variants + + + + + English (UK, Macintosh) + kb_variants + + + + + English (UK, Macintosh, intl.) + kb_variants + + + + + English (UK, extended, Windows) + kb_variants + + + + + English (UK, intl., with dead keys) + kb_variants + + + + + English (US, Symbolic) + kb_variants + + + + + English (US, alt. intl.) + kb_variants + + + + + English (US, euro on 5) + kb_variants + + + + + English (US, intl., with dead keys) + kb_variants + + + + + English (Workman) + kb_variants + + + + + English (Workman, intl., with dead keys) + kb_variants + + + + + English (classic Dvorak) + kb_variants + + + + + English (intl., with AltGr dead keys) + kb_variants + + + + + English (programmer Dvorak) + kb_variants + + + + + English (the divide/multiply toggle the layout) + kb_variants + + + + + Esperanto (Brazil, Nativo) + kb_variants + + + + + Esperanto (Portugal, Nativo) + kb_variants + + + + + Esperanto (legacy) + kb_variants + + + + + Estonian (Dvorak) + kb_variants + + + + + Estonian (US) + kb_variants + + + + + Estonian (no dead keys) + kb_variants + + + + + Ewe + kb_variants + + + + + Faroese (no dead keys) + kb_variants + + + + + Filipino (Capewell-Dvorak, Baybayin) + kb_variants + + + + + Filipino (Capewell-Dvorak, Latin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Baybayin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Latin) + kb_variants + + + + + Filipino (Colemak, Baybayin) + kb_variants + + + + + Filipino (Colemak, Latin) + kb_variants + + + + + Filipino (Dvorak, Baybayin) + kb_variants + + + + + Filipino (Dvorak, Latin) + kb_variants + + + + + Filipino (QWERTY, Baybayin) + kb_variants + + + + + Finnish (Macintosh) + kb_variants + + + + + Finnish (Windows) + kb_variants + + + + + Finnish (classic) + kb_variants + + + + + Finnish (classic, no dead keys) + kb_variants + + + + + French (AZERTY) + kb_variants + + + + + French (AZERTY, AFNOR) + kb_variants + + + + + French (BEPO) + kb_variants + + + + + French (BEPO, AFNOR) + kb_variants + + + + + French (BEPO, Latin-9 only) + kb_variants + + + + + French (Breton) + kb_variants + + + + + French (Cameroon) + kb_variants + + + + + French (Canada, Dvorak) + kb_variants + + + + + French (Canada, legacy) + kb_variants + + + + + French (Dvorak) + kb_variants + + + + + French (Macintosh) + kb_variants + + + + + French (Mali, alt.) + kb_variants + + + + + French (Morocco) + kb_variants + + + + + French (Sun dead keys) + kb_variants + + + + + French (Switzerland) + kb_variants + + + + + French (Switzerland, Macintosh) + kb_variants + + + + + French (Switzerland, Sun dead keys) + kb_variants + + + + + French (Switzerland, no dead keys) + kb_variants + + + + + French (US) + kb_variants + + + + + French (alt.) + kb_variants + + + + + French (alt., Latin-9 only) + kb_variants + + + + + French (alt., Sun dead keys) + kb_variants + + + + + French (alt., no dead keys) + kb_variants + + + + + French (legacy, alt.) + kb_variants + + + + + French (legacy, alt., Sun dead keys) + kb_variants + + + + + French (legacy, alt., no dead keys) + kb_variants + + + + + French (no dead keys) + kb_variants + + + + + Friulian (Italy) + kb_variants + + + + + Fula + kb_variants + + + + + Ga + kb_variants + + + + + Georgian (France, AZERTY Tskapo) + kb_variants + + + + + Georgian (Italy) + kb_variants + + + + + Georgian (MESS) + kb_variants + + + + + Georgian (ergonomic) + kb_variants + + + + + German (Austria, Macintosh) + kb_variants + + + + + German (Austria, Sun dead keys) + kb_variants + + + + + German (Austria, no dead keys) + kb_variants + + + + + German (Dvorak) + kb_variants + + + + + German (E1) + kb_variants + + + + + German (E2) + kb_variants + + + + + German (Macintosh) + kb_variants + + + + + German (Macintosh, no dead keys) + kb_variants + + + + + German (Neo 2) + kb_variants + + + + + German (QWERTY) + kb_variants + + + + + German (Sun dead keys) + kb_variants + + + + + German (Switzerland, Macintosh) + kb_variants + + + + + German (Switzerland, Sun dead keys) + kb_variants + + + + + German (Switzerland, legacy) + kb_variants + + + + + German (Switzerland, no dead keys) + kb_variants + + + + + German (T3) + kb_variants + + + + + German (US) + kb_variants + + + + + German (dead acute) + kb_variants + + + + + German (dead grave acute) + kb_variants + + + + + German (dead tilde) + kb_variants + + + + + German (no dead keys) + kb_variants + + + + + Greek (extended) + kb_variants + + + + + Greek (no dead keys) + kb_variants + + + + + Greek (polytonic) + kb_variants + + + + + Greek (simple) + kb_variants + + + + + Gujarati + kb_variants + + + + + Hanyu Pinyin (with AltGr dead keys) + kb_variants + + + + + Hausa (Ghana) + kb_variants + + + + + Hausa (Nigeria) + kb_variants + + + + + Hawaiian + kb_variants + + + + + Hebrew (Biblical, Tiro) + kb_variants + + + + + Hebrew (lyx) + kb_variants + + + + + Hebrew (phonetic) + kb_variants + + + + + Hindi (Bolnagri) + kb_variants + + + + + Hindi (KaGaPa, phonetic) + kb_variants + + + + + Hindi (Wx) + kb_variants + + + + + Hungarian (QWERTY) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (no dead keys) + kb_variants + + + + + Hungarian (standard) + kb_variants + + + + + Icelandic (Dvorak) + kb_variants + + + + + Icelandic (Macintosh) + kb_variants + + + + + Icelandic (Macintosh, legacy) + kb_variants + + + + + Icelandic (Sun dead keys) + kb_variants + + + + + Icelandic (no dead keys) + kb_variants + + + + + Igbo + kb_variants + + + + + Indic (phonetic, IPA) + kb_variants + + + + + Indonesian (Arab Melayu, extended phonetic) + kb_variants + + + + + Inuktitut + kb_variants + + + + + Irish (UnicodeExpert) + kb_variants + + + + + Italian (IBM 142) + kb_variants + + + + + Italian (Macintosh) + kb_variants + + + + + Italian (US) + kb_variants + + + + + Italian (Windows) + kb_variants + + + + + Italian (intl., with dead keys) + kb_variants + + + + + Italian (no dead keys) + kb_variants + + + + + Japanese (Dvorak) + kb_variants + + + + + Japanese (Kana 86) + kb_variants + + + + + Japanese (Kana) + kb_variants + + + + + Japanese (Macintosh) + kb_variants + + + + + Japanese (OADG 109A) + kb_variants + + + + + Kabylian (Algeria, Tifinagh) + kb_variants + + + + + Kabylian (azerty layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-gb layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-us layout, with dead keys) + kb_variants + + + + + Kalmyk + kb_variants + + + + + Kannada + kb_variants + + + + + Kannada (KaGaPa, phonetic) + kb_variants + + + + + Kashubian + kb_variants + + + + + Kazakh (Latin) + kb_variants + + + + + Kazakh (extended) + kb_variants + + + + + Kazakh (with Russian) + kb_variants + + + + + Kikuyu + kb_variants + + + + + Komi + kb_variants + + + + + Korean (101/104-key compatible) + kb_variants + + + + + Kurdish (Iran, Arabic-Latin) + kb_variants + + + + + Kurdish (Iran, F) + kb_variants + + + + + Kurdish (Iran, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iran, Latin Q) + kb_variants + + + + + Kurdish (Iraq, Arabic-Latin) + kb_variants + + + + + Kurdish (Iraq, F) + kb_variants + + + + + Kurdish (Iraq, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iraq, Latin Q) + kb_variants + + + + + Kurdish (Syria, F) + kb_variants + + + + + Kurdish (Syria, Latin Alt-Q) + kb_variants + + + + + Kurdish (Syria, Latin Q) + kb_variants + + + + + Kurdish (Turkey, F) + kb_variants + + + + + Kurdish (Turkey, Latin Alt-Q) + kb_variants + + + + + Kurdish (Turkey, Latin Q) + kb_variants + + + + + Kyrgyz (phonetic) + kb_variants + + + + + Lao (STEA) + kb_variants + + + + + Latvian (F) + kb_variants + + + + + Latvian (adapted) + kb_variants + + + + + Latvian (apostrophe) + kb_variants + + + + + Latvian (ergonomic, ŪGJRMV) + kb_variants + + + + + Latvian (modern) + kb_variants + + + + + Latvian (tilde) + kb_variants + + + + + Lithuanian (IBM LST 1205-92) + kb_variants + + + + + Lithuanian (LEKP) + kb_variants + + + + + Lithuanian (LEKPa) + kb_variants + + + + + Lithuanian (US) + kb_variants + + + + + Lithuanian (standard) + kb_variants + + + + + Lower Sorbian + kb_variants + + + + + Lower Sorbian (QWERTZ) + kb_variants + + + + + Macedonian (no dead keys) + kb_variants + + + + + Malay (Jawi, phonetic) + kb_variants + + + + + Malayalam + kb_variants + + + + + Malayalam (Lalitha) + kb_variants + + + + + Malayalam (enhanced Inscript, with rupee) + kb_variants + + + + + Maltese (UK, with AltGr overrides) + kb_variants + + + + + Maltese (US layout with AltGr overrides) + kb_variants + + + + + Maltese (US) + kb_variants + + + + + Manipuri (Eeyek) + kb_variants + + + + + Marathi (KaGaPa, phonetic) + kb_variants + + + + + Marathi (enhanced Inscript) + kb_variants + + + + + Mari + kb_variants + + + + + Mmuock + kb_variants + + + + + Moldavian (Gagauz) + kb_variants + + + + + Mongolian (Bichig) + kb_variants + + + + + Mongolian (Galik) + kb_variants + + + + + Mongolian (Manchu Galik) + kb_variants + + + + + Mongolian (Manchu) + kb_variants + + + + + Mongolian (Todo Galik) + kb_variants + + + + + Mongolian (Todo) + kb_variants + + + + + Mongolian (Xibe) + kb_variants + + + + + Montenegrin (Cyrillic) + kb_variants + + + + + Montenegrin (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Montenegrin (Cyrillic, with guillemets) + kb_variants + + + + + Montenegrin (Latin, QWERTY) + kb_variants + + + + + Montenegrin (Latin, Unicode) + kb_variants + + + + + Montenegrin (Latin, Unicode, QWERTY) + kb_variants + + + + + Montenegrin (Latin, with guillemets) + kb_variants + + + + + Northern Saami (Finland) + kb_variants + + + + + Northern Saami (Norway) + kb_variants + + + + + Northern Saami (Norway, no dead keys) + kb_variants + + + + + Northern Saami (Sweden) + kb_variants + + + + + Norwegian (Colemak) + kb_variants + + + + + Norwegian (Dvorak) + kb_variants + + + + + Norwegian (Macintosh) + kb_variants + + + + + Norwegian (Macintosh, no dead keys) + kb_variants + + + + + Norwegian (Windows) + kb_variants + + + + + Norwegian (no dead keys) + kb_variants + + + + + Occitan + kb_variants + + + + + Ogham + kb_variants + + + + + Ogham (IS434) + kb_variants + + + + + Ol Chiki + kb_variants + + + + + Oriya + kb_variants + + + + + Ossetian (Georgia) + kb_variants + + + + + Ossetian (Windows) + kb_variants + + + + + Ossetian (legacy) + kb_variants + + + + + Pannonian Rusyn + kb_variants + + + + + Pashto + kb_variants + + + + + Pashto (Afghanistan, OLPC) + kb_variants + + + + + Persian (Afghanistan, Dari OLPC) + kb_variants + + + + + Persian (with Persian keypad) + kb_variants + + + + + Polish (British keyboard) + kb_variants + + + + + Polish (Dvorak) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on key 1) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on quotemark key) + kb_variants + + + + + Polish (QWERTZ) + kb_variants + + + + + Polish (legacy) + kb_variants + + + + + Polish (programmer Dvorak) + kb_variants + + + + + Portuguese (Brazil, Dvorak) + kb_variants + + + + + Portuguese (Brazil, IBM/Lenovo ThinkPad) + kb_variants + + + + + Portuguese (Brazil, Nativo for US keyboards) + kb_variants + + + + + Portuguese (Brazil, Nativo) + kb_variants + + + + + Portuguese (Brazil, no dead keys) + kb_variants + + + + + Portuguese (Macintosh) + kb_variants + + + + + Portuguese (Macintosh, Sun dead keys) + kb_variants + + + + + Portuguese (Macintosh, no dead keys) + kb_variants + + + + + Portuguese (Nativo for US keyboards) + kb_variants + + + + + Portuguese (Nativo) + kb_variants + + + + + Portuguese (Sun dead keys) + kb_variants + + + + + Portuguese (no dead keys) + kb_variants + + + + + Punjabi (Gurmukhi Jhelum) + kb_variants + + + + + Punjabi (Gurmukhi) + kb_variants + + + + + Romanian (Germany) + kb_variants + + + + + Romanian (Germany, no dead keys) + kb_variants + + + + + Romanian (Windows) + kb_variants + + + + + Romanian (cedilla) + kb_variants + + + + + Romanian (standard cedilla) + kb_variants + + + + + Romanian (standard) + kb_variants + + + + + Russian (Belarus) + kb_variants + + + + + Russian (Czech, phonetic) + kb_variants + + + + + Russian (DOS) + kb_variants + + + + + Russian (Georgia) + kb_variants + + + + + Russian (Germany, phonetic) + kb_variants + + + + + Russian (Kazakhstan, with Kazakh) + kb_variants + + + + + Russian (Macintosh) + kb_variants + + + + + Russian (Poland, phonetic Dvorak) + kb_variants + + + + + Russian (Sweden, phonetic) + kb_variants + + + + + Russian (Sweden, phonetic, no dead keys) + kb_variants + + + + + Russian (US, phonetic) + kb_variants + + + + + Russian (Ukraine, standard RSTU) + kb_variants + + + + + Russian (legacy) + kb_variants + + + + + Russian (phonetic) + kb_variants + + + + + Russian (phonetic, AZERTY) + kb_variants + + + + + Russian (phonetic, Dvorak) + kb_variants + + + + + Russian (phonetic, French) + kb_variants + + + + + Russian (phonetic, Windows) + kb_variants + + + + + Russian (phonetic, YAZHERTY) + kb_variants + + + + + Russian (typewriter) + kb_variants + + + + + Russian (typewriter, legacy) + kb_variants + + + + + Saisiyat (Taiwan) + kb_variants + + + + + Samogitian + kb_variants + + + + + Sanskrit (KaGaPa, phonetic) + kb_variants + + + + + Serbian (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Serbian (Cyrillic, with guillemets) + kb_variants + + + + + Serbian (Latin) + kb_variants + + + + + Serbian (Latin, QWERTY) + kb_variants + + + + + Serbian (Latin, Unicode) + kb_variants + + + + + Serbian (Latin, Unicode, QWERTY) + kb_variants + + + + + Serbian (Latin, with guillemets) + kb_variants + + + + + Serbian (Russia) + kb_variants + + + + + Serbo-Croatian (US) + kb_variants + + + + + Sicilian + kb_variants + + + + + Silesian + kb_variants + + + + + Sindhi + kb_variants + + + + + Sinhala (US) + kb_variants + + + + + Slovak (QWERTY) + kb_variants + + + + + Slovak (QWERTY, extended backslash) + kb_variants + + + + + Slovak (extended backslash) + kb_variants + + + + + Slovenian (US) + kb_variants + + + + + Slovenian (with guillemets) + kb_variants + + + + + Spanish (Dvorak) + kb_variants + + + + + Spanish (Latin American, Colemak for gaming) + kb_variants + + + + + Spanish (Latin American, Colemak) + kb_variants + + + + + Spanish (Latin American, Dvorak) + kb_variants + + + + + Spanish (Latin American, Sun dead keys) + kb_variants + + + + + Spanish (Latin American, dead tilde) + kb_variants + + + + + Spanish (Latin American, no dead keys) + kb_variants + + + + + Spanish (Macintosh) + kb_variants + + + + + Spanish (Sun dead keys) + kb_variants + + + + + Spanish (Windows) + kb_variants + + + + + Spanish (dead tilde) + kb_variants + + + + + Spanish (no dead keys) + kb_variants + + + + + Swedish (Dvorak) + kb_variants + + + + + Swedish (Dvorak, intl.) + kb_variants + + + + + Swedish (Macintosh) + kb_variants + + + + + Swedish (Svdvorak) + kb_variants + + + + + Swedish (US) + kb_variants + + + + + Swedish (no dead keys) + kb_variants + + + + + Swedish Sign Language + kb_variants + + + + + Syriac + kb_variants + + + + + Syriac (phonetic) + kb_variants + + + + + Taiwanese (indigenous) + kb_variants + + + + + Tajik (legacy) + kb_variants + + + + + Tamil (Inscript) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99 with Tamil numerals) + kb_variants + + + + + Tamil (TamilNet '99) + kb_variants + + + + + Tamil (TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99, TSCII encoding) + kb_variants + + + + + Tatar + kb_variants + + + + + Telugu + kb_variants + + + + + Telugu (KaGaPa, phonetic) + kb_variants + + + + + Telugu (Sarala) + kb_variants + + + + + Thai (Pattachote) + kb_variants + + + + + Thai (TIS-820.2538) + kb_variants + + + + + Tibetan + kb_variants + + + + + Tibetan (with ASCII numerals) + kb_variants + + + + + Turkish (Alt-Q) + kb_variants + + + + + Turkish (F) + kb_variants + + + + + Turkish (Germany) + kb_variants + + + + + Turkish (Sun dead keys) + kb_variants + + + + + Turkish (intl., with dead keys) + kb_variants + + + + + Turkmen (Alt-Q) + kb_variants + + + + + Udmurt + kb_variants + + + + + Ukrainian (Windows) + kb_variants + + + + + Ukrainian (homophonic) + kb_variants + + + + + Ukrainian (legacy) + kb_variants + + + + + Ukrainian (phonetic) + kb_variants + + + + + Ukrainian (standard RSTU) + kb_variants + + + + + Ukrainian (typewriter) + kb_variants + + + + + Urdu (Pakistan, CRULP) + kb_variants + + + + + Urdu (Pakistan, NLA) + kb_variants + + + + + Urdu (Windows) + kb_variants + + + + + Urdu (alt. phonetic) + kb_variants + + + + + Urdu (phonetic) + kb_variants + + + + + Uyghur + kb_variants + + + + + Uzbek (Afghanistan) + kb_variants + + + + + Uzbek (Afghanistan, OLPC) + kb_variants + + + + + Uzbek (Latin) + kb_variants + + + + + Vietnamese (French) + kb_variants + + + + + Vietnamese (US) + kb_variants + + + + + Yakut + kb_variants + + + + + Yoruba + kb_variants + + + + diff --git a/lang/kb_tg.ts b/lang/kb_tg.ts new file mode 100644 index 000000000..893bed9ae --- /dev/null +++ b/lang/kb_tg.ts @@ -0,0 +1,4621 @@ + + + + + kb_layouts + + + Afghani + kb_layouts + Афғонӣ + + + + Albanian + kb_layouts + Албанӣ + + + + Amharic + kb_layouts + Амҳарӣ + + + + Arabic + kb_layouts + Арабӣ + + + + Arabic (Morocco) + kb_layouts + Арабӣ (Марокаш) + + + + Arabic (Syria) + kb_layouts + Арабӣ (Сурия) + + + + Armenian + kb_layouts + Арманӣ + + + + Azerbaijani + kb_layouts + Озарбойҷонӣ + + + + Bambara + kb_layouts + Бамбара + + + + Bangla + kb_layouts + Бангла + + + + Belarusian + kb_layouts + Белорусӣ + + + + Belgian + kb_layouts + Белгиягӣ + + + + Bosnian + kb_layouts + Босниягӣ + + + + Braille + kb_layouts + Брайл + + + + Bulgarian + kb_layouts + Булғорӣ + + + + Burmese + kb_layouts + Бирманӣ + + + + Chinese + kb_layouts + Хитоӣ + + + + Croatian + kb_layouts + Хорватӣ + + + + Czech + kb_layouts + Чехӣ + + + + Danish + kb_layouts + Даниягӣ + + + + Dhivehi + kb_layouts + Дхивеҳӣ + + + + Dutch + kb_layouts + Ҳоландӣ + + + + Dzongkha + kb_layouts + Дзонгха + + + + English (Australian) + kb_layouts + Англисӣ (Австралиягӣ) + + + + English (Cameroon) + kb_layouts + Англисӣ (Камерун) + + + + English (Ghana) + kb_layouts + Англисӣ (Гана) + + + + English (Nigeria) + kb_layouts + Англисӣ (Нигерия) + + + + English (South Africa) + kb_layouts + Англисӣ (Африкаи Ҷунубӣ) + + + + English (UK) + kb_layouts + Англисӣ (БК) + + + + English (US) + kb_layouts + Англисӣ (ИМА) + + + + Esperanto + kb_layouts + Эсперанто + + + + Estonian + kb_layouts + Эстонӣ + + + + Faroese + kb_layouts + Фарерӣ + + + + Filipino + kb_layouts + + + + + Finnish + kb_layouts + + + + + French + kb_layouts + + + + + French (Canada) + kb_layouts + + + + + French (Democratic Republic of the Congo) + kb_layouts + + + + + French (Guinea) + kb_layouts + + + + + French (Togo) + kb_layouts + + + + + Georgian + kb_layouts + + + + + German + kb_layouts + + + + + German (Austria) + kb_layouts + + + + + German (Switzerland) + kb_layouts + + + + + Greek + kb_layouts + + + + + Hebrew + kb_layouts + + + + + Hungarian + kb_layouts + + + + + Icelandic + kb_layouts + + + + + Indian + kb_layouts + + + + + Indonesian (Arab Melayu, phonetic) + kb_layouts + + + + + Indonesian (Javanese) + kb_layouts + + + + + Iraqi + kb_layouts + + + + + Irish + kb_layouts + + + + + Italian + kb_layouts + + + + + Japanese + kb_layouts + + + + + Japanese (PC-98) + kb_layouts + + + + + Kabylian (azerty layout, no dead keys) + kb_layouts + + + + + Kazakh + kb_layouts + + + + + Khmer (Cambodia) + kb_layouts + + + + + Korean + kb_layouts + + + + + Kyrgyz + kb_layouts + + + + + Lao + kb_layouts + + + + + Latvian + kb_layouts + + + + + Lithuanian + kb_layouts + + + + + Macedonian + kb_layouts + + + + + Malay (Jawi, Arabic Keyboard) + kb_layouts + + + + + Maltese + kb_layouts + + + + + Maori + kb_layouts + + + + + Moldavian + kb_layouts + + + + + Mongolian + kb_layouts + + + + + Montenegrin + kb_layouts + + + + + Nepali + kb_layouts + + + + + Norwegian + kb_layouts + + + + + Persian + kb_layouts + + + + + Polish + kb_layouts + + + + + Portuguese + kb_layouts + + + + + Portuguese (Brazil) + kb_layouts + + + + + Romanian + kb_layouts + + + + + Russian + kb_layouts + Русӣ + + + + Serbian + kb_layouts + + + + + Sinhala (phonetic) + kb_layouts + + + + + Slovak + kb_layouts + + + + + Slovenian + kb_layouts + + + + + Spanish + kb_layouts + + + + + Spanish (Latin American) + kb_layouts + + + + + Swahili (Kenya) + kb_layouts + + + + + Swahili (Tanzania) + kb_layouts + + + + + Swedish + kb_layouts + + + + + Taiwanese + kb_layouts + + + + + Tajik + kb_layouts + Тоҷикӣ + + + + Thai + kb_layouts + + + + + Tswana + kb_layouts + + + + + Turkish + kb_layouts + + + + + Turkmen + kb_layouts + Туркменӣ + + + + Ukrainian + kb_layouts + Украинӣ + + + + Urdu (Pakistan) + kb_layouts + + + + + Uzbek + kb_layouts + Ӯзбекӣ + + + + Vietnamese + kb_layouts + Ветнамӣ + + + + Wolof + kb_layouts + Волоф + + + + kb_models + + + A4Tech KB-21 + kb_models + A4Tech KB-21 + + + + A4Tech KBS-8 + kb_models + A4Tech KBS-8 + + + + A4Tech Wireless Desktop RFKB-23 + kb_models + Мизи кории бесими A4Tech RFKB-23 + + + + Acer AirKey V + kb_models + Acer AirKey V + + + + Acer C300 + kb_models + Acer C300 + + + + Acer Ferrari 4000 + kb_models + Acer Ferrari 4000 + + + + Acer laptop + kb_models + Лэптопи Acer + + + + Advance Scorpius KI + kb_models + Scorpius KI-и пешрафта + + + + Apple + kb_models + Apple + + + + Apple Aluminium (ANSI) + kb_models + Apple-и Алюминий (ANSI) + + + + Apple Aluminium (ISO) + kb_models + Apple-и Алюминий (ISO) + + + + Apple Aluminium (JIS) + kb_models + Apple-и Алюминий (JIS) + + + + Apple laptop + kb_models + Лэптопи Apple + + + + Asus laptop + kb_models + Лэптопи Asus + + + + Azona RF2300 wireless Internet + kb_models + Azona RF2300 Интернети бесим + + + + BTC 5090 + kb_models + BTC 5090 + + + + BTC 5113RF Multimedia + kb_models + BTC 5113RF Мултимедиа + + + + BTC 5126T + kb_models + BTC 5126T + + + + BTC 6301URF + kb_models + BTC 6301URF + + + + BTC 9000 + kb_models + BTC 9000 + + + + BTC 9000A + kb_models + BTC 9000A + + + + BTC 9001AH + kb_models + BTC 9001AH + + + + BTC 9019U + kb_models + BTC 9019U + + + + BTC 9116U Mini Wireless Internet and Gaming + kb_models + BTC 9116U Бозиҳо ва Интернети бесим (Хурд) + + + + BenQ X-Touch + kb_models + BenQ X-Touch + + + + BenQ X-Touch 730 + kb_models + BenQ X-Touch 730 + + + + BenQ X-Touch 800 + kb_models + BenQ X-Touch 800 + + + + Brother Internet + kb_models + Интернети бародарон + + + + Cherry B.UNLIMITED + kb_models + Черри, НОМАҲДУДИ B + + + + Cherry Blue Line CyBo@rd + kb_models + Черри, Хати кабуди CyBo@rd + + + + Cherry Blue Line CyBo@rd (alt.) + kb_models + Черри, Хати кабуди CyBo@rd. (илов.) + + + + Cherry CyBo@rd USB-Hub + kb_models + Черри, CyBo@rd USB-Hub + + + + Cherry CyMotion Expert + kb_models + Черри, Коршиноси CyMotion + + + + Cherry CyMotion Master Linux + kb_models + Черри, Устои Linux-и CyMotion + + + + Cherry CyMotion Master XPress + kb_models + Черри, Устои XPress-и CyMotion + + + + Chicony Internet + kb_models + Chicony-и интернетӣ + + + + Chicony KB-9885 + kb_models + Chicony KB-9885 + + + + Chicony KU-0108 + kb_models + Chicony KU-0108 + + + + Chicony KU-0420 + kb_models + Chicony KU-0420 + + + + Chromebook + kb_models + Хромбук + + + + Classmate PC + kb_models + Classmate PC + + + + Compaq Armada laptop + kb_models + Лэптопи Compaq Armada + + + + Compaq Easy Access + kb_models + Дастрасии осони Compaq + + + + Compaq Internet (13 keys) + kb_models + Compaq-и интернетӣ (13 тугма) + + + + Compaq Internet (18 keys) + kb_models + Compaq-и интернетӣ (18 тугма) + + + + Compaq Internet (7 keys) + kb_models + Compaq-и интернетӣ (7 тугма) + + + + Compaq Presario laptop + kb_models + Лэптопи Compaq Presario + + + + Compaq iPaq + kb_models + Compaq iPaq + + + + Creative Desktop Wireless 7000 + kb_models + Creative Desktop Wireless 7000 + + + + DTK2000 + kb_models + DTK2000 + + + + Dell + kb_models + Dell + + + + Dell 101-key PC + kb_models + Dell, 101 тугмаи компютерӣ + + + + Dell Inspiron 6000/8000 laptop + kb_models + Лэптопи Dell Inspiron 6000/8000 + + + + Dell Latitude laptop + kb_models + Лэптопи Dell Latitude + + + + Dell Precision M laptop + kb_models + Лэптопи Dell Precision M + + + + Dell Precision M65 laptop + kb_models + Лэптопи Dell Precision M65 + + + + Dell SK-8125 + kb_models + Dell SK-8125 + + + + Dell SK-8135 + kb_models + Dell SK-8135 + + + + Dell USB Multimedia + kb_models + Dell, Мултимедиаи USB + + + + Dexxa Wireless Desktop + kb_models + Мизи кории бесими Dexxa + + + + Diamond 9801/9802 + kb_models + Diamond 9801/9802 + + + + Ennyah DKB-1008 + kb_models + Ennyah DKB-1008 + + + + Everex STEPnote + kb_models + Everex STEPnote + + + + FL90 + kb_models + FL90 + + + + Fujitsu-Siemens Amilo laptop + kb_models + + + + + Generic 101-key PC + kb_models + Умумӣ, 101 тугмаи компютерӣ + + + + Generic 102-key PC + kb_models + Умумӣ, 102 тугмаи компютерӣ + + + + Generic 104-key PC + kb_models + Умумӣ, 104 тугмаи компютерӣ + + + + Generic 104-key PC with L-shaped Enter key + kb_models + Умумӣ, 104 тугмаи компютерӣ бо тугмаи Enter дар шакли L + + + + Generic 105-key PC + kb_models + Умумӣ, 105 тугмаи компютерӣ + + + + Generic 86-key PC + kb_models + Умумӣ, 86 тугмаи компютерӣ + + + + Genius Comfy KB-12e + kb_models + + + + + Genius Comfy KB-16M/Multimedia KWD-910 + kb_models + + + + + Genius Comfy KB-21e-Scroll + kb_models + + + + + Genius KB-19e NB + kb_models + + + + + Genius KKB-2050HS + kb_models + + + + + Gyration + kb_models + + + + + Happy Hacking + kb_models + + + + + Happy Hacking for Mac + kb_models + + + + + Hewlett-Packard Internet + kb_models + + + + + Hewlett-Packard Mini 110 laptop + kb_models + + + + + Hewlett-Packard NEC SK-2500 Multimedia + kb_models + + + + + Hewlett-Packard Omnibook 500 + kb_models + + + + + Hewlett-Packard Omnibook 500 FA + kb_models + + + + + Hewlett-Packard Omnibook 6000/6100 + kb_models + + + + + Hewlett-Packard Omnibook XE3 GC + kb_models + + + + + Hewlett-Packard Omnibook XE3 GF + kb_models + + + + + Hewlett-Packard Omnibook XT1000 + kb_models + + + + + Hewlett-Packard Pavilion ZT1100 + kb_models + + + + + Hewlett-Packard Pavilion dv5 + kb_models + + + + + Hewlett-Packard nx9020 + kb_models + + + + + Honeywell Euroboard + kb_models + + + + + IBM Rapid Access + kb_models + + + + + IBM Rapid Access II + kb_models + + + + + IBM Space Saver + kb_models + + + + + IBM ThinkPad 560Z/600/600E/A22E + kb_models + + + + + IBM ThinkPad R60/T60/R61/T61 + kb_models + + + + + IBM ThinkPad Z60m/Z60t/Z61m/Z61t + kb_models + + + + + Keytronic FlexPro + kb_models + + + + + Kinesis + kb_models + + + + + Logitech + kb_models + Logitech + + + + Logitech Access + kb_models + Logitech Access + + + + Logitech Cordless Desktop + kb_models + + + + + Logitech Cordless Desktop (alt.) + kb_models + + + + + Logitech Cordless Desktop EX110 + kb_models + + + + + Logitech Cordless Desktop LX-300 + kb_models + + + + + Logitech Cordless Desktop Navigator + kb_models + + + + + Logitech Cordless Desktop Optical + kb_models + + + + + Logitech Cordless Desktop Pro (2nd alt.) + kb_models + + + + + Logitech Cordless Desktop iTouch + kb_models + + + + + Logitech Cordless Freedom/Desktop Navigator + kb_models + + + + + Logitech G15 extra keys via G15daemon + kb_models + + + + + Logitech Internet + kb_models + + + + + Logitech Internet 350 + kb_models + + + + + Logitech Internet Navigator + kb_models + + + + + Logitech Ultra-X + kb_models + + + + + Logitech Ultra-X Cordless Media Desktop + kb_models + + + + + Logitech diNovo + kb_models + + + + + Logitech diNovo Edge + kb_models + + + + + Logitech iTouch + kb_models + + + + + Logitech iTouch Cordless Y-RB6 + kb_models + + + + + Logitech iTouch Internet Navigator SE + kb_models + + + + + Logitech iTouch Internet Navigator SE USB + kb_models + + + + + MacBook/MacBook Pro + kb_models + + + + + MacBook/MacBook Pro (intl.) + kb_models + + + + + Macintosh + kb_models + + + + + Macintosh Old + kb_models + + + + + Memorex MX1998 + kb_models + Memorex MX1998 + + + + Memorex MX2500 EZ-Access + kb_models + Memorex MX2500 EZ-Access + + + + Memorex MX2750 + kb_models + Memorex MX2750 + + + + Microsoft Comfort Curve 2000 + kb_models + Microsoft Comfort Curve 2000 + + + + Microsoft Internet + kb_models + + + + + Microsoft Internet Pro (Swedish) + kb_models + + + + + Microsoft Natural + kb_models + + + + + Microsoft Natural Elite + kb_models + + + + + Microsoft Natural Ergonomic 4000 + kb_models + + + + + Microsoft Natural Pro OEM + kb_models + + + + + Microsoft Natural Pro USB/Internet Pro + kb_models + + + + + Microsoft Natural Pro/Internet Pro + kb_models + + + + + Microsoft Natural Wireless Ergonomic 7000 + kb_models + + + + + Microsoft Office Keyboard + kb_models + + + + + Microsoft Surface + kb_models + + + + + Microsoft Wireless Multimedia 1.0A + kb_models + + + + + NEC SK-1300 + kb_models + NEC SK-1300 + + + + NEC SK-2500 + kb_models + NEC SK-2500 + + + + NEC SK-6200 + kb_models + NEC SK-6200 + + + + NEC SK-7100 + kb_models + NEC SK-7100 + + + + Northgate OmniKey 101 + kb_models + + + + + OLPC + kb_models + OLPC + + + + Ortek Multimedia/Internet MCK-800 + kb_models + + + + + PC-98 + kb_models + + + + + Propeller Voyager KTEZ-1000 + kb_models + + + + + QTronix Scorpius 98N+ + kb_models + + + + + SVEN Ergonomic 2500 + kb_models + SVEN Ergonomic 2500 + + + + SVEN Slim 303 + kb_models + SVEN Slim 303 + + + + Samsung SDM 4500P + kb_models + Samsung SDM 4500P + + + + Samsung SDM 4510P + kb_models + Samsung SDM 4510P + + + + Sanwa Supply SKB-KG3 + kb_models + + + + + Silvercrest Multimedia Wireless + kb_models + + + + + SteelSeries Apex 300 (Apex RAW) + kb_models + + + + + Sun Type 6 (Japanese) + kb_models + + + + + Sun Type 6 USB (Japanese) + kb_models + + + + + Sun Type 6 USB (Unix) + kb_models + + + + + Sun Type 6/7 USB + kb_models + + + + + Sun Type 6/7 USB (European) + kb_models + + + + + Sun Type 7 USB + kb_models + + + + + Sun Type 7 USB (European) + kb_models + + + + + Sun Type 7 USB (Japanese)/Japanese 106-key + kb_models + + + + + Sun Type 7 USB (Unix) + kb_models + + + + + Super Power Multimedia + kb_models + + + + + Symplon PaceBook tablet + kb_models + + + + + Targa Visionary 811 + kb_models + + + + + Toshiba Satellite S3000 + kb_models + + + + + Truly Ergonomic 227 + kb_models + + + + + Truly Ergonomic 229 + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) + kb_models + + + + + Trust Direct Access + kb_models + + + + + Trust Slimline + kb_models + + + + + Trust Wireless Classic + kb_models + + + + + TypeMatrix EZ-Reach 2020 + kb_models + TypeMatrix EZ-Reach 2020 + + + + TypeMatrix EZ-Reach 2030 PS2 + kb_models + TypeMatrix EZ-Reach 2030 PS2 + + + + TypeMatrix EZ-Reach 2030 USB + kb_models + TypeMatrix EZ-Reach 2030 USB + + + + TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + kb_models + TypeMatrix EZ-Reach 2030 USB (Реҷаи 102/105:EU) + + + + TypeMatrix EZ-Reach 2030 USB (106:JP mode) + kb_models + TypeMatrix EZ-Reach 2030 USB (Реҷаи 106:JP) + + + + Unitek KB-1925 + kb_models + Unitek KB-1925 + + + + ViewSonic KU-306 Internet + kb_models + ViewSonic KU-306-и интернетӣ + + + + Winbook Model XP5 + kb_models + + + + + Yahoo! Internet + kb_models + Yahoo! Интернет + + + + eMachines m6800 laptop + kb_models + Лэптопи eMachines m6800 + + + + kb_variants + + + Akan + kb_variants + Аконӣ + + + + Albanian (Plisi) + kb_variants + Албанӣ (Плисӣ) + + + + Albanian (Veqilharxhi) + kb_variants + Албанӣ (Векилхаркшӣ) + + + + Arabic (AZERTY) + kb_variants + Арабӣ (AZERTY) + + + + Arabic (AZERTY, Eastern Arabic numerals) + kb_variants + Арабӣ (AZERTY, Рақамҳои арабии шаркӣ) + + + + Arabic (Algeria) + kb_variants + Арабӣ (Алҷазоир) + + + + Arabic (Buckwalter) + kb_variants + Арабӣ (Бакуолтер) + + + + Arabic (Eastern Arabic numerals) + kb_variants + Арабӣ (Рақамҳои арабии шаркӣ) + + + + Arabic (Macintosh) + kb_variants + Арабӣ (Макинтош) + + + + Arabic (OLPC) + kb_variants + Арабӣ (OLPC) + + + + Arabic (Pakistan) + kb_variants + Арабӣ (Покистон) + + + + Arabic (QWERTY) + kb_variants + Арабӣ (QWERTY) + + + + Arabic (QWERTY, Eastern Arabic numerals) + kb_variants + Арабӣ (QWERTY, Рақамҳои арабии шаркӣ) + + + + Armenian (alt. eastern) + kb_variants + Арманӣ (илов. шарқӣ) + + + + Armenian (alt. phonetic) + kb_variants + Арманӣ (илов. фонетикӣ) + + + + Armenian (eastern) + kb_variants + Арманӣ (шарқӣ) + + + + Armenian (phonetic) + kb_variants + Арманӣ (фонетикӣ) + + + + Armenian (western) + kb_variants + Арманӣ (ғарбӣ) + + + + Asturian (Spain, with bottom-dot H and L) + kb_variants + Астурӣ (Испания, бо нуқтаи поёни H ва L) + + + + Avatime + kb_variants + Avatime + + + + Azerbaijani (Cyrillic) + kb_variants + Озарбойҷонӣ (Кириллӣ) + + + + Bangla (India) + kb_variants + Бангла (Ҳиндустон) + + + + Bangla (India, Baishakhi Inscript) + kb_variants + Бангла (Ҳиндустон, Инскрипти Байшахӣ) + + + + Bangla (India, Baishakhi) + kb_variants + Бангла (Ҳиндустон, Байшахӣ) + + + + Bangla (India, Bornona) + kb_variants + Бангла (Ҳиндустон, Борнона) + + + + Bangla (India, Gitanjali) + kb_variants + Бангла (Ҳиндустон, Гитанҷалӣ) + + + + Bangla (India, Probhat) + kb_variants + Бангла (Ҳиндустон, Пробхат) + + + + Bangla (Probhat) + kb_variants + Бангла (Пробхат) + + + + Bashkirian + kb_variants + Бошқирдӣ + + + + Belarusian (Latin) + kb_variants + Белорусӣ (Лотинӣ) + + + + Belarusian (intl.) + kb_variants + Белорусӣ (байналм.) + + + + Belarusian (legacy) + kb_variants + Белорусӣ (ворисӣ) + + + + Belgian (ISO, alt.) + kb_variants + Белгиягӣ (ISO, илов.) + + + + Belgian (Latin-9 only, alt.) + kb_variants + Белгиягӣ (Танҳо лотинии-9, илов.) + + + + Belgian (Sun dead keys) + kb_variants + Белгиягӣ (Тугмаҳои хомӯшии Sun) + + + + Belgian (Sun dead keys, alt.) + kb_variants + Белгиягӣ (Тугмаҳои хомӯшии Sun, илов.) + + + + Belgian (Wang 724 AZERTY) + kb_variants + Белгиягӣ (Ванг 724 AZERTY) + + + + Belgian (alt.) + kb_variants + Белгиягӣ (илов.) + + + + Belgian (no dead keys) + kb_variants + Белгиягӣ (бе тугмаҳои хомӯшӣ) + + + + Berber (Morocco, Tifinagh alt.) + kb_variants + Берберӣ (Марокаш, Тифинагҳӣ, илов.) + + + + Berber (Morocco, Tifinagh extended phonetic) + kb_variants + Берберӣ (Марокаш, Тифинагҳӣ, фонетикии васеъшуда) + + + + Berber (Morocco, Tifinagh extended) + kb_variants + Берберӣ (Марокаш, Тифинагҳӣ, васеъшуда) + + + + Berber (Morocco, Tifinagh phonetic) + kb_variants + Берберӣ (Марокаш, Тифинагҳӣ, фонетикӣ) + + + + Berber (Morocco, Tifinagh phonetic, alt.) + kb_variants + Берберӣ (Марокаш, Тифинагҳӣ, фонетикӣ, илов.) + + + + Berber (Morocco, Tifinagh) + kb_variants + Берберӣ (Марокаш, Тифинагҳӣ) + + + + Bosnian (US) + kb_variants + Босниягӣ (ИМА) + + + + Bosnian (US, with Bosnian digraphs) + kb_variants + Босниягӣ (ИМА, бо диграфҳои босниягӣ) + + + + Bosnian (with Bosnian digraphs) + kb_variants + Босниягӣ (бо диграфҳои босниягӣ) + + + + Bosnian (with guillemets) + kb_variants + Босниягӣ (бо гиллеметҳо) + + + + Braille (left-handed inverted thumb) + kb_variants + Брайл (сарангушти чаппаи дасти чап) + + + + Braille (left-handed) + kb_variants + Брайл (дасти чап) + + + + Braille (right-handed inverted thumb) + kb_variants + Брайл (сарангушти чаппаи дасти рост) + + + + Braille (right-handed) + kb_variants + Брайл (дасти рост) + + + + Bulgarian (enhanced) + kb_variants + Булғорӣ (такмилёфта) + + + + Bulgarian (new phonetic) + kb_variants + Булғорӣ (фонетикии нав) + + + + Bulgarian (traditional phonetic) + kb_variants + Булғорӣ (фонетикии анъанавӣ) + + + + Burmese Zawgyi + kb_variants + Бирмании завҷӣ + + + + Cameroon (AZERTY, intl.) + kb_variants + Камерун (AZERTY, байналм.) + + + + Cameroon (Dvorak, intl.) + kb_variants + Камерун (Дворак, байналм.) + + + + Cameroon Multilingual (QWERTY, intl.) + kb_variants + Камеруни серзабон (QWERTY, байналм.) + + + + Canadian (intl.) + kb_variants + Канадагӣ (байналм.) + + + + Canadian (intl., 1st part) + kb_variants + Канадагӣ (байналм. қисми 1) + + + + Canadian (intl., 2nd part) + kb_variants + Канадагӣ (байналм. қисми 2) + + + + Catalan (Spain, with middle-dot L) + kb_variants + Каталонӣ (Испания, бо нуқтаи миёнаи L) + + + + Cherokee + kb_variants + Черокӣ + + + + Chuvash + kb_variants + Чувашӣ + + + + Chuvash (Latin) + kb_variants + Чувашӣ (Лотинӣ) + + + + CloGaelach + kb_variants + CloGaelach + + + + Crimean Tatar (Turkish Alt-Q) + kb_variants + Тотории кримӣ (Туркӣ, Alt-Q) + + + + Crimean Tatar (Turkish F) + kb_variants + Тотории кримӣ (F-и туркӣ) + + + + Crimean Tatar (Turkish Q) + kb_variants + Тотории кримӣ (Q-и туркӣ) + + + + Croatian (US) + kb_variants + Хорватӣ (ИМА) + + + + Croatian (US, with Croatian digraphs) + kb_variants + Хорватӣ (ИМА, бо диграфҳои хорватӣ) + + + + Croatian (with Croatian digraphs) + kb_variants + Хорватӣ (бо диграфҳои хорватӣ) + + + + Croatian (with guillemets) + kb_variants + Хорватӣ (бо гиллеметҳо) + + + + Czech (QWERTY) + kb_variants + Чехӣ (QWERTY) + + + + Czech (QWERTY, Macintosh) + kb_variants + Чехӣ (QWERTY, Макинтош) + + + + Czech (QWERTY, extended backslash) + kb_variants + Чехӣ (QWERTY, аломати хати каҷи баръакси васеъшуда) + + + + Czech (UCW, only accented letters) + kb_variants + Чехӣ (UCW, танҳо ҳарфҳои вижагӣ) + + + + Czech (US, Dvorak, UCW support) + kb_variants + Чехӣ (ИМА, Дворак, дастгирии UCW) + + + + Czech (with &lt;|&gt; key) + kb_variants + Чехӣ (бо тугмаи &lt;|&gt;) + + + + Danish (Dvorak) + kb_variants + Даниягӣ (Дворак) + + + + Danish (Macintosh) + kb_variants + Даниягӣ (Макинтош) + + + + Danish (Macintosh, no dead keys) + kb_variants + Даниягӣ (Макинтош, бе тугмаҳои хомӯшӣ) + + + + Danish (Windows) + kb_variants + Даниягӣ (Windows) + + + + Danish (no dead keys) + kb_variants + Даниягӣ (бе тугмаҳои хомӯшӣ) + + + + Default + kb_variants + Стандартӣ + + + + Dutch (Macintosh) + kb_variants + Ҳоландӣ (Макинтош) + + + + Dutch (Sun dead keys) + kb_variants + Ҳоландӣ (Тугмаҳои хомӯшии Sun) + + + + Dutch (standard) + kb_variants + Ҳоландӣ (стандартӣ) + + + + English (Canada) + kb_variants + Англисӣ (Канада) + + + + English (Colemak) + kb_variants + Англисӣ (Колемак) + + + + English (Dvorak) + kb_variants + Англисӣ (Дворак) + + + + English (Dvorak, alt. intl.) + kb_variants + Англисӣ (Дворак, илов. байналм.) + + + + English (Dvorak, intl., with dead keys) + kb_variants + Англисӣ (Дворак, байналм. бо тугмаҳои хомӯшӣ) + + + + English (Dvorak, left-handed) + kb_variants + Англисӣ (Дворак, дасти чап) + + + + English (Dvorak, right-handed) + kb_variants + Англисӣ (Дворак, дасти рост) + + + + English (Ghana, GILLBT) + kb_variants + Англисӣ (Гана, GILLBT) + + + + English (Ghana, multilingual) + kb_variants + Англисӣ (Гана, серзабон) + + + + English (India, with rupee) + kb_variants + Англисӣ (Ҳиндустон, бо рупия) + + + + English (Macintosh) + kb_variants + Англисӣ (Макинтош) + + + + English (Mali, US, Macintosh) + kb_variants + Англисӣ (Малӣ, ИМА, Макинтош) + + + + English (Mali, US, intl.) + kb_variants + Англисӣ (Малӣ, ИМА, байналм.) + + + + English (Norman) + kb_variants + Англисӣ (Норман) + + + + English (UK, Colemak) + kb_variants + Англисӣ (БК, Колемак) + + + + English (UK, Dvorak) + kb_variants + Англисӣ (БК, Дворак) + + + + English (UK, Dvorak, with UK punctuation) + kb_variants + Англисӣ (БК, Дворак, бо аломатҳои китобатӣ) + + + + English (UK, Macintosh) + kb_variants + Англисӣ (БК, Макинтош) + + + + English (UK, Macintosh, intl.) + kb_variants + Англисӣ (БК, Макинтош, байналм.) + + + + English (UK, extended, Windows) + kb_variants + Англисӣ (БК, васеъшуда, Windows) + + + + English (UK, intl., with dead keys) + kb_variants + Англисӣ (БК, байналм., бо тугмаҳои хомӯшӣ) + + + + English (US, Symbolic) + kb_variants + Англисӣ (ИМА, Рамзӣ) + + + + English (US, alt. intl.) + kb_variants + Англисӣ (ИМА, илов. байналм.) + + + + English (US, euro on 5) + kb_variants + Англисӣ (ИМА, евро дар 5) + + + + English (US, intl., with dead keys) + kb_variants + Англисӣ (ИМА, байналм., бо тугмаҳои хомӯшӣ) + + + + English (Workman) + kb_variants + Англисӣ (Воркман) + + + + English (Workman, intl., with dead keys) + kb_variants + Англисӣ (Воркман, байналм., бо тугмаҳои хомӯшӣ) + + + + English (classic Dvorak) + kb_variants + Англисӣ (Двораки классикӣ) + + + + English (intl., with AltGr dead keys) + kb_variants + Англисӣ (байналм., бо тугмаҳои хомӯшии AltGr) + + + + English (programmer Dvorak) + kb_variants + Англисӣ (Двораки барномарезӣ) + + + + English (the divide/multiply toggle the layout) + kb_variants + Англисӣ (тарҳбандӣ бо алоҳида/якчанд васлкунак) + + + + Esperanto (Brazil, Nativo) + kb_variants + Эсперанто (Бразилия, Нативо) + + + + Esperanto (Portugal, Nativo) + kb_variants + Эсперанто (Португалия, Нативо) + + + + Esperanto (legacy) + kb_variants + Эсперанто (ворисӣ) + + + + Estonian (Dvorak) + kb_variants + Эстонӣ (Дворак) + + + + Estonian (US) + kb_variants + Эстонӣ (ИМА) + + + + Estonian (no dead keys) + kb_variants + Эстонӣ (бе тугмаҳои хомӯшӣ) + + + + Ewe + kb_variants + Ewe + + + + Faroese (no dead keys) + kb_variants + Фарерӣ (бе тугмаҳои хомӯшӣ) + + + + Filipino (Capewell-Dvorak, Baybayin) + kb_variants + + + + + Filipino (Capewell-Dvorak, Latin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Baybayin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Latin) + kb_variants + + + + + Filipino (Colemak, Baybayin) + kb_variants + + + + + Filipino (Colemak, Latin) + kb_variants + + + + + Filipino (Dvorak, Baybayin) + kb_variants + + + + + Filipino (Dvorak, Latin) + kb_variants + + + + + Filipino (QWERTY, Baybayin) + kb_variants + + + + + Finnish (Macintosh) + kb_variants + + + + + Finnish (Windows) + kb_variants + + + + + Finnish (classic) + kb_variants + + + + + Finnish (classic, no dead keys) + kb_variants + + + + + French (AZERTY) + kb_variants + + + + + French (AZERTY, AFNOR) + kb_variants + + + + + French (BEPO) + kb_variants + + + + + French (BEPO, AFNOR) + kb_variants + + + + + French (BEPO, Latin-9 only) + kb_variants + + + + + French (Breton) + kb_variants + + + + + French (Cameroon) + kb_variants + + + + + French (Canada, Dvorak) + kb_variants + + + + + French (Canada, legacy) + kb_variants + + + + + French (Dvorak) + kb_variants + + + + + French (Macintosh) + kb_variants + + + + + French (Mali, alt.) + kb_variants + + + + + French (Morocco) + kb_variants + + + + + French (Sun dead keys) + kb_variants + + + + + French (Switzerland) + kb_variants + + + + + French (Switzerland, Macintosh) + kb_variants + + + + + French (Switzerland, Sun dead keys) + kb_variants + + + + + French (Switzerland, no dead keys) + kb_variants + + + + + French (US) + kb_variants + + + + + French (alt.) + kb_variants + + + + + French (alt., Latin-9 only) + kb_variants + + + + + French (alt., Sun dead keys) + kb_variants + + + + + French (alt., no dead keys) + kb_variants + + + + + French (legacy, alt.) + kb_variants + + + + + French (legacy, alt., Sun dead keys) + kb_variants + + + + + French (legacy, alt., no dead keys) + kb_variants + + + + + French (no dead keys) + kb_variants + + + + + Friulian (Italy) + kb_variants + + + + + Fula + kb_variants + + + + + Ga + kb_variants + + + + + Georgian (France, AZERTY Tskapo) + kb_variants + + + + + Georgian (Italy) + kb_variants + + + + + Georgian (MESS) + kb_variants + + + + + Georgian (ergonomic) + kb_variants + + + + + German (Austria, Macintosh) + kb_variants + + + + + German (Austria, Sun dead keys) + kb_variants + + + + + German (Austria, no dead keys) + kb_variants + + + + + German (Dvorak) + kb_variants + + + + + German (E1) + kb_variants + + + + + German (E2) + kb_variants + + + + + German (Macintosh) + kb_variants + + + + + German (Macintosh, no dead keys) + kb_variants + + + + + German (Neo 2) + kb_variants + + + + + German (QWERTY) + kb_variants + + + + + German (Sun dead keys) + kb_variants + + + + + German (Switzerland, Macintosh) + kb_variants + + + + + German (Switzerland, Sun dead keys) + kb_variants + + + + + German (Switzerland, legacy) + kb_variants + + + + + German (Switzerland, no dead keys) + kb_variants + + + + + German (T3) + kb_variants + + + + + German (US) + kb_variants + + + + + German (dead acute) + kb_variants + + + + + German (dead grave acute) + kb_variants + + + + + German (dead tilde) + kb_variants + + + + + German (no dead keys) + kb_variants + + + + + Greek (extended) + kb_variants + + + + + Greek (no dead keys) + kb_variants + + + + + Greek (polytonic) + kb_variants + + + + + Greek (simple) + kb_variants + + + + + Gujarati + kb_variants + + + + + Hanyu Pinyin (with AltGr dead keys) + kb_variants + + + + + Hausa (Ghana) + kb_variants + + + + + Hausa (Nigeria) + kb_variants + + + + + Hawaiian + kb_variants + + + + + Hebrew (Biblical, Tiro) + kb_variants + + + + + Hebrew (lyx) + kb_variants + + + + + Hebrew (phonetic) + kb_variants + + + + + Hindi (Bolnagri) + kb_variants + + + + + Hindi (KaGaPa, phonetic) + kb_variants + + + + + Hindi (Wx) + kb_variants + + + + + Hungarian (QWERTY) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (no dead keys) + kb_variants + + + + + Hungarian (standard) + kb_variants + + + + + Icelandic (Dvorak) + kb_variants + + + + + Icelandic (Macintosh) + kb_variants + + + + + Icelandic (Macintosh, legacy) + kb_variants + + + + + Icelandic (Sun dead keys) + kb_variants + + + + + Icelandic (no dead keys) + kb_variants + + + + + Igbo + kb_variants + + + + + Indic (phonetic, IPA) + kb_variants + + + + + Indonesian (Arab Melayu, extended phonetic) + kb_variants + + + + + Inuktitut + kb_variants + + + + + Irish (UnicodeExpert) + kb_variants + + + + + Italian (IBM 142) + kb_variants + + + + + Italian (Macintosh) + kb_variants + + + + + Italian (US) + kb_variants + + + + + Italian (Windows) + kb_variants + + + + + Italian (intl., with dead keys) + kb_variants + + + + + Italian (no dead keys) + kb_variants + + + + + Japanese (Dvorak) + kb_variants + + + + + Japanese (Kana 86) + kb_variants + + + + + Japanese (Kana) + kb_variants + + + + + Japanese (Macintosh) + kb_variants + + + + + Japanese (OADG 109A) + kb_variants + + + + + Kabylian (Algeria, Tifinagh) + kb_variants + + + + + Kabylian (azerty layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-gb layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-us layout, with dead keys) + kb_variants + + + + + Kalmyk + kb_variants + + + + + Kannada + kb_variants + + + + + Kannada (KaGaPa, phonetic) + kb_variants + + + + + Kashubian + kb_variants + + + + + Kazakh (Latin) + kb_variants + + + + + Kazakh (extended) + kb_variants + + + + + Kazakh (with Russian) + kb_variants + + + + + Kikuyu + kb_variants + + + + + Komi + kb_variants + + + + + Korean (101/104-key compatible) + kb_variants + + + + + Kurdish (Iran, Arabic-Latin) + kb_variants + + + + + Kurdish (Iran, F) + kb_variants + + + + + Kurdish (Iran, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iran, Latin Q) + kb_variants + + + + + Kurdish (Iraq, Arabic-Latin) + kb_variants + + + + + Kurdish (Iraq, F) + kb_variants + + + + + Kurdish (Iraq, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iraq, Latin Q) + kb_variants + + + + + Kurdish (Syria, F) + kb_variants + + + + + Kurdish (Syria, Latin Alt-Q) + kb_variants + + + + + Kurdish (Syria, Latin Q) + kb_variants + + + + + Kurdish (Turkey, F) + kb_variants + + + + + Kurdish (Turkey, Latin Alt-Q) + kb_variants + + + + + Kurdish (Turkey, Latin Q) + kb_variants + + + + + Kyrgyz (phonetic) + kb_variants + + + + + Lao (STEA) + kb_variants + + + + + Latvian (F) + kb_variants + + + + + Latvian (adapted) + kb_variants + + + + + Latvian (apostrophe) + kb_variants + + + + + Latvian (ergonomic, ŪGJRMV) + kb_variants + + + + + Latvian (modern) + kb_variants + + + + + Latvian (tilde) + kb_variants + + + + + Lithuanian (IBM LST 1205-92) + kb_variants + + + + + Lithuanian (LEKP) + kb_variants + + + + + Lithuanian (LEKPa) + kb_variants + + + + + Lithuanian (US) + kb_variants + + + + + Lithuanian (standard) + kb_variants + + + + + Lower Sorbian + kb_variants + + + + + Lower Sorbian (QWERTZ) + kb_variants + + + + + Macedonian (no dead keys) + kb_variants + + + + + Malay (Jawi, phonetic) + kb_variants + + + + + Malayalam + kb_variants + + + + + Malayalam (Lalitha) + kb_variants + + + + + Malayalam (enhanced Inscript, with rupee) + kb_variants + + + + + Maltese (UK, with AltGr overrides) + kb_variants + + + + + Maltese (US layout with AltGr overrides) + kb_variants + + + + + Maltese (US) + kb_variants + + + + + Manipuri (Eeyek) + kb_variants + + + + + Marathi (KaGaPa, phonetic) + kb_variants + + + + + Marathi (enhanced Inscript) + kb_variants + + + + + Mari + kb_variants + + + + + Mmuock + kb_variants + + + + + Moldavian (Gagauz) + kb_variants + + + + + Mongolian (Bichig) + kb_variants + + + + + Mongolian (Galik) + kb_variants + + + + + Mongolian (Manchu Galik) + kb_variants + + + + + Mongolian (Manchu) + kb_variants + + + + + Mongolian (Todo Galik) + kb_variants + + + + + Mongolian (Todo) + kb_variants + + + + + Mongolian (Xibe) + kb_variants + + + + + Montenegrin (Cyrillic) + kb_variants + + + + + Montenegrin (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Montenegrin (Cyrillic, with guillemets) + kb_variants + + + + + Montenegrin (Latin, QWERTY) + kb_variants + + + + + Montenegrin (Latin, Unicode) + kb_variants + + + + + Montenegrin (Latin, Unicode, QWERTY) + kb_variants + + + + + Montenegrin (Latin, with guillemets) + kb_variants + + + + + Northern Saami (Finland) + kb_variants + + + + + Northern Saami (Norway) + kb_variants + + + + + Northern Saami (Norway, no dead keys) + kb_variants + + + + + Northern Saami (Sweden) + kb_variants + + + + + Norwegian (Colemak) + kb_variants + + + + + Norwegian (Dvorak) + kb_variants + + + + + Norwegian (Macintosh) + kb_variants + + + + + Norwegian (Macintosh, no dead keys) + kb_variants + + + + + Norwegian (Windows) + kb_variants + + + + + Norwegian (no dead keys) + kb_variants + + + + + Occitan + kb_variants + + + + + Ogham + kb_variants + + + + + Ogham (IS434) + kb_variants + + + + + Ol Chiki + kb_variants + + + + + Oriya + kb_variants + + + + + Ossetian (Georgia) + kb_variants + + + + + Ossetian (Windows) + kb_variants + + + + + Ossetian (legacy) + kb_variants + + + + + Pannonian Rusyn + kb_variants + + + + + Pashto + kb_variants + + + + + Pashto (Afghanistan, OLPC) + kb_variants + + + + + Persian (Afghanistan, Dari OLPC) + kb_variants + + + + + Persian (with Persian keypad) + kb_variants + + + + + Polish (British keyboard) + kb_variants + + + + + Polish (Dvorak) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on key 1) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on quotemark key) + kb_variants + + + + + Polish (QWERTZ) + kb_variants + + + + + Polish (legacy) + kb_variants + + + + + Polish (programmer Dvorak) + kb_variants + + + + + Portuguese (Brazil, Dvorak) + kb_variants + + + + + Portuguese (Brazil, IBM/Lenovo ThinkPad) + kb_variants + + + + + Portuguese (Brazil, Nativo for US keyboards) + kb_variants + + + + + Portuguese (Brazil, Nativo) + kb_variants + + + + + Portuguese (Brazil, no dead keys) + kb_variants + + + + + Portuguese (Macintosh) + kb_variants + + + + + Portuguese (Macintosh, Sun dead keys) + kb_variants + + + + + Portuguese (Macintosh, no dead keys) + kb_variants + + + + + Portuguese (Nativo for US keyboards) + kb_variants + + + + + Portuguese (Nativo) + kb_variants + + + + + Portuguese (Sun dead keys) + kb_variants + + + + + Portuguese (no dead keys) + kb_variants + + + + + Punjabi (Gurmukhi Jhelum) + kb_variants + + + + + Punjabi (Gurmukhi) + kb_variants + + + + + Romanian (Germany) + kb_variants + + + + + Romanian (Germany, no dead keys) + kb_variants + + + + + Romanian (Windows) + kb_variants + + + + + Romanian (cedilla) + kb_variants + + + + + Romanian (standard cedilla) + kb_variants + + + + + Romanian (standard) + kb_variants + + + + + Russian (Belarus) + kb_variants + Русӣ (Беларус) + + + + Russian (Czech, phonetic) + kb_variants + Русӣ (Чехӣ, фонетикӣ) + + + + Russian (DOS) + kb_variants + Русӣ (DOS) + + + + Russian (Georgia) + kb_variants + Русӣ (Гурҷӣ) + + + + Russian (Germany, phonetic) + kb_variants + Русӣ (Немисӣ, фонетикӣ) + + + + Russian (Kazakhstan, with Kazakh) + kb_variants + Русӣ (Қазоқистон, бо қазоқӣ) + + + + Russian (Macintosh) + kb_variants + Русӣ (Макинтош) + + + + Russian (Poland, phonetic Dvorak) + kb_variants + Русӣ (Полша, Дворакии фонетикӣ) + + + + Russian (Sweden, phonetic) + kb_variants + Русӣ (Шведӣ, фонетикӣ) + + + + Russian (Sweden, phonetic, no dead keys) + kb_variants + Русӣ (Шведӣ, фонетикӣ, бе тугмаҳои хомӯшӣ) + + + + Russian (US, phonetic) + kb_variants + Русӣ (ИМА, фонетикӣ) + + + + Russian (Ukraine, standard RSTU) + kb_variants + Русӣ (Украина, RSTU-и стандартӣ) + + + + Russian (legacy) + kb_variants + Русӣ (ворисӣ) + + + + Russian (phonetic) + kb_variants + Русӣ (фонетикӣ) + + + + Russian (phonetic, AZERTY) + kb_variants + Русӣ (фонетикӣ, AZERTY) + + + + Russian (phonetic, Dvorak) + kb_variants + Русӣ (фонетикӣ, Дворак) + + + + Russian (phonetic, French) + kb_variants + Русӣ (фонетикӣ, Франсузӣ) + + + + Russian (phonetic, Windows) + kb_variants + Русӣ (фонетикӣ, Windows) + + + + Russian (phonetic, YAZHERTY) + kb_variants + Русӣ (фонетикӣ, YAZHERTY) + + + + Russian (typewriter) + kb_variants + Русӣ (мошини хатнависӣ) + + + + Russian (typewriter, legacy) + kb_variants + Русӣ (мошини хатнависӣ, ворисӣ) + + + + Saisiyat (Taiwan) + kb_variants + + + + + Samogitian + kb_variants + + + + + Sanskrit (KaGaPa, phonetic) + kb_variants + + + + + Serbian (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Serbian (Cyrillic, with guillemets) + kb_variants + + + + + Serbian (Latin) + kb_variants + + + + + Serbian (Latin, QWERTY) + kb_variants + + + + + Serbian (Latin, Unicode) + kb_variants + + + + + Serbian (Latin, Unicode, QWERTY) + kb_variants + + + + + Serbian (Latin, with guillemets) + kb_variants + + + + + Serbian (Russia) + kb_variants + + + + + Serbo-Croatian (US) + kb_variants + + + + + Sicilian + kb_variants + + + + + Silesian + kb_variants + + + + + Sindhi + kb_variants + + + + + Sinhala (US) + kb_variants + + + + + Slovak (QWERTY) + kb_variants + + + + + Slovak (QWERTY, extended backslash) + kb_variants + + + + + Slovak (extended backslash) + kb_variants + + + + + Slovenian (US) + kb_variants + + + + + Slovenian (with guillemets) + kb_variants + + + + + Spanish (Dvorak) + kb_variants + + + + + Spanish (Latin American, Colemak for gaming) + kb_variants + + + + + Spanish (Latin American, Colemak) + kb_variants + + + + + Spanish (Latin American, Dvorak) + kb_variants + + + + + Spanish (Latin American, Sun dead keys) + kb_variants + + + + + Spanish (Latin American, dead tilde) + kb_variants + + + + + Spanish (Latin American, no dead keys) + kb_variants + + + + + Spanish (Macintosh) + kb_variants + + + + + Spanish (Sun dead keys) + kb_variants + + + + + Spanish (Windows) + kb_variants + + + + + Spanish (dead tilde) + kb_variants + + + + + Spanish (no dead keys) + kb_variants + + + + + Swedish (Dvorak) + kb_variants + + + + + Swedish (Dvorak, intl.) + kb_variants + + + + + Swedish (Macintosh) + kb_variants + + + + + Swedish (Svdvorak) + kb_variants + + + + + Swedish (US) + kb_variants + + + + + Swedish (no dead keys) + kb_variants + + + + + Swedish Sign Language + kb_variants + + + + + Syriac + kb_variants + + + + + Syriac (phonetic) + kb_variants + + + + + Taiwanese (indigenous) + kb_variants + + + + + Tajik (legacy) + kb_variants + Тоҷикӣ (ворисӣ) + + + + Tamil (Inscript) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99 with Tamil numerals) + kb_variants + + + + + Tamil (TamilNet '99) + kb_variants + + + + + Tamil (TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99, TSCII encoding) + kb_variants + + + + + Tatar + kb_variants + Тоторӣ + + + + Telugu + kb_variants + + + + + Telugu (KaGaPa, phonetic) + kb_variants + + + + + Telugu (Sarala) + kb_variants + + + + + Thai (Pattachote) + kb_variants + + + + + Thai (TIS-820.2538) + kb_variants + + + + + Tibetan + kb_variants + + + + + Tibetan (with ASCII numerals) + kb_variants + + + + + Turkish (Alt-Q) + kb_variants + + + + + Turkish (F) + kb_variants + + + + + Turkish (Germany) + kb_variants + + + + + Turkish (Sun dead keys) + kb_variants + + + + + Turkish (intl., with dead keys) + kb_variants + + + + + Turkmen (Alt-Q) + kb_variants + Туркменӣ (Alt-Q) + + + + Udmurt + kb_variants + Удмуртӣ + + + + Ukrainian (Windows) + kb_variants + Украинӣ (Windows) + + + + Ukrainian (homophonic) + kb_variants + Украинӣ (гомофонӣ) + + + + Ukrainian (legacy) + kb_variants + Украинӣ (ворисӣ) + + + + Ukrainian (phonetic) + kb_variants + Украинӣ (фонетикӣ) + + + + Ukrainian (standard RSTU) + kb_variants + Украинӣ (RSTU-и стандартӣ) + + + + Ukrainian (typewriter) + kb_variants + Украинӣ (мошини хатнависӣ) + + + + Urdu (Pakistan, CRULP) + kb_variants + + + + + Urdu (Pakistan, NLA) + kb_variants + + + + + Urdu (Windows) + kb_variants + + + + + Urdu (alt. phonetic) + kb_variants + + + + + Urdu (phonetic) + kb_variants + + + + + Uyghur + kb_variants + Ӯйғурӣ + + + + Uzbek (Afghanistan) + kb_variants + Ӯзбекӣ (Афғонистон) + + + + Uzbek (Afghanistan, OLPC) + kb_variants + Ӯзбекӣ (Афғонистон, OLPC) + + + + Uzbek (Latin) + kb_variants + Ӯзбекӣ (Лотинӣ) + + + + Vietnamese (French) + kb_variants + Ветнамӣ (Франсузӣ) + + + + Vietnamese (US) + kb_variants + Ветнамӣ (ИМА) + + + + Yakut + kb_variants + Ёқутӣ + + + + Yoruba + kb_variants + Йоруба + + + diff --git a/lang/python.pot b/lang/python.pot index 93a0c9d70..1875d91be 100644 --- a/lang/python.pot +++ b/lang/python.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,66 +18,87 @@ msgstr "" "Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configure GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Mounting partitions." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Internal error mounting zfs datasets" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Failed to import zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Failed to unlock zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Failed to set zfs mountpoint" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Configuration Error" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "No partitions are defined for
{!s}
to use." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs mounting error" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configure systemd services" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Cannot modify service" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} call in chroot returned error code {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Cannot enable systemd service {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Cannot enable systemd target {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Cannot enable systemd timer {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Cannot disable systemd target {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Cannot mask systemd unit {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -85,160 +106,155 @@ msgstr "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Unmount file systems." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Filling up filesystems." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync failed with error code {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Unpacking image {}/{}, file {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Starting to unpack {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Failed to unpack image \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "No mount point for root partition" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage does not contain a \"rootMountPoint\" key." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Bad mount point for root partition" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint is \"{}\", which does not exist." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Bad unpackfs configuration" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "There is no configuration information." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "The filesystem for \"{}\" ({}) is not supported by your current kernel" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "The source filesystem \"{}\" does not exist" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "The destination \"{}\" in the target system is not a directory" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Cannot write KDM configuration file" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM config file {!s} does not exist" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Cannot write LXDM configuration file" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM config file {!s} does not exist" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Cannot write LightDM configuration file" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM config file {!s} does not exist" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Cannot configure LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "No LightDM greeter installed." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Cannot write SLIM configuration file" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM config file {!s} does not exist" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "No display managers selected for the displaymanager module." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Display manager configuration was incomplete" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configuring mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "No root mount point is given for
{!s}
to use." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Configuring encrypted swap." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installing data." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configure OpenRC services" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Cannot add service {name!s} to run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Cannot remove service {name!s} from run-level {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -246,17 +262,17 @@ msgstr "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} call in chroot returned error code {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Target runlevel does not exist" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -264,11 +280,11 @@ msgstr "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Target service does not exist" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." @@ -276,79 +292,136 @@ msgstr "" "The path for service {name!s} is {path!s}, which does not " "exist." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configure Plymouth theme" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Install packages." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "Installing %(num)d packages." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Removing %(num)d packages." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Package Manager error" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Install bootloader." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "Failed to install grub, no partitions defined in global storage" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Bootloader installation error" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Setting hardware clock." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Creating initramfs with mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Failed to run mkinitfs on the target" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "The exit code was {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Creating initramfs with dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Failed to run dracut on the target" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configuring initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuring OpenRC dmcrypt service." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Writing fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "No
{!s}
configuration is given for
{!s}
to use." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python job." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python step {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Configuring locales." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Saving network configuration." diff --git a/lang/python/ar/LC_MESSAGES/python.mo b/lang/python/ar/LC_MESSAGES/python.mo deleted file mode 100644 index 53869a8e7..000000000 Binary files a/lang/python/ar/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ar/LC_MESSAGES/python.po b/lang/python/ar/LC_MESSAGES/python.po index d1ec29666..a861cb647 100644 --- a/lang/python/ar/LC_MESSAGES/python.po +++ b/lang/python/ar/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: aboodilankaboot, 2019\n" "Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n" @@ -22,265 +22,281 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "جاري تركيب الأقسام" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "خطأ في الضبط" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "تعديل خدمات systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "لا يمكن تعديل الخدمة" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "الغاء تحميل ملف النظام" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "جاري ملئ أنظمة الملفات" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "فشل rsync مع رمز الخطأ {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "فشلت كتابة ملف ضبط KDM." -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "ملف ضبط KDM {!s} غير موجود" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "فشلت كتابة ملف ضبط LXDM." -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "ملف ضبط LXDM {!s} غير موجود" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "فشلت كتابة ملف ضبط LightDM." -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "ملف ضبط LightDM {!s} غير موجود" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "فشل ضبط LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "لم يتم تصيب LightDM" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "فشلت كتابة ملف ضبط SLIM." -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "ملف ضبط SLIM {!s} غير موجود" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "إعداد مدير العرض لم يكتمل" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "الـ runlevel الهدف غير موجود" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "الخدمة الهدف غير موجودة" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "تثبيت الحزم" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "جاري تحميل الحزم (%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -291,7 +307,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -302,51 +318,100 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "تثبيت محمل الإقلاع" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "جاري إعداد ساعة الهاردوير" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "كود الخروج كان {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "عملية بايثون دميه" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "عملية دميه خطوه بايثون {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "جاري حفظ الإعدادات" diff --git a/lang/python/as/LC_MESSAGES/python.mo b/lang/python/as/LC_MESSAGES/python.mo deleted file mode 100644 index f9533c495..000000000 Binary files a/lang/python/as/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/as/LC_MESSAGES/python.po b/lang/python/as/LC_MESSAGES/python.po index dbd71ed25..5744ae684 100644 --- a/lang/python/as/LC_MESSAGES/python.po +++ b/lang/python/as/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Deep Jyoti Choudhury , 2020\n" "Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/)\n" @@ -21,65 +21,86 @@ msgstr "" "Language: as\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB কনফিগাৰ কৰক।" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "বিভাজন মাউন্ট্ কৰা।" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "কনফিগাৰেচন ত্ৰুটি" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
ৰ ব্যৱহাৰৰ বাবে কোনো বিভাজনৰ বৰ্ণনা দিয়া হোৱা নাই।" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd সেৱা সমুহ কনফিগাৰ কৰক" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "সেৱা সমুহৰ সংশোধন কৰিব নোৱাৰি" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chrootত systemctl {arg!s}ৰ call ক্ৰুটি কোড {num!s}।" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "systemd সেৱা {name!s} সক্ৰিয় কৰিব নোৱাৰি।" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd গন্তব্য স্থান {name!s} সক্ৰিয় কৰিব নোৱাৰি।" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd গন্তব্য স্থান {name!s} নিষ্ক্ৰিয় কৰিব নোৱাৰি।" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd একক {name!s} মাস্ক্ কৰিব নোৱাৰি।" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -87,160 +108,151 @@ msgstr "" "একক {name!s}ৰ বাবে {command!s} আৰু {suffix!s} " "অজ্ঞাত systemd কমাণ্ড্।" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "ফাইল চিছটেম​বোৰ মাউণ্টৰ পৰা আতৰাওক।" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "ফাইল চিছটেম​বোৰ পূৰণ কৰা হৈ আছে।" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync ক্ৰুটি কোড {}ৰ সৈতে বিফল হ'ল।" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "ইমেজ \"{}\" খোলাত ব্যৰ্থ হ'ল" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "ৰুট বিভাজনত কোনো মাউণ্ট পইণ্ট্ নাই" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage ত rootMountPoint key নাই, একো কৰিব পৰা নাযায়" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "মুল বিভাজনৰ বাবে বেয়া মাউন্ট্ পইন্ট্" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint হ'ল \"{}\", যিটো উপস্থিত নাই, একো কৰিব পৰা নাযায়" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "বেয়া unsquash কনফিগাৰেচন" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" ফাইল চিছটেম উপস্থিত নাই" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"unsquashfs বিচৰাত ব্যৰ্থ হ'ল, নিশ্চিত কৰক যে আপুনি squashfs-tools ইন্স্তল " -"কৰিছে" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "লক্ষ্যৰ চিছটেম গন্তব্য স্থান \"{}\" এটা ডিৰেক্টৰী নহয়" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM কনফিগ্ ফাইল {!s} উপস্থিত নাই" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM কনফিগ্ ফাইল {!s} উপস্থিত নাই" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM কনফিগ্ ফাইল {!s} উপস্থিত নাই" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM কনফিগাৰ কৰিব নোৱাৰি" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "কোনো LightDM স্ৱাগতকৰ্তা ইন্স্তল নাই।" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM কনফিগ্ ফাইল {!s} উপস্থিত নাই" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager মডিউলৰ বাবে কোনো ডিস্প্লে প্ৰবন্ধক নাই।" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"bothglobalstorage আৰু displaymanager.confত displaymanagers সুচিখন খালী বা " -"অবৰ্ণিত।" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "ডিস্প্লে প্ৰবন্ধক কন্ফিগাৰেচন অসমাপ্ত" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio কনফিগাৰ কৰি আছে।" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "ব্যৱহাৰৰ বাবে
{!s}
ৰ কোনো মাউন্ট্ পাইন্ট্ দিয়া হোৱা নাই।" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "এন্ক্ৰিপ্টেড স্ৱেপ কন্ফিগাৰ কৰি আছে।" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "ডাটা ইন্স্তল কৰি আছে।" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC সেৱা সমুহ কনফিগাৰ কৰক" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "ৰাণ-লেভেল {level!s}ত সেৱা {name!s} যোগ কৰিব নোৱাৰি।" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "ৰাণ-লেভেল {level!s}ৰ পৰা সেৱা {name!s} আতৰাব নোৱাৰি।" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -248,105 +260,154 @@ msgstr "" "ৰান-লেভেল {level!s}ত সেৱা {name!s}ৰ বাবে অজ্ঞাত সেৱা কাৰ্য্য " "{arg!s} ।" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chrootত rc-update {arg!s} call ক্ৰুটি কোড {num!s}।" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "গন্তব্য ৰাণলেভেল উপস্থিত নাই।" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "{level!s} ৰাণলেভেলৰ বাবে পথ হ'ল {path!s} যিটো উপস্থিত নাই।" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "গন্তব্য সেৱা উপস্থিত নাই।" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s}ৰ বাবে পথ হ'ল {path!s} যিটো উপস্থিত নাই।" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth theme কন্ফিগাৰ কৰি আছে।​" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "পেকেজ ইন্স্তল কৰক।" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) পেকেজবোৰ সংশোধন কৰি আছে" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "%(num)d পেকেজবোৰ ইনস্তল হৈ আছে।" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "%(num)d পেকেজবোৰ আতৰোৱা হৈ আছে।" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "বুতলোডাৰ ইন্স্তল কৰক।" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "হাৰ্ডৱেৰৰ ঘড়ী চেত্ কৰি আছে।" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "dracutৰ সৈতে initramfs বনাই আছে।" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "গন্তব্য স্থানত dracut চলোৱাত বিফল হ'ল" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "এক্সিড্ কোড্ আছিল {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "dracutৰ সৈতে initramfs বনাই আছে।" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "গন্তব্য স্থানত dracut চলোৱাত বিফল হ'ল" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs কন্ফিগাৰ কৰি আছে।" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt সেৱা কন্ফিগাৰ কৰি আছে।" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab লিখি আছে।" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "ডামী Pythonৰ কায্য" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "ডামী Pythonৰ পদক্ষেপ {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "স্থানীয়বোৰ কন্ফিগাৰ কৰি আছে।" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "নেটৱৰ্ক কন্ফিগাৰ জমা কৰি আছে।" diff --git a/lang/python/ast/LC_MESSAGES/python.mo b/lang/python/ast/LC_MESSAGES/python.mo deleted file mode 100644 index d14fb29fa..000000000 Binary files a/lang/python/ast/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ast/LC_MESSAGES/python.po b/lang/python/ast/LC_MESSAGES/python.po index 2d6784012..7d14ee498 100644 --- a/lang/python/ast/LC_MESSAGES/python.po +++ b/lang/python/ast/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: enolp , 2020\n" "Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/)\n" @@ -21,329 +21,389 @@ msgstr "" "Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Nun pue modificase'l serviciu" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmontaxe de sistemes de ficheros." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Rellenando los sistemes de ficheros." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync falló col códigu de fallu {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Fallu al desempaquetar la imaxe «{}»" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nun hai un puntu de montaxe pa la partición del raigañu" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -"globalstorage nun contién una clave «rootMountPoint». Nun va facese nada" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "El puntu de montaxe ye incorreutu pa la partición del raigañu" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint ye «{}» que nun esiste. Nun va facese nada" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "La configuración d'espardimientu ye incorreuta" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de ficheros d'orixe «{}» nun esiste" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Fallu al alcontrar unsquashfs, asegúrate que tienes instaláu'l paquete " -"squashfs-tools" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destín «{}» nel sistema de destín nun ye un direutoriu" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de KDM {!s}" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LXDM {!s}" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LightDM {!s}" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nun pue configurase LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nun s'instaló nengún saludador de LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de SLIM {!s}" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Nun s'esbillaron xestores de pantalles pal módulu displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"La llista displaymanagers ta balera o nun se definió en bothglobalstorage y " -"displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "La configuración del xestor de pantalles nun se completó" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Configurando l'intercambéu cifráu." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando datos." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Nun pue amestase'l serviciu {name!s} al nivel d'execución {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Nun pue desaniciase'l serviciu {name!s} del nivel d'execución {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "El nivel d'execución de destín nun esiste" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "El serviciu de destín nun esiste" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalación de paquetes." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando %(num)d paquetes." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Desaniciando un paquete." msgstr[1] "Desaniciando %(num)d paquetes." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalando'l xestor d'arrinque." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Configurando'l reló de hardware." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Fallu al executar dracut nel destín" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "El códigu de salida foi {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Fallu al executar dracut nel destín" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando'l serviciu dmcrypt d'OpenRC." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Trabayu maniquín en Python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Pasu maniquín {} en Python" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Configurando locales." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/az/LC_MESSAGES/python.po b/lang/python/az/LC_MESSAGES/python.po new file mode 100644 index 000000000..c1157b815 --- /dev/null +++ b/lang/python/az/LC_MESSAGES/python.po @@ -0,0 +1,433 @@ +# 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 , YEAR. +# +# Translators: +# Xəyyam Qocayev , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Xəyyam Qocayev , 2022\n" +"Language-Team: Azerbaijani (https://www.transifex.com/calamares/teams/20061/az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "GRUB tənzimləmələri" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "Disk bölmələri qoşulur." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Zfs verilənlər dəstinin qoşulmasında daxil xəta" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Zpool idxalı baş tutmadı" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Zpool kiliddən çıxarıla bilmədi" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Zfs qoşulma nöqtəsi təyin olunmadı" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Tənzimləmə xətası" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "
{!s}
istifadə etmək üçün bölmələr təyin edilməyib" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs qoşulmasında xəta" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "Systemd xidmətini tənzimləmək" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "Xidmətdə dəyişiklik etmək mümkün olmadı" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"systemctl {arg!s} chroot çağırışına xəta kodu ilə cavab verdi " +"{num!s}." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "{name!s} systemd xidməti aktiv edilmədi." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "{name!s} systemd hədəfi aktiv edilmədi" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "{name!s} systemd taymeri aktiv edilə bilmir." + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "{name!s} systemd hədfi sönsürülmədi." + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "{name!s} systemd vahidi maskalanmır." + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" +"Naməlum systemd əmrləri {command!s}{suffix!s} " +"{name!s} vahidi üçün." + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "Fayl sistemlərini doldurmaq." + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "rsync uğursuz oldu, xəta kodu: {}." + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" +"Tərkibi çıxarılan quraşdırma faylı - image {}/{}, çıxarılan faylların sayı " +"{}/{}" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "Tərkiblərini açmağa başladılır {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "\"{}\" quraşdırma faylının tərkibini çıxarmaq alınmadı" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "Kök bölməsi üçün qoşulma nöqtəsi yoxdur" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage tərkibində bir \"rootMountPoint\" açarı yoxdur." + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "Kök bölməsi üçün xətalı qoşulma nöqtəsi" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint \"{}\" mövcud deyil." + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Xətalı unpackfs tənzimləməsi" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Tənzimləmə məlumatı yoxdur" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "\"{}\" ({}) fayl sistemi sizin nüvəniz tərəfindən dəstəklənmir" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "\"{}\" mənbə fayl sistemi mövcud deyil" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" +"Unsquashfs tapılmadı, squashfs-tools paketinin quraşdırıldığına əmin olun." + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "Hədəf sistemində təyin edilən \"{}\", qovluq deyil" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "KDM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "KDM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "LXDM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "LXDM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "LightDM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "LightDM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "LightDM tənzimlənə bilmir" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "LightDM qarşılama quraşdırılmayıb." + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "SLİM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "SLİM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "displaymanager modulu üçün ekran menecerləri seçilməyib." + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" +"Ekran menecerləri siyahısı həm qlobal yaddaşda, həm də displaymanager.conf-" +"da boşdur və ya təyin olunmamışdır." + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "Ekran meneceri tənzimləmələri başa çatmadı" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "mkinitcpio tənzimlənir." + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" +"
{!s}
istifadə etmək üçün kök qoşulma nöqtəsi təyin edilməyib." + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "Quraşdırılma tarixi." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "OpenRC xidmətlərini tənzimləmək" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "{name!s} xidməti {level!s} işləmə səviyyəsinə əlavə edilə bilmir." + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "{name!s} xidməti {level!s} iş səviyyəsindən silinə bilmir." + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" +"{level!s} işləmə səviyyəsindəki {name!s} xidməti üçün naməlum " +"{arg!s} xidmət fəaliyyəti." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"rc-update {arg!s} chroot-da çağırışına {num!s} xəta kodu ilə " +"cavab verildi." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "Hədəf işləmə səviyyəsi mövcud deyil" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" +"{level!s} işləmə səviyyəsi üçün {path!s} yolu mövcud deyil." + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "Hədəf xidməti mövcud deyil" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "{name!s} üçün {path!s} yolu mövcud deyil." + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Plymouth mövzusu tənzimlənməsi" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "Paketləri quraşdırmaq." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "(%(count)d / %(total)d) paketləri işlənir" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "Bir paket quraşdırılır." +msgstr[1] "%(num)d paket quraşdırılır." + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "Bir paket silinir" +msgstr[1] "%(num)d paket silinir." + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Paket meneceri xətası" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Bu paket meneceri yenilənmələri hazırlaya bilmədi.
{!s}
əmri xəta" +" kodu {!s} ilə cavab verdi." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Paket meneceri sistemi yeniləyə bimədi.
{!s}
əmri xəta kodu {!s} " +"ilə cavab verdi." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Paket meneceri dəyişiklikləri sistemə tətbiq edə bilmədi.
{!s}
" +"əmri xəta kodu {!s} ilə cavab verdi." + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Önyükləyici qurulur." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "Grub quraşdırılmadı, ümumi yaddaş üçün bölmələr təyin olunmayıb" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Önyükləyicinin quraşdırılmasında xəta" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Önyükləyici quraşdırıla bilmədi. Quraşdırma əmri
{!s}
, xəta kodu " +"{!s} ilə cavab verdi." + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "Aparat saatını ayarlamaq." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "mkinitfs ilə initramfs yaradılır" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Hədəfdə mkinitfs başlatmaq baş tutmadı" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Çıxış kodu {} idi" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Dracut ilə initramfs yaratmaq." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Hədəfdə dracut başladılmadı" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "initramfs tənzimlənir." + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "OpenRC dmcrypt xidməti tənzimlənir." + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "fstab yazılır." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"İstifadə etmək üçün,
{!s}
tənzimləməsi,
{!s}
üçün " +"göstərilməyib." + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "Dummy python işi." + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "{} Dummy python addımı" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "Lokallaşma tənzimlənir." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "Şəbəkə ayarları saxlanılır." diff --git a/lang/python/az_AZ/LC_MESSAGES/python.po b/lang/python/az_AZ/LC_MESSAGES/python.po new file mode 100644 index 000000000..ceac2150a --- /dev/null +++ b/lang/python/az_AZ/LC_MESSAGES/python.po @@ -0,0 +1,433 @@ +# 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 , YEAR. +# +# Translators: +# Xəyyam Qocayev , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Xəyyam Qocayev , 2022\n" +"Language-Team: Azerbaijani (Azerbaijan) (https://www.transifex.com/calamares/teams/20061/az_AZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az_AZ\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "GRUB tənzimləmələri" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "Disk bölmələri qoşulur." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Zfs verilənlər dəstinin qoşulmasında daxil xəta" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Zpool idxalı baş tutmadı" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Zpool kiliddən çıxarıla bilmədi" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Zfs qoşulma nöqtəsi təyin olunmadı" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Tənzimləmə xətası" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "
{!s}
istifadə etmək üçün bölmələr təyin edilməyib" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs qoşulmasında xəta" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "Systemd xidmətini tənzimləmək" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "Xidmətdə dəyişiklik etmək mümkün olmadı" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"systemctl {arg!s} chroot çağırışına xəta kodu ilə cavab verdi " +"{num!s}." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "{name!s} systemd xidməti aktiv edilmədi." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "{name!s} systemd hədəfi aktiv edilmədi" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "{name!s} systemd taymeri aktiv edilə bilmir." + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "{name!s} systemd hədfi sönsürülmədi." + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "{name!s} systemd vahidi maskalanmır." + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" +"Naməlum systemd əmrləri {command!s}{suffix!s} " +"{name!s} vahidi üçün." + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "Fayl sistemlərini doldurmaq." + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "rsync uğursuz oldu, xəta kodu: {}." + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" +"Tərkibi çıxarılan quraşdırma faylı - image {}/{}, çıxarılan faylların sayı " +"{}/{}" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "Tərkiblərini açmağa başladılır {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "\"{}\" quraşdırma faylının tərkibini çıxarmaq alınmadı" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "Kök bölməsi üçün qoşulma nöqtəsi yoxdur" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage tərkibində bir \"rootMountPoint\" açarı yoxdur." + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "Kök bölməsi üçün xətalı qoşulma nöqtəsi" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint \"{}\" mövcud deyil." + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Xətalı unpackfs tənzimləməsi" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Tənzimləmə məlumatı yoxdur" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "\"{}\" ({}) fayl sistemi sizin nüvəniz tərəfindən dəstəklənmir" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "\"{}\" mənbə fayl sistemi mövcud deyil" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" +"Unsquashfs tapılmadı, squashfs-tools paketinin quraşdırıldığına əmin olun." + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "Hədəf sistemində təyin edilən \"{}\", qovluq deyil" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "KDM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "KDM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "LXDM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "LXDM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "LightDM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "LightDM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "LightDM tənzimlənə bilmir" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "LightDM qarşılama quraşdırılmayıb." + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "SLİM tənzimləmə faylı yazıla bilmir" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "SLİM tənzimləmə faylı {!s} mövcud deyil" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "displaymanager modulu üçün ekran menecerləri seçilməyib." + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" +"Ekran menecerləri siyahısı həm qlobal yaddaşda, həm də displaymanager.conf-" +"da boşdur və ya təyin olunmamışdır." + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "Ekran meneceri tənzimləmələri başa çatmadı" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "mkinitcpio tənzimlənir." + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" +"
{!s}
istifadə etmək üçün kök qoşulma nöqtəsi təyin edilməyib." + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "Quraşdırılma tarixi." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "OpenRC xidmətlərini tənzimləmək" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "{name!s} xidməti {level!s} işləmə səviyyəsinə əlavə edilə bilmir." + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "{name!s} xidməti {level!s} iş səviyyəsindən silinə bilmir." + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" +"{level!s} işləmə səviyyəsindəki {name!s} xidməti üçün naməlum " +"{arg!s} xidmət fəaliyyəti." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"rc-update {arg!s} chroot-da çağırışına {num!s} xəta kodu ilə " +"cavab verildi." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "Hədəf işləmə səviyyəsi mövcud deyil" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" +"{level!s} işləmə səviyyəsi üçün {path!s} yolu mövcud deyil." + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "Hədəf xidməti mövcud deyil" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "{name!s} üçün {path!s} yolu mövcud deyil." + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Plymouth mövzusu tənzimlənməsi" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "Paketləri quraşdırmaq." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "(%(count)d / %(total)d) paketləri işlənir" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "Bir paket quraşdırılır." +msgstr[1] "%(num)d paket quraşdırılır." + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "Bir paket silinir" +msgstr[1] "%(num)d paket silinir." + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Paket meneceri xətası" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Bu paket meneceri yenilənmələri hazırlaya bilmədi.
{!s}
əmri xəta" +" kodu {!s} ilə cavab verdi." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Paket meneceri sistemi yeniləyə bimədi.
{!s}
əmri xəta kodu {!s} " +"ilə cavab verdi." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Paket meneceri dəyişiklikləri sistemə tətbiq edə bilmədi.
{!s}
" +"əmri xəta kodu {!s} ilə cavab verdi." + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Önyükləyici qurulur." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "Grub quraşdırılmadı, ümumi yaddaş üçün bölmələr təyin olunmayıb" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Önyükləyicinin quraşdırılmasında xəta" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Önyükləyici quraşdırıla bilmədi. Quraşdırma əmri
{!s}
, xəta kodu " +"{!s} ilə cavab verdi." + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "Aparat saatını ayarlamaq." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "mkinitfs ilə initramfs yaradılır" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Hədəfdə mkinitfs başlatmaq baş tutmadı" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Çıxış kodu {} idi" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Dracut ilə initramfs yaratmaq." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Hədəfdə dracut başladılmadı" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "initramfs tənzimlənir." + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "OpenRC dmcrypt xidməti tənzimlənir." + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "fstab yazılır." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"İstifadə etmək üçün,
{!s}
tənzimləməsi,
{!s}
üçün " +"göstərilməyib." + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "Dummy python işi." + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "{} Dummy python addımı" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "Lokallaşma tənzimlənir." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "Şəbəkə ayarları saxlanılır." diff --git a/lang/python/be/LC_MESSAGES/python.mo b/lang/python/be/LC_MESSAGES/python.mo deleted file mode 100644 index 45559396c..000000000 Binary files a/lang/python/be/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/be/LC_MESSAGES/python.po b/lang/python/be/LC_MESSAGES/python.po index 326c24c82..983cc35be 100644 --- a/lang/python/be/LC_MESSAGES/python.po +++ b/lang/python/be/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Zmicer Turok , 2020 +# Źmicier Turok , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Zmicer Turok , 2020\n" +"Last-Translator: Źmicier Turok , 2020\n" "Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,65 +21,86 @@ msgstr "" "Language: be\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Наладзіць GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Мантаванне раздзелаў." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Памылка канфігурацыі" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Раздзелы для
{!s}
не вызначаныя." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Наладзіць службы systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Немагчыма наладзіць службу" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "systemctl {arg!s} у chroot вярнуў код памылкі {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Немагчыма ўключыць службу systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Немагчыма ўключыць мэту systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Немагчыма выключыць мэту systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Немагчыма замаскаваць адзінку systemd {name!s}. " -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -87,160 +108,153 @@ msgstr "" "Невядомыя systemd загады {command!s} і {suffix!s} " "для адзінкі {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Адмантаваць файлавыя сістэмы." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Запаўненне файлавых сістэм." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "памылка rsync з кодам {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Распакоўванне вобраза {}/{}, файл {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Запуск распакоўвання {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Не атрымалася распакаваць вобраз \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Для каранёвага раздзела няма пункта мантавання" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage не змяшчае ключа \"rootMountPoint\", нічога не выконваецца" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Хібны пункт мантавання для каранёвага раздзела" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint \"{}\" не існуе, нічога не выконваецца" - -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Хібная канфігурацыя unsquash" - -#: src/modules/unpackfs/main.py:423 -msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "Файлавая сістэма для \"{}\" ({}) не падтрымліваецца вашым бягучым ядром" + +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Зыходная файлавая сістэма \"{}\" не існуе" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Не атрымалася знайсці unsquashfs, праверце ці ўсталяваны ў вас пакунак " -"squashfs-tools" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Пункт прызначэння \"{}\" у мэтавай сістэме не з’яўляецца каталогам" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Файл канфігурацыі KDM {!s} не існуе" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Файл канфігурацыі LXDM {!s} не існуе" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Файл канфігурацыі LightDM {!s} не існуе" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Немагчыма наладзіць LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeter не ўсталяваны." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Файл канфігурацыі SLIM {!s} не існуе" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "У модулі дысплейных кіраўнікоў нічога не абрана." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Спіс дысплейных кіраўнікоў пусты альбо не вызначаны ў bothglobalstorage і " +"Спіс дысплейных кіраўнікоў пусты альбо не вызначаны ў both globalstorage і " "displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Наладка дысплейнага кіраўніка не завершаная." -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Наладка mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Каранёвы пункт мантавання для
{!s}
не пададзены." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Наладка зашыфраванага swap." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Усталёўка даных." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Наладзіць службы OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Не атрымалася дадаць службу {name!s} на ўзровень запуску {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Не атрымалася выдаліць службу {name!s} з узроўню запуску {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -248,47 +262,47 @@ msgstr "" "Невядомае дзеянне {arg!s} для службы {name!s} на ўзроўні " "запуску {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} пад chroot вярнуўся з кодам памылкі {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Мэтавы ўзровень запуску не існуе" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "Шлях {path!s} да ўзроўня запуску {level!s} не існуе." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Мэтавая служба не існуе" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "Шлях {path!s} да службы {level!s} не існуе." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Наладзіць тэму Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Усталяваць пакункі." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Апрацоўка пакункаў (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -297,7 +311,7 @@ msgstr[1] "Усталёўка %(num)d пакункаў." msgstr[2] "Усталёўка %(num)d пакункаў." msgstr[3] "Усталёўка%(num)d пакункаў." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -306,51 +320,100 @@ msgstr[1] "Выдаленне %(num)d пакункаў." msgstr[2] "Выдаленне %(num)d пакункаў." msgstr[3] "Выдаленне %(num)d пакункаў." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Усталяваць загрузчык." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Наладка апаратнага гадзінніка." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Стварэнне initramfs з dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Стварэнне initramfs праз mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Не атрымалася запусціць dracut у пункце прызначэння" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Не атрымалася запусціць mkinitfs у пункце прызначэння" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Код выхаду {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Стварэнне initramfs з dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Не атрымалася запусціць dracut у пункце прызначэння" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Наладка initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Наладка OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Запіс fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Задача Dummy python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Крок Dummy python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Наладка лакаляў." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Захаванне сеткавай канфігурацыі." diff --git a/lang/python/bg/LC_MESSAGES/python.mo b/lang/python/bg/LC_MESSAGES/python.mo deleted file mode 100644 index 51df83625..000000000 Binary files a/lang/python/bg/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/bg/LC_MESSAGES/python.po b/lang/python/bg/LC_MESSAGES/python.po index 4c2440aa6..bdabcc259 100644 --- a/lang/python/bg/LC_MESSAGES/python.po +++ b/lang/python/bg/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Georgi Georgiev , 2018 +# Georgi Georgiev (Жоро) , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Georgi Georgiev , 2018\n" +"Last-Translator: Georgi Georgiev (Жоро) , 2022\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" @@ -21,323 +21,390 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Конфигурирай GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "" +msgstr "Конфигурирай systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "" +msgstr "Услугата не може да се промени" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Демонтирай файловите системи." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "Конфигурационният файл на KDM не може да бъде записан" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" -msgstr "" +msgstr "Конфигурационният файл на KDM {!s} не съществува" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" -msgstr "" +msgstr "Конфигурационният файл на LXDM не може да бъде записан" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" -msgstr "" +msgstr "Конфигурационният файл на LXDM {!s} не съществува" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" -msgstr "" +msgstr "Конфигурационният файл на LightDM не може да бъде записан" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" -msgstr "" +msgstr "Конфигурационният файл на LightDM {!s} не съществува" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" -msgstr "" +msgstr "Конфигурационният файл на SLIM не може да бъде записан" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" -msgstr "" +msgstr "Конфигурационният файл на SLIM {!s} не съществува" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "Конфигуриране на mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "Конфигурирай OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "Услугата {name!s} не може да бъде добавена към run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "" +msgstr "Конфигурирай темата на Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Инсталирай пакетите." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработване на пакетите (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "Инсталиране на един пакет." -msgstr[1] "Инсталиране на %(num)d пакети." +msgstr[0] "Инсталиране на пакета." +msgstr[1] "Инсталиране на %(num)d пакета." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "Премахване на един пакет." -msgstr[1] "Премахване на %(num)d пакети." +msgstr[0] "Премахване на пакета." +msgstr[1] "Премахване на %(num)d пакета." -#: src/modules/bootloader/main.py:51 -msgid "Install bootloader." +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Инсталирай програма за начално зареждане." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Инсталирането на grub е неуспешно – няма определени дялове в мястото за " +"съхранение" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Грешка при инсталирането на програмата за начално зареждане" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Изходният код е {}" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Създаване на initramfs с dracut." + +#: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "" -#: src/modules/dracut/main.py:59 -msgid "The exit code was {}" -msgstr "" - -#: src/modules/initramfscfg/main.py:41 +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "Конфигуриране на initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Конфигуриране на услугата dmcrypt на OpenRC." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "Записване на fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "Фиктивна задача python." +msgstr "Фиктивна задача на python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Фиктивна стъпка на python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "" +msgstr "Конфигуриране на локализацията." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/bn/LC_MESSAGES/python.po b/lang/python/bn/LC_MESSAGES/python.po new file mode 100644 index 000000000..91b49dc23 --- /dev/null +++ b/lang/python/bn/LC_MESSAGES/python.po @@ -0,0 +1,409 @@ +# 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 , YEAR. +# +# Translators: +# 508a8b0ef95404aa3dc5178f0ccada5e_017b8a4 , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: 508a8b0ef95404aa3dc5178f0ccada5e_017b8a4 , 2020\n" +"Language-Team: Bengali (https://www.transifex.com/calamares/teams/20061/bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "কনফিগার করুন জিআরইউবি।" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "মাউন্ট করছে পার্টিশনগুলো।" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "কনফিগারেশন ত্রুটি" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "কোন পার্টিশন নির্দিষ্ট করা হয়নি
{!এস}
ব্যবহার করার জন্য।" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "কনফিগার করুন সিস্টেমডি সেবাগুলি" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "সেবা পরিবর্তন করতে পারে না" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"সিস্টেমসিটিএল {এআরজি!এস}সিএইচরুট ফেরত ত্রুটি কোড দে{NUM! গুলি}।" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "ফাইলসিস্টেমগুলিপূরণ করছে।" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "ত্রুটি কোড সহ আরসিঙ্ক ব্যর্থ হয়েছে {}।" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "চিত্র আনপ্যাক করছে {} / {}, ফাইল {} / {}" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "আনপ্যাক করা শুরু করছে {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "চিত্র আনপ্যাক করতে ব্যর্থ হয়েছে \"{}\"" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/ca/LC_MESSAGES/python.mo b/lang/python/ca/LC_MESSAGES/python.mo deleted file mode 100644 index 69051c442..000000000 Binary files a/lang/python/ca/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ca/LC_MESSAGES/python.po b/lang/python/ca/LC_MESSAGES/python.po index 143eafa14..2fae1f08e 100644 --- a/lang/python/ca/LC_MESSAGES/python.po +++ b/lang/python/ca/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Davidmp , 2020 +# Davidmp , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Davidmp , 2020\n" +"Last-Translator: Davidmp , 2022\n" "Language-Team: Catalan (https://www.transifex.com/calamares/teams/20061/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,67 +21,89 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura el GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Es munten les particions." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Error intern en muntar els conjunts de dades zfs" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "No s'ha pogut importar zpool." + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "No s'ha pogut desblocar zpool." + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "No s'ha pogut establir el punt de muntatge de zfs." + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Error de configuració" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "No s'han definit particions perquè les usi
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "error de muntatge de zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configura els serveis de systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "No es pot modificar el servei." -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "La crida de systemctl {arg!s} a chroot ha retornat el codi " "d'error {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "No es pot habilitar el servei de systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "No es pot habilitar la destinació de systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" +"No es pot habilitar el temporitzador de systemd {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "No es pot inhabilitar la destinació de systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "No es pot emmascarar la unitat de systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,163 +111,158 @@ msgstr "" "Ordres desconegudes de systemd: {command!s} i " "{suffix!s}, per a la unitat {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmunta els sistemes de fitxers." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "S'omplen els sistemes de fitxers." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Ha fallat rsync amb el codi d'error {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Es desempaqueta la imatge {}/{}, fitxer {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Es comença a desempaquetar {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ha fallat desempaquetar la imatge \"{}\"." -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "No hi ha punt de muntatge per a la partició d'arrel." -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage no conté cap clau de \"rootMountPoint\". No es fa res." +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage no conté una clau \"rootMountPoint\"." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Punt de muntatge incorrecte per a la partició d'arrel" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "El punt de muntatge d'arrel és \"{}\", que no existeix. No es fa res." +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "El punt de muntage d'arrel és \"{}\", però no existeix." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Configuració incorrecta d'unsquash." +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Configuració d'unpackfs incorrecta" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "No hi ha informació de configuració." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "El sistema de fitxers per a {} ({}) no és admès pel nucli actual." -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de fitxers font \"{}\" no existeix." -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Ha fallat trobar unsquashfs, assegureu-vos que tingueu el paquet squashfs-" -"tools instal·lat." +"No s'ha pogut trobar unsquashfs, assegureu-vos que tingueu instal·lat el " +"paquet squashfs-tools." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinació \"{}\" al sistema de destinació no és un directori." -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "No es pot escriure el fitxer de configuració del KDM." -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El fitxer de configuració del KDM {!s} no existeix." -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'LXDM." -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No es pot escriure el fitxer de configuració del LightDM." -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El fitxer de configuració del LightDM {!s} no existeix." -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No es pot configurar el LightDM." -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "No hi ha benvinguda instal·lada per al LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'SLIM." -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "No hi ha cap gestor de pantalla seleccionat per al mòdul displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"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 a bothglobalstorage " -"i displaymanager.conf." +"La llista de gestors de pantalla és buida o no definida ni a globalstorage " +"ni a displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "La configuració del gestor de pantalla no era completa." -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Es configura mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "No s'ha proporcionat el punt de muntatge perquè l'usi
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Es configura l'intercanvi encriptat." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "S'instal·len dades." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configura els serveis d'OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "No es pot afegir el servei {name!s} al nivell d'execució {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "No es pot suprimir el servei {name!s} del nivell d'execució {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -253,18 +270,18 @@ msgstr "" "Servei - acció desconeguda {arg!s} per al servei {name!s} al " "nivell d'execució {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "La crida de rc-update {arg!s} a chroot ha retornat el codi " "d'error {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "El nivell d'execució de destinació no existeix." -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -272,90 +289,150 @@ msgstr "" "El camí per al nivell d'execució {level!s} és {path!s}, però no" " existeix." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "El servei de destinació no existeix." -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "El camí per al servei {name!s} és {path!s}, però no existeix." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configura el tema del Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instal·la els paquets." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Es processen paquets (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "S'instal·la un paquet." msgstr[1] "S'instal·len %(num)d paquets." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Se suprimeix un paquet." msgstr[1] "Se suprimeixen %(num)d paquets." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Error del gestor de paquets" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"El gestor de paquets no ha pogut preparar les actualitzacions. " +"L'ordre
{!s}
ha retornat el codi d'error {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"El gestor de paquets no ha pogut actualitzar el sistema. L'ordre " +"
{!s}
ha retornat el codi d'error {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"El gestor de paquets no ha pogut fer canvis al sistema instal·lat. L'ordre " +"
{!s}
ha retornat el codi d'error {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "S'instal·la el carregador d'arrencada." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"No s'ha pogut instal·lar el grub. No s'han definit particions a " +"l'emmagatzematge global." + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Error d'instal·lació del carregador d'arrencada" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"No s'ha pogut instal·lar el carregador d'arrencada. L'ordre d'instal·lació " +"
{!s}
ha retornat el codi d'error {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "S'estableix el rellotge del maquinari." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Es creen initramfs amb dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Es creen initramfs amb mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Ha fallat executar dracut a la destinació." +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Ha fallat executar mkinitfs a la destinació." -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "El codi de sortida ha estat {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Es creen initramfs amb dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Ha fallat executar dracut a la destinació." + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Es configuren initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Es configura el sevei OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "S'escriu fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"No hi ha cap configuració de
{!s}
perquè la usi
{!s}
." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tasca de python fictícia." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Pas de python fitctici {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Es configuren les llengües." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Es desa la configuració de la xarxa." diff --git a/lang/python/ca@valencia/LC_MESSAGES/python.mo b/lang/python/ca@valencia/LC_MESSAGES/python.mo deleted file mode 100644 index ab2697f1e..000000000 Binary files a/lang/python/ca@valencia/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ca@valencia/LC_MESSAGES/python.po b/lang/python/ca@valencia/LC_MESSAGES/python.po index 2608a8e85..aec33d82b 100644 --- a/lang/python/ca@valencia/LC_MESSAGES/python.po +++ b/lang/python/ca@valencia/LC_MESSAGES/python.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Raul , 2021 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Raul , 2021\n" "Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,323 +21,404 @@ msgstr "" "Language: ca@valencia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Configura el GRUB" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "S'estan muntant les particions." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" -msgstr "" +msgstr "S'ha produït un error en la configuració." -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "No s'han definit particions perquè les use
{!s}
." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "" +msgstr "Configura els serveis de systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "" +msgstr "No es pot modificar el servei." -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"La crida de systemctl {arg!s} a chroot ha retornat el codi " +"d'error {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "No es pot habilitar el servei de systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." +msgstr "No es pot habilitar la destinació de systemd {name!s}." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "No es pot inhabilitar la destinació de systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "No es pot emmascarar la unitat de systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"Es desconeixen les ordres de systemd: {command!s} i " +"{suffix!s}, per a la unitat {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "" +msgstr "S'estan emplenant els sistemes de fitxers." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "" +msgstr "Ha fallat rsync amb el codi d'error {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "S’està desempaquetant la imatge {}/{}, fitxer {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "S’està començant a desempaquetar {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "" +msgstr "No s’ha pogut desempaquetar la imatge \"{}\"." -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" +msgstr "No hi ha cap punt de muntatge per a la partició d'arrel." + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" +msgstr "El punt de muntatge per a la partició d'arrel és incorrecte." + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "El nucli actual no admet el sistema de fitxers per a \"{}\" ({})." -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "El sistema de fitxers font \"{}\" no existeix." -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "La destinació \"{}\" en el sistema de destinació no és un directori." -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "No es pot escriure el fitxer de configuració del KDM." -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" -msgstr "" +msgstr "El fitxer de configuració del KDM {!s} no existeix." -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" -msgstr "" +msgstr "No es pot escriure el fitxer de configuració de l'LXDM." -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" -msgstr "" +msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" -msgstr "" +msgstr "No es pot escriure el fitxer de configuració del LightDM." -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" -msgstr "" +msgstr "El fitxer de configuració del LightDM {!s} no existeix." -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "" +msgstr "No es pot configurar el LightDM." -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "" +msgstr "No hi ha benvinguda instal·lada per al LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" -msgstr "" +msgstr "No es pot escriure el fitxer de configuració de l'SLIM." -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" -msgstr "" +msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" +"No hi ha cap gestor de pantalla seleccionat per al mòdul displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"La llista de gestors de pantalla està buida o no està definida ni en " +"globalstorage ni en displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "La configuració del gestor de pantalla no era completa." -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "S'està configurant mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" +"No s'ha proporcionat el punt de muntatge perquè l'use
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "" +msgstr "S'estan instal·lant les dades." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "Configura els serveis d'OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "No es pot afegir el servei {name!s} al nivell d'execució {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" +"No es pot suprimir el servei {name!s} del nivell d'execució {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"Servei - acció desconeguda {arg!s} per al servei {name!s} al " +"nivell d'execució {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"La crida de rc-update {arg!s} a chroot ha retornat el codi " +"d'error {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "El nivell d'execució de destinació no existeix." -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" +"El camí per al nivell d'execució {level!s} és {path!s}, però no" +" existeix." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "" +msgstr "El servei de destinació no existeix." -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" +"El camí per al servei {name!s} és {path!s}, però no existeix." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "" +msgstr "Configura el tema del Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." -msgstr "" +msgstr "Instal·la els paquets." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" +msgstr "S'estan processant els paquets (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "S'està instal·lant un paquet." +msgstr[1] "S'està instal·lant %(num)d paquets." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "S’està eliminant un paquet." +msgstr[1] "S’està eliminant %(num)d paquets." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." +msgstr "Instal·la el carregador d'arrancada." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "" +msgstr "Configuració del rellotge del maquinari." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Creació d’initramfs amb mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "No s’ha pogut executar mkinitfs en la destinació." -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "" +msgstr "El codi d'eixida ha estat {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Creació d’initramfs amb dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "No s’ha pogut executar dracut en la destinació." + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "Es configuren initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Configuració del servei OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "Escriptura d’fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "" +msgstr "Tasca de python de proves." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "" +msgstr "Pas de python de proves {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "" +msgstr "Configuració d’idioma." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "" +msgstr "S'està guardant la configuració de la xarxa." diff --git a/lang/python/cs_CZ/LC_MESSAGES/python.mo b/lang/python/cs_CZ/LC_MESSAGES/python.mo deleted file mode 100644 index 8062d80c4..000000000 Binary files a/lang/python/cs_CZ/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/cs_CZ/LC_MESSAGES/python.po b/lang/python/cs_CZ/LC_MESSAGES/python.po index 601b524c7..938f20161 100644 --- a/lang/python/cs_CZ/LC_MESSAGES/python.po +++ b/lang/python/cs_CZ/LC_MESSAGES/python.po @@ -5,16 +5,17 @@ # # Translators: # pavelrz, 2017 -# Pavel Borecki , 2020 +# LiberteCzech , 2020 +# Pavel Borecki , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Pavel Borecki , 2020\n" +"Last-Translator: Pavel Borecki , 2022\n" "Language-Team: Czech (Czech Republic) (https://www.transifex.com/calamares/teams/20061/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,66 +23,87 @@ msgstr "" "Language: cs_CZ\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Nastavování zavaděče GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Připojování oddílů." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Vnitřní chyba při připojování zfs datových sad" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Nepodařilo se naimportovat zfs fond" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Nepodařilo se odemknout zfs fond" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Nepodařilo se nastavit zfs přípojný bod" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Chyba nastavení" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Pro
{!s}
nejsou zadány žádné oddíly." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "Chyba při připojování zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Nastavit služby systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Službu se nedaří upravit" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Volání systemctl {arg!s} v chroot vrátilo chybový kód {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Nedaří se zapnout systemd službu {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Nedaří se zapnout systemd službu {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Nedaří se zapnout systemd časovač {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nedaří se vypnout systemd cíl {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nedaří se maskovat systemd jednotku {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,164 +111,159 @@ msgstr "" "Neznámé systemd příkazy {command!s} a {suffix!s} " "pro jednotku {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Odpojit souborové systémy." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Naplňování souborových systémů." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync se nezdařilo s chybových kódem {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Rozbalování obrazu {}/{}, soubor {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Zahajování rozbalení {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Nepodařilo se rozbalit obraz „{}“" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Žádný přípojný bot pro kořenový oddíl" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage neobsahuje klíč „rootMountPoint“ – nic se nebude dělat" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage neobsahuje klíč „rootMountPoint“." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Chybný přípojný bod pro kořenový oddíl" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "kořenovýPřípojnýBod je „{}“, který neexistuje – nic se nebude dělat" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint je „{}“, což neexistuje." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Chybná nastavení unsquash" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Chybné nastavení unpackfs" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Není zde žádná informace o nastavení." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Souborový systém „{}“ ({}) není jádrem systému, které právě používáte, " "podporován" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Zdrojový souborový systém „{}“ neexistuje" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Nepodařilo se nalézt unsquashfs – ověřte, že máte nainstalovaný balíček " -"squashfs-tools" +"Nepodařilo se nalézt nástroj unsquashfs – ověřte, že je nainstalovaný " +"balíček squashfs-tools." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Cíl „{}“ v cílovém systému není složka" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro KDM {!s} neexistuje" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LXDM {!s} neexistuje" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LightDM {!s} neexistuje" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nedaří se nastavit LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Není nainstalovaný žádný LightDM přivítač" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Soubor s nastaveními pro SLIM {!s} neexistuje" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Pro modul správce sezení nejsou vybrány žádní správci sezení." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Seznam správců displejů je prázdný nebo není definován v bothglobalstorage a" -" displaymanager.conf." +"Seznam správců displejů je prázdný nebo není definován v jak globalstorage, " +"tak v displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Nastavení správce displeje nebylo úplné" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Nastavování mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Pro
{!s}
není zadán žádný přípojný bod." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Nastavování šifrovaného prostoru pro odkládání stránek paměti." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalace dat." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Nastavit OpenRC služby" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "Nedaří se přidat službu {name!s} do úrovně chodu (runlevel) {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Nedaří se odebrat službu {name!s} z úrovně chodu (runlevel) {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -254,17 +271,17 @@ msgstr "" "Neznámá akce služby {arg!s} pro službu {name!s} v úrovni chodu " "(runlevel) {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} volání v chroot vrátilo kód chyby {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Cílová úroveň chodu (runlevel) neexistuje" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -272,11 +289,11 @@ msgstr "" "Popis umístění pro úroveň chodu (runlevel) {level!s} je " "{path!s}, keterá neexistuje." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Cílová služba neexistuje" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." @@ -284,21 +301,21 @@ msgstr "" "Popis umístění pro službu {name!s} je {path!s}, která " "neexistuje." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Nastavit téma vzhledu pro Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." -msgstr "Instalovat balíčky." +msgstr "Nainstalovat balíčky." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Zpracovávání balíčků (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -307,7 +324,7 @@ msgstr[1] "Jsou instalovány %(num)d balíčky." msgstr[2] "Je instalováno %(num)d balíčků." msgstr[3] "Je instalováno %(num)d balíčků." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -316,51 +333,112 @@ msgstr[1] "Odebírají se %(num)d balíčky." msgstr[2] "Odebírá se %(num)d balíčků." msgstr[3] "Odebírá se %(num)d balíčků." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Chyba nástroje pro správu balíčků" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Nástroji pro správu balíčků se nepodařilo připravit aktualizace. Příkaz " +"
{!s}
vrátil chybový kód {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Nástroji pro správu balíčků se nepodařilo aktualizovat systém. Příkaz " +"
{!s}
vrátil chybový kód {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Nástroji pro správu balíčků se nepodařilo udělat změny v instalovaném " +"systému. Příkaz
{!s}
vrátil chybový kód {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalace zavaděče systému." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Nepodařilo se nainstalovat zavaděč grub – v globálním úložišti nejsou " +"definovány žádné oddíly" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Chyba při instalaci zavaděče systému" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Zavaděč systému se nepodařilo nainstalovat. Instalační příkaz
{!s} "
+"vrátil chybový kód {!s}."
+
+#: src/modules/hwclock/main.py:26
 msgid "Setting hardware clock."
 msgstr "Nastavování hardwarových hodin."
 
-#: src/modules/dracut/main.py:36
-msgid "Creating initramfs with dracut."
-msgstr "Vytváření initramfs s dracut."
+#: src/modules/mkinitfs/main.py:27
+msgid "Creating initramfs with mkinitfs."
+msgstr "Vytváření initramfs nástrojem mkinitfs."
 
-#: src/modules/dracut/main.py:58
-msgid "Failed to run dracut on the target"
-msgstr "Na cíli se nepodařilo spustit dracut"
+#: src/modules/mkinitfs/main.py:49
+msgid "Failed to run mkinitfs on the target"
+msgstr "Na cíli se nepodařilo spustit mkinitfs"
 
-#: src/modules/dracut/main.py:59
+#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
 msgid "The exit code was {}"
 msgstr "Návratový kód byl {}"
 
-#: src/modules/initramfscfg/main.py:41
+#: src/modules/dracut/main.py:27
+msgid "Creating initramfs with dracut."
+msgstr "Vytváření initramfs s dracut."
+
+#: src/modules/dracut/main.py:49
+msgid "Failed to run dracut on the target"
+msgstr "Na cíli se nepodařilo spustit dracut"
+
+#: src/modules/initramfscfg/main.py:32
 msgid "Configuring initramfs."
 msgstr "Nastavování initramfs."
 
-#: src/modules/openrcdmcryptcfg/main.py:34
+#: src/modules/openrcdmcryptcfg/main.py:26
 msgid "Configuring OpenRC dmcrypt service."
 msgstr "Nastavování služby OpenRC dmcrypt."
 
-#: src/modules/fstab/main.py:38
+#: src/modules/fstab/main.py:29
 msgid "Writing fstab."
 msgstr "Zapisování fstab."
 
-#: src/modules/dummypython/main.py:44
+#: src/modules/fstab/main.py:395
+msgid "No 
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Pro
{!s}
není zadáno žádné nastavení
{!s}
, které " +"použít. " + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Testovací úloha python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Testovací krok {} python." -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Nastavování místních a jazykových nastavení." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ukládání nastavení sítě." diff --git a/lang/python/da/LC_MESSAGES/python.mo b/lang/python/da/LC_MESSAGES/python.mo deleted file mode 100644 index e20269910..000000000 Binary files a/lang/python/da/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/da/LC_MESSAGES/python.po b/lang/python/da/LC_MESSAGES/python.po index 9563439ac..2caf04d9d 100644 --- a/lang/python/da/LC_MESSAGES/python.po +++ b/lang/python/da/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: scootergrisen, 2020\n" "Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/)\n" @@ -22,66 +22,87 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigurer GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Monterer partitioner." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Fejl ved konfiguration" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." -msgstr "Der er ikke angivet nogle partitioner som
{!s}
skal bruge." +msgstr "Der er ikke angivet nogle partitioner som
{!s}
kan bruge." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurer systemd-tjenester" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Kan ikke redigere tjeneste" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s}-kald i chroot returnerede fejlkoden {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Kan ikke aktivere systemd-tjenesten {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Kan ikke aktivere systemd-målet {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Kan ikke deaktivere systemd-målet {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Kan ikke maskere systemd-enheden {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,162 +110,155 @@ msgstr "" "Ukendte systemd-kommandoer {command!s} og " "{suffix!s} til enheden {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Afmonter filsystemer." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Udfylder filsystemer." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "rsync mislykkedes med fejlkoden {}." +msgstr "rsync mislykkede med fejlkoden {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Udpakker aftrykket {}/{}, filen {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Begynder at udpakke {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Kunne ikke udpakke aftrykket \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Intet monteringspunkt til rodpartition" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage indeholder ikke en \"rootMountPoint\"-nøgle, gør intet" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Dårligt monteringspunkt til rodpartition" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint er \"{}\", hvilket ikke findes, gør intet" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Dårlig unsquash-konfiguration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Filsystemet til \"{}\" ({}) understøttes ikke af din nuværende kerne" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Kildefilsystemet \"{}\" findes ikke" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Kunne ikke finde unsquashfs, sørg for at squashfs-tools-pakken er " -"installeret" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinationen \"{}\" i målsystemet er ikke en mappe" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Kan ikke skrive KDM-konfigurationsfil" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfigurationsfil {!s} findes ikke" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Kan ikke skrive LXDM-konfigurationsfil" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfigurationsfil {!s} findes ikke" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Kan ikke skrive LightDM-konfigurationsfil" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfigurationsfil {!s} findes ikke" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "Kan ikke konfigurerer LightDM" +msgstr "Kan ikke konfigurere LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Der er ikke installeret nogen LightDM greeter." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Kan ikke skrive SLIM-konfigurationsfil" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfigurationsfil {!s} findes ikke" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Der er ikke valgt nogen displayhåndteringer til displayhåndtering-modulet." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Listen over displayhåndteringer er tom eller udefineret i bothglobalstorage " -"og displaymanager.conf." +"Displayhåndteringerlisten er tom eller udefineret i både globalstorage og " +"displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Displayhåndtering-konfiguration er ikke komplet" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurerer mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -"Der er ikke angivet noget rodmonteringspunkt som
{!s}
skal bruge." +"Der er ikke angivet noget rodmonteringspunkt som
{!s}
kan bruge." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfigurerer krypteret swap." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installerer data." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurer OpenRC-tjenester" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Kan ikke tilføje tjenesten {name!s} til kørselsniveauet {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Kan ikke fjerne tjenesten {name!s} fra kørselsniveauet {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -252,17 +266,17 @@ msgstr "" "Ukendt tjenestehandling {arg!s} til tjenesten {name!s} i " "kørselsniveauet {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s}-kald i chroot returnerede fejlkoden {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Målkørselsniveau findes ikke" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -270,90 +284,139 @@ msgstr "" "Stien til kørselsniveauet {level!s} er {path!s}, som ikke " "findes." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Måltjenesten findes ikke" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Stien til tjenesten {name!s} er {path!s}, som ikke findes." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfigurer Plymouth-tema" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installér pakker." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Forarbejder pakker (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installerer én pakke." msgstr[1] "Installerer %(num)d pakker." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Fjerner én pakke." msgstr[1] "Fjerner %(num)d pakker." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installér bootloader." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Indstiller hardwareur." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Opretter initramfs med dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Opretter initramfs med mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Kunne ikke køre dracut på målet" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Kunne ikke køre mkinitfs på målet" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Afslutningskoden var {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Opretter initramfs med dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Kunne ikke køre dracut på målet" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfigurerer initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurerer OpenRC dmcrypt-tjeneste." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Skriver fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python-job." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python-trin {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfigurerer lokaliteter." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Gemmer netværkskonfiguration." diff --git a/lang/python/de/LC_MESSAGES/python.mo b/lang/python/de/LC_MESSAGES/python.mo deleted file mode 100644 index 64a77a392..000000000 Binary files a/lang/python/de/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/de/LC_MESSAGES/python.po b/lang/python/de/LC_MESSAGES/python.po index 3c8421fec..539e0fd29 100644 --- a/lang/python/de/LC_MESSAGES/python.po +++ b/lang/python/de/LC_MESSAGES/python.po @@ -4,18 +4,18 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Adriaan de Groot , 2019 -# Andreas Eitel , 2019 -# Christian Spaan, 2020 +# Adriaan de Groot , 2020 +# Andreas Eitel , 2020 +# Gustav Gyges, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Christian Spaan, 2020\n" +"Last-Translator: Gustav Gyges, 2022\n" "Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,67 +23,88 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB konfigurieren." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Hänge Partitionen ein." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Interner Fehler beim Einhängen des ZFS-Datensets" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Zpool konnte nicht importiert werden" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Zpool konnte nicht entsperrt werden" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Zpool-Einhängepunkt konnte nicht gesetzt werden" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigurationsfehler" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Für
{!s}
sind keine zu verwendenden Partitionen definiert." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "Fehler beim Einhängen von ZFS" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguriere systemd-Dienste" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Der Dienst kann nicht geändert werden." -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} Aufruf in chroot lieferte Fehlercode {num!s} " "zurück." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Der systemd-Dienst {name!s} kann nicht aktiviert werden." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Das systemd-Ziel {name!s} kann nicht aktiviert werden." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Systemd-Timer {name!s} kann nicht aktiviert werden." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Das systemd-Ziel {name!s} kann nicht deaktiviert werden." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Die systemd-Einheit {name!s} kann nicht maskiert werden." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -91,163 +112,159 @@ msgstr "" "Unbekannte systemd-Befehle {command!s} und " "{suffix!s} für Einheit {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Dateisysteme aushängen." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Befüllen von Dateisystemen." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync fehlgeschlagen mit Fehlercode {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Abbilddatei Entpacken {}/{}, Datei {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Beginn des Entpackens {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "Entpacken des Image \"{}\" fehlgeschlagen" +msgstr "Entpacken der Abbilddatei \"{}\" fehlgeschlagen" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Kein Einhängepunkt für die Root-Partition" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" -"globalstorage enthält keinen Schlüssel namens \"rootMountPoint\", tue nichts" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "Globalstorage enthält keinen Schlüssel für \"rootMountPoint\"." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ungültiger Einhängepunkt für die Root-Partition" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint ist \"{}\", welcher nicht existiert, tue nichts" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint ist \"{}\", was nicht existiert." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Ungültige unsquash-Konfiguration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Fehlerhafte unpackfs-Konfiguration" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Es gibt keine Informationen zur Konfiguration." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"Das Dateisystem für \"{}\" ({}) wird von Ihrem aktuellen Kernel nicht " +"unterstützt" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Das Quelldateisystem \"{}\" existiert nicht" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Konnte unsquashfs nicht finden, stellen Sie sicher, dass Sie das Paket " -"namens squashfs-tools installiert haben" +"Unsquashfs nicht gefunden, stellen Sie sicher, dass das Paket squashfs-tools" +" installiert ist." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Das Ziel \"{}\" im Zielsystem ist kein Verzeichnis" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Schreiben der KDM-Konfigurationsdatei nicht möglich" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-Konfigurationsdatei {!s} existiert nicht" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Schreiben der LXDM-Konfigurationsdatei nicht möglich" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-Konfigurationsdatei {!s} existiert nicht" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Schreiben der LightDM-Konfigurationsdatei nicht möglich" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-Konfigurationsdatei {!s} existiert nicht" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Konfiguration von LightDM ist nicht möglich" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Keine Benutzeroberfläche für LightDM installiert." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Schreiben der SLIM-Konfigurationsdatei nicht möglich" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-Konfigurationsdatei {!s} existiert nicht" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Keine Displaymanager für das Displaymanager-Modul ausgewählt." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Die Liste der Displaymanager ist leer oder weder in globalstorage noch in " "displaymanager.conf definiert." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Die Konfiguration des Displaymanager war unvollständig." -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfiguriere mkinitcpio. " -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Für
{!s}
wurde kein Einhängepunkt für die Root-Partition " "angegeben." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfiguriere verschlüsselten Auslagerungsspeicher." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installiere Daten." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfiguriere OpenRC-Dienste" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Kann den Dienst {name!s} nicht zu Runlevel {level!s} hinzufügen." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Kann den Dienst {name!s} nicht aus Runlevel {level!s} entfernen." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -255,18 +272,18 @@ msgstr "" "Unbekannte Aktion {arg!s} für Dienst {name!s} in Runlevel " "{level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} Aufruf in chroot lieferte Fehlercode {num!s} " "zurück." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Vorgesehenes Runlevel existiert nicht" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -274,11 +291,11 @@ msgstr "" "Der Pfad für Runlevel {level!s} ist {path!s}, welcher nicht " "existiert." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Der vorgesehene Dienst existiert nicht" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." @@ -286,79 +303,140 @@ msgstr "" "Der Pfad für den Dienst {name!s} is {path!s}, welcher nicht " "existiert." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfiguriere Plymouth-Thema" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Pakete installieren " -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Verarbeite Pakete (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installiere ein Paket" msgstr[1] "Installiere %(num)d Pakete." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Entferne ein Paket" msgstr[1] "Entferne %(num)d Pakete." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Fehler im Paketmanager" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Der Paketmanager konnte die Aktualisierungen nicht vorbereiten. Der Befehl " +"
{!s}
erzeugte Fehlercode {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Der Paketmanager konnte das System nicht aktualisieren. Der Befehl " +"
{!s}
erzeugte Fehlercode {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Der Paketmanager konnte das installierte System nicht verändern. Der Befehl " +"
{!s}
erzeugte Fehlercode {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installiere Bootloader." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Grub konnte nicht installiert werden, keine Partitionen im globalen Speicher" +" definiert." + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Fehler beim Installieren des Bootloaders" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Der Bootloader konnte nicht installiert werden. Der Installationsbefehl " +"
{!s}
erzeugte Fehlercode {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Einstellen der Hardware-Uhr." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Erstelle initramfs mit dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Erstelle initramfs mit mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Ausführen von dracut auf dem Ziel schlug fehl" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Ausführung von mkinitfs auf dem Ziel fehlgeschlagen." -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Der Exit-Code war {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Erstelle initramfs mit dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Ausführen von dracut auf dem Ziel schlug fehl" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfiguriere initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfiguriere den dmcrypt-Dienst von OpenRC." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Schreibe fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Keine
{!s}
Konfiguration gegeben die
{!s}
benutzen " +"könnte." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy Python-Job" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy Python-Schritt {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfiguriere Lokalisierungen." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Speichere Netzwerkkonfiguration." diff --git a/lang/python/el/LC_MESSAGES/python.mo b/lang/python/el/LC_MESSAGES/python.mo deleted file mode 100644 index 5fc568093..000000000 Binary files a/lang/python/el/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/el/LC_MESSAGES/python.po b/lang/python/el/LC_MESSAGES/python.po index 70d9ceb7f..18153ef11 100644 --- a/lang/python/el/LC_MESSAGES/python.po +++ b/lang/python/el/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Efstathios Iosifidis , 2017 +# Efstathios Iosifidis , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Efstathios Iosifidis , 2017\n" +"Last-Translator: Efstathios Iosifidis , 2022\n" "Language-Team: Greek (https://www.transifex.com/calamares/teams/20061/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,323 +21,388 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Ρύθμιση GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "Προσάρτηση κατατμήσεων." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "" +msgstr "Αδυναμία ρύθμισης LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "" +msgstr "Εγκατάσταση δεδομένων." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "εγκατάσταση πακέτων." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Σφάλμα διαχειριστή πακέτων" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "Εγγραγή fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/en_GB/LC_MESSAGES/python.mo b/lang/python/en_GB/LC_MESSAGES/python.mo deleted file mode 100644 index 4c2401cc7..000000000 Binary files a/lang/python/en_GB/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/en_GB/LC_MESSAGES/python.po b/lang/python/en_GB/LC_MESSAGES/python.po index 080f0b82c..a093a3121 100644 --- a/lang/python/en_GB/LC_MESSAGES/python.po +++ b/lang/python/en_GB/LC_MESSAGES/python.po @@ -5,15 +5,16 @@ # # Translators: # Jason Collins , 2018 +# Karthik Balan, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Jason Collins , 2018\n" +"Last-Translator: Karthik Balan, 2021\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/calamares/teams/20061/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,323 +22,388 @@ msgstr "" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 -msgid "Configuration Error" +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Configuration Error " + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Unmount file systems." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "Cannot write KDM configuration file" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "Configure OpenRC services" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "Target runlevel does not exist" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Install packages." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installing one package." msgstr[1] "Installing %(num)d packages." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Removing %(num)d packages." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Package Manager error" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Bootloader installation error" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python job." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python step {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "" +msgstr "Saving network configuration " diff --git a/lang/python/eo/LC_MESSAGES/python.mo b/lang/python/eo/LC_MESSAGES/python.mo deleted file mode 100644 index 0f910a110..000000000 Binary files a/lang/python/eo/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/eo/LC_MESSAGES/python.po b/lang/python/eo/LC_MESSAGES/python.po index aef4f546b..b306336f9 100644 --- a/lang/python/eo/LC_MESSAGES/python.po +++ b/lang/python/eo/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kurt Ankh Phoenix , 2018\n" "Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/)\n" @@ -21,323 +21,388 @@ msgstr "" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Demeti dosieraj sistemoj." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instali pakaĵoj." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Prilaborante pakaĵoj (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalante unu pakaĵo." msgstr[1] "Instalante %(num)d pakaĵoj." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Forigante unu pakaĵo." msgstr[1] "Forigante %(num)d pakaĵoj." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Formala python laboro." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Formala python paŝo {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/es/LC_MESSAGES/python.mo b/lang/python/es/LC_MESSAGES/python.mo deleted file mode 100644 index 4746eac78..000000000 Binary files a/lang/python/es/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/es/LC_MESSAGES/python.po b/lang/python/es/LC_MESSAGES/python.po index e4b3f7140..253fea1a7 100644 --- a/lang/python/es/LC_MESSAGES/python.po +++ b/lang/python/es/LC_MESSAGES/python.po @@ -5,19 +5,20 @@ # # Translators: # strel, 2017 -# Francisco Sánchez López de Lerma , 2018 # Guido Grasso , 2018 # Adolfo Jayme-Barrientos, 2019 # Miguel Mayol , 2020 +# Pier Jose Gotta Perez , 2020 +# Swyter , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Miguel Mayol , 2020\n" +"Last-Translator: Swyter , 2022\n" "Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,238 +26,261 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "Configure GRUB - menú de arranque multisistema -" +msgstr "Configurar GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." -msgstr "Montando particiones" +msgstr "Montando las particiones." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" +"No se pudieron montar los conjuntos de datos («datasets») de zfs por un " +"error interno" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "No se pudo importar el «zpool»" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "No se pudo desbloquear el «zpool»" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "No se pudo establecer el punto de montaje zfs" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Error de configuración" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." -msgstr "No hay definidas particiones en 1{!s}1 para usar." +msgstr "No hay ninguna partición en
{!s}
que se pueda usar." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "hubo un error con el montaje zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "Configurar servicios de systemd" +msgstr "Configurar los servicios de systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "No se puede modificar el servicio" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -"La orden systemctl {arg!s} en chroot devolvió el código de " -"error {num!s}." +"La orden systemctl {arg!s} del «chroot» devolvió el código de " +"error {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "No se puede activar el servicio de systemd {name!s}." +msgstr "No se puede activar el servicio de systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." -msgstr "No se puede activar el objetivo de systemd {name!s}." +msgstr "" +"No se puede activar el objetivo («target») de systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" +"No se puede activar el temporizador («timer») de systemd " +"{name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "No se puede desactivar el objetivo de systemd {name!s}." +msgstr "" +"No se puede desactivar el objetivo («target») de systemd " +"{name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "No se puede enmascarar la unidad de systemd {name!s}." +msgstr "" +"No se puede enmascarar («mask») la unidad («unit») de systemd " +"{name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -"Órdenes desconocidas de systemd {command!s} y " -"{suffix!s} para la/s unidad /es {name!s}." +"systemd no reconoce las órdenes {command!s} ni " +"{suffix!s} para la unidad {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmontar sistemas de archivos." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Rellenando los sistemas de archivos." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "Falló la sincronización mediante rsync con el código de error {}." +msgstr "Falló la sincronización mediante «rsync» con el código de error {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Desempaquetando la imagen {}/{}, archivo {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Desempaquetando {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "No se pudo desempaquetar la imagen «{}»" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" -msgstr "" -"No especificó un punto de montaje para la partición raíz - / o root -" +msgstr "Parece que la partición raíz («root») no tiene un punto de montaje" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" -"No se hace nada porque el almacenamiento no contiene una clave de " -"\"rootMountPoint\" punto de montaje para la raíz." +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "El «globalstorage» no contiene una clave «rootMountPoint»." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" -msgstr "Punto de montaje no válido para una partición raíz," +msgstr "El punto de montaje de la partición raíz («root») no es correcto" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "Como el punto de montaje raíz es \"{}\", y no existe, no se hace nada" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "«rootMountPoint» es «{}», que no existe." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Configuración de \"unsquash\" no válida" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "La configuración de «unpackfs» no es correcta" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Parece que no hay información de configuración." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"El sistema de archivos de «{}» ({}) no es compatible con el kernel actual" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "El sistema de archivos de origen \"{}\" no existe" +msgstr "El sistema de archivos fuente «{}» no existe" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"No se encontró unsquashfs; cerciórese de que tenga instalado el paquete " -"squashfs-tools" +"Parece que «unsquashfs» no está disponible; asegúrate de tener instalado " +"«squashfs-tools»." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "El destino \"{}\" en el sistema escogido no es una carpeta" +msgstr "El destino «{}» en el sistema escogido no es una carpeta" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "No se puede escribir el archivo de configuración KDM" +msgstr "No se puede escribir el archivo de configuración de KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de KDM no existe" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuracion {!s} de LXDM no existe" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de LightDM no existe" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "No está instalado el menú de bienvenida LightDM" +msgstr "No hay ningún menú de bienvenida («greeter») de LightDM instalado." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de SLIM no existe" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -"No se ha seleccionado ningún gestor de pantalla para el modulo " -"displaymanager" +"No se ha elegido ningún gestor de pantalla para el módulo «displaymanager»." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"La lista de gestores de ventanas está vacía o no definida en ambos, el " -"almacenamiento y el archivo de su configuración - displaymanager.conf -" +"La lista de gestores de pantalla está vacía o sin definir tanto en " +"«globalstorage» como en «displaymanager.conf»." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "La configuración del gestor de pantalla estaba incompleta" - -#: src/modules/initcpiocfg/main.py:37 -msgid "Configuring mkinitcpio." -msgstr "Configurando mkinitcpio - sistema de arranque básico -." - -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 -msgid "No root mount point is given for
{!s}
to use." msgstr "" -"No se facilitó un punto de montaje raíz utilizable para
{!s}
" +"La configuración del gestor de pantalla («display manager») estaba " +"incompleta" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Configurando la memoria de intercambio - swap - encriptada." +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "Configurando «mkinitcpio»." -#: src/modules/rawfs/main.py:35 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "No hay ningún punto de montaje en
{!s}
que se pueda usar." + +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "Instalando datos." +msgstr "Instalando los datos." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "Configure servicios del sistema de inicio OpenRC" +msgstr "Configurar servicios de OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "No se puede/n añadir {name!s} de servicio/s al rango de ejecución " "{level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "No se puede/n borrar el/los servicio/s {name!s} de los rangos de ejecución " "{level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -264,110 +288,170 @@ msgstr "" "Acción desconocida d/e el/los servicio/s {arg!s} para el/los " "servicio/s {name!s} en el/los rango/s de ejecución {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -"rc-update {arg!s} - orden de actualización - en chroot - raíz " -"cambiada - devolvió el código de error {num!s}." +"rc-update {arg!s} en la raíz cambiada «chroot» ha devuelto el " +"código de error {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "El rango de ejecución objetivo no existe" +msgstr "El nivel de ejecución («runlevel») elegido no existe" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -"La ruta hacia el rango de ejecución {level!s} es 1{path!s}1, y no existe." +"La ruta del nivel de ejecución («runlevel») {level!s} es " +"{path!s}, que no existe." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "El servicio objetivo no existe" +msgstr "Parece que el servicio a cambiar no existe" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -"La ruta hacia el/los servicio/s {name!s} es {path!s}, y no " -"existe." +"La ruta para el servicio {name!s} es {path!s}, que no existe." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "Configure el tema de Plymouth - menú de bienvenida." +msgstr "Configurar tema de Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar paquetes." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando %(num)d paquetes." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Eliminando un paquete." msgstr[1] "Eliminando %(num)d paquetes." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Hubo un error del gestor de paquetes" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"El gestor de paquetes no pudo preparar las actualizaciones; la orden " +"
{!s}
devolvió el código de error {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"El gestor de paquetes no pudo actualizar el sistema; la orden " +"
{!s}
devolvió el código de error {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"El gestor de paquetes no pudo realizar cambios en el sistema a instalar; la " +"orden
{!s}
devolvió el código de error {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalar gestor de arranque." -#: src/modules/hwclock/main.py:35 -msgid "Setting hardware clock." -msgstr "Configurando el reloj de la computadora." - -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" msgstr "" -"Creando initramfs - sistema de arranque - con dracut - su constructor -." +"Hubo un error al instalar «grub»; no hay particiones definidas en el " +"almacenamiento global" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Falló en ejecutar dracut - constructor de arranques - en el objetivo" +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Hubo un error al instalar el cargador de arranque" -#: src/modules/dracut/main.py:59 +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"No se pudo instalar el cargador de arranque; la orden de instalación " +"
{!s}
devolvió el código de error {!s}." + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "Ajustando el reloj interno del equipo." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Creando el «initramfs» con «mkinitfs»." + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Hubo un error al ejecutar «mkinitfs» en el destino" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "El código de salida fue {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Creando «initramfs» (archivos de arranque) con «dracut»." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Hubo un error al ejecutar «dracut» en el destino" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "Configurando initramfs - sistema de inicio -." +msgstr "Configurando «initramfs» (archivos de arranque)." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "Configurando el servicio - de arranque encriptado -. OpenRC dmcrypt" +msgstr "Configurando el servicio de arranque cifrado «dmcrypt» para OpenRC " -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." -msgstr "Escribiendo la tabla de particiones fstab" +msgstr "Escribiendo el «fstab»." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"No se proporciona ninguna configuración de
{!s}
que " +"
{!s}
pueda usar." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarea de python ficticia." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "Paso {} de python ficticio" +msgstr "Paso ficticio de python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "Configurando especificaciones locales o regionales." +msgstr "Aplicando la configuración regional." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "Guardando la configuración de red." +msgstr "Guardando configuración de red." diff --git a/lang/python/es_MX/LC_MESSAGES/python.mo b/lang/python/es_MX/LC_MESSAGES/python.mo deleted file mode 100644 index d450f758c..000000000 Binary files a/lang/python/es_MX/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/es_MX/LC_MESSAGES/python.po b/lang/python/es_MX/LC_MESSAGES/python.po index b25578cc4..27951e65e 100644 --- a/lang/python/es_MX/LC_MESSAGES/python.po +++ b/lang/python/es_MX/LC_MESSAGES/python.po @@ -5,16 +5,17 @@ # # Translators: # guillermo pacheco , 2018 -# Logan 8192 , 2018 +# a1a9b52a3f40dff112eca965c254c602_089360e , 2018 +# Erland Huaman , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Logan 8192 , 2018\n" +"Last-Translator: Erland Huaman , 2021\n" "Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,323 +23,397 @@ msgstr "" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Configura GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "Montando particiones." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" -msgstr "" +msgstr "Error de configuración" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "No hay particiones definidas para que
{!s}
use." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "" +msgstr "Configura los servicios de systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "" +msgstr "No se puede modificar el servicio." -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"La llamada de: systemctl {arg!s} en chroot retorna código de " +"error {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "No se puede habilitar el servicio {name!s} de systemd." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." +msgstr "No se puede habilitar el objetivo {name!s} de systemd." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" +"No se puede deshabilitar el objetivo {name!s} de systemd." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "No se puede enmascarar la unidad {name!s} de systemd." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"systemd no reconoce los comandos {command!s} y " +"{suffix!s}para la unidad {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmontar sistemas de archivo." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "" +msgstr "Llenando sistema de archivos." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "" +msgstr "rsync falló con código de error {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Desempaquetando imagen {}/{}, archivo {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Iniciando a desempaquetar {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "" +msgstr "Se falló en la desempaquetización de la imagen \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" +msgstr "No existe punto de montaje para la partición raíz" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" +msgstr "Mal punto de montaje para la partición raíz" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"Tu kernel actual no tiene soporte para el sistema de archivos para \"{}\" " +"({})" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "El sistema de archivos fuente \"{}\" no existe" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "El destino \"{}\" en el sistema objetivo no es un directorio" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración de KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración de KDM {!s} no existe" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración de LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuración de LXDM {!s} no existe" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración de LightDM {!s} no existe" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "" +msgstr "LightDM greeter no está instalado." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." -msgstr "" +msgstr "No se seleccionaron gestores para el módulo de gestor de pantalla." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"La lista de gestores de pantalla está vacía o indefinida tanto en el " +"globalstorage como en el displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "La configuración del gestor de pantalla estaba incompleta" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "Configurando mkinitcpio" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "" +msgstr "Instalando data." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "Configura los servicios de OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "El nivel de ejecución del objetivo no existe" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "" +msgstr "El servicio objetivo no existe" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "" +msgstr "Configurando el tema de Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar paquetes." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando un paquete." msgstr[1] "Instalando%(num)d paquetes." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removiendo un paquete." msgstr[1] "Removiendo %(num)dpaquetes." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." +msgstr "Instalar el cargador de arranque." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "" +msgstr "Configurando el reloj del hardware." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Creando initramfs con mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Se falló al intentar correr mkinitfs en el objetivo" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "" +msgstr "El código de salida fue {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Creando initramfs con dracut" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Se falló al intentar correr dracut en el objetivo" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "Configurando initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Configurando el servicio OpenRc dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "Escribiento fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Trabajo python ficticio." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Paso python ficticio {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "" +msgstr "Configurando locales." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "" +msgstr "Guardando configuración de red." diff --git a/lang/python/es_PR/LC_MESSAGES/python.mo b/lang/python/es_PR/LC_MESSAGES/python.mo deleted file mode 100644 index d3872bc6f..000000000 Binary files a/lang/python/es_PR/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/es_PR/LC_MESSAGES/python.po b/lang/python/es_PR/LC_MESSAGES/python.po index dad82b49c..ff00806a3 100644 --- a/lang/python/es_PR/LC_MESSAGES/python.po +++ b/lang/python/es_PR/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: es_PR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/et/LC_MESSAGES/python.mo b/lang/python/et/LC_MESSAGES/python.mo deleted file mode 100644 index bc59b5fe4..000000000 Binary files a/lang/python/et/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/et/LC_MESSAGES/python.po b/lang/python/et/LC_MESSAGES/python.po index 6762d6806..6d5c52a4f 100644 --- a/lang/python/et/LC_MESSAGES/python.po +++ b/lang/python/et/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Madis Otenurm, 2019\n" "Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/)\n" @@ -21,323 +21,388 @@ msgstr "" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Haagi failisüsteemid lahti." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM-konfiguratsioonifaili ei saa kirjutada" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfiguratsioonifail {!s} puudub" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM-konfiguratsioonifaili ei saa kirjutada" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfiguratsioonifail {!s} puudub" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM-konfiguratsioonifaili ei saa kirjutada" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfiguratsioonifail {!s} puudub" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM seadistamine ebaõnnestus" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM-konfiguratsioonifaili ei saa kirjutada" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfiguratsioonifail {!s} puudub" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Paigalda paketid." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakkide töötlemine (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Paigaldan ühe paketi." msgstr[1] "Paigaldan %(num)d paketti." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Eemaldan ühe paketi." msgstr[1] "Eemaldan %(num)d paketti." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Testiv python'i töö." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Testiv python'i aste {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/eu/LC_MESSAGES/python.mo b/lang/python/eu/LC_MESSAGES/python.mo deleted file mode 100644 index 6ec9f5277..000000000 Binary files a/lang/python/eu/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/eu/LC_MESSAGES/python.po b/lang/python/eu/LC_MESSAGES/python.po index e4cb0d606..2ed956bce 100644 --- a/lang/python/eu/LC_MESSAGES/python.po +++ b/lang/python/eu/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Ander Elortondo, 2019\n" "Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n" @@ -21,326 +21,389 @@ msgstr "" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Fitxategi sistemak desmuntatu." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ezin da KDM konfigurazio fitxategia idatzi" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurazio fitxategia {!s} ez da existitzen" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ezin da LXDM konfigurazio fitxategia idatzi" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurazio fitxategia {!s} ez da existitzen" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ezin da LightDM konfigurazio fitxategia idatzi" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurazio fitxategia {!s} ez da existitzen" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ezin da LightDM konfiguratu" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Ez dago LightDM harrera instalatua." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Ezin da SLIM konfigurazio fitxategia idatzi" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurazio fitxategia {!s} ez da existitzen" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Ez da pantaila kudeatzailerik aukeratu pantaila-kudeatzaile modulurako." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Pantaila-kudeatzaile-zerrenda hutsik dago edo definitzeke bothglobalstorage " -"eta displaymanager.conf" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Pantaila kudeatzaile konfigurazioa osotu gabe" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalatu paketeak" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketeak prozesatzen (%(count)d/ %(total)d) " -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Pakete bat instalatzen." msgstr[1] "%(num)dpakete instalatzen." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Pakete bat kentzen." msgstr[1] "%(num)dpakete kentzen." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python lana." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python urratsa {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/fa/LC_MESSAGES/python.mo b/lang/python/fa/LC_MESSAGES/python.mo deleted file mode 100644 index a25fc7a02..000000000 Binary files a/lang/python/fa/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/fa/LC_MESSAGES/python.po b/lang/python/fa/LC_MESSAGES/python.po index 4eee86585..73191019b 100644 --- a/lang/python/fa/LC_MESSAGES/python.po +++ b/lang/python/fa/LC_MESSAGES/python.po @@ -3,13 +3,19 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Danial Behzadi , 2020 +# alireza jamshidi , 2020 +# Mahdy Mirzade , 2021 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Mahdy Mirzade , 2021\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,323 +23,410 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "در حال پیکربندی گراب." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "در حال سوار کردن افرازها." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" -msgstr "" +msgstr "خطای پیکربندی" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "هیچ افرازی برای استفادهٔ
{!s}
تعریف نشده." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "" +msgstr "در حال پیکربندی خدمات سیستم‌دی" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "" +msgstr "نمی‌توان خدمت را دستکاری کرد" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"فراخوانی systemctl {arg!s} در chroot رمز خطای {num!s} را " +"برگرداند." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را به کار انداخت." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." -msgstr "" +msgstr "نمی‌توان هدف سیستم‌دی {name!s} را به کار انداخت." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "نمی‌توان تایمر سیستم‌دی {name!s} را به کار انداخت." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را از کار انداخت." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "نمی‌توان واحد سیستم‌دی {name!s} را پوشاند." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"دستورات ناشناختهٔ سیستم‌دی {command!s} و " +"{suffix!s} برای واحد {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "" +msgstr "در حال پر کردن سامانه‌پرونده‌ها." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "" +msgstr "آرسینک با رمز خطای {} شکست خورد." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "در حال بسته‌گشایی تصویر {}/{}، پروندهٔ {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "در حال شروع بسته‌گشایی {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "" +msgstr "شکست در بسته‌گشایی تصویر {}" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" +msgstr "هیچ نقطهٔ اتّصالی برای افراز ریشه وجود ندارد" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" +msgstr "نقطهٔ اتّصال بد برای افراز ریشه" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "کرنل کنونیتان از سامانه‌پروندهٔ {} ({}) پشتیبانی نمی‌کند" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "سامانهٔ پروندهٔ مبدأ {} وجود ندارد" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "" +"installed." +msgstr "شکست در یافتن unsquashfs. مطمئن شوید بسته squashfs-tools نصب است." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "مقصد {} در سامانهٔ هدف، یک شاخه نیست" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی KDM را نوشت" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی LXDM را نوشت" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "" +msgstr "نمی‌توان LightDM را پیکربندی کرد" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "" +msgstr "هیچ خوش‌آمدگوی LightDMای نصب نشده." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." -msgstr "" +msgstr "هیچ مدیر نمایشی برای پیمانهٔ displaymanager گزیده نشده." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"فهرست مدیریت صفحه نمایش ها خالی بوده یا در محل ذخیره داده و " +"displaymanager.conf تعریف نشده است." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "پیکربندی مدیر نمایش کامل نبود" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "پیکربندی mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." -msgstr "" +msgstr "هیچ نقطهٔ اتّصال ریشه‌ای برای استفادهٔ
{!s}
داده نشده." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "" +msgstr "داده‌های نصب" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "پیکربندی خدمات OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "نمی‌توان خدمت {name!s} را به سطح اجرایی {level!s} افزود." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" +msgstr "نمی‌توان خدمت {name!s} را از سطح اجرایی {level!s} برداشت." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"دستور سرویس {arg!s} برای سرویس {name!s} در سطح اجرای {level!s}" +" ناشناخته است." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"فراخوانی rc-update {arg!s} در chroot کد خطای {num!s} را " +"برگرداند." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "سطح اجرایی هدف وجود ندارد." -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" +"مسیر برای سطح اجرای {level!s} برابر {path!s} است، که وجود " +"ندارد." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "" +msgstr "خدمت هدف وجود ندارد" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" +"مسیر برای سرویس {name!s} برابر {path!s} است، که وجود ندارد." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "" +msgstr "در حال پیکربندی زمینهٔ پلی‌موث" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." -msgstr "" +msgstr "نصب بسته‌ها." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" +msgstr "در حال پردازش بسته‌ها (%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "در حال نصب یک بسته." +msgstr[1] "در حال نصب %(num)d بسته." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "در حال برداشتن یک بسته." +msgstr[1] "در حال برداشتن %(num)d بسته." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "خطای مدیر بسته" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"مدیر بسته نتوانست برای بروزرسانی ها آماده شود، دستور
{!s}
با خطای" +" {!s} مواجه شد." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"مدیر بسته نتوانست سامانه را بروز کند. دستور
{!s}
با خطای {!s} " +"مواجه شد." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"مدیر بسته نتوانست تغییرات را برای نصب سامانه انجام دهد. دستور " +"
{!s}
با خطای {!s} مواجه شد." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." +msgstr "نصب بارکنندهٔ راه‌اندازی." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "خطای نصب بوت لودر" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"بوت لودر نتوانست نصب شود. دستور
{!s}
برای نصب با خطای {!s} مواجه " +"شد." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "" +msgstr "در حال تنظیم ساعت سخت‌افزاری." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "درحال ایجاد initramfs با mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "شکست در اجرا mkinitfs روی هدف" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "" +msgstr "رمز خروج {} بود" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "در حال ایجاد initramfs با dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "شکست در اجرای dracut روی هدف" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "در حال پیکربندی initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "در حال پیکربندی خدمت dmcrypt OpenRC." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." -msgstr "" +msgstr "در حال نوشتن fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"هیچ تنظیمات
{!s}
برای استفاده برای
{!s}
داده نشده است." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "" +msgstr "کار پایتونی الکی." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "" +msgstr "گام پایتونی الکی {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "" +msgstr "پیکربندی مکانها" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "" +msgstr "در حال ذخیرهٔ پیکربندی شبکه." diff --git a/lang/python/fi_FI/LC_MESSAGES/python.mo b/lang/python/fi_FI/LC_MESSAGES/python.mo deleted file mode 100644 index d640ac0b2..000000000 Binary files a/lang/python/fi_FI/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/fi_FI/LC_MESSAGES/python.po b/lang/python/fi_FI/LC_MESSAGES/python.po index 82b5b3e75..e621334f8 100644 --- a/lang/python/fi_FI/LC_MESSAGES/python.po +++ b/lang/python/fi_FI/LC_MESSAGES/python.po @@ -4,16 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Kimmo Kujansuu , 2020 +# Kimmo Kujansuu , 2022 +# Jiri Grönroos , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Kimmo Kujansuu , 2020\n" +"Last-Translator: Jiri Grönroos , 2022\n" "Language-Team: Finnish (Finland) (https://www.transifex.com/calamares/teams/20061/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,227 +22,242 @@ msgstr "" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Määritä GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." -msgstr "Yhdistä osiot." +msgstr "Liitetään osioita." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Sisäinen virhe liitettäessä zfs-tietojoukkoa" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Zpoolin tuonti epäonnistui" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Zpoolin lukituksen avaaminen epäonnistui" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Määritys zfs-liitospisteen epäonnistui" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Määritysvirhe" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." -msgstr "Ei ole määritetty käyttämään osioita
{!s}
." +msgstr "Osioita ei ole määritetty käytettäväksi kohteelle
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs-liitosvirhe" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "Määritä systemd palvelut" +msgstr "Määritä systemd-palvelut" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Palvelua ei voi muokata" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "systemctl {arg!s} chroot palautti virhe koodin {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "Systemd-palvelua ei saa käyttöön {name!s}." +msgstr "Systemd-palvelua {name!s} ei voi ottaa käyttöön." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." -msgstr "Systemd-kohdetta ei saa käyttöön {name!s}." +msgstr "Systemd-kohdetta {name!s} ei voi ottaa käyttöön." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Systemd-ajastinta {name!s} ei voi ottaa käyttöön." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "Systemd-kohdetta ei-voi poistaa käytöstä {name!s}." +msgstr "Systemd-kohdetta {name!s} ei voi poistaa käytöstä." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Ei voi peittää systemd-yksikköä {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -"Tuntematon systemd-komennot {command!s} ja " +"Tuntemattomia systemd-komentoja {command!s} ja " "{suffix!s} yksikölle {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Irrota tiedostojärjestelmät käytöstä." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "Paikannetaan tiedostojärjestelmiä." +msgstr "Täytetään tiedostojärjestelmiä." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync epäonnistui virhekoodilla {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Puretaan levykuvaa {}/{}, tiedosto {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Pakkauksen purkaminen alkaa {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "Kuvan purkaminen epäonnistui \"{}\"" +msgstr "Levykuvan\"{}\" purkaminen epäonnistui" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" -msgstr "Ei liitoskohtaa juuri root-osiolle" +msgstr "Ei liitospistettä juuriosiolle" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage ei sisällä \"rootMountPoint\" avainta, eikä tee mitään" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage ei sisällä \"rootMountPoint\"-avainta." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" -msgstr "Huono kiinnityspiste root-osioon" +msgstr "Virheellinen liitospiste juuriosiolle" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint on \"{}\", jota ei ole, eikä tee mitään" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint on \"{}\", jota ei ole olemassa." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Huono epäpuhdas kokoonpano" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Virheellinen unpacckfs-määritys" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Määritystietoja ei ole." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "Tiedostojärjestelmä \"{}\" ({}) ei tue sinun nykyistä kerneliä " +msgstr "Nykyinen ydin ei tue osion \"{}\" ({}) tiedostojärjestelmää" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "Lähde tiedostojärjestelmää \"{}\" ei ole olemassa" +msgstr "Lähdetiedostojärjestelmää \"{}\" ei ole olemassa" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Ei löytynyt unsquashfs, varmista, että sinulla on squashfs-tools paketti " -"asennettuna" +"Unsquashfs-tiedostoja ei löytynyt, varmista, että paketti squashfs-tools on " +"asennettu." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "Kohdejärjestelmän \"{}\" kohde ei ole hakemisto" +msgstr "Kohdejärjestelmän kohde \"{}\" ei ole hakemisto" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM-määritystiedostoa ei voi kirjoittaa" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM-määritystiedostoa {!s} ei ole olemassa" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM-määritystiedostoa ei voi kirjoittaa" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-määritystiedostoa {!s} ei ole olemassa" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM-määritystiedostoa ei voi kirjoittaa" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-määritystiedostoa {!s} ei ole olemassa" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "LightDM määritysvirhe" +msgstr "LightDM-määritysvirhe" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "LightDM ei ole asennettu." +msgstr "LightDM:ää ei ole asennettu." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM-määritystiedostoa ei voi kirjoittaa" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-määritystiedostoa {!s} ei ole olemassa" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." -msgstr "Displaymanager-moduulia varten ei ole valittu näyttönhallintaa." +msgstr "Displaymanager-moduulia varten ei ole valittu näytönhallintaa." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Displaymanager-luettelo on tyhjä tai määrittelemätön, sekä globalstorage, " -"että displaymanager.conf tiedostossa." +"Luettelo on tyhjä tai määrittelemätön, sekä globalstorage, että " +"displaymanager.conf tiedostossa." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Näytönhallinnan kokoonpano oli puutteellinen" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Määritetään mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." -msgstr "" -"Root-juuri kiinnityspistettä
{!s}
ei ole annettu käytettäväksi." +msgstr "Kohteelle
{!s}
ei ole annettu juuriliitospistettä." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Salatun swapin määrittäminen." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Asennetaan tietoja." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Määritä OpenRC-palvelut" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "Palvelua {name!s} ei-voi lisätä suorituksen tasolle {level!s}." +msgstr "Palvelua {name!s} ei voi lisätä suorituksen tasolle {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "Ei voi poistaa palvelua {name!s} ajo-tasolla {level!s}." +msgstr "Ei voi poistaa palvelua {name!s} suorituksen tasolla {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -249,106 +265,166 @@ msgstr "" "Tuntematon huoltotoiminto{arg!s} palvelun {name!s} " "palvelutasolle {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} palautti chrootissa virhekoodin {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "Kohde runlevel ei ole olemassa" +msgstr "Kohteen ajotasoa ei ole olemassa" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "Ajotason polku {level!s} on {path!s}, jota ei ole." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Kohdepalvelua ei ole" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Palvelun polku {name!s} on {path!s}, jota ei ole olemassa." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Määritä Plymouthin teema" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." -msgstr "Asenna paketteja." +msgstr "Asenna paketit." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "Pakettien käsittely (%(count)d / %(total)d)" +msgstr "Käsitellään paketteja (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "Asentaa " -msgstr[1] "Asentaa %(num)d paketteja." +msgstr[0] "Asennetaan yhtä pakettia." +msgstr[1] "Asennetaan %(num)d pakettia." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "Removing one package." -msgstr[1] "Poistaa %(num)d paketteja." +msgstr[0] "Poistetaan yhtä pakettia." +msgstr[1] "Poistetaan %(num)d pakettia." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Paketinhallinnan virhe" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Paketinhallinta ei voinut valmistella päivityksiä. Komento
{!s}
" +"palautti virhekoodin {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Paketinhallinta ei voinut päivittää järjestelmää. Komento
{!s}
" +"palautti virhekoodin {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Paketinhallinta ei voinut tehdä muutoksia asennettuun järjestelmään. Komento" +"
{!s}
palautti virhekoodin {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." -msgstr "Asenna bootloader." +msgstr "Asenna käynnistyslatain." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Grubin asennus epäonnistui, yleisessä levytilassa ei ole määritetty osioita" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Käynnistyslataimen asennusvirhe" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Käynnistyslatainta ei voitu asentaa. Asennuskomento
{!s}
palautti" +" virhekoodin {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "Laitteiston kellon asettaminen." +msgstr "Asetetaan laitteiston kelloa." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Initramfs luominen dracut:lla." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Luodaan initramfs mkinitfs:llä." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Dracut-ohjelman suorittaminen ei onnistunut" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "mkinitfs:n suorittaminen kohteessa epäonnistui" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Poistumiskoodi oli {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Luodaan initramfs:ää dracutilla." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Dracutin suorittaminen kohteessa ei onnistunut" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Määritetään initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "OpenRC dmcrypt-palvelun määrittäminen." +msgstr "Määritetään OpenRC:n dmcrypt-palvelua." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." -msgstr "Fstab kirjoittaminen." +msgstr "Kirjoitetaan fstabiin." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"\"
{!s}
\"-määritystä ei ole annettu käytettäväksi kohteelle " +"
{!s}
." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "Harjoitus python-työ." +msgstr "Dummy-mallinen python-työ." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "Harjoitus python-vaihe {}" +msgstr "Dummy-mallinen python-vaihe {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "Määritetään locales." +msgstr "Määritetään maa-asetuksia." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Tallennetaan verkon määrityksiä." diff --git a/lang/python/fr/LC_MESSAGES/python.mo b/lang/python/fr/LC_MESSAGES/python.mo deleted file mode 100644 index c226c213b..000000000 Binary files a/lang/python/fr/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/fr/LC_MESSAGES/python.po b/lang/python/fr/LC_MESSAGES/python.po index a2fb4075d..4f9188073 100644 --- a/lang/python/fr/LC_MESSAGES/python.po +++ b/lang/python/fr/LC_MESSAGES/python.po @@ -7,21 +7,21 @@ # Paul Combal , 2017 # Abdellah B , 2017 # Aestan , 2018 -# Jeremy Gourmel , 2018 -# Aurnytoraink , 2018 +# Aurnytoraink , 2018 # a270031086f2a0d3514bc0cb507b48f6, 2019 # Seboss666 , 2019 # Florian B , 2019 # Arnaud Ferraris , 2019 +# roxfr , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Arnaud Ferraris , 2019\n" +"Last-Translator: roxfr , 2021\n" "Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,68 +29,89 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configuration du GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montage des partitions." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erreur de configuration" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" "Aucune partition n'est définie pour être utilisée par
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurer les services systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Impossible de modifier le service" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "L'appel systemctl {arg!s} en chroot a renvoyé le code d'erreur " "{num!s}" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Impossible d'activer le service systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Impossible d'activer la cible systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Impossible de désactiver la cible systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossible de masquer l'unit systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -98,164 +119,159 @@ msgstr "" "Commandes systemd {command!s} et {suffix!s} " "inconnues pour l'unit {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Démonter les systèmes de fichiers" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Remplir les systèmes de fichiers." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync a échoué avec le code d'erreur {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Décompression de l'image {}/{}, fichier {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Commencer à décompresser {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Impossible de décompresser l'image \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Pas de point de montage pour la partition racine" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage ne contient pas de clé \"rootMountPoint\", ne fait rien" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Mauvais point de montage pour la partition racine" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint est \"{}\", ce qui n'existe pas, ne fait rien" - -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Mauvaise configuration unsquash" - -#: src/modules/unpackfs/main.py:423 -msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" +"Le système de fichiers pour \"{}\" ({}) n'est pas pris en charge par votre " +"noyau actuel" + +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Le système de fichiers source \"{}\" n'existe pas" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Échec de la recherche de unsquashfs, assurez-vous que le paquetage squashfs-" -"tools est installé." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destination \"{}\" dans le système cible n'est pas un répertoire" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Impossible d'écrire le fichier de configuration KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Le fichier de configuration KDM n'existe pas" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Le fichier de configuration LXDM n'existe pas" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Le fichier de configuration LightDM {!S} n'existe pas" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Impossible de configurer LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Aucun hôte LightDM est installé" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Impossible d'écrire le fichier de configuration SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Le fichier de configuration SLIM {!S} n'existe pas" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Aucun gestionnaire d'affichage n'a été sélectionné pour le module de " "gestionnaire d'affichage" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"La liste des gestionnaires d'affichage est vide ou indéfinie dans " -"bothglobalstorage et displaymanager.conf." +"La liste des gestionnaires d'affichage est vide ou indéfinie à la fois dans " +"globalstorage et displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "La configuration du gestionnaire d'affichage était incomplète" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configuration de mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Aucun point de montage racine n'a été donné pour être utilisé par " "
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Configuration du swap chiffrée." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installation de données." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurer les services OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Impossible d'ajouter le service {name!s} au run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Impossible de retirer le service {name!s} du run-level {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -263,18 +279,18 @@ msgstr "" "Service-action {arg!s} inconnue pour le service {name!s} dans " "le run-level {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "L'appel rc-update {arg!s} dans chroot a renvoyé le code " "d'erreur {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Le runlevel cible n'existe pas" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -282,11 +298,11 @@ msgstr "" "Le chemin pour le runlevel {level!s} est {path!s}, qui n'existe" " pas." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Le service cible n'existe pas" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." @@ -294,79 +310,128 @@ msgstr "" "Le chemin pour le service {name!s} est {path!s}, qui n'existe " "pas." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurer le thème Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installer les paquets." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Traitement des paquets (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installation d'un paquet." msgstr[1] "Installation de %(num)d paquets." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Suppression d'un paquet." msgstr[1] "Suppression de %(num)d paquets." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installation du bootloader." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Configuration de l'horloge matériel." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Configuration du initramfs avec dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Création d'initramfs avec mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Erreur d'exécution de dracut sur la cible." +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Échec de l'exécution de mkinitfs sur la cible" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Le code de sortie était {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Configuration du initramfs avec dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Erreur d'exécution de dracut sur la cible." + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configuration du initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuration du service OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Écriture du fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "Tâche factice python" +msgstr "Tâche factice de python" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "Étape factice python {}" +msgstr "Étape factice de python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Configuration des locales." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "Sauvegarde des configuration réseau." +msgstr "Sauvegarde de la configuration du réseau en cours." diff --git a/lang/python/fr_CH/LC_MESSAGES/python.mo b/lang/python/fr_CH/LC_MESSAGES/python.mo deleted file mode 100644 index a063ac8ce..000000000 Binary files a/lang/python/fr_CH/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/fr_CH/LC_MESSAGES/python.po b/lang/python/fr_CH/LC_MESSAGES/python.po deleted file mode 100644 index e23be2b40..000000000 --- a/lang/python/fr_CH/LC_MESSAGES/python.po +++ /dev/null @@ -1,339 +0,0 @@ -# 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 , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" -"PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Language-Team: French (Switzerland) (https://www.transifex.com/calamares/teams/20061/fr_CH/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr_CH\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: src/modules/grubcfg/main.py:37 -msgid "Configure GRUB." -msgstr "" - -#: src/modules/mount/main.py:38 -msgid "Mounting partitions." -msgstr "" - -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 -msgid "Configuration Error" -msgstr "" - -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 -msgid "No partitions are defined for
{!s}
to use." -msgstr "" - -#: src/modules/services-systemd/main.py:35 -msgid "Configure systemd services" -msgstr "" - -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 -msgid "Cannot modify service" -msgstr "" - -#: src/modules/services-systemd/main.py:69 -msgid "" -"systemctl {arg!s} call in chroot returned error code {num!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 -msgid "Cannot enable systemd service {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:74 -msgid "Cannot enable systemd target {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:78 -msgid "Cannot disable systemd target {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:80 -msgid "Cannot mask systemd unit {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:82 -msgid "" -"Unknown systemd commands {command!s} and " -"{suffix!s} for unit {name!s}." -msgstr "" - -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 -msgid "Filling up filesystems." -msgstr "" - -#: src/modules/unpackfs/main.py:257 -msgid "rsync failed with error code {}." -msgstr "" - -#: src/modules/unpackfs/main.py:302 -msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" - -#: src/modules/unpackfs/main.py:317 -msgid "Starting to unpack {}" -msgstr "" - -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 -msgid "Failed to unpack image \"{}\"" -msgstr "" - -#: src/modules/unpackfs/main.py:399 -msgid "No mount point for root partition" -msgstr "" - -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:405 -msgid "Bad mount point for root partition" -msgstr "" - -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "" - -#: src/modules/unpackfs/main.py:423 -msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" - -#: src/modules/unpackfs/main.py:427 -msgid "The source filesystem \"{}\" does not exist" -msgstr "" - -#: src/modules/unpackfs/main.py:433 -msgid "" -"Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "" - -#: src/modules/unpackfs/main.py:447 -msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" - -#: src/modules/displaymanager/main.py:515 -msgid "Cannot write KDM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:516 -msgid "KDM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:577 -msgid "Cannot write LXDM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:578 -msgid "LXDM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:661 -msgid "Cannot write LightDM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:662 -msgid "LightDM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:736 -msgid "Cannot configure LightDM" -msgstr "" - -#: src/modules/displaymanager/main.py:737 -msgid "No LightDM greeter installed." -msgstr "" - -#: src/modules/displaymanager/main.py:768 -msgid "Cannot write SLIM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:769 -msgid "SLIM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:895 -msgid "No display managers selected for the displaymanager module." -msgstr "" - -#: src/modules/displaymanager/main.py:896 -msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " -"displaymanager.conf." -msgstr "" - -#: src/modules/displaymanager/main.py:978 -msgid "Display manager configuration was incomplete" -msgstr "" - -#: src/modules/initcpiocfg/main.py:37 -msgid "Configuring mkinitcpio." -msgstr "" - -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 -msgid "No root mount point is given for
{!s}
to use." -msgstr "" - -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 -msgid "Installing data." -msgstr "" - -#: src/modules/services-openrc/main.py:38 -msgid "Configure OpenRC services" -msgstr "" - -#: src/modules/services-openrc/main.py:66 -msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:68 -msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:70 -msgid "" -"Unknown service-action {arg!s} for service {name!s} in run-" -"level {level!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:103 -msgid "" -"rc-update {arg!s} call in chroot returned error code {num!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:110 -msgid "Target runlevel does not exist" -msgstr "" - -#: src/modules/services-openrc/main.py:111 -msgid "" -"The path for runlevel {level!s} is {path!s}, which does not " -"exist." -msgstr "" - -#: src/modules/services-openrc/main.py:119 -msgid "Target service does not exist" -msgstr "" - -#: src/modules/services-openrc/main.py:120 -msgid "" -"The path for service {name!s} is {path!s}, which does not " -"exist." -msgstr "" - -#: src/modules/plymouthcfg/main.py:36 -msgid "Configure Plymouth theme" -msgstr "" - -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 -msgid "Install packages." -msgstr "" - -#: src/modules/packages/main.py:66 -#, python-format -msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" - -#: src/modules/packages/main.py:71 -#, python-format -msgid "Installing one package." -msgid_plural "Installing %(num)d packages." -msgstr[0] "" -msgstr[1] "" - -#: src/modules/packages/main.py:74 -#, python-format -msgid "Removing one package." -msgid_plural "Removing %(num)d packages." -msgstr[0] "" -msgstr[1] "" - -#: src/modules/bootloader/main.py:51 -msgid "Install bootloader." -msgstr "" - -#: src/modules/hwclock/main.py:35 -msgid "Setting hardware clock." -msgstr "" - -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" - -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" - -#: src/modules/dracut/main.py:59 -msgid "The exit code was {}" -msgstr "" - -#: src/modules/initramfscfg/main.py:41 -msgid "Configuring initramfs." -msgstr "" - -#: src/modules/openrcdmcryptcfg/main.py:34 -msgid "Configuring OpenRC dmcrypt service." -msgstr "" - -#: src/modules/fstab/main.py:38 -msgid "Writing fstab." -msgstr "" - -#: src/modules/dummypython/main.py:44 -msgid "Dummy python job." -msgstr "" - -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 -msgid "Dummy python step {}" -msgstr "" - -#: src/modules/localecfg/main.py:39 -msgid "Configuring locales." -msgstr "" - -#: src/modules/networkcfg/main.py:37 -msgid "Saving network configuration." -msgstr "" diff --git a/lang/python/fur/LC_MESSAGES/python.po b/lang/python/fur/LC_MESSAGES/python.po new file mode 100644 index 000000000..40d242512 --- /dev/null +++ b/lang/python/fur/LC_MESSAGES/python.po @@ -0,0 +1,422 @@ +# 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 , YEAR. +# +# Translators: +# Fabio Tomat , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Fabio Tomat , 2020\n" +"Language-Team: Friulian (https://www.transifex.com/calamares/teams/20061/fur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "Configure GRUB." + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "Montaç des partizions." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Erôr di configurazion" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "No je stade definide nissune partizion di doprâ par
{!s}
." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "Configure i servizis di systemd" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "Impussibil modificâ il servizi" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"La clamade systemctl {arg!s} in chroot e à tornât il codiç di " +"erôr {num!s}." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "Impussibil abilitâ il servizi di systemd {name!s}." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "Impussibil abilitâ la destinazion di systemd {name!s}." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" +"Impussibil disabilitâ la destinazion di systemd {name!s}." + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "Impussibil mascarâ la unitât di systemd {name!s}." + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" +"Comants di systemd {command!s} e {suffix!s} no " +"cognossûts pe unitât {name!s}." + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "Daûr a jemplâ i filesystems." + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "Sincronizazion cun rsync falide cun codiç di erôr {}. " + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "Estrazion imagjin {}/{}, file {}/{}" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "Daûr a scomençâ la estrazion {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "No si è rivâts a estrai la imagjin \"{}\"" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "Nissun pont di montaç pe partizion lidrîs" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "Pont di montaç sbaliât pe partizion lidrîs" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "Il filesystem par \"{}\" ({}) nol è supuartât dal to kernel atuâl" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "Il filesystem sorzint \"{}\" nol esist" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "La destinazion \"{}\" tal sisteme che si va a creâ no je une cartele" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "Impussibil scrivi il file di configurazion di KDM" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "Il file di configurazion di KDM {!s} nol esist" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "Impussibil scrivi il file di configurazion di LXDM" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "Il file di configurazion di LXDM {!s} nol esist" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "Impussibil scrivi il file di configurazion di LightDM" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "Il file di configurazion di LightDM {!s} nol esist" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "Impussibil configurâ LightDM" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "Nissun menù di benvignût par LightDM instalât." + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "Impussibil scrivi il file di configurazion SLIM" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "Il file di configurazion di SLIM {!s} nol esist" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "Nissun gjestôr di visôrs selezionât pal modul displaymanager." + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" +"La liste dai gjestôrs di visôrs e je vueide o no je definide sedi in " +"globalstorage che in displaymanager.conf." + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "La configurazion dal gjestôr dai visôrs no jere complete" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "Daûr a configurâ di mkinitcpio." + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" +"Nol è stât indicât nissun pont di montaç di doprâ par
{!s}
." + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "Daûr a instalâ i dâts." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "Configure i servizis OpenRC" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "Impussibil zontâ il servizi {name!s} al run-level {level!s}." + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "Impussibil gjavâ il servizi {name!s} dal run-level {level!s}." + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" +"Azion dal servizi {arg!s} no cognossude pal servizi {name!s} " +"tal run-level {level!s}." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"La clamade rc-update {arg!s} in chroot e à tornât il codiç di " +"erôr {num!s}." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "Il runlevel di destinazion nol esist" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" +"Il percors pal runlevel {level!s} al è {path!s}, che nol esist." + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "Il servizi di destinazion nol esist" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" +"Il percors pal servizi {name!s} al è {path!s}, che nol esist." + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Configure il teme di Plymouth" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "Instale pachets." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "Elaborazion dai pachets (%(count)d / %(total)d)" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "Daûr a instalâ un pachet." +msgstr[1] "Daûr a instalâ %(num)d pachets." + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "Daûr a gjavâ un pachet." +msgstr[1] "Daûr a gjavâ %(num)d pachets." + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Instale il bootloader." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "Daûr a configurâ l'orloi hardware." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Daûr a creâ il initramfs cun mkinitfs." + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "No si è rivâts a eseguî mkinitfs su la destinazion" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Il codiç di jessude al jere {}" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Daûr a creâ initramfs cun dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "No si è rivâts a eseguî dracut su la destinazion" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "Daûr a configurâ initramfs." + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "Daûr a configurâ il servizi dmcrypt di OpenRC." + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "Daûr a scrivi fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "Lavôr di python pustiç." + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "Passaç di python pustiç {}" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "Daûr a configurâ la localizazion." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "Salvament de configurazion di rêt." diff --git a/lang/python/gl/LC_MESSAGES/python.mo b/lang/python/gl/LC_MESSAGES/python.mo deleted file mode 100644 index d70c91133..000000000 Binary files a/lang/python/gl/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/gl/LC_MESSAGES/python.po b/lang/python/gl/LC_MESSAGES/python.po index bc390c0ac..51c1bc795 100644 --- a/lang/python/gl/LC_MESSAGES/python.po +++ b/lang/python/gl/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xosé, 2018\n" "Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/)\n" @@ -21,326 +21,389 @@ msgstr "" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmontar sistemas de ficheiros." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuración de KDM {!s} non existe" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LXDM {!s} non existe" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LightDM {!s} non existe" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Non é posíbel configurar LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Non se instalou o saudador de LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuración de SLIM {!s} non existe" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Non hai xestores de pantalla seleccionados para o módulo displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"A lista de xestores de pantalla está baleira ou sen definir en " -"bothglobalstorage e displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "A configuración do xestor de pantalla foi incompleta" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar paquetes." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A procesar paquetes (%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "A instalar un paquete." msgstr[1] "A instalar %(num)d paquetes." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "A retirar un paquete." msgstr[1] "A retirar %(num)d paquetes." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarefa parva de python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Paso parvo de python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/gu/LC_MESSAGES/python.mo b/lang/python/gu/LC_MESSAGES/python.mo deleted file mode 100644 index 114bcc926..000000000 Binary files a/lang/python/gu/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/gu/LC_MESSAGES/python.po b/lang/python/gu/LC_MESSAGES/python.po index 62fac5c99..32fe90fc3 100644 --- a/lang/python/gu/LC_MESSAGES/python.po +++ b/lang/python/gu/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: gu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/he/LC_MESSAGES/python.mo b/lang/python/he/LC_MESSAGES/python.mo deleted file mode 100644 index 5784aeca5..000000000 Binary files a/lang/python/he/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/he/LC_MESSAGES/python.po b/lang/python/he/LC_MESSAGES/python.po index 2bef3fc76..a8afc0fc7 100644 --- a/lang/python/he/LC_MESSAGES/python.po +++ b/lang/python/he/LC_MESSAGES/python.po @@ -5,16 +5,17 @@ # # Translators: # Eli Shleifer , 2017 -# Yaron Shahrabani , 2020 +# Omer I.S. , 2020 +# Yaron Shahrabani , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Yaron Shahrabani , 2020\n" +"Last-Translator: Yaron Shahrabani , 2022\n" "Language-Team: Hebrew (https://www.transifex.com/calamares/teams/20061/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,66 +23,89 @@ msgstr "" "Language: he\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "הגדרת GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "מחיצות מעוגנות." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "שגיאה פנימית בעיגון סדרות נתונים של zfs" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "ייבוא zpool נכשל" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "שחרור zpool נכשל" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "הגדרת נקודת עיגון של zfs נכשלה" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "שגיאת הגדרות" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "לא הוגדרו מחיצות לשימוש של
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "שגיאת עיגון zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "הגדרת שירותי systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "לא ניתן לשנות את השירות" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} הקריאה ב־chroot החזירה את קוד השגיאה {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "לא ניתן להפעיל את השירות הבא של systemd:‏ {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "לא ניתן להפעיל את היעד של systemd בשם {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" +"לא ניתן להפעיל את המתזמן ב־systemd בשם " +"{name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "לא ניתן להשבית את היעד של systemd בשם {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "לא ניתן למסך את היחידה של systemd בשם {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,158 +113,155 @@ msgstr "" "פקודות לא ידועות של systemd‏ {command!s} " "ו־{suffix!s} עבור היחידה {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "ניתוק עיגון מערכות קבצים." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "מערכות הקבצים מתמלאות." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync נכשל עם קוד השגיאה {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "קובץ הדמות נפרס {}/{}, קובץ {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "הפריסה של {} מתחילה" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "פריסת התמונה „{}” נכשלה" +msgstr "פריסת קובץ הדמות \"{}\" נכשלה" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "אין נקודת עגינה למחיצת העל" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "ב־globalstorage אין את המפתח „rootMountPoint”, לא תתבצע אף פעולה" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "האחסון הכללי לא מכיל מפתח „נקודת עיגון שורש”." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "נקודת העגינה של מחיצת השורה שגויה" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint מוגדרת בתור „{}”, שאינו קיים, לא תתבצע אף פעולה" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "נקודת עיגון השורש היא „{}” ואינה קיימת." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "תצורת unsquash שגויה" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "הגדרות unpackfs שגויות" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "אין פרטי הגדרה." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "מערכת הקבצים עבור „{}” ‏({}) אינה נתמכת על ידי הליבה הנוכחית שלך." -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "מערכת הקבצים במקור „{}” אינה קיימת" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "איתור unsquashfs לא צלח, נא לוודא שהחבילה squashfs-tools מותקנת" +"installed." +msgstr "" +"איתור unsquashfs לא צלח, נא לוודא שהחבילה squashfs-" +"tools מותקנת." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "היעד „{}” במערכת הקבצים המיועדת אינו תיקייה" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "לא ניתן לכתוב את קובץ התצורה של KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "קובץ התצורה של KDM ‏{!s} אינו קיים" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "לא ניתן לכתוב את קובץ התצורה של LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "קובץ התצורה של LXDM ‏{!s} אינו קיים" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "לא ניתן לכתוב את קובץ התצורה של LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "קובץ התצורה של LightDM ‏{!s} אינו קיים" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "לא ניתן להגדיר את LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "לא מותקן מקבל פנים מסוג LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "לא ניתן לכתוב קובץ תצורה של SLIM." -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "קובץ התצורה {!s} של SLIM אינו קיים" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "לא נבחרו מנהלי תצוגה למודול displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"הרשימה של מנהלי התצוגה ריקה או שאינה מוגדרת תחת bothglobalstorage " -"ו־displaymanager.conf." +"רשימת מנהלי התצוגה ריקה או שאינה מוגדרת גם באחסון הכללי (globalstorage) וגם " +"ב־displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "תצורת מנהל התצוגה אינה שלמה" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio מותקן." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "לא סופקה נקודת עגינת שורש לשימוש של
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "מוגדר שטח החלפה מוצפן." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "הנתונים מותקנים." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "הגדרת שירותי OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "לא ניתן להוסיף את השירות {name!s} לשכבת ההפעלה {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "לא ניתן להסיר את השירות {name!s} משכבת ההפעלה {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -248,49 +269,49 @@ msgstr "" "service-action‏ (פעולת שירות) {arg!s} בלתי ידועה עבור השירות " "{name!s} בשכבת ההפעלה {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "הקריאה rc-update {arg!s} במצב chroot החזירה את קוד השגיאה " "{num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "יעד שכבת ההפעלה אינו קיים" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "הנתיב לשכבת ההפעלה {level!s} הוא {path!s} ונתיב זה אינו קיים." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "שירות היעד אינו קיים" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "הנתיב לשירות {name!s} הוא {path!s}, שאינו קיים." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "הגדרת ערכת עיצוב של Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "התקנת חבילות." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "החבילות מעובדות (%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -299,7 +320,7 @@ msgstr[1] "מותקנות %(num)d חבילות." msgstr[2] "מותקנות %(num)d חבילות." msgstr[3] "מותקנות %(num)d חבילות." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -308,51 +329,108 @@ msgstr[1] "מתבצעת הסרה של %(num)d חבילות." msgstr[2] "מתבצעת הסרה של %(num)d חבילות." msgstr[3] "מתבצעת הסרה של %(num)d חבילות." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "שגיאת מנהל חבילות" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"מנהל החבילות לא הצליח להכין את העדכונים. הפקודה
{!s}
החזירה את " +"קוד השגיאה {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"מנהל החבילות לא הצליח לעדכן את המערכת. הפקודה
{!s}
החזירה את קוד " +"השגיאה {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"מנהל החבילות לא הצליח לערוך שינויים במערכת המותקנת. הפקודה
{!s}
" +"החזירה את קוד השגיאה {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "התקנת מנהל אתחול." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "ההתקנה של grub נכשלה, לא הוגדרו מחיצות באחסון הכללי" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "שגיאת התקנת מנהל אתחול" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"לא ניתן להתקין את מנהל האתחול. פקודת ההתקנה
{!s}
החזירה את קוד " +"השגיאה {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "שעון החומרה מוגדר." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "נוצר initramfs עם dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "initramfs נוצר בעזרת mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "הרצת dracut על היעד נכשלה" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "הרצת mkinitfs על היעד נכשלה" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "קוד היציאה היה {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "נוצר initramfs עם dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "הרצת dracut על היעד נכשלה" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs מוגדר." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "שירות dmcrypt ל־OpenRC מוגדר." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab נכתב." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "לא סופקה תצורת
{!s}
לשימוש
{!s}
." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "משימת דמה של Python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "צעד דמה של Python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "השפות מוגדרות." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "הגדרות הרשת נשמרות." diff --git a/lang/python/hi/LC_MESSAGES/python.mo b/lang/python/hi/LC_MESSAGES/python.mo deleted file mode 100644 index 2732db6ed..000000000 Binary files a/lang/python/hi/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/hi/LC_MESSAGES/python.po b/lang/python/hi/LC_MESSAGES/python.po index a8823170f..bc27e2002 100644 --- a/lang/python/hi/LC_MESSAGES/python.po +++ b/lang/python/hi/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Panwar108 , 2019 +# Panwar108 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Panwar108 , 2019\n" +"Last-Translator: Panwar108 , 2022\n" "Language-Team: Hindi (https://www.transifex.com/calamares/teams/20061/hi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,65 +21,86 @@ msgstr "" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB विन्यस्त करना।" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "विभाजन माउंट करना।" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "zfs डेटासेट माउंट करते समय आंतरिक त्रुटि" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "zpool आयात विफल" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "zpool अनलॉक करना विफल" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "zfs माउंट पॉइंट निर्धारण विफल" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "विन्यास त्रुटि" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
के उपयोग हेतु कोई विभाजन परिभाषित नहीं हैं।" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs माउंट संबंधी त्रुटि" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd सेवाएँ विन्यस्त करना" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "सेवा को संशोधित नहीं किया जा सकता" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot में systemctl {arg!s} कॉल त्रुटि कोड {num!s}।" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "systemd सेवा {name!s} को सक्रिय नहीं किया जा सकता।" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." -msgstr "systemd टारगेट {name!s} को सक्रिय नहीं किया जा सकता।" +msgstr "systemd लक्ष्य {name!s}सक्रिय करना विफल।" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "systemd टाइमर {name!s}सक्रिय करना विफल।" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "systemd टारगेट {name!s} को निष्क्रिय नहीं किया जा सकता।" +msgstr "systemd लक्ष्य {name!s} निष्क्रिय करना विफल।" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd यूनिट {name!s} को मास्क नहीं किया जा सकता।" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -87,160 +108,156 @@ msgstr "" "यूनिट {name!s} हेतु अज्ञात systemd कमांड {command!s} व " "{suffix!s}।" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "फ़ाइल सिस्टम माउंट से हटाना।" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "फाइल सिस्टम भरना।" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync त्रुटि कोड {} के साथ विफल।" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "इमेज फ़ाइल {}/{}, फ़ाइल {}/{} सम्पीड़ित की जा रही है" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "{} हेतु संपीड़न प्रक्रिया आरंभ हो रही है " -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "इमेज फ़ाइल \"{}\" को खोलने में विफल" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "रुट विभाजन हेतु कोई माउंट पॉइंट नहीं है" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage में \"rootMountPoint\" कुंजी नहीं है, कुछ नहीं किया जाएगा" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage में \"rootMountPoint\" कुंजी नहीं है।" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "रुट विभाजन हेतु ख़राब माउंट पॉइंट" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "रुट माउंट पॉइंट \"{}\" है, जो कि मौजूद नहीं है, कुछ नहीं किया जाएगा" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint \"{}\" है, जो मौजूद नहीं है।" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "ख़राब unsquash विन्यास सेटिंग्स" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "विकृत unpackfs विन्यास" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "विन्यास संबंधी कोई सूचना नहीं है।" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "\"{}\" ({}) हेतु फ़ाइल सिस्टम आपके वर्तमान कर्नेल द्वारा समर्थित नहीं है" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" स्रोत फ़ाइल सिस्टम मौजूद नहीं है" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"unsqaushfs खोजने में विफल, सुनिश्चित करें कि squashfs-tools पैकेज इंस्टॉल है" +"unsqaushfs खोजने में विफल, सुनिश्चित करें कि squashfs-tools पैकेज इंस्टॉल " +"है।" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "लक्षित सिस्टम में \"{}\" स्थान कोई डायरेक्टरी नहीं है" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM विन्यास फ़ाइल राइट नहीं की जा सकती" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM विन्यास फ़ाइल {!s} मौजूद नहीं है" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM विन्यास फ़ाइल राइट नहीं की जा सकती" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM विन्यास फ़ाइल {!s} मौजूद नहीं है" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM विन्यास फ़ाइल राइट नहीं की जा सकती" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM विन्यास फ़ाइल {!s} मौजूद नहीं है" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM को विन्यस्त नहीं किया जा सकता" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "कोई LightDM लॉगिन स्क्रीन इंस्टॉल नहीं है।" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM विन्यास फ़ाइल राइट नहीं की जा सकती" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM विन्यास फ़ाइल {!s} मौजूद नहीं है" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "चयनित डिस्प्ले प्रबंधक मॉड्यूल हेतु कोई डिस्प्ले प्रबंधक नहीं मिला।" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"bothglobalstorage एवं displaymanager.conf में डिस्प्ले प्रबंधक सूची रिक्त या" -" अपरिभाषित है।" +"globalstorage व displaymanager.conf में डिस्प्ले प्रबंधक सूची रिक्त या " +"अपरिभाषित है।" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "डिस्प्ले प्रबंधक विन्यास अधूरा था" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio को विन्यस्त करना।" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "
{!s}
के उपयोग हेतु कोई रुट माउंट पॉइंट प्रदान नहीं किया गया।" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "एन्क्रिप्टेड स्वैप को विन्यस्त करना।" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "डाटा इंस्टॉल करना।" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC सेवाएँ विन्यस्त करना" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "रन-लेवल {level!s} में सेवा {name!s} को जोड़ा नहीं जा सका।" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "रन-लेवल {level!s} में सेवा {name!s} को हटाया नहीं जा सका।" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -248,105 +265,164 @@ msgstr "" "रन-लेवल {level!s} में सेवा {name!s} हेतु अज्ञात सेवा-कार्य " "{arg!s}।" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chroot में rc-update {arg!s} कॉल त्रुटि कोड {num!s}।" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "लक्षित रनलेवल मौजूद नहीं है" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "रनलेवल {level!s} हेतु पथ {path!s} है, जो कि मौजूद नहीं है।" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "लक्षित सेवा मौजूद नहीं है" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "सेवा {name!s} हेतु पथ {path!s} है, जो कि मौजूद नहीं है।" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth थीम विन्यस्त करना " -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "पैकेज इंस्टॉल करना।" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "पैकेज (%(count)d / %(total)d) संसाधित किए जा रहे हैं" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "एक पैकेज इंस्टॉल किया जा रहा है।" msgstr[1] "%(num)d पैकेज इंस्टॉल किए जा रहे हैं।" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "एक पैकेज हटाया जा रहा है।" msgstr[1] "%(num)d पैकेज हटाए जा रहे हैं।" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "पैकेज प्रबंधक त्रुटि" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"पैकेज प्रबंधक द्वारा अपडेट तैयार करना विफल। कमांड
{!s}
हेतु " +"त्रुटि कोड {!s} प्राप्त।" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"पैकेज प्रबंधक द्वारा सिस्टम अपडेट करना विफल। कमांड
{!s}
हेतु " +"त्रुटि कोड {!s} प्राप्त।" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"पैकेज प्रबंधक द्वारा इंस्टॉल हो रखें सिस्टम पर परिवर्तन करना विफल। कमांड " +"
{!s}
हेतु त्रुटि कोड {!s} प्राप्त।" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "बूट लोडर इंस्टॉल करना।" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "grub इंस्टॉल करना विफल, सर्वत्र संचयन में कोई विभाजन परिभाषित नहीं है" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "बूट लोडर इंस्टॉल त्रुटि" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"बूट लोडर इंस्टॉल करना विफल। इंस्टॉल कमांड
{!s}
हेतु त्रुटि कोड " +"{!s} प्राप्त।" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "हार्डवेयर घड़ी सेट करना।" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "dracut के साथ initramfs बनाना।" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "mkinitfs के साथ initramfs बनाना।" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "टारगेट पर dracut चलाने में विफल" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "लक्ष्य पर mkinitfs निष्पादन विफल" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "त्रुटि कोड {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "dracut के साथ initramfs बनाना।" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "लक्ष्य पर dracut निष्पादन विफल" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs को विन्यस्त करना। " -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "OpenRC dmcrypt सेवा को विन्यस्त करना।" +msgstr "OpenRC dmcrypt सेवा विन्यस्त करना।" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab पर राइट करना।" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"कोई
{!s}
विन्यास प्रदान नहीं किया गया
{!s}
के उपयोग " +"हेतु।" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "डमी पाइथन प्रक्रिया ।" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "डमी पाइथन प्रक्रिया की चरण संख्या {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "स्थानिकी को विन्यस्त करना।" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "नेटवर्क विन्यास सेटिंग्स संचित करना।" diff --git a/lang/python/hr/LC_MESSAGES/python.mo b/lang/python/hr/LC_MESSAGES/python.mo deleted file mode 100644 index 715163f8d..000000000 Binary files a/lang/python/hr/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/hr/LC_MESSAGES/python.po b/lang/python/hr/LC_MESSAGES/python.po index d1cb30890..1f838268f 100644 --- a/lang/python/hr/LC_MESSAGES/python.po +++ b/lang/python/hr/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Lovro Kudelić , 2020 +# Lovro Kudelić , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Lovro Kudelić , 2020\n" +"Last-Translator: Lovro Kudelić , 2022\n" "Language-Team: Croatian (https://www.transifex.com/calamares/teams/20061/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,67 +21,88 @@ msgstr "" "Language: hr\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigurirajte GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montiranje particija." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Interna pogreška pri postavljanju zfs skupova podataka" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Nije uspio uvoz zpool-a" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Otključavanje zpool-a nije uspjelo" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Nije uspjelo postavljanje ZFS točke montiranja" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Greška konfiguracije" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Nema definiranih particija za
{!s}
korištenje." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "ZFS greška montiranja" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguriraj systemd servise" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Ne mogu modificirati servis" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} poziv u chroot-u vratio je kod pogreške " "{num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Ne mogu omogućiti systemd servis {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Ne mogu omogućiti systemd cilj {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Nije moguće omogućiti systemd timer {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Ne mogu onemogućiti systemd cilj {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Ne mogu maskirati systemd jedinicu {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,161 +110,156 @@ msgstr "" "Nepoznata systemd naredba {command!s} i {suffix!s}" " za jedinicu {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Odmontiraj datotečne sustave." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Popunjavanje datotečnih sustava." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync nije uspio s kodom pogreške {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Otpakiravanje slike {}/{}, datoteka {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Početak raspakiravanja {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Otpakiravnje slike nije uspjelo \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nema točke montiranja za root particiju" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage ne sadrži ključ \"rootMountPoint\", ne radi ništa" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage ne sadrži ključ \"rootMountPoint\"." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Neispravna točka montiranja za root particiju" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint je \"{}\", što ne postoji, ne radi ništa" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint je \"{}\", što ne postoji." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Neispravna unsquash konfiguracija" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Neispravna unpackfs konfiguracija" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Nema informacija o konfiguraciji." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Datotečni sustav za \"{}\" ({}) nije podržan na vašem trenutnom kernelu" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Izvorni datotečni sustav \"{}\" ne postoji" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" "Neuspješno pronalaženje unsquashfs, provjerite imate li instaliran paket " -"squashfs-tools" +"squashfs-tools." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Odredište \"{}\" u ciljnom sustavu nije direktorij" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Ne mogu zapisati KDM konfiguracijsku datoteku" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfiguracijska datoteka {!s} ne postoji" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Ne mogu zapisati LXDM konfiguracijsku datoteku" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfiguracijska datoteka {!s} ne postoji" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Ne moku zapisati LightDM konfiguracijsku datoteku" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfiguracijska datoteka {!s} ne postoji" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Ne mogu konfigurirati LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nije instaliran LightDM pozdravnik." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Ne mogu zapisati SLIM konfiguracijsku datoteku" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfiguracijska datoteka {!s} ne postoji" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Nisu odabrani upravitelji zaslona za modul displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Popis upravitelja zaslona je prazan ili nedefiniran u bothglobalstorage i " +"Popis upravitelja zaslona je prazan ili nedefiniran u oba globalstorage i " "displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Konfiguracija upravitelja zaslona nije bila potpuna" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfiguriranje mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nijedna root točka montiranja nije definirana za
{!s}
korištenje." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfiguriranje šifriranog swapa." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instaliranje podataka." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurirajte OpneRC servise" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Ne mogu dodati servis {name!s} u run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Ne mogu ukloniti servis {name!s} iz run-level-a {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -251,18 +267,18 @@ msgstr "" "Nepoznat service-action {arg!s} za servis {name!s} u run-level " "{level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} poziv u chroot-u vratio je kod pogreške " "{num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Ciljni runlevel ne postoji" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -270,32 +286,32 @@ msgstr "" "Putanja za runlevel {level!s} je {path!s}, međutim ona ne " "postoji." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Ciljni servis ne postoji" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Putanja servisa {name!s} je {path!s}, međutim ona ne postoji." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfigurirajte Plymouth temu" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instaliraj pakete." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Obrađujem pakete (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -303,7 +319,7 @@ msgstr[0] "Instaliram paket." msgstr[1] "Instaliram %(num)d pakete." msgstr[2] "Instaliram %(num)d pakete." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -311,51 +327,110 @@ msgstr[0] "Uklanjam paket." msgstr[1] "Uklanjam %(num)d pakete." msgstr[2] "Uklanjam %(num)d pakete." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Pogreška upravitelja paketa" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Upravitelj paketa nije mogao pripremiti ažuriranja. Naredba
{!s}
" +"je vratila kôd pogreške {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Upravitelj paketa nije mogao ažurirati sustav. Naredba
{!s}
je " +"vratila kod pogreške {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Upravitelj paketa nije mogao izvršiti promjene na instaliranom sustavu. " +"Naredba
{!s}
je vratila kôd pogreške {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instaliram bootloader." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Instalacija gruba nije uspjela, nema definiranih particija u globalnoj " +"pohrani" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Greška prilikom instalacije bootloadera" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Bootloader nije mogao biti instaliran. Instalacijska naredba
{!s}
" +" je vratila kod pogreške {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Postavljanje hardverskog sata." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Stvaranje initramfs s dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Stvaranje initramfs s mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Nije uspjelo pokretanje dracuta na ciljanom sustavu" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Pokretanje mkinitfs na ciljanom sustavu nije uspjelo" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Izlazni kod bio je {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Stvaranje initramfs s dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Nije uspjelo pokretanje dracuta na ciljanom sustavu" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfiguriranje initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfiguriranje servisa OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisujem fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "Nije dana konfiguracija
{!s}
za
{!s}
upotrebu." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Testni python posao." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Testni python korak {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfiguriranje lokalizacije." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Spremanje mrežne konfiguracije." diff --git a/lang/python/hu/LC_MESSAGES/python.mo b/lang/python/hu/LC_MESSAGES/python.mo deleted file mode 100644 index 60592e1b5..000000000 Binary files a/lang/python/hu/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/hu/LC_MESSAGES/python.po b/lang/python/hu/LC_MESSAGES/python.po index 97f3dd9aa..946f540fe 100644 --- a/lang/python/hu/LC_MESSAGES/python.po +++ b/lang/python/hu/LC_MESSAGES/python.po @@ -5,7 +5,7 @@ # # Translators: # Adriaan de Groot , 2018 -# Balázs Meskó , 2018 +# Balázs Meskó , 2018 # miku84, 2019 # Lajos Pasztor , 2019 # @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lajos Pasztor , 2019\n" "Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/)\n" @@ -24,67 +24,88 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB konfigurálása." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Partíciók csatolása." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigurációs hiba" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Nincsenek partíciók meghatározva a
{!s}
használatához." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd szolgáltatások beállítása" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "a szolgáltatást nem lehet módosítani" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} hívás a chroot-ban hibakódot okozott {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" "Nem sikerült a systemd szolgáltatást engedélyezni: {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Nem sikerült a systemd célt engedélyezni: {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nem sikerült a systemd cél {name!s} letiltása." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nem maszkolható systemd egység: {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -92,161 +113,151 @@ msgstr "" "Ismeretlen systemd parancsok {command!s} és " "{suffix!s} a {name!s} egységhez. " -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Fájlrendszerek leválasztása." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Fájlrendszerek betöltése." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "az rsync elhalt a(z) {} hibakóddal" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kép kicsomagolása nem sikerült" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nincs betöltési pont a root partíciónál" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -"globalstorage nem tartalmaz \"rootMountPoint\" kulcsot, semmi nem történik" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Rossz betöltési pont a root partíciónál" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint is \"{}\", ami nem létezik, semmi nem történik" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Rossz unsquash konfiguráció" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "A forrás fájlrendszer \"{}\" nem létezik" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"unsquashfs nem található, győződj meg róla a squashfs-tools csomag telepítve" -" van." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Az elérés \"{}\" nem létező könyvtár a cél rendszerben" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "A KDM konfigurációs fájl nem írható" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "A(z) {!s} KDM konfigurációs fájl nem létezik" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Az LXDM konfigurációs fájl nem írható" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "A(z) {!s} LXDM konfigurációs fájl nem létezik" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "A LightDM konfigurációs fájl nem írható" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "A(z) {!s} LightDM konfigurációs fájl nem létezik" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "A LightDM nem állítható be" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nincs LightDM üdvözlő telepítve." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "A SLIM konfigurációs fájl nem írható" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "A(z) {!s} SLIM konfigurációs fájl nem létezik" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Nincs kijelzőkezelő kiválasztva a kijelzőkezelő modulhoz." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"A kijelzőkezelők listája üres vagy nincs megadva a bothglobalstorage-ben és" -" a displaymanager.conf fájlban." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "A kijelzőkezelő konfigurációja hiányos volt" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio konfigurálása." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nincs root csatolási pont megadva a
{!s}
használatához." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Titkosított swap konfigurálása." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Adatok telepítése." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC szolgáltatások beállítása" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Nem lehet {name!s} szolgáltatást hozzáadni a run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Nem lehet törölni a {name!s} szolgáltatást a {level!s} futás-szintből" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -254,17 +265,17 @@ msgstr "" "Ismeretlen service-action {arg!s} a szolgáltatáshoz {name!s} in" " run-level {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} hívás a chroot-ban hibakódot adott: {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "A cél futási szint nem létezik" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -272,90 +283,139 @@ msgstr "" "A futási-szint elérési útja {level!s} ami {path!s}, nem " "létezik." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "A cél szolgáltatás nem létezik" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "A szolgáltatás {name!s} elérési útja {path!s}, nem létezik." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth téma beállítása" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Csomagok telepítése." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Csomagok feldolgozása (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Egy csomag telepítése." msgstr[1] "%(num)d csomag telepítése." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Egy csomag eltávolítása." msgstr[1] "%(num)d csomag eltávolítása." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Rendszerbetöltő telepítése." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Rendszeridő beállítása." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "initramfs létrehozása ezzel: dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "dracut futtatása nem sikerült a célon." +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "A kilépési kód {} volt." -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "initramfs létrehozása ezzel: dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "dracut futtatása nem sikerült a célon." + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs konfigurálása." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt szolgáltatás konfigurálása." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab írása." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Hamis Python feladat." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Hamis {}. Python lépés" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "nyelvi értékek konfigurálása." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Hálózati konfiguráció mentése." diff --git a/lang/python/id/LC_MESSAGES/python.mo b/lang/python/id/LC_MESSAGES/python.mo deleted file mode 100644 index b9bbbc6cb..000000000 Binary files a/lang/python/id/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/id/LC_MESSAGES/python.po b/lang/python/id/LC_MESSAGES/python.po index e5d875412..9fa6f010e 100644 --- a/lang/python/id/LC_MESSAGES/python.po +++ b/lang/python/id/LC_MESSAGES/python.po @@ -5,17 +5,17 @@ # # Translators: # Choiril Abdul, 2018 -# Harry Suryapambagya , 2018 -# Wantoyo , 2018 +# Wantoyèk , 2018 +# Drajat Hasan , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Wantoyo , 2018\n" +"Last-Translator: Drajat Hasan , 2021\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,323 +23,386 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 -msgid "Configuration Error" +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Kesalahan Konfigurasi" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Lepaskan sistem berkas." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Gak bisa menulis file konfigurasi KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "File {!s} config KDM belum ada" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Gak bisa menulis file konfigurasi LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "File {!s} config LXDM enggak ada" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Gak bisa menulis file konfigurasi LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "File {!s} config LightDM belum ada" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Gak bisa mengkonfigurasi LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Tiada LightDM greeter yang terinstal." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Gak bisa menulis file konfigurasi SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "File {!s} config SLIM belum ada" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Tiada display manager yang dipilih untuk modul displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Daftar displaymanager telah kosong atau takdidefinisikan dalam " -"bothglobalstorage dan displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Konfigurasi display manager belum rampung" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instal paket-paket." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paket pemrosesan (%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Menginstal paket %(num)d" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "mencopot %(num)d paket" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tugas dumi python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Langkah {} dumi python" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/ie/LC_MESSAGES/python.po b/lang/python/ie/LC_MESSAGES/python.po new file mode 100644 index 000000000..bdcd278fd --- /dev/null +++ b/lang/python/ie/LC_MESSAGES/python.po @@ -0,0 +1,412 @@ +# 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 , YEAR. +# +# Translators: +# Caarmi, 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Caarmi, 2020\n" +"Language-Team: Interlingue (https://www.transifex.com/calamares/teams/20061/ie/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ie\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "Configurante GRUB." + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "Montente partitiones." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Errore de configuration" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "Null partition es definit por usa de
{!s}
." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "Configurante servicios de systemd" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"Invocation de systemctl {arg!s} in chroot retrodat li code " +"{num!s}." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "Ne successat activar li servicio de systemd {name!s}." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "Ne successat depaccar li image \"{}\"" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "Ne successat scrir li file de configuration de KDM" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "File del configuration de KDM {!s} ne existe" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "Ne successat scrir li file de configuration de LXDM" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "File del configuration de LXDM {!s} ne existe" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "Ne successat scrir li file de configuration de LightDM" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "File del configuration de LightDM {!s} ne existe" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "File del configuration de SLIM {!s} ne existe" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "Configurante mkinitcpio." + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "Installante li data." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "Configurante servicios de OpenRC" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"Invocation de rc-update {arg!s} in chroot retrodat li code " +"{num!s}." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Configurante li tema de Plymouth" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "Installante paccages." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Installante li bootloader." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Li code de termination esset {}" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "Configurante initramfs." + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "Scrition de fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "Configurante locales." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/is/LC_MESSAGES/python.mo b/lang/python/is/LC_MESSAGES/python.mo deleted file mode 100644 index b56cd6fbc..000000000 Binary files a/lang/python/is/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/is/LC_MESSAGES/python.po b/lang/python/is/LC_MESSAGES/python.po index 3c53f93c0..1e1d7ca9b 100644 --- a/lang/python/is/LC_MESSAGES/python.po +++ b/lang/python/is/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Kristján Magnússon, 2018 +# Kristján Magnússon, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Kristján Magnússon, 2018\n" +"Last-Translator: Kristján Magnússon, 2017\n" "Language-Team: Icelandic (https://www.transifex.com/calamares/teams/20061/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,323 +21,388 @@ msgstr "" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Aftengja skráarkerfi." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Setja upp pakka." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Vinnslupakkar (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Setja upp einn pakka." msgstr[1] "Setur upp %(num)d pakka." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Fjarlægi einn pakka." msgstr[1] "Fjarlægi %(num)d pakka." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/it_IT/LC_MESSAGES/python.mo b/lang/python/it_IT/LC_MESSAGES/python.mo deleted file mode 100644 index 0a81d5199..000000000 Binary files a/lang/python/it_IT/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/it_IT/LC_MESSAGES/python.po b/lang/python/it_IT/LC_MESSAGES/python.po index 883b40df1..641e06bd0 100644 --- a/lang/python/it_IT/LC_MESSAGES/python.po +++ b/lang/python/it_IT/LC_MESSAGES/python.po @@ -4,18 +4,20 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Saverio , 2018 # Pierfrancesco Passerini , 2019 # Pietro F. Fontana, 2020 +# Saverio , 2020 +# Giuseppe Pignataro , 2021 +# Vincenzo Reale , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Pietro F. Fontana, 2020\n" +"Last-Translator: Vincenzo Reale , 2022\n" "Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,330 +25,404 @@ msgstr "" "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Configura GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "Montaggio partizioni." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Importazione zpool non riuscita" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Sblocco zpool non riuscito" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Errore di Configurazione" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." -msgstr "" +msgstr "Nessuna partizione definita per l'uso con
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "errore di mount zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "Configura systemd services" +msgstr "Configura servizi systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Impossibile modificare il servizio" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"La chiamata systemctl {arg!s} in chroot ha restituito il codice" +" di errore {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "Impossibile abilitare systemd service {name!s}." +msgstr "Impossibile abilitare il servizio systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." -msgstr "Impossibile abilitare systemd target {name!s}." +msgstr "Impossibile abilitare la destinazione systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "Impossibile disabilitare systemd target {name!s}." +msgstr "" +"Impossibile disabilitare la destinazione systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "Impossibile mascherare systemd unit {name!s}." +msgstr "Impossibile mascherare l'unità systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"Comandi systemd sconosciuti {command!s} " +"e{suffix!s} per l'unità {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Smonta i file system." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "" +msgstr "Copia dei file system." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync fallita con codice d'errore {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Estrazione immagine {}/{}, file {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Avvio dell'estrazione {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Estrazione dell'immagine \"{}\" fallita" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nessun punto di montaggio per la partizione di root" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "l'archiviazione globale non contiene una chiave \"rootMountPoint\"." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Punto di montaggio per la partizione di root errato" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Configurazione unsquash errata" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Configurazione unpackfs errata" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Non ci sono informazioni di configurazione." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "Il filesystem per \"{}\" ({}) non è supportato dal kernel corrente" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Il filesystem sorgente \"{}\" non esiste" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Impossibile trovare unsquashfs, assicurati di aver installato il pacchetto " -"squashfs-tools" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinazione del sistema \"{}\" non è una directory" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Impossibile scrivere il file di configurazione di KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Il file di configurazione di KDM {!s} non esiste" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Il file di configurazione di LXDM {!s} non esiste" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Il file di configurazione di LightDM {!s} non esiste" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Impossibile configurare LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "Non è stato installato nessun LightDM greeter" +msgstr "Nessun LightDM greeter installato." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Impossibile scrivere il file di configurazione di SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Il file di configurazione di SLIM {!s} non esiste" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Non è stato selezionato alcun display manager per il modulo displaymanager" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"La lista displaymanagers è vuota o non definita sia in globalstorage che in " -"displaymanager.conf" +"L'elenco dei display manager è vuota o non definita sia in globalstorage che" +" in displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "La configurazione del display manager è incompleta" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "Configurazione di mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." -msgstr "" +msgstr "Nessun punto di mount root è dato in l'uso per
{!s}
" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "Installazione." +msgstr "Installazione dei dati." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configura i servizi OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Impossibile aggiungere il servizio {name!s} al run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Impossibile rimuovere il servizio {name!s} dal run-level {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"Service-action sconosciuta {arg!s} per il servizio {name!s} nel" +" run-level {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"La chiamata rc-update {arg!s} in chroot ha ritornato il codice " +"di errore {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Il runlevel target non esiste" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Il percorso del runlevel {level!s} è {path!s}, ma non esiste." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Il servizio target non esiste" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Il percorso del servizio {name!s} è {path!s}, ma non esiste." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configura il tema Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installa pacchetti." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Elaborazione dei pacchetti (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installando un pacchetto." msgstr[1] "Installazione di %(num)d pacchetti." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Rimuovendo un pacchetto." msgstr[1] "Rimozione di %(num)d pacchetti." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Errore del gestore dei pacchetti" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." +msgstr "Installa il bootloader." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Installazione di grub non riuscita, nessuna partizione definita " +"nell'archiviazione globale" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Errore di installazione del boot loader" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "" +msgstr "Impostazione del clock hardware." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Sto creando initramfs con mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Impossibile eseguire mkinitfs sulla destinazione" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "" +msgstr "Il codice di uscita era {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Creazione di initramfs con dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Impossibile eseguire dracut sulla destinazione" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "Configurazione di initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Configurazione del servizio OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "Scrittura di fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Job python fittizio." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Python step {} fittizio" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "" +msgstr "Configurazione della localizzazione." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "" +msgstr "Salvataggio della configurazione di rete." diff --git a/lang/python/ja-Hira/LC_MESSAGES/python.po b/lang/python/ja-Hira/LC_MESSAGES/python.po new file mode 100644 index 000000000..cfe352952 --- /dev/null +++ b/lang/python/ja-Hira/LC_MESSAGES/python.po @@ -0,0 +1,402 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Japanese (Hiragana) (https://www.transifex.com/calamares/teams/20061/ja-Hira/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja-Hira\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/ja/LC_MESSAGES/python.mo b/lang/python/ja/LC_MESSAGES/python.mo deleted file mode 100644 index 6f0106edd..000000000 Binary files a/lang/python/ja/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ja/LC_MESSAGES/python.po b/lang/python/ja/LC_MESSAGES/python.po index d97806a1a..3a87aa743 100644 --- a/lang/python/ja/LC_MESSAGES/python.po +++ b/lang/python/ja/LC_MESSAGES/python.po @@ -6,16 +6,16 @@ # Translators: # ブラシックデービッド, 2019 # Takefumi Nagata, 2019 -# UTUMI Hirosi , 2020 +# UTUMI Hirosi , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: UTUMI Hirosi , 2020\n" +"Last-Translator: UTUMI Hirosi , 2022\n" "Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,66 +23,87 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUBを設定にします。" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "パーティションのマウント。" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "zfs データセットのマウントで内部エラーが発生" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "zpool のインポートに失敗しました" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "zpool のロック解除に失敗しました。" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "zfs マウントポイントの設定に失敗しました" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "コンフィグレーションエラー" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
に使用するパーティションが定義されていません。" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs のマウントでエラー" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemdサービスを設定" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "サービスが変更できません" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "chroot で systemctl {arg!s} を呼び出すと、エラーコード {num!s} が返されました。" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "{name!s}というsystemdサービスが可能にすることができません" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd でターゲット {name!s}が開始できません。" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "systemd タイマー {name!s} を有効にできません。" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd でターゲット {name!s}が停止できません。" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd ユニット {name!s} をマスクできません。" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -90,258 +111,307 @@ msgstr "" "ユニット {name!s} に対する未知の systemd コマンド {command!s} と " "{suffix!s}。" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "ファイルシステムをアンマウント。" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "ファイルシステムに書き込んでいます。" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "エラーコード {} によりrsyncを失敗。" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "イメージ {}/{}, ファイル {}/{} を解凍しています" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "{} の解凍を開始しています" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "イメージ \"{}\" の展開に失敗" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "ルートパーティションのためのマウントポイントがありません" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage に \"rootMountPoint\" キーが含まれていません。何もしません。" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage に \"rootMountPoint\" キーがありません。" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "ルートパーティションのためのマウントポイントが不正です" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "ルートマウントポイントは \"{}\" ですが、存在しません。何もできません。" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint が \"{}\" になっていて存在しません。" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "unsquash の設定が不正です" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "不適切な unpackfs の設定" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "設定情報がありません。" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) のファイルシステムは、現在のカーネルではサポートされていません" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "ソースファイルシステム \"{}\" は存在しません" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "unsquashfs が見つかりませんでした。 squashfs-toolsがインストールされているか、確認してください。" +"installed." +msgstr "unsquashfs が見つかりませんでした。squashfs-tools パッケージがインストールされているか確認してください。" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ターゲットシステムの宛先 \"{}\" はディレクトリではありません" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDMの設定ファイルに書き込みができません" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定ファイル {!s} が存在しません" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDMの設定ファイルに書き込みができません" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定ファイル {!s} が存在しません" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDMの設定ファイルに書き込みができません" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定ファイル {!s} が存在しません" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDMの設定ができません" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeter がインストールされていません。" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIMの設定ファイルに書き込みができません" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定ファイル {!s} が存在しません" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "ディスプレイマネージャが選択されていません。" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." -msgstr "ディスプレイマネージャのリストが bothglobalstorage 及び displaymanager.conf 内で空白か未定義です。" +msgstr "globalstorage と displaymanager.conf の両方で、displaymanagers リストが空か未定義です。" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "ディスプレイマネージャの設定が不完全です" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpioを設定しています。" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
を使用するのにルートマウントポイントが与えられていません。" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "暗号化したswapを設定しています。" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "データのインストール。" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRCサービスを設定" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "ランレベル {level!s} にサービス {name!s} が追加できません。" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "ランレベル {level!s} からサービス {name!s} が削除できません。" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "ランレベル {level!s} 内のサービス {name!s} に対する未知のサービスアクション {arg!s}。" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chrootで rc-update {arg!s} を呼び出すとエラーコード {num!s} が返されました。" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "ターゲットとするランレベルは存在しません" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "ランレベル {level!s} のパスが {path!s} です。これは存在しません。" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "ターゲットとするサービスは存在しません" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "サービス {name!s} のパスが {path!s} です。これは存在しません。" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouthテーマを設定" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "パッケージのインストール" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "パッケージを処理しています (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] " %(num)d パッケージをインストールしています。" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] " %(num)d パッケージを削除しています。" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "パッケージマネージャーのエラー" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"パッケージマネージャーはアップデートを準備できませんでした。コマンド
{!s}
はエラーコード {!s} を返しました。" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"パッケージマネージャーはシステムをアップデートできませんでした。 コマンド
{!s}
はエラーコード {!s} を返しました。" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"パッケージマネージャーはインストールされているシステムに変更を加えられませんでした。コマンド
{!s}
はエラーコード {!s} " +"を返しました。" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ブートローダーをインストール" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "grub のインストールに失敗しました。グローバルストレージにパーティションが定義されていません" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "ブートローダーのインストールエラー" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"ブートローダーをインストールできませんでした。インストールコマンド
{!s}
がエラーコード {!s} を返しました。" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "ハードウェアクロックの設定" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "dracutとinitramfsを作成しています。" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "mkinitfsを使用してinitramfsを作成します。" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "ターゲット上で dracut の実行に失敗" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "ターゲットでmkinitfsを実行できませんでした" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "停止コードは {} でした" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "dracutとinitramfsを作成しています。" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "ターゲット上で dracut の実行に失敗" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfsを設定しています。" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcryptサービスを設定しています。" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstabを書き込んでいます。" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "
{!s}
が使用する
{!s}
設定が指定されていません。" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python job." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python step {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "ロケールを設定しています。" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "ネットワーク設定を保存しています。" diff --git a/lang/python/kk/LC_MESSAGES/python.mo b/lang/python/kk/LC_MESSAGES/python.mo deleted file mode 100644 index 0678172ea..000000000 Binary files a/lang/python/kk/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/kk/LC_MESSAGES/python.po b/lang/python/kk/LC_MESSAGES/python.po index ee3e6374d..fc68ff872 100644 --- a/lang/python/kk/LC_MESSAGES/python.po +++ b/lang/python/kk/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: kk\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/kn/LC_MESSAGES/python.mo b/lang/python/kn/LC_MESSAGES/python.mo deleted file mode 100644 index 457bfa792..000000000 Binary files a/lang/python/kn/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/kn/LC_MESSAGES/python.po b/lang/python/kn/LC_MESSAGES/python.po index 611c32dcd..a41b0311c 100644 --- a/lang/python/kn/LC_MESSAGES/python.po +++ b/lang/python/kn/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: kn\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/ko/LC_MESSAGES/python.mo b/lang/python/ko/LC_MESSAGES/python.mo deleted file mode 100644 index 22a53a688..000000000 Binary files a/lang/python/ko/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ko/LC_MESSAGES/python.po b/lang/python/ko/LC_MESSAGES/python.po index 3f62b5904..d2eff90ca 100644 --- a/lang/python/ko/LC_MESSAGES/python.po +++ b/lang/python/ko/LC_MESSAGES/python.po @@ -4,17 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 김지현 , 2018 -# MarongHappy , 2020 +# Ji-Hyeon Gim , 2018 +# JungHee Lee , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: MarongHappy , 2020\n" +"Last-Translator: JungHee Lee , 2022\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,65 +22,86 @@ msgstr "" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB 구성" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "파티션 마운트 중." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "zfs 데이터세트를 마운트하는 중 내부 오류" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "zpool을 가져오지 못했습니다" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "zpool의 잠금을 해제하지 못했습니다" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "zfs 마운트위치를 지정하지 못했습니다" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "구성 오류" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "사용할
{!s}
에 대해 정의된 파티션이 없음." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs 마운트하는 중 오류" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "systemd 서비스 구성" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "서비스를 수정할 수 없음" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot에서 systemctl {arg!s} 호출에서오류 코드 {num}를 반환 했습니다." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "{name! s} 시스템 서비스를 활성화 할 수 없습니다." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd 대상 {name! s}를 활성화 할 수 없습니다." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "시스템 타이머 {name!s}를 활성화할 수 없습니다." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "systemd 대상 {name! s}를 비활성화 할 수 없습니다." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "시스템 유닛 {name! s}를 마스크할 수 없습니다." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -88,157 +109,153 @@ msgstr "" "유닛 {name! s}에 대해 알 수 없는 시스템 명령 {command! s}{suffix! " "s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "파일 시스템 마운트를 해제합니다." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "파일 시스템을 채우는 중." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync가 {} 오류 코드로 실패했습니다." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "이미지 {}/{}, 파일 {}/{} 압축푸는 중" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "{} 압축 풀기 시작 중" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" 이미지의 압축을 풀지 못했습니다." -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "루트 파티션에 대한 마운트 위치 없음" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage에는 \"rootMountPoint \" 키가 포함되어 있지 않으며 아무 작업도 수행하지 않습니다." +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage는 \"루트마운트위치\" 키를 포함하지 않습니다." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "루트 파티션에 대한 잘못된 마운트 위치" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint는 \"{}\"이고, 존재하지 않으며, 아무 작업도 수행하지 않습니다." +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "루트마운트위치는 \"{}\"이고, 존재하지 않습니다." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "잘못된 unsquash 구성" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "unpackfs 구성이 잘못되었습니다." -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "구성 정보가 없습니다." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({})에 대한 파일 시스템은 현재 커널에서 지원되지 않습니다." -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" 소스 파일시스템은 존재하지 않습니다." -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "unsquashfs를 찾지 못했습니다. squashfs-tools 패키지가 설치되어 있는지 확인하십시오." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "대상 시스템의 \"{}\" 목적지가 디렉토리가 아닙니다." -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM 구성 파일을 쓸 수 없습니다." -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 구성 파일 {! s}가 없습니다" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LMLDM 구성 파일을 쓸 수 없습니다." -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 구성 파일 {!s}이 없습니다." -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM 구성 파일을 쓸 수 없습니다." -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 구성 파일 {!s}가 없습니다." -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM을 구성할 수 없습니다." -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM greeter가 설치되지 않았습니다." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM 구성 파일을 쓸 수 없음" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 구성 파일 {!s}가 없음" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager 모듈에 대해 선택된 디스플레이 관리자가 없습니다." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"displaymanagers 목록은 globalstorage 및 displaymanager.conf에서 비어 있거나 정의되지 않습니다." +"displaymanagers 목록이 비어 있거나 globalstorage 및 displaymanager.conf 모두에서 정의되지 " +"않았습니다." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "디스플레이 관리자 구성이 완료되지 않았습니다." -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio 구성 중." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
에서 사용할 루트 마운트 지점이 제공되지 않음." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "암호화된 스왑 구성 중." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "데이터 설치중." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "OpenRC 서비스 구성" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "run-level {level!s}에 {name!s} 서비스를 추가할 수 없습니다." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "실행-수준 {level! s}에서 서비스 {name! s}를 제거할 수 없습니다." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -246,102 +263,152 @@ msgstr "" "run-level {level!s}의 service {name!s}에 대해 알 수 없는 service-action " "{arg!s}입니다." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chroot의 rc-update {arg!s} 호출이 오류 코드 {num!s}를 반환 했습니다." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "runlevel 대상이 존재하지 않습니다." -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "runlevel {level!s}의 경로는 존재하지 않는 {path!s}입니다." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "대상 서비스가 존재하지 않습니다." -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "{name!s} 서비스에 대한 경로는 {path!s}이고, 존재하지 않습니다." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "플리머스 테마 구성" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "패키지를 설치합니다." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "패키지 처리중 (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)d개의 패키지들을 설치하는 중입니다." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)d개의 패키지들을 제거하는 중입니다." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "패키지 관리자 오류" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "패키지 관리자가 업데이트를 준비할 수 없습니다.
{!s}
명령에서 {!s} 오류 코드를 반환했습니다." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "패키지 관리자가 시스템을 업데이트할 수 없습니다.
{!s}
명령에서 {!s} 오류 코드를 반환했습니다." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"패키지 관리자가 설치된 시스템을 변경할 수 없습니다.
{!s}
명령에서 {!s} 오류 코드를 반환했습니다." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "부트로더 설치." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "grub을 설치하지 못했습니다. 파티션 없음이 전역 저장소에 정의되었습니다" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "부트로더 설치 오류" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "부트로더를 설치할 수 없습니다.
{!s}
설치 명령에서 {!s} 오류 코드를 반환했습니다." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "하드웨어 클럭 설정 중." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "dracut을 사용하여 initramfs 만들기." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "mkinitfs로 initramfs 생성 중." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "대상에서 dracut을 실행하지 못함" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "대상에서 mkinitfs를 실행하지 못했습니다" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "종료 코드 {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "dracut을 사용하여 initramfs 만들기." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "대상에서 dracut을 실행하지 못함" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "initramfs 구성 중." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt 서비스 구성 중." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab 쓰기." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "
{!s}
구성 없음은
{!s}
을(를) 사용할 수 있도록 제공됩니다." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "더미 파이썬 작업." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "더미 파이썬 단계 {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "로컬 구성 중." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "네트워크 구성 저장 중." diff --git a/lang/python/lo/LC_MESSAGES/python.mo b/lang/python/lo/LC_MESSAGES/python.mo deleted file mode 100644 index 0236d8e18..000000000 Binary files a/lang/python/lo/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/lo/LC_MESSAGES/python.po b/lang/python/lo/LC_MESSAGES/python.po index 36c6850ca..302e2cd54 100644 --- a/lang/python/lo/LC_MESSAGES/python.po +++ b/lang/python/lo/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/)\n" "MIME-Version: 1.0\n" @@ -17,321 +17,386 @@ msgstr "" "Language: lo\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/lt/LC_MESSAGES/python.mo b/lang/python/lt/LC_MESSAGES/python.mo deleted file mode 100644 index 18a59e00b..000000000 Binary files a/lang/python/lt/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/lt/LC_MESSAGES/python.po b/lang/python/lt/LC_MESSAGES/python.po index 13d3cac3e..e7d540cc7 100644 --- a/lang/python/lt/LC_MESSAGES/python.po +++ b/lang/python/lt/LC_MESSAGES/python.po @@ -5,16 +5,16 @@ # # Translators: # Mindaugas , 2019 -# Moo, 2020 +# Moo, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Moo, 2020\n" +"Last-Translator: Moo, 2022\n" "Language-Team: Lithuanian (https://www.transifex.com/calamares/teams/20061/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,67 +22,88 @@ msgstr "" "Language: lt\n" "Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigūruoti GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Prijungiami skaidiniai." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Vidinė klaida prijungiant zfs duomenų rinkinius" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Nepavyko importuoti zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Nepavyko atrakinti zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Nepavyko nustatyti zfs prijungimo taško" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigūracijos klaida" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Nėra apibrėžta jokių skaidinių, skirtų
{!s}
naudojimui." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs prijungimo klaida" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigūruoti systemd tarnybas" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Nepavyksta modifikuoti tarnybos" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} iškvieta, esanti chroot, grąžino klaidos kodą" " {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Nepavyksta įjungti systemd tarnybos {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Nepavyksta įjungti systemd paskirties {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Nepavyksta įjungti systemd laikmačio {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Nepavyksta išjungti systemd paskirties {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Nepavyksta maskuoti systemd įtaiso {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -90,162 +111,157 @@ msgstr "" "Nežinomos systemd komandos {command!s} ir " "{suffix!s} įtaisui {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Atjungti failų sistemas." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Užpildomos failų sistemos." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync patyrė nesėkmę su klaidos kodu {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Išpakuojamas atvaizdis {}/{}, failas {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Pradedama išpakuoti {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Nepavyko išpakuoti atvaizdį „{}“" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nėra prijungimo taško šaknies skaidiniui" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage viduje nėra „rootMountPoint“ rakto, nieko nedaroma" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage viduje nėra „rootMountPoint“ rakto." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Blogas šaknies skaidinio prijungimo taškas" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint yra „{}“, kurio nėra, nieko nedaroma" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "„rootMountPoint“ yra „{}“, kurio savo ruožtu tiesiog nėra." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Bloga unsquash konfigūracija" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Bloga unpackfs konfigūracija" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Nėra jokios informacijos apie konfigūraciją." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "Jūsų branduolys nepalaiko failų sistemos, kuri skirta \"{}\" ({})" +msgstr "Jūsų branduolys nepalaiko failų sistemos, kuri skirta „{}“ ({})" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Šaltinio failų sistemos „{}“ nėra" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" "Nepavyko rasti unsquashfs, įsitikinkite, kad esate įdiegę squashfs-tools " -"paketą" +"paketą." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Paskirties vieta „{}“, esanti paskirties sistemoje, nėra katalogas" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nepavyksta įrašyti KDM konfigūracijos failą" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigūracijos failo {!s} nėra" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nepavyksta įrašyti LXDM konfigūracijos failą" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigūracijos failo {!s} nėra" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nepavyksta įrašyti LightDM konfigūracijos failą" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigūracijos failo {!s} nėra" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nepavyksta konfigūruoti LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Neįdiegtas joks LightDM pasisveikinimas." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nepavyksta įrašyti SLIM konfigūracijos failą" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigūracijos failo {!s} nėra" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanagers moduliui nėra pasirinkta jokių ekranų tvarkytuvių." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Displaymanagers sąrašas yra tuščias arba neapibrėžtas tiek " -"bothglobalstorage, tiek ir displaymanager.conf faile." +"Displaymanagers sąrašas yra tuščias arba neapibrėžtas tiek globalstorage, " +"tiek ir displaymanager.conf faile." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Ekranų tvarkytuvės konfigūracija yra nepilna" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigūruojama mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nėra nurodyta jokių šaknies prijungimo taškų, skirtų
{!s}
" "naudojimui." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfigūruojamas šifruotas sukeitimų skaidinys." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Įdiegiami duomenys." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigūruoti OpenRC tarnybas" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Nepavyksta pridėti tarnybą {name!s} į vykdymo lygmenį {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Nepavyksta pašalinti tarnybą {name!s} iš vykdymo lygmens {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -253,18 +269,18 @@ msgstr "" "Nežinomas tarnybos veiksmas {arg!s}, skirtas tarnybai {name!s} " "vykdymo lygmenyje {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} iškvieta, esanti chroot, grąžino klaidos kodą" " {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Paskirties vykdymo lygmens nėra" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -272,32 +288,32 @@ msgstr "" "Vykdymo lygmens {level!s} kelias yra {path!s}, kurio savo " "ruožtu nėra." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Paskirties tarnybos nėra" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Tarnybos {name!s} kelias yra {path!s}, kurio savo ruožtu nėra." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfigūruoti Plymouth temą" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Įdiegti paketus." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Apdorojami paketai (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -306,7 +322,7 @@ msgstr[1] "Įdiegiami %(num)d paketai." msgstr[2] "Įdiegiama %(num)d paketų." msgstr[3] "Įdiegiama %(num)d paketų." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -315,51 +331,112 @@ msgstr[1] "Šalinami %(num)d paketai." msgstr[2] "Šalinama %(num)d paketų." msgstr[3] "Šalinama %(num)d paketų." -#: src/modules/bootloader/main.py:51 -msgid "Install bootloader." -msgstr "Įdiegti paleidyklę." +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Paketų tvarkytuvės klaida" -#: src/modules/hwclock/main.py:35 +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Paketų tvarkytuvei nepavyko paruošti atnaujinimų. Komanda
{!s}
" +"grąžino klaidos kodą {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Paketų tvarkytuvei nepavyko atnaujinti sistemos. Komanda
{!s}
" +"grąžino klaidos kodą {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Paketų tvarkytuvei nepavyko atlikti pakeitimų įdiegtoje sistemoje. Komanda " +"
{!s}
grąžino klaidos kodą {!s}." + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Įdiegti operacinės sistemos paleidyklę." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Nepavyko įdiegti grub paleidyklės, visuotinėje saugykloje nėra apibrėžta " +"jokių skaidinių" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Operacinės sistemos paleidyklės diegimo klaida" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Nepavyko įdiegti operacinės sistemos paleidyklės. Diegimo komanda " +"
{!s}
grąžino klaidos kodą {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Nustatomas aparatinės įrangos laikrodis." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Sukuriama initramfs naudojant dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Kuriama initramfs naudojant mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Nepavyko paskirties vietoje paleisti dracut" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Nepavyko paskirties vietoje paleisti mkinitfs" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Išėjimo kodas buvo {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Sukuriama initramfs naudojant dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Nepavyko paskirties vietoje paleisti dracut" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfigūruojama initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigūruojama OpenRC dmcrypt tarnyba." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Rašoma fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Nenurodyta jokia
{!s}
konfigūracija, kurią
{!s}
galėtų" +" naudoti." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Fiktyvi python užduotis." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Fiktyvus python žingsnis {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfigūruojamos lokalės." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Įrašoma tinklo konfigūracija." diff --git a/lang/python/lv/LC_MESSAGES/python.po b/lang/python/lv/LC_MESSAGES/python.po new file mode 100644 index 000000000..81500cb95 --- /dev/null +++ b/lang/python/lv/LC_MESSAGES/python.po @@ -0,0 +1,406 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Latvian (https://www.transifex.com/calamares/teams/20061/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/mk/LC_MESSAGES/python.mo b/lang/python/mk/LC_MESSAGES/python.mo deleted file mode 100644 index 1680c8dc1..000000000 Binary files a/lang/python/mk/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/mk/LC_MESSAGES/python.po b/lang/python/mk/LC_MESSAGES/python.po index 2713a7dda..deff3793f 100644 --- a/lang/python/mk/LC_MESSAGES/python.po +++ b/lang/python/mk/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Martin Ristovski , 2018\n" "Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n" @@ -21,323 +21,388 @@ msgstr "" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM конфигурациониот фајл не може да се создаде" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM конфигурациониот фајл {!s} не постои" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM конфигурациониот фајл не може да се создаде" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM конфигурациониот фајл {!s} не постои" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM конфигурациониот фајл не може да се создаде" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM конфигурациониот фајл {!s} не постои" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Не може да се подеси LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Нема инсталирано LightDM поздравувач" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM конфигурациониот фајл не може да се создаде" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM конфигурациониот фајл {!s} не постои" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Немате избрано дисплеј менаџер за displaymanager модулот." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/ml/LC_MESSAGES/python.mo b/lang/python/ml/LC_MESSAGES/python.mo deleted file mode 100644 index 60415346e..000000000 Binary files a/lang/python/ml/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ml/LC_MESSAGES/python.po b/lang/python/ml/LC_MESSAGES/python.po index f7f9babe6..d786f8104 100644 --- a/lang/python/ml/LC_MESSAGES/python.po +++ b/lang/python/ml/LC_MESSAGES/python.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Balasankar C , 2019\n" "Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/)\n" @@ -22,323 +22,388 @@ msgstr "" "Language: ml\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "ക്രമീകരണത്തിൽ പിഴവ്" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "ബൂട്ട്‌ലോടർ ഇൻസ്റ്റാൾ ചെയ്യൂ ." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/mr/LC_MESSAGES/python.mo b/lang/python/mr/LC_MESSAGES/python.mo deleted file mode 100644 index 99e564ec4..000000000 Binary files a/lang/python/mr/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/mr/LC_MESSAGES/python.po b/lang/python/mr/LC_MESSAGES/python.po index 39ca7fc61..8c67b60d3 100644 --- a/lang/python/mr/LC_MESSAGES/python.po +++ b/lang/python/mr/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/nb/LC_MESSAGES/python.mo b/lang/python/nb/LC_MESSAGES/python.mo deleted file mode 100644 index c5d4d2fb1..000000000 Binary files a/lang/python/nb/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/nb/LC_MESSAGES/python.po b/lang/python/nb/LC_MESSAGES/python.po index afd7f06d4..c3eb39308 100644 --- a/lang/python/nb/LC_MESSAGES/python.po +++ b/lang/python/nb/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Tyler Moss , 2017 +# 865ac004d9acf2568b2e4b389e0007c7_fba755c <3516cc82d94f87187da1e036e5f09e42_616112>, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Tyler Moss , 2017\n" +"Last-Translator: 865ac004d9acf2568b2e4b389e0007c7_fba755c <3516cc82d94f87187da1e036e5f09e42_616112>, 2017\n" "Language-Team: Norwegian Bokmål (https://www.transifex.com/calamares/teams/20061/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,323 +21,388 @@ msgstr "" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installer pakker." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/ne_NP/LC_MESSAGES/python.mo b/lang/python/ne_NP/LC_MESSAGES/python.mo deleted file mode 100644 index 1d91bbddd..000000000 Binary files a/lang/python/ne_NP/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ne_NP/LC_MESSAGES/python.po b/lang/python/ne_NP/LC_MESSAGES/python.po index d04bcc3ff..e30f07ad5 100644 --- a/lang/python/ne_NP/LC_MESSAGES/python.po +++ b/lang/python/ne_NP/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: ne_NP\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/nl/LC_MESSAGES/python.mo b/lang/python/nl/LC_MESSAGES/python.mo deleted file mode 100644 index 2c89bbca4..000000000 Binary files a/lang/python/nl/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/nl/LC_MESSAGES/python.po b/lang/python/nl/LC_MESSAGES/python.po index 6116b01e7..58c874dbf 100644 --- a/lang/python/nl/LC_MESSAGES/python.po +++ b/lang/python/nl/LC_MESSAGES/python.po @@ -4,6 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: +# Tristan , 2020 # Adriaan de Groot , 2020 # #, fuzzy @@ -11,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Adriaan de Groot , 2020\n" "Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/)\n" @@ -21,325 +22,404 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB instellen." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "Partities mounten." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" -msgstr "" +msgstr "Configuratiefout" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "Geen partities gedefinieerd voor
{!s}
om te gebruiken." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "" +msgstr "Configureer systemd services " -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "" +msgstr "De service kan niet worden gewijzigd" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"systemctl {arg!s} aanroeping in chroot resulteerde in foutcode " +"{num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" +"De systemd service {name!s} kon niet worden ingeschakeld." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." +msgstr "Het systemd doel {name!s} kon niet worden ingeschakeld." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "De systemd service {name!s} kon niet worden uitgeschakeld." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "De systemd unit {name!s} kon niet worden gemaskerd." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"Onbekende systemd opdrachten {command!s} en " +"{suffix!s} voor unit {name!s}. " -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Bestandssystemen opvullen." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "" +msgstr "rsync mislukte met foutcode {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Bestandssysteem uitpakken {}/{}, bestand {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Beginnen met uitpakken van {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Uitpakken van bestandssysteem \"{}\" mislukt" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Geen mount-punt voor de root-partitie" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage bevat geen sleutel \"rootMountPoint\", er wordt niks gedaan" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Onjuist mount-punt voor de root-partitie" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" -"rootMountPoint is ingesteld op \"{}\", welke niet bestaat, er wordt niks " -"gedaan" - -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"Het bestandssysteem voor \"{}\" ({}) wordt niet ondersteund door je huidige " +"kernel" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "Het bronbestandssysteem \"{}\" bestaat niet" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "De bestemming \"{}\" in het doelsysteem is niet een map" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "Schrijven naar het KDM-configuratiebestand is mislukt " -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" -msgstr "" +msgstr "KDM-configuratiebestand {!s} bestaat niet." -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" -msgstr "" +msgstr "Schrijven naar het LXDM-configuratiebestand is mislukt" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" -msgstr "" +msgstr "Het KDM-configuratiebestand {!s} bestaat niet" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" -msgstr "" +msgstr "Schrijven naar het LightDM-configuratiebestand is mislukt" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" -msgstr "" +msgstr "Het LightDM-configuratiebestand {!s} bestaat niet" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "" +msgstr "Kon LightDM niet configureren" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "" +msgstr "Geen LightDM begroeter geïnstalleerd" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" -msgstr "" +msgstr "Schrijven naar het SLIM-configuratiebestand is mislukt" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" -msgstr "" +msgstr "Het SLIM-configuratiebestand {!s} bestaat niet" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." -msgstr "" +msgstr "Geen display managers geselecteerd voor de displaymanager module." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"De lijst van display-managers is leeg, zowel in de configuratie " +"displaymanager.conf als de globale opslag." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "Display manager configuratie was incompleet" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "Instellen van mkinitcpio" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" +"Geen hoofd mount punt is gegeven voor
{!s}
om te gebruiken. " -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "" +msgstr "Data aan het installeren." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "Configureer OpenRC services" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "Kon service {name!s} niet toegoeven aan runlevel {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" +msgstr "Kon service {name!s} niet verwijderen van runlevel {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"Onbekende serviceactie {arg!s} voor service {name!s} in " +"runlevel {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"rc-update {arg!s} aanroeping in chroot resulteerde in foutcode " +"{num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "Doel runlevel bestaat niet" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" +"Het pad voor runlevel {level!s} is {path!s}, welke niet bestaat" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "" +msgstr "Doelservice bestaat niet" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" +"Het pad voor service {level!s} is {path!s}, welke niet bestaat" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "" +msgstr "Plymouth thema instellen" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Pakketten installeren." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakketten verwerken (%(count)d/ %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Pakket installeren." -msgstr[1] "%(num)dpakketten installeren." +msgstr[1] "%(num)d pakketten installeren." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Pakket verwijderen." -msgstr[1] "%(num)dpakketten verwijderen." +msgstr[1] "%(num)d pakketten verwijderen." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." +msgstr "Installeer bootloader" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "" +msgstr "Instellen van hardwareklok" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Een initramfs wordt aangemaakt met mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Uitvoeren van mkinitfs in het doelsysteem is mislukt" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "" +msgstr "De afsluitcode was {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "initramfs aanmaken met dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Uitvoeren van dracut op het doel is mislukt" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "Instellen van initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Configureren van OpenRC dmcrypt service." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "fstab schrijven." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Voorbeeld Python-taak" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Voorbeeld Python-stap {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Taal en locatie instellen." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Netwerk-configuratie opslaan." diff --git a/lang/python/oc/LC_MESSAGES/python.po b/lang/python/oc/LC_MESSAGES/python.po new file mode 100644 index 000000000..d5e4eab06 --- /dev/null +++ b/lang/python/oc/LC_MESSAGES/python.po @@ -0,0 +1,408 @@ +# 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 , YEAR. +# +# Translators: +# Quentin PAGÈS, 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Quentin PAGÈS, 2022\n" +"Language-Team: Occitan (post 1500) (https://www.transifex.com/calamares/teams/20061/oc/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: oc\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Error de configuracion" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/pl/LC_MESSAGES/python.mo b/lang/python/pl/LC_MESSAGES/python.mo deleted file mode 100644 index 7bafa3c5f..000000000 Binary files a/lang/python/pl/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/pl/LC_MESSAGES/python.po b/lang/python/pl/LC_MESSAGES/python.po index d16c43f62..3cc4ee0a8 100644 --- a/lang/python/pl/LC_MESSAGES/python.po +++ b/lang/python/pl/LC_MESSAGES/python.po @@ -4,18 +4,19 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Marcin Mikołajczak , 2017 +# marcin mikołajczak , 2017 # KagiSame, 2018 # Piotr Strębski , 2020 +# Jacob B. , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Piotr Strębski , 2020\n" +"Last-Translator: Jacob B. , 2021\n" "Language-Team: Polish (https://www.transifex.com/calamares/teams/20061/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,273 +24,296 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfiguracja GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montowanie partycji." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Błąd konfiguracji" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "Nie ma zdefiniowanych partycji dla
{!s}
do użytku." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguracja usług systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Nie można zmodyfikować usług" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"Wezwanie systemctl {arg!s} w chroot zwróciło kod błędu {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "Nie można włączyć usługi systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." +msgstr "Nie można włączyć celu w systemd {name!s}." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "Nie można wyłączyć celu w systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "Nie można zamaskować jednostki systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"Nieznana komenda systemd {command!s} oraz " +"{suffix!s} dla jednostki {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Odmontuj systemy plików." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Zapełnianie systemu plików." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync zakończyło działanie kodem błędu {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Odpakowywanie obrazu {}/{}, pliku {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Rozpoczynanie odpakowywania {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Błąd rozpakowywania obrazu \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Brak punktu montowania partycji root" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -"globalstorage nie zawiera klucza \"rootMountPoint\", nic nie zostanie " -"zrobione" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Błędny punkt montowania partycji root" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -"Punkt montowania partycji root (rootMountPoint) jest \"{}\", które nie " -"istnieje; nic nie zostanie zrobione" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Błędna konfiguracja unsquash" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"System plików dla \"{}\" ({}) nie jest wspierany przez obecne jądro twojego " +"systemu" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Źródłowy system plików \"{}\" nie istnieje" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Nie można odnaleźć unsquashfs, upewnij się, że masz zainstalowany pakiet " -"squashfs-tools" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Miejsce docelowe \"{}\" w docelowym systemie nie jest katalogiem" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nie można zapisać pliku konfiguracji KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Plik konfiguracyjny KDM {!s} nie istnieje" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Plik konfiguracji LXDM {!s} nie istnieje" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Plik konfiguracji LightDM {!s} nie istnieje" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nie można skonfigurować LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nie zainstalowano ekranu powitalnego LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nie można zapisać pliku konfiguracji SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Plik konfiguracji SLIM {!s} nie istnieje" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Brak wybranych menedżerów wyświetlania dla modułu displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Lista menedżerów wyświetlania jest pusta lub niezdefiniowana w " -"bothglobalstorage i displaymanager.conf" +"Lista displaymanagers jest pusta lub niezdefiniowana w globalstorage oraz " +"displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Konfiguracja menedżera wyświetlania była niekompletna" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurowanie mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" +"Nie znaleziono głównego punktu montowania dla
{!s}
do użycia." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfigurowanie zaszyfrowanej przestrzeni wymiany." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalowanie danych." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfiguracja usług OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" +"Nie udało się dodać usługi {name!s} do poziomu-uruchamiania {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" +"Nie udało się usunąć usługi {name!s} do poziomu-uruchamiania {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"Nieznana akcja-usługi {arg!s} dla usługi {name!s} w poziomie-" +"uruchamiania {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"rc-update {arg!s} wezwanie w chroot zwróciło kod błędu {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "Docelowy poziom odtwarzania nie istnieje" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" +"Ścieżka do poziomu odtwarzania {level!s} to {path!s}, nie " +"istnieje." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Docelowa usługa nie istnieje" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." -msgstr "" +msgstr "Ścieżka do usługi {name!s} to {path!s}, nie istnieje." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfiguracja motywu Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Zainstaluj pakiety." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Przetwarzanie pakietów (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -298,7 +322,7 @@ msgstr[1] "Instalowanie %(num)d pakietów." msgstr[2] "Instalowanie %(num)d pakietów." msgstr[3] "Instalowanie%(num)d pakietów." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -307,51 +331,100 @@ msgstr[1] "Usuwanie %(num)d pakietów." msgstr[2] "Usuwanie %(num)d pakietów." msgstr[3] "Usuwanie %(num)d pakietów." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalacja programu rozruchowego." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ustawianie zegara systemowego." -#: src/modules/dracut/main.py:36 +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Tworzenie initramfs z mkinitfs." + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Nie udało się włączyć mkinitfs." + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Kod wyjściowy to {}" + +#: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Tworzenie initramfs z dracut." -#: src/modules/dracut/main.py:58 +#: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" -msgstr "" +msgstr "Nie udało się włączyć dracut." -#: src/modules/dracut/main.py:59 -msgid "The exit code was {}" -msgstr "" - -#: src/modules/initramfscfg/main.py:41 +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfigurowanie initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Konfigurowanie usługi OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisywanie fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Zadanie fikcyjne Python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Krok fikcyjny Python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfigurowanie ustawień lokalnych." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Zapisywanie konfiguracji sieci." diff --git a/lang/python/pt_BR/LC_MESSAGES/python.mo b/lang/python/pt_BR/LC_MESSAGES/python.mo deleted file mode 100644 index 5f17c2ec1..000000000 Binary files a/lang/python/pt_BR/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/pt_BR/LC_MESSAGES/python.po b/lang/python/pt_BR/LC_MESSAGES/python.po index 7e2e8585c..6f255d14c 100644 --- a/lang/python/pt_BR/LC_MESSAGES/python.po +++ b/lang/python/pt_BR/LC_MESSAGES/python.po @@ -4,17 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Guilherme, 2019 # André Marcelo Alvarenga , 2020 +# Guilherme Marçal Silva, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: André Marcelo Alvarenga , 2020\n" +"Last-Translator: Guilherme Marçal Silva, 2022\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,67 +22,88 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Montando partições." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Erro interno ao montar datasets zfs" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Falha ao importar zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Falha ao desbloquear zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Falha ao definir o ponto de montagem zfs" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erro de Configuração." -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Sem partições definidas para uso por
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "erro de montagem zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar serviços do systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Não é possível modificar o serviço" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "A chamada systemctl {arg!s} no chroot retornou o código de erro" " {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Não é possível habilitar o serviço {name!s} do systemd." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Não é possível habilitar o alvo {name!s} do systemd." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Não foi possível ativar o cronômetro systemd {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Não é possível desabilitar o alvo {name!s} do systemd." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Não é possível mascarar a unidade {name!s} do systemd." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -90,164 +111,159 @@ msgstr "" "Comandos desconhecidos do systemd {command!s} e " "{suffix!s} para a unidade {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmontar os sistemas de arquivos." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Preenchendo sistemas de arquivos." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "O rsync falhou com o código de erro {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Descompactando imagem {}/{}, arquivo {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Começando a descompactar {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Ocorreu uma falha ao descompactar a imagem \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "O globalstorage não contém uma chave \"rootMountPoint\". Nada foi feito." +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage não contém uma chave \"rootMountPoint\"." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ponto de montagem incorreto para a partição root" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "O rootMountPoint é \"{}\", mas ele não existe. Nada foi feito." +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint é \"{}\", que não existe." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Configuração incorreta do unsquash" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Configuração incorreta do unpackfs" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Não há informação de configuração." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Não há suporte para o sistema de arquivos \"{}\" ({}) no seu kernel atual" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de arquivos de origem \"{}\" não existe" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Ocorreu uma falha ao localizar o unsquashfs, certifique-se de que o pacote " -"squashfs-tools esteja instalado" +"Não foi possível encontrar o unsquashfs, certifique-se de que o pacote " +"squashfs-tools foi instalado." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "A destinação \"{}\" no sistema de destino não é um diretório" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do KDM não existe" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do LXDM não existe" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do LightDM não existe" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Não há nenhuma tela de login do LightDM instalada." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Não foi possível gravar o arquivo de configuração do SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "O arquivo de configuração {!s} do SLIM não existe" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Nenhum gerenciador de exibição selecionado para o módulo do displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"A lista de displaymanagers está vazia ou indefinida no bothglobalstorage e " -"no displaymanager.conf." +"A lista de displaymanagers está vazia ou indefinida em ambos globalstorage e" +" displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "A configuração do gerenciador de exibição está incompleta" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Nenhum ponto de montagem para o root fornecido para uso por
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Configurando swap encriptada." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando os dados." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurar serviços do OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "Não é possível adicionar serviço {name!s} ao nível de execução {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Não é possível remover serviço {name!s} do nível de execução {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -255,110 +271,169 @@ msgstr "" "Serviço de ação {arg!s} desconhecido para o serviço {name!s} no" " nível de execução {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Chamada rc-update {arg!s} no chroot retornou o código de erro " "{num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "O nível de execução de destino não existe" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -"O caminho para o nível de execução {level!s} é {path!s}, o qual" -" não existe." +"O caminho para o nível de execução {level!s} é {path!s}, que " +"não existe." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "O serviço de destino não existe" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -"O caminho para o serviço {name!s} é {path!s}, o qual não " -"existe." +"O caminho para o serviço {name!s} é {path!s}, que não existe." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar pacotes." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processando pacotes (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalando um pacote." msgstr[1] "Instalando %(num)d pacotes." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removendo um pacote." msgstr[1] "Removendo %(num)d pacotes." -#: src/modules/bootloader/main.py:51 -msgid "Install bootloader." -msgstr "Instalar bootloader." +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Erro do Gerenciador de Pacotes" -#: src/modules/hwclock/main.py:35 +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"O gerenciador de pacotes não pôde preparar as atualizações. O comando " +"
{!s}
retornou o código de erro {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"O gerenciador de pacotes não pôde atualizar o sistema. O comando " +"
{!s}
retornou o código de erro {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"O gerenciador de pacotes não pôde fazer mudanças no sistema instalado. O " +"comando
{!s}
retornou o código de erro {!s}." + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Instalar carregador de inicialização." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Falha ao instalar o grub, não há partições definidas no armazenamento global" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Erro de instalação do carregador de inicialização" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"O carregador de inicialização não pôde ser instalado. O comando de " +"instalação
{!s}
retornou o código de erro {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Configurando relógio de hardware." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Criando initramfs com dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Criando initramfs com mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Erro ao executar dracut no alvo" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Falha ao executar mkinitfs no alvo" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "O código de saída foi {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Criando initramfs com dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Erro ao executar dracut no alvo" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configurando initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando serviço dmcrypt do OpenRC." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Escrevendo fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Nenhuma configuração
{!s}
é dada para que
{!s}
possa " +"utilizar." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarefa modelo python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Etapa modelo python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Configurando locais." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Salvando configuração de rede." diff --git a/lang/python/pt_PT/LC_MESSAGES/python.mo b/lang/python/pt_PT/LC_MESSAGES/python.mo deleted file mode 100644 index d1878e5c2..000000000 Binary files a/lang/python/pt_PT/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/pt_PT/LC_MESSAGES/python.po b/lang/python/pt_PT/LC_MESSAGES/python.po index e954d008e..d8ea3bbb8 100644 --- a/lang/python/pt_PT/LC_MESSAGES/python.po +++ b/lang/python/pt_PT/LC_MESSAGES/python.po @@ -5,17 +5,17 @@ # # Translators: # Nuno Amorim , 2018 -# Ricardo Simões , 2019 -# Hugo Carvalho , 2019 +# Ricardo Simões , 2020 +# Hugo Carvalho , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Hugo Carvalho , 2019\n" +"Last-Translator: Hugo Carvalho , 2022\n" "Language-Team: Portuguese (Portugal) (https://www.transifex.com/calamares/teams/20061/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,67 +23,88 @@ msgstr "" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar o GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "A montar partições." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Erro interno ao montar os conjuntos de dados zfs" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Falha ao importar zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Falha ao desbloquear zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Falha ao definir o ponto de montagem zfs" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Erro de configuração" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Nenhuma partição está definida para
{!s}
usar." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "erro de montagem zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar serviços systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Não é possível modificar serviço" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chamar pelo chroot retornou com código de " "erro {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Não é possível ativar o serviço systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Não é possível ativar o destino do systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Não é possível ativar o temporizador systemd {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Não é possível desativar o destino do systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Não é possível mascarar a unidade do systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -91,163 +112,160 @@ msgstr "" "Comandos do systemd desconhecidos {command!s} e " "{suffix!s} por unidade {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Desmontar sistemas de ficheiros." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "A preencher os sistemas de ficheiros." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync falhou com código de erro {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "A descompactar imagem {}/{}, ficheiro {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "A começar a descompactação {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Falha ao descompactar imagem \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage não contém um \"rootMountPoint\" chave, nada a fazer" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "o armazenamento global não contém uma chave \"rootMountPoint\"." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Ponto de montagem mau para partição root" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint é \"{}\", que não existe, nada a fazer" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint é \"{}\", que não existe." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Má configuração unsquash" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Má configuração do unpackfs" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Não há informação de configuração." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"O sistema de ficheiros para \"{}\" ({}) não é suportado pelo seu kernel " +"atual" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de ficheiros fonte \"{}\" não existe" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"Falha ao procurar unsquashfs, certifique-se que tem o pacote squashfs-tools " -"instalado" +"Falha ao localizar o unsquashfs, certifique-se de que tem o pacote squashfs-" +"tools instalado." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "O destino \"{}\" no sistema de destino não é um diretório" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuração do KDM {!s} não existe" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuração do LXDM {!s} não existe" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuração do LightDM {!s} não existe" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nenhum ecrã de boas-vindas LightDM instalado." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Não é possível gravar o ficheiro de configuração SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuração do SLIM {!s} não existe" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" "Nenhum gestor de exibição selecionado para o módulo de gestor de exibição." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"A lista de gestores de exibição está vazia ou indefinida no globalstorage e " -"no displaymanager.conf." +"A lista de gestores de visualização está vazia ou indefinida tanto no " +"globalstorage como no displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "A configuração do gestor de exibição estava incompleta" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "A configurar o mkintcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nenhum ponto de montagem root é fornecido para
{!s}
usar." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Configurando a swap criptografada." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "A instalar dados." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurar serviços OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" "Não é possível adicionar o serviço {name!s} ao nível de execução {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" "Não é possível remover o serviço {name!s} do nível de execução {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -255,18 +273,18 @@ msgstr "" "Serviço de ação desconhecido {arg!s} para serviço {name!s} em " "nível de execução {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "rc-update {arg!s} chamar pelo chroot retornou com código de " "erro {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "O nível de execução do destino não existe" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -274,90 +292,150 @@ msgstr "" "O caminho para o nível de execução {level!s} é {path!s}, que " "não existe." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "O serviço do destino não existe" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "O caminho para o serviço {name!s} é {path!s}, que não existe." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalar pacotes." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A processar pacotes (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "A instalar um pacote." msgstr[1] "A instalar %(num)d pacotes." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "A remover um pacote." msgstr[1] "A remover %(num)d pacotes." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Erro do gestor de pacotes" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"O gestor de pacotes não conseguiu preparar atualizações. O comando " +"
{!s}
apresentou o código de erro {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"O gestor de pacotes não conseguiu atualizar o sistema. O comando " +"
{!s}
apresentou o código de erro {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"O gestor de pacotes não pôde fazer alterações ao sistema instalado. O " +"comando
{!s}
devolveu o código de erro {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalar o carregador de arranque." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Falha ao instalar o grub, sem partições definidas no armazenamento global" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Erro de instalação do carregador de arranque" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Não foi possível instalar o carregador de arranque. O comando de instalação " +"
{!s}
apresentou o código de erro {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "A definir o relógio do hardware." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Criando o initramfs com o dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "A criar o initramfs com o mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Falha ao executar o dracut no destino" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Falha ao executar o mkintfs no destino" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "O código de saída foi {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Criando o initramfs com o dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Falha ao executar o dracut no destino" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "A configurar o initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "A configurar o serviço OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "A escrever o fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Não é dada nenhuma configuração
{!s}
para
{!s}
" +"utilizar." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarefa Dummy python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Passo Dummy python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "A configurar a localização." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "A guardar a configuração de rede." diff --git a/lang/python/ro/LC_MESSAGES/python.mo b/lang/python/ro/LC_MESSAGES/python.mo deleted file mode 100644 index 3844e22d8..000000000 Binary files a/lang/python/ro/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ro/LC_MESSAGES/python.po b/lang/python/ro/LC_MESSAGES/python.po index 783b9cb07..2df9052d9 100644 --- a/lang/python/ro/LC_MESSAGES/python.po +++ b/lang/python/ro/LC_MESSAGES/python.po @@ -4,17 +4,18 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Baadur Jobava , 2018 +# Jobava Jobava , 2018 # Sebastian Brici , 2018 +# Chele Ion , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Sebastian Brici , 2018\n" +"Last-Translator: Chele Ion , 2021\n" "Language-Team: Romanian (https://www.transifex.com/calamares/teams/20061/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,265 +23,281 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" -msgstr "" +msgstr "Eroare de configurare" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "Nu sunt partiţii definite ca 1{!s}1 ." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Demonteaza sistemul de fisiere" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." -msgstr "" +msgstr "Nu este definită o partiţie rădăcină pentru 1{!s}1 ." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalează pachetele." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Se procesează pachetele (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -288,7 +305,7 @@ msgstr[0] "Instalează un pachet." msgstr[1] "Se instalează %(num)d pachete." msgstr[2] "Se instalează %(num)d din pachete." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -296,51 +313,100 @@ msgstr[0] "Se elimină un pachet." msgstr[1] "Se elimină %(num)d pachet." msgstr[2] "Se elimină %(num)d de pachete." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 -msgid "Configuring initramfs." +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "Configurare initramfs" + +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Job python fictiv." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python step {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/ru/LC_MESSAGES/python.mo b/lang/python/ru/LC_MESSAGES/python.mo deleted file mode 100644 index d492218d4..000000000 Binary files a/lang/python/ru/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ru/LC_MESSAGES/python.po b/lang/python/ru/LC_MESSAGES/python.po index 086955527..1cbe0c995 100644 --- a/lang/python/ru/LC_MESSAGES/python.po +++ b/lang/python/ru/LC_MESSAGES/python.po @@ -5,15 +5,16 @@ # # Translators: # Aleksey Kabanov , 2018 +# ZIzA, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Aleksey Kabanov , 2018\n" +"Last-Translator: ZIzA, 2020\n" "Language-Team: Russian (https://www.transifex.com/calamares/teams/20061/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,327 +22,393 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "" +msgstr "Настройте GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." +msgstr "Монтирование разделов." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" -msgstr "" +msgstr "Ошибка конфигурации" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." +msgstr "Не определены разделы для использования
{!S}
." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "" +msgstr "Настройка systemd сервисов" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "" +msgstr "Не могу изменить сервис" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"Вызов systemctl {arg!s} в chroot вернул код ошибки {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "" +msgstr "Наполнение файловой системы." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "" +msgstr "Установка данных." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "" +msgstr "Настройка служб OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "" +msgstr "Целевой сервис не существует." -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "" +msgstr "Настроить тему Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." -msgstr "" +msgstr "Установить пакеты." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработка пакетов (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Установка одного пакета." +msgstr[1] "Установка %(num)d пакетов." +msgstr[2] "Установка %(num)d пакетов." +msgstr[3] "Установка %(num)d пакетов." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Удаление одного пакета." +msgstr[1] "Удаление %(num)d пакетов." +msgstr[2] "Удаление %(num)d пакетов." +msgstr[3] "Удаление %(num)d пакетов." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." +msgstr "Установить загрузчик." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." +msgstr "Установка аппаратных часов." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" - -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "" +msgstr "Код выхода {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Создание initramfs с помощью dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Не удалось запустить dracut на цели" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "" +msgstr "Настройка initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "Настройка службы OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." +msgstr "Запись fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "" +msgstr "Настройка языка." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "" +msgstr "Сохранение настроек сети." diff --git a/lang/python/si/LC_MESSAGES/python.po b/lang/python/si/LC_MESSAGES/python.po new file mode 100644 index 000000000..3582bcc8e --- /dev/null +++ b/lang/python/si/LC_MESSAGES/python.po @@ -0,0 +1,429 @@ +# 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 , YEAR. +# +# Translators: +# හෙළබස, 2021 +# Sandaruwan Samaraweera, 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Sandaruwan Samaraweera, 2022\n" +"Language-Team: Sinhala (https://www.transifex.com/calamares/teams/20061/si/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: si\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "GRUB වින්‍යාස කරන්න." + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "කොටස් සවි කිරීම." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "zfs දත්ත කට්ටල සවිකිරීමේ අභ්‍යන්තර දෝෂයකි" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "zpool ආයාත කිරීමට අසමත් විය" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "zpool අගුලු හැරීමට අසමත් විය" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "zfs සවිකිරීමේ ලක්ෂ්‍යය සැකසීමට අසමත් විය" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "වින්‍යාස දෝෂය" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "{!s} සඳහා භාවිතා කිරීමට කිසිදු කොටස් නිර්වචනය කර නොමැත." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs සවිකිරීමේ දෝෂයකි" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "systemd සේවා වින්‍යාස කරන්න" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "සේවාව වෙනස් කළ නොහැක" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"systemctl {arg!s} chroot වෙත ඇමතුමක් ලබා දුන් දෝෂ කේතය {num!s}." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "systemd සේවාව {name!s} සබල කළ නොහැක." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "systemd ඉලක්කය {name!s} සබල කළ නොහැක." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "systemd ටයිමරය {name!s} සබල කළ නොහැක." + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "systemd ඉලක්කය {name!s} අක්‍රිය කළ නොහැක." + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "systemd ඒකකය {name!s} වසන් කළ නොහැක." + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" +"{name!s} ඒකකය සඳහා නොදන්නා systemd විධාන {command!s} සහ " +"{suffix!s}." + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "ගොනු පද්ධති පිරවීම." + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "දෝෂ කේතය {} සමඟ rsync අසාර්ථක විය." + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "රූපය {}/{}, ගොනුව {}/{} අසුරමින්" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "ඉවත් කිරීමට පටන් ගනියි {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "\"{}\" රූපය ඉවත් කිරීමට අසමත් විය" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "root කොටස සඳහා සවි කිරීමේ ලක්ෂ්‍යයක් නොමැත" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "ගෝලීය ගබඩාවේ \"rootMountPoint\" යතුරක් අඩංගු නොවේ." + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "මූල කොටස සඳහා නරක සවි කිරීමේ ලක්ෂ්‍යය" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint යනු \"{}\", එය නොපවතී." + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "වැරදි unpackfs වින්‍යාසය" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "වින්‍යාස තොරතුරු නොමැත." + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "\"{}\" ({}) සඳහා ගොනු පද්ධතිය ඔබගේ වත්මන් කර්නලයෙන් සහය නොදක්වයි" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "මූලාශ්‍ර ගොනු පද්ධතිය \"{}\" නොපවතී" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" +"Unsquashfs සොයා ගැනීමට අපොහොසත් විය, ඔබ squashfs-tools පැකේජය ස්ථාපනය කර ඇති" +" බවට වග බලා ගන්න." + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "ඉලක්ක පද්ධතියේ \"{}\" ගමනාන්තය නාමාවලියක් නොවේ" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "KDM වින්‍යාස ගොනුව ලිවිය නොහැක" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "KDM වින්‍යාස ගොනුව {!s} නොපවතී" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "LXDM වින්‍යාස ගොනුව ලිවිය නොහැක" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "LXDM වින්‍යාස ගොනුව {!s} නොපවතී" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "LightDM වින්‍යාස ගොනුව ලිවිය නොහැක" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "LightDM වින්‍යාස ගොනුව {!s} නොපවතී" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "LightDM වින්‍යාස කළ නොහැක" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "LightDM ග්‍රීටර් ස්ථාපනය කර නැත." + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "SLIM වින්‍යාස ගොනුව ලිවිය නොහැක" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "SLIM වින්‍යාස ගොනුව {!s} නොපවතී" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "සංදර්ශක කළමනාකරු මොඩියුලය සඳහා සංදර්ශක කළමනාකරුවන් තෝරාගෙන නොමැත." + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" +"ගෝලීය ගබඩාව සහ displaymanager.conf යන දෙකෙහිම සංදර්ශක කළමනාකරු ලැයිස්තුව " +"හිස් හෝ අර්ථ දක්වා නොමැත." + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "සංදර්ශක කළමනාකරු වින්‍යාසය අසම්පූර්ණ විය" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "mkinitcpio වින්‍යාස කරමින්." + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "{!s} සඳහා භාවිතා කිරීමට root mount point ලබා දී නොමැත." + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "දත්ත ස්ථාපනය වෙමින්." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "OpenRC සේවා වින්‍යාස කරන්න" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "ධාවන මට්ටම {level!s} වෙත සේවාව {name!s} එක් කළ නොහැක." + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "ධාවන මට්ටමේ {level!s} වෙතින් සේවාව {name!s} ඉවත් කළ නොහැක." + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" +"{name!s} සේවාව සඳහා නොදන්නා සේවා-ක්‍රියාව {arg!s} ධාවන මට්ටමේ " +"{level!s}." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"rc-update {arg!s} chroot හි ඇමතුම {num!s} දෝෂ කේතය ලබා දුන්නේය." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "ඉලක්ක ධාවන මට්ටම නොපවතී" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "ධාවන මට්ටම {level!s} සඳහා මාර්ගය {path!s}, එය නොපවතී." + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "ඉලක්ක සේවාව නොපවතී" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "සේවාව සඳහා {name!s} මාර්ගය {path!s}, එය නොපවතී." + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Plymouth තේමාව වින්‍යාස කරන්න" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "ඇසුරුම් ස්ථාපනය කරන්න." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "පැකේජ සැකසීම (%(count)d / %(total)d)" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "ඇසුරුමක් ස්ථාපනය වෙමින්." +msgstr[1] "ඇසුරුම් %(num)d ක් ස්ථාපනය වෙමින්." + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "ඇසුරුමක් ඉවත් වෙමින්." +msgstr[1] "ඇසුරුම් %(num)d ක් ඉවත් වෙමින්." + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "පැකේජ කළමනාකරු දෝෂයකි" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"පැකේජ කළමනාකරුට යාවත්කාලීන සකස් කිරීමට නොහැකි විය. විධානය
{!s}
" +"දෝෂ කේතය {!s} ලබා දුන්නේය." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"පැකේජ කළමනාකරුට පද්ධතිය යාවත්කාලීන කළ නොහැකි විය. විධානය
{!s}
දෝෂ" +" කේතය {!s} ලබා දුන්නේය." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"පැකේජ කළමනාකරුට ස්ථාපිත පද්ධතියට වෙනස්කම් සිදු කළ නොහැක. විධානය " +"
{!s}
දෝෂ කේතය {!s} ලබා දුන්නේය." + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "bootloader ස්ථාපනය කරන්න." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Grub ස්ථාපනය කිරීමට අපොහොසත් විය, ගෝලීය ආචයනය තුළ කොටස් අර්ථ දක්වා නොමැත" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Bootloader ස්ථාපනය කිරීමේ දෝෂයකි" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"ඇරඹුම් කාරකය ස්ථාපනය කල නොහැක. ස්ථාපන විධානය
{!s}
දෝෂ කේතය {!s} " +"ලබා දුන්නේය." + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "දෘඩාංග ඔරලෝසුව සැකසෙමින්." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "mkinitfs සමඟ initramfs නිර්මාණය කිරීම." + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "ඉලක්කය මත mkinitfs ධාවනය කිරීමට අසමත් විය" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "පිටවීමේ කේතය වූයේ {}" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "dracut සමඟ initramfs නිර්මාණය කිරීම." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "ඉලක්කය මත ඩ්‍රැකට් ධාවනය කිරීමට අපොහොසත් විය" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "initramfs වින්‍යාස කිරීම." + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "OpenRC dmcrypt සේවාව වින්‍යාස කරමින්." + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "fstab ලියමින්." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"භාවිතා කිරීමට
{!s}
සඳහා
{!s}
වින්‍යාසයක් ලබා දී නොමැත." + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "ඩමි python වැඩසටහන." + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "ව්‍යාජ python පියවර {}" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "ස්ථාන වින්‍යාස කිරීම." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "ජාල වින්‍යාසය සුරැකෙමින්." diff --git a/lang/python/sk/LC_MESSAGES/python.mo b/lang/python/sk/LC_MESSAGES/python.mo deleted file mode 100644 index 7dd4856d5..000000000 Binary files a/lang/python/sk/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/sk/LC_MESSAGES/python.po b/lang/python/sk/LC_MESSAGES/python.po index 33e08f586..d65b5d050 100644 --- a/lang/python/sk/LC_MESSAGES/python.po +++ b/lang/python/sk/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Dušan Kazik , 2020\n" "Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/)\n" @@ -21,265 +21,285 @@ msgstr "" "Language: sk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigurácia zavádzača GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Pripájanie oddielov." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Chyba konfigurácie" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Nie sú určené žiadne oddiely na použitie pre
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurácia služieb systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Nedá sa upraviť služba" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"Volanie systemctl {arg!s} in prostredí chroot vrátilo chybový " +"kód {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "Nedá sa povoliť služba systému systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." +msgstr "Nedá sa povoliť cieľ systému systemd {name!s}." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "Nedá sa zakázať cieľ systému systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "Nedá sa zamaskovať jednotka systému systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"Neznáme príkazy systému systemd {command!s} a " +"{suffix!s} pre jednotku {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Odpojenie súborových systémov." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Napĺňanie súborových systémov." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "" +msgstr "Príkaz rsync zlyhal s chybovým kódom {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Rozbaľuje sa obraz {}/{}, súbor {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Spúšťa sa rozbaľovanie {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Zlyhalo rozbalenie obrazu „{}“" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Žiadny bod pripojenia pre koreňový oddiel" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Zlý bod pripojenia pre koreňový oddiel" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "Súborový systém pre \"{}\" ({}) nie je podporovaný vaším aktuálnym jadrom" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "Zdrojový súborový systém \"{}\" neexistuje" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "Cieľ \"{}\" v cieľovom systéme nie je adresárom" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu KDM {!s} neexistuje" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu LXDM {!s} neexistuje" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu LightDM {!s} neexistuje" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Nedá s nakonfigurovať správca LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Nie je nainštalovaný žiadny vítací nástroj LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu SLIM {!s} neexistuje" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Neboli vybraní žiadni správcovia zobrazenia pre modul displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Konfigurácia správcu zobrazenia nebola úplná" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurácia mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "Nie je zadaný žiadny bod pripojenia na použitie pre
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfigurácia zašifrovaného odkladacieho priestoru." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Inštalácia údajov." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurácia služieb OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Cieľová služba neexistuje" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "Cesta k službe {name!s} je {path!s}, ale neexistuje." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfigurácia motívu služby Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Inštalácia balíkov." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Spracovávajú sa balíky (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -288,7 +308,7 @@ msgstr[1] "Inštalujú sa %(num)d balíky." msgstr[2] "Inštaluje sa %(num)d balíkov." msgstr[3] "Inštaluje sa %(num)d balíkov." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -297,51 +317,100 @@ msgstr[1] "Odstraňujú sa %(num)d balíky." msgstr[2] "Odstraňuje sa %(num)d balíkov." msgstr[3] "Odstraňuje sa %(num)d balíkov." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Inštalácia zavádzača." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Nastavovanie hardvérových hodín." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Vytváranie initramfs pomocou nástroja dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Zlyhalo spustenie nástroja dracut v cieli" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Kód skončenia bol {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Vytváranie initramfs pomocou nástroja dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Zlyhalo spustenie nástroja dracut v cieli" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfigurácia initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisovanie fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Fiktívna úloha jazyka python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Fiktívny krok {} jazyka python" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfigurácia miestnych nastavení." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ukladanie sieťovej konfigurácie." diff --git a/lang/python/sl/LC_MESSAGES/python.mo b/lang/python/sl/LC_MESSAGES/python.mo deleted file mode 100644 index 1943947b8..000000000 Binary files a/lang/python/sl/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/sl/LC_MESSAGES/python.po b/lang/python/sl/LC_MESSAGES/python.po index 59e41a704..137c6a7c2 100644 --- a/lang/python/sl/LC_MESSAGES/python.po +++ b/lang/python/sl/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/)\n" "MIME-Version: 1.0\n" @@ -17,265 +17,281 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -284,7 +300,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -293,51 +309,100 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/sq/LC_MESSAGES/python.mo b/lang/python/sq/LC_MESSAGES/python.mo deleted file mode 100644 index 24638bb1d..000000000 Binary files a/lang/python/sq/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/sq/LC_MESSAGES/python.po b/lang/python/sq/LC_MESSAGES/python.po index ccba23a78..d1ee7ec51 100644 --- a/lang/python/sq/LC_MESSAGES/python.po +++ b/lang/python/sq/LC_MESSAGES/python.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Besnik , 2020 +# Besnik Bleta , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Besnik , 2020\n" +"Last-Translator: Besnik Bleta , 2022\n" "Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,67 +21,88 @@ msgstr "" "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Formësoni GRUB-in." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Po montohen pjesë." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Gabim i brendshëm gjatë montimit të grupeve zfs të të dhënave" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "S’u arrit të importohej zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "S’u arrit të shkyçej zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "S’u arrit të caktohej pikë montimi zfs" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Gabim Formësimi" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "S’ka pjesë të përkufizuara për
{!s}
për t’u përdorur." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "Gabim montimi zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Formësoni shërbime systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "S’modifikohet dot shërbimi" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Thirrja systemctl {arg!s} në chroot u përgjigj me kod gabimi " "{num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "S’aktivizohet dot shërbimi systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "S’aktivizohet dot objektivi systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "S’aktivizohet dot kohëmatës systemd {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "S’çaktivizohet dot objektivi systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "S’maskohet dot njësia systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,162 +110,157 @@ msgstr "" "Urdhra të panjohur systemd {command!s} dhe " "{suffix!s} për njësi {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Çmontoni sisteme kartelash." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Po mbushen sisteme kartelash." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync dështoi me kod gabimi {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Po shpaketohet paketa {}/{}, kartela {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Po fillohet të shpaketohet {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Dështoi shpaketimi i figurës \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "S’ka pikë montimi për ndarjen rrënjë" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage nuk përmban një vlerë \"rootMountPoint\", s’po bëhet gjë" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage nuk përmban kyç “rootMountPoint”." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Pikë e gabuar montimi për ndarjen rrënjë" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint është \"{}\", që s’ekziston, s’po bëhet gjë" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint është “{}”, çka nuk ekziston." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Formësim i keq i unsquash-it" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Formësim gabim i unpackfs-ë" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "S’ka hollësi formësimi." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "Sistemi i kartelave për \"{}\" ({}) nuk mbulohet nga kerneli juaj i tanishëm" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Sistemi i kartelave \"{}\" ({}) s’ekziston" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -"S’u arrit të gjendej unsquashfs, sigurohuni se e keni të instaluar paketën " -"squashfs-tools" +"S’u arrit të gjendet unsquashfs, sigurohuni se keni të instaluar paketën " +"squashfs-tools." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinacioni \"{}\" te sistemi i synuar s’është drejtori" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "S’shkruhet dot kartelë formësimi KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi KDM {!s}" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LXDM {!s}" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LightDM {!s}" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "S’formësohet dot LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "S’ka të instaluar përshëndetës LightDM." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "S’shkruhet dot kartelë formësimi SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi SLIM {!s}" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "S’janë përzgjedhur përgjegjës ekrani për modulin displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Lista displaymanagers është e zbrazët ose e papërcaktuar si te " -"globalstorage, ashtu edhe te displaymanager.conf." +"Lista “displaymanagers” është e zbrazët ose e papërkufizuar për të dy " +"rastet, për “globalstorage” dhe për “displaymanager.conf”." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Formësimi i përgjegjësit të ekranit s’qe i plotë" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Po formësohet mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "S’është dhënë pikë montimi rrënjë për
{!s}
për t’u përdorur." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Po formësohet pjesë swap e fshehtëzuar." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Po instalohen të dhëna." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Formësoni shërbime OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "S’shtohet dot shërbimi {name!s} te run-level {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "S’hiqet dot shërbimi {name!s} nga run-level {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -252,18 +268,18 @@ msgstr "" "Service-action {arg!s} i panjohur për shërbimin {name!s} te " "run-level {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Thirrje rc-update {arg!s} në chroot u përgjigj me kod gabimi " "{num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Runlevel-i i synuar nuk ekziston" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -271,11 +287,11 @@ msgstr "" "Shtegu për runlevel {level!s} është {path!s}, i cili nuk " "ekziston." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Shërbimi i synuar nuk ekziston" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." @@ -283,79 +299,138 @@ msgstr "" "Shtegu për shërbimin {name!s} është {path!s}, i cili nuk " "ekziston." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Formësoni temën Plimuth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Instalo paketa." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Po përpunohen paketat (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Po instalohet një paketë." msgstr[1] "Po instalohen %(num)d paketa." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Po hiqet një paketë." msgstr[1] "Po hiqen %(num)d paketa." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Gabim Përgjegjësi Paketash" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Përgjegjësi i paketave s’përgatiti dot përditësime. Urdhri
{!s}
u" +" përgjigj me kod gabimi {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Përgjegjësi i paketave s’përditësoi dot sistemin. Urdhri
{!s}
u " +"përgjigj me kod gabimi {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Përgjegjësi i paketave s’bëri dot ndryshime te sistemi i instaluar. Urdhri " +"
{!s}
u përgjigj me kod gabimi {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Instalo ngarkues nisjesh." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"S'u arrit të instalohej grub, te depozita globale s’ka të përkufizuara pjesë" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Gabim instalimi Ngarkuesi Nisësi" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Ngarkuesi i nisësit s’u instalua dot. Urdhri i instalimit
{!s}
u " +"përgjigj me kod gabimi {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Po caktohet ora hardware." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Po krijohet initramfs me dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Po krijohet initramfs me mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "S’u arrit të xhirohej dracut mbi objektivin" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "S’u arrit të xhirohej mkinitfs te objektivi" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Kodi i daljes qe {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Po krijohet initramfs me dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "S’u arrit të xhirohej dracut mbi objektivin" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Po formësohet initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Po formësohet shërbim OpenRC dmcrypt." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Po shkruhet fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"S’është dhënë formësim
{!s}
për t’u përdorur nga
{!s}
." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Akt python dummy." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Hap python {} dummy" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Po formësohen vendoret." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Po ruhet formësimi i rrjetit." diff --git a/lang/python/sr/LC_MESSAGES/python.mo b/lang/python/sr/LC_MESSAGES/python.mo deleted file mode 100644 index 377bfcbaa..000000000 Binary files a/lang/python/sr/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/sr/LC_MESSAGES/python.po b/lang/python/sr/LC_MESSAGES/python.po index 1015f6de7..a2ba8f651 100644 --- a/lang/python/sr/LC_MESSAGES/python.po +++ b/lang/python/sr/LC_MESSAGES/python.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Slobodan Simić , 2020\n" "Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/)\n" @@ -21,265 +21,281 @@ msgstr "" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Подеси ГРУБ" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Монтирање партиција." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Грешка поставе" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Подеси „systemd“ сервисе" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Не могу да мењам сервис" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Демонтирање фајл-система." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Попуњавање фајл-система." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync неуспешан са кодом грешке {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Неуспело распакивање одраза \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Нема тачке мотирања за root партицију" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Лоша тачка монтирања за корену партицију" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Инсталирање података." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -287,7 +303,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -295,51 +311,100 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Уписивање fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Подешавање локалитета." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Упис поставе мреже." diff --git a/lang/python/sr@latin/LC_MESSAGES/python.mo b/lang/python/sr@latin/LC_MESSAGES/python.mo deleted file mode 100644 index b9ce140b0..000000000 Binary files a/lang/python/sr@latin/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/sr@latin/LC_MESSAGES/python.po b/lang/python/sr@latin/LC_MESSAGES/python.po index 2435b9536..c9b4d0e53 100644 --- a/lang/python/sr@latin/LC_MESSAGES/python.po +++ b/lang/python/sr@latin/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/)\n" "MIME-Version: 1.0\n" @@ -17,265 +17,281 @@ msgstr "" "Language: sr@latin\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -283,7 +299,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -291,51 +307,100 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/sv/LC_MESSAGES/python.mo b/lang/python/sv/LC_MESSAGES/python.mo deleted file mode 100644 index e903d55a9..000000000 Binary files a/lang/python/sv/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/sv/LC_MESSAGES/python.po b/lang/python/sv/LC_MESSAGES/python.po index d43393152..a84f39922 100644 --- a/lang/python/sv/LC_MESSAGES/python.po +++ b/lang/python/sv/LC_MESSAGES/python.po @@ -5,16 +5,17 @@ # # Translators: # Jan-Olof Svensson, 2019 -# Luna Jernberg , 2020 +# Tobias Olausson , 2020 +# Luna Jernberg , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Luna Jernberg , 2020\n" +"Last-Translator: Luna Jernberg , 2022\n" "Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,65 +23,88 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigurera GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Monterar partitioner." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Internt fel vid montering av zfs datasets" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Misslyckades att importera zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Misslyckades att låsa upp zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Misslyckades att ställa in zfs monteringspunkt " + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Konfigurationsfel" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Inga partitioner är definerade för
{!s}
att använda." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs monteringsfel" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurera systemd tjänster" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Kunde inte modifiera tjänst" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"Anrop till systemctl {arg!s}i chroot returnerade felkod " +"{num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Kunde inte aktivera systemd tjänst {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Kunde inte aktivera systemd målsystem {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Kunde inte aktivera systemd timer {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Kunde inte inaktivera systemd målsystem {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "Kan inte maskera systemd unit {name!s}" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -88,263 +112,327 @@ msgstr "" "Okända systemd kommandon {command!s} och {suffix!s} för " "enhet {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Avmontera filsystem." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Packar upp filsystem." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync misslyckades med felkod {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Packar upp avbild {}/{}, fil {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Börjar att packa upp {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Misslyckades att packa upp avbild \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Ingen monteringspunkt för root partition" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globallagring innehåller inte en \"rootMonteringspunkt\" nyckel." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Dålig monteringspunkt för root partition" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMonteringspunkt är \"{}\", vilket inte existerar." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Dålig unsquash konfiguration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Dålig unpackfs konfiguration" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Det finns ingen konfigurationsinformation." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Filsystemet för \"{}\" ({}) stöds inte av din nuvarande kärna" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Källfilsystemet \"{}\" existerar inte" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" +"Kunde inte hitta unsquashfs, se till att du har paketet squashfs-tools " +"installerat" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Destinationen \"{}\" på målsystemet är inte en katalog" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Misslyckades med att skriva KDM konfigurationsfil" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurationsfil {!s} existerar inte" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Misslyckades med att skriva LXDM konfigurationsfil" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurationsfil {!s} existerar inte" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Misslyckades med att skriva LightDM konfigurationsfil" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurationsfil {!s} existerar inte" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Kunde inte konfigurera LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "" +msgstr "Ingen LightDM greeter installerad." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Misslyckades med att SLIM konfigurationsfil" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurationsfil {!s} existerar inte" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Ingen skärmhanterare vald för displaymanager modulen." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Skärmhanterar listan är tom eller odefinierad i bothglobalstorage och " +"Skärmhanterar listan är tom eller odefinierad i både globalstorage och " "displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "Konfiguration för displayhanteraren var inkomplett" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurerar mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Ingen root monteringspunkt är angiven för
{!s}
att använda." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Konfigurerar krypterad swap." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installerar data." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurera OpenRC tjänster" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "Kan inte lägga till tjänsten {name!s} till körnivå {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" +msgstr "Kan inte ta bort tjänsten {name!s} från körnivå {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" +"Okänt tjänst-anrop {arg!s}för tjänsten {name!s} i körnivå " +"{level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" +"Anrop till rc-update {arg!s} i chroot returnerade felkod " +"{num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "" +msgstr "Begärd körnivå existerar inte" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" +"Sökvägen till körnivå {level!s} är {path!s}, som inte " +"existerar." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "" +msgstr "Begärd tjänst existerar inte" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Sökvägen för tjänst {name!s} är {path!s}, som inte existerar." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfigurera Plymouth tema" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Installera paket." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Bearbetar paket (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Installerar ett paket." msgstr[1] "Installerar %(num)d paket." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Tar bort ett paket." msgstr[1] "Tar bort %(num)d paket." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Pakethanterare fel" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Pakethanteraren kunde inte förbereda uppdateringar kommandot
{!s}
" +" returnerade felkod {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Pakethanteraren kunde inte uppdatera systemet. kommandot
{!s}
" +"returnerade felkod {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Pakethanteraren kunde inte göra ändringar till det installerade systemet. " +"kommandot
{!s}
returnerade felkod {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Installera starthanterare." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Det gick inte att installera grub, inga partitioner definierade i global " +"lagring" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Starthanterare installationsfel" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Starthanterare kunde inte installeras. Installationskommandot " +"
{!s}
returnerade felkod {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Ställer hårdvaruklockan." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Skapar initramfs med dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Skapar initramfs med mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Misslyckades att köra dracut på målet " +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Misslyckades att köra mkinitfs på målet " -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Felkoden var {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Skapar initramfs med dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Misslyckades att köra dracut på målet " + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfigurerar initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurerar OpenRC dmcrypt tjänst." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Skriver fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Ingen
{!s}
konfiguration är angiven för
{!s}
att " +"använda. " + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Exempel python jobb" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Exempel python steg {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Konfigurerar språkinställningar" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Sparar nätverkskonfiguration." diff --git a/lang/python/ta_IN/LC_MESSAGES/python.po b/lang/python/ta_IN/LC_MESSAGES/python.po new file mode 100644 index 000000000..6c1dc8338 --- /dev/null +++ b/lang/python/ta_IN/LC_MESSAGES/python.po @@ -0,0 +1,404 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Tamil (India) (https://www.transifex.com/calamares/teams/20061/ta_IN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta_IN\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/te/LC_MESSAGES/python.po b/lang/python/te/LC_MESSAGES/python.po new file mode 100644 index 000000000..5c4331c87 --- /dev/null +++ b/lang/python/te/LC_MESSAGES/python.po @@ -0,0 +1,404 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Telugu (https://www.transifex.com/calamares/teams/20061/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/tg/LC_MESSAGES/python.po b/lang/python/tg/LC_MESSAGES/python.po new file mode 100644 index 000000000..ac9141a2b --- /dev/null +++ b/lang/python/tg/LC_MESSAGES/python.po @@ -0,0 +1,422 @@ +# 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 , YEAR. +# +# Translators: +# Victor Ibragimov , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Victor Ibragimov , 2020\n" +"Language-Team: Tajik (https://www.transifex.com/calamares/teams/20061/tg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "Танзимоти GRUB." + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "Васлкунии қисмҳои диск." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Хатои танзимкунӣ" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "Ягон қисми диск барои истифодаи
{!s}
муайян карда нашуд." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "Танзимоти хидматҳои systemd" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "Хидмат тағйир дода намешавад" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"Дархости systemctl {arg!s} дар chroot рамзи хатои {num!s}-ро ба" +" вуҷуд овард." + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "Хидмати systemd-и {name!s} фаъол карда намешавад." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "Интихоби systemd-и {name!s} фаъол карда намешавад." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "Интихоби systemd-и {name!s} ғайрифаъол карда намешавад." + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "Воҳиди systemd-и {name!s} пинҳон карда намешавад." + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" +"Фармонҳои systemd-и номаълум {command!s} ва " +"{suffix!s} барои воҳиди {name!s}." + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "Пурборкунӣ бо низомҳои файлӣ." + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "rsync бо рамзи хатои {} қатъ шуд." + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "Баровардани тимсол: {}/{}, файл: {}/{}" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "Оғози барориши {}" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "Тимсоли \"{}\" бароварда нашуд" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "Ягон нуқтаи васл барои қисми диски реша (root) нест" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "Нуқтаи васли нодуруст барои қисми диски реша (root)" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "Низоми файлӣ барои \"{}\" ({}) бо ҳастаи ҷории шумо дастгирӣ намешавад" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "Низоми файлии манбаи \"{}\" вуҷуд надорад" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "Ҷойи таъиноти \"{}\" дар низоми интихобшуда феҳрист намебошад" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "Файли танзимии KDM сабт карда намешавад" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "Файли танзимии KDM {!s} вуҷуд надорад" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "Файли танзимии LXDM сабт карда намешавад" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "Файли танзимии LXDM {!s} вуҷуд надорад" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "Файли танзимии LightDM сабт карда намешавад" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "Файли танзимии LightDM {!s} вуҷуд надорад" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "LightDM танзим карда намешавад" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "Хушомади LightDM насб нашудааст." + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "Файли танзимии SLIM сабт карда намешавад" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "Файли танзимии SLIM {!s} вуҷуд надорад" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "Ягон мудири намоиш барои модули displaymanager интихоб нашудааст." + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" +"Рӯйхати displaymanagers ҳам дар globalstorage ва ҳам дар displaymanager.conf" +" холӣ ё номаълум аст." + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "Раванди танзимкунии мудири намоиш ба анҷом нарасид" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "Танзимкунии mkinitcpio." + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "Нуқтаи васли реша (root) барои истифодаи
{!s}
дода нашуд." + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "Насбкунии иттилоот." + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "Танзимоти хидматҳои OpenRC" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "Хидмати {name!s} барои run-level {level!s} илова карда намешавад." + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "Хидмати {name!s} аз run-level {level!s} тоза карда намешавад." + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" +"Хидмати амалии {arg!s} барои хидмати {name!s} дар run-level " +"{level!s} номаълум аст." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"Дархости rc-update {arg!s} дар chroot рамзи хатои {num!s}-ро ба" +" вуҷуд овард." + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "runlevel-и интихобшуда вуҷуд надорад" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" +"Масир барои runlevel {level!s} аз {path!s} иборат аст, аммо он " +"вуҷуд надорад." + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "Хидмати интихобшуда вуҷуд надорад" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" +"Масир барои хидмати {name!s} аз {path!s} иборат аст, аммо он " +"вуҷуд надорад." + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "Танзимоти мавзӯи Plymouth" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "Насбкунии қуттиҳо." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "Коргузории қуттиҳо (%(count)d / %(total)d)" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "Насбкунии як баста." +msgstr[1] "Насбкунии %(num)d баста." + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "Тозакунии як баста" +msgstr[1] "Тозакунии %(num)d баста." + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Насбкунии боркунандаи роҳандозӣ." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "Танзимкунии соати сахтафзор." + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Эҷодкунии initramfs бо mkinitfs." + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "mkinitfs дар низоми интихобшуда иҷро нашуд" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "Рамзи барориш: {}" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Эҷодкунии initramfs бо dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "dracut дар низоми интихобшуда иҷро нашуд" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "Танзимкунии initramfs." + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "Танзимкунии хидмати OpenRC dmcrypt." + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "Сабткунии fstab." + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "Вазифаи амсилаи python." + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "Қадами амсилаи python {}" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "Танзимкунии маҳаллигардониҳо." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "Нигоҳдории танзимоти шабака." diff --git a/lang/python/th/LC_MESSAGES/python.mo b/lang/python/th/LC_MESSAGES/python.mo deleted file mode 100644 index 3b427fbbf..000000000 Binary files a/lang/python/th/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/th/LC_MESSAGES/python.po b/lang/python/th/LC_MESSAGES/python.po index 0ee304996..6f20497fe 100644 --- a/lang/python/th/LC_MESSAGES/python.po +++ b/lang/python/th/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/)\n" "MIME-Version: 1.0\n" @@ -17,321 +17,386 @@ msgstr "" "Language: th\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/tr_TR/LC_MESSAGES/python.mo b/lang/python/tr_TR/LC_MESSAGES/python.mo deleted file mode 100644 index b36bf9c49..000000000 Binary files a/lang/python/tr_TR/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/tr_TR/LC_MESSAGES/python.po b/lang/python/tr_TR/LC_MESSAGES/python.po index c3c25388d..1eeea5904 100644 --- a/lang/python/tr_TR/LC_MESSAGES/python.po +++ b/lang/python/tr_TR/LC_MESSAGES/python.po @@ -4,16 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Demiray Muhterem , 2020 +# abc Def , 2020 +# Demiray Muhterem , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Demiray Muhterem , 2020\n" +"Last-Translator: Demiray Muhterem , 2022\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/calamares/teams/20061/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,67 +22,88 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB'u yapılandır." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." -msgstr "Disk bölümleri bağlanıyor." +msgstr "Disk bölümlemeleri bağlanıyor." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Dahili bağlama hatası zfs veri kümeleri" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "zpool içe aktarılamadı" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "zpool kilidi açılamadı" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "zfs bağlama noktası ayarlanamadı" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Yapılandırma Hatası" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
kullanması için hiçbir bölüm tanımlanmadı." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs bağlama hatası" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Systemd hizmetlerini yapılandır" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Hizmet değiştirilemiyor" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "systemctl {arg!s} chroot çağrısında hata kodu döndürüldü " "{num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Systemd hizmeti etkinleştirilemiyor {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Systemd hedefi etkinleştirilemiyor {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "{name!s} sistem zamanlayıcısı etkinleştirilemiyor." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd hedefi devre dışı bırakılamıyor {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Systemd birimi maskeleyemiyor {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -89,160 +111,154 @@ msgstr "" "Bilinmeyen sistem komutları {command!s} ve " "{suffix!s} {name!s} birimi için." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Dosya sistemlerini ayırın." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "Dosya sistemi genişletiliyor." +msgstr "Dosya sistemlerini dolduruyorum." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync {} hata koduyla başarısız oldu." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Açılan kurulum medyası {}/{}, dışa aktarılan dosya sayısı {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "Dışa aktarım başlatılıyor {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kurulum medyası aktarılamadı" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "kök disk bölümü için bağlama noktası yok" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" -"globalstorage bir \"rootMountPoint\" anahtarı içermiyor, hiçbirşey yapılmadı" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage bir \"rootMountPoint\" anahtarı içermiyor." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Kök disk bölümü için hatalı bağlama noktası" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint \"{}\", mevcut değil, hiçbirşey yapılmadı" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint, mevcut olmayan \"{}\" dir." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Unsquash yapılandırma sorunlu" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Hatalı unpackfs yapılandırması" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Yapılandırma bilgisi yok." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) Dosya sistemi mevcut çekirdeğiniz tarafından desteklenmiyor" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" Kaynak dosya sistemi mevcut değil" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" "Unsquashfs bulunamadı, squashfs-tools paketinin kurulu olduğundan emin olun." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hedef sistemdeki \"{}\" hedefi bir dizin değil" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "KDM yapılandırma dosyası yazılamıyor" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM yapılandırma dosyası {!s} mevcut değil" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "LXDM yapılandırma dosyası yazılamıyor" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM yapılandırma dosyası {!s} mevcut değil" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "LightDM yapılandırma dosyası yazılamıyor" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM yapılandırma dosyası {!s} mevcut değil" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "LightDM yapılandırılamıyor" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "LightDM karşılama yüklü değil." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "SLIM yapılandırma dosyası yazılamıyor" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM yapılandırma dosyası {!s} mevcut değil" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Ekran yöneticisi modülü için ekran yöneticisi seçilmedi." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"Görüntüleyiciler listesi, her iki bölgedeki ve displaymanager.conf öğesinde " -"boş veya tanımsızdır." +"Displaymanagers listesi hem globalstorage hem de displaymanager.conf'ta boş " +"veya tanımsız." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Ekran yöneticisi yapılandırma işi tamamlanamadı" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Mkinitcpio yapılandırılıyor." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
kullanması için kök bağlama noktası verilmedi." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Şifreli takas alanı yapılandırılıyor." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Veri yükleniyor." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr " OpenRC hizmetlerini yapılandır" +msgstr " OpenRC servislerini yapılandır" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "{name!s} hizmeti, {level!s} çalışma düzeyine ekleyemiyor." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "{name!s} hizmeti {level!s} çalışma düzeyinden kaldırılamıyor." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -250,106 +266,165 @@ msgstr "" "Çalışma düzeyinde {level!s} hizmetinde {name!s} servisi için bilinmeyen " "hizmet eylemi {arg!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -" rc-update {arg!s} çağrısında chroot, {num!s} hata kodunu " +" rc-update {arg!s} çağrısında chroot {num!s} hata kodunu " "döndürdü." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Hedef çalışma seviyesi mevcut değil" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "Runlevel {level!s} yolu, mevcut olmayan {path!s} 'dir." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "Hedef servisi mevcut değil" +msgstr "Hedef hizmet mevcut değil" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." -msgstr "{name!s} hizmetinin yolu, bulunmayan {path!s}." +msgstr "{name!s} hizmetinin yolu {path!s}, ki mevcut değil." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth temasını yapılandır" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Paketleri yükle" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketler işleniyor (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)d paket yükleniyor" msgstr[1] "%(num)d paket yükleniyor" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)d paket kaldırılıyor." msgstr[1] "%(num)d paket kaldırılıyor." -#: src/modules/bootloader/main.py:51 -msgid "Install bootloader." -msgstr "Önyükleyici kur." +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Paket Yöneticisi hatası" -#: src/modules/hwclock/main.py:35 +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Paket yöneticisi güncellemeleri hazırlayamadı.
{!s}
komutu {!s} " +"hata kodunu döndürdü." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Paket yöneticisi sistemi güncelleyemedi.
{!s}
komutu {!s} hata " +"kodunu döndürdü." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Paket yöneticisi kurulu sistemde değişiklik yapamadı.
{!s}
komutu" +" {!s} hata kodunu döndürdü." + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Önyükleyici kuruluyor" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "Grub yüklenemedi, genel depolamada tanımlı bölüm yok" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Önyükleyici yükleme hatası" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Önyükleyici yüklenemedi. Kurulum komutu
{!s}
, {!s} hata kodunu " +"döndürdü." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Donanım saati ayarlanıyor." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Dracut ile initramfs oluşturuluyor." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Mkinitfs ile initramfs oluşturuluyor." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Hedef üzerinde dracut çalıştırılamadı" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Hedefte mkinitfs çalıştırılamadı" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Çıkış kodu {} idi" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Dracut ile initramfs oluşturuluyor." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Hedef üzerinde dracut çalıştırılamadı" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Initramfs yapılandırılıyor." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "OpenRC dmcrypt servisi yapılandırılıyor." +msgstr "OpenRC dmcrypt hizmeti yapılandırılıyor." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Fstab dosyasına yazılıyor." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"
{!s}
'nin kullanması için
{!s}
yapılandırması " +"verilmemiştir." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Dummy python job." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Dummy python step {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." -msgstr "Sistem yereli yapılandırılıyor." +msgstr "Sistem yerelleri yapılandırılıyor." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Ağ yapılandırması kaydediliyor." diff --git a/lang/python/uk/LC_MESSAGES/python.mo b/lang/python/uk/LC_MESSAGES/python.mo deleted file mode 100644 index d30e896ea..000000000 Binary files a/lang/python/uk/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/uk/LC_MESSAGES/python.po b/lang/python/uk/LC_MESSAGES/python.po index 4626a6020..73a7aae47 100644 --- a/lang/python/uk/LC_MESSAGES/python.po +++ b/lang/python/uk/LC_MESSAGES/python.po @@ -5,17 +5,17 @@ # # Translators: # Володимир Братко , 2018 -# Paul S , 2019 -# Yuri Chornoivan , 2020 +# Paul S <204@tuta.io>, 2019 +# Yuri Chornoivan , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Yuri Chornoivan , 2020\n" +"Last-Translator: Yuri Chornoivan , 2022\n" "Language-Team: Ukrainian (https://www.transifex.com/calamares/teams/20061/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,67 +23,88 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Налаштовування GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "Монтування розділів." -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "Внутрішня помилка під час монтування наборів даних zfs" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "Не вдалося імпортувати zpool" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "Не вдалося розблокувати zpool" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "Не вдалося встановити точку монтування zfs" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "Помилка налаштовування" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "Не визначено розділів для використання
{!s}
." -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "Помилка монтування zfs" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Налаштуйте служби systemd" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "Не вдалося змінити службу" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" "Внаслідок виклику systemctl {arg!s} у chroot було повернуто " "повідомлення з кодом помилки {num! s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "Не вдалося ввімкнути службу systemd {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Не вдалося ввімкнути завдання systemd {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "Не вдалося ввімкнути таймер systemd {name!s}." + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "Не вдалося вимкнути завдання systemd {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "Не вдалося замаскувати вузол systemd {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -91,166 +112,157 @@ msgstr "" "Невідомі команди systemd {command!s} та {suffix!s}" " для пристрою {name!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "Демонтувати файлові системи." - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "Заповнення файлових систем." -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "Спроба виконати rsync зазнала невдачі з кодом помилки {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Розпаковуємо образ {} з {}, файл {} з {}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "Починаємо розпаковувати {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "Не вдалося розпакувати образ «{}»" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "Немає точки монтування для кореневого розділу" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" -"У globalstorage не міститься ключа «rootMountPoint». Не виконуватимемо " -"ніяких дій." +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "У globalstorage не міститься ключа «rootMountPoint»." -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "Помилкова точна монтування для кореневого розділу" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" -"Для rootMountPoint вказано значення «{}». Такого шляху не існує. Не " -"виконуватимемо ніяких дій." +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint дорівнює «{}», але такої теки не існує." -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "Помилкові налаштування unsquash" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "Помилкові налаштування unpackfs" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "Немає даних налаштувань." + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "У поточному ядрі системи не передбачено підтримки файлової системи «{}» ({})" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "Вихідної файлової системи «{}» не існує" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" "Не вдалося знайти unsquashfs; переконайтеся, що встановлено пакет squashfs-" -"tools" +"tools." -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Призначення «{}» у цільовій системі не є каталогом" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "Не вдалося записати файл налаштувань KDM" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "Файла налаштувань KDM {!s} не існує" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "Не вдалося виконати запис до файла налаштувань LXDM" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "Файла налаштувань LXDM {!s} не існує" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "Не вдалося виконати запис до файла налаштувань LightDM" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "Файла налаштувань LightDM {!s} не існує" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "Не вдалося налаштувати LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "Засіб входу до системи LightDM не встановлено." -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "Не вдалося виконати запис до файла налаштувань SLIM" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "Файла налаштувань SLIM {!s} не існує" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "Не вибрано засобу керування дисплеєм для модуля displaymanager." -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Список засобів керування дисплеєм є порожнім або невизначеним у " "bothglobalstorage та displaymanager.conf." -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "Налаштування засобу керування дисплеєм є неповними" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Налаштовуємо mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Не вказано кореневої точки монтування для використання у
{!s}
." -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "Налаштовуємо зашифрований розділ резервної пам'яті." - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Встановлюємо дані." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Налаштувати служби OpenRC" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Не вдалося додати службу {name!s} до рівня запуску {level!s}." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Не вдалося вилучити службу {name!s} з рівня запуску {level!s}." -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." @@ -258,18 +270,18 @@ msgstr "" "Невідома дія зі службою {arg!s} для служби {name!s} на рівні " "запуску {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" "Унаслідок виконання виклику rc-update {arg!s} chroot повернуто " "повідомлення про помилку із кодом {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Шляху до рівня запуску не існує" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." @@ -277,11 +289,11 @@ msgstr "" "Шляхом до рівня запуску {level!s} вказано {path!s}. Такого " "шляху не існує." -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Служби призначення не існує" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." @@ -289,21 +301,21 @@ msgstr "" "Шляхом до служби {name!s} вказано {path!s}. Такого шляху не " "існує." -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Налаштувати тему Plymouth" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "Встановити пакети." -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обробляємо пакунки (%(count)d з %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." @@ -312,7 +324,7 @@ msgstr[1] "Встановлюємо %(num)d пакунки." msgstr[2] "Встановлюємо %(num)d пакунків." msgstr[3] "Встановлюємо один пакунок." -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." @@ -321,51 +333,111 @@ msgstr[1] "Вилучаємо %(num)d пакунки." msgstr[2] "Вилучаємо %(num)d пакунків." msgstr[3] "Вилучаємо один пакунок." -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "Помилка засобу керування пакунками" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" +"Засобу керування пакунками не вдалося приготувати оновлення. Програмою " +"
{!s}
повернуто код помилки {!s}." + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" +"Засобу керування пакунками не вдалося оновити систему. Програмою " +"
{!s}
повернуто код помилки {!s}." + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" +"Засобу керування пакунками не вдалося внести зміну до встановленої системи. " +"Програмою
{!s}
повернуто код помилки {!s}." + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "Встановити завантажувач." -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" +"Не вдалося встановити grub — на загальному сховищі даних не визначено " +"розділів" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Помилка встановлення завантажувача" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Не вдалося встановити завантажувач. Програмою для встановлення " +"
{!s}
повернуто код помилки {!s}." + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Встановлюємо значення для апаратного годинника." -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "Створюємо initramfs за допомогою dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "Створення initramfs за допомогою mkinitfs." -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "Не вдалося виконати dracut над призначенням" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "Не вдалося виконати mkinitfs над призначенням" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Код виходу — {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "Створюємо initramfs за допомогою dracut." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "Не вдалося виконати dracut над призначенням" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Налаштовуємо initramfs." -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Налаштовуємо службу dmcrypt OpenRC." -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Записуємо fstab." -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" +"Не надано налаштувань
{!s}
для використання у
{!s}
." + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Фіктивне завдання python." -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "Фіктивний крок python {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "Налаштовуємо локалі." -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "Зберігаємо налаштування мережі." diff --git a/lang/python/ur/LC_MESSAGES/python.mo b/lang/python/ur/LC_MESSAGES/python.mo deleted file mode 100644 index 31761ef92..000000000 Binary files a/lang/python/ur/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/ur/LC_MESSAGES/python.po b/lang/python/ur/LC_MESSAGES/python.po index acbf6de6d..1f273d45c 100644 --- a/lang/python/ur/LC_MESSAGES/python.po +++ b/lang/python/ur/LC_MESSAGES/python.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/)\n" "MIME-Version: 1.0\n" @@ -17,323 +17,388 @@ msgstr "" "Language: ur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." msgstr "" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." msgstr "" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" msgstr "" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" +"installed." msgstr "" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." msgstr "" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" msgstr "" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "" diff --git a/lang/python/uz/LC_MESSAGES/python.mo b/lang/python/uz/LC_MESSAGES/python.mo deleted file mode 100644 index 3c75289ee..000000000 Binary files a/lang/python/uz/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/uz/LC_MESSAGES/python.po b/lang/python/uz/LC_MESSAGES/python.po deleted file mode 100644 index da2e204df..000000000 --- a/lang/python/uz/LC_MESSAGES/python.po +++ /dev/null @@ -1,337 +0,0 @@ -# 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 , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" -"PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Language-Team: Uzbek (https://www.transifex.com/calamares/teams/20061/uz/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: uz\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: src/modules/grubcfg/main.py:37 -msgid "Configure GRUB." -msgstr "" - -#: src/modules/mount/main.py:38 -msgid "Mounting partitions." -msgstr "" - -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 -msgid "Configuration Error" -msgstr "" - -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 -msgid "No partitions are defined for
{!s}
to use." -msgstr "" - -#: src/modules/services-systemd/main.py:35 -msgid "Configure systemd services" -msgstr "" - -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 -msgid "Cannot modify service" -msgstr "" - -#: src/modules/services-systemd/main.py:69 -msgid "" -"systemctl {arg!s} call in chroot returned error code {num!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 -msgid "Cannot enable systemd service {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:74 -msgid "Cannot enable systemd target {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:78 -msgid "Cannot disable systemd target {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:80 -msgid "Cannot mask systemd unit {name!s}." -msgstr "" - -#: src/modules/services-systemd/main.py:82 -msgid "" -"Unknown systemd commands {command!s} and " -"{suffix!s} for unit {name!s}." -msgstr "" - -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "" - -#: src/modules/unpackfs/main.py:44 -msgid "Filling up filesystems." -msgstr "" - -#: src/modules/unpackfs/main.py:257 -msgid "rsync failed with error code {}." -msgstr "" - -#: src/modules/unpackfs/main.py:302 -msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" - -#: src/modules/unpackfs/main.py:317 -msgid "Starting to unpack {}" -msgstr "" - -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 -msgid "Failed to unpack image \"{}\"" -msgstr "" - -#: src/modules/unpackfs/main.py:399 -msgid "No mount point for root partition" -msgstr "" - -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:405 -msgid "Bad mount point for root partition" -msgstr "" - -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" - -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "" - -#: src/modules/unpackfs/main.py:423 -msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" - -#: src/modules/unpackfs/main.py:427 -msgid "The source filesystem \"{}\" does not exist" -msgstr "" - -#: src/modules/unpackfs/main.py:433 -msgid "" -"Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "" - -#: src/modules/unpackfs/main.py:447 -msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" - -#: src/modules/displaymanager/main.py:515 -msgid "Cannot write KDM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:516 -msgid "KDM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:577 -msgid "Cannot write LXDM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:578 -msgid "LXDM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:661 -msgid "Cannot write LightDM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:662 -msgid "LightDM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:736 -msgid "Cannot configure LightDM" -msgstr "" - -#: src/modules/displaymanager/main.py:737 -msgid "No LightDM greeter installed." -msgstr "" - -#: src/modules/displaymanager/main.py:768 -msgid "Cannot write SLIM configuration file" -msgstr "" - -#: src/modules/displaymanager/main.py:769 -msgid "SLIM config file {!s} does not exist" -msgstr "" - -#: src/modules/displaymanager/main.py:895 -msgid "No display managers selected for the displaymanager module." -msgstr "" - -#: src/modules/displaymanager/main.py:896 -msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " -"displaymanager.conf." -msgstr "" - -#: src/modules/displaymanager/main.py:978 -msgid "Display manager configuration was incomplete" -msgstr "" - -#: src/modules/initcpiocfg/main.py:37 -msgid "Configuring mkinitcpio." -msgstr "" - -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 -msgid "No root mount point is given for
{!s}
to use." -msgstr "" - -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "" - -#: src/modules/rawfs/main.py:35 -msgid "Installing data." -msgstr "" - -#: src/modules/services-openrc/main.py:38 -msgid "Configure OpenRC services" -msgstr "" - -#: src/modules/services-openrc/main.py:66 -msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:68 -msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:70 -msgid "" -"Unknown service-action {arg!s} for service {name!s} in run-" -"level {level!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:103 -msgid "" -"rc-update {arg!s} call in chroot returned error code {num!s}." -msgstr "" - -#: src/modules/services-openrc/main.py:110 -msgid "Target runlevel does not exist" -msgstr "" - -#: src/modules/services-openrc/main.py:111 -msgid "" -"The path for runlevel {level!s} is {path!s}, which does not " -"exist." -msgstr "" - -#: src/modules/services-openrc/main.py:119 -msgid "Target service does not exist" -msgstr "" - -#: src/modules/services-openrc/main.py:120 -msgid "" -"The path for service {name!s} is {path!s}, which does not " -"exist." -msgstr "" - -#: src/modules/plymouthcfg/main.py:36 -msgid "Configure Plymouth theme" -msgstr "" - -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 -msgid "Install packages." -msgstr "" - -#: src/modules/packages/main.py:66 -#, python-format -msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" - -#: src/modules/packages/main.py:71 -#, python-format -msgid "Installing one package." -msgid_plural "Installing %(num)d packages." -msgstr[0] "" - -#: src/modules/packages/main.py:74 -#, python-format -msgid "Removing one package." -msgid_plural "Removing %(num)d packages." -msgstr[0] "" - -#: src/modules/bootloader/main.py:51 -msgid "Install bootloader." -msgstr "" - -#: src/modules/hwclock/main.py:35 -msgid "Setting hardware clock." -msgstr "" - -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "" - -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "" - -#: src/modules/dracut/main.py:59 -msgid "The exit code was {}" -msgstr "" - -#: src/modules/initramfscfg/main.py:41 -msgid "Configuring initramfs." -msgstr "" - -#: src/modules/openrcdmcryptcfg/main.py:34 -msgid "Configuring OpenRC dmcrypt service." -msgstr "" - -#: src/modules/fstab/main.py:38 -msgid "Writing fstab." -msgstr "" - -#: src/modules/dummypython/main.py:44 -msgid "Dummy python job." -msgstr "" - -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 -msgid "Dummy python step {}" -msgstr "" - -#: src/modules/localecfg/main.py:39 -msgid "Configuring locales." -msgstr "" - -#: src/modules/networkcfg/main.py:37 -msgid "Saving network configuration." -msgstr "" diff --git a/lang/python/vi/LC_MESSAGES/python.po b/lang/python/vi/LC_MESSAGES/python.po new file mode 100644 index 000000000..fe2b4dfb6 --- /dev/null +++ b/lang/python/vi/LC_MESSAGES/python.po @@ -0,0 +1,423 @@ +# 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 , YEAR. +# +# Translators: +# T. Tran , 2020 +# th1nhhdk , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: th1nhhdk , 2021\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:42 +msgid "Mounting partitions." +msgstr "Đang gắn kết các phân vùng." + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "Lỗi cấu hình" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "Không có phân vùng nào được định nghĩa cho
{!s}
để dùng." + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: 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 "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"systemctl {arg!s} 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:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "Không thể bật dịch vụ systemd {name!s}." + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "Không thể bật nhóm dịch vụ systemd {name!s}." + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "Không thể tắt nhóm dịch vụ systemd {name!s}." + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "Không thể đánh dấu đơn vị systemd {name!s}." + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" +"Không nhận ra lệnh systemd {command!s} và " +"{suffix!s} cho đơn vị {name!s}." + +#: src/modules/unpackfs/main.py:34 +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:467 +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." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +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:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +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:460 +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:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +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:524 +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:525 +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:586 +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:587 +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:670 +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:671 +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:745 +msgid "Cannot configure LightDM" +msgstr "Không thể cấu hình LXDM" + +#: src/modules/displaymanager/main.py:746 +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:777 +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:778 +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:991 +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:992 +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:1074 +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:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "Không có điểm kết nối gốc cho
{!s}
để dùng." + +#: 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 {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" +"Không nhận ra thao tác {arg!s} cho dịch vụ {name!s} ở run-level" +" {level!s}." + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" +"Lệnh rc-update {arg!s} 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 {path!s}, which does not " +"exist." +msgstr "" +"Đường dẫn cho runlevel {level!s} là {path!s}, 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 {path!s}, which does not " +"exist." +msgstr "" +"Đường dẫn cho dịch vụ {name!s} là {path!s}, 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:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "Đang cài đặt các gói ứng dụng." + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "Đang xử lý gói (%(count)d / %(total)d)" + +#: src/modules/packages/main.py:68 +#, 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:71 +#, 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/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "Đang cài đặt bộ khởi động." + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "Lỗi cài đặt trình khởi động(bootloader)" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" +"Trình khởi động(bootloader) không thể được cài đặt. Lệnh cài đặt " +"
{!s}
đã trả mã lỗi {!s}." + +#: 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:26 +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/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: 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:31 +msgid "Configuring locales." +msgstr "Đang cấu hình ngôn ngữ." + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "Đang lưu cấu hình mạng." diff --git a/lang/python/zh/LC_MESSAGES/python.po b/lang/python/zh/LC_MESSAGES/python.po new file mode 100644 index 000000000..049870036 --- /dev/null +++ b/lang/python/zh/LC_MESSAGES/python.po @@ -0,0 +1,402 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Chinese (https://www.transifex.com/calamares/teams/20061/zh/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/zh_CN/LC_MESSAGES/python.mo b/lang/python/zh_CN/LC_MESSAGES/python.mo deleted file mode 100644 index 33876e0a1..000000000 Binary files a/lang/python/zh_CN/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/zh_CN/LC_MESSAGES/python.po b/lang/python/zh_CN/LC_MESSAGES/python.po index 9f201afdb..eb39baf6f 100644 --- a/lang/python/zh_CN/LC_MESSAGES/python.po +++ b/lang/python/zh_CN/LC_MESSAGES/python.po @@ -7,16 +7,18 @@ # Mingcong Bai , 2017 # plantman , 2017 # Feng Chao , 2020 -# Bobby Rong , 2020 +# Bobby Rong , 2020 +# Giovanni Schiano-Moriello, 2022 +# 玉堂白鹤 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Bobby Rong , 2020\n" +"Last-Translator: 玉堂白鹤 , 2022\n" "Language-Team: Chinese (China) (https://www.transifex.com/calamares/teams/20061/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,65 +26,86 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "配置 GRUB." -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "挂载分区。" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "装载 zfs 数据集时出现内部错误" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "导入 zpool 失败" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "解锁 zpool 失败" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "设置 zfs 挂载点失败" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "配置错误" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "没有分配分区给
{!s}
。" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs 挂载出错" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "配置 systemd 服务" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "无法修改服务" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "chroot 中的 systemctl {arg!s} 命令返回错误 {num!s}." -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "无法启用 systemd 服务 {name!s}." -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "无法启用 systemd 目标 {name!s}." -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "无法启用 systemd 计时器 {name!s}。" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "无法禁用 systemd 目标 {name!s}." -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "无法屏蔽 systemd 单元 {name!s}." -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -90,257 +113,301 @@ msgstr "" "未知的 systemd 命令 {command!s} 和 {name!s} 单元前缀 " "{suffix!s}." -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "卸载文件系统。" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "写入文件系统。" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync 报错,错误码 {}." -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "解压镜像 {}/{},文件{}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "" +msgstr "开始解压 {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "解压镜像失败 \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "无 root 分区挂载点" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage 未包含 \"rootMountPoint\",跳过" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage(全局存储)中不包含 \"rootMountPoint\"(root挂载点)键。" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "错误的 root 分区挂载点" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint 是 \"{}\",不存在此位置,跳过" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint(root挂载点)是 \"{}\",其不存在。" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "错误的 unsquash 配置" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "错误的 unpackfs 解包配置" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "没有配置信息。" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "你当前的内核不支持文件系统 \"{}\" ({})" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "源文件系统 \"{}\" 不存在" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "未找到 unsquashfs,请确保安装了 squashfs-tools 软件包" +"installed." +msgstr "寻找 unsquashfs 失败,请确定您已安装 squashfs-tools 软体包。" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目标系统中的 \"{}\" 不是一个目录" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "无法写入 KDM 配置文件" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 配置文件 {!s} 不存在" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "无法写入 LXDM 配置文件" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 配置文件 {!s} 不存在" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "无法写入 LightDM 配置文件" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 配置文件 {!s} 不存在" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "无法配置 LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "未安装 LightDM 欢迎程序。" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "无法写入 SLIM 配置文件" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 配置文件 {!s} 不存在" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "显示管理器模块中未选择显示管理器。" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "globalstorage 和 displaymanager.conf 配置文件中都没有配置显示管理器。" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "显示管理器配置不完全" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "配置 mkinitcpio." -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr " 未设置
{!s}
要使用的根挂载点。" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "配置加密交换分区。" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "安装数据." -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "配置 OpenRC 服务。" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "无法将服务 {name!s} 加入 {level!s} 运行级别." -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "无法从 {level!s} 运行级别中删除服务 {name!s}。" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "未知的服务动作 {arg!s},服务名: {name!s},运行级别: {level!s}." -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "chroot 中运行的 rc-update {arg!s} 返回错误 {num!s}." -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "目标运行级别不存在。" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "运行级别 {level!s} 所在目录 {path!s} 不存在。" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "目标服务不存在" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "服务 {name!s} 的路径 {path!s} 不存在。" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "配置 Plymouth 主题" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "安装软件包。" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "软件包处理中(%(count)d/%(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "安装%(num)d软件包。" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "移除%(num)d软件包。" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "软件包管理器错误" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "软件包管理器无法准备更新。命令
{!s}
返回错误代码{!s}。" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "软件包管理器无法更新系统。命令
{!s}
返回错误代码{!s}。" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "软件包管理器无法对已安装的系统进行更改。命令
{!s}
返回错误代码{!s}。" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "安装启动加载器。" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "无法安装 grub,全局存储中未定义分区" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "启动加载器安装出错" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "无法安装启动加载器。安装命令
{!s}
返回错误代码 {!s}。" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "设置硬件时钟。" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "用 dracut 创建 initramfs." +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "正在用 mkinitfs 创建initramfs。" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "无法在目标中运行 dracut " +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "无法在目标中运行 mkinitfs" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "退出码是 {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "用 dracut 创建 initramfs." + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "无法在目标中运行 dracut " + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "正在配置初始内存文件系统。" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "配置 OpenRC dmcrypt 服务。" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "正在写入 fstab。" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "无
{!s}
配置可供
{!s}
使用。" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "占位 Python 任务。" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "占位 Python 步骤 {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "正在进行本地化配置。" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "正在保存网络配置。" diff --git a/lang/python/zh_HK/LC_MESSAGES/python.po b/lang/python/zh_HK/LC_MESSAGES/python.po new file mode 100644 index 000000000..a989067cf --- /dev/null +++ b/lang/python/zh_HK/LC_MESSAGES/python.po @@ -0,0 +1,402 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" +"PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Language-Team: Chinese (Hong Kong) (https://www.transifex.com/calamares/teams/20061/zh_HK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_HK\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/modules/grubcfg/main.py:28 +msgid "Configure GRUB." +msgstr "" + +#: src/modules/mount/main.py:42 +msgid "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 +msgid "Configuration Error" +msgstr "" + +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 +msgid "No partitions are defined for
{!s}
to use." +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" + +#: src/modules/services-systemd/main.py:26 +msgid "Configure systemd services" +msgstr "" + +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 +msgid "Cannot modify service" +msgstr "" + +#: src/modules/services-systemd/main.py:60 +msgid "" +"systemctl {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 +msgid "Cannot enable systemd service {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:65 +msgid "Cannot enable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:71 +msgid "Cannot disable systemd target {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:73 +msgid "Cannot mask systemd unit {name!s}." +msgstr "" + +#: src/modules/services-systemd/main.py:75 +msgid "" +"Unknown systemd commands {command!s} and " +"{suffix!s} for unit {name!s}." +msgstr "" + +#: src/modules/unpackfs/main.py:34 +msgid "Filling up filesystems." +msgstr "" + +#: src/modules/unpackfs/main.py:254 +msgid "rsync failed with error code {}." +msgstr "" + +#: src/modules/unpackfs/main.py:299 +msgid "Unpacking image {}/{}, file {}/{}" +msgstr "" + +#: src/modules/unpackfs/main.py:314 +msgid "Starting to unpack {}" +msgstr "" + +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 +msgid "Failed to unpack image \"{}\"" +msgstr "" + +#: src/modules/unpackfs/main.py:430 +msgid "No mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" + +#: src/modules/unpackfs/main.py:434 +msgid "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" + +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" + +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" + +#: src/modules/unpackfs/main.py:456 +msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" + +#: src/modules/unpackfs/main.py:460 +msgid "The source filesystem \"{}\" does not exist" +msgstr "" + +#: src/modules/unpackfs/main.py:466 +msgid "" +"Failed to find unsquashfs, make sure you have the squashfs-tools package " +"installed." +msgstr "" + +#: src/modules/unpackfs/main.py:481 +msgid "The destination \"{}\" in the target system is not a directory" +msgstr "" + +#: src/modules/displaymanager/main.py:524 +msgid "Cannot write KDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:525 +msgid "KDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:586 +msgid "Cannot write LXDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:587 +msgid "LXDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:670 +msgid "Cannot write LightDM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:671 +msgid "LightDM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:745 +msgid "Cannot configure LightDM" +msgstr "" + +#: src/modules/displaymanager/main.py:746 +msgid "No LightDM greeter installed." +msgstr "" + +#: src/modules/displaymanager/main.py:777 +msgid "Cannot write SLIM configuration file" +msgstr "" + +#: src/modules/displaymanager/main.py:778 +msgid "SLIM config file {!s} does not exist" +msgstr "" + +#: src/modules/displaymanager/main.py:991 +msgid "No display managers selected for the displaymanager module." +msgstr "" + +#: src/modules/displaymanager/main.py:992 +msgid "" +"The displaymanagers list is empty or undefined in both globalstorage and " +"displaymanager.conf." +msgstr "" + +#: src/modules/displaymanager/main.py:1074 +msgid "Display manager configuration was incomplete" +msgstr "" + +#: src/modules/initcpiocfg/main.py:28 +msgid "Configuring mkinitcpio." +msgstr "" + +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 +msgid "No root mount point is given for
{!s}
to use." +msgstr "" + +#: src/modules/rawfs/main.py:26 +msgid "Installing data." +msgstr "" + +#: src/modules/services-openrc/main.py:29 +msgid "Configure OpenRC services" +msgstr "" + +#: src/modules/services-openrc/main.py:57 +msgid "Cannot add service {name!s} to run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:59 +msgid "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:61 +msgid "" +"Unknown service-action {arg!s} for service {name!s} in run-" +"level {level!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:94 +msgid "" +"rc-update {arg!s} call in chroot returned error code {num!s}." +msgstr "" + +#: src/modules/services-openrc/main.py:101 +msgid "Target runlevel does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:102 +msgid "" +"The path for runlevel {level!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/services-openrc/main.py:110 +msgid "Target service does not exist" +msgstr "" + +#: src/modules/services-openrc/main.py:111 +msgid "" +"The path for service {name!s} is {path!s}, which does not " +"exist." +msgstr "" + +#: src/modules/plymouthcfg/main.py:27 +msgid "Configure Plymouth theme" +msgstr "" + +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 +msgid "Install packages." +msgstr "" + +#: src/modules/packages/main.py:63 +#, python-format +msgid "Processing packages (%(count)d / %(total)d)" +msgstr "" + +#: src/modules/packages/main.py:68 +#, python-format +msgid "Installing one package." +msgid_plural "Installing %(num)d packages." +msgstr[0] "" + +#: src/modules/packages/main.py:71 +#, python-format +msgid "Removing one package." +msgid_plural "Removing %(num)d packages." +msgstr[0] "" + +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/bootloader/main.py:43 +msgid "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "" + +#: src/modules/hwclock/main.py:26 +msgid "Setting hardware clock." +msgstr "" + +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "" + +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "" + +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 +msgid "The exit code was {}" +msgstr "" + +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "" + +#: src/modules/initramfscfg/main.py:32 +msgid "Configuring initramfs." +msgstr "" + +#: src/modules/openrcdmcryptcfg/main.py:26 +msgid "Configuring OpenRC dmcrypt service." +msgstr "" + +#: src/modules/fstab/main.py:29 +msgid "Writing fstab." +msgstr "" + +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "" + +#: src/modules/dummypython/main.py:35 +msgid "Dummy python job." +msgstr "" + +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 +msgid "Dummy python step {}" +msgstr "" + +#: src/modules/localecfg/main.py:31 +msgid "Configuring locales." +msgstr "" + +#: src/modules/networkcfg/main.py:29 +msgid "Saving network configuration." +msgstr "" diff --git a/lang/python/zh_TW/LC_MESSAGES/python.mo b/lang/python/zh_TW/LC_MESSAGES/python.mo deleted file mode 100644 index 23e76b0ea..000000000 Binary files a/lang/python/zh_TW/LC_MESSAGES/python.mo and /dev/null differ diff --git a/lang/python/zh_TW/LC_MESSAGES/python.po b/lang/python/zh_TW/LC_MESSAGES/python.po index 080d31a03..974c77226 100644 --- a/lang/python/zh_TW/LC_MESSAGES/python.po +++ b/lang/python/zh_TW/LC_MESSAGES/python.po @@ -4,16 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 黃柏諺 , 2020 +# Walter Cheuk , 2020 +# 黃柏諺 , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-04-22 11:03+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: 黃柏諺 , 2020\n" +"Last-Translator: 黃柏諺 , 2022\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,65 +22,86 @@ msgstr "" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/modules/grubcfg/main.py:37 +#: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "設定 GRUB。" -#: src/modules/mount/main.py:38 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." msgstr "正在掛載分割區。" -#: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:205 -#: src/modules/initcpiocfg/main.py:209 -#: src/modules/luksopenswaphookcfg/main.py:95 -#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171 -#: src/modules/initramfscfg/main.py:94 src/modules/initramfscfg/main.py:98 -#: src/modules/openrcdmcryptcfg/main.py:78 -#: src/modules/openrcdmcryptcfg/main.py:82 src/modules/fstab/main.py:332 -#: src/modules/fstab/main.py:338 src/modules/localecfg/main.py:144 -#: src/modules/networkcfg/main.py:48 +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "掛載 zfs 資料集時發生內部錯誤" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "匯入 zpool 失敗" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "解鎖 zpool 失敗" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "設定 zfs 掛載點失敗" + +#: src/modules/mount/main.py:229 src/modules/initcpiocfg/main.py:235 +#: src/modules/initcpiocfg/main.py:239 src/modules/rawfs/main.py:164 +#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 +#: src/modules/openrcdmcryptcfg/main.py:72 +#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:361 +#: src/modules/fstab/main.py:367 src/modules/fstab/main.py:394 +#: src/modules/localecfg/main.py:140 src/modules/networkcfg/main.py:105 msgid "Configuration Error" msgstr "設定錯誤" -#: src/modules/mount/main.py:146 src/modules/initcpiocfg/main.py:206 -#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172 -#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79 -#: src/modules/fstab/main.py:333 +#: src/modules/mount/main.py:230 src/modules/initcpiocfg/main.py:236 +#: src/modules/rawfs/main.py:165 src/modules/initramfscfg/main.py:86 +#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." msgstr "沒有分割區被定義為
{!s}
以供使用。" -#: src/modules/services-systemd/main.py:35 +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "zfs 掛載錯誤" + +#: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "設定 systemd 服務" -#: src/modules/services-systemd/main.py:68 -#: src/modules/services-openrc/main.py:102 +#: src/modules/services-systemd/main.py:59 +#: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "無法修改服務" -#: src/modules/services-systemd/main.py:69 +#: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "在 chroot 中呼叫的 systemctl {arg!s} 回傳了錯誤代碼 {num!s}。" -#: src/modules/services-systemd/main.py:72 -#: src/modules/services-systemd/main.py:76 +#: src/modules/services-systemd/main.py:63 +#: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service {name!s}." msgstr "無法啟用 systemd 服務 {name!s}。" -#: src/modules/services-systemd/main.py:74 +#: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "無法啟用 systemd 目標 {name!s}。" -#: src/modules/services-systemd/main.py:78 +#: src/modules/services-systemd/main.py:67 +msgid "Cannot enable systemd timer {name!s}." +msgstr "無法啟用 systemd timer {name!s}。" + +#: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target {name!s}." msgstr "無法停用 systemd 目標 {name!s}。" -#: src/modules/services-systemd/main.py:80 +#: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit {name!s}." msgstr "無法 mask systemd 單位 {name!s}。" -#: src/modules/services-systemd/main.py:82 +#: src/modules/services-systemd/main.py:75 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." @@ -87,257 +109,301 @@ msgstr "" "未知的 systemd 指令 {command!s}{suffix!s} 給單位 " "{name!s}。" -#: src/modules/umount/main.py:40 -msgid "Unmount file systems." -msgstr "解除掛載檔案系統。" - -#: src/modules/unpackfs/main.py:44 +#: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." msgstr "填滿檔案系統。" -#: src/modules/unpackfs/main.py:257 +#: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." msgstr "rsync 失敗,錯誤碼 {} 。" -#: src/modules/unpackfs/main.py:302 +#: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" msgstr "正在解壓縮 {}/{},檔案 {}/{}" -#: src/modules/unpackfs/main.py:317 +#: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" msgstr "開始解壓縮 {}" -#: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" msgstr "無法解開映像檔 \"{}\"" -#: src/modules/unpackfs/main.py:399 +#: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" msgstr "沒有 root 分割區的掛載點" -#: src/modules/unpackfs/main.py:400 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage 不包含 \"rootMountPoint\" 鍵,不做任何事" +#: src/modules/unpackfs/main.py:431 +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "globalstorage 不包含 \"rootMountPoint\" 鍵。" -#: src/modules/unpackfs/main.py:405 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" msgstr "root 分割區掛載點錯誤" -#: src/modules/unpackfs/main.py:406 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint 為 \"{}\",其不存在,不做任何事" +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "rootMountPoint 為 \"{}\",其不存在。" -#: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 -#: src/modules/unpackfs/main.py:446 -msgid "Bad unsquash configuration" -msgstr "錯誤的 unsquash 設定" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "錯誤的 unpackfs 設定" -#: src/modules/unpackfs/main.py:423 +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "沒有設定資訊。" + +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "\"{}\" ({}) 的檔案系統不被您目前的核心所支援" +msgstr "\"{}\" ({}) 的檔案系統不獲您目前的內核所支援" -#: src/modules/unpackfs/main.py:427 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" msgstr "來源檔案系統 \"{}\" 不存在" -#: src/modules/unpackfs/main.py:433 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" -msgstr "找不到 unsquashfs,請確定您已安裝 squashfs-tools 軟體包" +"installed." +msgstr "尋找 unsquashfs 失敗,請確定您已安裝 squashfs-tools 軟體包。" -#: src/modules/unpackfs/main.py:447 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目標系統中的目的地 \"{}\" 不是目錄" -#: src/modules/displaymanager/main.py:515 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" msgstr "無法寫入 KDM 設定檔" -#: src/modules/displaymanager/main.py:516 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定檔 {!s} 不存在" -#: src/modules/displaymanager/main.py:577 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" msgstr "無法寫入 LXDM 設定檔" -#: src/modules/displaymanager/main.py:578 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定檔 {!s} 不存在" -#: src/modules/displaymanager/main.py:661 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" msgstr "無法寫入 LightDM 設定檔" -#: src/modules/displaymanager/main.py:662 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定檔 {!s} 不存在" -#: src/modules/displaymanager/main.py:736 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" msgstr "無法設定 LightDM" -#: src/modules/displaymanager/main.py:737 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." msgstr "未安裝 LightDM greeter。" -#: src/modules/displaymanager/main.py:768 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" msgstr "無法寫入 SLIM 設定檔" -#: src/modules/displaymanager/main.py:769 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定檔 {!s} 不存在" -#: src/modules/displaymanager/main.py:895 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." msgstr "未在顯示管理器模組中選取顯示管理器。" -#: src/modules/displaymanager/main.py:896 +#: src/modules/displaymanager/main.py:992 msgid "" -"The displaymanagers list is empty or undefined in bothglobalstorage and " +"The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." -msgstr "顯示管理器清單為空或在全域儲存與 displaymanager.conf 中皆未定義。" +msgstr "顯示管理器清單為空或在 globalstorage 與 displaymanager.conf 中皆未定義。" -#: src/modules/displaymanager/main.py:978 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" msgstr "顯示管理器設定不完整" -#: src/modules/initcpiocfg/main.py:37 +#: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "正在設定 mkinitcpio。" -#: src/modules/initcpiocfg/main.py:210 -#: src/modules/luksopenswaphookcfg/main.py:100 -#: src/modules/initramfscfg/main.py:99 src/modules/openrcdmcryptcfg/main.py:83 -#: src/modules/fstab/main.py:339 src/modules/localecfg/main.py:145 -#: src/modules/networkcfg/main.py:49 +#: src/modules/initcpiocfg/main.py:240 src/modules/initramfscfg/main.py:90 +#: src/modules/openrcdmcryptcfg/main.py:77 src/modules/fstab/main.py:368 +#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106 msgid "No root mount point is given for
{!s}
to use." msgstr "沒有給定的根掛載點
{!s}
以供使用。" -#: src/modules/luksopenswaphookcfg/main.py:35 -msgid "Configuring encrypted swap." -msgstr "正在設定已加密的 swap。" - -#: src/modules/rawfs/main.py:35 +#: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "正在安裝資料。" -#: src/modules/services-openrc/main.py:38 +#: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "設定 OpenRC 服務" -#: src/modules/services-openrc/main.py:66 +#: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "無法新增服務 {name!s} 到執行層級 {level!s}。" -#: src/modules/services-openrc/main.py:68 +#: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "無法移除服務 {name!s} 從執行層級 {level!s}。" -#: src/modules/services-openrc/main.py:70 +#: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "未知的服務動作 {arg!s} 給服務 {name!s} 在執行層級 {level!s}。" -#: src/modules/services-openrc/main.py:103 +#: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "在 chroot 中呼叫的 rc-update {arg!s} 回傳了錯誤代碼 {num!s}。" -#: src/modules/services-openrc/main.py:110 +#: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "目標執行層級不存在" -#: src/modules/services-openrc/main.py:111 +#: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "執行層級 {level!s} 的路徑為 {path!s},不存在。" -#: src/modules/services-openrc/main.py:119 +#: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "目標服務不存在" -#: src/modules/services-openrc/main.py:120 +#: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "服務 {name!s} 的路徑為 {path!s},不存在。" -#: src/modules/plymouthcfg/main.py:36 +#: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "設定 Plymouth 主題" -#: src/modules/packages/main.py:59 src/modules/packages/main.py:68 -#: src/modules/packages/main.py:78 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." msgstr "安裝軟體包。" -#: src/modules/packages/main.py:66 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "正在處理軟體包 (%(count)d / %(total)d)" -#: src/modules/packages/main.py:71 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "正在安裝 %(num)d 軟體包。" -#: src/modules/packages/main.py:74 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "正在移除 %(num)d 軟體包。" -#: src/modules/bootloader/main.py:51 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 +msgid "Package Manager error" +msgstr "軟體包管理程式錯誤" + +#: src/modules/packages/main.py:726 +msgid "" +"The package manager could not prepare updates. The command
{!s}
" +"returned error code {!s}." +msgstr "軟體包管理程式無法準備更新。指令
{!s}
回傳了錯誤碼 {!s}。" + +#: src/modules/packages/main.py:738 +msgid "" +"The package manager could not update the system. The command
{!s}
" +" returned error code {!s}." +msgstr "軟體包管理程式無法更新系統。指令
{!s}
回傳了錯誤碼 {!s}。" + +#: src/modules/packages/main.py:766 +msgid "" +"The package manager could not make changes to the installed system. The " +"command
{!s}
returned error code {!s}." +msgstr "軟體包管理程式無法對已安裝的系統做出變更。指令
{!s}
回傳了錯誤碼 {!s}。" + +#: src/modules/bootloader/main.py:43 msgid "Install bootloader." msgstr "安裝開機載入程式。" -#: src/modules/hwclock/main.py:35 +#: src/modules/bootloader/main.py:614 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "安裝 grub 失敗,全域儲存空間中未定義分割區" + +#: src/modules/bootloader/main.py:782 +msgid "Bootloader installation error" +msgstr "開機載入程式安裝錯誤" + +#: src/modules/bootloader/main.py:783 +msgid "" +"The bootloader could not be installed. The installation command " +"
{!s}
returned error code {!s}." +msgstr "無法安裝開機載入程式。安裝指令
{!s}
回傳了錯誤碼 {!s}。" + +#: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "正在設定硬體時鐘。" -#: src/modules/dracut/main.py:36 -msgid "Creating initramfs with dracut." -msgstr "正在使用 dracut 建立 initramfs。" +#: src/modules/mkinitfs/main.py:27 +msgid "Creating initramfs with mkinitfs." +msgstr "正在使用 mkinitfs 建立 initramfs。" -#: src/modules/dracut/main.py:58 -msgid "Failed to run dracut on the target" -msgstr "在目標上執行 dracut 失敗" +#: src/modules/mkinitfs/main.py:49 +msgid "Failed to run mkinitfs on the target" +msgstr "在目標上執行 mkinitfs 失敗" -#: src/modules/dracut/main.py:59 +#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "結束碼為 {}" -#: src/modules/initramfscfg/main.py:41 +#: src/modules/dracut/main.py:27 +msgid "Creating initramfs with dracut." +msgstr "正在使用 dracut 建立 initramfs。" + +#: src/modules/dracut/main.py:49 +msgid "Failed to run dracut on the target" +msgstr "在目標上執行 dracut 失敗" + +#: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "正在設定 initramfs。" -#: src/modules/openrcdmcryptcfg/main.py:34 +#: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "正在設定 OpenRC dmcrypt 服務。" -#: src/modules/fstab/main.py:38 +#: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "正在寫入 fstab。" -#: src/modules/dummypython/main.py:44 +#: src/modules/fstab/main.py:395 +msgid "No
{!s}
configuration is given for
{!s}
to use." +msgstr "無
{!s}
設定可供
{!s}
使用。" + +#: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "假的 python 工作。" -#: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 -#: src/modules/dummypython/main.py:103 +#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 +#: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "假的 python step {}" -#: src/modules/localecfg/main.py:39 +#: src/modules/localecfg/main.py:31 msgid "Configuring locales." msgstr "正在設定語系。" -#: src/modules/networkcfg/main.py:37 +#: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." msgstr "正在儲存網路設定。" diff --git a/lang/txload.cpp b/lang/txload.cpp index 36e0f71a2..b7d14c8bf 100644 --- a/lang/txload.cpp +++ b/lang/txload.cpp @@ -1,57 +1,56 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* * Tool to find differences between translations (can be used to help * merging them into one). See usage string, below, for details. + * + * The tool can be used when there are multiple translation files + * for a single language (e.g. Spanish) which need to be reconciled. + * Then running `txload file0.ts file1.ts ...` will produce a + * human-readable overview of what is translated and where the + * differences in translation are. */ #include #include #include -#include +// #include #include -static const char usage[] = "Usage: txload [ ...]\n" - "\n" - "Reads a .ts source file and zero or more .ts \n" - "files, and does a comparison between the translations. Source (English)\n" - "strings that are untranslated are flagged in each of the translation\n" - "files, while differences in the translations are themselves also shown.\n" - "\n" - "Outputs to stdout a human-readable list of differences between the\n" - "translations.\n"; +static const char usage[] = "Usage: txload [ ...]\n" + "\n" + "Reads a .ts source file and zero or more .ts \n" + "files, and does a comparison between the translations. Source (English)\n" + "strings that are untranslated are flagged in each of the translation\n" + "files, while differences in the translations are themselves also shown.\n" + "\n" + "Outputs to stdout a human-readable list of differences between the\n" + "translations.\n"; -bool load_file(const char* filename, QDomDocument& doc) +bool +load_file( const char* filename, QDomDocument& doc ) { - QFile file(filename); + QFile file( filename ); QString err; int err_line, err_column; - if (!file.open(QIODevice::ReadOnly)) + if ( !file.open( QIODevice::ReadOnly ) ) { qDebug() << "Could not open" << filename; return false; } - QByteArray ba( file.read(1024 * 1024) ); + QByteArray ba( file.read( 1024 * 1024 ) ); qDebug() << "Read" << ba.length() << "bytes from" << filename; - if (!doc.setContent(ba, &err, &err_line, &err_column)) { + if ( !doc.setContent( ba, &err, &err_line, &err_column ) ) + { qDebug() << "Could not read" << filename << ':' << err_line << ':' << err_column << ' ' << err; file.close(); return false; @@ -61,15 +60,20 @@ bool load_file(const char* filename, QDomDocument& doc) return true; } -QDomElement find_context(QDomDocument& doc, const QString& name) +QDomElement +find_context( QDomDocument& doc, const QString& name ) { QDomElement top = doc.documentElement(); QDomNode n = top.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement e = n.toElement(); if ( ( e.tagName() == "context" ) && ( e.firstChildElement( "name" ).text() == name ) ) + { return e; + } } n = n.nextSibling(); } @@ -77,17 +81,22 @@ QDomElement find_context(QDomDocument& doc, const QString& name) return QDomElement(); } -QDomElement find_message(QDomElement& context, const QString& source) +QDomElement +find_message( QDomElement& context, const QString& source ) { QDomNode n = context.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement e = n.toElement(); if ( e.tagName() == "message" ) { QString msource = e.firstChildElement( "source" ).text(); if ( msource == source ) + { return e; + } } } n = n.nextSibling(); @@ -95,34 +104,38 @@ QDomElement find_message(QDomElement& context, const QString& source) return QDomElement(); } -bool merge_into(QDomElement& master, QDomElement& sub) +bool +merge_into( QDomElement& origin, QDomElement& alternate ) { - QDomNode n = sub.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { - QDomElement e = n.toElement(); - if ( e.tagName() == "message" ) + QDomNode n = alternate.firstChild(); + while ( !n.isNull() ) + { + if ( n.isElement() ) + { + QDomElement alternateMessage = n.toElement(); + if ( alternateMessage.tagName() == "message" ) { - QString source = e.firstChildElement( "source" ).text(); - QString translation = e.firstChildElement( "translation" ).text(); - QDomElement masterTranslation = find_message( master, source ); - if ( masterTranslation.isNull() ) + QString alternateSourceText = alternateMessage.firstChildElement( "source" ).text(); + QString alternateTranslationText = alternateMessage.firstChildElement( "translation" ).text(); + QDomElement originMessage = find_message( origin, alternateSourceText ); + if ( originMessage.isNull() ) { - qDebug() << "No master translation for" << source; + qDebug() << "No origin translation for" << alternateSourceText; return false; } - QString msource = masterTranslation.firstChildElement( "source" ).text(); - QString mtranslation = masterTranslation.firstChildElement( "translation" ).text(); + QString originSourceText = originMessage.firstChildElement( "source" ).text(); + QString originTranslationText = originMessage.firstChildElement( "translation" ).text(); - if ( source != msource ) + if ( alternateSourceText != originSourceText ) { - qDebug() << "Mismatch for messages\n" << source << '\n' << msource; + qDebug() << "Mismatch for messages\n" << alternateSourceText << '\n' << originSourceText; return false; } - if ( !translation.isEmpty() && ( translation != mtranslation ) ) + if ( !alternateTranslationText.isEmpty() && ( alternateTranslationText != originTranslationText ) ) { - qDebug() << "\n\n\nSource:" << source << "\nTL1:" << mtranslation << "\nTL2:" << translation; + qDebug() << "\n\n\nSource:" << alternateSourceText << "\nTL1:" << originTranslationText + << "\nTL2:" << alternateTranslationText; } } } @@ -133,34 +146,41 @@ bool merge_into(QDomElement& master, QDomElement& sub) } - -bool merge_into(QDomDocument& master, QDomElement& context) +bool +merge_into( QDomDocument& originDocument, QDomElement& context ) { QDomElement name = context.firstChildElement( "name" ); if ( name.isNull() ) - return false; - - QString contextname = name.text(); - QDomElement masterContext = find_context( master, contextname ); - if ( masterContext.isNull() ) { - qDebug() << "Master document has no context" << contextname; return false; } - return merge_into( masterContext, context ); + QString contextname = name.text(); + QDomElement originContext = find_context( originDocument, contextname ); + if ( originContext.isNull() ) + { + qDebug() << "Origin document has no context" << contextname; + return false; + } + + return merge_into( originContext, context ); } -bool merge_into(QDomDocument& master, QDomDocument& sub) +bool +merge_into( QDomDocument& originDocument, QDomDocument& alternateDocument ) { - QDomElement top = sub.documentElement(); + QDomElement top = alternateDocument.documentElement(); QDomNode n = top.firstChild(); - while (!n.isNull()) { - if (n.isElement()) { + while ( !n.isNull() ) + { + if ( n.isElement() ) + { QDomElement e = n.toElement(); if ( e.tagName() == "context" ) - if ( !merge_into( master, e ) ) + if ( !merge_into( originDocument, e ) ) + { return false; + } } n = n.nextSibling(); } @@ -168,39 +188,46 @@ bool merge_into(QDomDocument& master, QDomDocument& sub) return true; } -int main(int argc, char** argv) +int +main( int argc, char** argv ) { - QCoreApplication a(argc, argv); + QCoreApplication a( argc, argv ); - if (argc < 2) + if ( argc < 2 ) { qWarning() << usage; return 1; } - QDomDocument doc("master"); - if ( !load_file(argv[1], doc) ) - return 1; - - for (int i = 2; i < argc; ++i) + QDomDocument originDocument( "origin" ); + if ( !load_file( argv[ 1 ], originDocument ) ) { - QDomDocument subdoc("sub"); - if ( !load_file(argv[i], subdoc) ) - return 1; - if ( !merge_into( doc, subdoc ) ) - return 1; + return 1; } - QString outfilename( argv[1] ); + for ( int i = 2; i < argc; ++i ) + { + QDomDocument alternateDocument( "alternate" ); + if ( !load_file( argv[ i ], alternateDocument ) ) + { + return 1; + } + if ( !merge_into( originDocument, alternateDocument ) ) + { + return 1; + } + } + + QString outfilename( argv[ 1 ] ); outfilename.append( ".new" ); - QFile outfile(outfilename); - if (!outfile.open(QIODevice::WriteOnly)) + QFile outfile( outfilename ); + if ( !outfile.open( QIODevice::WriteOnly ) ) { qDebug() << "Could not open" << outfilename; return 1; } - outfile.write( doc.toString(4).toUtf8() ); + outfile.write( originDocument.toString( 4 ).toUtf8() ); outfile.close(); return 0; diff --git a/lang/tz_en.ts b/lang/tz_en.ts index ba9b5a350..3272cc876 100644 --- a/lang/tz_en.ts +++ b/lang/tz_en.ts @@ -1,4 +1,7 @@ + @@ -2605,7 +2608,7 @@ Zaporozhye tz_names - + Zaporizhia diff --git a/lang/tz_nl.ts b/lang/tz_nl.ts index e1eb8d1e5..ed501dd67 100644 --- a/lang/tz_nl.ts +++ b/lang/tz_nl.ts @@ -1,4 +1,7 @@ + diff --git a/lang/tz_ru.ts b/lang/tz_ru.ts new file mode 100644 index 000000000..4c60096b5 --- /dev/null +++ b/lang/tz_ru.ts @@ -0,0 +1,2620 @@ + + + + + + QObject + + + Africa + tz_regions + Африка + + + + America + tz_regions + Америка + + + + Antarctica + tz_regions + Антарктида + + + + Arctic + tz_regions + Северный Ледовитый океан + + + + Asia + tz_regions + Азия + + + + Atlantic + tz_regions + Атлантика + + + + Australia + tz_regions + Австралия + + + + Europe + tz_regions + Европа + + + + Indian + tz_regions + Индийский океан + + + + Pacific + tz_regions + Тихоокеанское время + + + + Abidjan + tz_names + Абиджан + + + + Accra + tz_names + Аккра + + + + Adak + tz_names + Адак + + + + Addis Ababa + tz_names + Аддис-Абеба + + + + Adelaide + tz_names + Аделаида + + + + Aden + tz_names + Аден + + + + Algiers + tz_names + Алжир + + + + Almaty + tz_names + Алма-Ата + + + + Amman + tz_names + Амман + + + + Amsterdam + tz_names + Амстердам + + + + Anadyr + tz_names + Анадырь + + + + Anchorage + tz_names + Анкоридж + + + + Andorra + tz_names + Андорра + + + + Anguilla + tz_names + Ангилья + + + + Antananarivo + tz_names + Антананариву + + + + Antigua + tz_names + Антигуа + + + + Apia + tz_names + Апиа + + + + Aqtau + tz_names + Актау + + + + Aqtobe + tz_names + Актобе + + + + Araguaina + tz_names + Арагуаина + + + + Argentina/Buenos Aires + tz_names + Аргентина/Буэнос-Айрес + + + + Argentina/Catamarca + tz_names + Аргентина/Катамарка + + + + Argentina/Cordoba + tz_names + Аргентина/Кордова + + + + Argentina/Jujuy + tz_names + Аргентина/Жужуй + + + + Argentina/La Rioja + tz_names + Аргентина/Ла-Риоха + + + + Argentina/Mendoza + tz_names + Аргентина/Мендоса + + + + Argentina/Rio Gallegos + tz_names + Аргентина/Рио-Гальегос + + + + Argentina/Salta + tz_names + Аргентина/Сальта + + + + Argentina/San Juan + tz_names + Аргентина/Сан-Хуан + + + + Argentina/San Luis + tz_names + Аргентина/Сан-Луис + + + + Argentina/Tucuman + tz_names + Аргентина/Тукуман + + + + Argentina/Ushuaia + tz_names + Аргентина/Ушуая + + + + Aruba + tz_names + Аруба + + + + Ashgabat + tz_names + Ашхабад + + + + Asmara + tz_names + Асмэра + + + + Astrakhan + tz_names + Астрахань + + + + Asuncion + tz_names + Асунсьон + + + + Athens + tz_names + Афины + + + + Atikokan + tz_names + Атикокан + + + + Atyrau + tz_names + Атырау + + + + Auckland + tz_names + Окленд + + + + Azores + tz_names + Азорские острова + + + + Baghdad + tz_names + Багдад + + + + Bahia + tz_names + Баия + + + + Bahia Banderas + tz_names + Баия-де-Бандерас + + + + Bahrain + tz_names + Бахрейн + + + + Baku + tz_names + Баку + + + + Bamako + tz_names + Бамако + + + + Bangkok + tz_names + Бангкок + + + + Bangui + tz_names + Банги + + + + Banjul + tz_names + Банжул + + + + Barbados + tz_names + Барбадос + + + + Barnaul + tz_names + Барнаул + + + + Beirut + tz_names + Бейрут + + + + Belem + tz_names + Белен + + + + Belgrade + tz_names + Белград + + + + Belize + tz_names + Белиз + + + + Berlin + tz_names + Берлин + + + + Bermuda + tz_names + Бермуды + + + + Bishkek + tz_names + Бишкек + + + + Bissau + tz_names + Бисау + + + + Blanc-Sablon + tz_names + Бланк-Саблон + + + + Blantyre + tz_names + Блантир + + + + Boa Vista + tz_names + Боа-Виста + + + + Bogota + tz_names + Богота + + + + Boise + tz_names + Бойсе + + + + Bougainville + tz_names + Бугенвиль + + + + Bratislava + tz_names + Братислава + + + + Brazzaville + tz_names + Браззавиль + + + + Brisbane + tz_names + Брисбен + + + + Broken Hill + tz_names + Брокен-Хилл + + + + Brunei + tz_names + Бруней + + + + Brussels + tz_names + Брюссель + + + + Bucharest + tz_names + Бухарест + + + + Budapest + tz_names + Будапешт + + + + Bujumbura + tz_names + Бужумбура + + + + Busingen + tz_names + Бюзинген + + + + Cairo + tz_names + Каир + + + + Cambridge Bay + tz_names + Кеймбридж-Бей + + + + Campo Grande + tz_names + Кампу-Гранде + + + + Canary + tz_names + Канары + + + + Cancun + tz_names + Канкун + + + + Cape Verde + tz_names + Кабо-Верде + + + + Caracas + tz_names + Каракас + + + + Casablanca + tz_names + Касабланка + + + + Casey + tz_names + Кейси + + + + Cayenne + tz_names + Кайенна + + + + Cayman + tz_names + Кайман + + + + Ceuta + tz_names + Сеута + + + + Chagos + tz_names + Чагос + + + + Chatham + tz_names + Чатем + + + + Chicago + tz_names + Чикаго + + + + Chihuahua + tz_names + Чиуауа + + + + Chisinau + tz_names + Кишинев + + + + Chita + tz_names + Чита + + + + Choibalsan + tz_names + Чойбалсан + + + + Christmas + tz_names + о. Рождества + + + + Chuuk + tz_names + Чуук + + + + Cocos + tz_names + Кокосовые острова + + + + Colombo + tz_names + Коломбо + + + + Comoro + tz_names + Коморские острова + + + + Conakry + tz_names + Конакри + + + + Copenhagen + tz_names + Копенгаген + + + + Costa Rica + tz_names + Коста-Рика + + + + Creston + tz_names + Крестон + + + + Cuiaba + tz_names + Куяба + + + + Curacao + tz_names + Кюрасао + + + + Currie + tz_names + Курри + + + + Dakar + tz_names + Дакар + + + + Damascus + tz_names + Дамаск + + + + Danmarkshavn + tz_names + Денмаркшавн + + + + Dar es Salaam + tz_names + Дар-эс-Салам + + + + Darwin + tz_names + Дарвин + + + + Davis + tz_names + Дейвис + + + + Dawson + tz_names + Доусон + + + + Dawson Creek + tz_names + Доусон-Крик + + + + Denver + tz_names + Денвер + + + + Detroit + tz_names + Детройт + + + + Dhaka + tz_names + Дакка + + + + Dili + tz_names + Дили + + + + Djibouti + tz_names + Джибути + + + + Dominica + tz_names + Доминика + + + + Douala + tz_names + Дуала + + + + Dubai + tz_names + Дубай + + + + Dublin + tz_names + Дублин + + + + DumontDUrville + tz_names + Дюмон д’Юрвиль + + + + Dushanbe + tz_names + Душанбе + + + + Easter + tz_names + Остров Пасхи + + + + Edmonton + tz_names + Эдмонтон + + + + Efate + tz_names + Эфате + + + + Eirunepe + tz_names + Эйрунепе + + + + El Aaiun + tz_names + Эль-Аюн + + + + El Salvador + tz_names + Сальвадор + + + + Enderbury + tz_names + Эндербери + + + + Eucla + tz_names + Юкла + + + + Fakaofo + tz_names + Факаофо + + + + Famagusta + tz_names + Фамагуста + + + + Faroe + tz_names + Фаэро + + + + Fiji + tz_names + Фиджи + + + + Fort Nelson + tz_names + Форт Нельсон + + + + Fortaleza + tz_names + Форталеза + + + + Freetown + tz_names + Фритаун + + + + Funafuti + tz_names + Фунафути + + + + Gaborone + tz_names + Габороне + + + + Galapagos + tz_names + Галапагос + + + + Gambier + tz_names + Гамбье + + + + Gaza + tz_names + Газа + + + + Gibraltar + tz_names + Гибралтар + + + + Glace Bay + tz_names + Глейс-Бей + + + + Godthab + tz_names + Готхоб + + + + Goose Bay + tz_names + Гус-Бей + + + + Grand Turk + tz_names + Гранд-Терк + + + + Grenada + tz_names + Гренада + + + + Guadalcanal + tz_names + Гуадалканал + + + + Guadeloupe + tz_names + Гваделупа + + + + Guam + tz_names + Гуам + + + + Guatemala + tz_names + Гватемала + + + + Guayaquil + tz_names + Гуаякиль + + + + Guernsey + tz_names + Гернси + + + + Guyana + tz_names + Гайана + + + + Halifax + tz_names + Галифакс + + + + Harare + tz_names + Хараре + + + + Havana + tz_names + Гавана + + + + Hebron + tz_names + Хеврон + + + + Helsinki + tz_names + Хельсинки + + + + Hermosillo + tz_names + Эрмосильо + + + + Ho Chi Minh + tz_names + Хошимин + + + + Hobart + tz_names + Хобарт + + + + Hong Kong + tz_names + Гонконг + + + + Honolulu + tz_names + Гонолулу + + + + Hovd + tz_names + Ховд + + + + Indiana/Indianapolis + tz_names + Индиана/Индианаполис + + + + Indiana/Knox + tz_names + Индиана/Нокс + + + + Indiana/Marengo + tz_names + Индиана/Маренго + + + + Indiana/Petersburg + tz_names + Индиана/Петербург + + + + Indiana/Tell City + tz_names + Индиана/Телл-Сити + + + + Indiana/Vevay + tz_names + Индиана/Вивей + + + + Indiana/Vincennes + tz_names + Индиана/Винсеннс + + + + Indiana/Winamac + tz_names + Индиана/Винамак + + + + Inuvik + tz_names + Инувик + + + + Iqaluit + tz_names + Икалуит + + + + Irkutsk + tz_names + Иркутск + + + + Isle of Man + tz_names + о. Мэн + + + + Istanbul + tz_names + Стамбул + + + + Jakarta + tz_names + Джакарта + + + + Jamaica + tz_names + Ямайка + + + + Jayapura + tz_names + Джаяпура + + + + Jersey + tz_names + Джерси + + + + Jerusalem + tz_names + Иерусалим + + + + Johannesburg + tz_names + Йоханнесбург + + + + Juba + tz_names + Джуба + + + + Juneau + tz_names + Джуно + + + + Kabul + tz_names + Кабул + + + + Kaliningrad + tz_names + Калининград + + + + Kamchatka + tz_names + Камчатка + + + + Kampala + tz_names + Кампала + + + + Karachi + tz_names + Карачи + + + + Kathmandu + tz_names + Катманду + + + + Kentucky/Louisville + tz_names + Кентукки/Луисвилль + + + + Kentucky/Monticello + tz_names + Кентуки/Монтицелло + + + + Kerguelen + tz_names + Кергелен + + + + Khandyga + tz_names + Хандыга + + + + Khartoum + tz_names + Хартум + + + + Kiev + tz_names + Киев + + + + Kigali + tz_names + Кигали + + + + Kinshasa + tz_names + Киншаса + + + + Kiritimati + tz_names + Киритимати + + + + Kirov + tz_names + Киров + + + + Kolkata + tz_names + Колката + + + + Kosrae + tz_names + Косрае + + + + Kralendijk + tz_names + Кралендейк + + + + Krasnoyarsk + tz_names + Красноярск + + + + Kuala Lumpur + tz_names + Куала-Лумпур + + + + Kuching + tz_names + Кучинг + + + + Kuwait + tz_names + Кувейт + + + + Kwajalein + tz_names + Квайалейн + + + + La Paz + tz_names + Ла-Пас + + + + Lagos + tz_names + Лагос + + + + Libreville + tz_names + Либревиль + + + + Lima + tz_names + Лима + + + + Lindeman + tz_names + Линдеман + + + + Lisbon + tz_names + Лисабон + + + + Ljubljana + tz_names + Любляна + + + + Lome + tz_names + Ломе + + + + London + tz_names + Лондон + + + + Longyearbyen + tz_names + Лонгйербиен + + + + Lord Howe + tz_names + Лорд-Хау + + + + Los Angeles + tz_names + Лос-Анджелес + + + + Lower Princes + tz_names + Лоуэр-Принс + + + + Luanda + tz_names + Луанда + + + + Lubumbashi + tz_names + Лубумбаши + + + + Lusaka + tz_names + Лусака + + + + Luxembourg + tz_names + Люксембург + + + + Macau + tz_names + Макао + + + + Maceio + tz_names + Масейо + + + + Macquarie + tz_names + Маккуори + + + + Madeira + tz_names + Мадейра + + + + Madrid + tz_names + Мадрид + + + + Magadan + tz_names + Магадан + + + + Mahe + tz_names + Маэ + + + + Majuro + tz_names + Маджуро + + + + Makassar + tz_names + Макассар + + + + Malabo + tz_names + Малабо + + + + Maldives + tz_names + Мальдивы + + + + Malta + tz_names + Мальта + + + + Managua + tz_names + Манагуа + + + + Manaus + tz_names + Манаус + + + + Manila + tz_names + Манила + + + + Maputo + tz_names + Мапуту + + + + Mariehamn + tz_names + Мариехамн + + + + Marigot + tz_names + Мариго + + + + Marquesas + tz_names + Маркизские острова + + + + Martinique + tz_names + Мартиника + + + + Maseru + tz_names + Масеру + + + + Matamoros + tz_names + Матаморос + + + + Mauritius + tz_names + Маврикий + + + + Mawson + tz_names + Моусон + + + + Mayotte + tz_names + Майотта + + + + Mazatlan + tz_names + Масатлан + + + + Mbabane + tz_names + Мбабане + + + + McMurdo + tz_names + Мак-Мёрдо + + + + Melbourne + tz_names + Мельбурн + + + + Menominee + tz_names + Меномини + + + + Merida + tz_names + Мерида + + + + Metlakatla + tz_names + Метлакатла + + + + Mexico City + tz_names + Мехико + + + + Midway + tz_names + Мидуэй + + + + Minsk + tz_names + Минск + + + + Miquelon + tz_names + Микелон + + + + Mogadishu + tz_names + Могадишо + + + + Monaco + tz_names + Монако + + + + Moncton + tz_names + Монктон + + + + Monrovia + tz_names + Монровия + + + + Monterrey + tz_names + Монтеррей + + + + Montevideo + tz_names + Монтевидео + + + + Montserrat + tz_names + Монтсеррат + + + + Moscow + tz_names + Москва + + + + Muscat + tz_names + Маскат + + + + Nairobi + tz_names + Найроби + + + + Nassau + tz_names + Нассау + + + + Nauru + tz_names + Науру + + + + Ndjamena + tz_names + Нджамена + + + + New York + tz_names + Нью-Йорк + + + + Niamey + tz_names + Ниамей + + + + Nicosia + tz_names + Никосия + + + + Nipigon + tz_names + Нипигон + + + + Niue + tz_names + Ниуэ + + + + Nome + tz_names + Ном + + + + Norfolk + tz_names + Норфолк + + + + Noronha + tz_names + Норонха + + + + North Dakota/Beulah + tz_names + Северная Дакота/Бьюла + + + + North Dakota/Center + tz_names + Северная Дакота/Центр + + + + North Dakota/New Salem + tz_names + Северная Дакота/Нью-Салем + + + + Nouakchott + tz_names + Нуакшот + + + + Noumea + tz_names + Нумеа + + + + Novokuznetsk + tz_names + Новокузнецк + + + + Novosibirsk + tz_names + Новосибирск + + + + Ojinaga + tz_names + Охинага + + + + Omsk + tz_names + Омск + + + + Oral + tz_names + Уральск + + + + Oslo + tz_names + Осло + + + + Ouagadougou + tz_names + Уагадугу + + + + Pago Pago + tz_names + Паго-Паго + + + + Palau + tz_names + Палау + + + + Palmer + tz_names + Палмер + + + + Panama + tz_names + Панама + + + + Pangnirtung + tz_names + Пангниртанг + + + + Paramaribo + tz_names + Парамарибо + + + + Paris + tz_names + Париж + + + + Perth + tz_names + Перт + + + + Phnom Penh + tz_names + Пномпень + + + + Phoenix + tz_names + Феникс + + + + Pitcairn + tz_names + Питкэрн + + + + Podgorica + tz_names + Подгорица + + + + Pohnpei + tz_names + Понпеи + + + + Pontianak + tz_names + Понтианак + + + + Port Moresby + tz_names + Порт-Морсби + + + + Port of Spain + tz_names + Порт-оф-Спейн + + + + Port-au-Prince + tz_names + Порт-о-Пренс + + + + Porto Velho + tz_names + Порту-Велью + + + + Porto-Novo + tz_names + Порто-Ново + + + + Prague + tz_names + Прага + + + + Puerto Rico + tz_names + Пуэрто-Рико + + + + Punta Arenas + tz_names + Пунта-Аренас + + + + Pyongyang + tz_names + Пхеньян + + + + Qatar + tz_names + Катар + + + + Qostanay + tz_names + Костанай + + + + Qyzylorda + tz_names + Кызылорда + + + + Rainy River + tz_names + Рейни Ривер + + + + Rankin Inlet + tz_names + Раротонга + + + + Rarotonga + tz_names + Раротонга + + + + Recife + tz_names + Ресифи + + + + Regina + tz_names + Реджайна + + + + Resolute + tz_names + Резолют + + + + Reunion + tz_names + Реюньон + + + + Reykjavik + tz_names + Рейкьявик + + + + Riga + tz_names + Рига + + + + Rio Branco + tz_names + Риу-Бранку + + + + Riyadh + tz_names + Эр-Рияд + + + + Rome + tz_names + Рим + + + + Rothera + tz_names + Ротера + + + + Saipan + tz_names + Сайпан + + + + Sakhalin + tz_names + Сахалин + + + + Samara + tz_names + Самара + + + + Samarkand + tz_names + Самарканд + + + + San Marino + tz_names + Сан-Марино + + + + Santarem + tz_names + Сантарен + + + + Santiago + tz_names + Сантьяго + + + + Santo Domingo + tz_names + Санто-Доминго + + + + Sao Paulo + tz_names + Сан-Паулу + + + + Sao Tome + tz_names + Сан-Томе + + + + Sarajevo + tz_names + Сараево + + + + Saratov + tz_names + Саратов + + + + Scoresbysund + tz_names + Скоресбисунд + + + + Seoul + tz_names + Сеул + + + + Shanghai + tz_names + Шанхай + + + + Simferopol + tz_names + Симферополь + + + + Singapore + tz_names + Сингапур + + + + Sitka + tz_names + Ситка + + + + Skopje + tz_names + Скопье + + + + Sofia + tz_names + София + + + + South Georgia + tz_names + Южная Георгия + + + + Srednekolymsk + tz_names + Среднеколымск + + + + St Barthelemy + tz_names + Сен-Бартельми + + + + St Helena + tz_names + о. Святой Елены + + + + St Johns + tz_names + Сент-Джонс + + + + St Kitts + tz_names + Сент-Китс + + + + St Lucia + tz_names + Сент-Люсия + + + + St Thomas + tz_names + Сент-Томас + + + + St Vincent + tz_names + Сент-Винсент + + + + Stanley + tz_names + Стэнли + + + + Stockholm + tz_names + Стокгольм + + + + Swift Current + tz_names + Свифт-Керрент + + + + Sydney + tz_names + Сидней + + + + Syowa + tz_names + Сёва + + + + Tahiti + tz_names + Таити + + + + Taipei + tz_names + Тайбэй + + + + Tallinn + tz_names + Таллин + + + + Tarawa + tz_names + Тарава + + + + Tashkent + tz_names + Ташкент + + + + Tbilisi + tz_names + Тбилиси + + + + Tegucigalpa + tz_names + Тегусигальпа + + + + Tehran + tz_names + Тегеран + + + + Thimphu + tz_names + Тхимпху + + + + Thule + tz_names + Туле + + + + Thunder Bay + tz_names + Тандер-Бей + + + + Tijuana + tz_names + Тихуана + + + + Tirane + tz_names + Тирана + + + + Tokyo + tz_names + Токио + + + + Tomsk + tz_names + Томск + + + + Tongatapu + tz_names + Тонгатапу + + + + Toronto + tz_names + Торонто + + + + Tortola + tz_names + Тортола + + + + Tripoli + tz_names + Триполи + + + + Troll + tz_names + Тролл + + + + Tunis + tz_names + Тунис + + + + Ulaanbaatar + tz_names + Улан-Батор + + + + Ulyanovsk + tz_names + Ульяновск + + + + Urumqi + tz_names + Урумчи + + + + Ust-Nera + tz_names + Усть-Нера + + + + Uzhgorod + tz_names + Ужгород + + + + Vaduz + tz_names + Вадуц + + + + Vancouver + tz_names + Ванкувер + + + + Vatican + tz_names + Ватикан + + + + Vienna + tz_names + Вена + + + + Vientiane + tz_names + Вьентьян + + + + Vilnius + tz_names + Вильнюс + + + + Vladivostok + tz_names + Владивосток + + + + Volgograd + tz_names + Волгоград + + + + Vostok + tz_names + Восток + + + + Wake + tz_names + Уэйк + + + + Wallis + tz_names + Уоллис + + + + Warsaw + tz_names + Варшава + + + + Whitehorse + tz_names + Уайтхорс + + + + Windhoek + tz_names + Виндхук + + + + Winnipeg + tz_names + Виннипег + + + + Yakutat + tz_names + Якутат + + + + Yakutsk + tz_names + Якутск + + + + Yangon + tz_names + Янгон + + + + Yekaterinburg + tz_names + Екатеринбург + + + + Yellowknife + tz_names + Йеллоунайф + + + + Yerevan + tz_names + Ереван + + + + Zagreb + tz_names + Загреб + + + + Zaporozhye + tz_names + Запорожье + + + + Zurich + tz_names + Цюрих + + + diff --git a/lang/tz_sv.ts b/lang/tz_sv.ts new file mode 100644 index 000000000..c871dbac5 --- /dev/null +++ b/lang/tz_sv.ts @@ -0,0 +1,81 @@ + + + + + QObject + + + Africa + tz_regions + Afrika + + + + America + tz_regions + Amerika + + + + Antarctica + tz_regions + Antarktis + + + + Asia + tz_regions + Asien + + + + Australia + tz_regions + Australien + + + + Europe + tz_regions + Europa + + + + Indian + tz_regions + Indien + + + + Aqtobe + tz_names + Aqtöbe + + + + Athens + tz_names + Aten + + + + Azores + tz_names + Azorerna + + + + Kiev + tz_names + Kyiv + + + + Moscow + tz_names + Moskva + + + diff --git a/lang/tz_tg.ts b/lang/tz_tg.ts new file mode 100644 index 000000000..a5888fb94 --- /dev/null +++ b/lang/tz_tg.ts @@ -0,0 +1,2620 @@ + + + + + + QObject + + + Africa + tz_regions + Африка + + + + America + tz_regions + Америка + + + + Antarctica + tz_regions + Антарктида + + + + Arctic + tz_regions + Арктика + + + + Asia + tz_regions + Осиё + + + + Atlantic + tz_regions + Уқёнуси Атлантикӣ + + + + Australia + tz_regions + Австралия + + + + Europe + tz_regions + Аврупо + + + + Indian + tz_regions + Уқёнуси Ҳинд + + + + Pacific + tz_regions + Уқёнуси Ором + + + + Abidjan + tz_names + Абиҷон + + + + Accra + tz_names + Аккра + + + + Adak + tz_names + Адак + + + + Addis Ababa + tz_names + Аддис-Абаба + + + + Adelaide + tz_names + Аделаида + + + + Aden + tz_names + Аден + + + + Algiers + tz_names + Алҷазоир + + + + Almaty + tz_names + Алмаато + + + + Amman + tz_names + Уммон + + + + Amsterdam + tz_names + Амстердам + + + + Anadyr + tz_names + Анадир + + + + Anchorage + tz_names + Анкориҷ + + + + Andorra + tz_names + Андорра + + + + Anguilla + tz_names + Ангвелла + + + + Antananarivo + tz_names + Антананариву + + + + Antigua + tz_names + Антигуа + + + + Apia + tz_names + Апиа + + + + Aqtau + tz_names + Актау + + + + Aqtobe + tz_names + Актобе + + + + Araguaina + tz_names + Арагуаина + + + + Argentina/Buenos Aires + tz_names + Аргентина/Буэнос-Айрес + + + + Argentina/Catamarca + tz_names + Аргентина/Катамарка + + + + Argentina/Cordoba + tz_names + Аргентина/Кордоба + + + + Argentina/Jujuy + tz_names + Аргентина/Ҷуҷуй + + + + Argentina/La Rioja + tz_names + Аргентина/Ла Риоха + + + + Argentina/Mendoza + tz_names + Аргентина/Мендоза + + + + Argentina/Rio Gallegos + tz_names + Аргентина/Рио Галегос + + + + Argentina/Salta + tz_names + Аргентина/Салта + + + + Argentina/San Juan + tz_names + Аргентина/Сан Ҷуан + + + + Argentina/San Luis + tz_names + Аргентина/Сан Луис + + + + Argentina/Tucuman + tz_names + Аргентина/Тукуман + + + + Argentina/Ushuaia + tz_names + Аргентина/Ушуайя + + + + Aruba + tz_names + Аруба + + + + Ashgabat + tz_names + Ашқобод + + + + Asmara + tz_names + Асмэра + + + + Astrakhan + tz_names + Астрахан + + + + Asuncion + tz_names + Асунсон + + + + Athens + tz_names + Афина + + + + Atikokan + tz_names + Атикокак + + + + Atyrau + tz_names + Атирау + + + + Auckland + tz_names + Окленд + + + + Azores + tz_names + Азор + + + + Baghdad + tz_names + Бағдод + + + + Bahia + tz_names + Баҳя + + + + Bahia Banderas + tz_names + Баҳя Бандерас + + + + Bahrain + tz_names + Баҳрайн + + + + Baku + tz_names + Боку + + + + Bamako + tz_names + Бомако + + + + Bangkok + tz_names + Бангкок + + + + Bangui + tz_names + Банги + + + + Banjul + tz_names + Банжул + + + + Barbados + tz_names + Барбадос + + + + Barnaul + tz_names + Барнаул + + + + Beirut + tz_names + Бейрут + + + + Belem + tz_names + Белем + + + + Belgrade + tz_names + Белград + + + + Belize + tz_names + Белиз + + + + Berlin + tz_names + Берлин + + + + Bermuda + tz_names + Бермуда + + + + Bishkek + tz_names + Бишкек + + + + Bissau + tz_names + Бисау + + + + Blanc-Sablon + tz_names + Бланк-Саблон + + + + Blantyre + tz_names + Блантайр + + + + Boa Vista + tz_names + Боа-Виста + + + + Bogota + tz_names + Богота + + + + Boise + tz_names + Бойсе + + + + Bougainville + tz_names + Бугенвил + + + + Bratislava + tz_names + Братислава + + + + Brazzaville + tz_names + Браззавил + + + + Brisbane + tz_names + Брисбен + + + + Broken Hill + tz_names + Брокен-Хилл + + + + Brunei + tz_names + Бруней + + + + Brussels + tz_names + Брюссел + + + + Bucharest + tz_names + Бухарест + + + + Budapest + tz_names + Будапешт + + + + Bujumbura + tz_names + Буҷумбура + + + + Busingen + tz_names + Бусинген + + + + Cairo + tz_names + Қоҳира + + + + Cambridge Bay + tz_names + Кеймбриҷ-Бей + + + + Campo Grande + tz_names + Кампо-Граде + + + + Canary + tz_names + Канарӣ + + + + Cancun + tz_names + Канкун + + + + Cape Verde + tz_names + Кабо-Верде + + + + Caracas + tz_names + Каракас + + + + Casablanca + tz_names + Касабланка + + + + Casey + tz_names + Кейси + + + + Cayenne + tz_names + Кайенна + + + + Cayman + tz_names + Кайман + + + + Ceuta + tz_names + Сеута + + + + Chagos + tz_names + Чагос + + + + Chatham + tz_names + Чатам + + + + Chicago + tz_names + Чикаго + + + + Chihuahua + tz_names + Чихуахуа + + + + Chisinau + tz_names + Кишинев + + + + Chita + tz_names + Чита + + + + Choibalsan + tz_names + Чойбалсан + + + + Christmas + tz_names + Крисмас + + + + Chuuk + tz_names + Чуук + + + + Cocos + tz_names + Кокос + + + + Colombo + tz_names + Коломбо + + + + Comoro + tz_names + Коморо + + + + Conakry + tz_names + Конакри + + + + Copenhagen + tz_names + Копенгаген + + + + Costa Rica + tz_names + Коста-Рика + + + + Creston + tz_names + Крестон + + + + Cuiaba + tz_names + Куяба + + + + Curacao + tz_names + Кюрасао + + + + Currie + tz_names + Керри + + + + Dakar + tz_names + Дакар + + + + Damascus + tz_names + Димишқ + + + + Danmarkshavn + tz_names + Данмарксҳавн + + + + Dar es Salaam + tz_names + Даруссалам + + + + Darwin + tz_names + Дарвин + + + + Davis + tz_names + Дейвис + + + + Dawson + tz_names + Доусон + + + + Dawson Creek + tz_names + Доусон-Крик + + + + Denver + tz_names + Денвер + + + + Detroit + tz_names + Детройт + + + + Dhaka + tz_names + Дакка + + + + Dili + tz_names + Дили + + + + Djibouti + tz_names + Ҷибути + + + + Dominica + tz_names + Доминика + + + + Douala + tz_names + Доуала + + + + Dubai + tz_names + Дубай + + + + Dublin + tz_names + Дублин + + + + DumontDUrville + tz_names + Дюмон д’Юрвил + + + + Dushanbe + tz_names + Душанбе + + + + Easter + tz_names + Писҳо + + + + Edmonton + tz_names + Эдмонтон + + + + Efate + tz_names + Эфате + + + + Eirunepe + tz_names + Эйрунепе + + + + El Aaiun + tz_names + Эл-Аюн + + + + El Salvador + tz_names + Ал-Салвадор + + + + Enderbury + tz_names + Эндербери + + + + Eucla + tz_names + Юкла + + + + Fakaofo + tz_names + Факаофо + + + + Famagusta + tz_names + Фамагуста + + + + Faroe + tz_names + Фарер + + + + Fiji + tz_names + Фиҷи + + + + Fort Nelson + tz_names + Форт Нелсон + + + + Fortaleza + tz_names + Форталеза + + + + Freetown + tz_names + Фритаун + + + + Funafuti + tz_names + Фунафути + + + + Gaborone + tz_names + Габороне + + + + Galapagos + tz_names + Галапагос + + + + Gambier + tz_names + Гамбир + + + + Gaza + tz_names + Газа + + + + Gibraltar + tz_names + Гибралтар + + + + Glace Bay + tz_names + Глас Бэй + + + + Godthab + tz_names + Готхоб + + + + Goose Bay + tz_names + Гус-Бэй + + + + Grand Turk + tz_names + Гранд Турк + + + + Grenada + tz_names + Гренада + + + + Guadalcanal + tz_names + Гуадалканал + + + + Guadeloupe + tz_names + Гваделупа + + + + Guam + tz_names + Гуам + + + + Guatemala + tz_names + Гватемала + + + + Guayaquil + tz_names + Гуаякил + + + + Guernsey + tz_names + Гернси + + + + Guyana + tz_names + Гайана + + + + Halifax + tz_names + Галифакс + + + + Harare + tz_names + Хараре + + + + Havana + tz_names + Гавана + + + + Hebron + tz_names + Ҳеврон + + + + Helsinki + tz_names + Ҳелсинки + + + + Hermosillo + tz_names + Ҳермосилло + + + + Ho Chi Minh + tz_names + Ҳошимин + + + + Hobart + tz_names + Ҳобарт + + + + Hong Kong + tz_names + Ҳонгконг + + + + Honolulu + tz_names + Гонолулу + + + + Hovd + tz_names + Ҳовд + + + + Indiana/Indianapolis + tz_names + Индиана/Индианаполис + + + + Indiana/Knox + tz_names + Индиана/Кнокс + + + + Indiana/Marengo + tz_names + Индиана/Маренго + + + + Indiana/Petersburg + tz_names + Индиана/Питерсберг + + + + Indiana/Tell City + tz_names + Индиана/Телл Сити + + + + Indiana/Vevay + tz_names + Индиана/Вивэй + + + + Indiana/Vincennes + tz_names + Индиана/Винсенс + + + + Indiana/Winamac + tz_names + Индиана/Винамак + + + + Inuvik + tz_names + Инувик + + + + Iqaluit + tz_names + Икалуит + + + + Irkutsk + tz_names + Иркутск + + + + Isle of Man + tz_names + Ҷазираи Мэн + + + + Istanbul + tz_names + Стамбул + + + + Jakarta + tz_names + Ҷакарта + + + + Jamaica + tz_names + Ҷомайка + + + + Jayapura + tz_names + Ҷайапура + + + + Jersey + tz_names + Ҷерси + + + + Jerusalem + tz_names + Байтулмуқаддас + + + + Johannesburg + tz_names + Йоханнесбург + + + + Juba + tz_names + Ҷуба + + + + Juneau + tz_names + Ҷуно + + + + Kabul + tz_names + Кобул + + + + Kaliningrad + tz_names + Калининград + + + + Kamchatka + tz_names + Камчатка + + + + Kampala + tz_names + Кампала + + + + Karachi + tz_names + Қарочӣ + + + + Kathmandu + tz_names + Катманду + + + + Kentucky/Louisville + tz_names + Кентуки/Луисвилл + + + + Kentucky/Monticello + tz_names + Кентуки/Монтиселло + + + + Kerguelen + tz_names + Кергелен + + + + Khandyga + tz_names + Хандига + + + + Khartoum + tz_names + Хартум + + + + Kiev + tz_names + Киев + + + + Kigali + tz_names + Кигали + + + + Kinshasa + tz_names + Киншаса + + + + Kiritimati + tz_names + Киритимати + + + + Kirov + tz_names + Киров + + + + Kolkata + tz_names + Калкута + + + + Kosrae + tz_names + Косра + + + + Kralendijk + tz_names + Кралендейк + + + + Krasnoyarsk + tz_names + Красноярск + + + + Kuala Lumpur + tz_names + Куала-Лумпур + + + + Kuching + tz_names + Кучинг + + + + Kuwait + tz_names + Қувайт + + + + Kwajalein + tz_names + Кваҷалейн + + + + La Paz + tz_names + Ла-Пас + + + + Lagos + tz_names + Лагос + + + + Libreville + tz_names + Либревил + + + + Lima + tz_names + Лима + + + + Lindeman + tz_names + Линдерман + + + + Lisbon + tz_names + Лиссабон + + + + Ljubljana + tz_names + Любляна + + + + Lome + tz_names + Ломе + + + + London + tz_names + Лондон + + + + Longyearbyen + tz_names + Лонгйир + + + + Lord Howe + tz_names + Лорд-Хау + + + + Los Angeles + tz_names + Лос-Анҷелес + + + + Lower Princes + tz_names + Лоуэр-Принс + + + + Luanda + tz_names + Луанда + + + + Lubumbashi + tz_names + Лубумбаши + + + + Lusaka + tz_names + Лусака + + + + Luxembourg + tz_names + Люксембург + + + + Macau + tz_names + Макау + + + + Maceio + tz_names + Масейо + + + + Macquarie + tz_names + Макгвайр + + + + Madeira + tz_names + Мадейра + + + + Madrid + tz_names + Мадрид + + + + Magadan + tz_names + Магадан + + + + Mahe + tz_names + Маэ + + + + Majuro + tz_names + Маҷуро + + + + Makassar + tz_names + Макассар + + + + Malabo + tz_names + Малабо + + + + Maldives + tz_names + Малдив + + + + Malta + tz_names + Малта + + + + Managua + tz_names + Манагуа + + + + Manaus + tz_names + Манаус + + + + Manila + tz_names + Манила + + + + Maputo + tz_names + Мапуту + + + + Mariehamn + tz_names + Мариехамн + + + + Marigot + tz_names + Маригот + + + + Marquesas + tz_names + Маркизас + + + + Martinique + tz_names + Мартиника + + + + Maseru + tz_names + Масеру + + + + Matamoros + tz_names + Матаморос + + + + Mauritius + tz_names + Маврикий + + + + Mawson + tz_names + Маусон + + + + Mayotte + tz_names + Майотта + + + + Mazatlan + tz_names + Масатлан + + + + Mbabane + tz_names + Мбабане + + + + McMurdo + tz_names + Мак-Мердо + + + + Melbourne + tz_names + Мелбурн + + + + Menominee + tz_names + Меномини + + + + Merida + tz_names + Мерида + + + + Metlakatla + tz_names + Метлакатла + + + + Mexico City + tz_names + Мехико + + + + Midway + tz_names + Мидуэй + + + + Minsk + tz_names + Минск + + + + Miquelon + tz_names + Микелон + + + + Mogadishu + tz_names + Могадишо + + + + Monaco + tz_names + Монако + + + + Moncton + tz_names + Монктон + + + + Monrovia + tz_names + Монровия + + + + Monterrey + tz_names + Монтеррей + + + + Montevideo + tz_names + Монтевидео + + + + Montserrat + tz_names + Монтсеррат + + + + Moscow + tz_names + Москав + + + + Muscat + tz_names + Масқат + + + + Nairobi + tz_names + Найроби + + + + Nassau + tz_names + Нассау + + + + Nauru + tz_names + Новурӯ + + + + Ndjamena + tz_names + Нҷамена + + + + New York + tz_names + Ню-Йорк + + + + Niamey + tz_names + Ниамей + + + + Nicosia + tz_names + Никосия + + + + Nipigon + tz_names + Нипигон + + + + Niue + tz_names + Нива + + + + Nome + tz_names + Ном + + + + Norfolk + tz_names + Норфолк + + + + Noronha + tz_names + Нороня + + + + North Dakota/Beulah + tz_names + Дакотаи Шимолӣ/Бойла + + + + North Dakota/Center + tz_names + Дакотаи Шимолӣ/Марказ + + + + North Dakota/New Salem + tz_names + Дакотаи Шимолӣ/Ню Сейлем + + + + Nouakchott + tz_names + Нуакшот + + + + Noumea + tz_names + Нумеа + + + + Novokuznetsk + tz_names + Новокузнетск + + + + Novosibirsk + tz_names + Новосибирск + + + + Ojinaga + tz_names + Оҷинага + + + + Omsk + tz_names + Омск + + + + Oral + tz_names + Орал + + + + Oslo + tz_names + Осло + + + + Ouagadougou + tz_names + Уагадугу + + + + Pago Pago + tz_names + Паго-Паго + + + + Palau + tz_names + Палаув + + + + Palmer + tz_names + Палмер + + + + Panama + tz_names + Панама + + + + Pangnirtung + tz_names + Пангниртунг + + + + Paramaribo + tz_names + Парамарибо + + + + Paris + tz_names + Париж + + + + Perth + tz_names + Перт + + + + Phnom Penh + tz_names + Пномпен + + + + Phoenix + tz_names + Феникс + + + + Pitcairn + tz_names + Питкоирн + + + + Podgorica + tz_names + Подгоритса + + + + Pohnpei + tz_names + Понпеи + + + + Pontianak + tz_names + Понтианак + + + + Port Moresby + tz_names + Порт-Морсби + + + + Port of Spain + tz_names + Порт-оф-Спейн + + + + Port-au-Prince + tz_names + Порт-о-Пренс + + + + Porto Velho + tz_names + Порту-Велю + + + + Porto-Novo + tz_names + Порто-Ново + + + + Prague + tz_names + Прага + + + + Puerto Rico + tz_names + Пуэрто-Рико + + + + Punta Arenas + tz_names + Пунта Аренас + + + + Pyongyang + tz_names + Пхенян + + + + Qatar + tz_names + Қатар + + + + Qostanay + tz_names + Костанай + + + + Qyzylorda + tz_names + Қизилорда + + + + Rainy River + tz_names + Рейни Ривер + + + + Rankin Inlet + tz_names + Ранкин-Инлет + + + + Rarotonga + tz_names + Раротонга + + + + Recife + tz_names + Ресиф + + + + Regina + tz_names + Регина + + + + Resolute + tz_names + Резолют + + + + Reunion + tz_names + Реюнон + + + + Reykjavik + tz_names + Рейкявик + + + + Riga + tz_names + Рига + + + + Rio Branco + tz_names + Риу-Бранку + + + + Riyadh + tz_names + Арриёз + + + + Rome + tz_names + Рим + + + + Rothera + tz_names + Ротера + + + + Saipan + tz_names + Сайпан + + + + Sakhalin + tz_names + Сахалин + + + + Samara + tz_names + Самара + + + + Samarkand + tz_names + Самарқанд + + + + San Marino + tz_names + Сан-Марино + + + + Santarem + tz_names + Сантарем + + + + Santiago + tz_names + Сантяго + + + + Santo Domingo + tz_names + Санто-Доминго + + + + Sao Paulo + tz_names + Сан-Паулу + + + + Sao Tome + tz_names + Сан-Томе + + + + Sarajevo + tz_names + Сараево + + + + Saratov + tz_names + Саратов + + + + Scoresbysund + tz_names + Скорсбисунд + + + + Seoul + tz_names + Сеул + + + + Shanghai + tz_names + Шанхай + + + + Simferopol + tz_names + Симферопол + + + + Singapore + tz_names + Сингапур + + + + Sitka + tz_names + Ситка + + + + Skopje + tz_names + Скопе + + + + Sofia + tz_names + София + + + + South Georgia + tz_names + Ҷорҷияи Ҷанубӣ + + + + Srednekolymsk + tz_names + Среднеколимск + + + + St Barthelemy + tz_names + Сент-Бартелми + + + + St Helena + tz_names + Сент-Ҳелена + + + + St Johns + tz_names + Сент-Ҷонс + + + + St Kitts + tz_names + Сент-Китс + + + + St Lucia + tz_names + Сент-Люсиа + + + + St Thomas + tz_names + Сент-Томас + + + + St Vincent + tz_names + Сент-Винсент + + + + Stanley + tz_names + Стэнли + + + + Stockholm + tz_names + Стокголм + + + + Swift Current + tz_names + Свифт Каррент + + + + Sydney + tz_names + Сидней + + + + Syowa + tz_names + Сева + + + + Tahiti + tz_names + Таити + + + + Taipei + tz_names + Тайбэй + + + + Tallinn + tz_names + Таллин + + + + Tarawa + tz_names + Тарава + + + + Tashkent + tz_names + Тошканд + + + + Tbilisi + tz_names + Тбилиси + + + + Tegucigalpa + tz_names + Тегусигалпа + + + + Tehran + tz_names + Теҳрон + + + + Thimphu + tz_names + Тхимпху + + + + Thule + tz_names + Фула + + + + Thunder Bay + tz_names + Тандер-Бей + + + + Tijuana + tz_names + Тихуана + + + + Tirane + tz_names + Тирана + + + + Tokyo + tz_names + Токио + + + + Tomsk + tz_names + Томск + + + + Tongatapu + tz_names + Тонгатапу + + + + Toronto + tz_names + Торонто + + + + Tortola + tz_names + Тортола + + + + Tripoli + tz_names + Триполи + + + + Troll + tz_names + Тролл + + + + Tunis + tz_names + Тунис + + + + Ulaanbaatar + tz_names + Улон-Ботур + + + + Ulyanovsk + tz_names + Уляновск + + + + Urumqi + tz_names + Урумчи + + + + Ust-Nera + tz_names + Уст-Нера + + + + Uzhgorod + tz_names + Ужгород + + + + Vaduz + tz_names + Вадуз + + + + Vancouver + tz_names + Ванкувер + + + + Vatican + tz_names + Ватикан + + + + Vienna + tz_names + Вена + + + + Vientiane + tz_names + Вентян + + + + Vilnius + tz_names + Вилнюс + + + + Vladivostok + tz_names + Владивосток + + + + Volgograd + tz_names + Волгоград + + + + Vostok + tz_names + Восток + + + + Wake + tz_names + Вэйк + + + + Wallis + tz_names + Уоллис + + + + Warsaw + tz_names + Варшава + + + + Whitehorse + tz_names + Уайтхорс + + + + Windhoek + tz_names + Виндхук + + + + Winnipeg + tz_names + Виннипег + + + + Yakutat + tz_names + Якутат + + + + Yakutsk + tz_names + Якутск + + + + Yangon + tz_names + Янгон + + + + Yekaterinburg + tz_names + Екатеринбург + + + + Yellowknife + tz_names + Йеллоунайф + + + + Yerevan + tz_names + Ереван + + + + Zagreb + tz_names + Загреб + + + + Zaporozhye + tz_names + Запорожие + + + + Zurich + tz_names + Тсурих + + + diff --git a/lang/tz_uk.ts b/lang/tz_uk.ts index 6059079ca..3e06226c8 100644 --- a/lang/tz_uk.ts +++ b/lang/tz_uk.ts @@ -1,4 +1,7 @@ + @@ -2605,7 +2608,7 @@ Zaporozhye tz_names - + Запоріжжя diff --git a/lang/tz_vi.ts b/lang/tz_vi.ts new file mode 100644 index 000000000..b7149efa9 --- /dev/null +++ b/lang/tz_vi.ts @@ -0,0 +1,2617 @@ + + + + + QObject + + + Africa + tz_regions + Châu phi + + + + America + tz_regions + Châu Mỹ + + + + Antarctica + tz_regions + Nam Cực + + + + Arctic + tz_regions + Bắc cực + + + + Asia + tz_regions + Châu Á + + + + Atlantic + tz_regions + Đại Tây Dương + + + + Australia + tz_regions + Châu Úc + + + + Europe + tz_regions + Châu Âu + + + + Indian + tz_regions + Ấn Độ + + + + Pacific + tz_regions + Thái Bình Dương + + + + Abidjan + tz_names + Abidjan + + + + Accra + tz_names + Accra + + + + Adak + tz_names + Adak + + + + Addis Ababa + tz_names + A-đi A-ba-ba + + + + Adelaide + tz_names + Adelaide + + + + Aden + tz_names + Aden + + + + Algiers + tz_names + Algiers + + + + Almaty + tz_names + Almaty + + + + Amman + tz_names + Amman + + + + Amsterdam + tz_names + Am-xtéc-đam + + + + Anadyr + tz_names + Anadyr + + + + Anchorage + tz_names + Anchorage + + + + Andorra + tz_names + Andorra + + + + Anguilla + tz_names + An-gui-la + + + + Antananarivo + tz_names + An-ta-na-na-ri-vô + + + + Antigua + tz_names + Antigua + + + + Apia + tz_names + A-pi-a + + + + Aqtau + tz_names + Aqtau + + + + Aqtobe + tz_names + Aqtobe + + + + Araguaina + tz_names + Araguaina + + + + Argentina/Buenos Aires + tz_names + Ác-hen-ti-na/Buenos Aires + + + + Argentina/Catamarca + tz_names + Ác-hen-ti-na/Catamarca + + + + Argentina/Cordoba + tz_names + Ác-hen-ti-na/Cordoba + + + + Argentina/Jujuy + tz_names + Ác-hen-ti-na/Jujuy + + + + Argentina/La Rioja + tz_names + Ác-hen-ti-na/La Rioja + + + + Argentina/Mendoza + tz_names + Ác-hen-ti-na/Mendoza + + + + Argentina/Rio Gallegos + tz_names + Ác-hen-ti-na/Rio Gallegos + + + + Argentina/Salta + tz_names + Ác-hen-ti-na/Salta + + + + Argentina/San Juan + tz_names + Ác-hen-ti-na/San Juan + + + + Argentina/San Luis + tz_names + Ác-hen-ti-na/San Luis + + + + Argentina/Tucuman + tz_names + Ác-hen-ti-na/Tucuman + + + + Argentina/Ushuaia + tz_names + Ác-hen-ti-na/Ushuaia + + + + Aruba + tz_names + A-ru-ba + + + + Ashgabat + tz_names + A-sơ-kha0bast + + + + Asmara + tz_names + Át-ma-ra + + + + Astrakhan + tz_names + Astrakhan + + + + Asuncion + tz_names + A-sun-sân + + + + Athens + tz_names + A-ten + + + + Atikokan + tz_names + Atikokan + + + + Atyrau + tz_names + Atyrau + + + + Auckland + tz_names + Auckland + + + + Azores + tz_names + Azores + + + + Baghdad + tz_names + Bát-đa + + + + Bahia + tz_names + Bahia + + + + Bahia Banderas + tz_names + Bahia Banderas + + + + Bahrain + tz_names + Ba-ranh + + + + Baku + tz_names + Ba-cu + + + + Bamako + tz_names + Bamako + + + + Bangkok + tz_names + Băng Cốc + + + + Bangui + tz_names + Ban-gui + + + + Banjul + tz_names + Ban-giun + + + + Barbados + tz_names + Bác-ba-đốt + + + + Barnaul + tz_names + Barnaul + + + + Beirut + tz_names + Bê-rút + + + + Belem + tz_names + Belem + + + + Belgrade + tz_names + Bê-ô-grát + + + + Belize + tz_names + Bê-li-xê + + + + Berlin + tz_names + Béc Lin + + + + Bermuda + tz_names + Béc-mu-đa + + + + Bishkek + tz_names + Bi-skec + + + + Bissau + tz_names + Bit-xao + + + + Blanc-Sablon + tz_names + Blanc-Sablon + + + + Blantyre + tz_names + Blantyre + + + + Boa Vista + tz_names + Boa Vista + + + + Bogota + tz_names + Bô-gô-ta + + + + Boise + tz_names + Boise + + + + Bougainville + tz_names + Bougainville + + + + Bratislava + tz_names + Bra-tít-xla-va + + + + Brazzaville + tz_names + Brazzaville + + + + Brisbane + tz_names + Brisbane + + + + Broken Hill + tz_names + Đồi Broken + + + + Brunei + tz_names + Bru-nây + + + + Brussels + tz_names + Brúc-xen + + + + Bucharest + tz_names + Bu-ca-rét + + + + Budapest + tz_names + Bu-đa-pét + + + + Bujumbura + tz_names + Bu-gium-bu-ra + + + + Busingen + tz_names + Busingen + + + + Cairo + tz_names + Cai Rô + + + + Cambridge Bay + tz_names + Vịnh Cambridge + + + + Campo Grande + tz_names + Campo Grande + + + + Canary + tz_names + Canary + + + + Cancun + tz_names + Cancun + + + + Cape Verde + tz_names + Cáp-ve + + + + Caracas + tz_names + Ca-ra-cát + + + + Casablanca + tz_names + Casablanca + + + + Casey + tz_names + Casey + + + + Cayenne + tz_names + Cayenne + + + + Cayman + tz_names + Quần đảo Cay-man + + + + Ceuta + tz_names + Ceuta + + + + Chagos + tz_names + Chagos + + + + Chatham + tz_names + Chatham + + + + Chicago + tz_names + Chi Ca Gô + + + + Chihuahua + tz_names + Chihuahua + + + + Chisinau + tz_names + Ki-si-nhốp + + + + Chita + tz_names + Chita + + + + Choibalsan + tz_names + Choibalsan + + + + Christmas + tz_names + Christmas + + + + Chuuk + tz_names + Chuuk + + + + Cocos + tz_names + Cocos + + + + Colombo + tz_names + Cô Lôm Bô + + + + Comoro + tz_names + (Liên bang) Cô-mo + + + + Conakry + tz_names + Cô-na-cri + + + + Copenhagen + tz_names + Cô-pen-ha-gen + + + + Costa Rica + tz_names + Cốt-xta-ri-ca + + + + Creston + tz_names + Creston + + + + Cuiaba + tz_names + Cuiaba + + + + Curacao + tz_names + Cu-ra-xao + + + + Currie + tz_names + Currie + + + + Dakar + tz_names + Dakar + + + + Damascus + tz_names + Đa-mát + + + + Danmarkshavn + tz_names + Danmarkshavn + + + + Dar es Salaam + tz_names + Dar es Salaam + + + + Darwin + tz_names + Darwin + + + + Davis + tz_names + Davis + + + + Dawson + tz_names + Dawson + + + + Dawson Creek + tz_names + Dawson Creek + + + + Denver + tz_names + Denver + + + + Detroit + tz_names + Detroit + + + + Dhaka + tz_names + Đắc-ca + + + + Dili + tz_names + Đi-li + + + + Djibouti + tz_names + Cộng hòa Gi-bu-ti + + + + Dominica + tz_names + Đô-mi-ni-ca-na + + + + Douala + tz_names + Douala + + + + Dubai + tz_names + Đu Bai + + + + Dublin + tz_names + Đu-blin + + + + DumontDUrville + tz_names + DumontDUrville + + + + Dushanbe + tz_names + Đu-san-be + + + + Easter + tz_names + Đảo Phục Sinh + + + + Edmonton + tz_names + Edmonton + + + + Efate + tz_names + Efate + + + + Eirunepe + tz_names + Eirunepe + + + + El Aaiun + tz_names + El Aaiun + + + + El Salvador + tz_names + En Xan-va-đo + + + + Enderbury + tz_names + Đảo Enderbury + + + + Eucla + tz_names + Eucla + + + + Fakaofo + tz_names + Fakaofo + + + + Famagusta + tz_names + Famagusta + + + + Faroe + tz_names + Quần đảo Fa-rô + + + + Fiji + tz_names + Phi-gi + + + + Fort Nelson + tz_names + Fort Nelson + + + + Fortaleza + tz_names + Fortaleza + + + + Freetown + tz_names + Phritao + + + + Funafuti + tz_names + Funafuti + + + + Gaborone + tz_names + Ga-bô-rô-nê + + + + Galapagos + tz_names + Quần đảo Galapagos + + + + Gambier + tz_names + Gambier + + + + Gaza + tz_names + Dải Gaza + + + + Gibraltar + tz_names + Gibraltar + + + + Glace Bay + tz_names + Vịnh Glace + + + + Godthab + tz_names + Nu-úc + + + + Goose Bay + tz_names + Vịnh Goose + + + + Grand Turk + tz_names + Đảo Grand Turk + + + + Grenada + tz_names + Grê-na-đa + + + + Guadalcanal + tz_names + Guadalcanal + + + + Guadeloupe + tz_names + Goa-đê-lốp + + + + Guam + tz_names + Guam + + + + Guatemala + tz_names + Goa-tê-ma-la + + + + Guayaquil + tz_names + Guayaquil + + + + Guernsey + tz_names + Guernsey + + + + Guyana + tz_names + Guy-a-na + + + + Halifax + tz_names + Halifa + + + + Harare + tz_names + Ha-ra-rê + + + + Havana + tz_names + Ha Va Na + + + + Hebron + tz_names + Hebron + + + + Helsinki + tz_names + Hen-sin-ki + + + + Hermosillo + tz_names + Hermosillo + + + + Ho Chi Minh + tz_names + Hồ Chí Minh + + + + Hobart + tz_names + Hobart + + + + Hong Kong + tz_names + Hồng Công + + + + Honolulu + tz_names + Honolulu + + + + Hovd + tz_names + Khovd + + + + Indiana/Indianapolis + tz_names + Indiana/Indianapolis + + + + Indiana/Knox + tz_names + Indiana/Knox + + + + Indiana/Marengo + tz_names + Indiana/Marengo + + + + Indiana/Petersburg + tz_names + Indiana/Petersburg + + + + Indiana/Tell City + tz_names + Indiana/Tell City + + + + Indiana/Vevay + tz_names + Indiana/Vevay + + + + Indiana/Vincennes + tz_names + Indiana/Vincennes + + + + Indiana/Winamac + tz_names + Indiana/Winamac + + + + Inuvik + tz_names + Inuvik + + + + Iqaluit + tz_names + Iqaluit + + + + Irkutsk + tz_names + Irkutsk + + + + Isle of Man + tz_names + Đảo Man + + + + Istanbul + tz_names + Istanbul + + + + Jakarta + tz_names + Gia Các Ta + + + + Jamaica + tz_names + Gia-mai-ca + + + + Jayapura + tz_names + Jayapura + + + + Jersey + tz_names + Jersey + + + + Jerusalem + tz_names + Giê-ru-xa-lem + + + + Johannesburg + tz_names + Johannesburg + + + + Juba + tz_names + Juba + + + + Juneau + tz_names + Juneau + + + + Kabul + tz_names + Ka-bun + + + + Kaliningrad + tz_names + Kaliningrad + + + + Kamchatka + tz_names + Bán đảo Kamchatka + + + + Kampala + tz_names + Campala + + + + Karachi + tz_names + Karachi + + + + Kathmandu + tz_names + Cát-man-đu + + + + Kentucky/Louisville + tz_names + Ken túc ky/Louisville + + + + Kentucky/Monticello + tz_names + Ken túc ky/Monticello + + + + Kerguelen + tz_names + Đảo Kerguelen + + + + Khandyga + tz_names + Khandyga + + + + Khartoum + tz_names + Khác-tum + + + + Kiev + tz_names + Kyiv + + + + Kigali + tz_names + Ki-ga-li + + + + Kinshasa + tz_names + Kin-xa-sa + + + + Kiritimati + tz_names + Kiritimati + + + + Kirov + tz_names + Kirov + + + + Kolkata + tz_names + Kolkata + + + + Kosrae + tz_names + Kosrae + + + + Kralendijk + tz_names + Kralendijk + + + + Krasnoyarsk + tz_names + Krasnoyarsk + + + + Kuala Lumpur + tz_names + Kuala Lam Pơ + + + + Kuching + tz_names + Kuching + + + + Kuwait + tz_names + Kuwait + + + + Kwajalein + tz_names + Kwajalein + + + + La Paz + tz_names + La Pa-xơ + + + + Lagos + tz_names + Lagos + + + + Libreville + tz_names + Li-brơ-vin + + + + Lima + tz_names + Lima + + + + Lindeman + tz_names + Hồ Lindeman + + + + Lisbon + tz_names + Lít Bon + + + + Ljubljana + tz_names + Liu-bli-an-na + + + + Lome + tz_names + Lô-mê + + + + London + tz_names + Luân Đôn + + + + Longyearbyen + tz_names + Longyearbyen + + + + Lord Howe + tz_names + Đảo Lord Howe + + + + Los Angeles + tz_names + Lốt Ăng Giơ Lét + + + + Lower Princes + tz_names + Lower Princes + + + + Luanda + tz_names + Lu-an-đa + + + + Lubumbashi + tz_names + Lubumbashi + + + + Lusaka + tz_names + Lu-xa-ca + + + + Luxembourg + tz_names + Lúc-xăm-bua + + + + Macau + tz_names + Ma Cao + + + + Maceio + tz_names + Maceio + + + + Macquarie + tz_names + Macquarie + + + + Madeira + tz_names + Madeira + + + + Madrid + tz_names + Ma Rích + + + + Magadan + tz_names + Magadan + + + + Mahe + tz_names + Mahe + + + + Majuro + tz_names + Majuro + + + + Makassar + tz_names + Makassar + + + + Malabo + tz_names + Malabo + + + + Maldives + tz_names + Man-đi-vơ + + + + Malta + tz_names + Man-Man-tata + + + + Managua + tz_names + Ma-na-goa + + + + Manaus + tz_names + Manaus + + + + Manila + tz_names + Manila + + + + Maputo + tz_names + Maputo + + + + Mariehamn + tz_names + Mariehamn + + + + Marigot + tz_names + Marigot + + + + Marquesas + tz_names + Quần đảo Marquesas + + + + Martinique + tz_names + Martinique + + + + Maseru + tz_names + Ma-xê-ru + + + + Matamoros + tz_names + Matamoros + + + + Mauritius + tz_names + Mô-ri-xơ + + + + Mawson + tz_names + Mawson + + + + Mayotte + tz_names + Mayotte + + + + Mazatlan + tz_names + Mazatlan + + + + Mbabane + tz_names + Mbabane + + + + McMurdo + tz_names + McMurdo + + + + Melbourne + tz_names + Melbourne + + + + Menominee + tz_names + Menominee + + + + Merida + tz_names + Merida + + + + Metlakatla + tz_names + Metlakatla + + + + Mexico City + tz_names + Thành phố Mê Xi Cô + + + + Midway + tz_names + Midway + + + + Minsk + tz_names + Min-xcơ + + + + Miquelon + tz_names + Mi-kê-lân + + + + Mogadishu + tz_names + Mô-ga-đi-su + + + + Monaco + tz_names + Mô-na-cô + + + + Moncton + tz_names + Moncton + + + + Monrovia + tz_names + Monrovia + + + + Monterrey + tz_names + Monterrey + + + + Montevideo + tz_names + Mông-tơ-vi-di-ô + + + + Montserrat + tz_names + Montserrat + + + + Moscow + tz_names + Mát Cơ Va + + + + Muscat + tz_names + Mu Cát + + + + Nairobi + tz_names + Nai-rô-bi + + + + Nassau + tz_names + Nát-xô + + + + Nauru + tz_names + Na-u-ru + + + + Ndjamena + tz_names + Gia-mê-na + + + + New York + tz_names + Nữu Ước + + + + Niamey + tz_names + Ni-a-mây + + + + Nicosia + tz_names + Ni-cô-xi-a + + + + Nipigon + tz_names + Nipigon + + + + Niue + tz_names + Ni-u-ê + + + + Nome + tz_names + Nome + + + + Norfolk + tz_names + Norfolk + + + + Noronha + tz_names + Noronha + + + + North Dakota/Beulah + tz_names + Bắc Dakota/Beulah + + + + North Dakota/Center + tz_names + Bắc Dakota/Center + + + + North Dakota/New Salem + tz_names + Bắc Dakota/New Salem + + + + Nouakchott + tz_names + Nu-ác-sốt + + + + Noumea + tz_names + No-mi + + + + Novokuznetsk + tz_names + Novokuznetsk + + + + Novosibirsk + tz_names + Novosibirsk + + + + Ojinaga + tz_names + Ojinaga + + + + Omsk + tz_names + Omsk + + + + Oral + tz_names + Oral + + + + Oslo + tz_names + Ốt-xlô + + + + Ouagadougou + tz_names + U-a-ga-đu-gu + + + + Pago Pago + tz_names + Pago Pago + + + + Palau + tz_names + Pa-lau + + + + Palmer + tz_names + Palmer + + + + Panama + tz_names + Pa-na-ma + + + + Pangnirtung + tz_names + Pangnirtung + + + + Paramaribo + tz_names + Pa-ra-ma-ri-bô + + + + Paris + tz_names + Pa Ri + + + + Perth + tz_names + Perth + + + + Phnom Penh + tz_names + Phnôm Pênh + + + + Phoenix + tz_names + Phoenix + + + + Pitcairn + tz_names + Quần đảo Pít-cơn + + + + Podgorica + tz_names + Pốt-gô-ri-xa + + + + Pohnpei + tz_names + Pohnpei + + + + Pontianak + tz_names + Pontianak + + + + Port Moresby + tz_names + Cảng Moresby + + + + Port of Spain + tz_names + Cảng Tây Ban Nha + + + + Port-au-Prince + tz_names + Cảng au Prince + + + + Porto Velho + tz_names + Cảng Velho + + + + Porto-Novo + tz_names + Cảng-Novo + + + + Prague + tz_names + Praha + + + + Puerto Rico + tz_names + Cảng Rico + + + + Punta Arenas + tz_names + Đấu trường Punta + + + + Pyongyang + tz_names + Bình Nhưỡng + + + + Qatar + tz_names + Ca-ta + + + + Qostanay + tz_names + Kostanay + + + + Qyzylorda + tz_names + Kyzylorda + + + + Rainy River + tz_names + Rainy River + + + + Rankin Inlet + tz_names + Rankin Inlet + + + + Rarotonga + tz_names + Rarotonga + + + + Recife + tz_names + Recife + + + + Regina + tz_names + Regina + + + + Resolute + tz_names + Resolute + + + + Reunion + tz_names + Rê-u-niên + + + + Reykjavik + tz_names + Rây-ki-a-vích + + + + Riga + tz_names + Ri-ga + + + + Rio Branco + tz_names + Rio Branco + + + + Riyadh + tz_names + Ri-át + + + + Rome + tz_names + Rô Ma + + + + Rothera + tz_names + Rothera + + + + Saipan + tz_names + Saipan + + + + Sakhalin + tz_names + Sakhalin + + + + Samara + tz_names + Samara + + + + Samarkand + tz_names + Samarkand + + + + San Marino + tz_names + San Marino + + + + Santarem + tz_names + Santarem + + + + Santiago + tz_names + Santiago + + + + Santo Domingo + tz_names + Xan-tô Đô-min-gô + + + + Sao Paulo + tz_names + Sao Paolo + + + + Sao Tome + tz_names + Sao Tô-mê + + + + Sarajevo + tz_names + Xa-ra-ê-vô + + + + Saratov + tz_names + Saratov + + + + Scoresbysund + tz_names + Scoresby Sund + + + + Seoul + tz_names + Xê un + + + + Shanghai + tz_names + Thượng Hải + + + + Simferopol + tz_names + Simferopol + + + + Singapore + tz_names + Singapo + + + + Sitka + tz_names + Sitka + + + + Skopje + tz_names + Xcốp-pi-ê + + + + Sofia + tz_names + Sofia + + + + South Georgia + tz_names + Nam Georgia + + + + Srednekolymsk + tz_names + Srednekolymsk + + + + St Barthelemy + tz_names + St Barthelemy + + + + St Helena + tz_names + St Helena + + + + St Johns + tz_names + St Johns + + + + St Kitts + tz_names + St Kitts + + + + St Lucia + tz_names + St Lucia + + + + St Thomas + tz_names + St Thomas + + + + St Vincent + tz_names + St Vincent + + + + Stanley + tz_names + Stanley + + + + Stockholm + tz_names + Xtốc-khôm + + + + Swift Current + tz_names + Swift Current + + + + Sydney + tz_names + Xít ni + + + + Syowa + tz_names + Syowa + + + + Tahiti + tz_names + Tahiti + + + + Taipei + tz_names + Đài Bắc + + + + Tallinn + tz_names + Ta-lin + + + + Tarawa + tz_names + Tarawa + + + + Tashkent + tz_names + Ta-sơ-ken + + + + Tbilisi + tz_names + Tbi-li-xi + + + + Tegucigalpa + tz_names + Te-gu-xi-gan-pa + + + + Tehran + tz_names + Tê-hê-ran + + + + Thimphu + tz_names + Thim-bu + + + + Thule + tz_names + Thule + + + + Thunder Bay + tz_names + Vịnh Thunder + + + + Tijuana + tz_names + Tijuana + + + + Tirane + tz_names + Ti-ra-na + + + + Tokyo + tz_names + Tô Ky Ôs + + + + Tomsk + tz_names + Tomsk + + + + Tongatapu + tz_names + Tongatapu + + + + Toronto + tz_names + Tô Rôn Tô + + + + Tortola + tz_names + Tortola + + + + Tripoli + tz_names + Tri Pô Li + + + + Troll + tz_names + Troll + + + + Tunis + tz_names + Tuy-nít + + + + Ulaanbaatar + tz_names + Ulan Bato + + + + Ulyanovsk + tz_names + Ulyanovsk + + + + Urumqi + tz_names + Urumqi + + + + Ust-Nera + tz_names + Ust-Nera + + + + Uzhgorod + tz_names + Uzhgorod + + + + Vaduz + tz_names + Vaduz + + + + Vancouver + tz_names + Van Cô Vơ + + + + Vatican + tz_names + Va Ti Can + + + + Vienna + tz_names + Viên + + + + Vientiane + tz_names + Viêng Chăn + + + + Vilnius + tz_names + Vin-ni-út + + + + Vladivostok + tz_names + Vladivostok + + + + Volgograd + tz_names + Volgograd + + + + Vostok + tz_names + Vostok + + + + Wake + tz_names + Wake + + + + Wallis + tz_names + Wa Li + + + + Warsaw + tz_names + Vác-sa-va + + + + Whitehorse + tz_names + Whitehorse + + + + Windhoek + tz_names + Windhoek + + + + Winnipeg + tz_names + Winnipeg + + + + Yakutat + tz_names + Yakutat + + + + Yakutsk + tz_names + Yakutsk + + + + Yangon + tz_names + Ragoon + + + + Yekaterinburg + tz_names + Yekaterinburg + + + + Yellowknife + tz_names + Yellowknife + + + + Yerevan + tz_names + Ê-rê-van + + + + Zagreb + tz_names + Da-gờ-rép + + + + Zaporozhye + tz_names + Zaporizhia + + + + Zurich + tz_names + Zurich + + + diff --git a/man/calamares.8 b/man/calamares.8 index 028e616d1..2e55b3c8f 100644 --- a/man/calamares.8 +++ b/man/calamares.8 @@ -1,18 +1,19 @@ .TH CALAMARES "8" .SH NAME -calamares \- distribution-independent system installer +calamares \- distribution-independent system installer .SH SYNOPSIS .B calamares [\fI\,options\/\fR] .SH DESCRIPTION .B calamares -is a distribution-independent system installer, with an advanced partitioning -feature for both manual and automated partitioning operations. It is the -first installer with an automated “Replace Partition” option, which makes it -easy to reuse a partition over and over for distribution testing. Calamares is -designed to be customizable by distribution maintainers without need for -cumbersome patching, thanks to third party branding and external modules +is a distribution-independent system installer, with an advanced partitioning +feature for both manual and automated partitioning operations. It is the +first installer with an automated “Replace Partition” option, which makes it +easy to reuse a partition over and over for distribution testing. Calamares is +designed to be customizable by distribution maintainers without need for +cumbersome patching, thanks to third party branding and external modules support. + .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR @@ -22,16 +23,63 @@ Displays this help. Displays version information. .TP \fB\-d\fR, \fB\-\-debug\fR -Verbose output for debugging purposes. +Debugging mode for testing purposes. Implies \fB\-D8\fR and \fB\-c.\fR. +.TP +\fB\-D\fR +Sets logging-level. Higher numbers are more verbose. .TP \fB\-c\fR, \fB\-\-config\fR Configuration directory to use, for testing purposes. +.TP +\fB\-X\fR, \fB\-\-xdg-config\fR +Use XDG environment variables for file lookup. +.TP +\fB\-T\fR, \fB\-\-debug-translation\fR +Use translations from current directory. + +.SH "FILES" + +.B calamares +reads its configuration from many files. +The first configuration file is +.BI settings.conf +which is located in one of the configuration locations. +When started with \fB\-d\fR +.B calamares +looks in the current directory for a settings file. +When started with \fB\-X\fR +.B calamares +looks in the directories specified by +.BI XDG_CONFIG_DIRS +for a settings file. +If no settings file is found elsewhere, +.B calamares +looks in pre-configured directories like +.BI /etc +\fB\fR. + +The contents of the +.BI settings.conf +file dictate where other configuration files are located, and +which configuration files are used. + .SH "SEE ALSO" The .B calamares website: https://calamares.io +\fB\fR. + +The command-line arguments for +.B calamares +are primarily for developers convenience and should not be needed +in nearly any situation in which +.B calamares +is deployed. Most live CD environments and OEM installations should +have installed configuration files in their correct system-wide locations. + .SH "BUGS" -Please report any bugs to https://calamares.io/issues +Please report any bugs to https://github.com/calamares/calamares/issues + .SH AUTHORS .B calamares is written by Teo Mrnjavac , diff --git a/settings.conf b/settings.conf index 409468d82..10a058ce4 100644 --- a/settings.conf +++ b/settings.conf @@ -1,5 +1,14 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration file for Calamares -# Syntax is YAML 1.2 +# +# This is the top-level configuration file for Calamares. +# It specifies what modules will be used, as well as some +# overall characteristics -- is this a setup program, or +# an installer. More specific configuration is devolved +# to the branding file (for the UI) and the individual +# module configuration files (for functionality). --- # Modules can be job modules (with different interfaces) and QtWidgets view # modules. They could all be placed in a number of different paths. @@ -26,11 +35,29 @@ modules-search: [ local ] # Instances section. This section is optional, and it defines custom instances -# for modules of any kind. An instance entry has an module name, an instance -# name, and a configuration file name. The primary goal of this mechanism is -# to allow loading multiple instances of the same module, with different -# configuration. If you don't need this, the instances section can safely be -# left empty. +# for modules of any kind. An instance entry has these keys: +# - *module* name, which matches the module name from the module descriptor +# (usually the name of the directory under `src/modules/`, but third- +# party modules may diverge. +# - *id* (optional) an identifier to distinguish this instance from +# all the others. If none is given, the name of the module is used. +# Together, the module and id form an instance key (see below). +# - *config* (optional) a filename for the configuration. If none is +# given, *module*`.conf` is used (e.g. `welcome.conf` for the welcome +# module) +# - *weight* (optional) In the *exec* phase of the sequence, progress +# is reported as jobs are completed. The jobs from a single module +# together contribute the full weight of that module. The overall +# progress (0 .. 100%) is divided up according to the weight of each +# module. Give modules that take a lot of time to complete, a larger +# weight to keep the overall progress moving along steadily. This +# weight overrides a weight given in the module descriptor. If no weight +# is given, uses the value from the module descriptor, or 1 if there +# isn't one there either. +# +# The primary goal of this mechanism is to allow loading multiple instances +# of the same module, with different configuration. If you don't need this, +# the instances section can safely be left empty. # # Module name plus instance name makes an instance key, e.g. # "webview@owncloud", where "webview" is the module name (for the webview @@ -43,10 +70,11 @@ modules-search: [ local ] # mentioning a module without a full instance key (e.g. "welcome") # means that implicit module. # -# An instance must specify its configuration file (e.g. `webview-home.conf`). +# An instance may specify its configuration file (e.g. `webview-home.conf`). # The implicit instances all have configuration files named `.conf`. # This (implict) way matches the source examples, where the welcome -# module contains an example `welcome.conf`. +# module contains an example `welcome.conf`. Specify a *config* for +# any module (also implicit instances) to change which file is used. # # For more information on running module instances, run Calamares in debug # mode and check the Modules page in the Debug information interface. @@ -94,6 +122,7 @@ sequence: - summary - exec: - partition +# - zfs - mount - unpackfs - machineid @@ -159,7 +188,7 @@ dont-chroot: false # If this is set to true, Calamares refers to itself as a "setup program" # rather than an "installer". Defaults to the value of dont-chroot, but # Calamares will complain if this is not explicitly set. -# oem-setup: true +oem-setup: false # If this is set to true, the "Cancel" button will be disabled entirely. # The button is also hidden from view. @@ -182,6 +211,14 @@ disable-cancel: false # YAML: boolean. disable-cancel-during-exec: false +# If this is set to true, the "Next" and "Back" button will be hidden once +# you start the 'Installation'. +# +# Default is false, but Calamares will complain if this is not explicitly set. +# +# YAML: boolean. +hide-back-and-next-during-exec: false + # If this is set to true, then once the end of the sequence has # been reached, the quit (done) button is clicked automatically # and Calamares will close. Default is false: the user will see diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1445b18f3..5ce5349fb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,14 @@ -include( CalamaresAddPlugin ) -include( CalamaresAddModuleSubdirectory ) -include( CalamaresAddLibrary ) +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include( CalamaresAddBrandingSubdirectory ) +include( CalamaresAddLibrary ) +include( CalamaresAddModuleSubdirectory ) +include( CalamaresAddPlugin ) include( CalamaresAddTest ) +include( CalamaresAddTranslations ) # library add_subdirectory( libcalamares ) @@ -10,7 +16,7 @@ add_subdirectory( libcalamares ) add_subdirectory( libcalamaresui ) # all things qml -add_subdirectory( qml ) +add_subdirectory( qml/calamares ) # application add_subdirectory( calamares ) diff --git a/src/branding/CMakeLists.txt b/src/branding/CMakeLists.txt index 981da1468..09d60118e 100644 --- a/src/branding/CMakeLists.txt +++ b/src/branding/CMakeLists.txt @@ -1 +1,10 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + +# Add branding components. Since there is only one, called "default", +# add that one. For examples of other branding components, see +# the calamares-extensions repository. calamares_add_branding_subdirectory( default ) diff --git a/src/branding/README.md b/src/branding/README.md index 099163836..234b2a9b1 100644 --- a/src/branding/README.md +++ b/src/branding/README.md @@ -1,5 +1,10 @@ # Branding directory + + Branding components can go here, or they can be installed separately. A branding component is a subdirectory with a `branding.desc` descriptor @@ -66,7 +71,7 @@ The setting *slideshowAPI* in `branding.desc` indicates which one to use for a given branding slideshow. Which API to use is really a function of the QML. Expect the version 1 API to be deprecated in the course of Calamares 3.3. -In Calamares 3.2.13 support for activation notification to the QML +In Calamares 3.2.13 support for activation notification to the QML parts is improved: - If the root object has a property *activatedInCalamares* (the examples do), then that property is set to *true* when the slideshow becomes visible diff --git a/src/branding/default/banner.png b/src/branding/default/banner.png new file mode 100644 index 000000000..d1baeee85 Binary files /dev/null and b/src/branding/default/banner.png differ diff --git a/src/branding/default/banner.png.license b/src/branding/default/banner.png.license new file mode 100644 index 000000000..38aa3617e --- /dev/null +++ b/src/branding/default/banner.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 Adriaan de Groot +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/branding/default/branding.desc b/src/branding/default/branding.desc index b6694d1f4..b8757411f 100644 --- a/src/branding/default/branding.desc +++ b/src/branding/default/branding.desc @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Product branding information. This influences some global # user-visible aspects of Calamares, such as the product # name, window behavior, and the slideshow during installation. @@ -7,6 +10,12 @@ --- componentName: default + +### WELCOME / OVERALL WORDING +# +# These settings affect some overall phrasing and looks, +# which are most visible in the welcome page. + # This selects between different welcome texts. When false, uses # the traditional "Welcome to the %1 installer.", and when true, # uses "Welcome to the Calamares installer for %1." This allows @@ -20,6 +29,12 @@ welcomeStyleCalamares: false # may have surprising effects on HiDPI monitors). welcomeExpandingLogo: true +### WINDOW CONFIGURATION +# +# The settings here affect the placement of the Calamares +# window through hints to the window manager and initial +# sizing of the Calamares window. + # Size and expansion policy for Calamares. # - "normal" or unset, expand as needed, use *windowSize* # - "fullscreen", start as large as possible, ignore *windowSize* @@ -41,6 +56,14 @@ windowSize: 800px,520px # *windowExpanding* set to "fullscreen"). windowPlacement: center +### PANELS CONFIGURATION +# +# Calamares has a main content area, and two panels (navigation +# and progress / sidebar). The panels can be controlled individually, +# or switched off. If both panels are switched off, the layout of +# the main content area loses its margins, on the assumption that +# you're doing something special. + # Kind of sidebar (panel on the left, showing progress). # - "widget" or unset, use traditional sidebar (logo, items) # - "none", hide it entirely @@ -66,6 +89,12 @@ sidebar: widget # except the default is *bottom*. navigation: widget + +### STRINGS, IMAGES AND COLORS +# +# This section contains the "branding proper" of names +# and images, rather than global-look settings. + # These are strings shown to the user in the user interface. # There is no provision for translating them -- since they # are names, the string is included as-is. @@ -100,12 +129,18 @@ strings: shortVersionedName: FancyGL 2020.2 bootloaderEntryName: FancyGL productUrl: https://calamares.io/ - supportUrl: https://github.com/calamares/calamares/issues - knownIssuesUrl: https://calamares.io/about/ - releaseNotesUrl: https://calamares.io/about/ + supportUrl: https://github.com/calamares/calamares/wiki + knownIssuesUrl: https://github.com/calamares/calamares/issues + releaseNotesUrl: https://calamares.io/news/ + donateUrl: https://kde.org/community/donations/index.php # These images are loaded from the branding module directory. # +# productBanner is an optional image, which if present, will be shown +# on the welcome page of the application, above the welcome text. +# It is intended to have a width much greater than height. +# It is displayed at 64px height (also on HiDPI). +# Recommended size is 64px tall, and up to 460px wide. # productIcon is used as the window icon, and will (usually) be used # by the window manager to represent the application. This image # should be square, and may be displayed by the window manager @@ -113,6 +148,12 @@ strings: # productLogo is used as the logo at the top of the left-hand column # which shows the steps to be taken. The image should be square, # and is displayed at 80x80 pixels (also on HiDPI). +# productWallpaper is an optional image, which if present, will replace +# the normal solid background on every page of the application. +# It can be any size and proportion, +# and will be tiled to fit the entire window. +# For a non-tiled wallpaper, the size should be the same as +# the overall window, see *windowSize* above (800x520). # productWelcome is shown on the welcome page of the application in # the middle of the window, below the welcome text. It can be # any size and proportion, and will be scaled to fit inside @@ -121,25 +162,12 @@ strings: # # These filenames can also use substitutions from os-release (see above). images: - productLogo: "squid.png" + # productBanner: "banner.png" productIcon: "squid.png" + productLogo: "squid.png" + # productWallpaper: "wallpaper.png" productWelcome: "languages.png" -# The slideshow is displayed during execution steps (e.g. when the -# installer is actually writing to disk and doing other slow things). -slideshow: "show.qml" -# There are two available APIs for the slideshow: -# - 1 (the default) loads the entire slideshow when the installation- -# slideshow page is shown and starts the QML then. The QML -# is never stopped (after installation is done, times etc. -# continue to fire). -# - 2 loads the slideshow on startup and calls onActivate() and -# onLeave() in the root object. After the installation is done, -# the show is stopped (first by calling onLeave(), then destroying -# the QML components). -slideshowAPI: 2 - - # Colors for text and background components. # # - sidebarBackground is the background of the sidebar @@ -156,3 +184,56 @@ style: sidebarText: "#FFFFFF" sidebarTextSelect: "#292F34" sidebarTextHighlight: "#D35400" + +### SLIDESHOW +# +# The slideshow is displayed during execution steps (e.g. when the +# installer is actually writing to disk and doing other slow things). + +# The slideshow can be a QML file (recommended) which can display +# arbitrary things -- text, images, animations, or even play a game -- +# during the execution step. The QML **is** abruptly stopped when the +# execution step is done, though, so maybe a game isn't a great idea. +# +# The slideshow can also be a sequence of images (not recommended unless +# you don't want QML at all in your Calamares). The images are displayed +# at a rate of 1 every 2 seconds during the execution step. +# +# To configure a QML file, list a single filename: +# slideshow: "show.qml" +# To configure images, like the filenames (here, as an inline list): +# slideshow: [ "/etc/calamares/slideshow/0.png", "/etc/logo.png" ] +slideshow: "show.qml" + +# There are two available APIs for a QML slideshow: +# - 1 (the default) loads the entire slideshow when the installation- +# slideshow page is shown and starts the QML then. The QML +# is never stopped (after installation is done, times etc. +# continue to fire). +# - 2 loads the slideshow on startup and calls onActivate() and +# onLeave() in the root object. After the installation is done, +# the show is stopped (first by calling onLeave(), then destroying +# the QML components). +# +# An image slideshow does not need to have the API defined. +slideshowAPI: 2 + + +# These options are to customize online uploading of logs to pastebins: +# - type : Defines the kind of pastebin service to be used. Currently +# it accepts two values: +# - none : disables the pastebin functionality +# - fiche : use fiche pastebin server +# - url : Defines the address of pastebin service to be used. +# Takes string as input. Important bits are the host and port, +# the scheme is not used. +# - sizeLimit : Defines maximum size limit (in KiB) of log file to be pasted. +# The option must be set, to have the log option work. +# Takes integer as input. If < 0, no limit will be forced, +# else only last (approximately) 'n' KiB of log file will be pasted. +# Please note that upload size may be slightly over the limit (due +# to last minute logging), so provide a suitable value. +uploadServer : + type : "fiche" + url : "http://termbin.com:9999" + sizeLimit : -1 diff --git a/src/branding/default/languages.png.license b/src/branding/default/languages.png.license new file mode 100644 index 000000000..ea8264571 --- /dev/null +++ b/src/branding/default/languages.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2015 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/branding/default/show.qml b/src/branding/default/show.qml index dcb0f9257..f4c50e629 100644 --- a/src/branding/default/show.qml +++ b/src/branding/default/show.qml @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import QtQuick 2.0; @@ -78,7 +69,7 @@ Presentation console.log("QML Component (default slideshow) activated"); presentation.currentSlide = 0; } - + function onLeave() { console.log("QML Component (default slideshow) deactivated"); } diff --git a/src/branding/default/squid.png.license b/src/branding/default/squid.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/branding/default/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/branding/default/stylesheet.qss b/src/branding/default/stylesheet.qss index 72dd91ba4..5c3673847 100644 --- a/src/branding/default/stylesheet.qss +++ b/src/branding/default/stylesheet.qss @@ -1,5 +1,9 @@ /* + * SPDX-FileCopyrightText: no + * SPDX-License-Identifier: CC0-1.0 + */ +/* A branding component can ship a stylesheet (like this one) which is applied to parts of the Calamares user-interface. In principle, all parts can be styled through CSS. diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 81fd0d132..d06a53d83 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + set( calamaresSources main.cpp CalamaresApplication.cpp @@ -10,6 +16,17 @@ set( calamaresSources progresstree/ProgressTreeView.cpp ) +if( NOT WITH_KF5DBus ) + set( kdsagSources + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp + ${CMAKE_SOURCE_DIR}/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp + ) + mark_thirdparty_code( ${kdsagSources} ) + list( APPEND calamaresSources ${kdsagSources} ) +endif() + include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_SOURCE_DIR}/src/libcalamaresui @@ -17,12 +34,15 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) -# Translations -include( CalamaresAddTranslations ) -add_calamares_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) -qt5_add_resources( calamaresRc calamares.qrc ) - -add_executable( calamares_bin ${calamaresSources} ${calamaresRc} ${trans_outfile} ) +### EXECUTABLE +# +# "calamares_bin" is the main application, not to be confused with +# the target "calamares" which is the non-GUI library part. +# +# The calamares-i18n.cxx file -- full path in CALAMARES_TRANSLATIONS_SOURCE -- +# is created as a target in the lang/ directory. This is compiled to a +# library (it's just the result of a QRC compile). +add_executable( calamares_bin ${calamaresSources} calamares.qrc ) target_include_directories( calamares_bin PRIVATE ${CMAKE_SOURCE_DIR} ) set_target_properties(calamares_bin PROPERTIES @@ -31,22 +51,29 @@ set_target_properties(calamares_bin ) calamares_automoc( calamares_bin ) calamares_autouic( calamares_bin ) +calamares_autorcc( calamares_bin ) + +if( kdsagSources ) + set_source_files_properties( ${kdsagSources} PROPERTIES AUTOMOC OFF ) +endif() target_link_libraries( calamares_bin PRIVATE calamares calamaresui + calamares-i18n Qt5::Core Qt5::Widgets KF5::CoreAddons ) if( WITH_KF5Crash ) - target_link_libraries( calamares_bin - PRIVATE - KF5::Crash - ) + target_link_libraries( calamares_bin PRIVATE KF5::Crash ) target_compile_definitions( calamares_bin PRIVATE WITH_KF5Crash ) endif() +if( WITH_KF5DBus ) + target_link_libraries( calamares_bin PRIVATE KF5::DBusAddons ) + target_compile_definitions( calamares_bin PRIVATE WITH_KF5DBus ) +endif() install( TARGETS calamares_bin BUNDLE DESTINATION . @@ -58,8 +85,14 @@ install( FILES ${CMAKE_SOURCE_DIR}/data/images/squid.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps ) +### TESTS +# +# if( BUILD_TESTING ) + # Don't install, these are just for enable_testing add_executable( loadmodule testmain.cpp ) target_link_libraries( loadmodule PRIVATE Qt5::Core Qt5::Widgets calamares calamaresui ) - # Don't install, it's just for enable_testing + + add_executable( test_conf test_conf.cpp ) + target_link_libraries( test_conf PUBLIC yamlcpp::yamlcpp Qt5::Core ) endif() diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index 5ef97a6a3..c06e13aa3 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -1,25 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresApplication.h" #include "CalamaresConfig.h" -#include "CalamaresVersion.h" +#include "CalamaresVersionX.h" #include "CalamaresWindow.h" #include "progresstree/ProgressTreeView.h" @@ -32,6 +23,9 @@ #include "utils/CalamaresUtilsSystem.h" #include "utils/Dirs.h" #include "utils/Logger.h" +#ifdef WITH_QML +#include "utils/Qml.h" +#endif #include "utils/Retranslator.h" #include "viewpages/ViewStep.h" @@ -73,7 +67,7 @@ CalamaresApplication::init() { Logger::setupLogfile(); cDebug() << "Calamares version:" << CALAMARES_VERSION; - cDebug() << " languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).replace( ";", ", " ); + cDebug() << Logger::SubEntry << "languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).replace( ";", ", " ); if ( !Calamares::Settings::instance() ) { @@ -83,16 +77,16 @@ CalamaresApplication::init() initQmlPath(); initBranding(); - CalamaresUtils::installTranslator( QLocale::system(), QString() ); + CalamaresUtils::installTranslator(); setQuitOnLastWindowClosed( false ); setWindowIcon( QIcon( Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductIcon ) ) ); - cDebug() << "STARTUP: initSettings, initQmlPath, initBranding done"; + cDebug() << Logger::SubEntry << "STARTUP: initSettings, initQmlPath, initBranding done"; initModuleManager(); //also shows main window - cDebug() << "STARTUP: initModuleManager: module init started"; + cDebug() << Logger::SubEntry << "STARTUP: initModuleManager: module init started"; } @@ -117,34 +111,6 @@ CalamaresApplication::mainWindow() } -static QStringList -qmlDirCandidates( bool assumeBuilddir ) -{ - static const char QML[] = "qml"; - - QStringList qmlDirs; - if ( CalamaresUtils::isAppDataDirOverridden() ) - { - qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); - } - else - { - if ( assumeBuilddir ) - { - qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir - } - if ( CalamaresUtils::haveExtraDirs() ) - for ( auto s : CalamaresUtils::extraDataDirs() ) - { - qmlDirs << ( s + QML ); - } - qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); - } - - return qmlDirs; -} - - static QStringList brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename ) { @@ -175,38 +141,12 @@ brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename ) void CalamaresApplication::initQmlPath() { - QDir importPath; // Right now, current-dir - QStringList qmlDirCandidatesByPriority = qmlDirCandidates( isDebug() ); - bool found = false; - - foreach ( const QString& path, qmlDirCandidatesByPriority ) +#ifdef WITH_QML + if ( !CalamaresUtils::initQmlModulesDir() ) { - QDir dir( path ); - if ( dir.exists() && dir.isReadable() ) - { - importPath = dir; - found = true; - break; - } - } - - if ( !found || !importPath.exists() || !importPath.isReadable() ) - { - cError() << "Cowardly refusing to continue startup without a QML directory." - << Logger::DebugList( qmlDirCandidatesByPriority ); - if ( CalamaresUtils::isAppDataDirOverridden() ) - { - cError() << "FATAL: explicitly configured application data directory is missing qml/"; - } - else - { - cError() << "FATAL: none of the expected QML paths exist."; - } ::exit( EXIT_FAILURE ); } - - cDebug() << "Using Calamares QML directory" << importPath.absolutePath(); - CalamaresUtils::setQmlModulesDir( importPath ); +#endif } diff --git a/src/calamares/CalamaresApplication.h b/src/calamares/CalamaresApplication.h index f42c21b56..5f0037971 100644 --- a/src/calamares/CalamaresApplication.h +++ b/src/calamares/CalamaresApplication.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARESAPPLICATION_H @@ -39,7 +30,7 @@ class CalamaresApplication : public QApplication Q_OBJECT public: CalamaresApplication( int& argc, char* argv[] ); - virtual ~CalamaresApplication(); + ~CalamaresApplication() override; /** * @brief init handles the first part of Calamares application startup. diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 0e8ac1421..81e7ca97f 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -1,27 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura (raurodse) - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura (raurodse) + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2020 Anubhav Choudhary + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresWindow.h" #include "Branding.h" +#include "CalamaresConfig.h" #include "DebugWindow.h" #include "Settings.h" #include "ViewManager.h" @@ -38,7 +31,12 @@ #include #include #include +#ifdef WITH_QML +#include +#include +#include #include +#endif #include static inline int @@ -59,13 +57,46 @@ windowDimensionToPixels( const Calamares::Branding::WindowDimension& u ) return 0; } +/** @brief Expected orientation of the panels, based on their side + * + * Panels on the left and right are expected to be "vertical" style, + * top and bottom should be "horizontal bars". This function maps + * the sides to expected orientation. + */ +static inline Qt::Orientation +orientation( const Calamares::Branding::PanelSide s ) +{ + using Side = Calamares::Branding::PanelSide; + return ( s == Side::Left || s == Side::Right ) ? Qt::Orientation::Vertical : Qt::Orientation::Horizontal; +} -QWidget* -CalamaresWindow::getWidgetSidebar( int desiredWidth ) +/** @brief Get a button-sized icon. */ +static inline QPixmap +getButtonIcon( const QString& name ) +{ + return Calamares::Branding::instance()->image( name, QSize( 22, 22 ) ); +} + +static inline void +setButtonIcon( QPushButton* button, const QString& name ) +{ + auto icon = getButtonIcon( name ); + if ( button && !icon.isNull() ) + { + button->setIcon( icon ); + } +} + +static QWidget* +getWidgetSidebar( Calamares::DebugWindowManager* debug, + Calamares::ViewManager* viewManager, + QWidget* parent, + Qt::Orientation, + int desiredWidth ) { const Calamares::Branding* const branding = Calamares::Branding::instance(); - QWidget* sideBox = new QWidget( this ); + QWidget* sideBox = new QWidget( parent ); sideBox->setObjectName( "sidebarApp" ); QBoxLayout* sideLayout = new QVBoxLayout; @@ -95,134 +126,184 @@ CalamaresWindow::getWidgetSidebar( int desiredWidth ) logoLayout->addStretch(); ProgressTreeView* tv = new ProgressTreeView( sideBox ); - tv->setModel( Calamares::ViewManager::instance() ); + tv->setModel( viewManager ); tv->setFocusPolicy( Qt::NoFocus ); sideLayout->addWidget( tv ); - if ( Calamares::Settings::instance()->debugMode() || ( Logger::logLevel() >= Logger::LOGVERBOSE ) ) + if ( debug && debug->enabled() ) { QPushButton* debugWindowBtn = new QPushButton; debugWindowBtn->setObjectName( "debugButton" ); - CALAMARES_RETRANSLATE( debugWindowBtn->setText( tr( "Show debug information" ) ); ) + CALAMARES_RETRANSLATE_FOR( debugWindowBtn, + debugWindowBtn->setText( QCoreApplication::translate( + CalamaresWindow::staticMetaObject.className(), "Show debug information" ) ); ); sideLayout->addWidget( debugWindowBtn ); debugWindowBtn->setFlat( true ); debugWindowBtn->setCheckable( true ); - connect( debugWindowBtn, &QPushButton::clicked, this, [=]( bool checked ) { - if ( checked ) - { - m_debugWindow = new Calamares::DebugWindow(); - m_debugWindow->show(); - connect( m_debugWindow.data(), &Calamares::DebugWindow::closed, this, [=]() { - m_debugWindow->deleteLater(); - debugWindowBtn->setChecked( false ); - } ); - } - else - { - if ( m_debugWindow ) - { - m_debugWindow->deleteLater(); - } - } - } ); + QObject::connect( debugWindowBtn, &QPushButton::clicked, debug, &Calamares::DebugWindowManager::show ); + QObject::connect( + debug, &Calamares::DebugWindowManager::visibleChanged, debugWindowBtn, &QPushButton::setChecked ); } CalamaresUtils::unmarginLayout( sideLayout ); return sideBox; } -QWidget* -CalamaresWindow::getQmlSidebar( int ) +static QWidget* +getWidgetNavigation( Calamares::DebugWindowManager*, + Calamares::ViewManager* viewManager, + QWidget* parent, + Qt::Orientation, + int ) { - CalamaresUtils::registerCalamaresModels(); - QQuickWidget* w = new QQuickWidget( this ); - w->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); - w->setResizeMode( QQuickWidget::SizeRootObjectToView ); - w->setSource( QUrl( - CalamaresUtils::searchQmlFile( CalamaresUtils::QmlSearch::Both, QStringLiteral( "calamares-sidebar" ) ) ) ); - return w; -} - -/** @brief Get a button-sized icon. */ -static inline QPixmap -getButtonIcon( const QString& name ) -{ - return Calamares::Branding::instance()->image( name, QSize( 22, 22 ) ); -} - -static inline void -setButtonIcon( QPushButton* button, const QString& name ) -{ - auto icon = getButtonIcon( name ); - if ( button && !icon.isNull() ) - { - button->setIcon( icon ); - } -} - -QWidget* -CalamaresWindow::getWidgetNavigation() -{ - QWidget* navigation = new QWidget( this ); + QWidget* navigation = new QWidget( parent ); QBoxLayout* bottomLayout = new QHBoxLayout; bottomLayout->addStretch(); // Create buttons and sets an initial icon; the icons may change { - auto* back = new QPushButton( getButtonIcon( QStringLiteral( "go-previous" ) ), tr( "&Back" ), navigation ); + auto* back + = new QPushButton( getButtonIcon( QStringLiteral( "go-previous" ) ), + QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "&Back" ), + navigation ); back->setObjectName( "view-button-back" ); - back->setEnabled( m_viewManager->backEnabled() ); - connect( back, &QPushButton::clicked, m_viewManager, &Calamares::ViewManager::back ); - connect( m_viewManager, &Calamares::ViewManager::backEnabledChanged, back, &QPushButton::setEnabled ); - connect( m_viewManager, &Calamares::ViewManager::backLabelChanged, back, &QPushButton::setText ); - connect( m_viewManager, &Calamares::ViewManager::backIconChanged, this, [=]( QString n ) { - setButtonIcon( back, n ); - } ); + back->setEnabled( viewManager->backEnabled() ); + QObject::connect( back, &QPushButton::clicked, viewManager, &Calamares::ViewManager::back ); + QObject::connect( viewManager, &Calamares::ViewManager::backEnabledChanged, back, &QPushButton::setEnabled ); + QObject::connect( viewManager, &Calamares::ViewManager::backLabelChanged, back, &QPushButton::setText ); + QObject::connect( + viewManager, &Calamares::ViewManager::backIconChanged, [ = ]( QString n ) { setButtonIcon( back, n ); } ); + QObject::connect( + viewManager, &Calamares::ViewManager::backAndNextVisibleChanged, back, &QPushButton::setVisible ); bottomLayout->addWidget( back ); } { - auto* next = new QPushButton( getButtonIcon( QStringLiteral( "go-next" ) ), tr( "&Next" ), navigation ); + auto* next + = new QPushButton( getButtonIcon( QStringLiteral( "go-next" ) ), + QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "&Next" ), + navigation ); next->setObjectName( "view-button-next" ); - next->setEnabled( m_viewManager->nextEnabled() ); - connect( next, &QPushButton::clicked, m_viewManager, &Calamares::ViewManager::next ); - connect( m_viewManager, &Calamares::ViewManager::nextEnabledChanged, next, &QPushButton::setEnabled ); - connect( m_viewManager, &Calamares::ViewManager::nextLabelChanged, next, &QPushButton::setText ); - connect( m_viewManager, &Calamares::ViewManager::nextIconChanged, this, [=]( QString n ) { - setButtonIcon( next, n ); - } ); + next->setEnabled( viewManager->nextEnabled() ); + QObject::connect( next, &QPushButton::clicked, viewManager, &Calamares::ViewManager::next ); + QObject::connect( viewManager, &Calamares::ViewManager::nextEnabledChanged, next, &QPushButton::setEnabled ); + QObject::connect( viewManager, &Calamares::ViewManager::nextLabelChanged, next, &QPushButton::setText ); + QObject::connect( + viewManager, &Calamares::ViewManager::nextIconChanged, [ = ]( QString n ) { setButtonIcon( next, n ); } ); + QObject::connect( + viewManager, &Calamares::ViewManager::backAndNextVisibleChanged, next, &QPushButton::setVisible ); bottomLayout->addWidget( next ); } bottomLayout->addSpacing( 12 ); { - auto* quit = new QPushButton( getButtonIcon( QStringLiteral( "dialog-cancel" ) ), tr( "&Cancel" ), navigation ); + auto* quit + = new QPushButton( getButtonIcon( QStringLiteral( "dialog-cancel" ) ), + QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "&Cancel" ), + navigation ); quit->setObjectName( "view-button-cancel" ); - connect( quit, &QPushButton::clicked, m_viewManager, &Calamares::ViewManager::quit ); - connect( m_viewManager, &Calamares::ViewManager::quitEnabledChanged, quit, &QPushButton::setEnabled ); - connect( m_viewManager, &Calamares::ViewManager::quitLabelChanged, quit, &QPushButton::setText ); - connect( m_viewManager, &Calamares::ViewManager::quitIconChanged, this, [=]( QString n ) { - setButtonIcon( quit, n ); - } ); - connect( m_viewManager, &Calamares::ViewManager::quitTooltipChanged, quit, &QPushButton::setToolTip ); - connect( m_viewManager, &Calamares::ViewManager::quitVisibleChanged, quit, &QPushButton::setVisible ); + QObject::connect( quit, &QPushButton::clicked, viewManager, &Calamares::ViewManager::quit ); + QObject::connect( viewManager, &Calamares::ViewManager::quitEnabledChanged, quit, &QPushButton::setEnabled ); + QObject::connect( viewManager, &Calamares::ViewManager::quitLabelChanged, quit, &QPushButton::setText ); + QObject::connect( + viewManager, &Calamares::ViewManager::quitIconChanged, [ = ]( QString n ) { setButtonIcon( quit, n ); } ); + QObject::connect( viewManager, &Calamares::ViewManager::quitTooltipChanged, quit, &QPushButton::setToolTip ); + QObject::connect( viewManager, &Calamares::ViewManager::quitVisibleChanged, quit, &QPushButton::setVisible ); bottomLayout->addWidget( quit ); } + bottomLayout->setContentsMargins( 0, 0, 6, 6 ); navigation->setLayout( bottomLayout ); return navigation; } -QWidget* -CalamaresWindow::getQmlNavigation() +#ifdef WITH_QML + +static inline void +setDimension( QQuickWidget* w, Qt::Orientation o, int desiredWidth ) { - CalamaresUtils::registerCalamaresModels(); - QQuickWidget* w = new QQuickWidget( this ); - w->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + w->setSizePolicy( o == Qt::Orientation::Vertical ? QSizePolicy::MinimumExpanding : QSizePolicy::Expanding, + o == Qt::Orientation::Horizontal ? QSizePolicy::MinimumExpanding : QSizePolicy::Expanding ); + if ( o == Qt::Orientation::Vertical ) + { + w->setFixedWidth( desiredWidth ); + } + else + { + // If the QML itself sets a height, use that, otherwise go to 48 pixels + // which seems to match what the widget navigation would use for height + // (with *my* specific screen, style, etc. so YMMV). + // + // Bound between (16, 64) with a default of 48. + qreal minimumHeight = qBound( qreal( 16 ), w->rootObject() ? w->rootObject()->height() : 48, qreal( 64 ) ); + w->setMinimumHeight( int( minimumHeight ) ); + w->setFixedHeight( int( minimumHeight ) ); + } w->setResizeMode( QQuickWidget::SizeRootObjectToView ); +} + + +static QWidget* +getQmlSidebar( Calamares::DebugWindowManager* debug, + Calamares::ViewManager*, + QWidget* parent, + Qt::Orientation o, + int desiredWidth ) +{ + CalamaresUtils::registerQmlModels(); + QQuickWidget* w = new QQuickWidget( parent ); + if ( debug ) + { + w->engine()->rootContext()->setContextProperty( "debug", debug ); + } + w->setSource( QUrl( - CalamaresUtils::searchQmlFile( CalamaresUtils::QmlSearch::Both, QStringLiteral( "calamares-navigation" ) ) ) ); + CalamaresUtils::searchQmlFile( CalamaresUtils::QmlSearch::Both, QStringLiteral( "calamares-sidebar" ) ) ) ); + setDimension( w, o, desiredWidth ); return w; } +static QWidget* +getQmlNavigation( Calamares::DebugWindowManager* debug, + Calamares::ViewManager*, + QWidget* parent, + Qt::Orientation o, + int desiredWidth ) +{ + CalamaresUtils::registerQmlModels(); + QQuickWidget* w = new QQuickWidget( parent ); + if ( debug ) + { + w->engine()->rootContext()->setContextProperty( "debug", debug ); + } + w->setSource( QUrl( + CalamaresUtils::searchQmlFile( CalamaresUtils::QmlSearch::Both, QStringLiteral( "calamares-navigation" ) ) ) ); + setDimension( w, o, desiredWidth ); + return w; +} +#else +// Bogus to keep the linker happy +// +// Calls to flavoredWidget() still refer to these *names* +// even if they are subsequently not used. +static QWidget* +getQmlSidebar( Calamares::DebugWindowManager*, + Calamares::ViewManager*, + QWidget* parent, + Qt::Orientation, + int desiredWidth ) +{ + return nullptr; +} +static QWidget* +getQmlNavigation( Calamares::DebugWindowManager*, + Calamares::ViewManager*, + QWidget* parent, + Qt::Orientation, + int desiredWidth ) +{ + return nullptr; +} +#endif + /**@brief Picks one of two methods to call * * Calls method (member function) @p widget or @p qml with arguments @p a @@ -231,22 +312,29 @@ CalamaresWindow::getQmlNavigation() template < typename widgetMaker, typename... args > QWidget* flavoredWidget( Calamares::Branding::PanelFlavor flavor, - CalamaresWindow* w, + Qt::Orientation o, + Calamares::DebugWindowManager* w, + QWidget* parent, widgetMaker widget, - widgetMaker qml, + widgetMaker qml, // Only if WITH_QML is on args... a ) { - // Member-function calling syntax is (object.*member)(args) +#ifndef WITH_QML + Q_UNUSED( qml ) +#endif + auto* viewManager = Calamares::ViewManager::instance(); switch ( flavor ) { case Calamares::Branding::PanelFlavor::Widget: - return ( w->*widget )( a... ); + return widget( w, viewManager, parent, o, a... ); +#ifdef WITH_QML case Calamares::Branding::PanelFlavor::Qml: - return ( w->*qml )( a... ); + return qml( w, viewManager, parent, o, a... ); +#endif 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 @@ -259,34 +347,30 @@ insertIf( QBoxLayout* layout, { if ( first && side == firstSide ) { - if ( ( side == Calamares::Branding::PanelSide::Left ) || ( side == Calamares::Branding::PanelSide::Right ) ) - { - first->setMinimumWidth( qMax( first->minimumWidth(), 64 ) ); - } - else - { - first->setMinimumHeight( qMax( first->minimumHeight(), 64 ) ); - } layout->addWidget( first ); } } CalamaresWindow::CalamaresWindow( QWidget* parent ) : QWidget( parent ) - , m_debugWindow( nullptr ) + , m_debugManager( new Calamares::DebugWindowManager( this ) ) , m_viewManager( nullptr ) { + installEventFilter( CalamaresUtils::Retranslator::instance() ); + // If we can never cancel, don't show the window-close button if ( Calamares::Settings::instance()->disableCancel() ) { setWindowFlag( Qt::WindowCloseButtonHint, false ); } - CALAMARES_RETRANSLATE( setWindowTitle( Calamares::Settings::instance()->isSetupMode() - ? tr( "%1 Setup Program" ).arg( *Calamares::Branding::ProductName ) - : tr( "%1 Installer" ).arg( *Calamares::Branding::ProductName ) ); ) + CALAMARES_RETRANSLATE( const auto* branding = Calamares::Branding::instance(); + setWindowTitle( Calamares::Settings::instance()->isSetupMode() + ? tr( "%1 Setup Program" ).arg( branding->productName() ) + : tr( "%1 Installer" ).arg( branding->productName() ) ); ); const Calamares::Branding* const branding = Calamares::Branding::instance(); + using ImageEntry = Calamares::Branding::ImageEntry; using CalamaresUtils::windowMinimumHeight; using CalamaresUtils::windowMinimumWidth; @@ -313,10 +397,26 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) cDebug() << Logger::SubEntry << "Proposed window size:" << w << h; resize( w, h ); - m_viewManager = Calamares::ViewManager::instance( this ); + QWidget* baseWidget = this; + if ( !( branding->imagePath( ImageEntry::ProductWallpaper ).isEmpty() ) ) + { + QWidget* label = new QWidget( this ); + QVBoxLayout* l = new QVBoxLayout; + CalamaresUtils::unmarginLayout( l ); + l->addWidget( label ); + setLayout( l ); + label->setObjectName( "backgroundWidget" ); + label->setStyleSheet( + QStringLiteral( "#backgroundWidget { background-image: url(%1); background-repeat: repeat-xy; }" ) + .arg( branding->imagePath( ImageEntry::ProductWallpaper ) ) ); + + baseWidget = label; + } + + m_viewManager = Calamares::ViewManager::instance( baseWidget ); if ( branding->windowExpands() ) { - connect( m_viewManager, &Calamares::ViewManager::enlarge, this, &CalamaresWindow::enlarge ); + connect( m_viewManager, &Calamares::ViewManager::ensureSize, this, &CalamaresWindow::ensureSize ); } // NOTE: Although the ViewManager has a signal cancelEnabled() that // signals when the state of the cancel button changes (in @@ -329,17 +429,23 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) QBoxLayout* mainLayout = new QHBoxLayout; QBoxLayout* contentsLayout = new QVBoxLayout; - - setLayout( mainLayout ); + contentsLayout->setSpacing( 0 ); QWidget* sideBox = flavoredWidget( branding->sidebarFlavor(), - this, - &CalamaresWindow::getWidgetSidebar, - &CalamaresWindow::getQmlSidebar, + ::orientation( branding->sidebarSide() ), + m_debugManager, + baseWidget, + ::getWidgetSidebar, + ::getQmlSidebar, qBound( 100, CalamaresUtils::defaultFontHeight() * 12, w < windowPreferredWidth ? 100 : 190 ) ); - QWidget* navigation = flavoredWidget( - branding->navigationFlavor(), this, &CalamaresWindow::getWidgetNavigation, &CalamaresWindow::getQmlNavigation ); + QWidget* navigation = flavoredWidget( branding->navigationFlavor(), + ::orientation( branding->navigationSide() ), + m_debugManager, + baseWidget, + ::getWidgetNavigation, + ::getQmlNavigation, + 64 ); // Build up the contentsLayout (a VBox) top-to-bottom // .. note that the bottom is mirrored wrt. the top @@ -356,18 +462,34 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) insertIf( mainLayout, PanelSide::Right, navigation, branding->navigationSide() ); insertIf( mainLayout, PanelSide::Right, sideBox, branding->sidebarSide() ); + // layout->count() returns number of things in it; above we have put + // at **least** the central widget, which comes from the view manager, + // both vertically and horizontally -- so if there's a panel along + // either axis, the count in that axis will be > 1. + m_viewManager->setPanelSides( + ( contentsLayout->count() > 1 ? Qt::Orientations( Qt::Horizontal ) : Qt::Orientations() ) + | ( mainLayout->count() > 1 ? Qt::Orientations( Qt::Vertical ) : Qt::Orientations() ) ); + CalamaresUtils::unmarginLayout( mainLayout ); CalamaresUtils::unmarginLayout( contentsLayout ); + baseWidget->setLayout( mainLayout ); setStyleSheet( Calamares::Branding::instance()->stylesheet() ); } void -CalamaresWindow::enlarge( QSize enlarge ) +CalamaresWindow::ensureSize( QSize size ) { auto mainGeometry = this->geometry(); QSize availableSize = qApp->desktop()->availableGeometry( this ).size(); - auto h = qBound( 0, mainGeometry.height() + enlarge.height(), availableSize.height() ); + // We only care about vertical sizes that are big enough + int embiggenment = qMax( 0, size.height() - m_viewManager->centralWidget()->size().height() ); + if ( embiggenment < 6 ) + { + return; + } + + auto h = qBound( 0, mainGeometry.height() + embiggenment, availableSize.height() ); auto w = this->size().width(); resize( w, h ); diff --git a/src/calamares/CalamaresWindow.h b/src/calamares/CalamaresWindow.h index d6592c99a..f5dd7fe3d 100644 --- a/src/calamares/CalamaresWindow.h +++ b/src/calamares/CalamaresWindow.h @@ -1,31 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARESWINDOW_H #define CALAMARESWINDOW_H -#include #include +#include + namespace Calamares { -class DebugWindow; +class DebugWindowManager; class ViewManager; } // namespace Calamares @@ -37,30 +29,22 @@ class CalamaresWindow : public QWidget Q_OBJECT public: CalamaresWindow( QWidget* parent = nullptr ); - virtual ~CalamaresWindow() override {} + ~CalamaresWindow() override {} -public slots: +public Q_SLOTS: /** - * This asks the main window to grow by @p enlarge pixels, to accomodate + * This asks the main window to grow to accomodate @p size pixels, to accomodate * larger-than-expected window contents. The enlargement may be silently * ignored. */ - void enlarge( QSize enlarge ); + void ensureSize( QSize size ); protected: virtual void closeEvent( QCloseEvent* e ) override; private: - // Two variations on sidebar (the progress view) - QWidget* getWidgetSidebar( int desiredWidth ); - QWidget* getQmlSidebar( int desiredWidth ); - - // Two variations on navigation (buttons at bottom) - QWidget* getWidgetNavigation(); - QWidget* getQmlNavigation(); - - QPointer< Calamares::DebugWindow > m_debugWindow; // Managed by self - Calamares::ViewManager* m_viewManager; + Calamares::DebugWindowManager* m_debugManager = nullptr; + Calamares::ViewManager* m_viewManager = nullptr; }; #endif // CALAMARESWINDOW_H diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp index 82533a648..8813999a4 100644 --- a/src/calamares/DebugWindow.cpp +++ b/src/calamares/DebugWindow.cpp @@ -1,35 +1,26 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DebugWindow.h" #include "ui_DebugWindow.h" -#include "VariantModel.h" - #include "Branding.h" -#include "modulesystem/Module.h" -#include "modulesystem/ModuleManager.h" - #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" +#include "Settings.h" +#include "VariantModel.h" +#include "modulesystem/Module.h" +#include "modulesystem/ModuleManager.h" #include "utils/Logger.h" +#include "utils/Paste.h" #include "utils/Retranslator.h" #ifdef WITH_PYTHONQT @@ -68,7 +59,7 @@ dumpWidgetTree( QDebug& deb, const QWidget* widget, int depth ) { deb << ' '; } - deb << widget->objectName(); + deb << widget->metaObject()->className() << widget->objectName(); for ( const auto* w : widget->findChildren< QWidget* >( QString(), Qt::FindDirectChildrenOnly ) ) { @@ -94,23 +85,22 @@ DebugWindow::DebugWindow() m_ui->globalStorageView->expandAll(); // Do above when the GS changes, too - connect( gs, &GlobalStorage::changed, this, [=] { - m_globals = JobQueue::instance()->globalStorage()->data(); - m_globals_model->reload(); - m_ui->globalStorageView->expandAll(); - } ); + connect( gs, + &GlobalStorage::changed, + this, + [ = ] + { + m_globals = JobQueue::instance()->globalStorage()->data(); + m_globals_model->reload(); + m_ui->globalStorageView->expandAll(); + } ); // JobQueue page m_ui->jobQueueText->setReadOnly( true ); - connect( JobQueue::instance(), &JobQueue::queueChanged, this, [this]( const JobList& jobs ) { - QStringList text; - for ( const auto& job : jobs ) - { - text.append( job->prettyName() ); - } - - m_ui->jobQueueText->setText( text.join( '\n' ) ); - } ); + connect( JobQueue::instance(), + &JobQueue::queueChanged, + this, + [ this ]( const QStringList& jobs ) { m_ui->jobQueueText->setText( jobs.join( '\n' ) ); } ); // Modules page QStringList modulesKeys; @@ -131,69 +121,77 @@ DebugWindow::DebugWindow() m_ui->modulesVerticalLayout->insertWidget( 1, pythonConsoleButton ); pythonConsoleButton->hide(); - QObject::connect( pythonConsoleButton, &QPushButton::clicked, this, [this, moduleConfigModel] { - QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); - Module* module = ModuleManager::instance()->moduleInstance( moduleName ); - if ( module->interface() != Module::Interface::PythonQt || module->type() != Module::Type::View ) - return; - - for ( ViewStep* step : ViewManager::instance()->viewSteps() ) + QObject::connect( + pythonConsoleButton, + &QPushButton::clicked, + this, + [ this, moduleConfigModel ] { - if ( step->moduleInstanceKey() == module->instanceKey() ) + QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); + Module* module = ModuleManager::instance()->moduleInstance( moduleName ); + if ( module->interface() != Module::Interface::PythonQt || module->type() != Module::Type::View ) + return; + + for ( ViewStep* step : ViewManager::instance()->viewSteps() ) { - PythonQtViewStep* pqvs = qobject_cast< PythonQtViewStep* >( step ); - if ( pqvs ) + if ( step->moduleInstanceKey() == module->instanceKey() ) { - QWidget* consoleWindow = new QWidget; + PythonQtViewStep* pqvs = qobject_cast< PythonQtViewStep* >( step ); + if ( pqvs ) + { + QWidget* consoleWindow = new QWidget; - QWidget* console = pqvs->createScriptingConsole(); - console->setParent( consoleWindow ); + QWidget* console = pqvs->createScriptingConsole(); + console->setParent( consoleWindow ); - QVBoxLayout* layout = new QVBoxLayout; - consoleWindow->setLayout( layout ); - layout->addWidget( console ); + QVBoxLayout* layout = new QVBoxLayout; + consoleWindow->setLayout( layout ); + layout->addWidget( console ); - QHBoxLayout* bottomLayout = new QHBoxLayout; - layout->addLayout( bottomLayout ); + QHBoxLayout* bottomLayout = new QHBoxLayout; + layout->addLayout( bottomLayout ); - QLabel* bottomLabel = new QLabel( consoleWindow ); - bottomLayout->addWidget( bottomLabel ); - QString line = QString( "Module: %1
" - "Python class: %2" ) - .arg( module->instanceKey() ) - .arg( console->property( "classname" ).toString() ); - bottomLabel->setText( line ); + QLabel* bottomLabel = new QLabel( consoleWindow ); + bottomLayout->addWidget( bottomLabel ); + QString line = QString( "Module: %1
" + "Python class: %2" ) + .arg( module->instanceKey() ) + .arg( console->property( "classname" ).toString() ); + bottomLabel->setText( line ); - QPushButton* closeButton = new QPushButton( consoleWindow ); - closeButton->setText( "&Close" ); - QObject::connect( closeButton, &QPushButton::clicked, [consoleWindow] { consoleWindow->close(); } ); - bottomLayout->addWidget( closeButton ); - bottomLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); + QPushButton* closeButton = new QPushButton( consoleWindow ); + closeButton->setText( "&Close" ); + QObject::connect( + closeButton, &QPushButton::clicked, [ consoleWindow ] { consoleWindow->close(); } ); + bottomLayout->addWidget( closeButton ); + bottomLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); - consoleWindow->setParent( this ); - consoleWindow->setWindowFlags( Qt::Window ); - consoleWindow->setWindowTitle( "Calamares Python console" ); - consoleWindow->setAttribute( Qt::WA_DeleteOnClose, true ); - consoleWindow->showNormal(); - break; + consoleWindow->setParent( this ); + consoleWindow->setWindowFlags( Qt::Window ); + consoleWindow->setWindowTitle( "Calamares Python console" ); + consoleWindow->setAttribute( Qt::WA_DeleteOnClose, true ); + consoleWindow->showNormal(); + break; + } } } - } - } ); + } ); #endif connect( m_ui->modulesListView->selectionModel(), &QItemSelectionModel::selectionChanged, this, - [this + [ this #ifdef WITH_PYTHONQT - , - pythonConsoleButton + , + pythonConsoleButton #endif - ] { + ] + { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); - Module* module = ModuleManager::instance()->moduleInstance( moduleName ); + Module* module + = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); if ( module ) { m_module = module->configurationMap(); @@ -210,25 +208,35 @@ DebugWindow::DebugWindow() // Tools page connect( m_ui->crashButton, &QPushButton::clicked, this, [] { ::crash(); } ); - connect( m_ui->reloadStylesheetButton, &QPushButton::clicked, []() { - for ( auto* w : qApp->topLevelWidgets() ) - { - // Needs to match what's set in CalamaresWindow - if ( w->objectName() == QStringLiteral( "mainApp" ) ) - { - w->setStyleSheet( Calamares::Branding::instance()->stylesheet() ); - } - } - } ); - connect( m_ui->widgetTreeButton, &QPushButton::clicked, []() { - for ( auto* w : qApp->topLevelWidgets() ) - { - Logger::CDebug deb; - dumpWidgetTree( deb, w, 0 ); - } - } ); + connect( m_ui->reloadStylesheetButton, + &QPushButton::clicked, + []() + { + for ( auto* w : qApp->topLevelWidgets() ) + { + // Needs to match what's set in CalamaresWindow + if ( w->objectName() == QStringLiteral( "mainApp" ) ) + { + w->setStyleSheet( Calamares::Branding::instance()->stylesheet() ); + } + } + } ); + connect( m_ui->widgetTreeButton, + &QPushButton::clicked, + []() + { + for ( auto* w : qApp->topLevelWidgets() ) + { + Logger::CDebug deb; + dumpWidgetTree( deb, w, 0 ); + } + } ); - CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); setWindowTitle( tr( "Debug information" ) ); ) + // Send Log button only if it would be useful + m_ui->sendLogButton->setVisible( CalamaresUtils::Paste::isEnabled() ); + connect( m_ui->sendLogButton, &QPushButton::clicked, [ this ]() { CalamaresUtils::Paste::doLogUploadUI( this ); } ); + + CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); setWindowTitle( tr( "Debug information" ) ); ); } @@ -239,4 +247,65 @@ DebugWindow::closeEvent( QCloseEvent* e ) emit closed(); } + +DebugWindowManager::DebugWindowManager( QObject* parent ) + : QObject( parent ) +{ +} + + +bool +DebugWindowManager::enabled() const +{ + const auto* s = Settings::instance(); + return ( Logger::logLevel() >= Logger::LOGVERBOSE ) || ( s ? s->debugMode() : false ); +} + + +void +DebugWindowManager::show( bool visible ) +{ + if ( !enabled() ) + { + visible = false; + } + if ( m_visible == visible ) + { + return; + } + + if ( visible ) + { + m_debugWindow = new Calamares::DebugWindow(); + m_debugWindow->show(); + connect( m_debugWindow.data(), + &Calamares::DebugWindow::closed, + this, + [ = ]() + { + m_debugWindow->deleteLater(); + m_visible = false; + emit visibleChanged( false ); + } ); + m_visible = true; + emit visibleChanged( true ); + } + else + { + if ( m_debugWindow ) + { + m_debugWindow->deleteLater(); + } + m_visible = false; + emit visibleChanged( false ); + } +} + +void +DebugWindowManager::toggle() +{ + show( !m_visible ); +} + + } // namespace Calamares diff --git a/src/calamares/DebugWindow.h b/src/calamares/DebugWindow.h index 764a141c2..41d92588d 100644 --- a/src/calamares/DebugWindow.h +++ b/src/calamares/DebugWindow.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_DEBUGWINDOW_H @@ -22,6 +13,7 @@ #include "VariantModel.h" +#include #include #include @@ -57,6 +49,44 @@ private: std::unique_ptr< VariantModel > m_module_model; }; +/** @brief Manager for the (single) DebugWindow + * + * Only one DebugWindow is expected to be around. This class manages + * (exactly one) DebugWindow and can create and destroy it as needed. + * It is available to the Calamares panels as object `DebugWindow`. + */ +class DebugWindowManager : public QObject +{ + Q_OBJECT + + /// @brief Proxy to Settings::debugMode() default @c false + Q_PROPERTY( bool enabled READ enabled CONSTANT FINAL ) + + /** @brief Is the debug window visible? + * + * Writing @c true to this **may** make the debug window visible to + * the user; only if debugMode() is on. + */ + Q_PROPERTY( bool visible READ visible WRITE show NOTIFY visibleChanged ) + +public: + DebugWindowManager( QObject* parent = nullptr ); + virtual ~DebugWindowManager() override = default; + +public Q_SLOTS: + bool enabled() const; + bool visible() const { return m_visible; } + void show( bool visible ); + void toggle(); + +signals: + void visibleChanged( bool visible ); + +private: + QPointer< DebugWindow > m_debugWindow; + bool m_visible = false; +}; + } // namespace Calamares #endif diff --git a/src/calamares/DebugWindow.ui b/src/calamares/DebugWindow.ui index 63a6a840a..1b163d49d 100644 --- a/src/calamares/DebugWindow.ui +++ b/src/calamares/DebugWindow.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + Calamares::DebugWindow @@ -17,7 +21,7 @@ - 2 + 0 @@ -52,7 +56,7 @@ - + Type: @@ -66,7 +70,7 @@ - + Interface: @@ -88,49 +92,64 @@ - - - Tools - - - - - - Crash now - - - - - - - Reload Stylesheet - - - - - - - Widget Tree - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - + + + + + + Crashes Calamares, so that Dr. Konqui can look at it. + + + Crash now + + + + + + + + + + Reloads the stylesheet from the branding directory. + + + Reload Stylesheet + + + + + + + + + + Displays the tree of widget names in the log (for stylesheet debugging). + + + Widget Tree + + + + + + + + + + Uploads the session log to the configured pastebin. + + + Send Session Log + + + + + + + + diff --git a/src/calamares/VariantModel.cpp b/src/calamares/VariantModel.cpp index 2d8313665..c29c27fcf 100644 --- a/src/calamares/VariantModel.cpp +++ b/src/calamares/VariantModel.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "VariantModel.h" @@ -238,11 +229,11 @@ VariantModel::headerData( int section, Qt::Orientation orientation, int role ) c { if ( section == 0 ) { - return tr( "Key" ); + return tr( "Key", "Column header for key/value" ); } else if ( section == 1 ) { - return tr( "Value" ); + return tr( "Value", "Column header for key/value" ); } else { diff --git a/src/calamares/VariantModel.h b/src/calamares/VariantModel.h index bdf6da866..9d3323145 100644 --- a/src/calamares/VariantModel.h +++ b/src/calamares/VariantModel.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VARIANTMODEL_H @@ -39,6 +30,7 @@ */ class VariantModel : public QAbstractItemModel { + Q_OBJECT public: /** @brief Auxiliary data * diff --git a/src/calamares/calamares-navigation.qml b/src/calamares/calamares-navigation.qml index c7cd91835..becc1b47a 100644 --- a/src/calamares/calamares-navigation.qml +++ b/src/calamares/calamares-navigation.qml @@ -1,3 +1,13 @@ +/* Sample of QML navigation. + + SPDX-FileCopyrightText: 2020 Adriaan de Groot + SPDX-License-Identifier: GPL-3.0-or-later + + + The navigation panel is generally "horizontal" in layout, with + buttons for next and previous; this particular one copies + the layout and size of the widgets panel. +*/ import io.calamares.ui 1.0 import io.calamares.core 1.0 @@ -8,10 +18,10 @@ import QtQuick.Layouts 1.3 Rectangle { id: navigationBar; color: Branding.styleString( Branding.SidebarBackground ); + height: 48; RowLayout { id: buttonBar - height: 64; anchors.fill: parent; Item @@ -25,7 +35,7 @@ Rectangle { icon.name: ViewManager.backIcon; enabled: ViewManager.backEnabled; - visible: true; + visible: ViewManager.backAndNextVisible; onClicked: { ViewManager.back(); } } Button @@ -34,12 +44,15 @@ Rectangle { icon.name: ViewManager.nextIcon; enabled: ViewManager.nextEnabled; - visible: true; + visible: ViewManager.backAndNextVisible; onClicked: { ViewManager.next(); } + // This margin goes in the "next" button, because the "quit" + // button can vanish and we want to keep the margin to + // the next-thing-in-the-navigation-panel around. + Layout.rightMargin: 3 * buttonBar.spacing; } Button { - Layout.leftMargin: 3 * buttonBar.spacing; // little gap from back/next Layout.rightMargin: 2 * buttonBar.spacing text: ViewManager.quitLabel; icon.name: ViewManager.quitIcon; @@ -49,6 +62,19 @@ Rectangle { ToolTip.delay: 1000 ToolTip.text: ViewManager.quitTooltip; + /* + * The ViewManager has settings -- user-controlled via the + * branding component, and party based on program state -- + * whether the quit button should be enabled and visible. + * + * QML navigation *should* follow this pattern, but can also + * add other qualifications. For instance, you may have a + * "finished" module that handles quit in its own way, and + * want to hide the quit button then. The ViewManager has a + * current step and a total count, so compare them: + * + * visible: ViewManager.quitVisible && ( ViewManager.currentStepIndex < ViewManager.rowCount()-1); + */ enabled: ViewManager.quitEnabled; visible: ViewManager.quitVisible; onClicked: { ViewManager.quit(); } diff --git a/src/calamares/calamares-sidebar.qml b/src/calamares/calamares-sidebar.qml index 183a9acb2..5c94fb6b2 100644 --- a/src/calamares/calamares-sidebar.qml +++ b/src/calamares/calamares-sidebar.qml @@ -1,3 +1,16 @@ +/* Sample of QML progress tree. + + SPDX-FileCopyrightText: 2020 Adriaan de Groot + SPDX-FileCopyrightText: 2021 Anke Boersma + SPDX-License-Identifier: GPL-3.0-or-later + + + The progress tree (actually a list) is generally "vertical" in layout, + with the steps going "down", but it could also be a more compact + horizontal layout with suitable branding settings. + + This example emulates the layout and size of the widgets progress tree. +*/ import io.calamares.ui 1.0 import io.calamares.core 1.0 @@ -7,6 +20,7 @@ import QtQuick.Layouts 1.3 Rectangle { id: sideBar; color: Branding.styleString( Branding.SidebarBackground ); + anchors.fill: parent; ColumnLayout { anchors.fill: parent; @@ -27,16 +41,17 @@ Rectangle { Repeater { model: ViewManager Rectangle { - Layout.leftMargin: 12; - width: parent.width - 24; + Layout.leftMargin: 6; + Layout.rightMargin: 6; + Layout.fillWidth: true; height: 35; radius: 6; - color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarTextHighlight : Branding.SidebarBackground ); + color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarBackgroundSelected : Branding.SidebarBackground ); Text { anchors.verticalCenter: parent.verticalCenter; - x: parent.x + 12; - color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarTextSelect : Branding.SidebarText ); + anchors.horizontalCenter: parent.horizontalCenter; + color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarTextSelected : Branding.SidebarText ); text: display; } } @@ -45,5 +60,29 @@ Rectangle { Item { Layout.fillHeight: true; } + + Rectangle { + Layout.fillWidth: true; + height: 35 + Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom + color: Branding.styleString( mouseArea.containsMouse ? Branding.SidebarTextHighlight : Branding.SidebarBackground); + visible: debug.enabled + + MouseArea { + id: mouseArea + anchors.fill: parent; + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + Text { + anchors.verticalCenter: parent.verticalCenter; + x: parent.x + 4; + text: qsTr("Show debug information") + color: Branding.styleString( mouseArea.containsMouse ? Branding.SidebarTextSelect : Branding.SidebarBackground ); + font.pointSize : 9 + } + + onClicked: debug.toggle() + } + } } } diff --git a/src/calamares/calamares.qrc b/src/calamares/calamares.qrc index 17db2e08a..5733ea065 100644 --- a/src/calamares/calamares.qrc +++ b/src/calamares/calamares.qrc @@ -1,6 +1,10 @@ - - - calamares-sidebar.qml - calamares-navigation.qml - + + + + + calamares-sidebar.qml + calamares-navigation.qml + diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp index 2af46119b..de709156f 100644 --- a/src/calamares/main.cpp +++ b/src/calamares/main.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ @@ -25,11 +16,16 @@ #include "utils/Logger.h" #include "utils/Retranslator.h" +#ifndef WITH_KF5DBus #include "3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h" +#endif -#include +#include +#ifdef WITH_KF5DBus +#include +#endif #ifdef WITH_KF5Crash -#include +#include #endif #include @@ -63,7 +59,13 @@ debug_level( QCommandLineParser& parser, QCommandLineOption& levelOption ) } } -static void +/** @brief Handles the command-line arguments + * + * Sets up internals for Calamares based on command-line arguments like `-D`, + * `-d`, etc. Returns @c true if this is a *debug* run, i.e. if the `-d` + * command-line flag is given, @c false otherwise. + */ +static bool handle_args( CalamaresApplication& a ) { QCommandLineOption debugOption( QStringList { "d", "debug" }, @@ -100,8 +102,8 @@ handle_args( CalamaresApplication& a ) CalamaresUtils::setXdgDirs(); } CalamaresUtils::setAllowLocalTranslation( parser.isSet( debugOption ) || parser.isSet( debugTxOption ) ); - Calamares::Settings::init( parser.isSet( debugOption ) ); - a.init(); + + return parser.isSet( debugOption ); } int @@ -129,13 +131,14 @@ main( int argc, char* argv[] ) // TODO: umount anything in /tmp/calamares-... as an emergency save function #endif - KDSingleApplicationGuard guard( KDSingleApplicationGuard::AutoKillOtherInstances ); - if ( guard.isPrimaryInstance() ) - { - handle_args( a ); - return a.exec(); - } - else + bool is_debug = handle_args( a ); + +#ifdef WITH_KF5DBus + KDBusService service( is_debug ? KDBusService::Multiple : KDBusService::Unique ); +#else + KDSingleApplicationGuard guard( is_debug ? KDSingleApplicationGuard::NoPolicy + : KDSingleApplicationGuard::AutoKillOtherInstances ); + if ( !is_debug && !guard.isPrimaryInstance() ) { // Here we have not yet set-up the logger system, so qDebug() is ok auto instancelist = guard.instances(); @@ -150,4 +153,14 @@ main( int argc, char* argv[] ) } return 69; // EX_UNAVAILABLE on FreeBSD } +#endif + + Calamares::Settings::init( is_debug ); + if ( !Calamares::Settings::instance() || !Calamares::Settings::instance()->isValid() ) + { + qCritical() << "Calamares has invalid settings, shutting down."; + return 78; // EX_CONFIG on FreeBSD + } + a.init(); + return a.exec(); } diff --git a/src/calamares/progresstree/ProgressTreeDelegate.cpp b/src/calamares/progresstree/ProgressTreeDelegate.cpp index 7b7101f5d..48b5b4328 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.cpp +++ b/src/calamares/progresstree/ProgressTreeDelegate.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProgressTreeDelegate.h" diff --git a/src/calamares/progresstree/ProgressTreeDelegate.h b/src/calamares/progresstree/ProgressTreeDelegate.h index d36bd4d14..55dcf7ac4 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.h +++ b/src/calamares/progresstree/ProgressTreeDelegate.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PROGRESSTREEDELEGATE_H diff --git a/src/calamares/progresstree/ProgressTreeView.cpp b/src/calamares/progresstree/ProgressTreeView.cpp index 22b11bfc6..900dd5028 100644 --- a/src/calamares/progresstree/ProgressTreeView.cpp +++ b/src/calamares/progresstree/ProgressTreeView.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProgressTreeView.h" @@ -60,6 +51,6 @@ ProgressTreeView::setModel( QAbstractItemModel* model ) Calamares::ViewManager::instance(), &Calamares::ViewManager::currentStepChanged, this, - [this]() { viewport()->update(); }, + [ this ]() { viewport()->update(); }, Qt::UniqueConnection ); } diff --git a/src/calamares/progresstree/ProgressTreeView.h b/src/calamares/progresstree/ProgressTreeView.h index 4a1bf9f2d..5c416dfd6 100644 --- a/src/calamares/progresstree/ProgressTreeView.h +++ b/src/calamares/progresstree/ProgressTreeView.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PROGRESSTREEVIEW_H @@ -31,7 +22,7 @@ class ProgressTreeView : public QListView Q_OBJECT public: explicit ProgressTreeView( QWidget* parent = nullptr ); - virtual ~ProgressTreeView() override; + ~ProgressTreeView() override; /** * @brief setModel assigns a model to this view. diff --git a/src/modules/test_conf.cpp b/src/calamares/test_conf.cpp similarity index 63% rename from src/modules/test_conf.cpp rename to src/calamares/test_conf.cpp index 06247bfed..73b19aa26 100644 --- a/src/modules/test_conf.cpp +++ b/src/calamares/test_conf.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @@ -23,26 +14,29 @@ #include "utils/Yaml.h" -#include #include +#include #include -#include #include +#include using std::cerr; static const char usage[] = "Usage: test_conf [-v] [-b] ...\n"; -int main(int argc, char** argv) +int +main( int argc, char** argv ) { bool verbose = false; bool bytes = false; int opt; - while ((opt = getopt(argc, argv, "vb")) != -1) { - switch (opt) { + while ( ( opt = getopt( argc, argv, "vb" ) ) != -1 ) + { + switch ( opt ) + { case 'v': verbose = true; break; @@ -61,7 +55,7 @@ int main(int argc, char** argv) return 1; } - const char* filename = argv[optind]; + const char* filename = argv[ optind ]; try { YAML::Node doc; @@ -69,10 +63,14 @@ int main(int argc, char** argv) { QFile f( filename ); if ( f.open( QFile::ReadOnly | QFile::Text ) ) + { doc = YAML::Load( f.readAll().constData() ); + } } else + { doc = YAML::LoadFile( filename ); + } if ( doc.IsNull() ) { @@ -95,12 +93,14 @@ int main(int argc, char** argv) { cerr << "Keys:\n"; for ( auto i = doc.begin(); i != doc.end(); ++i ) - cerr << i->first.as() << '\n'; + { + cerr << i->first.as< std::string >() << '\n'; + } } } catch ( YAML::Exception& e ) { - cerr << "WARNING:" << filename << '\n'; + cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: YAML parser error " << e.what() << '\n'; return 1; } diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index cd06c5d03..87d90c882 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* @@ -22,18 +13,31 @@ * bindings. */ -#include "modulesystem/Module.h" -#include "utils/Logger.h" -#include "utils/Yaml.h" - #include "Branding.h" +#include "CppJob.h" #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" - +#include "modulesystem/Module.h" #include "modulesystem/ModuleManager.h" +#include "modulesystem/ViewModule.h" +#include "utils/Logger.h" +#include "utils/Retranslator.h" +#include "utils/Yaml.h" +#include "viewpages/ExecutionViewStep.h" + +// Optional features of Calamares +// - Python support +// - QML support +#ifdef WITH_PYTHON +#include "PythonJob.h" +#endif +#ifdef WITH_QML +#include "utils/Qml.h" +#endif + #include #include @@ -42,6 +46,7 @@ #include #include #include +#include #include @@ -58,6 +63,7 @@ struct ModuleConfig QString m_language; QString m_branding; bool m_ui; + bool m_pythonInjection; }; static ModuleConfig @@ -65,22 +71,21 @@ handle_args( QCoreApplication& a ) { QCommandLineOption debugLevelOption( QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8), ignored.", "level" ); - QCommandLineOption globalOption( QStringList() << QStringLiteral( "g" ) << QStringLiteral( "global " ), + QCommandLineOption globalOption( { QStringLiteral( "g" ), QStringLiteral( "global" ) }, QStringLiteral( "Global settings document" ), "global.yaml" ); - QCommandLineOption jobOption( QStringList() << QStringLiteral( "j" ) << QStringLiteral( "job" ), - QStringLiteral( "Job settings document" ), - "job.yaml" ); - QCommandLineOption langOption( QStringList() << QStringLiteral( "l" ) << QStringLiteral( "language" ), + QCommandLineOption jobOption( + { QStringLiteral( "j" ), QStringLiteral( "job" ) }, QStringLiteral( "Job settings document" ), "job.yaml" ); + QCommandLineOption langOption( { QStringLiteral( "l" ), QStringLiteral( "language" ) }, QStringLiteral( "Language (global)" ), "languagecode" ); - QCommandLineOption brandOption( QStringList() << QStringLiteral( "b" ) << QStringLiteral( "branding" ), + QCommandLineOption brandOption( { QStringLiteral( "b" ), QStringLiteral( "branding" ) }, QStringLiteral( "Branding directory" ), "path/to/branding.desc", "src/branding/default/branding.desc" ); - QCommandLineOption uiOption( QStringList() << QStringLiteral( "U" ) << QStringLiteral( "ui" ), - QStringLiteral( "Enable UI" ) ); - + QCommandLineOption uiOption( { QStringLiteral( "U" ), QStringLiteral( "ui" ) }, QStringLiteral( "Enable UI" ) ); + QCommandLineOption slideshowOption( { QStringLiteral( "s" ), QStringLiteral( "slideshow" ) }, + QStringLiteral( "Run slideshow module" ) ); QCommandLineParser parser; parser.setApplicationDescription( "Calamares module tester" ); parser.addHelpOption(); @@ -92,13 +97,20 @@ handle_args( QCoreApplication& a ) parser.addOption( langOption ); parser.addOption( brandOption ); parser.addOption( uiOption ); + parser.addOption( slideshowOption ); +#ifdef WITH_PYTHON + QCommandLineOption pythonOption( { QStringLiteral( "P" ), QStringLiteral( "no-injected-python" ) }, + QStringLiteral( "Do not disable potentially-harmful Python commands" ) ); + parser.addOption( pythonOption ); +#endif + parser.addPositionalArgument( "module", "Path or name of module to run." ); parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]" ); parser.process( a ); const QStringList args = parser.positionalArguments(); - if ( args.isEmpty() ) + if ( args.isEmpty() && !parser.isSet( slideshowOption ) ) { cError() << "Missing path.\n"; parser.showHelp(); @@ -116,26 +128,177 @@ handle_args( QCoreApplication& a ) jobSettings = args.at( 1 ); } - return ModuleConfig { args.first(), + bool pythonInjection = true; +#ifdef WITH_PYTHON + if ( parser.isSet( pythonOption ) ) + { + pythonInjection = false; + } +#endif + return ModuleConfig { parser.isSet( slideshowOption ) ? QStringLiteral( "-" ) : args.first(), jobSettings, parser.value( globalOption ), parser.value( langOption ), parser.value( brandOption ), - parser.isSet( uiOption ) }; + parser.isSet( slideshowOption ) || parser.isSet( uiOption ), + pythonInjection }; } } +/** @brief Bogus Job for --slideshow option + * + * Generally one would use DummyCppJob for this kind of dummy + * job, but that class lives in a module so isn't available + * in this test application. + * + * This bogus job just sleeps for 3. + */ +class ExecViewJob : public Calamares::CppJob +{ +public: + explicit ExecViewJob( const QString& name, unsigned long t = 3 ) + : m_name( name ) + , m_delay( t ) + { + } + ~ExecViewJob() override; + + QString prettyName() const override { return m_name; } + + Calamares::JobResult exec() override + { + QThread::sleep( m_delay ); + return Calamares::JobResult::ok(); + } + + void setConfigurationMap( const QVariantMap& ) override {} + +private: + QString m_name; + unsigned long m_delay; +}; + +ExecViewJob::~ExecViewJob() {} + +/** @brief Bogus module for --slideshow option + * + * Normally the slideshow -- displayed by ExecutionViewStep -- is not + * associated with any particular module in the Calamares configuration. + * It is added internally by the module manager. For the module-loader + * testing application, we need something that pretends to be the + * module for the ExecutionViewStep. + */ +class ExecViewModule : public Calamares::Module +{ +public: + ExecViewModule(); + ~ExecViewModule() override; + + void loadSelf() override; + + virtual Calamares::ModuleSystem::Type type() const override; + virtual Calamares::ModuleSystem::Interface interface() const override; + + virtual Calamares::JobList jobs() const override; + +protected: + void initFrom( const Calamares::ModuleSystem::Descriptor& ) override; +}; + +ExecViewModule::ExecViewModule() + : Calamares::Module() +{ + // Normally the module-loader gives the module an instance key + // (out of the settings file, or the descriptor of the module). + // We don't have one, so build one -- this gives us "execView@execView". + QVariantMap m; + const QString execView = QStringLiteral( "execView" ); + m.insert( "name", execView ); + Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, execView ), execView ); +} + +ExecViewModule::~ExecViewModule() {} + +void +ExecViewModule::initFrom( const Calamares::ModuleSystem::Descriptor& ) +{ +} + +void +ExecViewModule::loadSelf() +{ + auto* viewStep = new Calamares::ExecutionViewStep(); + viewStep->setModuleInstanceKey( instanceKey() ); + viewStep->setConfigurationMap( m_configurationMap ); + viewStep->appendJobModuleInstanceKey( instanceKey() ); + Calamares::ViewManager::instance()->addViewStep( viewStep ); + m_loaded = true; +} + +Calamares::Module::Type +ExecViewModule::type() const +{ + return Module::Type::View; +} + + +Calamares::Module::Interface +ExecViewModule::interface() const +{ + return Module::Interface::QtPlugin; +} + +Calamares::JobList +ExecViewModule::jobs() const +{ + Calamares::JobList l; + const auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs && gs->contains( "jobs" ) ) + { + QVariantList joblist = gs->value( "jobs" ).toList(); + for ( const auto& jd : joblist ) + { + QVariantMap jobdescription = jd.toMap(); + if ( jobdescription.contains( "name" ) && jobdescription.contains( "delay" ) ) + { + l.append( Calamares::job_ptr( new ExecViewJob( jobdescription.value( "name" ).toString(), + jobdescription.value( "delay" ).toULongLong() ) ) ); + } + } + } + if ( l.count() > 0 ) + { + return l; + } + + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step 1" ) ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step two" ) ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "locking mutexes" ), 20 ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "unlocking mutexes" ), 1 ) ) ); + for ( const QString& s : QStringList { "Harder", "Better", "Faster", "Stronger" } ) + { + l.append( Calamares::job_ptr( new ExecViewJob( s, 0 ) ) ); + } + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "cleaning up" ), 20 ) ) ); + return l; +} static Calamares::Module* load_module( const ModuleConfig& moduleConfig ) { QString moduleName = moduleConfig.moduleName(); - QFileInfo fi; + if ( moduleName == "-" ) + { + return new ExecViewModule; + } + + QFileInfo fi; // This is kept around to hold the path of the module descriptor bool ok = false; QVariantMap descriptor; - for ( const QString& prefix : QStringList { "./", "src/modules/", "modules/" } ) + QStringList moduleDirectories { "./", "src/modules/", "modules/", CMAKE_INSTALL_FULL_LIBDIR "/calamares/modules/" }; + for ( const QString& prefix : qAsConst( moduleDirectories ) ) { // Could be a complete path, eg. src/modules/dummycpp/module.desc fi = QFileInfo( prefix + moduleName ); @@ -161,12 +324,23 @@ load_module( const ModuleConfig& moduleConfig ) { break; } + else + { + if ( !fi.exists() ) + { + cDebug() << "Expected a descriptor file" << fi.path(); + } + else + { + cDebug() << "Read descriptor" << fi.path() << "and it was empty."; + } + } } } if ( !ok ) { - cWarning() << "No suitable module descriptor found."; + cWarning() << "No suitable module descriptor found in" << Logger::DebugList( moduleDirectories ); return nullptr; } @@ -181,13 +355,29 @@ load_module( const ModuleConfig& moduleConfig ) QString configFile( moduleConfig.configFile().isEmpty() ? moduleDirectory + '/' + name + ".conf" : moduleConfig.configFile() ); - cDebug() << "Module" << moduleName << "job-configuration:" << configFile; + cDebug() << Logger::SubEntry << "Module" << moduleName << "job-configuration:" << configFile; - Calamares::Module* module = Calamares::moduleFromDescriptor( descriptor, name, configFile, moduleDirectory ); + Calamares::Module* module = Calamares::moduleFromDescriptor( + Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor, fi.absoluteFilePath() ), + name, + configFile, + moduleDirectory ); return module; } +static bool +is_ui_option( const char* s ) +{ + return !qstrcmp( s, "--ui" ) || !qstrcmp( s, "-U" ); +} + +static bool +is_slideshow_option( const char* s ) +{ + return !qstrcmp( s, "--slideshow" ) || !qstrcmp( s, "-s" ); +} + /** @brief Create the right kind of QApplication * * Does primitive parsing of argv[] to find the --ui option and returns @@ -202,7 +392,7 @@ createApplication( int& argc, char* argv[] ) { for ( int i = 1; i < argc; ++i ) { - if ( !qstrcmp( argv[ i ], "--ui" ) || !qstrcmp( argv[ i ], "-U" ) ) + if ( is_slideshow_option( argv[ i ] ) || is_ui_option( argv[ i ] ) ) { auto* aw = new QApplication( argc, argv ); aw->setQuitOnLastWindowClosed( true ); @@ -212,6 +402,46 @@ createApplication( int& argc, char* argv[] ) return new QCoreApplication( argc, argv ); } +#ifdef WITH_PYTHON +static const char pythonPreScript[] = R"%( +# This is Python code executed by Python modules *before* the +# script file (e.g. main.py) is executed. +# +# Calls to suprocess methods that execute something are +# suppressed and logged -- scripts should really be using libcalamares +# methods instead. +_calamares_subprocess = __import__("subprocess", globals(), locals(), [], 0) +import sys +import libcalamares +class fake_subprocess(object): + PIPE = object() + STDOUT = object() + STDERR = object() + class CompletedProcess(object): + returncode = 0 + stdout = "" + stderr = "" + @staticmethod + def call(*args, **kwargs): + libcalamares.utils.debug("subprocess.call(%r,%r) X ignored" % (args, kwargs)) + return 0 + @staticmethod + def check_call(*args, **kwargs): + libcalamares.utils.debug("subprocess.check_call(%r,%r) X ignored" % (args, kwargs)) + return 0 + # This is a 3.5-and-later method, is supposed to return a CompletedProcess + @staticmethod + def run(*args, **kwargs): + libcalamares.utils.debug("subprocess.run(%r,%r) X ignored" % (args, kwargs)) + return fake_subprocess.CompletedProcess() +for attr in ("CalledProcessError",): + setattr(fake_subprocess,attr,getattr(_calamares_subprocess,attr)) +sys.modules["subprocess"] = fake_subprocess +libcalamares.utils.debug('pre-script for testing purposes injected') + +)%"; +#endif + int main( int argc, char* argv[] ) { @@ -241,6 +471,16 @@ main( int argc, char* argv[] ) gs->insert( "localeConf", vm ); } +#ifdef WITH_PYTHON + if ( module.m_pythonInjection ) + { + Calamares::PythonJob::setInjectedPreScript( pythonPreScript ); + } +#endif +#ifdef WITH_QML + CalamaresUtils::initQmlModulesDir(); // don't care if failed +#endif + cDebug() << "Calamares module-loader testing" << module.moduleName(); Calamares::Module* m = load_module( module ); if ( !m ) @@ -249,14 +489,29 @@ main( int argc, char* argv[] ) return 1; } - cDebug() << " .. got" << m->name() << m->typeString() << m->interfaceString(); + cDebug() << Logger::SubEntry << "got" << m->name() << m->typeString() << m->interfaceString(); if ( m->type() == Calamares::Module::Type::View ) { + // If we forgot the --ui, any ViewModule will core dump as it + // tries to create the widget **which won't be used anyway**. + // + // To avoid that crash, re-create the QApplication, now with GUI + if ( !qobject_cast< QApplication* >( aw ) ) + { + auto* replace_app = new QApplication( argc, argv ); + replace_app->setQuitOnLastWindowClosed( true ); + aw = replace_app; + } mw = module.m_ui ? new QMainWindow() : nullptr; + if ( mw ) + { + mw->installEventFilter( CalamaresUtils::Retranslator::instance() ); + } (void)new Calamares::Branding( module.m_branding ); - (void)new Calamares::ModuleManager( QStringList(), nullptr ); + auto* modulemanager = new Calamares::ModuleManager( QStringList(), nullptr ); (void)Calamares::ViewManager::instance( mw ); + modulemanager->addModule( m ); } if ( !m->isLoaded() ) @@ -284,15 +539,16 @@ main( int argc, char* argv[] ) using TR = Logger::DebugRow< const char*, const QString >; - cDebug() << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() ) + cDebug() << Logger::SubEntry << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() ) << TR( "interface", m->interfaceString() ); - cDebug() << "Job outputs:"; Calamares::JobList jobList = m->jobs(); unsigned int failure_count = 0; unsigned int count = 1; for ( const auto& p : jobList ) { + // This doesn't get a SubEntry because the jobs may log a bunch of + // things; print the function-header to make clear that we're back in main. cDebug() << "Job #" << count << "name" << p->prettyName(); Calamares::JobResult r = p->exec(); if ( !r ) diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 91dce96cd..2cf0342ec 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -1,17 +1,24 @@ -# libcalamares is the non-GUI part of Calamares, which includes handling -# translations, configurations, logging, utilities, global storage, and (non-GUI) jobs. +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# -add_definitions( - ${QT_DEFINITIONS} - -DQT_SHARED - -DQT_SHAREDPOINTER_TRACK_POINTERS - -DDLLEXPORT_PRO -) +# +# libcalamares is the non-GUI part of Calamares, which includes handling +# translations, configurations, logging, utilities, global storage, and +# (non-GUI) jobs. +# + +add_definitions( -DDLLEXPORT_PRO ) +include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/CalamaresConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/CalamaresConfig.h ) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/../calamares/CalamaresVersion.h.in +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/CalamaresVersion.h.in ${CMAKE_CURRENT_BINARY_DIR}/CalamaresVersion.h ) +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/CalamaresVersionX.h.in + ${CMAKE_CURRENT_BINARY_DIR}/CalamaresVersionX.h ) set( OPTIONAL_PRIVATE_LIBRARIES "" ) set( OPTIONAL_PUBLIC_LIBRARIES "" ) @@ -27,27 +34,36 @@ set( libSources # GeoIP services geoip/Interface.cpp + geoip/GeoIPFixed.cpp geoip/GeoIPJSON.cpp geoip/Handler.cpp # Locale-data service - locale/Label.cpp - locale/LabelModel.cpp + locale/Global.cpp locale/Lookup.cpp locale/TimeZone.cpp locale/TranslatableConfiguration.cpp + locale/TranslatableString.cpp + locale/Translation.cpp + locale/TranslationsModel.cpp # Modules + modulesystem/Config.cpp + modulesystem/Descriptor.cpp modulesystem/InstanceKey.cpp modulesystem/Module.cpp - modulesystem/Requirement.cpp + modulesystem/Preset.cpp modulesystem/RequirementsChecker.cpp modulesystem/RequirementsModel.cpp # Network service network/Manager.cpp + # Packages service + packages/Globals.cpp + # Partition service + partition/Global.cpp partition/Mount.cpp partition/PartitionSize.cpp partition/Sync.cpp @@ -58,29 +74,23 @@ set( libSources utils/Dirs.cpp utils/Entropy.cpp utils/Logger.cpp + utils/Permissions.cpp utils/PluginFactory.cpp utils/Retranslator.cpp + utils/Runner.cpp utils/String.cpp utils/UMask.cpp utils/Variant.cpp utils/Yaml.cpp ) -set( _kdsagSources - kdsingleapplicationguard/kdsingleapplicationguard.cpp - kdsingleapplicationguard/kdsharedmemorylocker.cpp - kdsingleapplicationguard/kdtoolsglobal.cpp - kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp -) -set( kdsagSources "" ) -foreach( _s ${_kdsagSources} ) - list( APPEND kdsagSources ${CMAKE_SOURCE_DIR}/3rdparty/${_s} ) -endforeach() -mark_thirdparty_code( ${kdsagSources} ) -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} -) +### OPTIONAL Automount support (requires dbus) +# +# +if( Qt5DBus_FOUND) + list( APPEND libSources partition/AutoMount.cpp ) + list( APPEND OPTIONAL_PRIVATE_LIBRARIES Qt5::DBus ) +endif() ### OPTIONAL Python support # @@ -91,9 +101,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}) @@ -119,30 +126,15 @@ endif() ### OPTIONAL KPMcore support # # -find_package( KPMcore 3.3 ) -set_package_properties( - KPMcore PROPERTIES - URL "https://invent.kde.org/kde/kpmcore" - DESCRIPTION "KDE Partitioning library" - TYPE RECOMMENDED - PURPOSE "For partitioning service" -) +include( KPMcoreHelper ) if ( KPMcore_FOUND ) find_package( Qt5 REQUIRED DBus ) # Needed for KPMCore find_package( KF5 REQUIRED I18n WidgetsAddons ) # Needed for KPMCore - if( KPMcore_VERSION VERSION_GREATER_EQUAL "4.2" ) - add_definitions( - -DWITH_KPMCORE42API - -DWITH_KPMCORE4API - ) # kpmcore 4.2 with new API - elseif( KPMcore_VERSION VERSION_GREATER_EQUAL "4.0" ) - add_definitions( -DWITH_KPMCORE4API ) # kpmcore 4 with new API - elseif( KPMcore_VERSION VERSION_GREATER "3.3.70" ) - message( FATAL_ERROR "KPMCore beta versions ${KPMcore_VERSION} not supported" ) - endif() - + foreach ( d ${KPMcore_API_DEFINITIONS} ) + add_definitions( -D${d} ) + endforeach() include_directories( ${KPMCORE_INCLUDE_DIR} ) list( APPEND libSources partition/FileSystem.cpp @@ -156,11 +148,12 @@ endif() ### LIBRARY # # -add_library( calamares SHARED ${libSources} ${kdsagSources} ) +add_library( calamares SHARED ${libSources} ) set_target_properties( calamares PROPERTIES VERSION ${CALAMARES_VERSION_SHORT} SOVERSION ${CALAMARES_VERSION_SHORT} + INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_INSTALL_FULL_INCLUDEDIR}/libcalamares ) calamares_automoc( calamares ) @@ -168,14 +161,19 @@ target_link_libraries( calamares LINK_PRIVATE ${OPTIONAL_PRIVATE_LIBRARIES} LINK_PUBLIC - yamlcpp + yamlcpp::yamlcpp Qt5::Core KF5::CoreAddons ${OPTIONAL_PUBLIC_LIBRARIES} ) +add_library(Calamares::calamares ALIAS calamares) + +### Installation +# +# install( TARGETS calamares - EXPORT CalamaresLibraryDepends + EXPORT Calamares RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -190,13 +188,19 @@ install( CODE " # Install header files file( GLOB rootHeaders "*.h" ) -file( GLOB kdsingleapplicationguardHeaders "kdsingleapplicationguard/*.h" ) -file( GLOB utilsHeaders "utils/*.h" ) +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/CalamaresConfig.h + ${CMAKE_CURRENT_BINARY_DIR}/CalamaresVersion.h + ${rootHeaders} + DESTINATION include/libcalamares +) +# Install each subdir-worth of header files +foreach( subdir geoip locale modulesystem network partition utils ) + file( GLOB subdir_headers "${subdir}/*.h" ) + install( FILES ${subdir_headers} DESTINATION include/libcalamares/${subdir} ) +endforeach() -install( FILES ${CMAKE_CURRENT_BINARY_DIR}/CalamaresConfig.h DESTINATION include/libcalamares ) -install( FILES ${rootHeaders} DESTINATION include/libcalamares ) -install( FILES ${kdsingleapplicationguardHeaders} DESTINATION include/libcalamares/kdsingleapplicationguard ) -install( FILES ${utilsHeaders} DESTINATION include/libcalamares/utils ) ### TESTING # @@ -204,32 +208,65 @@ install( FILES ${utilsHeaders} DESTINATION include/libcalam calamares_add_test( libcalamarestest SOURCES - utils/Tests.cpp + Tests.cpp ) calamares_add_test( - libcalamarestestpaths - SOURCES - utils/TestPaths.cpp -) - -calamares_add_test( - geoiptest + libcalamaresgeoiptest SOURCES geoip/GeoIPTests.cpp ${geoip_src} ) -calamares_add_test( - libcalamarespartitiontest - SOURCES - partition/Tests.cpp -) +function ( calamares_qrc_translations basename ) + set( NAME ${ARGV0} ) + set( options "" ) + set( oneValueArgs SUBDIRECTORY OUTPUT_VARIABLE ) + set( multiValueArgs LANGUAGES ) + cmake_parse_arguments( _qrt "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + if( NOT _qrt_OUTPUT_VARIABLE ) + set( _qrt_OUTPUT_VARIABLE "qrc_translations_${basename}" ) + endif() + + set( translations_qrc_infile ${CMAKE_CURRENT_BINARY_DIR}/${basename}.qrc ) + set( translations_qrc_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${basename}.cxx ) + + # Must use this variable name because of the @ substitution + set( calamares_i18n_qrc_content "" ) + set( calamares_i18n_ts_filelist "" ) + foreach( lang ${_qrt_LANGUAGES} ) + string( APPEND calamares_i18n_qrc_content "${basename}_${lang}.qm" ) + list( APPEND calamares_i18n_ts_filelist "${CMAKE_CURRENT_SOURCE_DIR}/${_qrt_SUBDIRECTORY}/${basename}_${lang}.ts" ) + endforeach() + + configure_file( ${CMAKE_SOURCE_DIR}/lang/calamares_i18n.qrc.in ${translations_qrc_infile} @ONLY ) + qt5_add_translation(QM_FILES ${calamares_i18n_ts_filelist}) + + # Run the resource compiler (rcc_options should already be set) + add_custom_command( + OUTPUT ${translations_qrc_outfile} + COMMAND "${Qt5Core_RCC_EXECUTABLE}" + ARGS ${rcc_options} --format-version 1 -name ${basename} -o ${translations_qrc_outfile} ${translations_qrc_infile} + MAIN_DEPENDENCY ${translations_qrc_infile} + DEPENDS ${QM_FILES} + ) + + set( ${_qrt_OUTPUT_VARIABLE} ${translations_qrc_outfile} PARENT_SCOPE ) +endfunction() + +calamares_qrc_translations( localetest OUTPUT_VARIABLE localetest_qrc SUBDIRECTORY testdata LANGUAGES nl ) calamares_add_test( libcalamareslocaletest SOURCES locale/Tests.cpp + ${localetest_qrc} +) + +calamares_add_test( + libcalamaresmodulesystemtest + SOURCES + modulesystem/Tests.cpp ) calamares_add_test( @@ -239,13 +276,51 @@ calamares_add_test( ) calamares_add_test( - libcalamaresmodulesystemtest + libcalamarespackagestest SOURCES - modulesystem/Tests.cpp + packages/Tests.cpp ) -if( BUILD_TESTING ) - add_executable( test_geoip geoip/test_geoip.cpp ${geoip_src} ) - target_link_libraries( test_geoip calamares Qt5::Network yamlcpp ) - calamares_automoc( test_geoip ) +calamares_add_test( + libcalamarespartitiontest + SOURCES + partition/Global.cpp + partition/Tests.cpp + LIBRARIES + ${OPTIONAL_PRIVATE_LIBRARIES} +) + +if( KPMcore_FOUND ) + calamares_add_test( + libcalamarespartitionkpmtest + SOURCES + partition/KPMTests.cpp + LIBRARIES + ${OPTIONAL_PRIVATE_LIBRARIES} + ) +endif() + +calamares_add_test( + libcalamaresutilstest + SOURCES + utils/Tests.cpp + utils/Runner.cpp +) + +calamares_add_test( + libcalamaresutilspathstest + SOURCES + utils/TestPaths.cpp +) + + +# This is not an actual test, it's a test / demo application +# for experimenting with GeoIP. +add_executable( test_geoip geoip/test_geoip.cpp ${geoip_src} ) +target_link_libraries( test_geoip Calamares::calamares Qt5::Network yamlcpp::yamlcpp ) +calamares_automoc( test_geoip ) + +if ( Qt5DBus_FOUND ) + add_executable( test_automount partition/calautomount.cpp ) + target_link_libraries( test_automount Calamares::calamares Qt5::DBus ) endif() diff --git a/src/libcalamares/CalamaresConfig.h.in b/src/libcalamares/CalamaresConfig.h.in index 55468cf15..3d551b8e8 100644 --- a/src/libcalamares/CalamaresConfig.h.in +++ b/src/libcalamares/CalamaresConfig.h.in @@ -1,3 +1,11 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ #ifndef CALAMARESCONFIG_H #define CALAMARESCONFIG_H @@ -8,8 +16,16 @@ #define CMAKE_INSTALL_FULL_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}/calamares" #define CMAKE_INSTALL_FULL_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}" -//cmakedefines for CMake variables (e.g. for optdepends) go here +/* + * These are feature-settings that affect consumers of Calamares + * libraries as well; without Python-support in the libs, for instance, + * there's no point in having a Python plugin. + * + * This list should match the one in CalamaresConfig.cmake + * which is the CMake-time side of the same configuration. + */ #cmakedefine WITH_PYTHON #cmakedefine WITH_PYTHONQT +#cmakedefine WITH_QML #endif // CALAMARESCONFIG_H diff --git a/src/calamares/CalamaresVersion.h.in b/src/libcalamares/CalamaresVersion.h.in similarity index 85% rename from src/calamares/CalamaresVersion.h.in rename to src/libcalamares/CalamaresVersion.h.in index 4ac7ee1d1..09ef9ae2c 100644 --- a/src/calamares/CalamaresVersion.h.in +++ b/src/libcalamares/CalamaresVersion.h.in @@ -1,10 +1,12 @@ +// SPDX-FileCopyrightText: no +// SPDX-License-Identifier: CC0-1.0 #ifndef CALAMARES_VERSION_H #define CALAMARES_VERSION_H #cmakedefine CALAMARES_ORGANIZATION_NAME "${CALAMARES_ORGANIZATION_NAME}" #cmakedefine CALAMARES_ORGANIZATION_DOMAIN "${CALAMARES_ORGANIZATION_DOMAIN}" #cmakedefine CALAMARES_APPLICATION_NAME "${CALAMARES_APPLICATION_NAME}" -#cmakedefine CALAMARES_VERSION "${CALAMARES_VERSION}" +#cmakedefine CALAMARES_VERSION "${CALAMARES_VERSION_SHORT}" #cmakedefine CALAMARES_VERSION_SHORT "${CALAMARES_VERSION_SHORT}" #cmakedefine CALAMARES_VERSION_MAJOR "${CALAMARES_VERSION_MAJOR}" diff --git a/src/libcalamares/CalamaresVersionX.h.in b/src/libcalamares/CalamaresVersionX.h.in new file mode 100644 index 000000000..be3a9ae21 --- /dev/null +++ b/src/libcalamares/CalamaresVersionX.h.in @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: no +// SPDX-License-Identifier: CC0-1.0 +// +// Same as CalamaresVersion.h, but with a full-git-extended VERSION +// rather than the short (vM.m.p) semantic version. +#ifndef CALAMARES_VERSION_H + +// On purpose, do not define the guard, but let CalamaresVersion.h do it +// #define CALAMARES_VERSION_H + +#include "CalamaresVersion.h" + +#undef CALAMARES_VERSION +#cmakedefine CALAMARES_VERSION "${CALAMARES_VERSION}" + +#endif // CALAMARES_VERSION_H diff --git a/src/libcalamares/CppJob.cpp b/src/libcalamares/CppJob.cpp index b6b18b1b7..45a321cc2 100644 --- a/src/libcalamares/CppJob.cpp +++ b/src/libcalamares/CppJob.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2016, Kevin Kofler + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CppJob.h" diff --git a/src/libcalamares/CppJob.h b/src/libcalamares/CppJob.h index e4997733e..f906a0dca 100644 --- a/src/libcalamares/CppJob.h +++ b/src/libcalamares/CppJob.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2016, Kevin Kofler - * Copyright 2020, Adriaan de Groor + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_CPPJOB_H @@ -37,7 +28,7 @@ class DLLEXPORT CppJob : public Job Q_OBJECT public: explicit CppJob( QObject* parent = nullptr ); - virtual ~CppJob(); + ~CppJob() override; void setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ); Calamares::ModuleSystem::InstanceKey moduleInstanceKey() const { return m_instanceKey; } diff --git a/src/libcalamares/DllMacro.h b/src/libcalamares/DllMacro.h index 712bf5732..662ace44d 100644 --- a/src/libcalamares/DllMacro.h +++ b/src/libcalamares/DllMacro.h @@ -1,26 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DLLMACRO_H #define DLLMACRO_H -#include +#include /* * Mark symbols exported from Calamares non-GUI library with DLLEXPORT. diff --git a/src/libcalamares/GlobalStorage.cpp b/src/libcalamares/GlobalStorage.cpp index 428b01103..9f394e245 100644 --- a/src/libcalamares/GlobalStorage.cpp +++ b/src/libcalamares/GlobalStorage.cpp @@ -1,24 +1,15 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GlobalStorage.h" -#include "JobQueue.h" #include "utils/Logger.h" #include "utils/Units.h" @@ -26,14 +17,37 @@ #include #include +#include -using CalamaresUtils::operator""_MiB; +using namespace CalamaresUtils::Units; namespace Calamares { -GlobalStorage::GlobalStorage() - : QObject( nullptr ) +class GlobalStorage::ReadLock : public QMutexLocker +{ +public: + ReadLock( const GlobalStorage* gs ) + : QMutexLocker( &gs->m_mutex ) + { + } +}; + +class GlobalStorage::WriteLock : public QMutexLocker +{ +public: + WriteLock( GlobalStorage* gs ) + : QMutexLocker( &gs->m_mutex ) + , m_gs( gs ) + { + } + ~WriteLock() { m_gs->changed(); } + + GlobalStorage* m_gs; +}; + +GlobalStorage::GlobalStorage( QObject* parent ) + : QObject( parent ) { } @@ -41,6 +55,7 @@ GlobalStorage::GlobalStorage() bool GlobalStorage::contains( const QString& key ) const { + ReadLock l( this ); return m.contains( key ); } @@ -48,6 +63,7 @@ GlobalStorage::contains( const QString& key ) const int GlobalStorage::count() const { + ReadLock l( this ); return m.count(); } @@ -55,14 +71,15 @@ GlobalStorage::count() const void GlobalStorage::insert( const QString& key, const QVariant& value ) { + WriteLock l( this ); m.insert( key, value ); - emit changed(); } QStringList GlobalStorage::keys() const { + ReadLock l( this ); return m.keys(); } @@ -70,8 +87,8 @@ GlobalStorage::keys() const int GlobalStorage::remove( const QString& key ) { + WriteLock l( this ); int nItems = m.remove( key ); - emit changed(); return nItems; } @@ -79,21 +96,25 @@ GlobalStorage::remove( const QString& key ) QVariant GlobalStorage::value( const QString& key ) const { + ReadLock l( this ); return m.value( key ); } void GlobalStorage::debugDump() const { + ReadLock l( this ); + cDebug() << "GlobalStorage" << Logger::Pointer( this ) << m.count() << "items"; for ( auto it = m.cbegin(); it != m.cend(); ++it ) { - cDebug() << it.key() << '\t' << it.value(); + cDebug() << Logger::SubEntry << it.key() << '\t' << it.value(); } } bool -GlobalStorage::save( const QString& filename ) +GlobalStorage::saveJson( const QString& filename ) const { + ReadLock l( this ); QFile f( filename ); if ( !f.open( QFile::WriteOnly ) ) { @@ -106,7 +127,7 @@ GlobalStorage::save( const QString& filename ) } bool -GlobalStorage::load( const QString& filename ) +GlobalStorage::loadJson( const QString& filename ) { QFile f( filename ); if ( !f.open( QFile::ReadOnly ) ) @@ -126,10 +147,14 @@ GlobalStorage::load( const QString& filename ) } else { + WriteLock l( this ); + // Do **not** use method insert() here, because it would + // recursively lock the mutex, leading to deadlock. Also, + // that would emit changed() for each key. auto map = d.toVariant().toMap(); for ( auto i = map.constBegin(); i != map.constEnd(); ++i ) { - insert( i.key(), *i ); + m.insert( i.key(), *i ); } return true; } @@ -137,8 +162,9 @@ GlobalStorage::load( const QString& filename ) } bool -GlobalStorage::saveYaml( const QString& filename ) +GlobalStorage::saveYaml( const QString& filename ) const { + ReadLock l( this ); return CalamaresUtils::saveYaml( filename, m ); } @@ -146,12 +172,20 @@ bool GlobalStorage::loadYaml( const QString& filename ) { bool ok = false; - auto gs = CalamaresUtils::loadYaml( filename, &ok ); + auto map = CalamaresUtils::loadYaml( filename, &ok ); if ( ok ) { - m = gs; + WriteLock l( this ); + // Do **not** use method insert() here, because it would + // recursively lock the mutex, leading to deadlock. Also, + // that would emit changed() for each key. + for ( auto i = map.constBegin(); i != map.constEnd(); ++i ) + { + m.insert( i.key(), *i ); + } + return true; } - return ok; + return false; } diff --git a/src/libcalamares/GlobalStorage.h b/src/libcalamares/GlobalStorage.h index bef9ec1cc..a0a1940f2 100644 --- a/src/libcalamares/GlobalStorage.h +++ b/src/libcalamares/GlobalStorage.h @@ -1,27 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_GLOBALSTORAGE_H #define CALAMARES_GLOBALSTORAGE_H -#include "CalamaresConfig.h" - +#include #include #include #include @@ -29,65 +20,146 @@ namespace Calamares { -class DebugWindow; - +/** @brief Storage for data that passes between Calamares modules. + * + * The Global Storage is global to the Calamares JobQueue and + * everything that depends on that: all of its modules use the + * same instance of the JobQueue, and so of the Global Storage. + * + * GS is used to pass data between modules; there is only convention + * about what keys are used, and individual modules should document + * what they put in to GS or what they expect to find in it. + * + * GS behaves as a basic key-value store, with a QVariantMap behind + * it. Any QVariant can be put into the storage, and the signal + * changed() is emitted when any data is modified. + * + * In general, see QVariantMap (possibly after calling data()) for details. + * + * This class is thread-safe -- most accesses go through JobQueue, which + * handles threading itself, but because modules load in parallel and can + * have asynchronous tasks like GeoIP lookups, the storage itself also + * has locking. All methods are thread-safe, use data() to make a snapshot + * copy for use outside of the thread-safe API. + */ class GlobalStorage : public QObject { Q_OBJECT public: - explicit GlobalStorage(); + /** @brief Create a GS object + * + * **Generally** there is only one GS object (hence, "global") which + * is owned by the JobQueue instance (which is a singleton). However, + * it is possible to create more GS objects. + */ + explicit GlobalStorage( QObject* parent = nullptr ); - //NOTE: thread safety is guaranteed by JobQueue, which executes jobs one by one. - // If at any time jobs become concurrent, this class must be made thread-safe. - bool contains( const QString& key ) const; - int count() const; + /** @brief Insert a key and value into the store + * + * The @p value is added to the store with key @p key. If @p key + * already exists in the store, its existing value is overwritten. + * The changed() signal is emitted regardless. + */ void insert( const QString& key, const QVariant& value ); - QStringList keys() const; + /** @brief Removes a key and its value + * + * The @p key is removed from the store. If the @p key does not + * exist, nothing happens. changed() is emitted regardless. + * + * @return the number of keys remaining + */ int remove( const QString& key ); - QVariant value( const QString& key ) const; - /// @brief dump keys and values to the debug log + /** @brief dump keys and values to the debug log + * + * All the keys and their values are written to the debug log. + * See save() for caveats: this can leak sensitive information. + */ void debugDump() const; /** @brief write as JSON to the given filename + * + * The file named @p filename is overwritten with a JSON representation + * of the entire global storage (this may be structured, for instance + * if maps or lists have been inserted). * * No tidying, sanitization, or censoring is done -- for instance, * the user module sets a slightly-obscured password in global storage, * and this JSON file will contain that password in-the-only-slightly- * obscured form. */ - bool save( const QString& filename ); + bool saveJson( const QString& filename ) const; /** @brief Adds the keys from the given JSON file * * No tidying, sanitization, or censoring is done. * The JSON file is read and each key is added as a value to - * the global storage. + * the global storage. The storage is not cleared first: existing + * keys will remain; keys that also occur in the JSON file are overwritten. */ - bool load( const QString& filename ); + bool loadJson( const QString& filename ); /** @brief write as YAML to the given filename * * See also save(), above. */ - bool saveYaml( const QString& filename ); + bool saveYaml( const QString& filename ) const; - /// @brief reads settings from the given filename + /** @brief reads settings from the given filename + * + * See also load(), above. + */ bool loadYaml( const QString& filename ); - /** @brief Get internal mapping as a constant object + /** @brief Make a complete copy of the data * - * Note that the VariantMap underneath may change, because - * it's not constant in itself. Connect to the changed() - * signal for notifications. + * Provides a snapshot of the data at a given time. */ - const QVariantMap& data() const { return m; } + QVariantMap data() const { return m; } + +public Q_SLOTS: + /** @brief Does the store contain the given key? + * + * This can distinguish an explicitly-inserted QVariant() from + * a no-value-exists QVariant. See value() for details. + */ + bool contains( const QString& key ) const; + /** @brief The number of keys in the store + * + * This should be unsigned, but the underlying QMap uses signed as well. + * Equal to keys().length(), in theory. + */ + int count() const; + /** @brief The keys in the store + * + * This makes a copy of all the keys currently in the store, which + * could be used for iterating over all the values in the store. + */ + QStringList keys() const; + /** @brief Gets a value from the store + * + * If a value has been previously inserted, returns that value. + * If @p key does not exist in the store, returns a QVariant() + * (an invalid QVariant, which boolean-converts to false). Since + * QVariant() van also be inserted explicitly, use contains() + * to check for the presence of a key if you need that. + */ + QVariant value( const QString& key ) const; signals: + /** @brief Emitted any time the store changes + * + * Also emitted sometimes when the store does not change, e.g. + * when removing a non-existent key or inserting a value that + * is already present. + */ void changed(); private: + class ReadLock; + class WriteLock; QVariantMap m; + mutable QMutex m_mutex; }; } // namespace Calamares diff --git a/src/libcalamares/Job.cpp b/src/libcalamares/Job.cpp index d074a18cb..902bb2b64 100644 --- a/src/libcalamares/Job.cpp +++ b/src/libcalamares/Job.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Job.h" @@ -97,10 +88,10 @@ Job::Job( QObject* parent ) Job::~Job() {} -qreal +int Job::getJobWeight() const { - return qreal( 1.0 ); + return 1; } diff --git a/src/libcalamares/Job.h b/src/libcalamares/Job.h index d93e97cf7..dc89f1c49 100644 --- a/src/libcalamares/Job.h +++ b/src/libcalamares/Job.h @@ -1,21 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ - #ifndef CALAMARES_JOB_H #define CALAMARES_JOB_H @@ -43,7 +35,8 @@ public: NoError = 0, GenericError = -1, PythonUncaughtException = 1, - InvalidConfiguration = 2 + InvalidConfiguration = 2, + MissingRequirements = 3, }; // Can't copy, but you can keep a temporary @@ -54,7 +47,7 @@ public: /** @brief Is this JobResult a success? * - * Equivalent to errorCode() == 0, might be named isValid(). + * Equivalent to errorCode() == 0, see succeeded(). */ virtual operator bool() const; @@ -65,6 +58,11 @@ public: virtual void setDetails( const QString& details ); int errorCode() const { return m_number; } + /** @brief Is this JobResult a success? + * + * Equivalent to errorCode() == 0. + */ + bool succeeded() const { return this->operator bool(); } /// @brief an "ok status" result static JobResult ok(); @@ -94,24 +92,37 @@ class DLLEXPORT Job : public QObject Q_OBJECT public: explicit Job( QObject* parent = nullptr ); - virtual ~Job(); + ~Job() override; /** @brief The job's (relative) weight. * - * The default implementation returns 1.0, which gives all jobs + * The default implementation returns 1, which gives all jobs * the same weight, so they advance the overall progress the same * amount. This is nonsense, since some jobs take much longer than * others; it's up to the individual jobs to say something about * how much work is (relatively) done. + * + * Since jobs are caused by **modules** from the sequence, the + * overall weight of the module is taken into account: its weight + * is divided among the jobs based on each jobs relative weight. + * This can be used in a module that runs a bunch of jobs to indicate + * which of the jobs is "heavy" and which is not. */ - virtual qreal getJobWeight() const; + virtual int getJobWeight() const; /** @brief The human-readable name of this job * * This should be a very short statement of what the job does. * For status and state information, see prettyStatusMessage(). */ virtual QString prettyName() const = 0; - // TODO: Unused + /** @brief a longer human-readable description of what the job will do + * + * This **may** be used by view steps to fill in the summary + * messages for the summary page; at present, only the *partition* + * module does so. + * + * The default implementation returns an empty string. + */ virtual QString prettyDescription() const; /** @brief A human-readable status for progress reporting * @@ -126,6 +137,11 @@ public: void setEmergency( bool e ) { m_emergency = e; } signals: + /** @brief Signals that the job has made progress + * + * The parameter @p percent should be between 0 (0%) and 1 (100%). + * Values outside of this range will be clamped. + */ void progress( qreal percent ); private: diff --git a/src/libcalamares/JobExample.cpp b/src/libcalamares/JobExample.cpp index 83da2b1e1..4852d3ae4 100644 --- a/src/libcalamares/JobExample.cpp +++ b/src/libcalamares/JobExample.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ - #include "JobExample.h" namespace Calamares diff --git a/src/libcalamares/JobExample.h b/src/libcalamares/JobExample.h index 92f8f8fb6..e3506fec1 100644 --- a/src/libcalamares/JobExample.h +++ b/src/libcalamares/JobExample.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_JOB_EXAMPLE_H @@ -32,6 +23,7 @@ namespace Calamares */ class DLLEXPORT NamedJob : public Job { + Q_OBJECT public: explicit NamedJob( const QString& name, QObject* parent = nullptr ) : Job( parent ) @@ -48,6 +40,7 @@ protected: /// @brief Job does nothing, always succeeds class DLLEXPORT GoodJob : public NamedJob { + Q_OBJECT public: explicit GoodJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) @@ -61,6 +54,7 @@ public: /// @brief Job does nothing, always fails class DLLEXPORT FailJob : public NamedJob { + Q_OBJECT public: explicit FailJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 6a2aa4cba..e15df345e 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "JobQueue.h" @@ -24,13 +15,39 @@ #include "Job.h" #include "utils/Logger.h" +#include +#include #include +#include + namespace Calamares { +struct WeightedJob +{ + /** @brief Cumulative weight **before** this job starts + * + * This is calculated as jobs come in. + */ + qreal cumulative = 0.0; + /** @brief Weight of the job within the module's jobs + * + * When a list of jobs is added from a particular module, + * the jobs are weighted relative to that module's overall weight + * **and** the other jobs in the list, so that each job + * gets its share: + * ( job-weight / total-job-weight ) * module-weight + */ + qreal weight = 0.0; + + job_ptr job; +}; +using WeightedJobList = QList< WeightedJob >; + class JobThread : public QThread { + Q_OBJECT public: JobThread( JobQueue* queue ) : QThread( queue ) @@ -39,108 +56,165 @@ public: { } - virtual ~JobThread() override; + ~JobThread() override; - void setJobs( JobList&& jobs ) + void finalize() { - m_jobs = jobs; - - qreal totalJobsWeight = 0.0; - for ( auto job : m_jobs ) + Q_ASSERT( m_runningJobs->isEmpty() ); + QMutexLocker qlock( &m_enqueMutex ); + QMutexLocker rlock( &m_runMutex ); + std::swap( m_runningJobs, m_queuedJobs ); + m_overallQueueWeight + = m_runningJobs->isEmpty() ? 0.0 : ( m_runningJobs->last().cumulative + m_runningJobs->last().weight ); + if ( m_overallQueueWeight < 1 ) { - totalJobsWeight += job->getJobWeight(); + m_overallQueueWeight = 1.0; } - for ( auto job : m_jobs ) + + cDebug() << "There are" << m_runningJobs->count() << "jobs, total weight" << m_overallQueueWeight; + int c = 0; + for ( const auto& j : *m_runningJobs ) { - qreal jobWeight = qreal( job->getJobWeight() / totalJobsWeight ); - m_jobWeights.append( jobWeight ); + cDebug() << Logger::SubEntry << "Job" << ( c + 1 ) << j.job->prettyName() << "+wt" << j.weight << "tot.wt" + << ( j.cumulative + j.weight ); + c++; + } + } + + void enqueue( int moduleWeight, const JobList& jobs ) + { + QMutexLocker qlock( &m_enqueMutex ); + + qreal cumulative + = m_queuedJobs->isEmpty() ? 0.0 : ( m_queuedJobs->last().cumulative + m_queuedJobs->last().weight ); + + qreal totalJobWeight + = std::accumulate( jobs.cbegin(), + jobs.cend(), + qreal( 0.0 ), + []( qreal total, const job_ptr& j ) { return total + j->getJobWeight(); } ); + if ( totalJobWeight < 1 ) + { + totalJobWeight = 1.0; + } + + for ( const auto& j : jobs ) + { + qreal jobContribution = ( j->getJobWeight() / totalJobWeight ) * moduleWeight; + m_queuedJobs->append( WeightedJob { cumulative, jobContribution, j } ); + cumulative += jobContribution; } } void run() override { - bool anyFailed = false; - QString message; + QMutexLocker rlock( &m_runMutex ); + bool failureEncountered = false; + QString message; ///< Filled in with errors QString details; + Logger::Once o; m_jobIndex = 0; - for ( auto job : m_jobs ) + for ( const auto& jobitem : *m_runningJobs ) { - if ( anyFailed && !job->isEmergency() ) + if ( failureEncountered && !jobitem.job->isEmergency() ) { - cDebug() << "Skipping non-emergency job" << job->prettyName(); - ++m_jobIndex; - continue; + cDebug() << o << "Skipping non-emergency job" << jobitem.job->prettyName(); } - - emitProgress(); - cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName() << " (there are" - << m_jobs.count() << " left)"; - connect( job.data(), &Job::progress, this, &JobThread::emitProgress ); - JobResult result = job->exec(); - if ( !anyFailed && !result ) + else { - anyFailed = true; - message = result.message(); - details = result.details(); + cDebug() << o << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) + << jobitem.job->prettyName() << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() + << ')'; + o.refresh(); // So next time it shows the function header again + emitProgress( 0.0 ); // 0% for *this job* + connect( jobitem.job.data(), &Job::progress, this, &JobThread::emitProgress ); + auto result = jobitem.job->exec(); + if ( !failureEncountered && !result ) + { + // so this is the first failure + failureEncountered = true; + message = result.message(); + details = result.details(); + } + QThread::msleep( 16 ); // Very brief rest before reporting the job as complete + emitProgress( 1.0 ); // 100% for *this job* } - emitProgress( 1.0 ); - ++m_jobIndex; + m_jobIndex++; } - if ( anyFailed ) + if ( failureEncountered ) { - emitFailed( message, details ); + QMetaObject::invokeMethod( + m_queue, "failed", Qt::QueuedConnection, Q_ARG( QString, message ), Q_ARG( QString, details ) ); } else { - emitProgress(); + emitProgress( 1.0 ); } - emitFinished(); + m_runningJobs->clear(); + QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection ); + } + + /** @brief The names of the queued (not running!) jobs. + */ + QStringList queuedJobs() const + { + QMutexLocker qlock( &m_enqueMutex ); + QStringList l; + l.reserve( m_queuedJobs->count() ); + for ( const auto& j : *m_queuedJobs ) + { + l << j.job->prettyName(); + } + return l; } private: - JobList m_jobs; - QList< qreal > m_jobWeights; - JobQueue* m_queue; - int m_jobIndex; - - void emitProgress( qreal jobPercent = 0 ) + /* This is called **only** from run(), while m_runMutex is + * already locked, so we can use the m_runningJobs member safely. + */ + void emitProgress( qreal percentage ) const { - // Make sure jobPercent is reasonable, in case a job messed up its - // percentage computations. - jobPercent = qBound( qreal( 0 ), jobPercent, qreal( 1 ) ); + percentage = qBound( 0.0, percentage, 1.0 ); - int jobCount = m_jobs.size(); - QString message = m_jobIndex < jobCount ? m_jobs.at( m_jobIndex )->prettyStatusMessage() : tr( "Done" ); - - qreal percent = 1.0; // Pretend we're done, since the if will reset it - if ( m_jobIndex < jobCount ) + QString message; + qreal progress = 0.0; + if ( m_jobIndex < m_runningJobs->count() ) { - qreal cumulativeProgress = 0.0; - for ( auto jobWeight : m_jobWeights.mid( 0, m_jobIndex ) ) + const auto& jobitem = m_runningJobs->at( m_jobIndex ); + progress = ( jobitem.cumulative + jobitem.weight * percentage ) / m_overallQueueWeight; + message = jobitem.job->prettyStatusMessage(); + // In progress reports at the start of a job (e.g. when the queue + // starts the job, or if the job itself reports 0.0) be more + // accepting in what gets reported: jobs with no status fall + // back to description and name, whichever is non-empty. + if ( percentage == 0.0 && message.isEmpty() ) { - cumulativeProgress += jobWeight; + message = jobitem.job->prettyDescription(); + if ( message.isEmpty() ) + { + message = jobitem.job->prettyName(); + } } - percent = cumulativeProgress + ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ); - - Logger::CDebug( Logger::LOGVERBOSE ) - << "[JOBQUEUE]: Progress for Job[" << m_jobIndex << "]: " << ( jobPercent * 100 ) << "% completed"; - Logger::CDebug( Logger::LOGVERBOSE ) - << "[JOBQUEUE]: Progress Overall: " << ( cumulativeProgress * 100 ) << "% (accumulated) + " - << ( ( ( m_jobWeights.at( m_jobIndex ) ) * jobPercent ) * 100 ) - << "% (this job) = " << ( percent * 100 ) << "% (total)"; + } + else + { + progress = 1.0; + message = tr( "Done" ); } QMetaObject::invokeMethod( - m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, percent ), Q_ARG( QString, message ) ); + m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, progress ), Q_ARG( QString, message ) ); } - void emitFailed( const QString& message, const QString& details ) - { - QMetaObject::invokeMethod( - m_queue, "failed", Qt::QueuedConnection, Q_ARG( QString, message ), Q_ARG( QString, details ) ); - } + mutable QMutex m_runMutex; + mutable QMutex m_enqueMutex; - void emitFinished() { QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection ); } + std::unique_ptr< WeightedJobList > m_runningJobs = std::make_unique< WeightedJobList >(); + std::unique_ptr< WeightedJobList > m_queuedJobs = std::make_unique< WeightedJobList >(); + + JobQueue* m_queue; + int m_jobIndex = 0; ///< Index into m_runningJobs + qreal m_overallQueueWeight = 0.0; ///< cumulation when **all** the jobs are done }; JobThread::~JobThread() {} @@ -148,25 +222,21 @@ JobThread::~JobThread() {} JobQueue* JobQueue::s_instance = nullptr; - JobQueue* JobQueue::instance() { + if ( !s_instance ) + { + cWarning() << "Getting nullptr JobQueue instance."; + } return s_instance; } -GlobalStorage* -JobQueue::globalStorage() const -{ - return m_storage; -} - - JobQueue::JobQueue( QObject* parent ) : QObject( parent ) , m_thread( new JobThread( this ) ) - , m_storage( new GlobalStorage() ) + , m_storage( new GlobalStorage( this ) ) { Q_ASSERT( !s_instance ); s_instance = this; @@ -186,6 +256,7 @@ JobQueue::~JobQueue() } delete m_storage; + s_instance = nullptr; } @@ -193,28 +264,18 @@ void JobQueue::start() { Q_ASSERT( !m_thread->isRunning() ); - m_thread->setJobs( std::move( m_jobs ) ); - m_jobs.clear(); + m_thread->finalize(); m_finished = false; m_thread->start(); } void -JobQueue::enqueue( const job_ptr& job ) +JobQueue::enqueue( int moduleWeight, const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); - m_jobs.append( job ); - emit queueChanged( m_jobs ); -} - - -void -JobQueue::enqueue( const JobList& jobs ) -{ - Q_ASSERT( !m_thread->isRunning() ); - m_jobs.append( jobs ); - emit queueChanged( m_jobs ); + m_thread->enqueue( moduleWeight, jobs ); + emit queueChanged( m_thread->queuedJobs() ); } void @@ -222,6 +283,17 @@ JobQueue::finish() { m_finished = true; emit finished(); + emit queueChanged( m_thread->queuedJobs() ); +} + +GlobalStorage* +JobQueue::globalStorage() const +{ + return m_storage; } } // namespace Calamares + +#include "utils/moc-warnings.h" + +#include "JobQueue.moc" diff --git a/src/libcalamares/JobQueue.h b/src/libcalamares/JobQueue.h index 88a2bb0c3..699f52e42 100644 --- a/src/libcalamares/JobQueue.h +++ b/src/libcalamares/JobQueue.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_JOBQUEUE_H @@ -26,7 +17,6 @@ namespace Calamares { - class GlobalStorage; class JobThread; @@ -35,31 +25,84 @@ class DLLEXPORT JobQueue : public QObject Q_OBJECT public: explicit JobQueue( QObject* parent = nullptr ); - virtual ~JobQueue(); + ~JobQueue() override; + /** @brief Returns the most-recently-created instance. + * + * It is possible for instance() to be @c nullptr, since you must + * call the constructor explicitly first. + */ static JobQueue* instance(); + /* @brief Returns the GlobalStorage object for the instance. + * + * It is possible for instanceGlobalStorage() to be @c nullptr, + * since there might not be an instance to begin with. + */ + static GlobalStorage* instanceGlobalStorage() + { + auto* jq = instance(); + return jq ? jq->globalStorage() : nullptr; + } GlobalStorage* globalStorage() const; - void enqueue( const job_ptr& job ); - void enqueue( const JobList& jobs ); + /** @brief Queues up jobs from a single module source + * + * The total weight of the jobs is spread out to fill the weight + * of the module. + */ + void enqueue( int moduleWeight, const JobList& jobs ); + /** @brief Starts all the jobs that are enqueued. + * + * After this, isRunning() returns @c true until + * finished() is emitted. + */ void start(); bool isRunning() const { return !m_finished; } -public slots: - void finish(); - signals: - void queueChanged( const JobList& jobs ); + /** @brief Report progress of the whole queue, with a status message + * + * The @p percent is a value between 0.0 and 1.0 (100%) of the + * overall queue progress (not of the current job), while + * @p prettyName is the status message from the job -- often + * just the name of the job, but some jobs include more information. + */ void progress( qreal percent, const QString& prettyName ); + /** @brief Indicate that the queue is empty, after calling start() + * + * Emitted when the queue empties. The queue may also emit + * failed(), if something went wrong, but finished() is always + * the last one. + */ void finished(); + /** @brief A job in the queue failed. + * + * Contains the (already-translated) text from the job describing + * the failure. + */ void failed( const QString& message, const QString& details ); + /** @brief Reports the names of jobs in the queue. + * + * When jobs are added via enqueue(), or when the queue otherwise + * changes, the **names** of the jobs are reported. This is + * primarily for debugging purposes. + */ + void queueChanged( const QStringList& jobNames ); + +public slots: + /** @brief Implementation detail + * + * This is a private implementation detail for the job thread, + * which should not be called by other core. + */ + void finish(); + private: static JobQueue* s_instance; - JobList m_jobs; JobThread* m_thread; GlobalStorage* m_storage; bool m_finished = true; ///< Initially, not running diff --git a/src/libcalamares/ProcessJob.cpp b/src/libcalamares/ProcessJob.cpp index 744f5f9bf..da4edd7c2 100644 --- a/src/libcalamares/ProcessJob.cpp +++ b/src/libcalamares/ProcessJob.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProcessJob.h" @@ -23,7 +14,6 @@ #include "utils/Logger.h" #include -#include namespace Calamares { diff --git a/src/libcalamares/ProcessJob.h b/src/libcalamares/ProcessJob.h index e826acb1d..ab47f30dd 100644 --- a/src/libcalamares/ProcessJob.h +++ b/src/libcalamares/ProcessJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PROCESSJOB_H @@ -36,7 +27,7 @@ public: bool runInChroot = false, std::chrono::seconds secondsTimeout = std::chrono::seconds( 30 ), QObject* parent = nullptr ); - virtual ~ProcessJob() override; + ~ProcessJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; diff --git a/src/libcalamares/PythonHelper.cpp b/src/libcalamares/PythonHelper.cpp index 0b5d77ac1..ca004ab5f 100644 --- a/src/libcalamares/PythonHelper.cpp +++ b/src/libcalamares/PythonHelper.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonHelper.h" @@ -35,6 +26,11 @@ namespace CalamaresPython boost::python::object variantToPyObject( const QVariant& variant ) { +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wswitch-enum" +#endif + // 49 enumeration values not handled switch ( variant.type() ) { case QVariant::Map: @@ -49,22 +45,31 @@ variantToPyObject( const QVariant& variant ) case QVariant::Int: return bp::object( variant.toInt() ); + case QVariant::UInt: + return bp::object( variant.toUInt() ); case QVariant::LongLong: return bp::object( variant.toLongLong() ); + case QVariant::ULongLong: + return bp::object( variant.toULongLong() ); case QVariant::Double: return bp::object( variant.toDouble() ); + case QVariant::Char: case QVariant::String: return bp::object( variant.toString().toStdString() ); case QVariant::Bool: return bp::object( variant.toBool() ); + case QVariant::Invalid: default: return bp::object(); } +#ifdef __clang__ +#pragma clang diagnostic pop +#endif } @@ -440,14 +445,24 @@ GlobalStoragePythonWrapper::keys() const int GlobalStoragePythonWrapper::remove( const std::string& key ) { - return m_gs->remove( QString::fromStdString( key ) ); + const QString gsKey( QString::fromStdString( key ) ); + if ( !m_gs->contains( gsKey ) ) + { + cWarning() << "Unknown GS key" << key.c_str(); + } + return m_gs->remove( gsKey ); } bp::object GlobalStoragePythonWrapper::value( const std::string& key ) const { - return CalamaresPython::variantToPyObject( m_gs->value( QString::fromStdString( key ) ) ); + const QString gsKey( QString::fromStdString( key ) ); + if ( !m_gs->contains( gsKey ) ) + { + cWarning() << "Unknown GS key" << key.c_str(); + } + return CalamaresPython::variantToPyObject( m_gs->value( gsKey ) ); } } // namespace CalamaresPython diff --git a/src/libcalamares/PythonHelper.h b/src/libcalamares/PythonHelper.h index 7528732a0..0a2127fb0 100644 --- a/src/libcalamares/PythonHelper.h +++ b/src/libcalamares/PythonHelper.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOBHELPER_H @@ -57,7 +48,7 @@ public: static Helper* instance(); private: - virtual ~Helper(); + ~Helper() override; explicit Helper(); boost::python::object m_mainModule; diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp index 9069c49dc..ec17c31f3 100644 --- a/src/libcalamares/PythonJob.cpp +++ b/src/libcalamares/PythonJob.cpp @@ -1,22 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ - #include "PythonJob.h" #include "CalamaresVersion.h" @@ -29,8 +19,15 @@ #include +static const char* s_preScript = nullptr; + namespace bp = boost::python; +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdisabled-macro-expansion" +#endif + BOOST_PYTHON_FUNCTION_OVERLOADS( mount_overloads, CalamaresPython::mount, 2, 4 ); BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_str_overloads, CalamaresPython::target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_list_overloads, CalamaresPython::target_env_call, 1, 3 ); @@ -44,6 +41,16 @@ BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_output_list_overloads, CalamaresPython::check_target_env_output, 1, 3 ); +BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_process_output_overloads, + CalamaresPython::target_env_process_output, + 1, + 4 ); +BOOST_PYTHON_FUNCTION_OVERLOADS( host_env_process_output_overloads, CalamaresPython::host_env_process_output, 1, 4 ); + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + BOOST_PYTHON_MODULE( libcalamares ) { bp::object package = bp::scope(); @@ -81,13 +88,25 @@ BOOST_PYTHON_MODULE( libcalamares ) bp::scope utilsScope = utilsModule; Q_UNUSED( utilsScope ) + // .. Logging functions bp::def( "debug", &CalamaresPython::debug, bp::args( "s" ), "Writes the given string to the Calamares debug stream." ); bp::def( "warning", &CalamaresPython::warning, bp::args( "s" ), "Writes the given string to the Calamares warning stream." ); + bp::def( "warn", + &CalamaresPython::warning, + bp::args( "s" ), + "Writes the given string to the Calamares warning stream." ); + bp::def( + "error", &CalamaresPython::error, bp::args( "s" ), "Writes the given string to the Calamares error stream." ); + + // .. YAML functions + bp::def( "load_yaml", &CalamaresPython::load_yaml, bp::args( "path" ), "Loads YAML from a file." ); + + // .. Filesystem functions bp::def( "mount", &CalamaresPython::mount, mount_overloads( bp::args( "device_path", "mount_point", "filesystem_name", "options" ), @@ -96,6 +115,8 @@ BOOST_PYTHON_MODULE( libcalamares ) "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments" ) ); + + // .. Process functions bp::def( "target_env_call", static_cast< int ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::target_env_call ), @@ -145,6 +166,16 @@ BOOST_PYTHON_MODULE( libcalamares ) "Runs the specified command in the chroot of the target system.\n" "Returns the program's standard output, and raises a " "subprocess.CalledProcessError if something went wrong." ) ); + bp::def( "target_env_process_output", + &CalamaresPython::target_env_process_output, + target_env_process_output_overloads( bp::args( "command", "callback", "stdin", "timeout" ), + "Runs the specified @p command in the target system." ) ); + bp::def( "host_env_process_output", + &CalamaresPython::host_env_process_output, + host_env_process_output_overloads( bp::args( "command", "callback", "stdin", "timeout" ), + "Runs the specified command in the host system." ) ); + + // .. String functions bp::def( "obscure", &CalamaresPython::obscure, bp::args( "s" ), @@ -153,7 +184,7 @@ BOOST_PYTHON_MODULE( libcalamares ) "Applying the function to a string obscured by this function will result " "in the original string." ); - + // .. Translation functions bp::def( "gettext_languages", &CalamaresPython::gettext_languages, "Returns list of languages (most to least-specific) for gettext." ); @@ -170,8 +201,7 @@ struct PythonJob::Private bp::object m_prettyStatusMessage; }; -PythonJob::PythonJob( const ModuleSystem::InstanceKey& instance, - const QString& scriptFile, +PythonJob::PythonJob( const QString& scriptFile, const QString& workingPath, const QVariantMap& moduleConfiguration, QObject* parent ) @@ -181,19 +211,12 @@ PythonJob::PythonJob( const ModuleSystem::InstanceKey& instance, , m_workingPath( workingPath ) , m_description() , m_configurationMap( moduleConfiguration ) - , m_weight( ( instance.module() == QStringLiteral( "unpackfs" ) ) ? 12.0 : 1.0 ) { } PythonJob::~PythonJob() {} -qreal -PythonJob::getJobWeight() const -{ - return m_weight; -} - QString PythonJob::prettyName() const { @@ -260,6 +283,11 @@ PythonJob::exec() calamaresNamespace[ "globalstorage" ] = CalamaresPython::GlobalStoragePythonWrapper( JobQueue::instance()->globalStorage() ); + if ( s_preScript ) + { + bp::exec( s_preScript, scriptNamespace, scriptNamespace ); + } + cDebug() << "Job file" << scriptFI.absoluteFilePath(); bp::object execResult = bp::exec_file( scriptFI.absoluteFilePath().toLocal8Bit().data(), scriptNamespace, scriptNamespace ); @@ -279,12 +307,12 @@ PythonJob::exec() { m_description.truncate( i_newline ); } - cDebug() << "Job description from __doc__" << prettyName() << '=' << m_description; + cDebug() << Logger::SubEntry << "Job description from __doc__" << prettyName() << '=' << m_description; } } else { - cDebug() << "Job description from pretty_name" << prettyName() << '=' << m_description; + cDebug() << Logger::SubEntry << "Job description from pretty_name" << prettyName() << '=' << m_description; } emit progress( 0 ); @@ -302,7 +330,7 @@ PythonJob::exec() return JobResult::error( message, description ); } } - catch ( bp::error_already_set ) + catch ( bp::error_already_set& ) { QString msg; if ( PyErr_Occurred() ) @@ -337,4 +365,12 @@ PythonJob::emitProgress( qreal progressValue ) emit progress( progressValue ); } +void +PythonJob::setInjectedPreScript( const char* preScript ) +{ + s_preScript = preScript; + cDebug() << "Python pre-script set to string" << Logger::Pointer( preScript ) << "length" + << ( preScript ? strlen( preScript ) : 0 ); +} + } // namespace Calamares diff --git a/src/libcalamares/PythonJob.h b/src/libcalamares/PythonJob.h index eb9d8fff1..af77d741d 100644 --- a/src/libcalamares/PythonJob.h +++ b/src/libcalamares/PythonJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOB_H @@ -40,18 +31,28 @@ class PythonJob : public Job { Q_OBJECT public: - explicit PythonJob( const ModuleSystem::InstanceKey& instance, - const QString& scriptFile, + explicit PythonJob( const QString& scriptFile, const QString& workingPath, const QVariantMap& moduleConfiguration = QVariantMap(), QObject* parent = nullptr ); - virtual ~PythonJob() override; + ~PythonJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; JobResult exec() override; - virtual qreal getJobWeight() const override; + /** @brief Sets the pre-run Python code for all PythonJobs + * + * A PythonJob runs the code from the scriptFile parameter to + * the constructor; the pre-run code is **also** run, before + * even the scriptFile code. Use this in testing mode + * to modify Python internals. + * + * No ownership of @p script is taken: pass in a pointer to + * a character literal or something that lives longer than the + * job. Pass in @c nullptr to switch off pre-run code. + */ + static void setInjectedPreScript( const char* script ); private: struct Private; @@ -64,7 +65,6 @@ private: QString m_workingPath; QString m_description; QVariantMap m_configurationMap; - qreal m_weight; }; } // namespace Calamares diff --git a/src/libcalamares/PythonJobApi.cpp b/src/libcalamares/PythonJobApi.cpp index ecca466fe..3532d8f32 100644 --- a/src/libcalamares/PythonJobApi.cpp +++ b/src/libcalamares/PythonJobApi.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonJobApi.h" @@ -25,7 +16,10 @@ #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#include "utils/RAII.h" +#include "utils/Runner.h" #include "utils/String.h" +#include "utils/Yaml.h" #include #include @@ -34,7 +28,7 @@ namespace bp = boost::python; static int -_handle_check_target_env_call_error( const CalamaresUtils::ProcessResult& ec, const QString& cmd ) +handle_check_target_env_call_error( const CalamaresUtils::ProcessResult& ec, const QString& cmd ) { if ( !ec.first ) { @@ -55,6 +49,26 @@ _handle_check_target_env_call_error( const CalamaresUtils::ProcessResult& ec, co return ec.first; } +static inline QStringList +bp_list_to_qstringlist( const bp::list& args ) +{ + QStringList list; + for ( int i = 0; i < bp::len( args ); ++i ) + { + list.append( QString::fromStdString( bp::extract< std::string >( args[ i ] ) ) ); + } + return list; +} + +static inline CalamaresUtils::ProcessResult +target_env_command( const QStringList& args, const std::string& input, int timeout ) +{ + // Since Python doesn't give us the type system for distinguishing + // seconds from other integral types, massage to seconds here. + return CalamaresUtils::System::instance()->targetEnvCommand( + args, QString(), QString::fromStdString( input ), std::chrono::seconds( timeout ) ); +} + namespace CalamaresPython { @@ -70,93 +84,99 @@ mount( const std::string& device_path, QString::fromStdString( options ) ); } - -static inline QStringList -_bp_list_to_qstringlist( const bp::list& args ) -{ - QStringList list; - for ( int i = 0; i < bp::len( args ); ++i ) - { - list.append( QString::fromStdString( bp::extract< std::string >( args[ i ] ) ) ); - } - return list; -} - -static inline CalamaresUtils::ProcessResult -_target_env_command( const QStringList& args, const std::string& stdin, int timeout ) -{ - // Since Python doesn't give us the type system for distinguishing - // seconds from other integral types, massage to seconds here. - return CalamaresUtils::System::instance()->targetEnvCommand( - args, QString(), QString::fromStdString( stdin ), std::chrono::seconds( timeout ) ); -} - int -target_env_call( const std::string& command, const std::string& stdin, int timeout ) +target_env_call( const std::string& command, const std::string& input, int timeout ) { - return _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ).first; + return target_env_command( QStringList { QString::fromStdString( command ) }, input, timeout ).first; } int -target_env_call( const bp::list& args, const std::string& stdin, int timeout ) +target_env_call( const bp::list& args, const std::string& input, int timeout ) { - return _target_env_command( _bp_list_to_qstringlist( args ), stdin, timeout ).first; + return target_env_command( bp_list_to_qstringlist( args ), input, timeout ).first; } int -check_target_env_call( const std::string& command, const std::string& stdin, int timeout ) +check_target_env_call( const std::string& command, const std::string& input, int timeout ) { - auto ec = _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ); - return _handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); + auto ec = target_env_command( QStringList { QString::fromStdString( command ) }, input, timeout ); + return handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); } int -check_target_env_call( const bp::list& args, const std::string& stdin, int timeout ) +check_target_env_call( const bp::list& args, const std::string& input, int timeout ) { - auto ec = _target_env_command( _bp_list_to_qstringlist( args ), stdin, timeout ); + auto ec = target_env_command( bp_list_to_qstringlist( args ), input, timeout ); if ( !ec.first ) { return ec.first; } - QStringList failedCmdList = _bp_list_to_qstringlist( args ); - return _handle_check_target_env_call_error( ec, failedCmdList.join( ' ' ) ); + QStringList failedCmdList = bp_list_to_qstringlist( args ); + return handle_check_target_env_call_error( ec, failedCmdList.join( ' ' ) ); } std::string -check_target_env_output( const std::string& command, const std::string& stdin, int timeout ) +check_target_env_output( const std::string& command, const std::string& input, int timeout ) { - auto ec = _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ); - _handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); + auto ec = target_env_command( QStringList { QString::fromStdString( command ) }, input, timeout ); + handle_check_target_env_call_error( ec, QString::fromStdString( command ) ); return ec.second.toStdString(); } std::string -check_target_env_output( const bp::list& args, const std::string& stdin, int timeout ) +check_target_env_output( const bp::list& args, const std::string& input, int timeout ) { - QStringList list = _bp_list_to_qstringlist( args ); - auto ec = _target_env_command( list, stdin, timeout ); - _handle_check_target_env_call_error( ec, list.join( ' ' ) ); + QStringList list = bp_list_to_qstringlist( args ); + auto ec = target_env_command( list, input, timeout ); + handle_check_target_env_call_error( ec, list.join( ' ' ) ); return ec.second.toStdString(); } +static const char output_prefix[] = "[PYTHON JOB]:"; +static inline void +log_action( unsigned int level, const std::string& s ) +{ + Logger::CDebug( level ) << output_prefix << QString::fromStdString( s ); +} + void debug( const std::string& s ) { - Logger::CDebug( Logger::LOGDEBUG ) << "[PYTHON JOB]: " << QString::fromStdString( s ); + log_action( Logger::LOGDEBUG, s ); } void warning( const std::string& s ) { - cWarning() << "[PYTHON JOB]: " << QString::fromStdString( s ); + log_action( Logger::LOGWARNING, s ); } +void +error( const std::string& s ) +{ + log_action( Logger::LOGERROR, s ); +} + +boost::python::dict +load_yaml( const std::string& path ) +{ + const QString filePath = QString::fromStdString( path ); + bool ok = false; + auto map = CalamaresUtils::loadYaml( filePath, &ok ); + if ( !ok ) + { + cWarning() << "Loading YAML from" << filePath << "failed."; + } + return variantMapToPyDict( map ); +} + + PythonJobInterface::PythonJobInterface( Calamares::PythonJob* parent ) : m_parent( parent ) { @@ -177,6 +197,67 @@ PythonJobInterface::setprogress( qreal progress ) } } +static inline int +_process_output( Calamares::Utils::RunLocation location, + const boost::python::list& args, + const boost::python::object& callback, + const std::string& input, + int timeout ) +{ + Calamares::Utils::Runner r( bp_list_to_qstringlist( args ) ); + r.setLocation( location ); + if ( !callback.is_none() ) + { + bp::extract< bp::list > x( callback ); + if ( x.check() ) + { + QObject::connect( &r, + &decltype( r )::output, + [ cb = callback.attr( "append" ) ]( const QString& s ) { cb( s.toStdString() ); } ); + } + else + { + QObject::connect( + &r, &decltype( r )::output, [ &callback ]( const QString& s ) { callback( s.toStdString() ); } ); + } + r.enableOutputProcessing(); + } + if ( !input.empty() ) + { + r.setInput( QString::fromStdString( input ) ); + } + if ( timeout > 0 ) + { + r.setTimeout( std::chrono::seconds( timeout ) ); + } + + auto result = r.run(); + + if ( result.getExitCode() ) + { + return handle_check_target_env_call_error( result, r.executable() ); + } + return 0; +} + +int +target_env_process_output( const boost::python::list& args, + const boost::python::object& callback, + const std::string& input, + int timeout ) +{ + return _process_output( Calamares::Utils::RunLocation::RunInTarget, args, callback, input, timeout ); +} + +int +host_env_process_output( const boost::python::list& args, + const boost::python::object& callback, + const std::string& input, + int timeout ) +{ + return _process_output( Calamares::Utils::RunLocation::RunInHost, args, callback, input, timeout ); +} + std::string obscure( const std::string& string ) @@ -249,6 +330,10 @@ _add_localedirs( QStringList& pathList, const QString& candidate ) bp::object gettext_path() { + // Going to log informatively just once + static bool first_time = true; + cScopedAssignment( &first_time, false ); + // TODO: distinguish between -d runs and normal runs // TODO: can we detect DESTDIR-installs? QStringList candidatePaths @@ -265,21 +350,26 @@ gettext_path() } _add_localedirs( candidatePaths, QDir().canonicalPath() ); // . - cDebug() << "Determining gettext path from" << candidatePaths; + if ( first_time ) + { + cDebug() << "Determining gettext path from" << candidatePaths; + } QStringList candidateLanguages = _gettext_languages(); - for ( const auto& lang : candidateLanguages ) + { for ( auto localedir : candidatePaths ) { QDir ldir( localedir ); if ( ldir.cd( lang ) ) { - cDebug() << Logger::SubEntry << "Found" << lang << "in" << ldir.canonicalPath(); + Logger::CDebug( Logger::LOGDEBUG ) + << output_prefix << "Found gettext" << lang << "in" << ldir.canonicalPath(); return bp::object( localedir.toStdString() ); } } - cDebug() << Logger::SubEntry << "No translation found for languages" << candidateLanguages; + } + cWarning() << "No translation found for languages" << candidateLanguages; return bp::object(); // None } diff --git a/src/libcalamares/PythonJobApi.h b/src/libcalamares/PythonJobApi.h index 6fb27cd62..e61609460 100644 --- a/src/libcalamares/PythonJobApi.h +++ b/src/libcalamares/PythonJobApi.h @@ -1,29 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONJOBAPI_H #define PYTHONJOBAPI_H -#include "qglobal.h" // For qreal - #include "utils/BoostPython.h" +#include // For qreal + namespace Calamares { class PythonJob; @@ -37,19 +28,29 @@ int mount( const std::string& device_path, const std::string& filesystem_name = std::string(), const std::string& options = std::string() ); -int target_env_call( const std::string& command, const std::string& stdin = std::string(), int timeout = 0 ); +int target_env_call( const std::string& command, const std::string& input = std::string(), int timeout = 0 ); -int target_env_call( const boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); +int target_env_call( const boost::python::list& args, const std::string& input = std::string(), int timeout = 0 ); -int check_target_env_call( const std::string& command, const std::string& stdin = std::string(), int timeout = 0 ); +int check_target_env_call( const std::string& command, const std::string& input = std::string(), int timeout = 0 ); -int check_target_env_call( const boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); +int check_target_env_call( const boost::python::list& args, const std::string& input = std::string(), int timeout = 0 ); std::string -check_target_env_output( const std::string& command, const std::string& stdin = std::string(), int timeout = 0 ); +check_target_env_output( const std::string& command, const std::string& input = std::string(), int timeout = 0 ); std::string -check_target_env_output( const boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); +check_target_env_output( const boost::python::list& args, const std::string& input = std::string(), int timeout = 0 ); + +int target_env_process_output( const boost::python::list& args, + const boost::python::object& callback = boost::python::object(), + const std::string& input = std::string(), + int timeout = 0 ); + +int host_env_process_output( const boost::python::list& args, + const boost::python::object& callback = boost::python::object(), + const std::string& input = std::string(), + int timeout = 0 ); std::string obscure( const std::string& string ); @@ -59,6 +60,12 @@ boost::python::list gettext_languages(); void debug( const std::string& s ); void warning( const std::string& s ); +void error( const std::string& s ); + +/** @brief Loads YAML and returns (nested) dicts representing it + * + */ +boost::python::dict load_yaml( const std::string& path ); class PythonJobInterface { diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index da388ea32..2ce85ec8d 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -1,22 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Dominic Hayes - * Copyright 2019, Gabriel Craciunescu - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2019 Dominic Hayes + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Settings.h" @@ -71,22 +63,40 @@ requireBool( const YAML::Node& config, const char* key, bool d ) namespace Calamares { -InstanceDescription::InstanceDescription( const QVariantMap& m ) - : module( m.value( "module" ).toString() ) - , id( m.value( "id" ).toString() ) - , config( m.value( "config" ).toString() ) - , weight( m.value( "weight" ).toInt() ) +InstanceDescription::InstanceDescription( const Calamares::ModuleSystem::InstanceKey& key ) + : m_instanceKey( key ) + , m_weight( -1 ) { - if ( id.isEmpty() ) + if ( !isValid() ) { - id = module; + m_weight = 0; } - if ( config.isEmpty() ) + else { - config = module + QStringLiteral( ".conf" ); + m_configFileName = key.module() + QStringLiteral( ".conf" ); } +} - weight = qBound( 1, weight, 100 ); +InstanceDescription +InstanceDescription::fromSettings( const QVariantMap& m ) +{ + InstanceDescription r( + Calamares::ModuleSystem::InstanceKey( m.value( "module" ).toString(), m.value( "id" ).toString() ) ); + if ( r.isValid() ) + { + if ( m.value( "weight" ).isValid() ) + { + int w = qBound( 1, m.value( "weight" ).toInt(), 100 ); + r.m_weight = w; + } + + QString c = m.value( "config" ).toString(); + if ( !c.isEmpty() ) + { + r.m_configFileName = c; + } + } + return r; } Settings* Settings::s_instance = nullptr; @@ -94,6 +104,10 @@ Settings* Settings::s_instance = nullptr; Settings* Settings::instance() { + if ( !s_instance ) + { + cWarning() << "Getting nullptr Settings instance."; + } return s_instance; } @@ -152,7 +166,13 @@ interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& c { continue; } - customInstances.append( InstanceDescription( instancesVListItem.toMap() ) ); + auto description = InstanceDescription::fromSettings( instancesVListItem.toMap() ); + if ( !description.isValid() ) + { + cWarning() << "Invalid entry in *instances*" << instancesVListItem; + } + // Append it **anyway**, since this will bail out after Settings is constructed + customInstances.append( description ); } } } @@ -189,11 +209,23 @@ interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSeque } else { + cDebug() << "Unknown action in *sequence*" << thisActionS; continue; } QStringList thisActionRoster = sequenceVListItem.toMap().value( thisActionS ).toStringList(); - moduleSequence.append( qMakePair( thisAction, thisActionRoster ) ); + Calamares::ModuleSystem::InstanceKeyList roster; + roster.reserve( thisActionRoster.count() ); + for ( const auto& s : thisActionRoster ) + { + auto instanceKey = Calamares::ModuleSystem::InstanceKey::fromString( s ); + if ( !instanceKey.isValid() ) + { + cWarning() << "Invalid instance in *sequence*" << s; + } + roster.append( instanceKey ); + } + moduleSequence.append( qMakePair( thisAction, roster ) ); } } else @@ -202,6 +234,19 @@ interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSeque } } +Settings::Settings( bool debugMode ) + : QObject() + , m_debug( debugMode ) + , m_doChroot( true ) + , m_promptInstall( false ) + , m_disableCancel( false ) + , m_disableCancelDuringExec( false ) +{ + cWarning() << "Using bogus Calamares settings in" + << ( debugMode ? QStringLiteral( "debug" ) : QStringLiteral( "regular" ) ) << "mode"; + s_instance = this; +} + Settings::Settings( const QString& settingsFilePath, bool debugMode ) : QObject() , m_debug( debugMode ) @@ -214,30 +259,7 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode ) QFile file( settingsFilePath ); if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) ) { - QByteArray ba = file.readAll(); - - try - { - YAML::Node config = YAML::Load( ba.constData() ); - Q_ASSERT( config.IsMap() ); - - interpretModulesSearch( - debugMode, CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); - interpretInstances( config[ "instances" ], m_customModuleInstances ); - interpretSequence( config[ "sequence" ], m_modulesSequence ); - - m_brandingComponentName = requireString( config, "branding" ); - m_promptInstall = requireBool( config, "prompt-install", false ); - m_doChroot = !requireBool( config, "dont-chroot", false ); - m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); - m_disableCancel = requireBool( config, "disable-cancel", false ); - m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); - m_quitAtEnd = requireBool( config, "quit-at-end", false ); - } - catch ( YAML::Exception& e ) - { - CalamaresUtils::explainYamlException( e, ba, file.fileName() ); - } + setConfiguration( file.readAll(), file.fileName() ); } else { @@ -247,6 +269,77 @@ Settings::Settings( const QString& settingsFilePath, bool debugMode ) s_instance = this; } +bool +Settings::isModuleEnabled( const QString& module ) const +{ + // Iterate over the list of modules searching for a match + for ( const auto& moduleInstance : qAsConst( m_moduleInstances ) ) + { + if ( moduleInstance.key().module() == module ) + { + return true; + } + } + + return false; +} + +void +Settings::reconcileInstancesAndSequence() +{ + // Since moduleFinder captures targetKey by reference, we can + // update targetKey to change what the finder lambda looks for. + Calamares::ModuleSystem::InstanceKey targetKey; + auto moduleFinder = [ &targetKey ]( const InstanceDescription& d ) { return d.isValid() && d.key() == targetKey; }; + + // Check the sequence against the existing instances (which so far are only custom) + for ( const auto& step : m_modulesSequence ) + { + for ( const auto& instanceKey : step.second ) + { + targetKey = instanceKey; + const auto it = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), moduleFinder ); + if ( it == m_moduleInstances.constEnd() ) + { + if ( instanceKey.isCustom() ) + { + cWarning() << "Custom instance key" << instanceKey << "is not listed in the *instances*"; + } + m_moduleInstances.append( InstanceDescription( instanceKey ) ); + } + } + } +} + +void +Settings::setConfiguration( const QByteArray& ba, const QString& explainName ) +{ + try + { + YAML::Node config = YAML::Load( ba.constData() ); + Q_ASSERT( config.IsMap() ); + + interpretModulesSearch( + debugMode(), CalamaresUtils::yamlToStringList( config[ "modules-search" ] ), m_modulesSearchPaths ); + interpretInstances( config[ "instances" ], m_moduleInstances ); + interpretSequence( config[ "sequence" ], m_modulesSequence ); + + m_brandingComponentName = requireString( config, "branding" ); + m_promptInstall = requireBool( config, "prompt-install", false ); + m_doChroot = !requireBool( config, "dont-chroot", false ); + m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); + m_disableCancel = requireBool( config, "disable-cancel", false ); + m_disableCancelDuringExec = requireBool( config, "disable-cancel-during-exec", false ); + m_hideBackAndNextDuringExec = requireBool( config, "hide-back-and-next-during-exec", false ); + m_quitAtEnd = requireBool( config, "quit-at-end", false ); + + reconcileInstancesAndSequence(); + } + catch ( YAML::Exception& e ) + { + CalamaresUtils::explainYamlException( e, ba, explainName ); + } +} QStringList Settings::modulesSearchPaths() const @@ -256,9 +349,9 @@ Settings::modulesSearchPaths() const Settings::InstanceDescriptionList -Settings::customModuleInstances() const +Settings::moduleInstances() const { - return m_customModuleInstances; + return m_moduleInstances; } @@ -364,4 +457,25 @@ Settings::init( const QString& path ) return new Calamares::Settings( path, true ); } +bool +Settings::isValid() const +{ + if ( brandingComponentName().isEmpty() ) + { + cWarning() << "No branding component is set"; + return false; + } + + const auto invalidDescriptor = []( const InstanceDescription& d ) { return !d.isValid(); }; + const auto invalidDescriptorIt + = std::find_if( m_moduleInstances.constBegin(), m_moduleInstances.constEnd(), invalidDescriptor ); + if ( invalidDescriptorIt != m_moduleInstances.constEnd() ) + { + cWarning() << "Invalid module instance in *instances* or *sequence*"; + return false; + } + + return true; +} + } // namespace Calamares diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 3cedd6e2b..99f4667e9 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -1,22 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Dominic Hayes - * Copyright 2019, Gabriel Craciunescu - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2019 Dominic Hayes + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETTINGS_H @@ -24,6 +16,7 @@ #include "DllMacro.h" #include "modulesystem/Actions.h" +#include "modulesystem/InstanceKey.h" #include #include @@ -32,21 +25,63 @@ namespace Calamares { -struct DLLEXPORT InstanceDescription +/** @brief Description of an instance as named in `settings.conf` + * + * An instance is an intended-step-in-sequence; it is not yet + * a loaded module. The instances have config-files and weights + * which are used by the module manager when loading modules + * and creating jobs. + */ +class DLLEXPORT InstanceDescription { - InstanceDescription( const QVariantMap& ); + using InstanceKey = Calamares::ModuleSystem::InstanceKey; - QString module; ///< Module name (e.g. "welcome") - QString id; ///< Id, to distinguish multiple instances (e.g. "one", for "welcome@one") - QString config; ///< Config-file name (for multiple instances) - int weight; +public: + /** @brief An invalid InstanceDescription + * + * Use `fromSettings()` to populate an InstanceDescription and + * check its validity. + */ + InstanceDescription() = default; + + /** @brief An InstanceDescription with no special settings. + * + * Regardless of @p key being custom, sets weight to 1 and + * the configuration file to @c key.module() (plus the ".conf" + * extension). + * + * To InstanceDescription is custom if the key is. + */ + InstanceDescription( const InstanceKey& key ); + + static InstanceDescription fromSettings( const QVariantMap& ); + + bool isValid() const { return m_instanceKey.isValid(); } + + const InstanceKey& key() const { return m_instanceKey; } + QString configFileName() const { return m_configFileName; } + bool isCustom() const { return m_instanceKey.isCustom(); } + int weight() const { return m_weight < 0 ? 1 : m_weight; } + bool explicitWeight() const { return m_weight > 0; } + +private: + InstanceKey m_instanceKey; + QString m_configFileName; + int m_weight = 0; }; class DLLEXPORT Settings : public QObject { Q_OBJECT +#ifdef BUILD_AS_TEST +public: +#endif + explicit Settings( bool debugMode ); explicit Settings( const QString& settingsFilePath, bool debugMode ); + void setConfiguration( const QByteArray& configData, const QString& explainName ); + void reconcileInstancesAndSequence(); + public: static Settings* instance(); /// @brief Find a settings.conf, following @p debugMode @@ -57,13 +92,34 @@ public: QStringList modulesSearchPaths() const; using InstanceDescriptionList = QList< InstanceDescription >; - InstanceDescriptionList customModuleInstances() const; + /** @brief All the module instances used + * + * Each module-instance mentioned in `settings.conf` has an entry + * in the moduleInstances list -- both custom entries that are + * in the *instances* section, and each module mentioned in the + * *sequence*. + */ + InstanceDescriptionList moduleInstances() const; - using ModuleSequence = QList< QPair< ModuleSystem::Action, QStringList > >; + using ModuleSequence = QList< QPair< ModuleSystem::Action, Calamares::ModuleSystem::InstanceKeyList > >; + /** @brief Representation of *sequence* of execution + * + * Each "section" of the *sequence* key in `settings.conf` gets an + * entry here, stating what kind of action is taken and which modules + * take part (in order). Each entry in the list is an instance key + * which can be found in the moduleInstances() list. + */ ModuleSequence modulesSequence() const; QString brandingComponentName() const; + /** @brief Are the settings consistent and valid? + * + * Checks that at least branding is set, and that the instances + * and sequence are valid. + */ + bool isValid() const; + /** @brief Is this a debugging run? * * Returns true if Calamares is in debug mode. In debug mode, @@ -96,11 +152,26 @@ public: */ bool isSetupMode() const { return m_isSetupMode; } + /** @brief Returns whether the named module is enabled + * + * Returns true if @p module is enabled in settings.conf. Be aware that it + * only tests for a specific module name so if a QML and non-QML version + * of the same module exists, it must be specified explicitly + * + * @p module is a module name or module key e.g. packagechooser) and not a + * full module key+id (e.g. packagechooser@packagechooser) + * + */ + bool isModuleEnabled( const QString& module ) const; + /** @brief Global setting of disable-cancel: can't cancel ever. */ bool disableCancel() const { return m_disableCancel; } + /** @brief Temporary setting of disable-cancel: can't cancel during exec. */ bool disableCancelDuringExec() const { return m_disableCancelDuringExec; } + bool hideBackAndNextDuringExec() const { return m_hideBackAndNextDuringExec; } + /** @brief Is quit-at-end set? (Quit automatically when done) */ bool quitAtEnd() const { return m_quitAtEnd; } @@ -109,18 +180,20 @@ private: QStringList m_modulesSearchPaths; - InstanceDescriptionList m_customModuleInstances; + InstanceDescriptionList m_moduleInstances; ModuleSequence m_modulesSequence; QString m_brandingComponentName; + // bools are initialized here according to default setting bool m_debug; - bool m_doChroot; - bool m_isSetupMode; - bool m_promptInstall; - bool m_disableCancel; - bool m_disableCancelDuringExec; - bool m_quitAtEnd; + bool m_doChroot = true; + bool m_isSetupMode = false; + bool m_promptInstall = false; + bool m_disableCancel = false; + bool m_disableCancelDuringExec = false; + bool m_hideBackAndNextDuringExec = false; + bool m_quitAtEnd = false; }; } // namespace Calamares diff --git a/src/libcalamares/Tests.cpp b/src/libcalamares/Tests.cpp new file mode 100644 index 000000000..51fd92a2f --- /dev/null +++ b/src/libcalamares/Tests.cpp @@ -0,0 +1,636 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "Settings.h" +#include "modulesystem/InstanceKey.h" +#include "utils/Logger.h" + +#include +#include +#include + +class TestLibCalamares : public QObject +{ + Q_OBJECT +public: + TestLibCalamares() {} + ~TestLibCalamares() override {} + +private Q_SLOTS: + void testGSModify(); + void testGSLoadSave(); + void testGSLoadSave2(); + void testGSLoadSaveYAMLStringList(); + + void testInstanceKey(); + void testInstanceDescription(); + + void testSettings(); + + void testJobQueue(); +}; + +void +TestLibCalamares::testGSModify() +{ + Calamares::GlobalStorage gs; + QSignalSpy spy( &gs, &Calamares::GlobalStorage::changed ); + + const QString key( "derp" ); + + QCOMPARE( gs.count(), 0 ); + QVERIFY( !gs.contains( key ) ); + + const int value = 17; + gs.insert( key, value ); + QCOMPARE( gs.count(), 1 ); + QVERIFY( gs.contains( key ) ); + QCOMPARE( gs.value( key ).type(), QVariant::Int ); + QCOMPARE( gs.value( key ).toString(), QString( "17" ) ); // It isn't a string, but does convert + QCOMPARE( gs.value( key ).toInt(), value ); + + gs.remove( key ); + QCOMPARE( gs.count(), 0 ); + QVERIFY( !gs.contains( key ) ); + + QCOMPARE( spy.count(), 2 ); // one insert, one remove +} + +void +TestLibCalamares::testGSLoadSave() +{ + Calamares::GlobalStorage gs; + const QString jsonfilename( "gs.test.json" ); + const QString yamlfilename( "gs.test.yaml" ); + + gs.insert( "derp", 17 ); + gs.insert( "cow", "moo" ); + + QVariantList l; + for ( const auto& s : QStringList { "dopey", "sneezy" } ) + { + l.append( s ); + } + gs.insert( "dwarfs", l ); + + QCOMPARE( gs.count(), 3 ); + + QVERIFY( gs.saveJson( jsonfilename ) ); + Calamares::GlobalStorage gs2; + QCOMPARE( gs2.count(), 0 ); + QVERIFY( gs2.loadJson( jsonfilename ) ); + QCOMPARE( gs2.count(), 3 ); + QCOMPARE( gs2.data(), gs.data() ); + + QVERIFY( gs.saveYaml( yamlfilename ) ); + Calamares::GlobalStorage gs3; + QCOMPARE( gs3.count(), 0 ); + QVERIFY( gs3.loadYaml( jsonfilename ) ); + QCOMPARE( gs3.count(), 3 ); + QCOMPARE( gs3.data(), gs.data() ); + + // YAML can load as JSON! + QVERIFY( gs3.loadYaml( jsonfilename ) ); + QCOMPARE( gs3.count(), 3 ); + QCOMPARE( gs3.data(), gs.data() ); + + // Failures in loading + QVERIFY( !gs3.loadJson( yamlfilename ) ); + + Calamares::GlobalStorage gs4; + gs4.insert( "derp", 32 ); + gs4.insert( "dorp", "Varsseveld" ); + QCOMPARE( gs4.count(), 2 ); + QVERIFY( gs4.contains( "dorp" ) ); + QCOMPARE( gs4.value( "derp" ).toInt(), 32 ); + QVERIFY( gs4.loadJson( jsonfilename ) ); + // 3 keys from the file, but one overwrite + QCOMPARE( gs4.count(), 4 ); + QVERIFY( gs4.contains( "dorp" ) ); + QCOMPARE( gs4.value( "derp" ).toInt(), 17 ); // This one was overwritten +} + +void +TestLibCalamares::testGSLoadSave2() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + + const QString filename( "../src/libcalamares/testdata/yaml-list.conf" ); + if ( !QFile::exists( filename ) ) + { + return; + } + + Calamares::GlobalStorage gs1; + const QString key( "dwarfs" ); + + QVERIFY( gs1.loadYaml( filename ) ); + QCOMPARE( gs1.count(), 3 ); // From examining the file + QVERIFY( gs1.contains( key ) ); + cDebug() << gs1.value( key ).type() << gs1.value( key ); + QCOMPARE( gs1.value( key ).type(), QVariant::List ); + + const QString yamlfilename( "gs.test.yaml" ); + QVERIFY( gs1.saveYaml( yamlfilename ) ); + + Calamares::GlobalStorage gs2; + QVERIFY( gs2.loadYaml( yamlfilename ) ); + QVERIFY( gs2.contains( key ) ); + QCOMPARE( gs2.value( key ).type(), QVariant::List ); +} + +void +TestLibCalamares::testGSLoadSaveYAMLStringList() +{ + Calamares::GlobalStorage gs; + const QString yamlfilename( "gs.test.yaml" ); + + gs.insert( "derp", 17 ); + gs.insert( "cow", "moo" ); + gs.insert( "dwarfs", QStringList { "happy", "dopey", "sleepy", "sneezy", "doc", "thorin", "balin" } ); + + QCOMPARE( gs.count(), 3 ); + QCOMPARE( gs.value( "dwarfs" ).toList().count(), 7 ); // There's seven dwarfs, right? + QVERIFY( gs.value( "dwarfs" ).toStringList().contains( "thorin" ) ); + QVERIFY( !gs.value( "dwarfs" ).toStringList().contains( "gimli" ) ); + + + QVERIFY( gs.saveYaml( yamlfilename ) ); + + Calamares::GlobalStorage gs2; + QCOMPARE( gs2.count(), 0 ); + QVERIFY( gs2.loadYaml( yamlfilename ) ); + QCOMPARE( gs2.count(), 3 ); + QEXPECT_FAIL( "", "QStringList doesn't write out nicely", Continue ); + QCOMPARE( gs2.value( "dwarfs" ).toList().count(), 7 ); // There's seven dwarfs, right? + QCOMPARE( gs2.value( "dwarfs" ).toString(), QStringLiteral( "" ) ); // .. they're gone +} + +void +TestLibCalamares::testInstanceKey() +{ + using InstanceKey = Calamares::ModuleSystem::InstanceKey; + { + InstanceKey k; + QVERIFY( !k.isValid() ); + QVERIFY( !k.isCustom() ); + QVERIFY( k.module().isEmpty() ); + } + { + InstanceKey k( QStringLiteral( "welcome" ), QString() ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "welcome" ) ); + } + { + InstanceKey k( QStringLiteral( "shellprocess" ), QStringLiteral( "zfssetup" ) ); + QVERIFY( k.isValid() ); + QVERIFY( k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "shellprocess" ) ); + QCOMPARE( k.id(), QStringLiteral( "zfssetup" ) ); + } + + { + // This is a bad idea, names and ids with odd punctuation + InstanceKey k( QStringLiteral( " o__O " ), QString() ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( " o__O " ) ); + } + { + // .. but @ is disallowed + InstanceKey k( QStringLiteral( "welcome@hi" ), QString() ); + QVERIFY( !k.isValid() ); + QVERIFY( !k.isCustom() ); + QVERIFY( k.module().isEmpty() ); + } + + { + InstanceKey k = InstanceKey::fromString( "welcome" ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "welcome" ) ); + } + { + InstanceKey k = InstanceKey::fromString( "welcome@welcome" ); + QVERIFY( k.isValid() ); + QVERIFY( !k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "welcome" ) ); + } + + { + InstanceKey k = InstanceKey::fromString( "welcome@hi" ); + QVERIFY( k.isValid() ); + QVERIFY( k.isCustom() ); + QCOMPARE( k.module(), QStringLiteral( "welcome" ) ); + QCOMPARE( k.id(), QStringLiteral( "hi" ) ); + } + { + InstanceKey k = InstanceKey::fromString( "welcome@hi@hi" ); + QVERIFY( !k.isValid() ); + QVERIFY( !k.isCustom() ); + QVERIFY( k.module().isEmpty() ); + QVERIFY( k.id().isEmpty() ); + } +} + +void +TestLibCalamares::testInstanceDescription() +{ + using InstanceDescription = Calamares::InstanceDescription; + using InstanceKey = Calamares::ModuleSystem::InstanceKey; + + // With invalid keys + // + // + { + InstanceDescription d; + QVERIFY( !d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 0 ); + QVERIFY( d.configFileName().isEmpty() ); + QVERIFY( !d.explicitWeight() ); + } + + { + InstanceDescription d( InstanceKey {} ); // most-vexing, use brace-init instead + QVERIFY( !d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 0 ); + QVERIFY( d.configFileName().isEmpty() ); + QVERIFY( !d.explicitWeight() ); + } + + // Private constructor + // + // This does set up the config file, to default values + { + InstanceDescription d( InstanceKey::fromString( "welcome" ) ); + QVERIFY( d.isValid() ); + QVERIFY( !d.isCustom() ); + QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in + QVERIFY( !d.configFileName().isEmpty() ); + QCOMPARE( d.configFileName(), QStringLiteral( "welcome.conf" ) ); + QVERIFY( !d.explicitWeight() ); + } + + { + InstanceDescription d( InstanceKey::fromString( "welcome@hi" ) ); + QVERIFY( d.isValid() ); + QVERIFY( d.isCustom() ); + QCOMPARE( d.weight(), 1 ); // **now** the constraints kick in + QVERIFY( !d.configFileName().isEmpty() ); + QCOMPARE( d.configFileName(), QStringLiteral( "welcome.conf" ) ); + QVERIFY( !d.explicitWeight() ); + } + + + // From settings, normal program flow + // + // + { + QVariantMap m; + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( !d.isValid() ); + } + { + QVariantMap m; + m.insert( "name", "welcome" ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( !d.isValid() ); + QVERIFY( !d.explicitWeight() ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( !d.isCustom() ); + // Valid, but no weight set by settings + QCOMPARE( d.weight(), 1 ); + QVERIFY( !d.explicitWeight() ); + + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "welcome" ) ); + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + m.insert( "weight", 1 ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( !d.isCustom() ); + + //Valid, set explicitly + QCOMPARE( d.weight(), 1 ); + QVERIFY( d.explicitWeight() ); + + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "welcome" ) ); + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + m.insert( "id", "hi" ); + m.insert( "weight", "17" ); // String, that's kind of bogus + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( d.isCustom() ); + QCOMPARE( d.weight(), 17 ); + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "hi" ) ); + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); + QVERIFY( d.explicitWeight() ); + } + { + QVariantMap m; + m.insert( "module", "welcome" ); + m.insert( "id", "hi" ); + m.insert( "weight", 134 ); + m.insert( "config", "hi.conf" ); + + InstanceDescription d = InstanceDescription::fromSettings( m ); + QVERIFY( d.isValid() ); + QVERIFY( d.isCustom() ); + QCOMPARE( d.weight(), 100 ); + QCOMPARE( d.key().module(), QString( "welcome" ) ); + QCOMPARE( d.key().id(), QString( "hi" ) ); + QCOMPARE( d.configFileName(), QString( "hi.conf" ) ); + QVERIFY( d.explicitWeight() ); + } +} + +void +TestLibCalamares::testSettings() +{ + { + Calamares::Settings s( false ); + QVERIFY( !s.debugMode() ); + QVERIFY( !s.isValid() ); + } + { + Calamares::Settings s( true ); + QVERIFY( s.debugMode() ); + QVERIFY( s.moduleInstances().isEmpty() ); + QVERIFY( s.modulesSequence().isEmpty() ); + QVERIFY( s.brandingComponentName().isEmpty() ); + QVERIFY( !s.isValid() ); + + s.setConfiguration( R"(--- +branding: default # needed for it to be considered valid +instances: + - module: welcome + id: hi + weight: 75 + - module: welcome + id: yo + config: yolo.conf +sequence: + - show: + - welcome@hi + - welcome@yo + - dummycpp + - summary + - exec: + - welcome@hi +)", + QStringLiteral( "" ) ); + + QVERIFY( s.debugMode() ); + QCOMPARE( s.moduleInstances().count(), 4 ); // there are 4 module instances mentioned + QCOMPARE( s.modulesSequence().count(), 2 ); // 2 steps (show, exec) + QVERIFY( !s.brandingComponentName().isEmpty() ); + QVERIFY( s.isValid() ); + + // Make a lambda where we can adjust what it looks for from the outside, + // by capturing a reference. + QString moduleKey = QString( "welcome" ); + auto moduleFinder = [ &moduleKey ]( const Calamares::InstanceDescription& d ) + { return d.isValid() && d.key().module() == moduleKey; }; + + const auto it0 = std::find_if( s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); + QVERIFY( it0 != s.moduleInstances().constEnd() ); + + moduleKey = QString( "derp" ); + const auto it1 = std::find_if( s.moduleInstances().constBegin(), s.moduleInstances().constEnd(), moduleFinder ); + QVERIFY( it1 == s.moduleInstances().constEnd() ); + + int validCount = 0; + int customCount = 0; + for ( const auto& d : s.moduleInstances() ) + { + if ( d.isValid() ) + { + validCount++; + } + if ( d.isCustom() ) + { + customCount++; + } + QVERIFY( d.isCustom() ? d.isValid() : true ); // All custom entries are valid + + if ( !d.isCustom() ) + { + QCOMPARE( d.configFileName(), QString( "%1.conf" ).arg( d.key().module() ) ); + } + else + { + // Specific cases from this config file + if ( d.key().id() == QString( "yo" ) ) + { + QCOMPARE( d.configFileName(), QString( "yolo.conf" ) ); + } + else + { + QCOMPARE( d.configFileName(), QString( "welcome.conf" ) ); // Not set in the settings data + } + } + } + QCOMPARE( customCount, 2 ); + QCOMPARE( validCount, 4 ); // welcome@hi is listed twice, in *show* and *exec* + } +} + +constexpr const std::chrono::milliseconds MAX_TEST_DURATION( 3000 ); +constexpr const int MAX_TEST_SLEEP( 2 ); // seconds, < MAX_TEST_DURATION + +Q_STATIC_ASSERT( std::chrono::seconds( MAX_TEST_SLEEP ) < MAX_TEST_DURATION ); + +class DummyJob : public Calamares::Job +{ +public: + DummyJob( QObject* parent ) + : Calamares::Job( parent ) + { + } + ~DummyJob() override; + + QString prettyName() const override; + Calamares::JobResult exec() override; +}; + +DummyJob::~DummyJob() {} + +QString +DummyJob::prettyName() const +{ + return QString( "DummyJob" ); +} + +Calamares::JobResult +DummyJob::exec() +{ + cDebug() << "Starting DummyJob"; + progress( 0.5 ); + QThread::sleep( MAX_TEST_SLEEP ); + cDebug() << ".. continuing DummyJob"; + progress( 0.75 ); + return Calamares::JobResult::ok(); +} + + +void +TestLibCalamares::testJobQueue() +{ + // Run an empty queue + { + Calamares::JobQueue q; + QVERIFY( !q.isRunning() ); + + QSignalSpy spy_progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy spy_finished( &q, &Calamares::JobQueue::finished ); + QSignalSpy spy_failed( &q, &Calamares::JobQueue::failed ); + + QEventLoop loop; + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + QTimer::singleShot( MAX_TEST_DURATION, &loop, &QEventLoop::quit ); + q.start(); + QVERIFY( q.isRunning() ); + loop.exec(); + QVERIFY( !q.isRunning() ); + QCOMPARE( spy_finished.count(), 1 ); + QCOMPARE( spy_failed.count(), 0 ); + QCOMPARE( spy_progress.count(), 1 ); // just one, 100% at queue end + } + + // Run a dummy queue + { + Calamares::JobQueue q; + QVERIFY( !q.isRunning() ); + + q.enqueue( 8, Calamares::JobList() << Calamares::job_ptr( new DummyJob( this ) ) ); + QSignalSpy spy_progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy spy_finished( &q, &Calamares::JobQueue::finished ); + QSignalSpy spy_failed( &q, &Calamares::JobQueue::failed ); + + QEventLoop loop; + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + QTimer::singleShot( MAX_TEST_DURATION, &loop, &QEventLoop::quit ); + q.start(); + QVERIFY( q.isRunning() ); + loop.exec(); + QVERIFY( !q.isRunning() ); + QCOMPARE( spy_finished.count(), 1 ); + QCOMPARE( spy_failed.count(), 0 ); + // 0% by the queue at job start + // 50% by the job itself + // 90% by the job itself + // 100% by the queue at job end + // 100% by the queue at queue end + QCOMPARE( spy_progress.count(), 5 ); + } + + { + Calamares::JobQueue q; + QVERIFY( !q.isRunning() ); + + q.enqueue( 8, Calamares::JobList() << Calamares::job_ptr( new DummyJob( this ) ) ); + q.enqueue( 12, + Calamares::JobList() << Calamares::job_ptr( new DummyJob( this ) ) + << Calamares::job_ptr( new DummyJob( this ) ) ); + QSignalSpy spy_progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy spy_finished( &q, &Calamares::JobQueue::finished ); + QSignalSpy spy_failed( &q, &Calamares::JobQueue::failed ); + + QEventLoop loop; + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + // Run the loop longer because the jobs take longer (there are 3 of them) + QTimer::singleShot( 3 * MAX_TEST_DURATION, &loop, &QEventLoop::quit ); + q.start(); + QVERIFY( q.isRunning() ); + loop.exec(); + QVERIFY( !q.isRunning() ); + QCOMPARE( spy_finished.count(), 1 ); + QCOMPARE( spy_failed.count(), 0 ); + // 0% by the queue at job start + // 50% by the job itself + // 90% by the job itself + // 100% by the queue at job end + // 4 more for the next job + // 4 more for the next job + // 100% by the queue at queue end + QCOMPARE( spy_progress.count(), 13 ); + + /* Consider how progress will be reported: + * + * - the first module has weight 8, so the 1 job it has has weight 8 + * - the second module has weight 12, so each of its two jobs has weight 6 + * + * Total weight of the modules is 20. So the events are + * + * Job Progress Overall Weight Consumed Overall Progress + * 1 0 0 0.00 + * 1 50 4 0.20 + * 1 75 6 0.30 + * 1 100 8 0.40 + * 2 0 8 0.40 + * 2 50 11 (8 + 50% of 6) 0.55 + * 2 75 12.5 0.625 + * 2 100 14 0.70 + * 3 0 14 0.70 + * 3 50 17 0.85 + * 3 75 18.5 0.925 + * 3 100 20 1.00 + * - 100 20 1.00 + */ + cDebug() << "Progress signals:"; + qreal overallProgress = 0.0; + for ( const auto& e : spy_progress ) + { + QCOMPARE( e.count(), 2 ); + const auto v = e.first(); + QVERIFY( v.canConvert< qreal >() ); + qreal progress = v.toReal(); + cDebug() << Logger::SubEntry << progress; + QVERIFY( progress >= overallProgress ); // Doesn't go backwards + overallProgress = progress; + } + } +} + + +QTEST_GUILESS_MAIN( TestLibCalamares ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/libcalamares/geoip/GeoIPFixed.cpp b/src/libcalamares/geoip/GeoIPFixed.cpp new file mode 100644 index 000000000..7e5efbd6c --- /dev/null +++ b/src/libcalamares/geoip/GeoIPFixed.cpp @@ -0,0 +1,35 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "GeoIPFixed.h" + +namespace CalamaresUtils +{ +namespace GeoIP +{ + +GeoIPFixed::GeoIPFixed( const QString& attribute ) + : Interface( attribute.isEmpty() ? QStringLiteral( "Europe/Amsterdam" ) : attribute ) +{ +} + +QString +GeoIPFixed::rawReply( const QByteArray& ) +{ + return m_element; +} + +GeoIP::RegionZonePair +GeoIPFixed::processReply( const QByteArray& data ) +{ + return splitTZString( rawReply( data ) ); +} + +} // namespace GeoIP +} // namespace CalamaresUtils diff --git a/src/libcalamares/geoip/GeoIPFixed.h b/src/libcalamares/geoip/GeoIPFixed.h new file mode 100644 index 000000000..d6e9b0e41 --- /dev/null +++ b/src/libcalamares/geoip/GeoIPFixed.h @@ -0,0 +1,43 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef GEOIP_GEOIPFIXED_H +#define GEOIP_GEOIPFIXED_H + +#include "Interface.h" + +namespace CalamaresUtils +{ +namespace GeoIP +{ +/** @brief GeoIP with a fixed return value + * + * The data is ignored entirely and the attribute value is returned unchanged. + * Note that you still need to provide a usable URL for a successful GeoIP + * lookup -- the URL's data is just ignored. + * + * @note This class is an implementation detail. + */ +class GeoIPFixed : public Interface +{ +public: + /** @brief Configure the value to return from rawReply() + * + * An empty string, which would not be a valid zone name, is + * translated to "Europe/Amsterdam". + */ + explicit GeoIPFixed( const QString& value = QString() ); + + virtual RegionZonePair processReply( const QByteArray& ) override; + virtual QString rawReply( const QByteArray& ) override; +}; + +} // namespace GeoIP +} // namespace CalamaresUtils +#endif diff --git a/src/libcalamares/geoip/GeoIPJSON.cpp b/src/libcalamares/geoip/GeoIPJSON.cpp index 85dc79619..9869d7a25 100644 --- a/src/libcalamares/geoip/GeoIPJSON.cpp +++ b/src/libcalamares/geoip/GeoIPJSON.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GeoIPJSON.h" diff --git a/src/libcalamares/geoip/GeoIPJSON.h b/src/libcalamares/geoip/GeoIPJSON.h index 3f7756dd8..e9be14102 100644 --- a/src/libcalamares/geoip/GeoIPJSON.h +++ b/src/libcalamares/geoip/GeoIPJSON.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GEOIP_GEOIPJSON_H diff --git a/src/libcalamares/geoip/GeoIPTests.cpp b/src/libcalamares/geoip/GeoIPTests.cpp index 4b1f8f8e1..6af857b36 100644 --- a/src/libcalamares/geoip/GeoIPTests.cpp +++ b/src/libcalamares/geoip/GeoIPTests.cpp @@ -1,23 +1,15 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GeoIPTests.h" +#include "GeoIPFixed.h" #include "GeoIPJSON.h" #ifdef QT_XML_LIB #include "GeoIPXML.h" @@ -240,3 +232,35 @@ GeoIPTests::testGet() CHECK_GET( XML, QString(), "https://geoip.kde.org/v1/ubiquity" ) // Temporary KDE service #endif } + +void +GeoIPTests::testFixed() +{ + { + GeoIPFixed f; + auto tz = f.processReply( QByteArray() ); + QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); + QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) ); + + QCOMPARE( f.processReply( xml_data_ubiquity ), tz ); + QCOMPARE( f.processReply( QByteArray( "derp" ) ), tz ); + } + { + GeoIPFixed f( QStringLiteral( "America/Vancouver" ) ); + auto tz = f.processReply( QByteArray() ); + QCOMPARE( tz.first, QStringLiteral( "America" ) ); + QCOMPARE( tz.second, QStringLiteral( "Vancouver" ) ); + + QCOMPARE( f.processReply( xml_data_ubiquity ), tz ); + QCOMPARE( f.processReply( QByteArray( "derp" ) ), tz ); + } + { + GeoIPFixed f( QStringLiteral( "America/North Dakota/Beulah" ) ); + auto tz = f.processReply( QByteArray() ); + QCOMPARE( tz.first, QStringLiteral( "America" ) ); + QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); + + QCOMPARE( f.processReply( xml_data_ubiquity ), tz ); + QCOMPARE( f.processReply( QByteArray( "derp" ) ), tz ); + } +} diff --git a/src/libcalamares/geoip/GeoIPTests.h b/src/libcalamares/geoip/GeoIPTests.h index a320e3263..4d36edbb0 100644 --- a/src/libcalamares/geoip/GeoIPTests.h +++ b/src/libcalamares/geoip/GeoIPTests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GEOIPTESTS_H @@ -30,6 +21,7 @@ public: private Q_SLOTS: void initTestCase(); + void testFixed(); void testJSON(); void testJSONalt(); void testJSONbad(); diff --git a/src/libcalamares/geoip/GeoIPXML.cpp b/src/libcalamares/geoip/GeoIPXML.cpp index 2a97c5546..7f2c30090 100644 --- a/src/libcalamares/geoip/GeoIPXML.cpp +++ b/src/libcalamares/geoip/GeoIPXML.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GeoIPXML.h" diff --git a/src/libcalamares/geoip/GeoIPXML.h b/src/libcalamares/geoip/GeoIPXML.h index 73147ff91..fb3167b24 100644 --- a/src/libcalamares/geoip/GeoIPXML.h +++ b/src/libcalamares/geoip/GeoIPXML.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GEOIP_GEOIPXML_H diff --git a/src/libcalamares/geoip/Handler.cpp b/src/libcalamares/geoip/Handler.cpp index 99e55e926..14de9f39c 100644 --- a/src/libcalamares/geoip/Handler.cpp +++ b/src/libcalamares/geoip/Handler.cpp @@ -1,28 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Handler.h" +#include "GeoIPFixed.h" #include "GeoIPJSON.h" #if defined( QT_XML_LIB ) #include "GeoIPXML.h" #endif +#include "Settings.h" #include "network/Manager.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" @@ -40,7 +33,8 @@ handlerTypes() static const NamedEnumTable names{ { QStringLiteral( "none" ), Type::None }, { QStringLiteral( "json" ), Type::JSON }, - { QStringLiteral( "xml" ), Type::XML } + { QStringLiteral( "xml" ), Type::XML }, + { QStringLiteral( "fixed" ), Type::Fixed } }; // *INDENT-ON* // clang-format on @@ -73,6 +67,11 @@ Handler::Handler( const QString& implementation, const QString& url, const QStri { cWarning() << "GeoIP style *none* does not do anything."; } + else if ( m_type == Type::Fixed && Calamares::Settings::instance() + && !Calamares::Settings::instance()->debugMode() ) + { + cWarning() << "GeoIP style *fixed* is not recommended for production."; + } #if !defined( QT_XML_LIB ) else if ( m_type == Type::XML ) { @@ -99,8 +98,10 @@ create_interface( Handler::Type t, const QString& selector ) #else return nullptr; #endif + case Handler::Type::Fixed: + return std::make_unique< GeoIPFixed >( selector ); } - NOTREACHED return nullptr; + __builtin_unreachable(); } static RegionZonePair @@ -112,7 +113,9 @@ do_query( Handler::Type type, const QString& url, const QString& selector ) return RegionZonePair(); } - return interface->processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( url ) ); + using namespace CalamaresUtils::Network; + return interface->processReply( + CalamaresUtils::Network::Manager::instance().synchronousGet( url, { RequestOptions::FakeUserAgent } ) ); } static QString @@ -124,7 +127,9 @@ do_raw_query( Handler::Type type, const QString& url, const QString& selector ) return QString(); } - return interface->rawReply( CalamaresUtils::Network::Manager::instance().synchronousGet( url ) ); + using namespace CalamaresUtils::Network; + return interface->rawReply( + CalamaresUtils::Network::Manager::instance().synchronousGet( url, { RequestOptions::FakeUserAgent } ) ); } RegionZonePair @@ -145,7 +150,7 @@ Handler::query() const QString url = m_url; QString selector = m_selector; - return QtConcurrent::run( [=] { return do_query( type, url, selector ); } ); + return QtConcurrent::run( [ = ] { return do_query( type, url, selector ); } ); } QString @@ -166,7 +171,7 @@ Handler::queryRaw() const QString url = m_url; QString selector = m_selector; - return QtConcurrent::run( [=] { return do_raw_query( type, url, selector ); } ); + return QtConcurrent::run( [ = ] { return do_raw_query( type, url, selector ); } ); } } // namespace GeoIP diff --git a/src/libcalamares/geoip/Handler.h b/src/libcalamares/geoip/Handler.h index 518964caf..e13198b94 100644 --- a/src/libcalamares/geoip/Handler.h +++ b/src/libcalamares/geoip/Handler.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GEOIP_HANDLER_H @@ -43,9 +34,10 @@ class DLLEXPORT Handler public: enum class Type { - None, - JSON, - XML + None, // No lookup, returns empty string + JSON, // JSON-formatted data, returns extracted field + XML, // XML-formatted data, returns extracted field + Fixed // Returns selector string verbatim }; /** @brief An unconfigured handler; this always returns errors. */ diff --git a/src/libcalamares/geoip/Interface.cpp b/src/libcalamares/geoip/Interface.cpp index 2cecb63c5..8ebe65208 100644 --- a/src/libcalamares/geoip/Interface.cpp +++ b/src/libcalamares/geoip/Interface.cpp @@ -1,24 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Interface.h" #include "utils/Logger.h" +#include "utils/String.h" namespace CalamaresUtils { @@ -39,10 +31,9 @@ splitTZString( const QString& tz ) timezoneString.remove( '\\' ); timezoneString.replace( ' ', '_' ); - QStringList tzParts = timezoneString.split( '/', QString::SkipEmptyParts ); + QStringList tzParts = timezoneString.split( '/', SplitSkipEmptyParts ); if ( tzParts.size() >= 2 ) { - cDebug() << "GeoIP reporting" << timezoneString; QString region = tzParts.takeFirst(); QString zone = tzParts.join( '/' ); return RegionZonePair( region, zone ); diff --git a/src/libcalamares/geoip/Interface.h b/src/libcalamares/geoip/Interface.h index 1a9beaa41..2edf62155 100644 --- a/src/libcalamares/geoip/Interface.h +++ b/src/libcalamares/geoip/Interface.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GEOIP_INTERFACE_H @@ -98,7 +89,7 @@ public: virtual QString rawReply( const QByteArray& ) = 0; protected: - Interface( const QString& e = QString() ); + Interface( const QString& element = QString() ); QString m_element; // string for selecting from data }; diff --git a/src/libcalamares/geoip/test_geoip.cpp b/src/libcalamares/geoip/test_geoip.cpp index 32c6f4e24..0e14dcf91 100644 --- a/src/libcalamares/geoip/test_geoip.cpp +++ b/src/libcalamares/geoip/test_geoip.cpp @@ -1,59 +1,64 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** * This is a test-application that does one GeoIP parse. */ -#include +#include "GeoIPFixed.h" #include "GeoIPJSON.h" #ifdef QT_XML_LIB #include "GeoIPXML.h" #endif +#include "utils/Logger.h" + +#include + using std::cerr; using namespace CalamaresUtils::GeoIP; int main( int argc, char** argv ) { - if ( argc != 2 ) + if ( ( argc != 2 ) && ( argc != 3 ) ) { - cerr << "Usage: curl url | test_geoip \n"; + cerr << "Usage: curl url | test_geoip [selector]\n"; return 1; } + QString format( argv[ 1 ] ); + QString selector = argc == 3 ? QString( argv[ 2 ] ) : QString(); + + Logger::setupLogLevel( Logger::LOGVERBOSE ); + cDebug() << "Doing GeoIP interpretation with format=" << format << "selector=" << selector; + Interface* handler = nullptr; - if ( QStringLiteral( "json" ) == argv[ 1 ] ) + if ( QStringLiteral( "json" ) == format ) { - handler = new GeoIPJSON; + handler = new GeoIPJSON( selector ); } #ifdef QT_XML_LIB - else if ( QStringLiteral( "xml" ) == argv[ 1 ] ) + else if ( QStringLiteral( "xml" ) == format ) { - handler = new GeoIPXML; + handler = new GeoIPXML( selector ); } #endif + else if ( QStringLiteral( "fixed" ) == format ) + { + handler = new GeoIPFixed( selector ); + } if ( !handler ) { - cerr << "Unknown format '" << argv[ 1 ] << "'\n"; + cerr << "Unknown format '" << format.toLatin1().constData() << "'\n"; return 1; } diff --git a/src/libcalamares/locale/CountryData_p.cpp b/src/libcalamares/locale/CountryData_p.cpp index 4382950ec..455027ef8 100644 --- a/src/libcalamares/locale/CountryData_p.cpp +++ b/src/libcalamares/locale/CountryData_p.cpp @@ -1,8 +1,14 @@ /* GENERATED FILE DO NOT EDIT * -* === This file is part of Calamares - === +* === This file is part of Calamares - === * -* This file is derived from CLDR data from Unicode, Inc. Applicable terms: +* SPDX-FileCopyrightText: 1991-2019 Unicode, Inc. +* SPDX-FileCopyrightText: 2019 Adriaan de Groot +* SPDX-License-Identifier: CC0-1.0 +* +* This file is derived from CLDR data from Unicode, Inc. Applicable terms +* are listed at http://unicode.org/copyright.html , of which the most +* important are: * * A. Unicode Copyright * 1. Copyright © 1991-2019 Unicode, Inc. All rights reserved. @@ -10,6 +16,11 @@ * Unicode Data Files ("DATA FILES") include all data files under the directories: * https://www.unicode.org/Public/ * C. Terms of Use +* 1. Certain documents and files on this website contain a legend indicating +* that "Modification is permitted." Any person is hereby authorized, +* without fee, to modify such documents and files to create derivative +* works conforming to the Unicode® Standard, subject to Terms and +* Conditions herein. * 2. Any person is hereby authorized, without fee, to view, use, reproduce, * and distribute all documents and files, subject to the Terms and * Conditions herein. @@ -18,7 +29,9 @@ /* MODIFICATIONS * * Edited anyway: - * 20191211 India changed to AnyLanguage, since Hindi doesn't make sense. #1284 + * 20191211 India (IN) changed to AnyLanguage, since Hindi doesn't make sense. #1284 + * 20210207 Belarus (BY) changed to Russian, as the more-common-language. #1634 + * 20210615 Tokelau and Tuvalu country enum values changed to avoid deprecation warning. * */ @@ -66,7 +79,7 @@ static const CountryData country_data_table[] = { { QLocale::Language::Portuguese, QLocale::Country::Brazil, 'B', 'R' }, { QLocale::Language::Dzongkha, QLocale::Country::Bhutan, 'B', 'T' }, { QLocale::Language::AnyLanguage, QLocale::Country::BouvetIsland, 'B', 'V' }, -{ QLocale::Language::Belarusian, QLocale::Country::Belarus, 'B', 'Y' }, +{ QLocale::Language::Russian, QLocale::Country::Belarus, 'B', 'Y' }, { QLocale::Language::Swahili, QLocale::Country::CongoKinshasa, 'C', 'D' }, { QLocale::Language::French, QLocale::Country::CentralAfricanRepublic, 'C', 'F' }, { QLocale::Language::French, QLocale::Country::CongoBrazzaville, 'C', 'G' }, @@ -212,13 +225,13 @@ static const CountryData country_data_table[] = { { QLocale::Language::French, QLocale::Country::Togo, 'T', 'G' }, { QLocale::Language::Thai, QLocale::Country::Thailand, 'T', 'H' }, { QLocale::Language::Tajik, QLocale::Country::Tajikistan, 'T', 'J' }, -{ QLocale::Language::TokelauLanguage, QLocale::Country::Tokelau, 'T', 'K' }, +{ QLocale::Language::TokelauLanguage, QLocale::Country::TokelauCountry, 'T', 'K' }, { QLocale::Language::Portuguese, QLocale::Country::EastTimor, 'T', 'L' }, { QLocale::Language::Turkmen, QLocale::Country::Turkmenistan, 'T', 'M' }, { QLocale::Language::Arabic, QLocale::Country::Tunisia, 'T', 'N' }, { QLocale::Language::Tongan, QLocale::Country::Tonga, 'T', 'O' }, { QLocale::Language::Turkish, QLocale::Country::Turkey, 'T', 'R' }, -{ QLocale::Language::TuvaluLanguage, QLocale::Country::Tuvalu, 'T', 'V' }, +{ QLocale::Language::TuvaluLanguage, QLocale::Country::TuvaluCountry, 'T', 'V' }, { QLocale::Language::Chinese, QLocale::Country::Taiwan, 'T', 'W' }, { QLocale::Language::Swahili, QLocale::Country::Tanzania, 'T', 'Z' }, { QLocale::Language::Ukrainian, QLocale::Country::Ukraine, 'U', 'A' }, diff --git a/src/libcalamares/locale/Global.cpp b/src/libcalamares/locale/Global.cpp new file mode 100644 index 000000000..a23a10478 --- /dev/null +++ b/src/libcalamares/locale/Global.cpp @@ -0,0 +1,78 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ +#include "Global.h" + +#include "GlobalStorage.h" +#include "utils/Logger.h" + +namespace CalamaresUtils +{ +namespace Locale +{ + +static const char gsKey[] = "localeConf"; + +template < typename T > +void +insertGS( const QMap< QString, T >& values, QVariantMap& localeConf ) +{ + for ( auto it = values.constBegin(); it != values.constEnd(); ++it ) + { + localeConf.insert( it.key(), it.value() ); + } +} + +void +insertGS( Calamares::GlobalStorage& gs, const QMap< QString, QString >& values, InsertMode mode ) +{ + QVariantMap localeConf = mode == InsertMode::Overwrite ? QVariantMap() : gs.value( gsKey ).toMap(); + insertGS( values, localeConf ); + gs.insert( gsKey, localeConf ); +} + +void +insertGS( Calamares::GlobalStorage& gs, const QVariantMap& values, InsertMode mode ) +{ + QVariantMap localeConf = mode == InsertMode::Overwrite ? QVariantMap() : gs.value( gsKey ).toMap(); + insertGS( values, localeConf ); + gs.insert( gsKey, localeConf ); +} + +void +insertGS( Calamares::GlobalStorage& gs, const QString& key, const QString& value ) +{ + QVariantMap localeConf = gs.value( gsKey ).toMap(); + localeConf.insert( key, value ); + gs.insert( gsKey, localeConf ); +} + +void +removeGS( Calamares::GlobalStorage& gs, const QString& key ) +{ + if ( gs.contains( gsKey ) ) + { + QVariantMap localeConf = gs.value( gsKey ).toMap(); + if ( localeConf.contains( key ) ) + { + localeConf.remove( key ); + gs.insert( gsKey, localeConf ); + } + } +} + +void +clearGS( Calamares::GlobalStorage& gs ) +{ + gs.remove( gsKey ); +} + + +} // namespace Locale +} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/Global.h b/src/libcalamares/locale/Global.h new file mode 100644 index 000000000..abcf43dcd --- /dev/null +++ b/src/libcalamares/locale/Global.h @@ -0,0 +1,80 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +/** @file GlobalStorage management for Locale settings + * + * The *localeConf* key in Global Storage is semi-structured, + * and there are multiple modules that write to it (and some that + * read from it). Functions in this file provide access to + * that semi-structured data. + */ + +#ifndef LOCALE_GLOBAL_H +#define LOCALE_GLOBAL_H + +#include "DllMacro.h" + +#include +#include +#include + +namespace Calamares +{ +class GlobalStorage; +} + +namespace CalamaresUtils +{ +namespace Locale +{ + +/** @brief Selector for methods that insert multiple values. + * + * When inserting, use @c Overwrite to remove all keys not in the collection + * of values being inserted; use @c Merge to preserve whatever is + * already in Global Storage but not mentioned in the collection. + */ +enum class InsertMode +{ + Overwrite, + Merge +}; + +/** @brief Insert the given @p values into the *localeConf* map in @p gs + * + * @param gs The Global Storage to write to + * @param values The collection of keys and values to write to @p gs + * @param mode Indicates whether the *localeConf* key is cleared first + * + * The keys in the collection @p values should be first-level keys + * in *localeConf*, e.g. "LANG" or "LC_TIME". No effort is made to + * enforce this. + */ +DLLEXPORT void insertGS( Calamares::GlobalStorage& gs, const QVariantMap& values, InsertMode mode = InsertMode::Merge ); +/** @brief Insert the given @p values into the *localeConf* map in @p gs + * + * Alternate way of providing the keys and values. + */ +DLLEXPORT void +insertGS( Calamares::GlobalStorage& gs, const QMap< QString, QString >& values, InsertMode mode = InsertMode::Merge ); +/** @brief Write a single @p key and @p value to the *localeConf* map + */ +DLLEXPORT void insertGS( Calamares::GlobalStorage& gs, const QString& key, const QString& value ); +/** @brief Remove a single @p key from the *localeConf* map + */ +DLLEXPORT void removeGS( Calamares::GlobalStorage& gs, const QString& key ); +/** @brief Remove the *localeConf* map from Global Storage + */ +DLLEXPORT void clearGS( Calamares::GlobalStorage& gs ); + +} // namespace Locale +} // namespace CalamaresUtils + +#endif diff --git a/src/libcalamares/locale/Label.cpp b/src/libcalamares/locale/Label.cpp deleted file mode 100644 index 02583df8b..000000000 --- a/src/libcalamares/locale/Label.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#include "Label.h" - -namespace CalamaresUtils -{ -namespace Locale -{ - -Label::Label( QObject* parent ) - : Label( QString(), LabelFormat::IfNeededWithCountry, parent ) -{ -} - -Label::Label( const QString& locale, LabelFormat format, QObject* parent ) - : QObject( parent ) - , m_locale( Label::getLocale( locale ) ) - , m_localeId( locale.isEmpty() ? m_locale.name() : locale ) -{ - QString longFormat = QObject::tr( "%1 (%2)" ); - - QString languageName = m_locale.nativeLanguageName(); - QString englishName = m_locale.languageToString( m_locale.language() ); - QString countryName; - - if ( languageName.isEmpty() ) - { - languageName = QString( "* %1 (%2)" ).arg( locale, englishName ); - } - - bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry ) - || ( locale.contains( '_' ) && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 ); - - if ( needsCountryName ) - { - countryName = m_locale.nativeCountryName(); - } - m_label = needsCountryName ? longFormat.arg( languageName, countryName ) : languageName; - m_englishLabel = needsCountryName ? longFormat.arg( englishName, QLocale::countryToString( m_locale.country() ) ) - : englishName; -} - -QLocale -Label::getLocale( const QString& localeName ) -{ - if ( localeName.isEmpty() ) - { - return QLocale(); - } - if ( localeName.contains( "@latin" ) ) - { - QLocale loc( localeName ); // Ignores @latin - return QLocale( loc.language(), QLocale::Script::LatinScript, loc.country() ); - } - else - { - return QLocale( localeName ); - } -} - -} // namespace Locale -} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/LabelModel.cpp b/src/libcalamares/locale/LabelModel.cpp deleted file mode 100644 index da4e1a9f7..000000000 --- a/src/libcalamares/locale/LabelModel.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2019-2020 Adriaan de Groot - * Copyright 2019, Camilo Higuita - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#include "LabelModel.h" - -#include "Lookup.h" - -#include "CalamaresVersion.h" // For the list of translations - -namespace CalamaresUtils -{ -namespace Locale -{ - -LabelModel::LabelModel( const QStringList& locales, QObject* parent ) - : QAbstractListModel( parent ) - , m_localeIds( locales ) -{ - Q_ASSERT( locales.count() > 0 ); - m_locales.reserve( locales.count() ); - - for ( const auto& l : locales ) - { - m_locales.push_back( new Label( l, Label::LabelFormat::IfNeededWithCountry, this ) ); - } -} - -LabelModel::~LabelModel() {} - -int -LabelModel::rowCount( const QModelIndex& ) const -{ - return m_locales.count(); -} - -QVariant -LabelModel::data( const QModelIndex& index, int role ) const -{ - if ( ( role != LabelRole ) && ( role != EnglishLabelRole ) ) - { - return QVariant(); - } - - if ( !index.isValid() ) - { - return QVariant(); - } - - const auto& locale = m_locales.at( index.row() ); - switch ( role ) - { - case LabelRole: - return locale->label(); - case EnglishLabelRole: - return locale->englishLabel(); - default: - return QVariant(); - } -} - -QHash< int, QByteArray > -LabelModel::roleNames() const -{ - return { { LabelRole, "label" }, { EnglishLabelRole, "englishLabel" } }; -} - -const Label& -LabelModel::locale( int row ) const -{ - if ( ( row < 0 ) || ( row >= m_locales.count() ) ) - { - for ( const auto& l : m_locales ) - if ( l->isEnglish() ) - { - return *l; - } - return *m_locales[ 0 ]; - } - return *m_locales[ row ]; -} - -int -LabelModel::find( std::function< bool( const Label& ) > predicate ) const -{ - for ( int row = 0; row < m_locales.count(); ++row ) - { - if ( predicate( *m_locales[ row ] ) ) - { - return row; - } - } - return -1; -} - -int -LabelModel::find( std::function< bool( const QLocale& ) > predicate ) const -{ - return find( [&]( const Label& l ) { return predicate( l.locale() ); } ); -} - -int -LabelModel::find( const QLocale& locale ) const -{ - return find( [&]( const Label& l ) { return locale == l.locale(); } ); -} - -int -LabelModel::find( const QString& countryCode ) const -{ - if ( countryCode.length() != 2 ) - { - return -1; - } - - auto c_l = countryData( countryCode ); - int r = find( [&]( const Label& l ) { return ( l.language() == c_l.second ) && ( l.country() == c_l.first ); } ); - if ( r >= 0 ) - { - return r; - } - return find( [&]( const Label& l ) { return l.language() == c_l.second; } ); -} - -LabelModel* -availableTranslations() -{ - static LabelModel* model = new LabelModel( QStringLiteral( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ) ); - return model; -} - -} // namespace Locale -} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/Lookup.cpp b/src/libcalamares/locale/Lookup.cpp index baa3ce5b1..3dba50898 100644 --- a/src/libcalamares/locale/Lookup.cpp +++ b/src/libcalamares/locale/Lookup.cpp @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Lookup.h" @@ -51,9 +43,9 @@ lookup( TwoChar c ) } const CountryData* p - = std::find_if( country_data_table, country_data_table + country_data_size, [c = c]( const CountryData& d ) { - return ( d.cc1 == c.cc1 ) && ( d.cc2 == c.cc2 ); - } ); + = std::find_if( country_data_table, + country_data_table + country_data_size, + [ c = c ]( const CountryData& d ) { return ( d.cc1 == c.cc1 ) && ( d.cc2 == c.cc2 ); } ); if ( p == country_data_table + country_data_size ) { return nullptr; @@ -94,7 +86,7 @@ languageForCountry( QLocale::Country country ) { const CountryData* p = std::find_if( country_data_table, country_data_table + country_data_size, - [c = country]( const CountryData& d ) { return d.c == c; } ); + [ c = country ]( const CountryData& d ) { return d.c == c; } ); if ( p == country_data_table + country_data_size ) { return QLocale::Language::AnyLanguage; diff --git a/src/libcalamares/locale/Lookup.h b/src/libcalamares/locale/Lookup.h index abcee0ed3..4095fd097 100644 --- a/src/libcalamares/locale/Lookup.h +++ b/src/libcalamares/locale/Lookup.h @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALE_LOOKUP_H diff --git a/src/libcalamares/locale/Tests.cpp b/src/libcalamares/locale/Tests.cpp index bf71fb0a2..f234c1596 100644 --- a/src/libcalamares/locale/Tests.cpp +++ b/src/libcalamares/locale/Tests.cpp @@ -1,33 +1,58 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include "Tests.h" - -#include "locale/LabelModel.h" +#include "locale/Global.h" #include "locale/TimeZone.h" #include "locale/TranslatableConfiguration.h" +#include "locale/TranslationsModel.h" #include "CalamaresVersion.h" +#include "GlobalStorage.h" #include "utils/Logger.h" +#include "utils/Retranslator.h" #include -QTEST_GUILESS_MAIN( LocaleTests ) +class LocaleTests : public QObject +{ + Q_OBJECT +public: + LocaleTests(); + ~LocaleTests() override; + +private Q_SLOTS: + void initTestCase(); + + void testLanguageModelCount(); + void testTranslatableLanguages(); + void testTranslatableConfig1(); + void testTranslatableConfig2(); + void testTranslatableConfigContext(); + void testLanguageScripts(); + + void testEsperanto(); + void testInterlingue(); + + // TimeZone testing + void testRegions(); + void testSimpleZones(); + void testComplexZones(); + void testTZLookup(); + void testTZIterator(); + void testLocationLookup_data(); + void testLocationLookup(); + void testLocationLookup2(); + + // Global Storage updates + void testGSUpdates(); +}; LocaleTests::LocaleTests() {} @@ -36,7 +61,10 @@ LocaleTests::~LocaleTests() {} void LocaleTests::initTestCase() { + Logger::setupLogLevel( Logger::LOGDEBUG ); + // Otherwise plain get() is dubious in the TranslatableConfiguration tests + QLocale::setDefault( QLocale( QStringLiteral( "en_US" ) ) ); QVERIFY( ( QLocale().name() == "C" ) || ( QLocale().name() == "en_US" ) ); } @@ -60,10 +88,8 @@ LocaleTests::testLanguageModelCount() } void -LocaleTests::testEsperanto() +LocaleTests::testLanguageScripts() { - Logger::setupLogLevel( Logger::LOGDEBUG ); - const auto* m = CalamaresUtils::Locale::availableTranslations(); QVERIFY( m ); @@ -84,13 +110,34 @@ LocaleTests::testEsperanto() QVERIFY( locale.language() == QLocale::Lithuanian ? locale.country() == QLocale::Lithuania : true ); QVERIFY( locale.language() != QLocale::C ); } +} + +void +LocaleTests::testEsperanto() +{ #if QT_VERSION < QT_VERSION_CHECK( 5, 12, 2 ) QCOMPARE( QLocale( "eo" ).language(), QLocale::C ); + QCOMPARE( QLocale( QLocale::Esperanto ).language(), QLocale::English ); #else QCOMPARE( QLocale( "eo" ).language(), QLocale::Esperanto ); + QCOMPARE( QLocale( QLocale::Esperanto ).language(), QLocale::Esperanto ); // Probably fails on 5.12, too #endif } +void +LocaleTests::testInterlingue() +{ + // ie / Interlingue is borked (is "ie" even the right name?) + QCOMPARE( QLocale( "ie" ).language(), QLocale::C ); + QCOMPARE( QLocale( QLocale::Interlingue ).language(), QLocale::English ); + + // "ia" exists (post-war variant of Interlingue) + QCOMPARE( QLocale( "ia" ).language(), QLocale::Interlingua ); + // "bork" does not exist + QCOMPARE( QLocale( "bork" ).language(), QLocale::C ); +} + + static const QStringList& someLanguages() { @@ -201,54 +248,306 @@ LocaleTests::testTranslatableConfig2() QCOMPARE( ts3.count(), 1 ); // The empty string } +void +LocaleTests::testTranslatableConfigContext() +{ + using TS = CalamaresUtils::Locale::TranslatedString; + + const QString original( "Quit" ); + TS quitUntranslated( original ); + TS quitTranslated( original, metaObject()->className() ); + + QCOMPARE( quitUntranslated.get(), original ); + QCOMPARE( quitTranslated.get(), original ); + + // Load translation data from QRC + QVERIFY( QFile::exists( ":/lang/localetest_nl.qm" ) ); + QTranslator t; + QVERIFY( t.load( QString( ":/lang/localetest_nl" ) ) ); + QCoreApplication::installTranslator( &t ); + + // Translation doesn't affect the one without context + QCOMPARE( quitUntranslated.get(), original ); + // But the translation **does** affect this class' context + QCOMPARE( quitTranslated.get(), QStringLiteral( "Ophouden" ) ); + QCOMPARE( tr( "Quit" ), QStringLiteral( "Ophouden" ) ); +} + + +void +LocaleTests::testRegions() +{ + using namespace CalamaresUtils::Locale; + RegionsModel regions; + + QVERIFY( regions.rowCount( QModelIndex() ) > 3 ); // Africa, America, Asia + + QStringList names; + for ( int i = 0; i < regions.rowCount( QModelIndex() ); ++i ) + { + QVariant name = regions.data( regions.index( i ), RegionsModel::NameRole ); + QVERIFY( name.isValid() ); + QVERIFY( !name.toString().isEmpty() ); + names.append( name.toString() ); + } + + QVERIFY( names.contains( "America" ) ); + QVERIFY( !names.contains( "UTC" ) ); +} + + +static void +displayedNames( QAbstractItemModel& model, QStringList& names ) +{ + names.clear(); + for ( int i = 0; i < model.rowCount( QModelIndex() ); ++i ) + { + QVariant name = model.data( model.index( i, 0 ), Qt::DisplayRole ); + QVERIFY( name.isValid() ); + QVERIFY( !name.toString().isEmpty() ); + names.append( name.toString() ); + } +} + void LocaleTests::testSimpleZones() { using namespace CalamaresUtils::Locale; + ZonesModel zones; + QVERIFY( zones.rowCount( QModelIndex() ) > 24 ); + + QStringList names; + displayedNames( zones, names ); + QVERIFY( names.contains( "Amsterdam" ) ); + if ( !names.contains( "New York" ) ) { - TZRegion r; - QVERIFY( r.tr().isEmpty() ); - } - { - TZZone n; - QVERIFY( n.tr().isEmpty() ); - } - { - TZZone r0( "xAmsterdam" ); - QCOMPARE( r0.tr(), QStringLiteral( "xAmsterdam" ) ); - TZZone r1( r0 ); - QCOMPARE( r0.tr(), QStringLiteral( "xAmsterdam" ) ); - QCOMPARE( r1.tr(), QStringLiteral( "xAmsterdam" ) ); - TZZone r2( std::move( r0 ) ); - QCOMPARE( r2.tr(), QStringLiteral( "xAmsterdam" ) ); - QCOMPARE( r0.tr(), QString() ); - } - { - TZZone r0( nullptr ); - QVERIFY( r0.tr().isEmpty() ); - TZZone r1( r0 ); - QVERIFY( r1.tr().isEmpty() ); - TZZone r2( std::move( r0 ) ); - QVERIFY( r2.tr().isEmpty() ); + for ( const auto& s : names ) + { + if ( s.startsWith( 'N' ) ) + { + cDebug() << s; + } + } } + QVERIFY( names.contains( "New York" ) ); + QVERIFY( !names.contains( "America" ) ); + QVERIFY( !names.contains( "New_York" ) ); } void LocaleTests::testComplexZones() { using namespace CalamaresUtils::Locale; + ZonesModel zones; + RegionalZonesModel europe( &zones ); + QStringList names; + displayedNames( zones, names ); + QVERIFY( names.contains( "New York" ) ); + QVERIFY( names.contains( "Prague" ) ); + QVERIFY( names.contains( "Abidjan" ) ); + + // No region set + displayedNames( europe, names ); + QVERIFY( names.contains( "New York" ) ); + QVERIFY( names.contains( "Prague" ) ); + QVERIFY( names.contains( "Abidjan" ) ); + + // Now filter + europe.setRegion( "Europe" ); + displayedNames( europe, names ); + QVERIFY( !names.contains( "New York" ) ); + QVERIFY( names.contains( "Prague" ) ); + QVERIFY( !names.contains( "Abidjan" ) ); + + europe.setRegion( "America" ); + displayedNames( europe, names ); + QVERIFY( names.contains( "New York" ) ); + QVERIFY( !names.contains( "Prague" ) ); + QVERIFY( !names.contains( "Abidjan" ) ); + + europe.setRegion( "Africa" ); + displayedNames( europe, names ); + QVERIFY( !names.contains( "New York" ) ); + QVERIFY( !names.contains( "Prague" ) ); + QVERIFY( names.contains( "Abidjan" ) ); +} + +void +LocaleTests::testTZLookup() +{ + using namespace CalamaresUtils::Locale; + ZonesModel zones; + + QVERIFY( zones.find( "America", "New_York" ) ); + QCOMPARE( zones.find( "America", "New_York" )->zone(), QStringLiteral( "New_York" ) ); + QCOMPARE( zones.find( "America", "New_York" )->tr(), QStringLiteral( "New York" ) ); + + QVERIFY( !zones.find( "Europe", "New_York" ) ); + QVERIFY( !zones.find( "America", "New York" ) ); +} + +void +LocaleTests::testTZIterator() +{ + using namespace CalamaresUtils::Locale; + const ZonesModel zones; + + QVERIFY( zones.find( "Europe", "Rome" ) ); + + int count = 0; + bool seenRome = false; + bool seenGnome = false; + for ( auto it = zones.begin(); it; ++it ) { - TZZone r0( "America/New_York" ); - TZZone r1( "America/New York" ); - - QCOMPARE( r0.tr(), r1.tr() ); - QCOMPARE( r0.tr(), QStringLiteral( "America/New York" ) ); + QVERIFY( *it ); + QVERIFY( !( *it )->zone().isEmpty() ); + seenRome |= ( *it )->zone() == QStringLiteral( "Rome" ); + seenGnome |= ( *it )->zone() == QStringLiteral( "Gnome" ); + count++; } + + QVERIFY( seenRome ); + QVERIFY( !seenGnome ); + QCOMPARE( count, zones.rowCount( QModelIndex() ) ); + + QCOMPARE( zones.data( zones.index( 0 ), ZonesModel::RegionRole ).toString(), QStringLiteral( "Africa" ) ); + QCOMPARE( ( *zones.begin() )->zone(), QStringLiteral( "Abidjan" ) ); +} + +void +LocaleTests::testLocationLookup_data() +{ + QTest::addColumn< double >( "latitude" ); + QTest::addColumn< double >( "longitude" ); + QTest::addColumn< QString >( "name" ); + + QTest::newRow( "London" ) << 50.0 << 0.0 << QString( "London" ); + QTest::newRow( "Tarawa E" ) << 0.0 << 179.0 << QString( "Tarawa" ); + QTest::newRow( "Tarawa W" ) << 0.0 << -179.0 << QString( "Tarawa" ); + + QTest::newRow( "Johannesburg" ) << -26.0 << 28.0 << QString( "Johannesburg" ); // South Africa + QTest::newRow( "Maseru" ) << -29.0 << 27.0 << QString( "Maseru" ); // Lesotho + QTest::newRow( "Windhoek" ) << -22.0 << 17.0 << QString( "Windhoek" ); // Namibia + QTest::newRow( "Port Elisabeth" ) << -33.0 << 25.0 << QString( "Johannesburg" ); // South Africa + QTest::newRow( "Cape Town" ) << -33.0 << 18.0 << QString( "Johannesburg" ); // South Africa +} + +void +LocaleTests::testLocationLookup() +{ + const CalamaresUtils::Locale::ZonesModel zones; + + QFETCH( double, latitude ); + QFETCH( double, longitude ); + QFETCH( QString, name ); + + const auto* zone = zones.find( latitude, longitude ); + QVERIFY( zone ); + QCOMPARE( zone->zone(), name ); +} + +void +LocaleTests::testLocationLookup2() +{ + // Official + // ZA -2615+02800 Africa/Johannesburg + // Spot patch + // "ZA -3230+02259 Africa/Johannesburg\n"; + + const CalamaresUtils::Locale::ZonesModel zones; + const auto* zone = zones.find( -26.15, 28.00 ); + QCOMPARE( zone->zone(), QString( "Johannesburg" ) ); + // The TZ data sources use minutes-and-seconds notation, + // so "2615" is 26 degrees, 15 minutes, and 15 minutes is + // one-quarter of a degree. + QCOMPARE( zone->latitude(), -26.25 ); + QCOMPARE( zone->longitude(), 28.00 ); + + // Elsewhere in South Africa + const auto* altzone = zones.find( -32.0, 22.0 ); + QCOMPARE( altzone, zone ); // same pointer + QCOMPARE( altzone->zone(), QString( "Johannesburg" ) ); + QCOMPARE( altzone->latitude(), -26.25 ); + QCOMPARE( altzone->longitude(), 28.00 ); + + altzone = zones.find( -29.0, 27.0 ); + QCOMPARE( altzone->zone(), QString( "Maseru" ) ); + // -2928, that's -29 and 28/60 of a degree, is almost half, but we don't want + // to fall foul of variations in double-precision + QCOMPARE( trunc( altzone->latitude() * 1000.0 ), -29466 ); +} + +void +LocaleTests::testGSUpdates() +{ + Calamares::GlobalStorage gs; + + const QString gsKey( "localeConf" ); + + QCOMPARE( gs.value( gsKey ), QVariant() ); + + // Insert one { - TZZone r( "zxc,;*_vm" ); - QVERIFY( !r.tr().isEmpty() ); - QCOMPARE( r.tr(), QStringLiteral( "zxc,;* vm" ) ); // Only _ is special + CalamaresUtils::Locale::insertGS( gs, "LANG", "en_US" ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 1 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "en_US" ) ); + } + + // Overwrite one + { + CalamaresUtils::Locale::insertGS( gs, "LANG", "nl_BE" ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 1 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "nl_BE" ) ); + } + + // Insert a second value + { + CalamaresUtils::Locale::insertGS( gs, "LC_TIME", "UTC" ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 2 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "nl_BE" ) ); + QCOMPARE( map.value( "LC_TIME" ).toString(), QString( "UTC" ) ); + } + + // Overwrite parts + { + QMap< QString, QString > kv; + kv.insert( "LANG", "en_SU" ); + kv.insert( "LC_CURRENCY", "rbl" ); + + // Overwrite one, add one + CalamaresUtils::Locale::insertGS( gs, kv, CalamaresUtils::Locale::InsertMode::Merge ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 3 ); + QCOMPARE( map.value( "LANG" ).toString(), QString( "en_SU" ) ); + QCOMPARE( map.value( "LC_TIME" ).toString(), QString( "UTC" ) ); // unchanged + QCOMPARE( map.value( "LC_CURRENCY" ).toString(), QString( "rbl" ) ); + } + + // Overwrite with clear + { + QMap< QString, QString > kv; + kv.insert( "LANG", "en_US" ); + kv.insert( "LC_CURRENCY", "peso" ); + + // Overwrite one, add one + CalamaresUtils::Locale::insertGS( gs, kv, CalamaresUtils::Locale::InsertMode::Overwrite ); + auto map = gs.value( gsKey ).toMap(); + QCOMPARE( map.count(), 2 ); // the rest were cleared + QCOMPARE( map.value( "LANG" ).toString(), QString( "en_US" ) ); + QVERIFY( !map.contains( "LC_TIME" ) ); + QCOMPARE( map.value( "LC_TIME" ).toString(), QString() ); // removed + QCOMPARE( map.value( "LC_CURRENCY" ).toString(), QString( "peso" ) ); } } + + +QTEST_GUILESS_MAIN( LocaleTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/libcalamares/locale/Tests.h b/src/libcalamares/locale/Tests.h deleted file mode 100644 index 96ee48b0b..000000000 --- a/src/libcalamares/locale/Tests.h +++ /dev/null @@ -1,45 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2019, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#ifndef LIBCALAMARES_LOCALE_TESTS_H -#define LIBCALAMARES_LOCALE_TESTS_H - -#include - -class LocaleTests : public QObject -{ - Q_OBJECT -public: - LocaleTests(); - ~LocaleTests() override; - -private Q_SLOTS: - void initTestCase(); - - void testLanguageModelCount(); - void testEsperanto(); - void testTranslatableLanguages(); - void testTranslatableConfig1(); - void testTranslatableConfig2(); - - // TimeZone testing - void testSimpleZones(); - void testComplexZones(); -}; - -#endif diff --git a/src/libcalamares/locale/TimeZone.cpp b/src/libcalamares/locale/TimeZone.cpp index e25cf2144..c0804ebd6 100644 --- a/src/libcalamares/locale/TimeZone.cpp +++ b/src/libcalamares/locale/TimeZone.cpp @@ -1,33 +1,37 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TimeZone.h" +#include "locale/TranslatableString.h" #include "utils/Logger.h" +#include "utils/String.h" #include -#include -#include - -#include +#include static const char TZ_DATA_FILE[] = "/usr/share/zoneinfo/zone.tab"; +namespace CalamaresUtils +{ +namespace Locale +{ +class RegionData; +using RegionVector = QVector< RegionData* >; +using ZoneVector = QVector< TimeZoneData* >; + +/** @brief Turns a string longitude or latitude notation into a double + * + * This handles strings like "+4230+00131" from zone.tab, + * which is degrees-and-minutes notation, and + means north or east. + */ static double getRightGeoLocation( QString str ) { @@ -57,114 +61,60 @@ getRightGeoLocation( QString str ) } -namespace CalamaresUtils +TimeZoneData::TimeZoneData( const QString& region, + const QString& zone, + const QString& country, + double latitude, + double longitude ) + : TranslatableString( zone ) + , m_region( region ) + , m_country( country ) + , m_latitude( latitude ) + , m_longitude( longitude ) { -namespace Locale -{ - - -CStringPair::CStringPair( CStringPair&& t ) - : m_human( nullptr ) - , m_key() -{ - // My pointers are initialized to nullptr - std::swap( m_human, t.m_human ); - std::swap( m_key, t.m_key ); + setObjectName( region + '/' + zone ); } -CStringPair::CStringPair( const CStringPair& t ) - : m_human( t.m_human ? strdup( t.m_human ) : nullptr ) - , m_key( t.m_key ) -{ -} - -/** @brief Massage an identifier into a human-readable form - * - * Makes a copy of @p s, caller must free() it. - */ -static char* -munge( const char* s ) -{ - char* t = strdup( s ); - if ( !t ) - { - return nullptr; - } - - // replace("_"," ") in the Python script - char* p = t; - while ( *p ) - { - if ( ( *p ) == '_' ) - { - *p = ' '; - } - ++p; - } - - return t; -} - -CStringPair::CStringPair( const char* s1 ) - : m_human( s1 ? munge( s1 ) : nullptr ) - , m_key( s1 ? QString( s1 ) : QString() ) -{ -} - - -CStringPair::~CStringPair() -{ - free( m_human ); -} - - QString -TZRegion::tr() const +TimeZoneData::tr() const +{ + // NOTE: context name must match what's used in zone-extractor.py + return QObject::tr( m_human, "tz_names" ); +} + + +class RegionData : public TranslatableString +{ +public: + using TranslatableString::TranslatableString; + QString tr() const override; +}; + +QString +RegionData::tr() const { // NOTE: context name must match what's used in zone-extractor.py return QObject::tr( m_human, "tz_regions" ); } -TZRegion::~TZRegion() +static void +loadTZData( RegionVector& regions, ZoneVector& zones, QTextStream& in ) { - qDeleteAll( m_zones ); -} - -const CStringPairList& -TZRegion::fromZoneTab() -{ - static CStringPairList zoneTab = TZRegion::fromFile( TZ_DATA_FILE ); - return zoneTab; -} - -CStringPairList -TZRegion::fromFile( const char* fileName ) -{ - CStringPairList model; - - QFile file( fileName ); - if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) - { - return model; - } - - TZRegion* thisRegion = nullptr; - QTextStream in( &file ); while ( !in.atEnd() ) { - QString line = in.readLine().trimmed().split( '#', QString::KeepEmptyParts ).first().trimmed(); + QString line = in.readLine().trimmed().split( '#', SplitKeepEmptyParts ).first().trimmed(); if ( line.isEmpty() ) { continue; } - QStringList list = line.split( QRegExp( "[\t ]" ), QString::SkipEmptyParts ); + QStringList list = line.split( QRegExp( "[\t ]" ), SplitSkipEmptyParts ); if ( list.size() < 3 ) { continue; } - QStringList timezoneParts = list.at( 2 ).split( '/', QString::SkipEmptyParts ); + QStringList timezoneParts = list.at( 2 ).split( '/', SplitSkipEmptyParts ); if ( timezoneParts.size() < 2 ) { continue; @@ -176,18 +126,6 @@ TZRegion::fromFile( const char* fileName ) continue; } - auto keyMatch = [®ion]( const CStringPair* r ) { return r->key() == region; }; - auto it = std::find_if( model.begin(), model.end(), keyMatch ); - if ( it != model.end() ) - { - thisRegion = dynamic_cast< TZRegion* >( *it ); - } - else - { - thisRegion = new TZRegion( region.toUtf8().data() ); - model.append( thisRegion ); - } - QString countryCode = list.at( 0 ).trimmed(); if ( countryCode.size() != 2 ) { @@ -195,114 +133,373 @@ TZRegion::fromFile( const char* fileName ) } timezoneParts.removeFirst(); - thisRegion->m_zones.append( - new TZZone( region, timezoneParts.join( '/' ).toUtf8().constData(), countryCode, list.at( 1 ) ) ); - } - - auto sorter = []( const CStringPair* l, const CStringPair* r ) { return *l < *r; }; - std::sort( model.begin(), model.end(), sorter ); - for ( auto& it : model ) - { - TZRegion* r = dynamic_cast< TZRegion* >( it ); - if ( r ) + QString zone = timezoneParts.join( '/' ); + if ( zone.length() < 2 ) { - std::sort( r->m_zones.begin(), r->m_zones.end(), sorter ); + continue; + } + + QString position = list.at( 1 ); + int cooSplitPos = position.indexOf( QRegExp( "[-+]" ), 1 ); + double latitude; + double longitude; + if ( cooSplitPos > 0 ) + { + latitude = getRightGeoLocation( position.mid( 0, cooSplitPos ) ); + longitude = getRightGeoLocation( position.mid( cooSplitPos ) ); + } + else + { + continue; + } + + // Now we have region, zone, country, lat and longitude + const RegionData* existingRegion = nullptr; + for ( const auto* p : regions ) + { + if ( p->key() == region ) + { + existingRegion = p; + break; + } + } + if ( !existingRegion ) + { + regions.append( new RegionData( region ) ); + } + zones.append( new TimeZoneData( region, zone, countryCode, latitude, longitude ) ); + } +} + +/** @brief Extra, fake, timezones + * + * The timezone locations in zone.tab are not always very useful, + * given Calamares's standard "nearest zone" algorithm: for instance, + * in most locations physically in the country of South Africa, + * Maseru (the capital of Lesotho, and location for timezone Africa/Maseru) + * is closer than Johannesburg (the location for timezone Africa/Johannesburg). + * + * The algorithm picks the wrong place. This is for instance annoying + * when clicking on Cape Town, you get Maseru, and to get Johannesburg + * you need to click somewhere very carefully north of Maserru. + * + * These alternate zones are used to introduce "extra locations" + * into the timezone database, in order to influence the closest-location + * algorithm. Lines are formatted just like in zone.tab: remember the \n + */ +static const char altZones[] = + /* This extra zone is north-east of Karoo National park, + * and means that Western Cape province and a good chunk of + * Northern- and Eastern- Cape provinces get pulled in to Johannesburg. + * Bloemfontein is still closer to Maseru than either correct zone, + * but this is a definite improvement. + */ + "ZA -3230+02259 Africa/Johannesburg\n"; + +class Private : public QObject +{ + Q_OBJECT +public: + RegionVector m_regions; + ZoneVector m_zones; ///< The official timezones and locations + ZoneVector m_altZones; ///< Extra locations for zones + + Private() + { + m_regions.reserve( 12 ); // reasonable guess + m_zones.reserve( 452 ); // wc -l /usr/share/zoneinfo/zone.tab + + // Load the official timezones + { + QFile file( TZ_DATA_FILE ); + if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + QTextStream in( &file ); + loadTZData( m_regions, m_zones, in ); + } + } + // Load the alternate zones (see documentation at altZones) + { + QTextStream in( altZones ); + loadTZData( m_regions, m_altZones, in ); + } + + std::sort( m_regions.begin(), + m_regions.end(), + []( const RegionData* lhs, const RegionData* rhs ) { return lhs->key() < rhs->key(); } ); + std::sort( m_zones.begin(), + m_zones.end(), + []( const TimeZoneData* lhs, const TimeZoneData* rhs ) + { + if ( lhs->region() == rhs->region() ) + { + return lhs->zone() < rhs->zone(); + } + return lhs->region() < rhs->region(); + } ); + + for ( auto* z : m_zones ) + { + z->setParent( this ); } } +}; - return model; -} - -TZZone::TZZone( const QString& region, const char* zoneName, const QString& country, QString position ) - : CStringPair( zoneName ) - , m_region( region ) - , m_country( country ) +static Private* +privateInstance() { - int cooSplitPos = position.indexOf( QRegExp( "[-+]" ), 1 ); - if ( cooSplitPos > 0 ) - { - m_latitude = getRightGeoLocation( position.mid( 0, cooSplitPos ) ); - m_longitude = getRightGeoLocation( position.mid( cooSplitPos ) ); - } + static Private* s_p = new Private; + return s_p; } -QString -TZZone::tr() const -{ - // NOTE: context name must match what's used in zone-extractor.py - return QObject::tr( m_human, "tz_names" ); -} - - -CStringListModel::CStringListModel( CStringPairList l ) - : m_list( l ) +RegionsModel::RegionsModel( QObject* parent ) + : QAbstractListModel( parent ) + , m_private( privateInstance() ) { } -void -CStringListModel::setList( CalamaresUtils::Locale::CStringPairList l ) -{ - beginResetModel(); - m_list = l; - endResetModel(); -} +RegionsModel::~RegionsModel() {} int -CStringListModel::rowCount( const QModelIndex& ) const +RegionsModel::rowCount( const QModelIndex& ) const { - return m_list.count(); + return m_private->m_regions.count(); } QVariant -CStringListModel::data( const QModelIndex& index, int role ) const +RegionsModel::data( const QModelIndex& index, int role ) const { - if ( ( role != Qt::DisplayRole ) && ( role != Qt::UserRole ) ) + if ( !index.isValid() || index.row() < 0 || index.row() >= m_private->m_regions.count() ) { return QVariant(); } - if ( !index.isValid() ) + const auto& region = m_private->m_regions[ index.row() ]; + if ( role == NameRole ) { - return QVariant(); + return region->tr(); } - - const auto* item = m_list.at( index.row() ); - return item ? ( role == Qt::DisplayRole ? item->tr() : item->key() ) : QVariant(); -} - -void -CStringListModel::setCurrentIndex( int index ) -{ - if ( ( index < 0 ) || ( index >= m_list.count() ) ) + if ( role == KeyRole ) { - return; + return region->key(); } - - m_currentIndex = index; - emit currentIndexChanged(); -} - -int -CStringListModel::currentIndex() const -{ - return m_currentIndex; + return QVariant(); } QHash< int, QByteArray > -CStringListModel::roleNames() const +RegionsModel::roleNames() const { - return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; + return { { NameRole, "name" }, { KeyRole, "key" } }; } -const CStringPair* -CStringListModel::item( int index ) const +QString +RegionsModel::tr( const QString& region ) const { - if ( ( index < 0 ) || ( index >= m_list.count() ) ) + for ( const auto* p : m_private->m_regions ) { - return nullptr; + if ( p->key() == region ) + { + return p->tr(); + } } - return m_list[ index ]; + return region; } +ZonesModel::ZonesModel( QObject* parent ) + : QAbstractListModel( parent ) + , m_private( privateInstance() ) +{ +} + +ZonesModel::~ZonesModel() {} + +int +ZonesModel::rowCount( const QModelIndex& ) const +{ + return m_private->m_zones.count(); +} + +QVariant +ZonesModel::data( const QModelIndex& index, int role ) const +{ + if ( !index.isValid() || index.row() < 0 || index.row() >= m_private->m_zones.count() ) + { + return QVariant(); + } + + const auto* zone = m_private->m_zones[ index.row() ]; + switch ( role ) + { + case NameRole: + return zone->tr(); + case KeyRole: + return zone->key(); + case RegionRole: + return zone->region(); + default: + return QVariant(); + } +} + +QHash< int, QByteArray > +ZonesModel::roleNames() const +{ + return { { NameRole, "name" }, { KeyRole, "key" } }; +} + +const TimeZoneData* +ZonesModel::find( const QString& region, const QString& zone ) const +{ + for ( const auto* p : m_private->m_zones ) + { + if ( p->region() == region && p->zone() == zone ) + { + return p; + } + } + return nullptr; +} + +STATICTEST const TimeZoneData* +find( double startingDistance, + const ZoneVector& zones, + const std::function< double( const TimeZoneData* ) >& distanceFunc ) +{ + double smallestDistance = startingDistance; + const TimeZoneData* closest = nullptr; + + for ( const auto* zone : zones ) + { + double thisDistance = distanceFunc( zone ); + if ( thisDistance < smallestDistance ) + { + closest = zone; + smallestDistance = thisDistance; + } + } + return closest; +} + +const TimeZoneData* +ZonesModel::find( const std::function< double( const TimeZoneData* ) >& distanceFunc ) const +{ + const auto* officialZone = CalamaresUtils::Locale::find( 1000000.0, m_private->m_zones, distanceFunc ); + const auto* altZone + = CalamaresUtils::Locale::find( distanceFunc( officialZone ), m_private->m_altZones, distanceFunc ); + + // If nothing was closer than the official zone already was, altZone is + // nullptr; but if there is a spot-patch, then we need to re-find + // the zone by name, since we want to always return pointers into + // m_zones, not into the alternative spots. + return altZone ? find( altZone->region(), altZone->zone() ) : officialZone; +} + +const TimeZoneData* +ZonesModel::find( double latitude, double longitude ) const +{ + /* This is a somewhat derpy way of finding "closest", + * in that it considers one degree of separation + * either N/S or E/W equal to any other; this obviously + * falls apart at the poles. + */ + auto distance = [ & ]( const TimeZoneData* zone ) -> double + { + // Latitude doesn't wrap around: there is nothing north of 90 + double latitudeDifference = abs( zone->latitude() - latitude ); + + // Longitude **does** wrap around, so consider the case of -178 and 178 + // which differ by 4 degrees. + double westerly = qMin( zone->longitude(), longitude ); + double easterly = qMax( zone->longitude(), longitude ); + double longitudeDifference = 0.0; + if ( westerly < 0.0 && !( easterly < 0.0 ) ) + { + // Only if they're different signs can we have wrap-around. + longitudeDifference = qMin( abs( westerly - easterly ), abs( 360.0 + westerly - easterly ) ); + } + else + { + longitudeDifference = abs( westerly - easterly ); + } + + return latitudeDifference + longitudeDifference; + }; + + return find( distance ); +} + +QObject* +ZonesModel::lookup( double latitude, double longitude ) const +{ + const auto* p = find( latitude, longitude ); + if ( !p ) + { + p = find( "America", "New_York" ); + } + if ( !p ) + { + cWarning() << "No zone (not even New York) found, expect crashes."; + } + return const_cast< QObject* >( reinterpret_cast< const QObject* >( p ) ); +} + + +ZonesModel::Iterator::operator bool() const +{ + return 0 <= m_index && m_index < m_p->m_zones.count(); +} + +const TimeZoneData* +ZonesModel::Iterator::operator*() const +{ + if ( *this ) + { + return m_p->m_zones[ m_index ]; + } + return nullptr; +} + +RegionalZonesModel::RegionalZonesModel( CalamaresUtils::Locale::ZonesModel* source, QObject* parent ) + : QSortFilterProxyModel( parent ) + , m_private( privateInstance() ) +{ + setSourceModel( source ); +} + +RegionalZonesModel::~RegionalZonesModel() {} + +void +RegionalZonesModel::setRegion( const QString& r ) +{ + if ( r != m_region ) + { + m_region = r; + invalidateFilter(); + emit regionChanged( r ); + } +} + +bool +RegionalZonesModel::filterAcceptsRow( int sourceRow, const QModelIndex& ) const +{ + if ( m_region.isEmpty() ) + { + return true; + } + + if ( sourceRow < 0 || sourceRow >= m_private->m_zones.count() ) + { + return false; + } + + const auto& zone = m_private->m_zones[ sourceRow ]; + return ( zone->m_region == m_region ); +} + + } // namespace Locale } // namespace CalamaresUtils + +#include "utils/moc-warnings.h" + +#include "TimeZone.moc" diff --git a/src/libcalamares/locale/TimeZone.h b/src/libcalamares/locale/TimeZone.h index 5f1e19801..e02612f5e 100644 --- a/src/libcalamares/locale/TimeZone.h +++ b/src/libcalamares/locale/TimeZone.h @@ -1,193 +1,235 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ +/** @file Timezone data and models to go with it + * + * The TimeZoneData class holds information from zone.tab, about + * TZ names and locations (latitude and longitude) for geographic + * lookups. + * + * The RegionModel lists the regions of the world (about 12) and + * ZonesModel lists all the timezones; the RegionalZonesModel provides + * a way to restrict the view of timezones to those of a specific region. + * + */ #ifndef LOCALE_TIMEZONE_H #define LOCALE_TIMEZONE_H #include "DllMacro.h" -#include "utils/Logger.h" +#include "locale/TranslatableString.h" #include #include -#include - -#include +#include +#include namespace CalamaresUtils { namespace Locale { +class Private; +class RegionalZonesModel; +class ZonesModel; -/** @brief A pair of strings, one human-readable, one a key - * - * Given an identifier-like string (e.g. "New_York"), makes - * a human-readable version of that and keeps a copy of the - * identifier itself. - * - * This explicitly uses const char* instead of just being - * QPair because there is API that needs - * C-style strings. - */ -class CStringPair : public QObject +class TimeZoneData : public QObject, TranslatableString { + friend class RegionalZonesModel; + friend class ZonesModel; + Q_OBJECT + + Q_PROPERTY( QString region READ region CONSTANT ) + Q_PROPERTY( QString zone READ zone CONSTANT ) + Q_PROPERTY( QString name READ tr CONSTANT ) + Q_PROPERTY( QString countryCode READ country CONSTANT ) + public: - /// @brief An empty pair - CStringPair() {} - /// @brief Given an identifier, create the pair - explicit CStringPair( const char* s1 ); - CStringPair( CStringPair&& t ); - CStringPair( const CStringPair& ); - virtual ~CStringPair(); + TimeZoneData( const QString& region, + const QString& zone, + const QString& country, + double latitude, + double longitude ); + TimeZoneData( const TimeZoneData& ) = delete; + TimeZoneData( TimeZoneData&& ) = delete; - /// @brief Give the localized human-readable form - virtual QString tr() const = 0; - QString key() const { return m_key; } - - bool operator<( const CStringPair& other ) const { return m_key < other.m_key; } - -protected: - char* m_human = nullptr; - QString m_key; -}; - -class CStringPairList : public QList< CStringPair* > -{ -public: - template < typename T > - T* find( const QString& key ) const - { - for ( auto* p : *this ) - { - if ( p->key() == key ) - { - return dynamic_cast< T* >( p ); - } - } - return nullptr; - } -}; - -/// @brief A pair of strings for timezone regions (e.g. "America") -class TZRegion : public CStringPair -{ - Q_OBJECT -public: - using CStringPair::CStringPair; - virtual ~TZRegion() override; - TZRegion( const TZRegion& ) = delete; QString tr() const override; - QString region() const { return key(); } - - /** @brief Create list from a zone.tab-like file - * - * Returns a list of all the regions; each region has a list - * of zones within that region. Dyamically, the items in the - * returned list are TZRegions; their zones dynamically are - * TZZones even though all those lists have type CStringPairList. - * - * The list owns the regions, and the regions own their own list of zones. - * When getting rid of the list, remember to qDeleteAll() on it. - */ - static CStringPairList fromFile( const char* fileName ); - /// @brief Calls fromFile with the standard zone.tab name - static const CStringPairList& fromZoneTab(); - - const CStringPairList& zones() const { return m_zones; } - -private: - CStringPairList m_zones; -}; - -/// @brief A pair of strings for specific timezone names (e.g. "New_York") -class TZZone : public CStringPair -{ - Q_OBJECT -public: - using CStringPair::CStringPair; - QString tr() const override; - - TZZone( const QString& region, const char* zoneName, const QString& country, QString position ); - QString region() const { return m_region; } QString zone() const { return key(); } + QString country() const { return m_country; } double latitude() const { return m_latitude; } double longitude() const { return m_longitude; } -protected: +private: QString m_region; QString m_country; - double m_latitude = 0.0, m_longitude = 0.0; + double m_latitude; + double m_longitude; }; -class CStringListModel : public QAbstractListModel + +/** @brief The list of timezone regions + * + * The regions are a short list of global areas (Africa, America, India ..) + * which contain zones. + */ +class DLLEXPORT RegionsModel : public QAbstractListModel { Q_OBJECT - Q_PROPERTY( int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged ) public: - /// @brief Create empty model - CStringListModel() {} - /// @brief Create model from list (non-owning) - CStringListModel( CStringPairList ); + enum Roles + { + NameRole = Qt::DisplayRole, + KeyRole = Qt::UserRole // So that currentData() will get the key + }; + + RegionsModel( QObject* parent = nullptr ); + ~RegionsModel() override; int rowCount( const QModelIndex& parent ) const override; - QVariant data( const QModelIndex& index, int role ) const override; - const CStringPair* item( int index ) const; QHash< int, QByteArray > roleNames() const override; - void setCurrentIndex( int index ); - int currentIndex() const; - - void setList( CStringPairList ); - - inline int indexOf( const QString& key ) - { - const auto it = std::find_if( - m_list.constBegin(), m_list.constEnd(), [&]( const CalamaresUtils::Locale::CStringPair* item ) -> bool { - return item->key() == key; - } ); - - if ( it != m_list.constEnd() ) - { - // distance() is usually a long long - return int( std::distance( m_list.constBegin(), it ) ); - } - else - { - return -1; - } - } - +public Q_SLOTS: + /** @brief Provides a human-readable version of the region + * + * Returns @p region unchanged if there is no such region + * or no translation for the region's name. + */ + QString tr( const QString& region ) const; private: - CStringPairList m_list; - int m_currentIndex = -1; + Private* m_private; +}; + +class DLLEXPORT ZonesModel : public QAbstractListModel +{ + Q_OBJECT + +public: + enum Roles + { + NameRole = Qt::DisplayRole, + KeyRole = Qt::UserRole, // So that currentData() will get the key + RegionRole = Qt::UserRole + 1 + }; + + ZonesModel( QObject* parent = nullptr ); + ~ZonesModel() override; + + int rowCount( const QModelIndex& parent ) const override; + QVariant data( const QModelIndex& index, int role ) const override; + + QHash< int, QByteArray > roleNames() const override; + + /** @brief Iterator for the underlying list of zones + * + * Iterates over all the zones in the model. Operator * may return + * a @c nullptr when the iterator is not valid. Typical usage: + * + * ``` + * for( auto it = model.begin(); it; ++it ) + * { + * const auto* zonedata = *it; + * ... + * } + */ + class Iterator + { + friend class ZonesModel; + Iterator( const Private* m ) + : m_index( 0 ) + , m_p( m ) + { + } + + public: + operator bool() const; + void operator++() { ++m_index; } + const TimeZoneData* operator*() const; + int index() const { return m_index; } + + private: + int m_index; + const Private* m_p; + }; + + Iterator begin() const { return Iterator( m_private ); } + + /** @brief Look up TZ data based on an arbitrary distance function + * + * This is a generic method that can define distance in whatever + * coordinate system is wanted; returns the zone with the smallest + * distance. The @p distanceFunc must return "the distance" for + * each zone. It would be polite to return something non-negative. + * + * Note: not a slot, because the parameter isn't moc-able. + */ + const TimeZoneData* find( const std::function< double( const TimeZoneData* ) >& distanceFunc ) const; + +public Q_SLOTS: + /** @brief Look up TZ data based on its name. + * + * Returns @c nullptr if not found. + */ + const TimeZoneData* find( const QString& region, const QString& zone ) const; + + /** @brief Look up TZ data based on the location. + * + * Returns the nearest zone to the given lat and lon. This is a + * convenience function for calling find(), below, with a standard + * distance function based on the distance between the given + * location (lat and lon) and each zone's given location. + */ + const TimeZoneData* find( double latitude, double longitude ) const; + + /** @brief Look up TZ data based on the location. + * + * Returns the nearest zone, or New York. This is non-const for QML + * purposes, but the object should be considered const anyway. + */ + QObject* lookup( double latitude, double longitude ) const; + +private: + Private* m_private; +}; + +class DLLEXPORT RegionalZonesModel : public QSortFilterProxyModel +{ + Q_OBJECT + Q_PROPERTY( QString region READ region WRITE setRegion NOTIFY regionChanged ) + +public: + RegionalZonesModel( ZonesModel* source, QObject* parent = nullptr ); + ~RegionalZonesModel() override; + + bool filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const override; + + QString region() const { return m_region; } + +public Q_SLOTS: + void setRegion( const QString& r ); signals: - void currentIndexChanged(); + void regionChanged( const QString& ); + +private: + Private* m_private; + QString m_region; }; + } // namespace Locale } // namespace CalamaresUtils diff --git a/src/libcalamares/locale/TranslatableConfiguration.cpp b/src/libcalamares/locale/TranslatableConfiguration.cpp index 83199a4cc..3a95722d1 100644 --- a/src/libcalamares/locale/TranslatableConfiguration.cpp +++ b/src/libcalamares/locale/TranslatableConfiguration.cpp @@ -1,24 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TranslatableConfiguration.h" -#include "LabelModel.h" +#include "TranslationsModel.h" #include "utils/Logger.h" #include "utils/Variant.h" @@ -31,9 +23,15 @@ namespace CalamaresUtils { namespace Locale { -TranslatedString::TranslatedString( const QString& string ) +TranslatedString::TranslatedString( const QString& key, const char* context ) + : m_context( context ) +{ + m_strings[ QString() ] = key; +} + +TranslatedString::TranslatedString( const QString& string ) + : TranslatedString( string, nullptr ) { - m_strings[ QString() ] = string; } TranslatedString::TranslatedString( const QVariantMap& map, const QString& key, const char* context ) @@ -71,6 +69,7 @@ TranslatedString::get() const QString TranslatedString::get( const QLocale& locale ) const { + // TODO: keep track of special cases like sr@latin and ca@valencia QString localeName = locale.name(); // Special case, sr@latin doesn't have the @latin reflected in the name if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript ) diff --git a/src/libcalamares/locale/TranslatableConfiguration.h b/src/libcalamares/locale/TranslatableConfiguration.h index d845569bc..04897c0a4 100644 --- a/src/libcalamares/locale/TranslatableConfiguration.h +++ b/src/libcalamares/locale/TranslatableConfiguration.h @@ -1,21 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ +/** @file Run-time translation of strings from configuration files + * + * The TranslatedString class provides a way of doing run-time + * lookups of human-readable strings, from data provided in + * the configuration files (*.conf) for Calamares. This acts + * like "normal" translation through tr() calls, as far as the + * user-visible part goes. + */ #ifndef LOCALE_TRANSLATABLECONFIGURATION_H #define LOCALE_TRANSLATABLECONFIGURATION_H @@ -50,11 +50,23 @@ public: * metaObject()->className() as context (from a QObject based class) * to give the TranslatedString the same context as other calls * to tr() within that class. + * + * The @p context, if any, should point to static data; it is + * **not** owned by the TranslatedString. */ TranslatedString( const QVariantMap& map, const QString& key, const char* context = nullptr ); /** @brief Not-actually-translated string. */ TranslatedString( const QString& string ); + /** @brief Proxy for calling QObject::tr() + * + * This is like the two constructors above, with an empty map an a + * non-null context. It will end up calling tr() with that context. + * + * The @p context, if any, should point to static data; it is + * **not** owned by the TranslatedString. + */ + TranslatedString( const QString& key, const char* context ); /// @brief Empty string TranslatedString() : TranslatedString( QString() ) diff --git a/src/libcalamares/locale/TranslatableString.cpp b/src/libcalamares/locale/TranslatableString.cpp new file mode 100644 index 000000000..8f42a4e41 --- /dev/null +++ b/src/libcalamares/locale/TranslatableString.cpp @@ -0,0 +1,79 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ +#include "TranslatableString.h" + + +/** @brief Massage an identifier into a human-readable form + * + * Makes a copy of @p s, caller must free() it. + */ +static char* +munge( const char* s ) +{ + char* t = strdup( s ); + if ( !t ) + { + return nullptr; + } + + // replace("_"," ") in the Python script + char* p = t; + while ( *p ) + { + if ( ( *p ) == '_' ) + { + *p = ' '; + } + ++p; + } + + return t; +} + +namespace CalamaresUtils +{ +namespace Locale +{ + +TranslatableString::TranslatableString( TranslatableString&& t ) + : m_human( nullptr ) + , m_key() +{ + // My pointers are initialized to nullptr + std::swap( m_human, t.m_human ); + std::swap( m_key, t.m_key ); +} + +TranslatableString::TranslatableString( const TranslatableString& t ) + : m_human( t.m_human ? strdup( t.m_human ) : nullptr ) + , m_key( t.m_key ) +{ +} + +TranslatableString::TranslatableString( const char* s1 ) + : m_human( s1 ? munge( s1 ) : nullptr ) + , m_key( s1 ? QString( s1 ) : QString() ) +{ +} + +TranslatableString::TranslatableString( const QString& s ) + : m_human( munge( s.toUtf8().constData() ) ) + , m_key( s ) +{ +} + + +TranslatableString::~TranslatableString() +{ + free( m_human ); +} + +} // namespace Locale +} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/TranslatableString.h b/src/libcalamares/locale/TranslatableString.h new file mode 100644 index 000000000..663f6a2c2 --- /dev/null +++ b/src/libcalamares/locale/TranslatableString.h @@ -0,0 +1,58 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ +#ifndef LOCALE_TRANSLATABLESTRING_H +#define LOCALE_TRANSLATABLESTRING_H + +#include + +namespace CalamaresUtils +{ +namespace Locale +{ + +/** @brief A pair of strings, one human-readable, one a key + * + * Given an identifier-like string (e.g. "New_York"), makes + * a human-readable version of that and keeps a copy of the + * identifier itself. + * + * This explicitly uses const char* instead of just being + * QPair because the human-readable part + * may need to be translated through tr(), and that takes a char* + * C-style strings. + */ +class TranslatableString +{ +public: + /// @brief An empty pair + TranslatableString() {} + /// @brief Given an identifier, create the pair + explicit TranslatableString( const char* s1 ); + explicit TranslatableString( const QString& s ); + TranslatableString( TranslatableString&& t ); + TranslatableString( const TranslatableString& ); + virtual ~TranslatableString(); + + /// @brief Give the localized human-readable form + virtual QString tr() const = 0; + QString key() const { return m_key; } + + bool operator==( const TranslatableString& other ) const { return m_key == other.m_key; } + bool operator<( const TranslatableString& other ) const { return m_key < other.m_key; } + +protected: + char* m_human = nullptr; + QString m_key; +}; + +} // namespace Locale +} // namespace CalamaresUtils + +#endif diff --git a/src/libcalamares/locale/Translation.cpp b/src/libcalamares/locale/Translation.cpp new file mode 100644 index 000000000..213d2b9a7 --- /dev/null +++ b/src/libcalamares/locale/Translation.cpp @@ -0,0 +1,184 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#include "Translation.h" + +#include + +struct TranslationSpecialCase +{ + const char* id; // The Calamares ID for the translation + const char** regions; + + QLocale::Language language; + QLocale::Script script; + QLocale::Country country; + + const char* name; // Native name, if different from Qt + + constexpr bool customLocale() const { return language != QLocale::Language::AnyLanguage; } +}; + +/** @brief Handle special cases of Calamares language names + * + * If a given @p id (e.g. en_US, or sr@latin) has special handling, + * put an entry in this table. The QLocale constants are used when a + * particular @p id needs specific configuration, **if** @p language + * is not @c AnyLanguage. The @p name is used as a human-readable + * native name if the Qt name is not suitable. + * + * Another form of lookup maps a @p language + a region-identifier + * to a @p id, running around Qt's neglect of `@region` variants. + * + * Examples: + * - `sr@latin` needs specific Qt Locale settnigs, but the name is OK + * - Chinese needs a specific name, but the Locale is OK + */ +static const char* serbian_latin_regions[] = { "latin", "latn", nullptr }; +static const char* catalan_regions[] = { "valencia", nullptr }; +static constexpr const TranslationSpecialCase special_cases[] = { + { "sr@latin", + serbian_latin_regions, + QLocale::Language::Serbian, + QLocale::Script::LatinScript, + QLocale::Country::Serbia, + nullptr }, + // Valencian is a regional variant of Catalan + { "ca@valencia", + catalan_regions, + QLocale::Language::Catalan, + QLocale::Script::AnyScript, + QLocale::Country::AnyCountry, + "Català (València)" }, + // Simplified Chinese, but drop the (China) from the name + { "zh_CN", + nullptr, + QLocale::Language::AnyLanguage, + QLocale::Script::AnyScript, + QLocale::Country::AnyCountry, + "简体中文" }, + // Traditional Chinese, but drop (Taiwan) from the name + { "zh_TW", + nullptr, + QLocale::Language::AnyLanguage, + QLocale::Script::AnyScript, + QLocale::Country::AnyCountry, + "繁體中文" }, + { "oc", + nullptr, + QLocale::Language::AnyLanguage, + QLocale::Script::AnyScript, + QLocale::Country::AnyCountry, + "Lenga d'òc" }, +}; + +static inline bool +lookup_region( const QByteArray& region, const char** regions_list ) +{ + if ( regions_list ) + { + while ( *regions_list ) + { + if ( region == *regions_list ) + { + return true; + } + regions_list++; + } + } + return false; +} + +static QString +specialCaseSystemLanguage() +{ + const QByteArray lang_p = qgetenv( "LANG" ); + if ( lang_p.isEmpty() ) + { + // This will figure out the system language some other way + return {}; + } + + auto lang_parts = lang_p.split( '@' ); + if ( lang_parts.size() != 2 ) + { + return {}; + } + + QLocale locale( QString::fromLatin1( lang_p ) ); + auto it + = std::find_if( std::cbegin( special_cases ), + std::cend( special_cases ), + [ language = locale.language(), region = lang_parts[ 1 ] ]( const TranslationSpecialCase& s ) + { return ( s.language == language ) && lookup_region( region, s.regions ); } ); + return ( it != std::cend( special_cases ) ) ? QString::fromLatin1( it->id ) : QString(); +} + +namespace CalamaresUtils +{ +namespace Locale +{ + +Translation::Translation( QObject* parent ) + : Translation( { specialCaseSystemLanguage() }, LabelFormat::IfNeededWithCountry, parent ) +{ +} + +Translation::Translation( const Id& localeId, LabelFormat format, QObject* parent ) + : QObject( parent ) + , m_locale( getLocale( localeId ) ) + , m_localeId( localeId.name.isEmpty() ? m_locale.name() : localeId.name ) +{ + auto it = std::find_if( std::cbegin( special_cases ), + std::cend( special_cases ), + [ &localeId ]( const TranslationSpecialCase& s ) { return localeId.name == s.id; } ); + const char* name = ( it != std::cend( special_cases ) ) ? it->name : nullptr; + + QString longFormat = QObject::tr( "%1 (%2)" ); + + QString languageName = name ? QString::fromUtf8( name ) : m_locale.nativeLanguageName(); + QString englishName = m_locale.languageToString( m_locale.language() ); + + if ( languageName.isEmpty() ) + { + languageName = QString( "* %1 (%2)" ).arg( localeId.name, englishName ); + } + + bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry ) + || ( !name && localeId.name.contains( '_' ) + && QLocale::countriesForLanguage( m_locale.language() ).count() > 1 ); + QString countryName = needsCountryName ? m_locale.nativeCountryName() : QString(); + m_label = needsCountryName ? longFormat.arg( languageName, countryName ) : languageName; + m_englishLabel = needsCountryName ? longFormat.arg( englishName, QLocale::countryToString( m_locale.country() ) ) + : englishName; +} + +QLocale +Translation::getLocale( const Id& localeId ) +{ + const QString& localeName = localeId.name; + if ( localeName.isEmpty() ) + { + return QLocale(); + } + + auto it = std::find_if( std::cbegin( special_cases ), + std::cend( special_cases ), + [ &localeId ]( const TranslationSpecialCase& s ) { return localeId.name == s.id; } ); + if ( it != std::cend( special_cases ) && it->customLocale() ) + { + return QLocale( it->language, it->script, it->country ); + } + return QLocale( localeName ); +} + +} // namespace Locale +} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/Label.h b/src/libcalamares/locale/Translation.h similarity index 58% rename from src/libcalamares/locale/Label.h rename to src/libcalamares/locale/Translation.h index bd596f53d..912a509ac 100644 --- a/src/libcalamares/locale/Label.h +++ b/src/libcalamares/locale/Translation.h @@ -1,24 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#ifndef LOCALE_LABEL_H -#define LOCALE_LABEL_H +#ifndef LOCALE_TRANSLATION_H +#define LOCALE_TRANSLATION_H + +#include "utils/Logger.h" #include #include @@ -35,8 +29,14 @@ namespace Locale * Support class to turn locale names (as used by Calamares's * translation system) into QLocales, and also into consistent * human-readable text labels. + * + * This handles special-cases in Calamares translations: + * - `sr@latin` is the name which Qt recognizes as `sr@latn`, + * Serbian written with Latin characters (not Cyrillic). + * - `ca@valencia` is the Catalan dialect spoken in Valencia. + * There is no Qt code for it. */ -class Label : public QObject +class Translation : public QObject { Q_OBJECT @@ -48,8 +48,13 @@ public: IfNeededWithCountry }; + struct Id + { + QString name; + }; + /** @brief Empty locale. This uses the system-default locale. */ - Label( QObject* parent = nullptr ); + Translation( QObject* parent = nullptr ); /** @brief Construct from a locale name. * @@ -57,16 +62,14 @@ public: * The @p format determines whether the country name is always present * in the label (human-readable form) or only if needed for disambiguation. */ - Label( const QString& localeName, - LabelFormat format = LabelFormat::IfNeededWithCountry, - QObject* parent = nullptr ); + Translation( const Id& localeId, LabelFormat format = LabelFormat::IfNeededWithCountry, QObject* parent = nullptr ); /** @brief Define a sorting order. * * Locales are sorted by their id, which means the ISO 2-letter code + country. */ - bool operator<( const Label& other ) const { return m_localeId < other.m_localeId; } + bool operator<( const Translation& other ) const { return m_localeId < other.m_localeId; } /** @brief Is this locale English? * @@ -83,8 +86,12 @@ public: /** @brief Get the Qt locale. */ QLocale locale() const { return m_locale; } - QString name() const { return m_locale.name(); } - QString id() const { return m_localeId; } + /** @brief Gets the Calamares internal name (code) of the locale. + * + * This is a strongly-typed return to avoid it ending up all over + * the place as a QString. + */ + Id id() const { return { m_localeId }; } /// @brief Convenience accessor to the language part of the locale QLocale::Language language() const { return m_locale.language(); } @@ -94,18 +101,28 @@ public: /** @brief Get a Qt locale for the given @p localeName * - * This special-cases `sr@latin`, which is used as a translation - * name in Calamares, while Qt recognizes `sr@latn`. + * This obeys special cases as described in the class documentation. */ - static QLocale getLocale( const QString& localeName ); + static QLocale getLocale( const Id& localeId ); -protected: +private: QLocale m_locale; QString m_localeId; // the locale identifier, e.g. "en_GB" QString m_label; // the native name of the locale QString m_englishLabel; }; +static inline QDebug& +operator<<( QDebug& s, const Translation::Id& id ) +{ + return s << id.name; +} +static inline bool +operator==( const Translation::Id& lhs, const Translation::Id& rhs ) +{ + return lhs.name == rhs.name; +} + } // namespace Locale } // namespace CalamaresUtils diff --git a/src/libcalamares/locale/TranslationsModel.cpp b/src/libcalamares/locale/TranslationsModel.cpp new file mode 100644 index 000000000..0ffa6f9c5 --- /dev/null +++ b/src/libcalamares/locale/TranslationsModel.cpp @@ -0,0 +1,148 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019 Camilo Higuita + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#include "TranslationsModel.h" + +#include "Lookup.h" + +#include "CalamaresVersion.h" // For the list of translations + +namespace CalamaresUtils +{ +namespace Locale +{ + +TranslationsModel::TranslationsModel( const QStringList& locales, QObject* parent ) + : QAbstractListModel( parent ) + , m_localeIds( locales ) +{ + Q_ASSERT( locales.count() > 0 ); + m_locales.reserve( locales.count() ); + + for ( const auto& l : locales ) + { + m_locales.push_back( new Translation( { l }, Translation::LabelFormat::IfNeededWithCountry, this ) ); + } +} + +TranslationsModel::~TranslationsModel() {} + +int +TranslationsModel::rowCount( const QModelIndex& ) const +{ + return m_locales.count(); +} + +QVariant +TranslationsModel::data( const QModelIndex& index, int role ) const +{ + if ( ( role != LabelRole ) && ( role != EnglishLabelRole ) ) + { + return QVariant(); + } + + if ( !index.isValid() ) + { + return QVariant(); + } + + const auto& locale = m_locales.at( index.row() ); + switch ( role ) + { + case LabelRole: + return locale->label(); + case EnglishLabelRole: + return locale->englishLabel(); + default: + return QVariant(); + } +} + +QHash< int, QByteArray > +TranslationsModel::roleNames() const +{ + return { { LabelRole, "label" }, { EnglishLabelRole, "englishLabel" } }; +} + +const Translation& +TranslationsModel::locale( int row ) const +{ + if ( ( row < 0 ) || ( row >= m_locales.count() ) ) + { + for ( const auto& l : m_locales ) + if ( l->isEnglish() ) + { + return *l; + } + return *m_locales[ 0 ]; + } + return *m_locales[ row ]; +} + +int +TranslationsModel::find( std::function< bool( const Translation& ) > predicate ) const +{ + for ( int row = 0; row < m_locales.count(); ++row ) + { + if ( predicate( *m_locales[ row ] ) ) + { + return row; + } + } + return -1; +} + +int +TranslationsModel::find( std::function< bool( const QLocale& ) > predicate ) const +{ + return find( [ & ]( const Translation& l ) { return predicate( l.locale() ); } ); +} + +int +TranslationsModel::find( const QLocale& locale ) const +{ + return find( [ & ]( const Translation& l ) { return locale == l.locale(); } ); +} + +int +TranslationsModel::find( const QString& countryCode ) const +{ + if ( countryCode.length() != 2 ) + { + return -1; + } + + auto c_l = countryData( countryCode ); + int r = find( [ & ]( const Translation& l ) + { return ( l.language() == c_l.second ) && ( l.country() == c_l.first ); } ); + if ( r >= 0 ) + { + return r; + } + return find( [ & ]( const Translation& l ) { return l.language() == c_l.second; } ); +} + +int +TranslationsModel::find( const Translation::Id& id ) const +{ + return find( [ & ]( const Translation& l ) { return l.id() == id; } ); +} + +TranslationsModel* +availableTranslations() +{ + static TranslationsModel* model + = new TranslationsModel( QStringLiteral( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ) ); + return model; +} + +} // namespace Locale +} // namespace CalamaresUtils diff --git a/src/libcalamares/locale/LabelModel.h b/src/libcalamares/locale/TranslationsModel.h similarity index 57% rename from src/libcalamares/locale/LabelModel.h rename to src/libcalamares/locale/TranslationsModel.h index 7bd1fad67..3cd7c61dc 100644 --- a/src/libcalamares/locale/LabelModel.h +++ b/src/libcalamares/locale/TranslationsModel.h @@ -1,27 +1,19 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2019, Camilo Higuita + * SPDX-FileCopyrightText: 2019 Camilo Higuita + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#ifndef LOCALE_LABELMODEL_H -#define LOCALE_LABELMODEL_H +#ifndef LOCALE_TRANSLATIONSMODEL_H +#define LOCALE_TRANSLATIONSMODEL_H #include "DllMacro.h" -#include "Label.h" +#include "Translation.h" #include #include @@ -32,7 +24,7 @@ namespace CalamaresUtils namespace Locale { -class DLLEXPORT LabelModel : public QAbstractListModel +class DLLEXPORT TranslationsModel : public QAbstractListModel { Q_OBJECT @@ -43,8 +35,8 @@ public: EnglishLabelRole = Qt::UserRole + 1 }; - LabelModel( const QStringList& locales, QObject* parent = nullptr ); - virtual ~LabelModel() override; + TranslationsModel( const QStringList& locales, QObject* parent = nullptr ); + ~TranslationsModel() override; int rowCount( const QModelIndex& parent ) const override; @@ -56,7 +48,7 @@ public: * This is the backing data for the model; if @p row is out-of-range, * returns a reference to en_US. */ - const Label& locale( int row ) const; + const Translation& locale( int row ) const; /// @brief Returns all of the locale Ids (e.g. en_US) put into this model. const QStringList& localeIds() const { return m_localeIds; } @@ -66,14 +58,16 @@ public: * Returns the row number of the first match, or -1 if there isn't one. */ int find( std::function< bool( const QLocale& ) > predicate ) const; - int find( std::function< bool( const Label& ) > predicate ) const; + int find( std::function< bool( const Translation& ) > predicate ) const; /// @brief Looks for an item using the same locale, -1 if there isn't one int find( const QLocale& ) const; /// @brief Looks for an item that best matches the 2-letter country code int find( const QString& countryCode ) const; + /// @brief Looks up a translation Id + int find( const Translation::Id& id ) const; private: - QVector< Label* > m_locales; + QVector< Translation* > m_locales; QStringList m_localeIds; }; @@ -87,7 +81,7 @@ private: * * NOTE: While the model is not typed const, it should be. Do not modify. */ -DLLEXPORT LabelModel* availableTranslations(); +DLLEXPORT TranslationsModel* availableTranslations(); } // namespace Locale } // namespace CalamaresUtils #endif diff --git a/src/libcalamares/locale/ZoneData_p.cxxtr b/src/libcalamares/locale/ZoneData_p.cxxtr index b73d17ad3..c59c60dbb 100644 --- a/src/libcalamares/locale/ZoneData_p.cxxtr +++ b/src/libcalamares/locale/ZoneData_p.cxxtr @@ -1,6 +1,8 @@ /* GENERATED FILE DO NOT EDIT * -* === This file is part of Calamares - === +* SPDX-FileCopyrightText: 2009 Arthur David Olson +* SPDX-FileCopyrightText: 2019 Adriaan de Groot +* SPDX-License-Identifier: CC0-1.0 * * This file is derived from zone.tab, which has its own copyright statement: * diff --git a/src/libcalamares/locale/cldr-extractor.py b/src/libcalamares/locale/cldr-extractor.py index aae71ed1d..7aff85be1 100644 --- a/src/libcalamares/locale/cldr-extractor.py +++ b/src/libcalamares/locale/cldr-extractor.py @@ -1,38 +1,9 @@ #! /usr/bin/env python3 # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Python3 script to scrape some data out of ICU CLDR supplemental data. -# -### BEGIN LICENSES -# -# Copyright 2019 Adriaan de Groot -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -### END LICENSES - -### BEGIN USAGE +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause # """ Python3 script to scrape some data out of ICU CLDR supplemental data. @@ -119,7 +90,7 @@ class CountryData: self.country_code = "" self.language_enum = "AnyLanguage" self.country_enum = "AnyCountry" - + def __str__(self): if self.country_code: char0 = "'{!s}'".format(self.country_code[0]) @@ -127,18 +98,18 @@ class CountryData: else: char0 = "0" char1 = "0" - + return "{!s} QLocale::Language::{!s}, QLocale::Country::{!s}, {!s}, {!s} {!s},".format( "{", - self.language_enum, + self.language_enum, self.country_enum, - char0, + char0, char1, "}") # Must match type name below cpp_classname = "CountryData" - + # Must match the output format of __str__ above cpp_declaration = """ struct CountryData @@ -162,30 +133,30 @@ def extricate_subtags(l1, l2): return if '{ ?; ?;' not in l2: return - + # This is extremely crude "parsing" which chops up the string # by delimiter and then extracts some substring. l1_parts = l1.split("und_") l2_parts = l2.split(";") - + l1_first_quote = l1_parts[1].find('"') l1_code = l1_parts[1][:l1_first_quote] if len(l1_code) != 2: return - + l2_brace = l2_parts[2].find("{") l2_language = l2_parts[2][l2_brace+1:].strip() l2_brace = l2_parts[2].find("}") l2_country = l2_parts[2][:l2_brace-1].strip() - + # Handle mapped cases l2_language = language_mapper.get(l2_language, l2_language) l2_language = l2_language.replace(" ", "") - + # Handle mapped cases and then do a bunch of standard replacements. l2_country = country_mapper.get(l2_country, l2_country) l2_country = l2_country.replace(" ", "").replace("-", "").replace(".","").replace("&","And") - + return CountryData(l1_code, l2_language, l2_country) @@ -206,7 +177,7 @@ def read_subtags_file(): if l1: assert "likelySubtag" in l1, l1; assert " + + + + LocaleTests + + + Quit + Ophouden + + + diff --git a/src/libcalamares/testdata/yaml-list.conf b/src/libcalamares/testdata/yaml-list.conf new file mode 100644 index 000000000..d8d2178d1 --- /dev/null +++ b/src/libcalamares/testdata/yaml-list.conf @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# YAML dump +--- +"cow": "moo" +"derp": 17 +"dwarfs": + - "sleepy" + - "sneezy" + - "doc" diff --git a/src/libcalamares/utils/BoostPython.h b/src/libcalamares/utils/BoostPython.h index 7bd8865da..f39abe7cf 100644 --- a/src/libcalamares/utils/BoostPython.h +++ b/src/libcalamares/utils/BoostPython.h @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.cpp b/src/libcalamares/utils/CalamaresUtilsSystem.cpp index 651ac2c1e..2d6bdde83 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.cpp +++ b/src/libcalamares/utils/CalamaresUtilsSystem.cpp @@ -1,32 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresUtilsSystem.h" #include "GlobalStorage.h" #include "JobQueue.h" -#include "Settings.h" +#include "Runner.h" #include "utils/Logger.h" #include #include -#include #include #ifdef Q_OS_LINUX @@ -41,47 +32,6 @@ // clang-format on #endif -/** @brief When logging commands, don't log everything. - * - * The command-line arguments to some commands may contain the - * encrypted password set by the user. Don't log that password, - * since the log may get posted to bug reports, or stored in - * the target system. - */ -struct RedactedList -{ - RedactedList( const QStringList& l ) - : list( l ) - { - } - - const QStringList& list; -}; - -QDebug& -operator<<( QDebug& s, const RedactedList& l ) -{ - // Special case logging: don't log the (encrypted) password. - if ( l.list.contains( "usermod" ) ) - { - for ( const auto& item : l.list ) - if ( item.startsWith( "$6$" ) ) - { - s << ""; - } - else - { - s << item; - } - } - else - { - s << l.list; - } - - return s; -} - namespace CalamaresUtils { @@ -110,7 +60,7 @@ System::instance() if ( !s_instance ) { cError() << "No Calamares system-object has been created."; - cError() << Logger::SubEntry << "using a bogus instance instead."; + cDebug() << Logger::SubEntry << "using a bogus instance instead."; return new System( true, nullptr ); } return s_instance; @@ -124,97 +74,9 @@ System::runCommand( System::RunLocation location, const QString& stdInput, std::chrono::seconds timeoutSec ) { - if ( args.isEmpty() ) - { - cWarning() << "Cannot run an empty program list"; - return ProcessResult::Code::FailedToStart; - } - - Calamares::GlobalStorage* gs - = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; - - if ( ( location == System::RunLocation::RunInTarget ) && ( !gs || !gs->contains( "rootMountPoint" ) ) ) - { - cWarning() << "No rootMountPoint in global storage"; - return ProcessResult::Code::NoWorkingDirectory; - } - - QString program; - QStringList arguments( args ); - - if ( location == System::RunLocation::RunInTarget ) - { - QString destDir = gs->value( "rootMountPoint" ).toString(); - if ( !QDir( destDir ).exists() ) - { - cWarning() << "rootMountPoint points to a dir which does not exist"; - return ProcessResult::Code::NoWorkingDirectory; - } - - program = "chroot"; - arguments.prepend( destDir ); - } - else - { - program = "env"; - } - - QProcess process; - process.setProgram( program ); - process.setArguments( arguments ); - process.setProcessChannelMode( QProcess::MergedChannels ); - - if ( !workingPath.isEmpty() ) - { - if ( QDir( workingPath ).exists() ) - { - process.setWorkingDirectory( QDir( workingPath ).absolutePath() ); - } - else - { - cWarning() << "Invalid working directory:" << workingPath; - return ProcessResult::Code::NoWorkingDirectory; - } - } - - cDebug() << "Running" << program << RedactedList( arguments ); - process.start(); - if ( !process.waitForStarted() ) - { - cWarning() << "Process" << args.first() << "failed to start" << process.error(); - return ProcessResult::Code::FailedToStart; - } - - if ( !stdInput.isEmpty() ) - { - process.write( stdInput.toLocal8Bit() ); - } - process.closeWriteChannel(); - - if ( !process.waitForFinished( timeoutSec > std::chrono::seconds::zero() - ? ( static_cast< int >( std::chrono::milliseconds( timeoutSec ).count() ) ) - : -1 ) ) - { - ( cWarning() << "Process" << args.first() << "timed out after" << timeoutSec.count() << "s. Output so far:\n" ).noquote().nospace() << process.readAllStandardOutput(); - return ProcessResult::Code::TimedOut; - } - - QString output = QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed(); - - if ( process.exitStatus() == QProcess::CrashExit ) - { - ( cWarning() << "Process" << args.first() << "crashed. Output so far:\n" ).noquote().nospace() << output; - return ProcessResult::Code::Crashed; - } - - auto r = process.exitCode(); - cDebug() << "Finished. Exit code:" << r; - bool showDebug = ( !Calamares::Settings::instance() ) || ( Calamares::Settings::instance()->debugMode() ); - if ( ( r != 0 ) || showDebug ) - { - ( cDebug() << "Target cmd:" << RedactedList( args ) << "output:\n" ).noquote().nospace() << output; - } - return ProcessResult( r, output ); + Calamares::Utils::Runner r( args ); + r.setLocation( location ).setInput( stdInput ).setTimeout( timeoutSec ).setWorkingDirectory( workingPath ); + return r.run(); } /// @brief Cheap check if a path is absolute. @@ -253,12 +115,14 @@ System::createTargetFile( const QString& path, const QByteArray& contents, Write QString completePath = targetPath( path ); if ( completePath.isEmpty() ) { + cWarning() << "No target path for" << path; return CreationResult( CreationResult::Code::Invalid ); } QFile f( completePath ); if ( ( mode == WriteMode::KeepExisting ) && f.exists() ) { + cWarning() << "Target file" << completePath << "already exists"; return CreationResult( CreationResult::Code::AlreadyExists ); } @@ -271,13 +135,16 @@ System::createTargetFile( const QString& path, const QByteArray& contents, Write if ( !f.open( m ) ) { + cWarning() << "Could not open target file" << completePath; return CreationResult( CreationResult::Code::Failed ); } - if ( f.write( contents ) != contents.size() ) + auto written = f.write( contents ); + if ( written != contents.size() ) { f.close(); f.remove(); + cWarning() << "Short write (" << written << "out of" << contents.size() << "bytes) to" << completePath; return CreationResult( CreationResult::Code::Failed ); } @@ -285,6 +152,30 @@ System::createTargetFile( const QString& path, const QByteArray& contents, Write return CreationResult( QFileInfo( f ).canonicalFilePath() ); } +QStringList +System::readTargetFile( const QString& path ) const +{ + const QString completePath = targetPath( path ); + if ( completePath.isEmpty() ) + { + return QStringList(); + } + + QFile f( completePath ); + if ( !f.open( QIODevice::ReadOnly ) ) + { + return QStringList(); + } + + QTextStream in( &f ); + QStringList l; + while ( !in.atEnd() ) + { + l << in.readLine(); + } + return l; +} + void System::removeTargetFile( const QString& path ) const { @@ -339,7 +230,7 @@ System::createTargetParentDirs( const QString& filePath ) const } -QPair< quint64, float > +QPair< qint64, qreal > System::getTotalMemoryB() const { #ifdef Q_OS_LINUX diff --git a/src/libcalamares/utils/CalamaresUtilsSystem.h b/src/libcalamares/utils/CalamaresUtilsSystem.h index c4db9dc00..f7f04079e 100644 --- a/src/libcalamares/utils/CalamaresUtilsSystem.h +++ b/src/libcalamares/utils/CalamaresUtilsSystem.h @@ -1,20 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_CALAMARESUTILSSYSTEM_H #define UTILS_CALAMARESUTILSSYSTEM_H @@ -134,7 +126,7 @@ public: * @param parent the QObject parent. */ explicit System( bool doChroot, QObject* parent = nullptr ); - virtual ~System(); + ~System() override; static System* instance(); @@ -147,32 +139,33 @@ public: RunInTarget }; - /** - * Runs the specified command in the chroot of the target system. - * @param args the command with arguments, as a string list. - * @param workingPath the current working directory for the QProcess - * call (optional). - * @param stdInput the input string to send to the running process as - * standard input (optional). - * @param timeoutSec the timeout after which the process will be - * killed (optional, default is 0 i.e. no timeout). - * - * @returns the program's exit code and its output (if any). Special - * exit codes (which will never have any output) are: - * Crashed = QProcess crash - * FailedToStart = QProcess cannot start - * NoWorkingDirectory = bad arguments - * TimedOut = QProcess timeout - */ + /** @brief Runs a command in the host or the target (select explicitly) + * + * @param location whether to run in the host or the target + * @param args the command with arguments, as a string list. + * @param workingPath the current working directory for the QProcess + * call (optional). + * @param stdInput the input string to send to the running process as + * standard input (optional). + * @param timeoutSec the timeout after which the process will be + * killed (optional, default is 0 i.e. no timeout). + * + * @returns the program's exit code and its output (if any). Special + * exit codes (which will never have any output) are: + * Crashed = QProcess crash + * FailedToStart = QProcess cannot start + * NoWorkingDirectory = bad arguments + * TimedOut = QProcess timeout + */ static DLLEXPORT ProcessResult runCommand( RunLocation location, const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ); - /** @brief Convenience wrapper for runCommand() + /** @brief Convenience wrapper for runCommand() in the host * - * Runs the given command-line @p args in the host in the current direcory + * Runs the given command-line @p args in the **host** in the current direcory * with no input, and the given @p timeoutSec for completion. */ static inline ProcessResult runCommand( const QStringList& args, std::chrono::seconds timeoutSec ) @@ -181,10 +174,11 @@ public: } /** @brief Convenience wrapper for runCommand(). - * Runs the command in the location specified through the boolean - * doChroot(), which is what you usually want for running commands - * during installation. - */ + * + * Runs the command in the location specified through the boolean + * doChroot(), which is what you usually want for running commands + * during installation. + */ inline ProcessResult targetEnvCommand( const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), @@ -293,6 +287,24 @@ public: */ DLLEXPORT void removeTargetFile( const QString& path ) const; + /** @brief Reads a file from the target system. + * + * @param path Path to the file; this is interpreted from the root of + * the target system (@see targetPath()). + * + * Does no error checking, and returns an empty list if the file does + * not exist. + * + * NOTE: This function is now basically the same as QFile::readAll(), + * splitting into lines, but Calamares may need to change + * permissions or raise privileges to actually read the file, + * which is why there is an API. + * + * NOTE: Since this buffers the whole file in memory, reading big files + * is not recommended. + */ + DLLEXPORT QStringList readTargetFile( const QString& path ) const; + /** @brief Ensure that the directory @p path exists * * @param path a full pathname to a desired directory. @@ -325,7 +337,7 @@ public: * * @return size, guesstimate-factor */ - DLLEXPORT QPair< quint64, float > getTotalMemoryB() const; + DLLEXPORT QPair< qint64, qreal > getTotalMemoryB() const; /** * @brief getCpuDescription returns a string describing the CPU. diff --git a/src/libcalamares/utils/CommandList.cpp b/src/libcalamares/utils/CommandList.cpp index 8a2f3835b..4652dcc5a 100644 --- a/src/libcalamares/utils/CommandList.cpp +++ b/src/libcalamares/utils/CommandList.cpp @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CommandList.h" diff --git a/src/libcalamares/utils/CommandList.h b/src/libcalamares/utils/CommandList.h index 71a5a483c..432020a96 100644 --- a/src/libcalamares/utils/CommandList.h +++ b/src/libcalamares/utils/CommandList.h @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_COMMANDLIST_H diff --git a/src/libcalamares/utils/Dirs.cpp b/src/libcalamares/utils/Dirs.cpp index ca569490f..f333d6e64 100644 --- a/src/libcalamares/utils/Dirs.cpp +++ b/src/libcalamares/utils/Dirs.cpp @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2013-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2010-2011, Leo Franchi - * Copyright 2010-2012, Jeff Mitchell + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2010-2011 Leo Franchi + * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Dirs.h" @@ -42,7 +34,6 @@ namespace CalamaresUtils { static QDir s_appDataDir( CMAKE_INSTALL_FULL_DATADIR ); -static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" ); static bool s_isAppDataDirOverridden = false; static bool s_haveExtraDirs = false; @@ -79,13 +70,6 @@ isWritableDir( const QDir& dir ) } -QDir -qmlModulesDir() -{ - return s_qmlModulesDir; -} - - void setAppDataDir( const QDir& dir ) { @@ -200,11 +184,4 @@ appLogDir() return QDir::temp(); } - -void -setQmlModulesDir( const QDir& dir ) -{ - s_qmlModulesDir = dir; -} - } // namespace CalamaresUtils diff --git a/src/libcalamares/utils/Dirs.h b/src/libcalamares/utils/Dirs.h index a63e679da..445cbe1f1 100644 --- a/src/libcalamares/utils/Dirs.h +++ b/src/libcalamares/utils/Dirs.h @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2013-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2010-2011, Leo Franchi - * Copyright 2010-2012, Jeff Mitchell + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2010-2011 Leo Franchi + * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_DIRS_H @@ -31,8 +23,6 @@ namespace CalamaresUtils { -DLLEXPORT QDir qmlModulesDir(); - /** * @brief appDataDir returns the directory with common application data. * Defaults to CMAKE_INSTALL_FULL_DATADIR (usually /usr/share/calamares). @@ -57,8 +47,6 @@ DLLEXPORT QDir systemLibDir(); DLLEXPORT void setAppDataDir( const QDir& dir ); DLLEXPORT bool isAppDataDirOverridden(); -DLLEXPORT void setQmlModulesDir( const QDir& dir ); - /** @brief Setup extra config and data dirs from the XDG variables. */ DLLEXPORT void setXdgDirs(); diff --git a/src/libcalamares/utils/Entropy.cpp b/src/libcalamares/utils/Entropy.cpp index ce1f6ba9d..67a0718f5 100644 --- a/src/libcalamares/utils/Entropy.cpp +++ b/src/libcalamares/utils/Entropy.cpp @@ -1,19 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Entropy.h" @@ -25,15 +18,17 @@ CalamaresUtils::EntropySource CalamaresUtils::getEntropy( int size, QByteArray& b ) { + constexpr const char filler = char( 0xcb ); + + b.fill( filler ); b.clear(); if ( size < 1 ) { return EntropySource::None; } - b.resize( size ); + b.fill( filler, size ); char* buffer = b.data(); - std::fill( buffer, buffer + size, 0xcb ); qint64 readSize = 0; QFile urandom( "/dev/urandom" ); diff --git a/src/libcalamares/utils/Entropy.h b/src/libcalamares/utils/Entropy.h index 2ab7a609d..1ca40a68f 100644 --- a/src/libcalamares/utils/Entropy.h +++ b/src/libcalamares/utils/Entropy.h @@ -1,19 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_ENTROPY_H diff --git a/src/libcalamares/utils/Logger.cpp b/src/libcalamares/utils/Logger.cpp index ceca20b7a..adb082687 100644 --- a/src/libcalamares/utils/Logger.cpp +++ b/src/libcalamares/utils/Logger.cpp @@ -1,51 +1,46 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Logger.h" -#include -#include +#include "CalamaresVersionX.h" +#include "utils/Dirs.h" #include #include #include #include +#include +#include #include #include -#include "CalamaresVersion.h" -#include "utils/Dirs.h" +#include +#include -#define LOGFILE_SIZE 1024 * 256 +static constexpr const int LOGFILE_SIZE = 1024 * 256; static std::ofstream logfile; static unsigned int s_threshold = #ifdef QT_NO_DEBUG Logger::LOG_DISABLE; #else - Logger::LOGEXTRA + 1; // Comparison is < in log() function + Logger::LOGDEBUG; // Comparison is < in log() function #endif static QMutex s_mutex; static const char s_Continuation[] = "\n "; -static const char s_SubEntry[] = " .. "; +static const char s_SubEntry[] = " .. "; namespace Logger @@ -74,9 +69,9 @@ logLevel() } static void -log( const char* msg, unsigned int debugLevel ) +log( const char* msg, unsigned int debugLevel, bool withTime = true ) { - if ( true ) + if ( logLevelEnabled( debugLevel ) ) { QMutexLocker lock( &s_mutex ); @@ -88,15 +83,13 @@ log( const char* msg, unsigned int debugLevel ) << QString::number( debugLevel ).toUtf8().data() << "]: " << msg << std::endl; logfile.flush(); - } - if ( debugLevel <= LOGEXTRA || debugLevel < s_threshold ) - { - QMutexLocker lock( &s_mutex ); - - std::cout << QTime::currentTime().toString().toUtf8().data() << " [" - << QString::number( debugLevel ).toUtf8().data() << "]: " << msg << std::endl; - std::cout.flush(); + if ( withTime ) + { + std::cout << QTime::currentTime().toString().toUtf8().data() << " [" + << QString::number( debugLevel ).toUtf8().data() << "]: "; + } + std::cout << msg << std::endl; } } @@ -110,20 +103,21 @@ CalamaresLogHandler( QtMsgType type, const QMessageLogContext&, const QString& m const char* message = ba.constData(); QMutexLocker locker( &s_mutex ); + switch ( type ) { - case QtDebugMsg: + case QtInfoMsg: log( message, LOGVERBOSE ); break; - - case QtInfoMsg: - log( message, 1 ); + case QtDebugMsg: + log( message, LOGDEBUG ); break; - - case QtCriticalMsg: case QtWarningMsg: + log( message, LOGWARNING ); + break; + case QtCriticalMsg: case QtFatalMsg: - log( message, 0 ); + log( message, LOGERROR ); break; } } @@ -183,23 +177,26 @@ CDebug::CDebug( unsigned int debugLevel, const char* func ) { if ( debugLevel <= LOGERROR ) { - m_msg = QStringLiteral( "ERROR:" ); + m_msg = QStringLiteral( "ERROR: " ); } else if ( debugLevel <= LOGWARNING ) { - m_msg = QStringLiteral( "WARNING:" ); + m_msg = QStringLiteral( "WARNING: " ); } } CDebug::~CDebug() { - if ( m_funcinfo ) + if ( logLevelEnabled( m_debugLevel ) ) { - m_msg.prepend( s_Continuation ); // Prepending, so back-to-front - m_msg.prepend( m_funcinfo ); + if ( m_funcinfo ) + { + m_msg.prepend( s_Continuation ); // Prepending, so back-to-front + m_msg.prepend( m_funcinfo ); + } + log( m_msg.toUtf8().data(), m_debugLevel, m_funcinfo ); } - log( m_msg.toUtf8().data(), m_debugLevel ); } constexpr FuncSuppressor::FuncSuppressor( const char s[] ) @@ -209,6 +206,8 @@ constexpr FuncSuppressor::FuncSuppressor( const char s[] ) const constexpr FuncSuppressor Continuation( s_Continuation ); const constexpr FuncSuppressor SubEntry( s_SubEntry ); +const constexpr NoQuote_t NoQuote {}; +const constexpr Quote_t Quote {}; QString toString( const QVariant& v ) @@ -231,4 +230,58 @@ toString( const QVariant& v ) } } +QDebug& +operator<<( QDebug& s, const RedactedCommand& l ) +{ + // Special case logging: don't log the (encrypted) password. + if ( l.list.contains( "usermod" ) ) + { + for ( const auto& item : l.list ) + if ( item.startsWith( "$6$" ) ) + { + s << ""; + } + else + { + s << item; + } + } + else + { + s << l.list; + } + + return s; +} + +/** @brief Returns a stable-but-private hash of @p context and @p s + * + * Identical strings with the same context will be hashed the same, + * so that they can be logged and still recognized as the-same. + */ +static uint +insertRedactedName( const QString& context, const QString& s ) +{ + static uint salt = QRandomGenerator::global()->generate(); // Just once + + uint val = qHash( context, salt ); + return qHash( s, val ); +} + +RedactedName::RedactedName( const QString& context, const QString& s ) + : m_id( insertRedactedName( context, s ) ) + , m_context( context ) +{ +} + +RedactedName::RedactedName( const char* context, const QString& s ) + : RedactedName( QString::fromLatin1( context ), s ) +{ +} + +RedactedName::operator QString() const +{ + return QString( m_context + '$' + QString::number( m_id, 16 ) ); +} + } // namespace Logger diff --git a/src/libcalamares/utils/Logger.h b/src/libcalamares/utils/Logger.h index fe4b98fd4..3c7de2e67 100644 --- a/src/libcalamares/utils/Logger.h +++ b/src/libcalamares/utils/Logger.h @@ -1,48 +1,52 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_LOGGER_H #define UTILS_LOGGER_H -#include - #include "DllMacro.h" +#include +#include + +#include + namespace Logger { +class Once; + struct FuncSuppressor { explicit constexpr FuncSuppressor( const char[] ); const char* m_s; }; +struct NoQuote_t +{ +}; +struct Quote_t +{ +}; + DLLEXPORT extern const FuncSuppressor Continuation; DLLEXPORT extern const FuncSuppressor SubEntry; +DLLEXPORT extern const NoQuote_t NoQuote; +DLLEXPORT extern const Quote_t Quote; enum { LOG_DISABLE = 0, LOGERROR = 1, LOGWARNING = 2, - LOGINFO = 3, - LOGEXTRA = 5, LOGDEBUG = 6, LOGVERBOSE = 8 }; @@ -53,7 +57,10 @@ public: explicit CDebug( unsigned int debugLevel = LOGDEBUG, const char* func = nullptr ); virtual ~CDebug(); - friend QDebug& operator<<( CDebug&&, const FuncSuppressor& ); + friend CDebug& operator<<( CDebug&&, const FuncSuppressor& ); + friend CDebug& operator<<( CDebug&&, const Once& ); + + inline unsigned int level() const { return m_debugLevel; } private: QString m_msg; @@ -61,11 +68,15 @@ private: const char* m_funcinfo = nullptr; }; -inline QDebug& +inline CDebug& operator<<( CDebug&& s, const FuncSuppressor& f ) { - s.m_funcinfo = nullptr; - return s << f.m_s; + if ( s.m_funcinfo ) + { + s.m_funcinfo = nullptr; + s.m_msg = QString( f.m_s ); + } + return s; } inline QDebug& @@ -74,6 +85,18 @@ operator<<( QDebug& s, const FuncSuppressor& f ) return s << f.m_s; } +inline QDebug& +operator<<( QDebug& s, const NoQuote_t& ) +{ + return s.noquote().nospace(); +} + +inline QDebug& +operator<<( QDebug& s, const Quote_t& ) +{ + return s.quote().space(); +} + /** * @brief The full path of the log file. */ @@ -125,8 +148,8 @@ public: { } - const T& first; - const U& second; + const T first; + const U second; }; /** @@ -187,6 +210,85 @@ public: const QVariantMap& map; }; +/** @brief When logging commands, don't log everything. + * + * The command-line arguments to some commands may contain the + * encrypted password set by the user. Don't log that password, + * since the log may get posted to bug reports, or stored in + * the target system. + */ +struct RedactedCommand +{ + RedactedCommand( const QStringList& l ) + : list( l ) + { + } + + const QStringList& list; +}; + +QDebug& operator<<( QDebug& s, const RedactedCommand& l ); + +/** @brief When logging "private" identifiers, keep them consistent but private + * + * Send a string to a logger in such a way that each time it is logged, + * it logs the same way, but without revealing the actual contents. + * This can be applied to user names, UUIDs, etc. + */ +struct RedactedName +{ + RedactedName( const char* context, const QString& s ); + RedactedName( const QString& context, const QString& s ); + + operator QString() const; + +private: + const uint m_id; + const QString m_context; +}; + +inline QDebug& +operator<<( QDebug& s, const RedactedName& n ) +{ + return s << NoQuote << QString( n ) << Quote; +} + +/** + * @brief Formatted logging of a pointer + * + * Pointers are printed as void-pointer, so just an address (unlike, say, + * QObject pointers which show an address and some metadata) preceded + * by an '@'. This avoids C-style (void*) casts in the code. + * + * Shared pointers are indicated by 'S@' and unique pointers by 'U@'. + */ +struct Pointer +{ +public: + explicit Pointer( const void* p ) + : ptr( p ) + , kind( 0 ) + { + } + + template < typename T > + explicit Pointer( const std::shared_ptr< T >& p ) + : ptr( p.get() ) + , kind( 'S' ) + { + } + + template < typename T > + explicit Pointer( const std::unique_ptr< T >& p ) + : ptr( p.get() ) + , kind( 'U' ) + { + } + + const void* const ptr; + const char kind; +}; + /** @brief output operator for DebugRow */ template < typename T, typename U > inline QDebug& @@ -221,8 +323,79 @@ operator<<( QDebug& s, const DebugMap& t ) } return s; } + +inline QDebug& +operator<<( QDebug& s, const Pointer& p ) +{ + s << NoQuote; + if ( p.kind ) + { + s << p.kind; + } + s << '@' << p.ptr << Quote; + return s; +} + +/** @brief Convenience object for supplying SubEntry to a debug stream + * + * In a function with convoluted control paths, it may be unclear + * when to supply SubEntry to a debug stream -- it is convenient + * for the **first** debug statement from a given function to print + * the function header, and all subsequent onces to get SubEntry. + * + * Create an object of type Once and send it (first) to all CDebug + * objects; this will print the function header only once within the + * lifetime of that Once object. + */ +class Once +{ +public: + Once() + : m( true ) + { + } + friend CDebug& operator<<( CDebug&&, const Once& ); + + /** @brief Restore the object to "fresh" state + * + * It may be necessary to allow the Once object to stream the + * function header again -- for instance, after logging an error, + * any following debug log might want to re-introduce the header. + */ + void refresh() { m = true; } + + /** @brief Is this object "fresh"? + * + * Once a Once-object has printed (once) it is no longer fresh. + */ + operator bool() const { return m; } + +private: + mutable bool m = false; +}; + +inline CDebug& +operator<<( CDebug&& s, const Once& o ) +{ + if ( !logLevelEnabled( s.level() ) ) + { + // This won't print, so it's not using the "onceness" + return s; + } + + if ( o.m ) + { + o.m = false; + return s; + } + s.m_funcinfo = nullptr; + s << SubEntry; + return s; +} + } // namespace Logger +#define cVerbose() Logger::CDebug( Logger::LOGVERBOSE, Q_FUNC_INFO ) #define cDebug() Logger::CDebug( Logger::LOGDEBUG, Q_FUNC_INFO ) #define cWarning() Logger::CDebug( Logger::LOGWARNING, Q_FUNC_INFO ) #define cError() Logger::CDebug( Logger::LOGERROR, Q_FUNC_INFO ) diff --git a/src/libcalamares/utils/NamedEnum.h b/src/libcalamares/utils/NamedEnum.h index 76c8ed3bb..1462cc0ff 100644 --- a/src/libcalamares/utils/NamedEnum.h +++ b/src/libcalamares/utils/NamedEnum.h @@ -1,29 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @brief Support for "named" enumerations * - * For tables which map string names to enum values, provide a NamedEnumTable - * which hangs on to an initializer_list of pairs of names and values. - * This table can be used with find() to map names to values, or - * values to names. A convenience function smash() is provided to help - * in printing integer (underlying) values of an enum. + * When a string needs to be one specific string out of a set of + * alternatives -- one "name" from an enumerated set -- then it + * is useful to have an **enum type** for the enumeration so that + * C++ code can work with the (strong) type of the enum, while + * the string can be used for human-readable interaction. + * The `NamedEnumTable` template provides support for naming + * values of an enum. */ #ifndef UTILS_NAMEDENUM_H @@ -35,7 +29,100 @@ #include #include -/** @brief Type for collecting parts of a named enum. */ +/** @brief Type for collecting parts of a named enum. + * + * The `NamedEnumTable` template provides support for naming + * values of an enum. It supports mapping strings to enum values + * and mapping enum values to strings. + * + * ## Example + * + * Suppose we have code where there are three alternatives; it is + * useful to have a strong type to make the alternatives visible + * in that code, so the compiler can help check: + * + * ``` + * enum class MilkshakeSize { None, Small, Large }; + * ``` + * + * In a switch() statement, the compiler will check that all kinds + * of milkshakes are dealt with; we can pass a MilkshakeSize to + * a function and rest assured that nobody will call that function + * with a silly value, like `1`. + * + * There is no relation between the C++ identifiers used, and + * any I/O related to that enumeration. In other words, + * + * ``` + * std::cout << MilkshakeSize::Small; + * ``` + * + * Will **not** print out "Small", or "small", or 1. It won't even + * compile, because there is no mapping of the enum values to + * something that can be output. + * + * By making a `NamedEnumTable` we can define a mapping + * between strings (names) and enum values, so that we can easily + * output the human-readable name, and also take string input + * and convert it to an enum value. Suppose we have a function + * `milkshakeSizeNames()` that returns a reference to such a table, + * then we can use `find()` to map enums-to-names and names-to-enums. + * + * ``` + * const auto& names = milkshakeSizeNames(); + * MilkshakeSize sz{ MilkshakeSize::Large }; + * std::cout << names.find(sz); // Probably "large" + * + * bool ok; + * sz = names.find( "small", ok ); // Probably MilkshakeSize::Small + * ``` + * + * ## Usage + * + * It is recommended to use a static const declaration for the table; + * typical use will define a function that returns a reference to + * the table, for shared use. + * + * The constructor for a table takes an initializer_list; each element + * of the initializer_list is a **pair** consisting of a name and + * an associated enum value. The names should be QStrings. For each enum + * value that is listed, the canonical name should come **first** in the + * table, so that printing the enum values gives the canonical result. + * + * ``` + * static const NamedEnumTable& milkshakeSizeNames() + * { + * static NamedEnumTable n { // Initializer list for n + * { "large", MilkshakeSize::Large }, // One pair of name-and-value + * { "small", MilkshakeSize::Small }, + * { "big", MilkshakeSize::Large } + * }; + * return n; + * } + * ``` + * + * The function `eNames()`, above, returns a reference to a name table + * for the enum (presumably an enum class) `E`. It is possible to have + * more than one table for an enum, or to make the table locally, + * but **usually** you want one definitive table of names and values. + * The `eNames()` function gives you that definitive table. In Calamres + * code, such functions are usually named after the underlying enum. + * + * Using this particular table, looking up "large" will return `MilkshakeSize::Large`, + * looking up "big" will **also** return `MilkshakeSize::Large`, looking up "derp" + * will return `MilkshakeSize::Large` (because that is the first value in the table) + * but will set the boolean `ok` parameter to false. Conversely, looking + * up `MilkshakeSize::Large` will return "large" (never "big"). + * + * Note that this particular table does **not** name MilkshakeSize::None, + * so it is probably wrong: you can't get a string for that enum + * value, and no string will map to MilkshakeSize::None either. + * In general, tables should cover all of the enum values. + * + * Passing an empty initializer_list to the constructor is supported, + * but will cause UB if the table is ever used for looking up a string. + * + */ template < typename T > struct NamedEnumTable { @@ -51,7 +138,9 @@ struct NamedEnumTable * Use braced-initialisation for NamedEnum, and remember that the * elements of the list are **pairs**, e.g. * + * ``` * static const NamedEnumTable c{ {"red", Colors::Red } }; + * ``` */ NamedEnumTable( const std::initializer_list< pair_t >& v ) : table( v ) @@ -63,10 +152,12 @@ struct NamedEnumTable * * Searches case-insensitively. * - * If the name @p s is not found, @p ok is set to false and + * If the name @p s is not found, @p ok is set to @c false and * the first enum value in the table is returned. Otherwise, - * @p ok is set to true and the corresponding value is returned. - * + * @p ok is set to @c true and the corresponding value is returned. + * Use the output value of @p ok to determine if the lookup was + * successful: there is otherwise no sensible way to distinguish + * found-the-name-of-the-first-item from not-found. */ enum_t find( const string_t& s, bool& ok ) const { @@ -83,11 +174,33 @@ struct NamedEnumTable return table.begin()->second; } - /** @brief Find a value @p s in the table. + /** @brief Find a name @p s in the table. * - * If the value @p s is not found, @p ok is set to false and - * an empty string is returned. Otherwise, @p is set to true - * and the corresponding name is returned. + * Searches case-insensitively. + * + * If the name @p s is not found, the value @p d is returned as + * a default. Otherwise the value corresponding to @p s is returned. + * This is a shortcut over find() using a bool to distinguish + * successful and unsuccesful lookups. + */ + enum_t find( const string_t& s, enum_t d ) const + { + bool ok = false; + enum_t e = find( s, ok ); + return ok ? e : d; + } + + /** @brief Find a value @p s in the table and return its name. + * + * If @p s is an enum value in the table, return the corresponding + * name (the first name with that value, if there are aliases) + * and set @p ok to @c true. + * + * If the value @p s is not found, @p ok is set to @c false and + * an empty string is returned. This indicates that the table does + * not cover all of the values * in `enum_t` (and @p s is one + * of them), **or** that the passed-in value of @p s is + * not a legal value, e.g. via a static_cast. */ string_t find( enum_t s, bool& ok ) const { @@ -103,9 +216,39 @@ struct NamedEnumTable // ok is still false return string_t(); } + + /** @brief Find a value @p s in the table and return its name. + * + * Returns an empty string if the value @p s is not found (this + * indicates that the table does not cover all of the values + * in `enum_t`, **or** that the passed-in value of @p s is + * not a legal value, e.g. via a static_cast). + */ + string_t find( enum_t s ) const + { + bool ok = false; + return find( s, ok ); + } }; -/** @brief Smashes an enum value to its underlying type. */ +/** @brief Smashes an enum value to its underlying type. + * + * While an enum **class** is not an integral type, and its values can't be + * printed or treated like an integer (like an old-style enum can), + * the underlying type **is** integral. This template function + * returns the value of an enum value, in its underlying type. + * This can be useful for debugging purposes, e.g. + * + * ``` + * MilkshakeSize sz{ MilkshakeSize::None }; + * std::cout << milkshakeSizeNames().find( sz ) << smash( sz ); + * ``` + * + * This will print both the name and the underlying integer for the + * value; assuming the table from the example is used, there is + * no name for MilkshakeSize::None, so it will print an empty string, + * followed by the integral representation -- probably a 0. + */ template < typename E > constexpr typename std::underlying_type< E >::type smash( const E e ) diff --git a/src/libcalamares/utils/NamedSuffix.h b/src/libcalamares/utils/NamedSuffix.h index 8ad52edea..84094e90c 100644 --- a/src/libcalamares/utils/NamedSuffix.h +++ b/src/libcalamares/utils/NamedSuffix.h @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @brief Support for unit-suffixed values. diff --git a/src/libcalamares/utils/Permissions.cpp b/src/libcalamares/utils/Permissions.cpp new file mode 100644 index 000000000..789746843 --- /dev/null +++ b/src/libcalamares/utils/Permissions.cpp @@ -0,0 +1,125 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2018 Scott Harvey + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "Permissions.h" + +#include "CalamaresUtilsSystem.h" +#include "Logger.h" + +#include +#include + +#include + +namespace CalamaresUtils +{ + +Permissions::Permissions() + : m_username() + , m_group() + , m_value( 0 ) + , m_valid( false ) +{ +} + + +Permissions::Permissions( QString const& p ) + : Permissions() +{ + parsePermissions( p ); +} + +void +Permissions::parsePermissions( QString const& p ) +{ + + QStringList segments = p.split( ":" ); + + if ( segments.length() != 3 ) + { + m_valid = false; + return; + } + + if ( segments[ 0 ].isEmpty() || segments[ 1 ].isEmpty() ) + { + m_valid = false; + return; + } + + bool ok; + int octal = segments[ 2 ].toInt( &ok, 8 ); + if ( !ok || octal == 0 ) + { + m_valid = false; + return; + } + else + { + m_value = octal; + } + + // We have exactly three segments and the third is valid octal, + // so we can declare the string valid and set the user and group names + m_valid = true; + m_username = segments[ 0 ]; + m_group = segments[ 1 ]; + + return; +} + +bool +Permissions::apply( const QString& path, int mode ) +{ + // We **don't** use QFile::setPermissions() here because it takes + // a Qt flags object that subtlely does not align with POSIX bits. + // The Qt flags are **hex** based, so 0x755 for rwxr-xr-x, while + // our integer (mode_t) stores **octal** based flags. + // + // Call chmod(2) directly, that's what Qt would be doing underneath + // anyway. + int r = chmod( path.toUtf8().constData(), mode_t( mode ) ); + if ( r ) + { + cDebug() << Logger::SubEntry << "Could not set permissions of" << path << "to" << QString::number( mode, 8 ); + } + return r == 0; +} + +bool +Permissions::apply( const QString& path, const CalamaresUtils::Permissions& p ) +{ + if ( !p.isValid() ) + { + return false; + } + bool r = apply( path, p.value() ); + if ( r ) + { + // We don't use chgrp(2) or chown(2) here because then we need to + // go through the users list (which one, target or source?) to get + // uid_t and gid_t values to pass to that system call. + // + // Do a lame cop-out and let the chown(8) utility do the heavy lifting. + if ( CalamaresUtils::System::runCommand( { "chown", p.username() + ':' + p.group(), path }, + std::chrono::seconds( 3 ) ) + .getExitCode() ) + { + r = false; + cDebug() << Logger::SubEntry << "Could not set owner of" << path << "to" + << ( p.username() + ':' + p.group() ); + } + } + if ( r ) + { + /* NOTUSED */ apply( path, p.value() ); + } + return r; +} + + +} // namespace CalamaresUtils diff --git a/src/libcalamares/utils/Permissions.h b/src/libcalamares/utils/Permissions.h new file mode 100644 index 000000000..11d1d4bab --- /dev/null +++ b/src/libcalamares/utils/Permissions.h @@ -0,0 +1,95 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2018 Scott Harvey + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#ifndef LIBCALAMARES_PERMISSIONS_H +#define LIBCALAMARES_PERMISSIONS_H + +#include "DllMacro.h" + +#include + +namespace CalamaresUtils +{ + +/** + * @brief The Permissions class takes a QString @p in the form of + * ::, checks it for validity, and makes the three + * components available indivdually. + */ +class DLLEXPORT Permissions +{ + +public: + /** @brief Constructor + * + * Splits the string @p at the colon (":") into separate elements for + * , , and (permissions), where is interpreted + * as an **octal** integer. That is, "root:wheel:755" will give + * you an integer value of four-hundred-ninety-three (493), + * corresponding to the UNIX file permissions rwxr-xr-x, + * as one would expect from chmod and other command-line utilities. + */ + Permissions( QString const& p ); + + /// @brief Default constructor of an invalid Permissions. + Permissions(); + + /// @brief Was the Permissions object constructed from valid data? + bool isValid() const { return m_valid; } + /// @brief The user (first component, e.g. "root" in "root:wheel:755") + QString username() const { return m_username; } + /// @brief The group (second component, e.g. "wheel" in "root:wheel:755") + QString group() const { return m_group; } + /** @brief The value (file permission) as an integer. + * + * Bear in mind that input is in octal, but integers are just integers; + * naively printing them will get decimal results (e.g. 493 from the + * input of "root:wheel:755"). This is suitable to pass to apply(). + */ + int value() const { return m_value; } + /** @brief The value (file permission) as octal string + * + * This is suitable for passing to chmod-the-program, or for + * recreating the original Permissions string. + */ + QString octal() const { return QString::number( value(), 8 ); } + + /** @brief Sets the file-access @p mode of @p path + * + * Pass a path that is relative (or absolute) in the **host** system. + * + * @return @c true on success + */ + static bool apply( const QString& path, int mode ); + /** @brief Do both chmod and chown on @p path + * + * Note that interpreting user- and group- names for applying the + * permissions can be different between the host system and the target + * system; the target might not have a "live" user, for instance, and + * the host won't have the user-entered username for the installation. + * + * For this call, the names are interpreted in the **host** system. + * Pass a path that is relative (or absolute) in the **host** system. + * + * @return @c true on success of **both** operations + */ + static bool apply( const QString& path, const Permissions& p ); + /// Convenience method for apply(const QString&, const Permissions& ) + bool apply( const QString& path ) const { return apply( path, *this ); } + +private: + void parsePermissions( QString const& p ); + + QString m_username; + QString m_group; + int m_value; + bool m_valid; +}; + +} // namespace CalamaresUtils + +#endif // LIBCALAMARES_PERMISSIONS_H diff --git a/src/libcalamares/utils/PluginFactory.cpp b/src/libcalamares/utils/PluginFactory.cpp index 50b88ebfd..9f26a8a1c 100644 --- a/src/libcalamares/utils/PluginFactory.cpp +++ b/src/libcalamares/utils/PluginFactory.cpp @@ -1,6 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. * - * Copyright 2019, Adriaan de Groot * */ diff --git a/src/libcalamares/utils/PluginFactory.h b/src/libcalamares/utils/PluginFactory.h index 65ee6eee9..a3371dd72 100644 --- a/src/libcalamares/utils/PluginFactory.h +++ b/src/libcalamares/utils/PluginFactory.h @@ -1,24 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Based on KPluginFactory from KCoreAddons, KDE project - * Copyright 2007, Matthias Kretz - * Copyright 2007, Bernhard Loos + * SPDX-FileCopyrightText: 2007 Matthias Kretz + * SPDX-FileCopyrightText: 2007 Bernhard Loos * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_PLUGINFACTORY_H @@ -96,7 +88,7 @@ public: Q_PLUGIN_METADATA( IID CalamaresPluginFactory_iid ) \ public: \ explicit name(); \ - ~name(); \ + ~name() override; \ }; #define CALAMARES_PLUGIN_FACTORY_DEFINITION( name, pluginRegistrations ) \ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY( name, CalamaresPluginFactory, pluginRegistrations ) diff --git a/src/libcalamares/utils/RAII.h b/src/libcalamares/utils/RAII.h index 4d8210a25..8d4a9073b 100644 --- a/src/libcalamares/utils/RAII.h +++ b/src/libcalamares/utils/RAII.h @@ -1,43 +1,112 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_RAII_H #define UTILS_RAII_H #include +#include +#include #include -/// @brief Convenience to zero out and deleteLater of any QObject-derived-class +/** @brief Convenience to zero out and deleteLater of any QObject-derived-class + * + * If, before destruction, preserve is set to @c true, then + * the object is "preserved", and not deleted at all. + */ template < typename T > struct cqDeleter { T*& p; + bool preserve = false; ~cqDeleter() { static_assert( std::is_base_of< QObject, T >::value, "Not a QObject-class" ); - if ( p ) + if ( !preserve ) { - p->deleteLater(); + if ( p ) + { + p->deleteLater(); + } + p = nullptr; } - p = nullptr; } }; +/// @brief Blocks signals on a QObject until destruction +using cSignalBlocker = QSignalBlocker; + +/** @brief Writes a value on destruction to a pointed-to location. + * + * If the pointer is non-null, write the last-given-value if there + * is one to the pointed-to object. This is called the "then-value". + * + */ +template < typename T > +struct cScopedAssignment +{ + std::optional< T > m_value; + T* m_pointer; + + /** @brief Create a setter with no value set + * + * Until a value is set via operator=(), this pointer-setter + * will do nothing on destruction, leaving the pointed-to + * value unchanged. + */ + cScopedAssignment( T* p ) + : m_pointer( p ) + { + } + /** @brief Create a setter with a then-value already set + * + * This ensures that on destruction, the value @p v will be written; + * it is equivalent to assigning @p v immediately. The pointed-to + * value is **not** changed (until destruction). + */ + cScopedAssignment( T* p, T then ) + : m_value( then ) + , m_pointer( p ) + { + } + /** @brief Create a setter with a then-value and assign a new value now + * + * As above, but also assign @p now to the thing pointed-to. + */ + cScopedAssignment( T* p, T now, T then ) + : m_value( then ) + , m_pointer( p ) + { + if ( p ) + { + *p = now; + } + } + + ~cScopedAssignment() + { + if ( m_pointer && m_value.has_value() ) + { + *m_pointer = m_value.value(); + } + } + + const T& operator=( const T& then ) + { + m_value = then; + return then; + } +}; + +template < typename T > +cScopedAssignment( T p ) -> cScopedAssignment< decltype( *p ) >; #endif diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index 4cd618d97..74617fa47 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Retranslator.h" @@ -27,6 +19,9 @@ #include #include +namespace +{ + static bool s_allowLocalTranslations = false; /** @brief Helper class for loading translations @@ -36,29 +31,8 @@ static bool s_allowLocalTranslations = false; */ struct TranslationLoader { - static QString mungeLocaleName( const QLocale& locale ) - { - QString localeName = locale.name(); - localeName.replace( "-", "_" ); - - if ( localeName == "C" ) - { - localeName = "en"; - } - - // Special case of sr@latin - // - // See top-level CMakeLists.txt about special cases for translation loading. - if ( locale.language() == QLocale::Language::Serbian && locale.script() == QLocale::Script::LatinScript ) - { - localeName = QStringLiteral( "sr@latin" ); - } - return localeName; - } - - TranslationLoader( const QLocale& locale ) - : m_locale( locale ) - , m_localeName( mungeLocaleName( locale ) ) + TranslationLoader( const QString& locale ) + : m_localeName( locale ) { } @@ -66,14 +40,13 @@ struct TranslationLoader /// @brief Loads @p translator with the specific translations of this type virtual bool tryLoad( QTranslator* translator ) = 0; - const QLocale& m_locale; QString m_localeName; }; /// @brief Loads translations for branding struct BrandingLoader : public TranslationLoader { - BrandingLoader( const QLocale& locale, const QString& prefix ) + BrandingLoader( const QString& locale, const QString& prefix ) : TranslationLoader( locale ) , m_prefix( prefix ) { @@ -114,14 +87,14 @@ BrandingLoader::tryLoad( QTranslator* translator ) { QString filenameBase( m_prefix ); filenameBase.remove( 0, m_prefix.lastIndexOf( QDir::separator() ) + 1 ); - if ( translator->load( m_locale, filenameBase, "_", brandingTranslationsDir.absolutePath() ) ) + if ( translator->load( m_localeName, filenameBase, "_", brandingTranslationsDir.absolutePath() ) ) { cDebug() << Logger::SubEntry << "Branding using locale:" << m_localeName; return true; } else { - cDebug() << Logger::SubEntry << "Branding using default, system locale not found:" << m_localeName; + cDebug() << Logger::SubEntry << "Branding no translation for" << m_localeName << "using default (en)"; // TODO: this loads something completely different return translator->load( m_prefix + "en" ); } @@ -176,19 +149,21 @@ TZLoader::tryLoad( QTranslator* translator ) static void loadSingletonTranslator( TranslationLoader&& loader, QTranslator*& translator_p ) { - QTranslator* translator = new QTranslator(); - loader.tryLoad( translator ); - - if ( translator_p ) + if ( !translator_p ) { - QCoreApplication::removeTranslator( translator_p ); - delete translator_p; + QTranslator* translator = new QTranslator(); + loader.tryLoad( translator ); + QCoreApplication::installTranslator( translator ); + translator_p = translator; + } + else + { + loader.tryLoad( translator_p ); } - - QCoreApplication::installTranslator( translator ); - translator_p = translator; } +} // namespace + namespace CalamaresUtils { static QTranslator* s_brandingTranslator = nullptr; @@ -197,72 +172,63 @@ static QTranslator* s_tztranslator = nullptr; static QString s_translatorLocaleName; void -installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix ) +installTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& brandingTranslationsPrefix ) { - loadSingletonTranslator( BrandingLoader( locale, brandingTranslationsPrefix ), s_brandingTranslator ); - loadSingletonTranslator( TZLoader( locale ), s_tztranslator ); + s_translatorLocaleName = locale.name; - CalamaresLoader l( locale ); // because we want the extracted localeName - loadSingletonTranslator( std::move( l ), s_translator ); - s_translatorLocaleName = l.m_localeName; -} - - -QString -translatorLocaleName() -{ - return s_translatorLocaleName; -} - -Retranslator* -Retranslator::retranslatorFor( QObject* parent ) -{ - Retranslator* r = nullptr; - for ( QObject* child : parent->children() ) - { - r = qobject_cast< Retranslator* >( child ); - if ( r ) - { - return r; - } - } - - return new Retranslator( parent ); + loadSingletonTranslator( BrandingLoader( locale.name, brandingTranslationsPrefix ), s_brandingTranslator ); + loadSingletonTranslator( TZLoader( locale.name ), s_tztranslator ); + loadSingletonTranslator( CalamaresLoader( locale.name ), s_translator ); } void -Retranslator::attachRetranslator( QObject* parent, std::function< void( void ) > retranslateFunc ) +installTranslator() { - retranslatorFor( parent )->m_retranslateFuncList.append( retranslateFunc ); - retranslateFunc(); + installTranslator( CalamaresUtils::Locale::Translation().id(), QString() ); } +CalamaresUtils::Locale::Translation::Id +translatorLocaleName() +{ + return { s_translatorLocaleName }; +} + +bool +loadTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& prefix, QTranslator* translator ) +{ + return ::tryLoad( translator, prefix, locale.name ); +} Retranslator::Retranslator( QObject* parent ) : QObject( parent ) { - parent->installEventFilter( this ); } - bool Retranslator::eventFilter( QObject* obj, QEvent* e ) { - if ( obj == parent() ) + if ( e->type() == QEvent::LanguageChange ) { - if ( e->type() == QEvent::LanguageChange ) - { - foreach ( std::function< void() > func, m_retranslateFuncList ) - { - func(); - } - emit languageChange(); - } + emit languageChanged(); } // pass the event on to the base return QObject::eventFilter( obj, e ); } +Retranslator* +Retranslator::instance() +{ + static Retranslator s_instance( nullptr ); + return &s_instance; +} + +void +Retranslator::attach( QObject* o, std::function< void() > f ) +{ + connect( instance(), &Retranslator::languageChanged, o, f ); + f(); +} + void setAllowLocalTranslation( bool allow ) { diff --git a/src/libcalamares/utils/Retranslator.h b/src/libcalamares/utils/Retranslator.h index d62a3b751..94eba8b1c 100644 --- a/src/libcalamares/utils/Retranslator.h +++ b/src/libcalamares/utils/Retranslator.h @@ -1,27 +1,19 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_RETRANSLATOR_H #define UTILS_RETRANSLATOR_H #include "DllMacro.h" +#include "locale/Translation.h" -#include #include #include @@ -29,17 +21,44 @@ class QEvent; class QLocale; +class QTranslator; namespace CalamaresUtils { -/** - * @brief installTranslator changes the application language. - * @param locale the new locale. +/** @brief changes the application language. + * @param locale the new locale (names as defined by Calamares). * @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding. */ -DLLEXPORT void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix ); +DLLEXPORT void installTranslator( const CalamaresUtils::Locale::Translation::Id& locale, + const QString& brandingTranslationsPrefix ); -DLLEXPORT QString translatorLocaleName(); +/** @brief Initializes the translations with the current system settings + */ +DLLEXPORT void installTranslator(); + +/** @brief The name of the (locale of the) most recently installed translator + * + * May return something different from the locale.name() of the + * QLocale passed in, because Calamares will munge some names and + * may remap translations. + */ +DLLEXPORT CalamaresUtils::Locale::Translation::Id translatorLocaleName(); + +/** @brief Loads translations into the given @p translator + * + * This function is not intended for general use: it is for those special + * cases where modules need their own translator / translations for data + * that is locale to the module. Tries to load a .qm from "sensible" + * locations, which are the same ones that installTranslator() would use. + * Takes local-translations into account. + * + * Note that @p prefix should end with an underscore '_' -- this function + * does not introduce one by itself. + * + * @returns @c true on success + */ +DLLEXPORT bool +loadTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& prefix, QTranslator* translator ); /** @brief Set @p allow to true to load translations from current dir. * @@ -50,42 +69,82 @@ DLLEXPORT QString translatorLocaleName(); */ DLLEXPORT void setAllowLocalTranslation( bool allow ); + +/** @brief Handles change-of-language events + * + * There is one single Retranslator object. Use `instance()` to get it. + * The top-level widget of the application should call + * `installEventFilter( Retranslator::instance() )` + * to set up event-handling for translation events. The Retranslator + * will emit signal `languageChanged()` if there is such an event. + * + * Normal consumers should not have to use the Retranslator directly, + * but use the macros `CALAMARES_RETRANSLATE*` to set things up + * in code -- the macros will connect to the Retranslator's signals. + */ class Retranslator : public QObject { Q_OBJECT public: - /// @brief Call @p retranslateFunc when the language changes - static void attachRetranslator( QObject* parent, std::function< void( void ) > retranslateFunc ); - /// @brief What retranslator belongs to @p parent (may create one) - static Retranslator* retranslatorFor( QObject* parent ); + /// @brief Gets the global (single) Retranslator object + static Retranslator* instance(); - /// @brief Call @p retranslateFunc when the language changes - void addRetranslateFunc( std::function< void( void ) > retranslateFunc ); + /// @brief Helper function for attaching lambdas + static void attach( QObject* o, std::function< void( void ) > f ); signals: - void languageChange(); + void languageChanged(); protected: bool eventFilter( QObject* obj, QEvent* e ) override; private: explicit Retranslator( QObject* parent ); - - QList< std::function< void( void ) > > m_retranslateFuncList; }; } // namespace CalamaresUtils -#define CALAMARES_RETRANSLATE( body ) CalamaresUtils::Retranslator::attachRetranslator( this, [=] { body } ); -#define CALAMARES_RETRANSLATE_WIDGET( widget, body ) \ - CalamaresUtils::Retranslator::attachRetranslator( widget, [=] { body } ); +/** @brief Call code for this object when language changes + * + * @p body should be a code block (it does not need braces) that can be wrapped + * up as a lambda. When the language changes, the lambda is called. Note that + * this macro should be used in constructors or other code that is run only + * once, since otherwise you will end up with multiple calls to @p body. + * + * NOTE: unlike plain QObject::connect(), the body is **also** called + * immediately after setting up the connection. This allows + * setup and translation code to be mixed together. + */ +#define CALAMARES_RETRANSLATE( body ) CalamaresUtils::Retranslator::attach( this, [ = ] { body } ) +/** @brief Call code for the given object (widget) when language changes + * + * This is identical to CALAMARES_RETRANSLATE, except the @p body is called + * for the given object, not this object. + * + * NOTE: unlike plain QObject::connect(), the body is **also** called + * immediately after setting up the connection. This allows + * setup and translation code to be mixed together. + */ +#define CALAMARES_RETRANSLATE_FOR( object, body ) CalamaresUtils::Retranslator::attach( object, [ = ] { body } ) +/** @brief Call a slot in this object when language changes + * + * Given a slot (in method-function-pointer notation), call that slot when the + * language changes. This is shorthand for connecting the Retranslator's + * signal to the given slot. + * + * NOTE: unlike plain QObject::connect(), the slot is **also** called + * immediately after setting up the connection. This allows + * setup and translation code to be mixed together. + */ #define CALAMARES_RETRANSLATE_SLOT( slotfunc ) \ + do \ { \ - this->connect( CalamaresUtils::Retranslator::retranslatorFor( this ), \ - &CalamaresUtils::Retranslator::languageChange, \ - this, \ - slotfunc ); \ - } + connect( CalamaresUtils::Retranslator::instance(), \ + &CalamaresUtils::Retranslator::languageChanged, \ + this, \ + slotfunc ); \ + ( this->*slotfunc )(); \ + } while ( false ) #endif diff --git a/src/libcalamares/utils/Runner.cpp b/src/libcalamares/utils/Runner.cpp new file mode 100644 index 000000000..d45836334 --- /dev/null +++ b/src/libcalamares/utils/Runner.cpp @@ -0,0 +1,242 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#include "Runner.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "Settings.h" +#include "utils/Logger.h" + +#include + +/** @brief Descend from directory, always relative + * + * If @p subdir begins with a "/" or "../" or "./" those are stripped + * until none are left, then changes @p directory into that + * subdirectory. + * + * Returns @c false if the @p subdir doesn't make sense. + */ +STATICTEST bool +relativeChangeDirectory( QDir& directory, const QString& subdir ) +{ + const QString rootPath = directory.absolutePath(); + const QString concatenatedPath = rootPath + '/' + subdir; + const QString relPath = QDir::cleanPath( concatenatedPath ); + + if ( !relPath.startsWith( rootPath ) ) + { + cWarning() << "Relative path" << subdir << "escapes from" << rootPath; + return false; + } + + return directory.cd( relPath ); +} + + +STATICTEST std::pair< bool, QDir > +calculateWorkingDirectory( Calamares::Utils::RunLocation location, const QString& directory ) +{ + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + + if ( location == Calamares::Utils::RunLocation::RunInTarget ) + { + if ( !gs || !gs->contains( "rootMountPoint" ) ) + { + cWarning() << "No rootMountPoint in global storage, while RunInTarget is specified"; + return std::make_pair( false, QDir() ); + } + + QDir rootMountPoint( gs->value( "rootMountPoint" ).toString() ); + if ( !rootMountPoint.exists() ) + { + cWarning() << "rootMountPoint points to a dir which does not exist"; + return std::make_pair( false, QDir() ); + } + + if ( !directory.isEmpty() ) + { + + if ( !relativeChangeDirectory( rootMountPoint, directory ) || !rootMountPoint.exists() ) + { + cWarning() << "Working directory" << directory << "does not exist in target"; + return std::make_pair( false, QDir() ); + } + } + return std::make_pair( true, rootMountPoint ); // Now changed to subdir + } + else + { + QDir root; + if ( !directory.isEmpty() ) + { + root = QDir::root(); + + if ( !relativeChangeDirectory( root, directory ) || !root.exists() ) + { + cWarning() << "Working directory" << directory << "does not exist in host"; + return std::make_pair( false, QDir() ); + } + } + return std::make_pair( true, root ); // Now changed to subdir + } +} + +namespace Calamares +{ +namespace Utils +{ + +Runner::Runner() {} + + +} // namespace Utils +} // namespace Calamares + + +Calamares::Utils::Runner::Runner( const QStringList& command ) +{ + setCommand( command ); +} + +Calamares::Utils::Runner::~Runner() {} + +Calamares::Utils::ProcessResult +Calamares::Utils::Runner::run() +{ + if ( m_command.isEmpty() ) + { + cWarning() << "Cannot run an empty program list"; + return ProcessResult::Code::FailedToStart; + } + + auto [ ok, workingDirectory ] = calculateWorkingDirectory( m_location, m_directory ); + if ( !ok || !workingDirectory.exists() ) + { + // Warnings have already been printed + return ProcessResult::Code::NoWorkingDirectory; + } + + QProcess process; + // Make the process run in "C" locale so we don't get issues with translation + { + auto env = QProcessEnvironment::systemEnvironment(); + env.insert( "LC_ALL", "C" ); + process.setProcessEnvironment( env ); + } + process.setProcessChannelMode( QProcess::MergedChannels ); + if ( !m_directory.isEmpty() ) + { + process.setWorkingDirectory( workingDirectory.absolutePath() ); + } + if ( m_location == RunLocation::RunInTarget ) + { + process.setProgram( "chroot" ); + process.setArguments( QStringList { workingDirectory.absolutePath() } << m_command ); + } + else + { + process.setProgram( "env" ); + process.setArguments( m_command ); + } + + if ( m_output ) + { + connect( &process, + &QProcess::readyReadStandardOutput, + [ this, &process ]() + { + do + { + QString s = process.readLine(); + if ( !s.isEmpty() ) + { + Q_EMIT this->output( s ); + } + } while ( process.canReadLine() ); + } ); + } + + cDebug() << Logger::SubEntry << "Running" << Logger::RedactedCommand( m_command ); + process.start(); + if ( !process.waitForStarted() ) + { + cWarning() << "Process" << m_command.first() << "failed to start" << process.error(); + return ProcessResult::Code::FailedToStart; + } + + if ( !m_input.isEmpty() ) + { + process.write( m_input.toLocal8Bit() ); + } + process.closeWriteChannel(); + + if ( !process.waitForFinished( m_timeout > std::chrono::seconds::zero() + ? ( static_cast< int >( std::chrono::milliseconds( m_timeout ).count() ) ) + : -1 ) ) + { + cWarning() << "Process" << m_command.first() << "timed out after" << m_timeout.count() << "ms. Output so far:\n" + << Logger::NoQuote << process.readAllStandardOutput(); + return ProcessResult::Code::TimedOut; + } + + QString output = m_output ? QString() : QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed(); + if ( m_output ) + { + // Try to read trailing output, if any + do + { + output = process.readLine(); + if ( !output.isEmpty() ) + { + Q_EMIT this->output( output ); + } + } while ( !output.isEmpty() ); + output = process.readAllStandardOutput(); + if ( !output.isEmpty() ) + { + cWarning() << "Some process output left-over"; + Q_EMIT this->output( output ); + } + } + + if ( process.exitStatus() == QProcess::CrashExit ) + { + cWarning() << "Process" << m_command.first() << "crashed. Output so far:\n" << Logger::NoQuote << output; + return ProcessResult::Code::Crashed; + } + + auto r = process.exitCode(); + const bool showDebug = ( !Calamares::Settings::instance() ) || ( Calamares::Settings::instance()->debugMode() ); + if ( r == 0 ) + { + if ( showDebug && !output.isEmpty() ) + { + cDebug() << Logger::SubEntry << "Finished. Exit code:" << r << "output:\n" << Logger::NoQuote << output; + } + } + else // if ( r != 0 ) + { + if ( !output.isEmpty() ) + { + cDebug() << Logger::SubEntry << "Target cmd:" << Logger::RedactedCommand( m_command ) << "Exit code:" << r + << "output:\n" + << Logger::NoQuote << output; + } + else + { + cDebug() << Logger::SubEntry << "Target cmd:" << Logger::RedactedCommand( m_command ) << "Exit code:" << r + << "(no output)"; + } + } + return ProcessResult( r, output ); +} diff --git a/src/libcalamares/utils/Runner.h b/src/libcalamares/utils/Runner.h new file mode 100644 index 000000000..155375bbe --- /dev/null +++ b/src/libcalamares/utils/Runner.h @@ -0,0 +1,135 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#ifndef UTILS_RUNNER_H +#define UTILS_RUNNER_H + +#include "CalamaresUtilsSystem.h" + +#include +#include +#include + +#include +#include +#include + +namespace Calamares +{ +namespace Utils +{ + +using RunLocation = CalamaresUtils::System::RunLocation; +using ProcessResult = CalamaresUtils::ProcessResult; + +/** @brief A Runner wraps a process and handles running it and processing output + * + * This is basically a QProcess, but handles both running in the + * host system (through env(1)) or in the target (by calling chroot(8)). + * It has an output signal that handles output one line at a time + * (unlike QProcess that lets you do the buffering yourself). + * This output processing is only enabled if you do so explicitly. + * + * Use the set*() methods to configure the runner. + * + * If you call enableOutputProcessing(), then you can connect to + * the output() signal to receive each line (including trailing newline!). + * + * Processes are always run with LC_ALL and LANG set to "C". + */ +class Runner : public QObject +{ + Q_OBJECT + +public: + /** @brief Create an empty runner + * + * This is a runner with no commands, nothing; call set*() methods + * to configure it. + */ + Runner(); + /** @brief Create a runner with a specified command + * + * Equivalent to Calamares::Utils::Runner::Runner() followed by + * calling setCommand(). + */ + Runner( const QStringList& command ); + virtual ~Runner() override; + + Runner& setCommand( const QStringList& command ) + { + m_command = command; + return *this; + } + Runner& setLocation( RunLocation r ) + { + m_location = r; + return *this; + } + Runner& setWorkingDirectory( const QDir& directory ) + { + m_directory = directory.absolutePath(); + return *this; + } + Runner& setWorkingDirectory( const QString& directory ) + { + m_directory = directory; + return *this; + } + Runner& setTimeout( std::chrono::seconds timeout ) + { + m_timeout = timeout; + return *this; + } + Runner& setInput( const QString& input ) + { + m_input = input; + return *this; + } + Runner& setOutputProcessing( bool enable ) + { + m_output = enable; + return *this; + } + + Runner& enableOutputProcessing() + { + m_output = true; + return *this; + } + + ProcessResult run(); + /** @brief The executable (argv[0]) that this runner will run + * + * This is the first element of the command; it does not include + * env(1) or chroot(8) which are injected when actually running + * the command. + */ + QString executable() const { return m_command.isEmpty() ? QString() : m_command.first(); } + +signals: + void output( QString line ); + +private: + // What to run, and where. + QStringList m_command; + QString m_directory; + RunLocation m_location { RunLocation::RunInHost }; + + // Settings for when it actually runs + QString m_input; + std::chrono::milliseconds m_timeout { 0 }; + bool m_output = false; +}; + +} // namespace Utils +} // namespace Calamares + +#endif diff --git a/src/libcalamares/utils/String.cpp b/src/libcalamares/utils/String.cpp index e39132328..c88c23693 100644 --- a/src/libcalamares/utils/String.cpp +++ b/src/libcalamares/utils/String.cpp @@ -1,28 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2013-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2010-2011, Leo Franchi - * Copyright 2010-2012, Jeff Mitchell + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2010-2011 Leo Franchi + * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "String.h" +#include "Logger.h" #include @@ -129,4 +122,128 @@ obscure( const QString& string ) return result; } + +QString +truncateMultiLine( const QString& string, CalamaresUtils::LinesStartEnd lines, CalamaresUtils::CharCount chars ) +{ + const char NEWLINE = '\n'; + const int maxLines = lines.atStart + lines.atEnd; + if ( maxLines < 1 ) + { + QString shorter( string ); + shorter.truncate( chars.total ); + return shorter; + } + + const int physicalLinesInString = string.count( NEWLINE ); + const int logicalLinesInString = physicalLinesInString + ( string.endsWith( NEWLINE ) ? 0 : 1 ); + if ( ( string.length() <= chars.total ) && ( logicalLinesInString <= maxLines ) ) + { + return string; + } + + QString front, back; + if ( physicalLinesInString >= maxLines ) + { + int from = -1; + for ( int i = 0; i < lines.atStart; ++i ) + { + from = string.indexOf( NEWLINE, from + 1 ); + if ( from < 0 ) + { + // That's strange, we counted at least maxLines newlines before + break; + } + } + if ( from > 0 ) + { + front = string.left( from + 1 ); + } + + int lastNewLine = -1; + int lastCount = string.endsWith( NEWLINE ) ? -1 : 0; + for ( auto i = string.rbegin(); i != string.rend() && lastCount < lines.atEnd; ++i ) + { + if ( *i == NEWLINE ) + { + ++lastCount; + lastNewLine = int( i - string.rbegin() ); + } + } + if ( ( lastNewLine >= 0 ) && ( lastCount >= lines.atEnd ) ) + { + back = string.right( lastNewLine ); + } + } + else + { + // We have: <= maxLines and longer than chars.total, so: + // - carve out a chunk in the middle, based a little on + // how the balance of atStart and atEnd is + const int charsToChop = string.length() - chars.total; + if ( charsToChop < 1 ) + { + // That's strange, again + return string; + } + const int startPortion = charsToChop * lines.atStart / maxLines; + const int endPortion = charsToChop * lines.atEnd / maxLines; + front = string.left( string.length() / 2 - startPortion ); + back = string.right( string.length() / 2 - endPortion ); + } + + if ( front.length() + back.length() <= chars.total ) + { + return front + back; + } + + // We need to cut off some bits, preserving whether there are + // newlines present at the end of the string. Go case-by-case: + if ( !front.isEmpty() && back.isEmpty() ) + { + // Truncate towards the front + bool needsNewline = front.endsWith( NEWLINE ); + front.truncate( chars.total ); + if ( !front.endsWith( NEWLINE ) && needsNewline ) + { + front.append( NEWLINE ); + } + return front; + } + if ( front.isEmpty() && !back.isEmpty() ) + { + // Truncate towards the tail + return back.right( chars.total ); + } + // Both are non-empty, so nibble away at both of them + front.truncate( chars.total / 2 ); + if ( !front.endsWith( NEWLINE ) && physicalLinesInString > 0 ) + { + front.append( NEWLINE ); + } + return front + back.right( chars.total / 2 ); +} + +void +removeLeading( QString& string, QChar c ) +{ + int count = 0; + while ( string.length() > count && string[ count ] == c ) + { + count++; + } + string.remove( 0, count ); +} + +void +removeTrailing( QString& string, QChar c ) +{ + int lastIndex = string.length(); + while ( lastIndex > 0 && string[ lastIndex - 1 ] == c ) + { + lastIndex--; + } + string.remove( lastIndex, string.length() ); +} + } // namespace CalamaresUtils diff --git a/src/libcalamares/utils/String.h b/src/libcalamares/utils/String.h index cdf7d0b41..1adc2336a 100644 --- a/src/libcalamares/utils/String.h +++ b/src/libcalamares/utils/String.h @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2013-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2010-2011, Leo Franchi - * Copyright 2010-2012, Jeff Mitchell + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2010-2011 Leo Franchi + * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_STRING_H @@ -29,6 +21,27 @@ #include +/* Qt 5.14 changed the API to QString::split(), adding new overloads + * that take a different enum, then Qt 5.15 deprecated the old ones. + * To avoid overly-many warnings related to the API change, introduce + * Calamares-specific constants that pull from the correct enum. + */ +constexpr static const auto SplitSkipEmptyParts = +#if QT_VERSION < QT_VERSION_CHECK( 5, 14, 0 ) + QString::SkipEmptyParts +#else + Qt::SkipEmptyParts +#endif + ; + +constexpr static const auto SplitKeepEmptyParts = +#if QT_VERSION < QT_VERSION_CHECK( 5, 14, 0 ) + QString::KeepEmptyParts +#else + Qt::KeepEmptyParts +#endif + ; + /** * @brief The CalamaresUtils namespace contains utility functions. */ @@ -48,6 +61,58 @@ DLLEXPORT QString removeDiacritics( const QString& string ); * @return the obfuscated string. */ DLLEXPORT QString obscure( const QString& string ); + +/** @brief Parameter for counting lines at beginning and end of string + * + * This is used by truncateMultiLine() to indicate how many lines from + * the beginning and how many from the end should be kept. + */ +struct LinesStartEnd +{ + int atStart = 0; + int atEnd = 0; +}; + +/** @brief Parameter for counting characters in truncateMultiLine() + */ +struct CharCount +{ + int total = 0; +}; + +/** @brief Truncate a string to some reasonable length for display + * + * Keep the first few, or last few (or both) lines of a possibly lengthy + * message @p string and reduce it to a displayable size (e.g. for + * pop-up windows that display the message). If the message is longer + * than @p chars, then characters are removed from the front (if + * @p lines.atStart is zero) or end (if @p lines.atEnd is zero) or in the middle + * (if both are nonzero). + * + * Asking for 0 lines will make this behave like QString::truncate(). + * + * @param string the input string. + * @param lines number of lines to preserve. + * @param chars maximum number of characters in the returned string. + * @return a string built from parts of the input string. + */ +DLLEXPORT QString truncateMultiLine( const QString& string, + LinesStartEnd lines = LinesStartEnd { 3, 5 }, + CharCount chars = CharCount { 812 } ); + +/** @brief Remove all @p c at the beginning of @p string + * + * Modifies the @p string in-place. If @p c is not the first character + * of @p string, the string is left unchanged; otherwise the first character + * is removed and the process repeats. + */ +DLLEXPORT void removeLeading( QString& string, QChar c ); +/** @brief Remove all @p c at the end of @p string + * + * Like removeLeading(), but at the end of the string. + */ +DLLEXPORT void removeTrailing( QString& string, QChar c ); + } // namespace CalamaresUtils #endif diff --git a/src/libcalamares/utils/TestPaths.cpp b/src/libcalamares/utils/TestPaths.cpp index 382305ad5..54c5fa859 100644 --- a/src/libcalamares/utils/TestPaths.cpp +++ b/src/libcalamares/utils/TestPaths.cpp @@ -1,19 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresUtilsSystem.h" @@ -33,7 +26,7 @@ class TestPaths : public QObject Q_OBJECT public: TestPaths() {} - virtual ~TestPaths() {} + ~TestPaths() override {} private Q_SLOTS: void initTestCase(); diff --git a/src/libcalamares/utils/Tests.cpp b/src/libcalamares/utils/Tests.cpp index d50abef39..1105915ad 100644 --- a/src/libcalamares/utils/Tests.cpp +++ b/src/libcalamares/utils/Tests.cpp @@ -1,27 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include "Tests.h" - #include "CalamaresUtilsSystem.h" #include "Entropy.h" #include "Logger.h" +#include "RAII.h" +#include "Runner.h" +#include "String.h" +#include "Traits.h" #include "UMask.h" +#include "Variant.h" #include "Yaml.h" #include "GlobalStorage.h" @@ -35,7 +31,61 @@ #include #include -QTEST_GUILESS_MAIN( LibCalamaresTests ) +class LibCalamaresTests : public QObject +{ + Q_OBJECT +public: + LibCalamaresTests(); + ~LibCalamaresTests() override; + +private Q_SLOTS: + void initTestCase(); + void testDebugLevels(); + + void testLoadSaveYaml(); // Just settings.conf + void testLoadSaveYamlExtended(); // Do a find() in the src dir + + void testCommands(); + + /** @section Test that all the UMask objects work correctly. */ + void testUmask(); + + /** @section Tests the entropy functions. */ + void testEntropy(); + void testPrintableEntropy(); + void testOddSizedPrintable(); + + /** @section Tests the RAII bits. */ + void testPointerSetter(); + + /** @section Tests the Traits bits. */ + void testTraits(); + + /** @section Testing the variants-methods */ + void testVariantStringListCode(); + void testVariantStringListYAMLDashed(); + void testVariantStringListYAMLBracketed(); + + /** @section Test smart string truncation. */ + void testStringTruncation(); + void testStringTruncationShorter(); + void testStringTruncationDegenerate(); + void testStringRemoveLeading_data(); + void testStringRemoveLeading(); + void testStringRemoveTrailing_data(); + void testStringRemoveTrailing(); + + /** @section Test Runner directory-manipulation. */ + void testRunnerDirs(); + void testCalculateWorkingDirectory(); + void testRunnerOutput(); + + /** @section Test file-functions */ + void testReadWriteFile(); + +private: + void recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ); +}; LibCalamaresTests::LibCalamaresTests() {} @@ -69,6 +119,8 @@ LibCalamaresTests::testDebugLevels() void LibCalamaresTests::testLoadSaveYaml() { + Logger::setupLogLevel( Logger::LOGDEBUG ); + QFile f( "settings.conf" ); // Find the nearest settings.conf to read for ( unsigned int up = 0; !f.exists() && ( up < 4 ); ++up ) @@ -79,10 +131,23 @@ LibCalamaresTests::testLoadSaveYaml() QVERIFY( f.exists() ); auto map = CalamaresUtils::loadYaml( f.fileName() ); + QVERIFY( map.contains( "sequence" ) ); + QCOMPARE( map[ "sequence" ].type(), QVariant::List ); + + // The source-repo example `settings.conf` has a show and an exec phase + auto sequence = map[ "sequence" ].toList(); + cDebug() << "Loaded example `settings.conf` sequence:"; + for ( const auto& v : sequence ) + { + cDebug() << Logger::SubEntry << v; + QCOMPARE( v.type(), QVariant::Map ); + QVERIFY( v.toMap().contains( "show" ) || v.toMap().contains( "exec" ) ); + } + CalamaresUtils::saveYaml( "out.yaml", map ); auto other_map = CalamaresUtils::loadYaml( "out.yaml" ); - CalamaresUtils::saveYaml( " out2.yaml", other_map ); + CalamaresUtils::saveYaml( "out2.yaml", other_map ); QCOMPARE( map, other_map ); QFile::remove( "out.yaml" ); @@ -109,16 +174,51 @@ findConf( const QDir& d ) return mine; } +void +LibCalamaresTests::recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ) +{ + cDebug() << "Comparing depth" << depth << a.count() << b.count(); + QCOMPARE( a.keys(), b.keys() ); + for ( const auto& k : a.keys() ) + { + cDebug() << Logger::SubEntry << k; + const auto& av = a[ k ]; + const auto& bv = b[ k ]; + + if ( av.typeName() != bv.typeName() ) + { + cDebug() << Logger::SubEntry << "a type" << av.typeName() << av; + cDebug() << Logger::SubEntry << "b type" << bv.typeName() << bv; + } + QCOMPARE( av.typeName(), bv.typeName() ); + if ( av.canConvert< QVariantMap >() ) + { + recursiveCompareMap( av.toMap(), bv.toMap(), depth + 1 ); + } + else + { + QCOMPARE( av, bv ); + } + } +} + void LibCalamaresTests::testLoadSaveYamlExtended() { + Logger::setupLogLevel( Logger::LOGDEBUG ); + bool loaded_ok; for ( const auto& confname : findConf( QDir( "../src" ) ) ) { + loaded_ok = true; cDebug() << "Testing" << confname; - auto map = CalamaresUtils::loadYaml( confname ); + auto map = CalamaresUtils::loadYaml( confname, &loaded_ok ); + QVERIFY( loaded_ok ); QVERIFY( CalamaresUtils::saveYaml( "out.yaml", map ) ); - auto othermap = CalamaresUtils::loadYaml( "out.yaml" ); + auto othermap = CalamaresUtils::loadYaml( "out.yaml", &loaded_ok ); + QVERIFY( loaded_ok ); + QCOMPARE( map.keys(), othermap.keys() ); + recursiveCompareMap( map, othermap, 0 ); QCOMPARE( map, othermap ); } QFile::remove( "out.yaml" ); @@ -251,3 +351,751 @@ LibCalamaresTests::testOddSizedPrintable() } } } + +void +LibCalamaresTests::testPointerSetter() +{ + int special = 17; + + QCOMPARE( special, 17 ); + { + cScopedAssignment p( &special ); + } + QCOMPARE( special, 17 ); + { + cScopedAssignment p( &special ); + p = 18; + } + QCOMPARE( special, 18 ); + { + cScopedAssignment p( &special ); + p = 20; + p = 3; + } + QCOMPARE( special, 3 ); + { + cScopedAssignment< int > p( nullptr ); + } + QCOMPARE( special, 3 ); + { + // "don't do this" .. order of destructors is important + cScopedAssignment p( &special ); + cScopedAssignment q( &special ); + p = 17; + } + QCOMPARE( special, 17 ); + { + // "don't do this" .. order of destructors is important + cScopedAssignment p( &special ); + cScopedAssignment q( &special ); + p = 34; + q = 2; + // q destroyed first, then p + } + QCOMPARE( special, 34 ); +} + + +/* Demonstration of Traits support for has-a-method or not. + * + * We have two classes, c1 and c2; one has a method do_the_thing() and the + * other does not. A third class, Thinginator, has a method thingify(), + * which should call do_the_thing() of its argument if it exists. + */ + +struct c1 +{ + int do_the_thing() { return 2; } +}; +struct c2 +{ +}; + +DECLARE_HAS_METHOD( do_the_thing ) + +struct Thinginator +{ +public: + /// When class T has function do_the_thing() + template < class T > + int thingify( T& t, const std::true_type& ) + { + return t.do_the_thing(); + } + + template < class T > + int thingify( T&, const std::false_type& ) + { + return -1; + } + + template < class T > + int thingify( T& t ) + { + return thingify( t, has_do_the_thing< T > {} ); + } +}; + + +void +LibCalamaresTests::testTraits() +{ + has_do_the_thing< c1 > x {}; + has_do_the_thing< c2 > y {}; + + QVERIFY( x ); + QVERIFY( !y ); + + c1 c1 {}; + c2 c2 {}; + + QCOMPARE( c1.do_the_thing(), 2 ); + + Thinginator t; + QCOMPARE( t.thingify( c1 ), 2 ); // Calls c1::do_the_thing() + QCOMPARE( t.thingify( c2 ), -1 ); +} + +void +LibCalamaresTests::testVariantStringListCode() +{ + using namespace CalamaresUtils; + const QString key( "strings" ); + { + // Things that are not stringlists + QVariantMap m; + QCOMPARE( getStringList( m, key ), QStringList {} ); + m.insert( key, 17 ); + QCOMPARE( getStringList( m, key ), QStringList {} ); + m.insert( key, QVariant {} ); + QCOMPARE( getStringList( m, key ), QStringList {} ); + } + + { + // Things that are **like** stringlists + QVariantMap m; + m.insert( key, QString( "astring" ) ); + QCOMPARE( getStringList( m, key ).count(), 1 ); + QCOMPARE( getStringList( m, key ), + QStringList { "astring" } ); // A single string **can** be considered a stringlist! + m.insert( key, QString( "more strings" ) ); + QCOMPARE( getStringList( m, key ).count(), 1 ); + QCOMPARE( getStringList( m, key ), QStringList { "more strings" } ); + m.insert( key, QString() ); + QCOMPARE( getStringList( m, key ).count(), 1 ); + QCOMPARE( getStringList( m, key ), QStringList { QString() } ); + } + + { + // Things that are definitely stringlists + QVariantMap m; + m.insert( key, QStringList { "aap", "noot" } ); + QCOMPARE( getStringList( m, key ).count(), 2 ); + QVERIFY( getStringList( m, key ).contains( "aap" ) ); + QVERIFY( !getStringList( m, key ).contains( "mies" ) ); + } +} + +void +LibCalamaresTests::testVariantStringListYAMLDashed() +{ + using namespace CalamaresUtils; + const QString key( "strings" ); + + // Looks like a stringlist to me + QTemporaryFile f; + QVERIFY( f.open() ); + f.write( R"(--- +strings: + - aap + - noot + - mies +)" ); + f.close(); + bool ok = false; + QVariantMap m = loadYaml( f.fileName(), &ok ); + + QVERIFY( ok ); + QCOMPARE( m.count(), 1 ); + QVERIFY( m.contains( key ) ); + + QVERIFY( getStringList( m, key ).contains( "aap" ) ); + QVERIFY( getStringList( m, key ).contains( "mies" ) ); + QVERIFY( !getStringList( m, key ).contains( "lam" ) ); +} + +void +LibCalamaresTests::testVariantStringListYAMLBracketed() +{ + using namespace CalamaresUtils; + const QString key( "strings" ); + + // Looks like a stringlist to me + QTemporaryFile f; + QVERIFY( f.open() ); + f.write( R"(--- +strings: [ aap, noot, mies ] +)" ); + f.close(); + bool ok = false; + QVariantMap m = loadYaml( f.fileName(), &ok ); + + QVERIFY( ok ); + QCOMPARE( m.count(), 1 ); + QVERIFY( m.contains( key ) ); + + QVERIFY( getStringList( m, key ).contains( "aap" ) ); + QVERIFY( getStringList( m, key ).contains( "mies" ) ); + QVERIFY( !getStringList( m, key ).contains( "lam" ) ); +} + +void +LibCalamaresTests::testStringTruncation() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + + using namespace CalamaresUtils; + + const QString longString( R"(--- +--- src/libcalamares/utils/String.h ++++ src/libcalamares/utils/String.h +@@ -62,15 +62,22 @@ DLLEXPORT QString removeDiacritics( const QString& string ); + */ + DLLEXPORT QString obscure( const QString& string ); + ++/** @brief Parameter for counting lines at beginning and end of string ++ * ++ * This is used by truncateMultiLine() to indicate how many lines from ++ * the beginning and how many from the end should be kept. ++ */ + struct LinesStartEnd + { +- int atStart; +- int atEnd; ++ int atStart = 0; ++ int atEnd = 0; +)" ); + + const int sufficientLength = 812; + // There's 18 lines in all + QCOMPARE( longString.count( '\n' ), 18 ); + QVERIFY( longString.length() < sufficientLength ); + + // If we ask for more, we get everything back + QCOMPARE( longString, truncateMultiLine( longString, LinesStartEnd { 20, 0 }, CharCount { sufficientLength } ) ); + QCOMPARE( longString, truncateMultiLine( longString, LinesStartEnd { 0, 20 }, CharCount { sufficientLength } ) ); + + // If we ask for no lines, only characters, we get that + { + auto s = truncateMultiLine( longString, LinesStartEnd { 0, 0 }, CharCount { 4 } ); + QCOMPARE( s.length(), 4 ); + QCOMPARE( s, QString( "---\n" ) ); + } + { + auto s = truncateMultiLine( longString, LinesStartEnd { 0, 0 }, CharCount { sufficientLength } ); + QCOMPARE( s, longString ); + } + + // Lines at the start + { + auto s = truncateMultiLine( longString, LinesStartEnd { 4, 0 }, CharCount { sufficientLength } ); + QVERIFY( s.length() > 1 ); + QVERIFY( longString.startsWith( s ) ); + cDebug() << "Result-line" << Logger::Quote << s; + QCOMPARE( s.count( '\n' ), 4 ); + } + + // Lines at the end + { + auto s = truncateMultiLine( longString, LinesStartEnd { 0, 4 }, CharCount { sufficientLength } ); + QVERIFY( s.length() > 1 ); + QVERIFY( longString.endsWith( s ) ); + cDebug() << "Result-line" << Logger::Quote << s; + QCOMPARE( s.count( '\n' ), 4 ); + } + + // Lines at both ends + { + auto s = truncateMultiLine( longString, LinesStartEnd { 2, 2 }, CharCount { sufficientLength } ); + QVERIFY( s.length() > 1 ); + cDebug() << "Result-line" << Logger::Quote << s; + QCOMPARE( s.count( '\n' ), 4 ); + + auto firsttwo = truncateMultiLine( s, LinesStartEnd { 2, 0 }, CharCount { sufficientLength } ); + auto lasttwo = truncateMultiLine( s, LinesStartEnd { 0, 2 }, CharCount { sufficientLength } ); + QCOMPARE( firsttwo + lasttwo, s ); + QCOMPARE( firsttwo.count( '\n' ), 2 ); + QVERIFY( longString.startsWith( firsttwo ) ); + QVERIFY( longString.endsWith( lasttwo ) ); + } +} + +void +LibCalamaresTests::testStringTruncationShorter() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + + using namespace CalamaresUtils; + + const QString longString( R"(Some strange string artifacts appeared, leading to `{1?}` being +displayed in various user-facing messages. These have been removed +and the translations updated.)" ); + const char NEWLINE = '\n'; + + const int insufficientLength = 42; + // There's 2 newlines in all, no trailing newline + QVERIFY( !longString.endsWith( NEWLINE ) ); + QCOMPARE( longString.count( NEWLINE ), 2 ); + QVERIFY( longString.length() > insufficientLength ); + // Even the first line must be more than the insufficientLength + QVERIFY( longString.indexOf( NEWLINE ) > insufficientLength ); + + // Grab first line, untruncated + { + auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 } ); + QVERIFY( s.length() > 1 ); + QVERIFY( longString.startsWith( s ) ); + QVERIFY( s.endsWith( NEWLINE ) ); + QVERIFY( s.endsWith( "being\n" ) ); + QVERIFY( s.startsWith( "Some " ) ); + } + + // Grab last line, untruncated + { + auto s = truncateMultiLine( longString, LinesStartEnd { 0, 1 } ); + QVERIFY( s.length() > 1 ); + QVERIFY( longString.endsWith( s ) ); + QVERIFY( !s.endsWith( NEWLINE ) ); + QVERIFY( s.endsWith( "updated." ) ); + QCOMPARE( s.count( NEWLINE ), 0 ); // Because last line doesn't end with a newline + QVERIFY( s.startsWith( "and the " ) ); + } + + // Grab last two lines, untruncated + { + auto s = truncateMultiLine( longString, LinesStartEnd { 0, 2 } ); + QVERIFY( s.length() > 1 ); + QVERIFY( longString.endsWith( s ) ); + QVERIFY( !s.endsWith( NEWLINE ) ); + QVERIFY( s.endsWith( "updated." ) ); + QCOMPARE( s.count( NEWLINE ), 1 ); // Because last line doesn't end with a newline + QVERIFY( s.startsWith( "displayed in " ) ); + } + + // First line, truncated + { + auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 }, CharCount { insufficientLength } ); + cDebug() << "Result-line" << Logger::Quote << s; + QVERIFY( s.length() > 1 ); + QVERIFY( s.endsWith( NEWLINE ) ); + QVERIFY( s.startsWith( "Some " ) ); + // Because the first line has a newline, the truncated version does too, + // but that makes it one longer than requested. + QCOMPARE( s.length(), insufficientLength + 1 ); + QVERIFY( longString.startsWith( s.left( insufficientLength ) ) ); + } + + // Last line, truncated; this line is quite short + { + const int quiteShort = 8; + QVERIFY( longString.lastIndexOf( NEWLINE ) < longString.length() - quiteShort ); + + auto s = truncateMultiLine( longString, LinesStartEnd { 0, 1 }, CharCount { quiteShort } ); + cDebug() << "Result-line" << Logger::Quote << s; + QVERIFY( s.length() > 1 ); + QVERIFY( !s.endsWith( NEWLINE ) ); // Because the original doesn't either + QVERIFY( s.startsWith( "upda" ) ); + QCOMPARE( s.length(), quiteShort ); // No extra newlines + QVERIFY( longString.endsWith( s ) ); + } + + // First and last, but both truncated + { + const int quiteShort = 16; + QVERIFY( longString.indexOf( NEWLINE ) > quiteShort ); + QVERIFY( longString.lastIndexOf( NEWLINE ) < longString.length() - quiteShort ); + + auto s = truncateMultiLine( longString, LinesStartEnd { 1, 1 }, CharCount { quiteShort } ); + cDebug() << "Result-line" << Logger::Quote << s; + QVERIFY( s.length() > 1 ); + QVERIFY( !s.endsWith( NEWLINE ) ); // Because the original doesn't either + QVERIFY( s.startsWith( "Some " ) ); + QVERIFY( s.endsWith( "updated." ) ); + QCOMPARE( s.length(), quiteShort + 1 ); // Newline between front and back part + } +} + +void +LibCalamaresTests::testStringTruncationDegenerate() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + + using namespace CalamaresUtils; + + // This is quite long, 1 line only, with no newlines + const QString longString( "The portscout new distfile checker has detected that one or more of your " + "ports appears to be out of date. Please take the opportunity to check " + "each of the ports listed below, and if possible and appropriate, " + "submit/commit an update. If any ports have already been updated, you can " + "safely ignore the entry." ); + + const char NEWLINE = '\n'; + const int quiteShort = 16; + QVERIFY( longString.length() > quiteShort ); + QVERIFY( !longString.contains( NEWLINE ) ); + QVERIFY( longString.indexOf( NEWLINE ) < 0 ); + + { + auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 }, CharCount { quiteShort } ); + cDebug() << "Result-line" << Logger::Quote << s; + QVERIFY( s.length() > 1 ); + QCOMPARE( s.length(), quiteShort ); // No newline between front and back part + QVERIFY( s.startsWith( "The port" ) ); // 8, which is quiteShort / 2 + QVERIFY( s.endsWith( "e entry." ) ); // also 8 chars + + auto t = truncateMultiLine( longString, LinesStartEnd { 2, 2 }, CharCount { quiteShort } ); + QCOMPARE( s, t ); + } +} + +void +LibCalamaresTests::testStringRemoveLeading_data() +{ + QTest::addColumn< QString >( "string" ); + QTest::addColumn< char >( "c" ); + QTest::addColumn< QString >( "result" ); + + QTest::newRow( "empty" ) << QString() << '/' << QString(); + QTest::newRow( "one-slash" ) << QStringLiteral( "/tmp" ) << '/' << QStringLiteral( "tmp" ); + QTest::newRow( "two-slash" ) << QStringLiteral( "//tmp" ) << '/' << QStringLiteral( "tmp" ); + QTest::newRow( "multi-slash" ) << QStringLiteral( "/tmp/p" ) << '/' << QStringLiteral( "tmp/p" ); + QTest::newRow( "later-slash" ) << QStringLiteral( "@/tmp" ) << '/' << QStringLiteral( "@/tmp" ); + QTest::newRow( "all-one-slash" ) << QStringLiteral( "/" ) << '/' << QString(); + QTest::newRow( "all-many-slash" ) << QStringLiteral( "////////////////////" ) << '/' << QString(); + QTest::newRow( "trailing" ) << QStringLiteral( "tmp/" ) << '/' << QStringLiteral( "tmp/" ); +} + +void +LibCalamaresTests::testStringRemoveLeading() +{ + QFETCH( QString, string ); + QFETCH( char, c ); + QFETCH( QString, result ); + + const QString initial = string; + CalamaresUtils::removeLeading( string, c ); + QCOMPARE( string, result ); +} + +void +LibCalamaresTests::testStringRemoveTrailing_data() +{ + QTest::addColumn< QString >( "string" ); + QTest::addColumn< char >( "c" ); + QTest::addColumn< QString >( "result" ); + + QTest::newRow( "empty" ) << QString() << '/' << QString(); + QTest::newRow( "one-slash" ) << QStringLiteral( "/tmp" ) << '/' << QStringLiteral( "/tmp" ); + QTest::newRow( "two-slash" ) << QStringLiteral( "//tmp" ) << '/' << QStringLiteral( "//tmp" ); + QTest::newRow( "multi-slash" ) << QStringLiteral( "/tmp//p/" ) << '/' << QStringLiteral( "/tmp//p" ); + QTest::newRow( "later-slash" ) << QStringLiteral( "@/tmp/@" ) << '/' << QStringLiteral( "@/tmp/@" ); + QTest::newRow( "later-slash2" ) << QStringLiteral( "@/tmp/@//" ) << '/' << QStringLiteral( "@/tmp/@" ); + QTest::newRow( "all-one-slash" ) << QStringLiteral( "/" ) << '/' << QString(); + QTest::newRow( "all-many-slash" ) << QStringLiteral( "////////////////////" ) << '/' << QString(); + QTest::newRow( "trailing" ) << QStringLiteral( "tmp/" ) << '/' << QStringLiteral( "tmp" ); +} + +void +LibCalamaresTests::testStringRemoveTrailing() +{ + QFETCH( QString, string ); + QFETCH( char, c ); + QFETCH( QString, result ); + + const QString initial = string; + CalamaresUtils::removeTrailing( string, c ); + QCOMPARE( string, result ); +} + +static QString +dirname( const QTemporaryDir& d ) +{ + return d.path().split( '/' ).last(); +} +static QString +dirname( const QDir& d ) +{ + return d.absolutePath().split( '/' ).last(); +} + +// Method under test +extern bool relativeChangeDirectory( QDir& directory, const QString& subdir ); + +void +LibCalamaresTests::testRunnerDirs() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + + QDir startDir( QDir::current() ); + QTemporaryDir tempDir( "./utilstest" ); + QVERIFY( tempDir.isValid() ); + QVERIFY( startDir.isReadable() ); + + // Test changing "downward" + { + QDir testDir( QDir::current() ); + QCOMPARE( startDir, testDir ); + } + + { + QDir testDir( QDir::current() ); + const bool could_change_to_dot = relativeChangeDirectory( testDir, QStringLiteral( "." ) ); + QVERIFY( could_change_to_dot ); + QCOMPARE( startDir, testDir ); + } + + { + // The tempDir was created inside the current directory, we want only the subdir-name + QDir testDir( QDir::current() ); + const bool could_change_to_temp = relativeChangeDirectory( testDir, dirname( tempDir ) ); + QVERIFY( could_change_to_temp ); + QVERIFY( startDir != testDir ); + QVERIFY( testDir.absolutePath().startsWith( startDir.absolutePath() ) ); + } + + // Test changing to something that doesn't exist + { + QDir testDir( QDir::current() ); + const bool could_change_to_bogus = relativeChangeDirectory( testDir, QStringLiteral( "bogus" ) ); + QVERIFY( !could_change_to_bogus ); + QCOMPARE( startDir, testDir ); // Must be unchanged + } + + // Testing escape-from-start + { + // Escape briefly from the start + QDir testDir( QDir::current() ); + const bool could_change_to_current + = relativeChangeDirectory( testDir, QStringLiteral( "../" ) + dirname( startDir ) ); + QVERIFY( could_change_to_current ); + QCOMPARE( startDir, testDir ); // The change succeeded, but net effect is zero + + const bool could_change_to_temp = relativeChangeDirectory( + testDir, QStringLiteral( "../" ) + dirname( startDir ) + QStringLiteral( "/./" ) + dirname( tempDir ) ); + QVERIFY( could_change_to_temp ); + QVERIFY( startDir != testDir ); + QVERIFY( testDir.absolutePath().startsWith( startDir.absolutePath() ) ); + } + + { + // Escape? + QDir testDir( QDir::current() ); + const bool could_change_to_parent = relativeChangeDirectory( testDir, QStringLiteral( "../" ) ); + QVERIFY( !could_change_to_parent ); + QCOMPARE( startDir, testDir ); // Change failed + + const bool could_change_to_tmp = relativeChangeDirectory( testDir, QStringLiteral( "/tmp" ) ); + QVERIFY( !could_change_to_tmp ); + QCOMPARE( startDir, testDir ); + + const bool could_change_to_elsewhere = relativeChangeDirectory( testDir, QStringLiteral( "../src" ) ); + QVERIFY( !could_change_to_elsewhere ); + QCOMPARE( startDir, testDir ); + } +} + +// Method under test +extern std::pair< bool, QDir > calculateWorkingDirectory( Calamares::Utils::RunLocation location, + const QString& directory ); + +void +LibCalamaresTests::testCalculateWorkingDirectory() +{ + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + + if ( !gs ) + { + cDebug() << "Creating new JobQueue"; + (void)new Calamares::JobQueue(); + gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + } + QVERIFY( gs ); + + // Working with a rootMountPoint set + QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); + gs->insert( "rootMountPoint", tempRoot.path() ); + + { + auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInHost, QString() ); + QVERIFY( ok ); + QCOMPARE( d, QDir::current() ); + } + { + auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInTarget, QString() ); + QVERIFY( ok ); + QCOMPARE( d.absolutePath(), tempRoot.path() ); + } + + gs->remove( "rootMountPoint" ); + { + auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInHost, QString() ); + QVERIFY( ok ); + QCOMPARE( d, QDir::current() ); + } + { + auto [ ok, d ] = calculateWorkingDirectory( CalamaresUtils::System::RunLocation::RunInTarget, QString() ); + QVERIFY( !ok ); + QCOMPARE( d, QDir::current() ); + } +} + +void +LibCalamaresTests::testRunnerOutput() +{ + cDebug() << "Testing ls"; + { + Calamares::Utils::Runner r( { "ls", "-d", "." } ); + QSignalSpy spy( &r, &decltype( r )::output ); + r.enableOutputProcessing(); + + auto result = r.run(); + QCOMPARE( result.getExitCode(), 0 ); + QCOMPARE( result.getOutput(), QString() ); + QCOMPARE( spy.count(), 1 ); + } + + cDebug() << "Testing cat"; + { + Calamares::Utils::Runner r( { "cat" } ); + QSignalSpy spy( &r, &decltype( r )::output ); + r.enableOutputProcessing().setInput( QStringLiteral( "hello\nworld\n\n!\n" ) ); + + { + auto result = r.run(); + QCOMPARE( result.getExitCode(), 0 ); + QCOMPARE( result.getOutput(), QString() ); + QCOMPARE( spy.count(), 4 ); + } + + r.setInput( QStringLiteral( "yo\ndogg" ) ); + { + auto result = r.run(); + QCOMPARE( result.getExitCode(), 0 ); + QCOMPARE( result.getOutput(), QString() ); + QCOMPARE( spy.count(), 6 ); // 4 from before, +2 here + } + } + + cDebug() << "Testing cat (again)"; + { + QStringList collectedOutput; + + Calamares::Utils::Runner r( { "cat" } ); + r.enableOutputProcessing().setInput( QStringLiteral( "hello\nworld\n\n!\n" ) ); + QObject::connect( &r, &decltype( r )::output, [ &collectedOutput ]( QString s ) { collectedOutput << s; } ); + + { + auto result = r.run(); + QCOMPARE( result.getExitCode(), 0 ); + QCOMPARE( result.getOutput(), QString() ); + QCOMPARE( collectedOutput.count(), 4 ); + QVERIFY( collectedOutput.contains( QStringLiteral( "world\n" ) ) ); + } + + r.setInput( QStringLiteral( "yo\ndogg" ) ); + { + auto result = r.run(); + QCOMPARE( result.getExitCode(), 0 ); + QCOMPARE( result.getOutput(), QString() ); + QCOMPARE( collectedOutput.count(), 6 ); + QVERIFY( collectedOutput.contains( QStringLiteral( "dogg" ) ) ); // no newline + } + } +} + + +CalamaresUtils::System* +file_setup( const QTemporaryDir& tempRoot ) +{ + CalamaresUtils::System* ss = CalamaresUtils::System::instance(); + if ( !ss ) + { + ss = new CalamaresUtils::System( true ); + } + + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + if ( !gs ) + { + cDebug() << "Creating new JobQueue"; + (void)new Calamares::JobQueue(); + gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + } + if ( gs ) + { + // Working with a rootMountPoint set + gs->insert( "rootMountPoint", tempRoot.path() ); + } + return ss; +} + +void +LibCalamaresTests::testReadWriteFile() +{ + static const QByteArray otherContents( "first\nsecond\n" ); + + QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); + auto* ss = file_setup( tempRoot ); + + QVERIFY( ss ); + { + auto fullPath = ss->createTargetFile( "test0", QByteArray(), CalamaresUtils::System::WriteMode::Overwrite ); + QVERIFY( fullPath ); + QVERIFY( !fullPath.path().isEmpty() ); + + QFileInfo fi( fullPath.path() ); + QVERIFY( fi.exists() ); + QVERIFY( fi.isFile() ); + QCOMPARE( fi.size(), 0 ); + } + // It won't overwrite unless you ask for it + { + auto fullPath = ss->createTargetFile( "test0", otherContents ); + QVERIFY( !fullPath ); // Failed, because it won't overwrite + QCOMPARE( fullPath.code(), decltype( fullPath )::Code::AlreadyExists ); + QVERIFY( fullPath.path().isEmpty() ); // Because it wasn't written + + QFileInfo fi( tempRoot.filePath( "test0" ) ); // Compute the name some other way + QVERIFY( fi.exists() ); + QVERIFY( fi.isFile() ); + QCOMPARE( fi.size(), 0 ); + } + // But it will if you say so explicitly + { + auto fullPath = ss->createTargetFile( "test0", otherContents, CalamaresUtils::System::WriteMode::Overwrite ); + QVERIFY( fullPath ); + QVERIFY( !fullPath.path().isEmpty() ); + + QFileInfo fi( fullPath.path() ); + QVERIFY( fi.exists() ); + QVERIFY( fi.isFile() ); + QCOMPARE( fi.size(), 13 ); + } + + // Now it's been written, we can read it, too + { + auto contents = ss->readTargetFile( "test0" ); + QVERIFY( !contents.isEmpty() ); + QCOMPARE( contents.count(), 2 ); + QCOMPARE( contents[ 0 ], QStringLiteral( "first" ) ); // No trailing \n + QCOMPARE( contents[ 1 ], QStringLiteral( "second" ) ); // No trailing \n + } +} + + +QTEST_GUILESS_MAIN( LibCalamaresTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/libcalamares/utils/Tests.h b/src/libcalamares/utils/Tests.h deleted file mode 100644 index f9908c74c..000000000 --- a/src/libcalamares/utils/Tests.h +++ /dev/null @@ -1,49 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2018, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#ifndef TESTS_H -#define TESTS_H - -#include - -class LibCalamaresTests : public QObject -{ - Q_OBJECT -public: - LibCalamaresTests(); - ~LibCalamaresTests() override; - -private Q_SLOTS: - void initTestCase(); - void testDebugLevels(); - - void testLoadSaveYaml(); // Just settings.conf - void testLoadSaveYamlExtended(); // Do a find() in the src dir - - void testCommands(); - - /** @brief Test that all the UMask objects work correctly. */ - void testUmask(); - - /** @brief Tests the entropy functions. */ - void testEntropy(); - void testPrintableEntropy(); - void testOddSizedPrintable(); -}; - -#endif diff --git a/src/libcalamares/utils/Traits.h b/src/libcalamares/utils/Traits.h new file mode 100644 index 000000000..8d7eda4a9 --- /dev/null +++ b/src/libcalamares/utils/Traits.h @@ -0,0 +1,78 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#ifndef UTILS_TRAITS_H +#define UTILS_TRAITS_H + +#include + + +namespace CalamaresUtils +{ + +/** @brief Traits machinery lives in this namespace + * + * The primary purpose of this namespace is to hold machinery that + * is created by the DECLARE_HAS_METHOD macro. + * + * The DECLARE_HAS_METHOD macro builds machinery to check whether + * a class has a particular named method. This can be used to + * specialize templates elsewhere for use with classes with, or without, + * the named method. + * + * To use the machinery (which is not that sophisticated): + * + * - Put `DECLARE_HAS_METHOD(myFunction)` somewhere in file scope. + * This puts together the machinery for detecting if `myFunction` + * is a method of some class. + * - At global scope, `has_myFunction` is now either std::true_type, + * if the type `T` has a method `T::myFunction`, or std::false_type, + * if it does not. + * + * To specialize template methods based on the presence of the named + * method, write **three** overloads: + * + * - `template myMethod(args ..., const std::true_type& )` + * This is the implementation where class T has `myFunction`. + * - `template myMethod(args ..., const std::false_type& )` + * This is the implementation without. + * - `template myMethod(args ...)` is the general implementation, + * which can call the specialized implementations with + * `return myMethod(args ..., has_myFunction{})` + */ +namespace Traits +{ +template < class > +struct sfinae_true : std::true_type +{ +}; +} // namespace Traits +} // namespace CalamaresUtils + +#define DECLARE_HAS_METHOD( m ) \ + namespace CalamaresUtils \ + { \ + namespace Traits \ + { \ + struct has_##m \ + { \ + template < class T > \ + static auto f( int ) -> sfinae_true< decltype( &T::m ) >; \ + template < class T > \ + static auto f( long ) -> std::false_type; \ + template < class T > \ + using t = decltype( f< T >( 0 ) ); \ + }; \ + } \ + } \ + template < class T > \ + using has_##m = CalamaresUtils::Traits::has_##m ::t< T >; + +#endif diff --git a/src/libcalamares/utils/UMask.cpp b/src/libcalamares/utils/UMask.cpp index 358a52887..3dd7e84f0 100644 --- a/src/libcalamares/utils/UMask.cpp +++ b/src/libcalamares/utils/UMask.cpp @@ -1,19 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "UMask.h" diff --git a/src/libcalamares/utils/UMask.h b/src/libcalamares/utils/UMask.h index 752c8b066..aea79fbc3 100644 --- a/src/libcalamares/utils/UMask.h +++ b/src/libcalamares/utils/UMask.h @@ -1,21 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ - #ifndef UTILS_UMASK_H #define UTILS_UMASK_H diff --git a/src/libcalamares/utils/Units.h b/src/libcalamares/utils/Units.h index b869d7dde..bb5bf4509 100644 --- a/src/libcalamares/utils/Units.h +++ b/src/libcalamares/utils/Units.h @@ -1,20 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_UNITS_H @@ -25,6 +18,9 @@ namespace CalamaresUtils { +namespace Units +{ + /** User defined literals, 1_KB is 1 KiloByte (= 10^3 bytes) */ constexpr qint64 operator""_KB( unsigned long long m ) { @@ -61,40 +57,42 @@ constexpr qint64 operator""_GiB( unsigned long long m ) return operator""_MiB(m)*1024; } +} // namespace Units + constexpr qint64 KBtoBytes( unsigned long long m ) { - return operator""_KB( m ); + return Units::operator""_KB( m ); } constexpr qint64 KiBtoBytes( unsigned long long m ) { - return operator""_KiB( m ); + return Units::operator""_KiB( m ); } constexpr qint64 MBtoBytes( unsigned long long m ) { - return operator""_MB( m ); + return Units::operator""_MB( m ); } constexpr qint64 MiBtoBytes( unsigned long long m ) { - return operator""_MiB( m ); + return Units::operator""_MiB( m ); } constexpr qint64 GBtoBytes( unsigned long long m ) { - return operator""_GB( m ); + return Units::operator""_GB( m ); } constexpr qint64 GiBtoBytes( unsigned long long m ) { - return operator""_GiB( m ); + return Units::operator""_GiB( m ); } constexpr qint64 @@ -164,4 +162,5 @@ bytesToSectors( qint64 bytes, qint64 blocksize ) } } // namespace CalamaresUtils + #endif diff --git a/src/libcalamares/utils/Variant.cpp b/src/libcalamares/utils/Variant.cpp index c56f9301a..0aba07f33 100644 --- a/src/libcalamares/utils/Variant.cpp +++ b/src/libcalamares/utils/Variant.cpp @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2013-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: - * Copyright 2010-2011, Christian Muehlhaeuser - * Copyright 2010-2011, Leo Franchi - * Copyright 2010-2012, Jeff Mitchell + * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2010-2011 Leo Franchi + * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Variant.h" @@ -34,21 +26,19 @@ namespace CalamaresUtils bool getBool( const QVariantMap& map, const QString& key, bool d ) { - bool result = d; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Bool ) { - result = v.toBool(); + return v.toBool(); } } - - return result; + return d; } QString -getString( const QVariantMap& map, const QString& key ) +getString( const QVariantMap& map, const QString& key, const QString& d ) { if ( map.contains( key ) ) { @@ -58,54 +48,81 @@ getString( const QVariantMap& map, const QString& key ) return v.toString(); } } - return QString(); + return d; +} + +QStringList +getStringList( const QVariantMap& map, const QString& key, const QStringList& d ) +{ + if ( map.contains( key ) ) + { + auto v = map.value( key ); + if ( v.canConvert( QMetaType::QStringList ) ) + { + return v.toStringList(); + } + } + return d; +} + +QList< QVariant > +getList( const QVariantMap& map, const QString& key, const QList< QVariant >& d ) +{ + if ( map.contains( key ) ) + { + auto v = map.value( key ); + if ( v.canConvert( QVariant::List ) ) + { + return v.toList(); + } + } + return d; } qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d ) { - qint64 result = d; if ( map.contains( key ) ) { auto v = map.value( key ); - if ( v.type() == QVariant::Int ) - { - result = v.toInt(); - } - else if ( v.type() == QVariant::LongLong ) - { - result = v.toLongLong(); - } + return v.toString().toLongLong( nullptr, 0 ); } + return d; +} - return result; +quint64 +getUnsignedInteger( const QVariantMap& map, const QString& key, quint64 d ) +{ + if ( map.contains( key ) ) + { + auto v = map.value( key ); + return v.toString().toULongLong( nullptr, 0 ); + } + return d; } double getDouble( const QVariantMap& map, const QString& key, double d ) { - double result = d; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Int ) { - result = v.toInt(); + return v.toInt(); } else if ( v.type() == QVariant::Double ) { - result = v.toDouble(); + return v.toDouble(); } } - - return result; + return d; } QVariantMap -getSubMap( const QVariantMap& map, const QString& key, bool& success ) +getSubMap( const QVariantMap& map, const QString& key, bool& success, const QVariantMap& d ) { success = false; - if ( map.contains( key ) ) { auto v = map.value( key ); @@ -115,7 +132,7 @@ getSubMap( const QVariantMap& map, const QString& key, bool& success ) return v.toMap(); } } - return QVariantMap(); + return d; } } // namespace CalamaresUtils diff --git a/src/libcalamares/utils/Variant.h b/src/libcalamares/utils/Variant.h index 15f791b74..6bd7b8def 100644 --- a/src/libcalamares/utils/Variant.h +++ b/src/libcalamares/utils/Variant.h @@ -1,20 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2013-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. + * * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_VARIANT_H @@ -22,41 +15,64 @@ #include "DllMacro.h" +#include #include #include namespace CalamaresUtils { /** - * Get a bool value from a mapping with a given key; returns the default - * if no value is stored in the map. + * Get a bool value from a mapping with a given key; returns @p d if no value. */ -DLLEXPORT bool getBool( const QVariantMap& map, const QString& key, bool d ); +DLLEXPORT bool getBool( const QVariantMap& map, const QString& key, bool d = false ); + +/** @brief Get a string value from a mapping with a given key; returns @p d if no value. + * + * The value must be an actual string; numbers are not automatically converted to strings, + * nor are lists flattened or converted. + */ +DLLEXPORT QString getString( const QVariantMap& map, const QString& key, const QString& d = QString() ); + +/** @brief Get a string list from a mapping with a given key; returns @p d if no value. + * + * This is slightly more lenient than getString(), and a single-string value will + * be returned as a 1-item list. + */ +DLLEXPORT QStringList getStringList( const QVariantMap& map, const QString& key, const QStringList& d = QStringList() ); /** - * Get a string value from a mapping; returns empty QString if no value. + * Get a list from a mapping with a given key; returns @p d if no value. */ -DLLEXPORT QString getString( const QVariantMap& map, const QString& key ); +DLLEXPORT QList< QVariant > +getList( const QVariantMap& map, const QString& key, const QList< QVariant >& d = QList< QVariant >() ); /** - * Get an integer value from a mapping; returns @p d if no value. + * Get an integer value from a mapping with a given key; returns @p d if no value. */ -DLLEXPORT qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d ); +DLLEXPORT qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d = 0 ); /** - * Get a double value from a mapping (integers are converted); returns @p d if no value. + * Get an unsigned integer value from a mapping with a given key; returns @p d if no value. */ -DLLEXPORT double getDouble( const QVariantMap& map, const QString& key, double d ); +DLLEXPORT quint64 getUnsignedInteger( const QVariantMap& map, const QString& key, quint64 d = 0 ); /** - * Returns a sub-map (i.e. a nested map) from the given mapping with the + * Get a double value from a mapping with a given key (integers are converted); returns @p d if no value. + */ +DLLEXPORT double getDouble( const QVariantMap& map, const QString& key, double d = 0.0 ); + +/** + * Returns a sub-map (i.e. a nested map) from a given mapping with a * given key. @p success is set to true if the @p key exists * in @p map and converts to a map, false otherwise. * - * Returns an empty map if there is no such key or it is not a map-value. + * Returns @p d if there is no such key or it is not a map-value. * (e.g. if @p success is false). */ -DLLEXPORT QVariantMap getSubMap( const QVariantMap& map, const QString& key, bool& success ); +DLLEXPORT QVariantMap getSubMap( const QVariantMap& map, + const QString& key, + bool& success, + const QVariantMap& d = QVariantMap() ); } // namespace CalamaresUtils #endif diff --git a/src/libcalamares/utils/Yaml.cpp b/src/libcalamares/utils/Yaml.cpp index c986588be..dd7523ae4 100644 --- a/src/libcalamares/utils/Yaml.cpp +++ b/src/libcalamares/utils/Yaml.cpp @@ -1,20 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Yaml.h" @@ -58,9 +52,7 @@ yamlToVariant( const YAML::Node& node ) case YAML::NodeType::Undefined: return QVariant(); } - - // NOTREACHED - return QVariant(); + __builtin_unreachable(); } @@ -120,7 +112,6 @@ yamlToStringList( const YAML::Node& listNode ) return l; } - void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData, const char* label ) { @@ -260,9 +251,19 @@ dumpYamlElement( QFile& f, const QVariant& value, int indent ) { f.write( QString::number( value.toInt() ).toUtf8() ); } + else if ( value.type() == QVariant::Type::LongLong ) + { + f.write( QString::number( value.toLongLong() ).toUtf8() ); + } else if ( value.type() == QVariant::Type::Double ) { - f.write( QString::number( value.toDouble() ).toUtf8() ); + f.write( QString::number( value.toDouble(), 'f', 2 ).toUtf8() ); + } + else if ( value.canConvert( QVariant::Type::ULongLong ) ) + { + // This one needs to be *after* bool, int, double to avoid this branch + // .. grabbing those convertible types un-necessarily. + f.write( QString::number( value.toULongLong() ).toUtf8() ); } else if ( value.type() == QVariant::Type::List ) { diff --git a/src/libcalamares/utils/Yaml.h b/src/libcalamares/utils/Yaml.h index a976136e1..fa2121b75 100644 --- a/src/libcalamares/utils/Yaml.h +++ b/src/libcalamares/utils/Yaml.h @@ -1,22 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ +/* + * YAML conversions and YAML convenience header. + * + * Includes the system YAMLCPP headers without warnings (by switching off + * the expected warnings) and provides a handful of methods for + * converting between YAML and QVariant. + */ #ifndef UTILS_YAML_H #define UTILS_YAML_H @@ -37,6 +38,7 @@ class QFileInfo; #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" #pragma clang diagnostic ignored "-Wshadow" #pragma clang diagnostic ignored "-Wfloat-equal" +#pragma clang diagnostic ignored "-Wsuggest-destructor-override" #endif #include @@ -45,7 +47,7 @@ class QFileInfo; #pragma clang diagnostic pop #endif -/// @brief Appends all te elements of @p node to the string list @p v +/// @brief Appends all the elements of @p node to the string list @p v void operator>>( const YAML::Node& node, QStringList& v ); namespace CalamaresUtils diff --git a/src/libcalamares/utils/moc-warnings.h b/src/libcalamares/utils/moc-warnings.h index b773c176b..7d54c26b5 100644 --- a/src/libcalamares/utils/moc-warnings.h +++ b/src/libcalamares/utils/moc-warnings.h @@ -1,4 +1,28 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +/* @file Turn off warnings on MOC-generated code + * + * This header file exists **only** to reduce warnings during compilation. + * Code generated by Qt's MOC, in combination with Clang (version 6 or later, + * I'm fairly sure) and the plenty-of-warnings settings that Calamares uses, + * triggers tons of warnings. Since those warnings are not something we + * can do anything about, turn them off by `#include`ing this header + * before a MOC file. + * + * Note that not many files in Calamares use MOC directly: mostly CMake's + * automoc does all the work for us. + */ #ifdef __clang__ #pragma clang diagnostic ignored "-Wextra-semi-stmt" #pragma clang diagnostic ignored "-Wredundant-parens" +#pragma clang diagnostic ignored "-Wreserved-identifier" #endif diff --git a/src/libcalamaresui/Branding.cpp b/src/libcalamaresui/Branding.cpp index ff7e43fb8..49c5dab11 100644 --- a/src/libcalamaresui/Branding.cpp +++ b/src/libcalamaresui/Branding.cpp @@ -1,22 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura (raurodse) - * Copyright 2019, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura (raurodse) + * SPDX-FileCopyrightText: 2019 Camilo Higuita + * SPDX-FileCopyrightText: 2021 Anubhav Choudhary + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Branding.h" @@ -26,6 +18,7 @@ #include "utils/ImageRegistry.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" +#include "utils/Units.h" #include "utils/Yaml.h" #include @@ -41,6 +34,13 @@ #include #endif +[[noreturn]] static void +bail( const QString& descriptorPath, const QString& message ) +{ + cError() << "FATAL in" << descriptorPath << Logger::Continuation << Logger::NoQuote << message; + ::exit( EXIT_FAILURE ); +} + namespace Calamares { @@ -49,6 +49,10 @@ Branding* Branding::s_instance = nullptr; Branding* Branding::instance() { + if ( !s_instance ) + { + cWarning() << "No Branding instance created yet."; + } return s_instance; } @@ -67,16 +71,18 @@ const QStringList Branding::s_stringEntryStrings = "productUrl", "supportUrl", "knownIssuesUrl", - "releaseNotesUrl" + "releaseNotesUrl", + "donateUrl" }; const QStringList Branding::s_imageEntryStrings = { - "productLogo", + "productBanner", "productIcon", - "productWelcome", - "productWallpaper" + "productLogo", + "productWallpaper", + "productWelcome" }; const QStringList Branding::s_styleEntryStrings = @@ -86,6 +92,13 @@ const QStringList Branding::s_styleEntryStrings = "sidebarTextSelect", "sidebarTextHighlight" }; + +const QStringList Branding::s_uploadServerStrings = +{ + "type", + "url", + "port" +}; // clang-format on // *INDENT-ON* @@ -123,15 +136,43 @@ loadStrings( QMap< QString, QString >& map, throw YAML::Exception( YAML::Mark(), std::string( "Branding configuration is not a map: " ) + key ); } - const auto& config = CalamaresUtils::yamlMapToVariant( doc[ key ] ); - - map.clear(); + const QVariantMap config = CalamaresUtils::yamlMapToVariant( doc[ key ] ); for ( auto it = config.constBegin(); it != config.constEnd(); ++it ) { map.insert( it.key(), transform( it.value().toString() ) ); } } +static Branding::UploadServerInfo +uploadServerFromMap( const QVariantMap& map ) +{ + using Type = Branding::UploadServerType; + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< Type > names { + { "none", Type::None }, + { "fiche", Type::Fiche } + }; + // clang-format on + // *INDENT-ON* + + QString typestring = map[ "type" ].toString(); + QString urlstring = map[ "url" ].toString(); + qint64 sizeLimitKiB = map[ "sizeLimit" ].toLongLong(); + + if ( typestring.isEmpty() || urlstring.isEmpty() ) + { + return Branding::UploadServerInfo { Branding::UploadServerType::None, QUrl(), 0 }; + } + + bool bogus = false; // we don't care about type-name lookup success here + return Branding::UploadServerInfo { + names.find( typestring, bogus ), + QUrl( urlstring, QUrl::ParsingMode::StrictMode ), + sizeLimitKiB >= 0 ? CalamaresUtils::KiBtoBytes( static_cast< unsigned long long >( sizeLimitKiB ) ) : -1 + }; +} + /** @brief Load the @p map with strings from @p config * * If os-release is supported (with KF5 CoreAddons >= 5.58) then @@ -151,7 +192,7 @@ Branding::Branding( const QString& brandingFilePath, QObject* parent ) QDir componentDir( componentDirectory() ); if ( !componentDir.exists() ) { - bail( "Bad component directory path." ); + bail( m_descriptorPath, "Bad component directory path." ); } QFile file( brandingFilePath ); @@ -166,10 +207,12 @@ Branding::Branding( const QString& brandingFilePath, QObject* parent ) m_componentName = QString::fromStdString( doc[ "componentName" ].as< std::string >() ); if ( m_componentName != componentDir.dirName() ) - bail( "The branding component name should match the name of the " + bail( m_descriptorPath, + "The branding component name should match the name of the " "component directory." ); initSimpleSettings( doc ); + initSlideshowSettings( doc ); #ifdef WITH_KOSRelease // Copy the os-release information into a QHash for use by KMacroExpander. @@ -192,78 +235,43 @@ Branding::Branding( const QString& brandingFilePath, QObject* parent ) { QStringLiteral( "VARIANT" ), relInfo.variant() }, { QStringLiteral( "VARIANT_ID" ), relInfo.variantId() }, { QStringLiteral( "LOGO" ), relInfo.logo() } } }; - auto expand = [&]( const QString& s ) -> QString { - return KMacroExpander::expandMacros( s, relMap, QLatin1Char( '@' ) ); - }; + auto expand = [ & ]( const QString& s ) -> QString + { return KMacroExpander::expandMacros( s, relMap, QLatin1Char( '@' ) ); }; #else auto expand = []( const QString& s ) -> QString { return s; }; #endif - - // Massage the strings, images and style sections. loadStrings( m_strings, doc, "strings", expand ); - loadStrings( m_images, doc, "images", [&]( const QString& s ) -> QString { - // See also image() - const QString imageName( expand( s ) ); - QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); - if ( !imageFi.exists() ) - { - const auto icon = QIcon::fromTheme( imageName ); - // Not found, bail out with the filename used - if ( icon.isNull() ) - { - bail( QString( "Image file %1 does not exist." ).arg( imageFi.absoluteFilePath() ) ); - } - return imageName; // Not turned into a path - } - return imageFi.absoluteFilePath(); - } ); + loadStrings( m_images, + doc, + "images", + [ & ]( const QString& s ) -> QString + { + // See also image() + const QString imageName( expand( s ) ); + QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); + if ( !imageFi.exists() ) + { + const auto icon = QIcon::fromTheme( imageName ); + // Not found, bail out with the filename used + if ( icon.isNull() ) + { + bail( + m_descriptorPath, + QString( "Image file %1 does not exist." ).arg( imageFi.absoluteFilePath() ) ); + } + return imageName; // Not turned into a path + } + return imageFi.absoluteFilePath(); + } ); loadStrings( m_style, doc, "style", []( const QString& s ) -> QString { return s; } ); - if ( doc[ "slideshow" ].IsSequence() ) - { - QStringList slideShowPictures; - doc[ "slideshow" ] >> slideShowPictures; - for ( int i = 0; i < slideShowPictures.count(); ++i ) - { - QString pathString = slideShowPictures[ i ]; - QFileInfo imageFi( componentDir.absoluteFilePath( pathString ) ); - if ( !imageFi.exists() ) - { - bail( QString( "Slideshow file %1 does not exist." ).arg( imageFi.absoluteFilePath() ) ); - } - - slideShowPictures[ i ] = imageFi.absoluteFilePath(); - } - - //FIXME: implement a GenericSlideShow.qml that uses these slideShowPictures - } - else if ( doc[ "slideshow" ].IsScalar() ) - { - QString slideshowPath = QString::fromStdString( doc[ "slideshow" ].as< std::string >() ); - QFileInfo slideshowFi( componentDir.absoluteFilePath( slideshowPath ) ); - if ( !slideshowFi.exists() || !slideshowFi.fileName().toLower().endsWith( ".qml" ) ) - bail( QString( "Slideshow file %1 does not exist or is not a valid QML file." ) - .arg( slideshowFi.absoluteFilePath() ) ); - m_slideshowPath = slideshowFi.absoluteFilePath(); - } - else - { - bail( "Syntax error in slideshow sequence." ); - } - - int api = doc[ "slideshowAPI" ].IsScalar() ? doc[ "slideshowAPI" ].as< int >() : -1; - if ( ( api < 1 ) || ( api > 2 ) ) - { - cWarning() << "Invalid or missing *slideshowAPI* in branding file."; - api = 1; - } - m_slideshowAPI = api; + m_uploadServer = uploadServerFromMap( CalamaresUtils::yamlMapToVariant( doc[ "uploadServer" ] ) ); } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, ba, file.fileName() ); - bail( e.what() ); + bail( m_descriptorPath, e.what() ); } QDir translationsDir( componentDir.filePath( "lang" ) ); @@ -319,7 +327,6 @@ Branding::imagePath( Branding::ImageEntry imageEntry ) const return m_images.value( s_imageEntryStrings.value( imageEntry ) ); } - QPixmap Branding::image( Branding::ImageEntry imageEntry, const QSize& size ) const { @@ -345,24 +352,42 @@ Branding::image( const QString& imageName, const QSize& size ) const { QDir componentDir( componentDirectory() ); QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); - if ( !imageFi.exists() ) + if ( imageFi.exists() ) + { + return ImageRegistry::instance()->pixmap( imageFi.absoluteFilePath(), size ); + } + else { const auto icon = QIcon::fromTheme( imageName ); // Not found, bail out with the filename used - if ( icon.isNull() ) + if ( !icon.isNull() ) { - return QPixmap(); + return icon.pixmap( size ); } - return icon.pixmap( size ); } - return ImageRegistry::instance()->pixmap( imageFi.absoluteFilePath(), size ); + return QPixmap(); } -QString -Branding::stylesheet() const +QPixmap +Branding::image( const QStringList& list, const QSize& size ) const { - QFileInfo fi( m_descriptorPath ); - QFileInfo importQSSPath( fi.absoluteDir().filePath( "stylesheet.qss" ) ); + QDir componentDir( componentDirectory() ); + for ( const QString& imageName : list ) + { + auto p = image( imageName, size ); + if ( !p.isNull() ) + { + return p; + } + } + return QPixmap(); +} + + +static QString +_stylesheet( const QDir& dir ) +{ + QFileInfo importQSSPath( dir.filePath( "stylesheet.qss" ) ); if ( importQSSPath.exists() && importQSSPath.isReadable() ) { QFile stylesheetFile( importQSSPath.filePath() ); @@ -371,11 +396,17 @@ Branding::stylesheet() const } else { - cWarning() << "The branding component" << fi.absoluteDir().absolutePath() << "does not ship stylesheet.qss."; + cWarning() << "The branding component" << dir.absolutePath() << "does not ship stylesheet.qss."; } return QString(); } +QString +Branding::stylesheet() const +{ + return _stylesheet( QFileInfo( m_descriptorPath ).absoluteDir() ); +} + void Branding::setGlobals( GlobalStorage* globalStorage ) const { @@ -394,7 +425,7 @@ Branding::WindowDimension::isValid() const } -/// @brief Guard against cases where the @p key doesn't exist in @p doc +/// @brief Get a string (empty is @p key doesn't exist) from @p key in @p doc static inline QString getString( const YAML::Node& doc, const char* key ) { @@ -405,6 +436,18 @@ getString( const YAML::Node& doc, const char* key ) return QString(); } +/// @brief Get a node (throws if @p key doesn't exist) from @p key in @p doc +static inline YAML::Node +get( const YAML::Node& doc, const char* key ) +{ + auto r = doc[ key ]; + if ( !r.IsDefined() ) + { + throw YAML::KeyNotFound( YAML::Mark::null_mark(), std::string( key ) ); + } + return r; +} + static inline void flavorAndSide( const YAML::Node& doc, const char* key, Branding::PanelFlavor& flavor, Branding::PanelSide& side ) { @@ -416,8 +459,11 @@ flavorAndSide( const YAML::Node& doc, const char* key, Branding::PanelFlavor& fl static const NamedEnumTable< PanelFlavor > sidebarFlavorNames { { QStringLiteral( "widget" ), PanelFlavor::Widget }, { QStringLiteral( "none" ), PanelFlavor::None }, - { QStringLiteral( "hidden" ), PanelFlavor::None }, + { QStringLiteral( "hidden" ), PanelFlavor::None } +#ifdef WITH_QML + , { QStringLiteral( "qml" ), PanelFlavor::Qml } +#endif }; static const NamedEnumTable< PanelSide > panelSideNames { { QStringLiteral( "left" ), PanelSide::Left }, @@ -533,12 +579,65 @@ Branding::initSimpleSettings( const YAML::Node& doc ) } } - -[[noreturn]] void -Branding::bail( const QString& message ) +void +Branding::initSlideshowSettings( const YAML::Node& doc ) { - cError() << "FATAL in" << m_descriptorPath << "\n" + message; - ::exit( EXIT_FAILURE ); + QDir componentDir( componentDirectory() ); + + auto slideshow = get( doc, "slideshow" ); + if ( slideshow.IsSequence() ) + { + QStringList slideShowPictures; + slideshow >> slideShowPictures; + for ( int i = 0; i < slideShowPictures.count(); ++i ) + { + QString pathString = slideShowPictures[ i ]; + QFileInfo imageFi( componentDir.absoluteFilePath( pathString ) ); + if ( !imageFi.exists() ) + { + bail( m_descriptorPath, + QString( "Slideshow file %1 does not exist." ).arg( imageFi.absoluteFilePath() ) ); + } + + slideShowPictures[ i ] = imageFi.absoluteFilePath(); + } + + m_slideshowFilenames = slideShowPictures; + m_slideshowAPI = -1; + } +#ifdef WITH_QML + else if ( slideshow.IsScalar() ) + { + QString slideshowPath = QString::fromStdString( slideshow.as< std::string >() ); + QFileInfo slideshowFi( componentDir.absoluteFilePath( slideshowPath ) ); + if ( !slideshowFi.exists() || !slideshowFi.fileName().toLower().endsWith( ".qml" ) ) + bail( m_descriptorPath, + QString( "Slideshow file %1 does not exist or is not a valid QML file." ) + .arg( slideshowFi.absoluteFilePath() ) ); + m_slideshowPath = slideshowFi.absoluteFilePath(); + + // API choice is relevant for QML slideshow + // TODO:3.3: use get(), make slideshowAPI required + int api + = ( doc[ "slideshowAPI" ] && doc[ "slideshowAPI" ].IsScalar() ) ? doc[ "slideshowAPI" ].as< int >() : -1; + if ( ( api < 1 ) || ( api > 2 ) ) + { + cWarning() << "Invalid or missing *slideshowAPI* in branding file."; + api = 1; + } + m_slideshowAPI = api; + } +#else + else if ( slideshow.IsScalar() ) + { + cWarning() << "Invalid *slideshow* setting, must be list of images."; + } +#endif + else + { + bail( m_descriptorPath, "Syntax error in slideshow sequence." ); + } } + } // namespace Calamares diff --git a/src/libcalamaresui/Branding.h b/src/libcalamaresui/Branding.h index 023f1a511..1654b4d56 100644 --- a/src/libcalamaresui/Branding.h +++ b/src/libcalamaresui/Branding.h @@ -1,34 +1,29 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura (raurodse) - * Copyright 2019, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura (raurodse) + * SPDX-FileCopyrightText: 2019 Camilo Higuita + * SPDX-FileCopyrightText: 2021 Anubhav Choudhary + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef BRANDING_H #define BRANDING_H +#include "CalamaresConfig.h" #include "DllMacro.h" - #include "utils/NamedSuffix.h" #include #include +#include +#include #include +#include namespace YAML { @@ -49,6 +44,7 @@ public: * e.g. *Branding::ProductName to get the string value for * the product name. */ + enum StringEntry { ProductName, @@ -61,16 +57,18 @@ public: ProductUrl, SupportUrl, KnownIssuesUrl, - ReleaseNotesUrl + ReleaseNotesUrl, + DonateUrl }; Q_ENUM( StringEntry ) enum ImageEntry : short { - ProductLogo, + ProductBanner, ProductIcon, - ProductWelcome, - ProductWallpaper + ProductLogo, + ProductWallpaper, + ProductWelcome }; Q_ENUM( ImageEntry ) @@ -79,10 +77,23 @@ public: SidebarBackground, SidebarText, SidebarTextSelect, - SidebarTextHighlight + SidebarTextSelected = SidebarTextSelect, // TODO:3.3:Remove SidebarTextSelect + SidebarTextHighlight, + SidebarBackgroundSelected = SidebarTextHighlight // TODO:3.3:Remove SidebarTextHighlight }; Q_ENUM( StyleEntry ) + /** @brief Supported log-upload servers. + * + * 'None' is here as a fallback. + */ + enum UploadServerType : short + { + None, + Fiche + }; + Q_ENUM( UploadServerType ) + /** @brief Setting for how much the main window may expand. */ enum class WindowExpansion { @@ -127,8 +138,11 @@ public: enum class PanelFlavor { None, - Widget, + Widget +#ifdef WITH_QML + , Qml +#endif }; Q_ENUM( PanelFlavor ) ///@brief Where to place a panel (sidebar, navigation) @@ -161,8 +175,16 @@ public: */ QString translationsDirectory() const { return m_translationsPathPrefix; } - /** @brief Path to the slideshow QML file, if any. */ + /** @brief Path to the slideshow QML file, if any. (API == 1 or 2)*/ QString slideshowPath() const { return m_slideshowPath; } + /// @brief List of pathnames of slideshow images, if any. (API == -1) + QStringList slideshowImages() const { return m_slideshowFilenames; } + /** @brief Which slideshow API to use for the slideshow? + * + * - 2 For QML-based slideshows loaded asynchronously (current) + * - 1 For QML-based slideshows, loaded when shown (legacy) + * - -1 For oldschool image-slideshows. + */ int slideshowAPI() const { return m_slideshowAPI; } QPixmap image( Branding::ImageEntry imageEntry, const QSize& size ) const; @@ -176,6 +198,13 @@ public: */ QPixmap image( const QString& name, const QSize& size ) const; + /** @brief Look up image with alternate names + * + * Calls image() for each name in the @p list and returns the first + * one that is non-null. May return a null pixmap if nothing is found. + */ + QPixmap image( const QStringList& list, const QSize& size ) const; + /** @brief Stylesheet to apply for this branding. May be empty. * * The file is loaded every time this function is called, so @@ -199,6 +228,22 @@ public: ///@brief Which navigation flavor is configured PanelFlavor navigationFlavor() const { return m_navigationFlavor; } + /** @brief Upload server configuration + * + * This object has 3 items : the type (which may be none, in which case the URL + * is irrelevant and usually empty), the URL for the upload and the size limit of upload + * in bytes (for configuration value < 0, it serves -1, which stands for having no limit). + */ + struct UploadServerInfo + { + UploadServerType type; + QUrl url; + qint64 size; + + operator bool() const { return type != Calamares::Branding::UploadServerType::None && size != 0; } + }; + UploadServerInfo uploadServer() const { return m_uploadServer; } + /** * Creates a map called "branding" in the global storage, and inserts an * entry for each of the branding strings. This makes the branding @@ -208,6 +253,11 @@ public: public slots: QString string( StringEntry stringEntry ) const; + QString versionedName() const { return string( VersionedName ); } + QString productName() const { return string( ProductName ); } + QString shortProductName() const { return string( ShortProductName ); } + QString shortVersionedName() const { return string( ShortVersionedName ); } + QString styleString( StyleEntry styleEntry ) const; QString imagePath( ImageEntry imageEntry ) const; @@ -220,20 +270,32 @@ private: static const QStringList s_stringEntryStrings; static const QStringList s_imageEntryStrings; static const QStringList s_styleEntryStrings; - - [[noreturn]] void bail( const QString& message ); + static const QStringList s_uploadServerStrings; QString m_descriptorPath; // Path to descriptor (e.g. "/etc/calamares/default/branding.desc") QString m_componentName; // Matches last part of full path to containing directory QMap< QString, QString > m_strings; QMap< QString, QString > m_images; QMap< QString, QString > m_style; + UploadServerInfo m_uploadServer; + + /* The slideshow can be done in one of two ways: + * - as a sequence of images + * - as a QML file + * The slideshow: setting selects which one is used. If it is + * a list (of filenames) then it is a sequence of images, and otherwise + * it is a QML file which is run. (For QML, the slideshow API is + * important). + */ + QStringList m_slideshowFilenames; QString m_slideshowPath; int m_slideshowAPI; QString m_translationsPathPrefix; /** @brief Initialize the simple settings below */ void initSimpleSettings( const YAML::Node& doc ); + ///@brief Initialize the slideshow settings, above + void initSlideshowSettings( const YAML::Node& doc ); bool m_welcomeStyleCalamares; bool m_welcomeExpandingLogo; @@ -248,12 +310,6 @@ private: PanelSide m_navigationSide = PanelSide::Bottom; }; -template < typename U > -inline QString operator*( U e ) -{ - return Branding::instance()->string( e ); -} - } // namespace Calamares #endif // BRANDING_H diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index e813b0009..48e4c4b4d 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # libcalamaresui is the GUI part of Calamares, which includes handling # view modules, view steps, widgets, and branding. @@ -14,15 +20,18 @@ set( calamaresui_SOURCES utils/CalamaresUtilsGui.cpp utils/ImageRegistry.cpp utils/Paste.cpp - utils/Qml.cpp viewpages/BlankViewStep.cpp viewpages/ExecutionViewStep.cpp - viewpages/QmlViewStep.cpp + viewpages/Slideshow.cpp viewpages/ViewStep.cpp widgets/ClickableLabel.cpp + widgets/ErrorDialog.cpp widgets/FixedAspectRatioLabel.cpp + widgets/PrettyRadioButton.cpp + widgets/LogWidget.cpp + widgets/TranslationFix.cpp widgets/WaitingWidget.cpp ${CMAKE_SOURCE_DIR}/3rdparty/waitingspinnerwidget.cpp @@ -32,8 +41,6 @@ set( calamaresui_SOURCES # Don't warn about third-party sources mark_thirdparty_code( - ${CMAKE_SOURCE_DIR}/3rdparty/qjsonitem.cpp - ${CMAKE_SOURCE_DIR}/3rdparty/qjsonmodel.cpp ${CMAKE_SOURCE_DIR}/3rdparty/waitingspinnerwidget.cpp ) @@ -44,10 +51,6 @@ if( WITH_PYTHON ) endif() if( WITH_PYTHONQT ) - include_directories(${PYTHON_INCLUDE_DIRS}) - # *_DIRS because we also use extensions - include_directories(${PYTHONQT_INCLUDE_DIRS}) - list( APPEND calamaresui_SOURCES modulesystem/PythonQtViewModule.cpp utils/PythonQtUtils.cpp @@ -56,25 +59,68 @@ if( WITH_PYTHONQT ) viewpages/PythonQtGlobalStorageWrapper.cpp viewpages/PythonQtUtilsWrapper.cpp ) - set( OPTIONAL_PYTHON_LIBRARIES - ${PYTHON_LIBRARIES} - ${PYTHONQT_LIBRARIES} +endif() + +if( WITH_QML ) + list( APPEND calamaresui_SOURCES + utils/Qml.cpp + viewpages/QmlViewStep.cpp ) endif() calamares_add_library( calamaresui SOURCES ${calamaresui_SOURCES} EXPORT_MACRO UIDLLEXPORT_PRO - LINK_PRIVATE_LIBRARIES - ${OPTIONAL_PYTHON_LIBRARIES} LINK_LIBRARIES Qt5::Svg - Qt5::QuickWidgets RESOURCES libcalamaresui.qrc - EXPORT CalamaresLibraryDepends + EXPORT Calamares + UI + utils/ErrorDialog/ErrorDialog.ui VERSION ${CALAMARES_VERSION_SHORT} ) - -if ( KF5CoreAddons_FOUND AND KF5CoreAddons_VERSION VERSION_GREATER_EQUAL 5.58 ) +target_link_libraries( calamaresui PRIVATE yamlcpp::yamlcpp ) +if( KF5CoreAddons_FOUND AND KF5CoreAddons_VERSION VERSION_GREATER_EQUAL 5.58 ) target_compile_definitions( calamaresui PRIVATE WITH_KOSRelease ) endif() +if( WITH_PYTHONQT ) + # *_DIRS because we also use extensions + target_include_directories( calamaresui PRIVATE ${PYTHON_INCLUDE_DIRS} ${PYTHONQT_INCLUDE_DIRS} ) + target_link_libraries( calamaresui PRIVATE ${PYTHON_LIBRARIES} ${PYTHONQT_LIBRARIES} ) +endif() +if( WITH_QML ) + target_link_libraries( calamaresui PUBLIC Qt5::QuickWidgets ) +endif() + +add_library(Calamares::calamaresui ALIAS calamaresui) + + +### Installation +# +# +# The library is already installed through calamares_add_library(), +# so we only need to do headers. Unlike the Calamares source tree, +# where libcalamares and libcalamaresui live in different branches, +# we're going to glom it all together in the installed headers location. + +install( + FILES + Branding.h + ViewManager.h + DESTINATION include/libcalamares +) + +# Install each subdir-worth of header files +foreach( subdir modulesystem utils viewpages widgets ) + file( GLOB subdir_headers "${subdir}/*.h" ) + install( FILES ${subdir_headers} DESTINATION include/libcalamares/${subdir} ) +endforeach() + +calamares_add_test( + test_libcalamaresuipaste + SOURCES + utils/TestPaste.cpp + utils/Paste.cpp + LIBRARIES + calamaresui +) diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index 43308d3d6..44afafb15 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -1,22 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Dominic Hayes - * Copyright 2019, Gabriel Craciunescu - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Dominic Hayes + * SPDX-FileCopyrightText: 2019 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2021 Anubhav Choudhary + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ViewManager.h" @@ -28,21 +20,27 @@ #include "utils/Logger.h" #include "utils/Paste.h" #include "utils/Retranslator.h" +#include "utils/String.h" #include "viewpages/BlankViewStep.h" #include "viewpages/ExecutionViewStep.h" #include "viewpages/ViewStep.h" +#include "widgets/ErrorDialog.h" +#include "widgets/TranslationFix.h" #include #include +#include +#include #include #include #include #define UPDATE_BUTTON_PROPERTY( name, value ) \ + do \ { \ m_##name = value; \ emit name##Changed( m_##name ); \ - } + } while ( false ) namespace Calamares { @@ -67,13 +65,17 @@ ViewManager::ViewManager( QObject* parent ) : QAbstractListModel( parent ) , m_currentStep( -1 ) , m_widget( new QWidget() ) + , m_panelSides( Qt::Horizontal | Qt::Vertical ) { Q_ASSERT( !s_instance ); QBoxLayout* mainLayout = new QVBoxLayout; + mainLayout->setContentsMargins( 0, 0, 0, 0 ); + m_widget->setObjectName( "viewManager" ); m_widget->setLayout( mainLayout ); m_stack = new QStackedWidget( m_widget ); + m_stack->setObjectName( "viewManagerStack" ); m_stack->setContentsMargins( 0, 0, 0, 0 ); mainLayout->addWidget( m_stack ); @@ -82,7 +84,13 @@ ViewManager::ViewManager( QObject* parent ) connect( JobQueue::instance(), &JobQueue::failed, this, &ViewManager::onInstallationFailed ); connect( JobQueue::instance(), &JobQueue::finished, this, &ViewManager::next ); - CALAMARES_RETRANSLATE_SLOT( &ViewManager::updateButtonLabels ) + CALAMARES_RETRANSLATE_SLOT( &ViewManager::updateButtonLabels ); + +#ifdef PRESERVE_FOR_TRANSLATION_PURPOSES + tr( "&Yes" ); + tr( "&No" ); + tr( "&Close" ); +#endif } @@ -118,86 +126,58 @@ ViewManager::insertViewStep( int before, ViewStep* step ) { emit beginInsertRows( QModelIndex(), before, before ); m_steps.insert( before, step ); - connect( step, &ViewStep::enlarge, this, &ViewManager::enlarge ); + connect( step, &ViewStep::ensureSize, this, &ViewManager::ensureSize ); connect( step, &ViewStep::nextStatusChanged, this, &ViewManager::updateNextStatus ); if ( !step->widget() ) { cError() << "ViewStep" << step->moduleInstanceKey() << "has no widget."; } - - QLayout* layout = step->widget()->layout(); - if ( layout ) + else { - layout->setContentsMargins( 0, 0, 0, 0 ); + QLayout* layout = step->widget()->layout(); + if ( layout ) + { + const auto margins = step->widgetMargins( m_panelSides ); + layout->setContentsMargins( margins.width(), margins.height(), margins.width(), margins.height() ); + } + + m_stack->insertWidget( before, step->widget() ); + m_stack->setCurrentIndex( 0 ); + step->widget()->setFocus(); } - m_stack->insertWidget( before, step->widget() ); - m_stack->setCurrentIndex( 0 ); - step->widget()->setFocus(); emit endInsertRows(); } - void ViewManager::onInstallationFailed( const QString& message, const QString& details ) { - bool shouldOfferWebPaste = false; // TODO: config var - - cError() << "Installation failed:"; - cDebug() << "- message:" << message; - cDebug() << "- details:" << details; + cError() << "Installation failed:" << message; + cDebug() << Logger::SubEntry << "- message:" << message; + cDebug() << Logger::SubEntry << "- details:" << Logger::NoQuote << details; QString heading = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Failed" ) : tr( "Installation Failed" ); - QString pasteMsg = tr( "Would you like to paste the install log to the web?" ); - QString text = "

" + message + "

"; - if ( !details.isEmpty() ) - { - text += "

" + details + "

"; - } - if ( shouldOfferWebPaste ) - { - text += "

" + pasteMsg + "

"; - } - QMessageBox* msgBox = new QMessageBox(); - msgBox->setIcon( QMessageBox::Critical ); - msgBox->setWindowTitle( tr( "Error" ) ); - msgBox->setText( "" + heading + "" ); - msgBox->setInformativeText( text ); - if ( shouldOfferWebPaste ) - { - msgBox->setStandardButtons( QMessageBox::Yes | QMessageBox::No ); - msgBox->setDefaultButton( QMessageBox::No ); - msgBox->button( QMessageBox::Yes )->setText( tr( "&Yes" ) ); - msgBox->button( QMessageBox::No )->setText( tr( "&No" ) ); - } - else - { - msgBox->setStandardButtons( QMessageBox::Close ); - msgBox->setDefaultButton( QMessageBox::Close ); - msgBox->button( QMessageBox::Close )->setText( tr( "&Close" ) ); - } - msgBox->show(); + ErrorDialog* errorDialog = new ErrorDialog(); + errorDialog->setWindowTitle( tr( "Error" ) ); + errorDialog->setHeading( "" + heading + "" ); + errorDialog->setInformativeText( message ); + errorDialog->setShouldOfferWebPaste( Calamares::Branding::instance()->uploadServer() ); + errorDialog->setDetails( details ); + errorDialog->show(); cDebug() << "Calamares will quit when the dialog closes."; - connect( msgBox, &QMessageBox::buttonClicked, [msgBox]( QAbstractButton* button ) { - if ( msgBox->buttonRole( button ) == QMessageBox::ButtonRole::YesRole ) - { - // TODO: host and port should be configurable - QString pasteUrlMsg = CalamaresUtils::sendLogToPastebin( msgBox, QStringLiteral( "termbin.com" ), 9999 ); - - QString pasteUrlTitle = tr( "Install Log Paste URL" ); - if ( pasteUrlMsg.isEmpty() ) - { - pasteUrlMsg = tr( "The upload was unsuccessful. No web-paste was done." ); - } - - // TODO: make the URL clickable, or copy it to the clipboard automatically - QMessageBox::critical( nullptr, pasteUrlTitle, pasteUrlMsg ); - } - QApplication::quit(); - } ); + connect( errorDialog, + &QDialog::finished, + [ errorDialog ]( int result ) + { + if ( result == QDialog::Accepted && errorDialog->shouldOfferWebPaste() ) + { + CalamaresUtils::Paste::doLogUploadUI( errorDialog ); + } + QApplication::quit(); + } ); } @@ -224,7 +204,9 @@ ViewManager::onInitFailed( const QStringList& modules ) detailString = details.join( QString() ); } - insertViewStep( 0, new BlankViewStep( title, description.arg( *Calamares::Branding::ProductName ), detailString ) ); + insertViewStep( + 0, + new BlankViewStep( title, description.arg( Calamares::Branding::instance()->productName() ), detailString ) ); } void @@ -237,6 +219,8 @@ ViewManager::onInitComplete() { m_steps.first()->onActivate(); } + + emit currentStepChanged(); } void @@ -333,15 +317,16 @@ ViewManager::next() "to undo these changes." ); QString confirm = settings->isSetupMode() ? tr( "&Set up now" ) : tr( "&Install now" ); - int reply = QMessageBox::question( - m_widget, - title, - question.arg( *Calamares::Branding::ShortProductName, *Calamares::Branding::ShortVersionedName ), - confirm, - tr( "Go &back" ), - QString(), - 0 /* default first button, i.e. confirm */, - 1 /* escape is second button, i.e. cancel */ ); + const auto* branding = Calamares::Branding::instance(); + int reply + = QMessageBox::question( m_widget, + title, + question.arg( branding->shortProductName(), branding->shortVersionedName() ), + confirm, + tr( "Go &back" ), + QString(), + 0 /* default first button, i.e. confirm */, + 1 /* escape is second button, i.e. cancel */ ); if ( reply == 1 ) { return; @@ -363,10 +348,11 @@ ViewManager::next() { // Reached the end in a weird state (e.g. no finished step after an exec) executing = false; - UPDATE_BUTTON_PROPERTY( nextEnabled, false ) - UPDATE_BUTTON_PROPERTY( backEnabled, false ) + UPDATE_BUTTON_PROPERTY( nextEnabled, false ); + UPDATE_BUTTON_PROPERTY( backEnabled, false ); } updateCancelEnabled( !settings->disableCancel() && !( executing && settings->disableCancelDuringExec() ) ); + updateBackAndNextVisibility( !( executing && settings->hideBackAndNextDuringExec() ) ); } else { @@ -375,8 +361,8 @@ ViewManager::next() if ( m_currentStep < m_steps.count() ) { - UPDATE_BUTTON_PROPERTY( nextEnabled, !executing && m_steps.at( m_currentStep )->isNextEnabled() ) - UPDATE_BUTTON_PROPERTY( backEnabled, !executing && m_steps.at( m_currentStep )->isBackEnabled() ) + UPDATE_BUTTON_PROPERTY( nextEnabled, !executing && m_steps.at( m_currentStep )->isNextEnabled() ); + UPDATE_BUTTON_PROPERTY( backEnabled, !executing && m_steps.at( m_currentStep )->isBackEnabled() ); } updateButtonLabels(); @@ -398,26 +384,26 @@ ViewManager::updateButtonLabels() // If we're going into the execution step / install phase, other message if ( stepIsExecute( m_steps, m_currentStep + 1 ) ) { - UPDATE_BUTTON_PROPERTY( nextLabel, nextIsInstallationStep ) - UPDATE_BUTTON_PROPERTY( nextIcon, "run-install" ) + UPDATE_BUTTON_PROPERTY( nextLabel, nextIsInstallationStep ); + UPDATE_BUTTON_PROPERTY( nextIcon, "run-install" ); } else { - UPDATE_BUTTON_PROPERTY( nextLabel, tr( "&Next" ) ) - UPDATE_BUTTON_PROPERTY( nextIcon, "go-next" ) + UPDATE_BUTTON_PROPERTY( nextLabel, tr( "&Next" ) ); + UPDATE_BUTTON_PROPERTY( nextIcon, "go-next" ); } // Going back is always simple - UPDATE_BUTTON_PROPERTY( backLabel, tr( "&Back" ) ) - UPDATE_BUTTON_PROPERTY( backIcon, "go-previous" ) + UPDATE_BUTTON_PROPERTY( backLabel, tr( "&Back" ) ); + UPDATE_BUTTON_PROPERTY( backIcon, "go-previous" ); // Cancel button changes label at the end if ( isAtVeryEnd( m_steps, m_currentStep ) ) { - UPDATE_BUTTON_PROPERTY( quitLabel, tr( "&Done" ) ) - UPDATE_BUTTON_PROPERTY( quitTooltip, quitOnCompleteTooltip ) - UPDATE_BUTTON_PROPERTY( quitVisible, true ) - UPDATE_BUTTON_PROPERTY( quitIcon, "dialog-ok-apply" ) + UPDATE_BUTTON_PROPERTY( quitLabel, tr( "&Done" ) ); + UPDATE_BUTTON_PROPERTY( quitTooltip, quitOnCompleteTooltip ); + UPDATE_BUTTON_PROPERTY( quitVisible, true ); + UPDATE_BUTTON_PROPERTY( quitIcon, "dialog-ok-apply" ); updateCancelEnabled( true ); if ( settings->quitAtEnd() ) { @@ -428,14 +414,14 @@ ViewManager::updateButtonLabels() { if ( settings->disableCancel() ) { - UPDATE_BUTTON_PROPERTY( quitVisible, false ) + UPDATE_BUTTON_PROPERTY( quitVisible, false ); } updateCancelEnabled( !settings->disableCancel() && !( stepIsExecute( m_steps, m_currentStep ) && settings->disableCancelDuringExec() ) ); - UPDATE_BUTTON_PROPERTY( quitLabel, tr( "&Cancel" ) ) - UPDATE_BUTTON_PROPERTY( quitTooltip, cancelBeforeInstallationTooltip ) - UPDATE_BUTTON_PROPERTY( quitIcon, "dialog-cancel" ) + UPDATE_BUTTON_PROPERTY( quitLabel, tr( "&Cancel" ) ); + UPDATE_BUTTON_PROPERTY( quitTooltip, cancelBeforeInstallationTooltip ); + UPDATE_BUTTON_PROPERTY( quitIcon, "dialog-cancel" ); } } @@ -465,11 +451,11 @@ ViewManager::back() return; } - UPDATE_BUTTON_PROPERTY( nextEnabled, m_steps.at( m_currentStep )->isNextEnabled() ) + UPDATE_BUTTON_PROPERTY( nextEnabled, m_steps.at( m_currentStep )->isNextEnabled() ); UPDATE_BUTTON_PROPERTY( backEnabled, ( m_currentStep == 0 && m_steps.first()->isAtBeginning() ) ? false - : m_steps.at( m_currentStep )->isBackEnabled() ) + : m_steps.at( m_currentStep )->isBackEnabled() ); updateButtonLabels(); } @@ -513,8 +499,7 @@ ViewManager::confirmCancelInstallation() "The installer will quit and all changes will be lost." ); QMessageBox mb( QMessageBox::Question, title, question, QMessageBox::Yes | QMessageBox::No, m_widget ); mb.setDefaultButton( QMessageBox::No ); - mb.button( QMessageBox::Yes )->setText( tr( "&Yes" ) ); - mb.button( QMessageBox::No )->setText( tr( "&No" ) ); + Calamares::fixButtonLabels( &mb ); int response = mb.exec(); return response == QMessageBox::Yes; } @@ -522,10 +507,16 @@ ViewManager::confirmCancelInstallation() void ViewManager::updateCancelEnabled( bool enabled ) { - UPDATE_BUTTON_PROPERTY( quitEnabled, enabled ) + UPDATE_BUTTON_PROPERTY( quitEnabled, enabled ); emit cancelEnabled( enabled ); } +void +ViewManager::updateBackAndNextVisibility( bool visible ) +{ + UPDATE_BUTTON_PROPERTY( backAndNextVisible, visible ); +} + QVariant ViewManager::data( const QModelIndex& index, int role ) const { @@ -583,4 +574,31 @@ ViewManager::rowCount( const QModelIndex& parent ) const return m_steps.length(); } +bool +ViewManager::isChrootMode() const +{ + const auto* s = Settings::instance(); + return s ? s->doChroot() : true; +} + +bool +ViewManager::isDebugMode() const +{ + const auto* s = Settings::instance(); + return s ? s->debugMode() : false; +} + +bool +ViewManager::isSetupMode() const +{ + const auto* s = Settings::instance(); + return s ? s->isSetupMode() : false; +} + +QString +ViewManager::logFilePath() const +{ + return Logger::logFile(); +} + } // namespace Calamares diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h index 6c283cfbe..5a449a153 100644 --- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VIEWMANAGER_H @@ -54,6 +45,17 @@ class UIDLLEXPORT ViewManager : public QAbstractListModel Q_PROPERTY( bool quitVisible READ quitVisible NOTIFY quitVisibleChanged FINAL ) + Q_PROPERTY( bool backAndNextVisible READ backAndNextVisible NOTIFY backAndNextVisibleChanged FINAL ) + + ///@brief Sides on which the ViewManager has side-panels + Q_PROPERTY( Qt::Orientations panelSides READ panelSides WRITE setPanelSides MEMBER m_panelSides ) + + // Global properties, where ViewManager proxies to Settings + Q_PROPERTY( bool isDebugMode READ isDebugMode CONSTANT FINAL ) + Q_PROPERTY( bool isChrootMode READ isChrootMode CONSTANT FINAL ) + Q_PROPERTY( bool isSetupMode READ isSetupMode CONSTANT FINAL ) + Q_PROPERTY( QString logFilePath READ logFilePath CONSTANT FINAL ) + public: /** * @brief instance access to the ViewManager singleton. @@ -100,13 +102,17 @@ public: int currentStepIndex() const; /** - * @ brief Called when "Cancel" is clicked; asks for confirmation. + * @brief Called when "Cancel" is clicked; asks for confirmation. * Other means of closing Calamares also call this method, e.g. alt-F4. - * At the end of installation, no confirmation is asked. Returns true - * if the user confirms closing the window. + * At the end of installation, no confirmation is asked. + * + * @return @c true if the user confirms closing the window. */ bool confirmCancelInstallation(); + Qt::Orientations panelSides() const { return m_panelSides; } + void setPanelSides( Qt::Orientations panelSides ) { m_panelSides = panelSides; } + public Q_SLOTS: /** * @brief next moves forward to the next page of the current ViewStep (if any), @@ -146,6 +152,10 @@ public Q_SLOTS: return m_backIcon; ///< Name of the icon to show } + bool backAndNextVisible() const + { + return m_backAndNextVisible; ///< Is the quit-button to be enabled + } /** * @brief Probably quit * @@ -193,9 +203,18 @@ public Q_SLOTS: /// @brief Connected to ViewStep::nextStatusChanged for all steps void updateNextStatus( bool enabled ); + /// @brief Proxy to Settings::debugMode() default @c false + bool isDebugMode() const; + /// @brief Proxy to Settings::doChroot() default @c true + bool isChrootMode() const; + /// @brief Proxy to Settings::isSetupMode() default @c false + bool isSetupMode() const; + /// @brief Proxy to Logger::logFile(), default empty + QString logFilePath() const; + signals: void currentStepChanged(); - void enlarge( QSize enlarge ) const; // See ViewStep::enlarge() + void ensureSize( QSize size ) const; // See ViewStep::ensureSize() void cancelEnabled( bool enabled ) const; void nextEnabledChanged( bool ) const; @@ -205,6 +224,7 @@ signals: void backEnabledChanged( bool ) const; void backLabelChanged( QString ) const; void backIconChanged( QString ) const; + void backAndNextVisibleChanged( bool ) const; void quitEnabledChanged( bool ) const; void quitLabelChanged( QString ) const; @@ -214,11 +234,12 @@ signals: private: explicit ViewManager( QObject* parent = nullptr ); - virtual ~ViewManager() override; + ~ViewManager() override; void insertViewStep( int before, ViewStep* step ); void updateButtonLabels(); void updateCancelEnabled( bool enabled ); + void updateBackAndNextVisibility( bool visible ); inline bool currentStepValid() const { return ( 0 <= m_currentStep ) && ( m_currentStep < m_steps.length() ); } @@ -238,12 +259,16 @@ private: QString m_backLabel; QString m_backIcon; + bool m_backAndNextVisible = true; + bool m_quitEnabled = false; QString m_quitLabel; QString m_quitIcon; QString m_quitTooltip; bool m_quitVisible = true; + Qt::Orientations m_panelSides; + public: /** @section Model * diff --git a/src/libcalamaresui/libcalamaresui.qrc b/src/libcalamaresui/libcalamaresui.qrc index eeb3fc490..62a7df271 100644 --- a/src/libcalamaresui/libcalamaresui.qrc +++ b/src/libcalamaresui/libcalamaresui.qrc @@ -1,4 +1,8 @@ - + + + ../../data/images/yes.svgz ../../data/images/no.svgz diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp index 2eddeda86..c2110061c 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.cpp +++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2016, Kevin Kofler + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CppJobModule.h" @@ -52,14 +43,14 @@ CppJobModule::loadSelf() CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { - cDebug() << Q_FUNC_INFO << m_loader->errorString(); + cDebug() << "Could not load module:" << m_loader->errorString(); return; } CppJob* cppJob = pf->create< Calamares::CppJob >(); if ( !cppJob ) { - cDebug() << Q_FUNC_INFO << m_loader->errorString(); + cDebug() << "Could not load module:" << m_loader->errorString(); return; } // cDebug() << "CppJobModule loading self for instance" << instanceKey() @@ -84,13 +75,12 @@ CppJobModule::jobs() const void -CppJobModule::initFrom( const QVariantMap& moduleDescriptor ) +CppJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); - QString load; - if ( !moduleDescriptor.value( "load" ).toString().isEmpty() ) + QString load = moduleDescriptor.load(); + if ( !load.isEmpty() ) { - load = moduleDescriptor.value( "load" ).toString(); load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. diff --git a/src/libcalamaresui/modulesystem/CppJobModule.h b/src/libcalamaresui/modulesystem/CppJobModule.h index 2fd82433c..b999fd0a3 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.h +++ b/src/libcalamaresui/modulesystem/CppJobModule.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2016, Kevin Kofler - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_CPPJOBMODULE_H @@ -39,11 +30,11 @@ public: JobList jobs() const override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit CppJobModule(); - virtual ~CppJobModule() override; + ~CppJobModule() override; QPluginLoader* m_loader; job_ptr m_job; diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.cpp b/src/libcalamaresui/modulesystem/ModuleFactory.cpp index f3b46eab7..a7193d3f5 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.cpp +++ b/src/libcalamaresui/modulesystem/ModuleFactory.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ModuleFactory.h" @@ -52,23 +43,23 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto const QString& configFileName, const QString& moduleDirectory ) { + using Type = Calamares::ModuleSystem::Type; + using Interface = Calamares::ModuleSystem::Interface; + std::unique_ptr< Module > m; - QString typeString = moduleDescriptor.value( "type" ).toString(); - QString intfString = moduleDescriptor.value( "interface" ).toString(); - - if ( typeString.isEmpty() || intfString.isEmpty() ) + if ( !moduleDescriptor.isValid() ) { cError() << "Bad module descriptor format" << instanceId; return nullptr; } - if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) ) + if ( moduleDescriptor.type() == Type::View ) { - if ( intfString == "qtplugin" ) + if ( moduleDescriptor.interface() == Interface::QtPlugin ) { m.reset( new ViewModule() ); } - else if ( intfString == "pythonqt" ) + else if ( moduleDescriptor.interface() == Interface::PythonQt ) { #ifdef WITH_PYTHONQT m.reset( new PythonQtViewModule() ); @@ -78,20 +69,22 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto } else { - cError() << "Bad interface" << intfString << "for module type" << typeString; + cError() << "Bad interface" + << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) + << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } - else if ( typeString == "job" ) + else if ( moduleDescriptor.type() == Type::Job ) { - if ( intfString == "qtplugin" ) + if ( moduleDescriptor.interface() == Interface::QtPlugin ) { m.reset( new CppJobModule() ); } - else if ( intfString == "process" ) + else if ( moduleDescriptor.interface() == Interface::Process ) { m.reset( new ProcessJobModule() ); } - else if ( intfString == "python" ) + else if ( moduleDescriptor.interface() == Interface::Python ) { #ifdef WITH_PYTHON m.reset( new PythonJobModule() ); @@ -101,17 +94,21 @@ moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescripto } else { - cError() << "Bad interface" << intfString << "for module type" << typeString; + cError() << "Bad interface" + << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) + << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } else { - cError() << "Bad module type" << typeString; + cError() << "Bad module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } if ( !m ) { - cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module " + cError() << "Bad module type (" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ) + << ") or interface string (" + << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << ") for module " << instanceId; return nullptr; } diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.h b/src/libcalamaresui/modulesystem/ModuleFactory.h index 8184967d2..170e27e8e 100644 --- a/src/libcalamaresui/modulesystem/ModuleFactory.h +++ b/src/libcalamaresui/modulesystem/ModuleFactory.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_MODULEFACTORY_H diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 8d4b2342f..1e397b340 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ModuleManager.h" @@ -24,6 +15,7 @@ #include "Settings.h" #include "modulesystem/Module.h" #include "modulesystem/RequirementsChecker.h" +#include "modulesystem/RequirementsModel.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include "viewpages/ExecutionViewStep.h" @@ -46,6 +38,7 @@ ModuleManager::instance() ModuleManager::ModuleManager( const QStringList& paths, QObject* parent ) : QObject( parent ) , m_paths( paths ) + , m_requirementsModel( new RequirementsModel( this ) ) { Q_ASSERT( !s_instance ); s_instance = this; @@ -68,7 +61,6 @@ ModuleManager::init() QTimer::singleShot( 0, this, &ModuleManager::doInit ); } - void ModuleManager::doInit() { @@ -79,6 +71,7 @@ ModuleManager::doInit() // the module name, and must contain a settings file named module.desc. // If at any time the module loading procedure finds something unexpected, it // silently skips to the next module or search path. --Teo 6/2014 + Logger::Once deb; for ( const QString& path : m_paths ) { QDir currentDir( path ); @@ -95,12 +88,12 @@ ModuleManager::doInit() QFileInfo descriptorFileInfo( currentDir.absoluteFilePath( QLatin1String( "module.desc" ) ) ); if ( !descriptorFileInfo.exists() ) { - cDebug() << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(missing)"; + cDebug() << deb << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(missing)"; continue; } if ( !descriptorFileInfo.isReadable() ) { - cDebug() << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(unreadable)"; + cDebug() << deb << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(unreadable)"; continue; } @@ -111,9 +104,19 @@ ModuleManager::doInit() if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() ) && !m_availableDescriptorsByModuleName.contains( moduleName ) ) { - m_availableDescriptorsByModuleName.insert( moduleName, moduleDescriptorMap ); - m_moduleDirectoriesByModuleName.insert( moduleName, - descriptorFileInfo.absoluteDir().absolutePath() ); + auto descriptor = Calamares::ModuleSystem::Descriptor::fromDescriptorData( + moduleDescriptorMap, descriptorFileInfo.absoluteFilePath() ); + descriptor.setDirectory( descriptorFileInfo.absoluteDir().absolutePath() ); + m_availableDescriptorsByModuleName.insert( moduleName, descriptor ); + } + else + { + // Duplicate modules are ok; other issues like empty name or dir-mismatch are reported. + if ( !m_availableDescriptorsByModuleName.contains( moduleName ) ) + { + cWarning() << deb << "ModuleManager module descriptor" + << descriptorFileInfo.absoluteFilePath() << "has bad name" << moduleName; + } } } else @@ -124,14 +127,13 @@ ModuleManager::doInit() } else { - cDebug() << "ModuleManager module search path does not exist:" << path; + cDebug() << deb << "ModuleManager module search path does not exist:" << path; } } // At this point m_availableDescriptorsByModuleName is filled with // the modules that were found in the search paths. - cDebug() << "Found" << m_availableDescriptorsByModuleName.count() << "modules" - << m_moduleDirectoriesByModuleName.count() << "names"; - emit initDone(); + cDebug() << deb << "Found" << m_availableDescriptorsByModuleName.count() << "modules"; + QTimer::singleShot( 10, this, &ModuleManager::initDone ); } @@ -149,66 +151,43 @@ ModuleManager::moduleDescriptor( const QString& name ) } Module* -ModuleManager::moduleInstance( const QString& instanceKey ) +ModuleManager::moduleInstance( const ModuleSystem::InstanceKey& instanceKey ) { - return m_loadedModulesByInstanceKey.value( ModuleSystem::InstanceKey::fromString( instanceKey ) ); + return m_loadedModulesByInstanceKey.value( instanceKey ); } -/** - * @brief Search a list of instance descriptions for one matching @p module and @p id - * - * @return -1 on failure, otherwise index of the instance that matches. - */ -static int -findCustomInstance( const Settings::InstanceDescriptionList& customInstances, const ModuleSystem::InstanceKey& m ) -{ - for ( int i = 0; i < customInstances.count(); ++i ) - { - const auto& thisInstance = customInstances[ i ]; - if ( thisInstance.module == m.module() && thisInstance.id == m.id() ) - { - return i; - } - } - return -1; -} - -/** @brief Returns the config file name for the fiven @p instanceKey +/** @brief Returns the config file name for the given @p instanceKey * * Custom instances have custom config files, non-custom ones * have a .conf file. Returns an empty QString on * errors. */ static QString -getConfigFileName( const Settings::InstanceDescriptionList& customInstances, +getConfigFileName( const Settings::InstanceDescriptionList& descriptorList, const ModuleSystem::InstanceKey& instanceKey, - const ModuleSystem::Descriptor& descriptor ) + const ModuleSystem::Descriptor& thisModule ) { - if ( instanceKey.isCustom() ) + if ( !thisModule.hasConfig() ) { - int found = findCustomInstance( customInstances, instanceKey ); - - if ( found < 0 ) - { - // This should already have been checked and failed the module already - return QString(); - } - - return customInstances[ found ].config; + // Explicitly set to no-configuration. This doesn't apply + // to custom instances (above) since the only reason to + // **have** a custom instance is to specify a different + // config file for more than one module. + return QString(); } - else + + for ( const auto& descriptor : descriptorList ) { - if ( descriptor.value( "noconfig", false ).toBool() ) + if ( descriptor.key() == instanceKey ) { - // Explicitly set to no-configuration. This doesn't apply - // to custom instances (above) since the only reason to - // **have** a custom instance is to specify a different - // config file for more than one module. - return QString(); + return descriptor.configFileName(); } - return QString( "%1.conf" ).arg( instanceKey.module() ); } + + + // This should already have been checked and failed the module already + return QString(); } void @@ -218,7 +197,7 @@ ModuleManager::loadModules() { cWarning() << "Some installed modules have unmet dependencies."; } - Settings::InstanceDescriptionList customInstances = Settings::instance()->customModuleInstances(); + Settings::InstanceDescriptionList customInstances = Settings::instance()->moduleInstances(); QStringList failedModules; const auto modulesSequence = Settings::instance()->modulesSequence(); @@ -226,29 +205,18 @@ ModuleManager::loadModules() { ModuleSystem::Action currentAction = modulePhase.first; - foreach ( const QString& moduleEntry, modulePhase.second ) + for ( const auto& instanceKey : modulePhase.second ) { - auto instanceKey = ModuleSystem::InstanceKey::fromString( moduleEntry ); if ( !instanceKey.isValid() ) { - cError() << "Wrong module entry format for module" << moduleEntry; - failedModules.append( moduleEntry ); + cError() << "Wrong module entry format for module" << instanceKey; + failedModules.append( instanceKey.toString() ); continue; } - if ( instanceKey.isCustom() ) - { - int found = findCustomInstance( customInstances, instanceKey ); - if ( found < 0 ) - { - cError() << "Custom instance" << moduleEntry << "not found in custom instances section."; - failedModules.append( moduleEntry ); - continue; - } - } ModuleSystem::Descriptor descriptor = m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() ); - if ( descriptor.isEmpty() ) + if ( !descriptor.isValid() ) { cError() << "Module" << instanceKey.toString() << "not found in module search paths." << Logger::DebugList( m_paths ); @@ -285,11 +253,8 @@ ModuleManager::loadModules() } else { - thisModule - = Calamares::moduleFromDescriptor( descriptor, - instanceKey.id(), - configFileName, - m_moduleDirectoriesByModuleName.value( instanceKey.module() ) ); + thisModule = Calamares::moduleFromDescriptor( + descriptor, instanceKey.id(), configFileName, descriptor.directory() ); if ( !thisModule ) { cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor" @@ -298,51 +263,75 @@ ModuleManager::loadModules() continue; } - if ( !checkModuleDependencies( *thisModule ) ) + if ( !addModule( thisModule ) ) { // Error message is already printed failedModules.append( instanceKey.toString() ); continue; } - - // If it's a ViewModule, it also appends the ViewStep to the ViewManager. - thisModule->loadSelf(); - m_loadedModulesByInstanceKey.insert( instanceKey, thisModule ); - if ( !thisModule->isLoaded() ) - { - cError() << "Module" << instanceKey.toString() << "loading FAILED."; - failedModules.append( instanceKey.toString() ); - continue; - } } // At this point we most certainly have a pointer to a loaded module in // thisModule. We now need to enqueue jobs info into an EVS. if ( currentAction == ModuleSystem::Action::Exec ) { - ExecutionViewStep* evs - = qobject_cast< ExecutionViewStep* >( Calamares::ViewManager::instance()->viewSteps().last() ); + const auto steps = Calamares::ViewManager::instance()->viewSteps(); + ExecutionViewStep* evs = steps.isEmpty() ? nullptr : qobject_cast< ExecutionViewStep* >( steps.last() ); if ( !evs ) // If the last step is not an EVS, we must create it. { evs = new ExecutionViewStep( ViewManager::instance() ); ViewManager::instance()->addViewStep( evs ); } - evs->appendJobModuleInstanceKey( instanceKey.toString() ); + evs->appendJobModuleInstanceKey( instanceKey ); } } } if ( !failedModules.isEmpty() ) { ViewManager::instance()->onInitFailed( failedModules ); - emit modulesFailed( failedModules ); + QTimer::singleShot( 10, [ = ]() { emit modulesFailed( failedModules ); } ); } else { - emit modulesLoaded(); + QTimer::singleShot( 10, this, &ModuleManager::modulesLoaded ); } } +bool +ModuleManager::addModule( Module* module ) +{ + if ( !module ) + { + return false; + } + if ( !module->instanceKey().isValid() ) + { + cWarning() << "Module" << module->location() << Logger::Pointer( module ) << "has invalid instance key."; + return false; + } + if ( !checkModuleDependencies( *module ) ) + { + return false; + } + + if ( !module->isLoaded() ) + { + module->loadSelf(); + } + + // Even if the load failed, we keep the module, so that if it tried to + // get loaded **again**, we already know. + m_loadedModulesByInstanceKey.insert( module->instanceKey(), module ); + if ( !module->isLoaded() ) + { + cError() << "Module" << module->instanceKey().toString() << "loading FAILED."; + return false; + } + + return true; +} + void ModuleManager::checkRequirements() { @@ -355,17 +344,18 @@ ModuleManager::checkRequirements() modules[ count++ ] = module; } - RequirementsChecker* rq = new RequirementsChecker( modules, this ); - connect( rq, &RequirementsChecker::requirementsResult, this, &ModuleManager::requirementsResult ); - connect( rq, &RequirementsChecker::requirementsComplete, this, &ModuleManager::requirementsComplete ); - connect( rq, &RequirementsChecker::requirementsProgress, this, &ModuleManager::requirementsProgress ); + RequirementsChecker* rq = new RequirementsChecker( modules, m_requirementsModel, this ); connect( rq, &RequirementsChecker::done, rq, &RequirementsChecker::deleteLater ); + connect( rq, + &RequirementsChecker::done, + this, + [ = ]() { this->requirementsComplete( m_requirementsModel->satisfiedMandatory() ); } ); QTimer::singleShot( 0, rq, &RequirementsChecker::run ); } static QStringList -missingRequiredModules( const QStringList& required, const QMap< QString, QVariantMap >& available ) +missingRequiredModules( const QStringList& required, const QMap< QString, ModuleSystem::Descriptor >& available ) { QStringList l; for ( const QString& depName : required ) @@ -393,12 +383,11 @@ ModuleManager::checkDependencies() for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end(); ++it ) { - QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(), - m_availableDescriptorsByModuleName ); + QStringList unmet = missingRequiredModules( it->requiredModules(), m_availableDescriptorsByModuleName ); if ( unmet.count() > 0 ) { - QString moduleName = it->value( "name" ).toString(); + QString moduleName = it->name(); somethingWasRemovedBecauseOfUnmetDependencies = true; m_availableDescriptorsByModuleName.erase( it ); numberRemoved++; @@ -414,9 +403,14 @@ ModuleManager::checkDependencies() bool ModuleManager::checkModuleDependencies( const Module& m ) { + if ( !m_availableDescriptorsByModuleName.contains( m.name() ) ) + { + cWarning() << "Module" << m.name() << "loaded externally, no dependency information."; + return true; + } + bool allRequirementsFound = true; - QStringList requiredModules - = m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList(); + QStringList requiredModules = m_availableDescriptorsByModuleName[ m.name() ].requiredModules(); for ( const QString& required : requiredModules ) { diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index fdb63cd87..7f7ead05e 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef MODULELOADER_H @@ -32,7 +23,7 @@ namespace Calamares { class Module; -struct RequirementEntry; // from Requirement.h +class RequirementsModel; /** * @brief The ModuleManager class is a singleton which manages Calamares modules. @@ -46,7 +37,7 @@ class ModuleManager : public QObject Q_OBJECT public: explicit ModuleManager( const QStringList& paths, QObject* parent = nullptr ); - virtual ~ModuleManager() override; + ~ModuleManager() override; static ModuleManager* instance(); @@ -71,12 +62,22 @@ public: */ ModuleSystem::Descriptor moduleDescriptor( const QString& name ); + /** @brief returns the module descriptor structure for the module @p instance + * + * Descriptors are for the module, which may have multiple instances; + * this is the same as moduleDescriptor( instance.module() ). + */ + ModuleSystem::Descriptor moduleDescriptor( const ModuleSystem::InstanceKey& instanceKey ) + { + return moduleDescriptor( instanceKey.module() ); + } + /** * @brief moduleInstance returns a Module object for a given instance key. * @param instanceKey the instance key for a module instance. * @return a pointer to an object of a subtype of Module. */ - Module* moduleInstance( const QString& instanceKey ); + Module* moduleInstance( const ModuleSystem::InstanceKey& instanceKey ); /** * @brief loadModules does all of the module loading operation. @@ -85,20 +86,55 @@ public: */ void loadModules(); + /** + * @brief Adds a single module (loaded by some other means) + * + * Returns @c true on success (that is, the module's dependencies + * are satisfied, it wasn't already loaded, ...). + */ + bool addModule( Module* ); + /** * @brief Starts asynchronous requirements checking for each module. - * When this is done, the signal modulesChecked is emitted. + * When this is done, the signal requirementsComplete is emitted. */ void checkRequirements(); + ///@brief Gets the model that requirements-checking works on. + RequirementsModel* requirementsModel() { return m_requirementsModel; } + signals: + /** @brief Emitted when all the module **configuration** has been read + * + * This indicates that all of the module.desc files have been + * loaded; bad ones are silently skipped, so this just indicates + * that the module manager is ready for the next phase (loading). + */ void initDone(); - void modulesLoaded(); /// All of the modules were loaded successfully - void modulesFailed( QStringList ); /// .. or not - // Below, see RequirementsChecker documentation - void requirementsComplete( bool ); - void requirementsResult( RequirementsList ); - void requirementsProgress( const QString& ); + /** @brief Emitted when all the modules are loaded successfully + * + * Each module listed in the settings is loaded. Modules are loaded + * only once, even when instantiated multiple times. If all of + * the listed modules are successfully loaded, this signal is + * emitted (otherwise, it isn't, so you need to wait for **both** + * of the signals). + * + * If this is emitted (i.e. all modules have loaded) then the next + * phase, requirements checking, can be started. + */ + void modulesLoaded(); + /** @brief Emitted if any modules failed to load + * + * Modules that failed to load (for any reason) are listed by + * instance key (e.g. "welcome@welcome", "shellprocess@mycustomthing"). + */ + void modulesFailed( QStringList ); + /** @brief Emitted after all requirements have been checked + * + * The bool @p canContinue indicates if all of the **mandatory** requirements + * are satisfied (e.g. whether installation can continue). + */ + void requirementsComplete( bool canContinue ); private slots: void doInit(); @@ -127,9 +163,9 @@ private: bool checkModuleDependencies( const Module& ); QMap< QString, ModuleSystem::Descriptor > m_availableDescriptorsByModuleName; - QMap< QString, QString > m_moduleDirectoriesByModuleName; QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey; const QStringList m_paths; + RequirementsModel* m_requirementsModel; static ModuleManager* s_instance; }; diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp index 405d9efd8..2671d0899 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.cpp +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ProcessJobModule.h" @@ -61,32 +52,14 @@ ProcessJobModule::jobs() const void -ProcessJobModule::initFrom( const QVariantMap& moduleDescriptor ) +ProcessJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); - if ( !moduleDescriptor.value( "command" ).toString().isEmpty() ) - { - m_command = moduleDescriptor.value( "command" ).toString(); - } - - m_secondsTimeout = std::chrono::seconds( 30 ); - if ( moduleDescriptor.contains( "timeout" ) && !moduleDescriptor.value( "timeout" ).isNull() ) - { - int sec = moduleDescriptor.value( "timeout" ).toInt(); - if ( sec < 0 ) - { - sec = 0; - } - m_secondsTimeout = std::chrono::seconds( sec ); - } - - m_runInChroot = false; - if ( moduleDescriptor.contains( "chroot" ) && !moduleDescriptor.value( "chroot" ).isNull() ) - { - m_runInChroot = moduleDescriptor.value( "chroot" ).toBool(); - } + m_command = moduleDescriptor.command(); + m_secondsTimeout = std::chrono::seconds( moduleDescriptor.timeout() ); + m_runInChroot = moduleDescriptor.chroot(); } diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.h b/src/libcalamaresui/modulesystem/ProcessJobModule.h index 87c6e2da8..645127d47 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.h +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PROCESSJOBMODULE_H @@ -38,11 +29,11 @@ public: JobList jobs() const override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit ProcessJobModule(); - virtual ~ProcessJobModule() override; + ~ProcessJobModule() override; QString m_command; QString m_workingPath; diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.cpp b/src/libcalamaresui/modulesystem/PythonJobModule.cpp index 38ec76bfe..42acc0c69 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonJobModule.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonJobModule.h" @@ -49,7 +40,7 @@ PythonJobModule::loadSelf() return; } - m_job = Calamares::job_ptr( new PythonJob( instanceKey(), m_scriptFileName, m_workingPath, m_configurationMap ) ); + m_job = Calamares::job_ptr( new PythonJob( m_scriptFileName, m_workingPath, m_configurationMap ) ); m_loaded = true; } @@ -62,15 +53,11 @@ PythonJobModule::jobs() const void -PythonJobModule::initFrom( const QVariantMap& moduleDescriptor ) +PythonJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); - - if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) - { - m_scriptFileName = moduleDescriptor.value( "script" ).toString(); - } + m_scriptFileName = moduleDescriptor.script(); } diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.h b/src/libcalamaresui/modulesystem/PythonJobModule.h index 85f25ab74..4424cc7d4 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.h +++ b/src/libcalamaresui/modulesystem/PythonJobModule.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PYTHONJOBMODULE_H @@ -35,11 +26,11 @@ public: JobList jobs() const override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit PythonJobModule(); - virtual ~PythonJobModule() override; + ~PythonJobModule() override; QString m_scriptFileName; QString m_workingPath; diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp index b59126eaa..105dd2998 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot - * Copyright 2018, Raul Rodrigo Segura + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Raul Rodrigo Segura + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtViewModule.h" @@ -106,12 +97,12 @@ PythonQtViewModule::loadSelf() cala.addVariable( "configuration", m_configurationMap ); // Basic stdout/stderr handling - QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut, []( const QString& message ) { - cDebug() << "PythonQt OUT>" << message; - } ); - QObject::connect( PythonQt::self(), &PythonQt::pythonStdErr, []( const QString& message ) { - cDebug() << "PythonQt ERR>" << message; - } ); + QObject::connect( PythonQt::self(), + &PythonQt::pythonStdOut, + []( const QString& message ) { cDebug() << "PythonQt OUT>" << message; } ); + QObject::connect( PythonQt::self(), + &PythonQt::pythonStdErr, + []( const QString& message ) { cDebug() << "PythonQt ERR>" << message; } ); } QDir workingDir( m_workingPath ); diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.h b/src/libcalamaresui/modulesystem/PythonQtViewModule.h index 64cc0f8a9..8267dd2cb 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.h +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_PYTHONQTVIEWMODULE_H diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp index 02c771ee2..32c05bdba 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.cpp +++ b/src/libcalamaresui/modulesystem/ViewModule.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ViewModule.h" @@ -53,14 +44,14 @@ ViewModule::loadSelf() CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { - cWarning() << Q_FUNC_INFO << "No factory:" << m_loader->errorString(); + cWarning() << "No factory:" << m_loader->errorString(); return; } m_viewStep = pf->create< Calamares::ViewStep >(); if ( !m_viewStep ) { - cWarning() << Q_FUNC_INFO << "create() failed" << m_loader->errorString(); + cWarning() << "create() failed" << m_loader->errorString(); return; } } @@ -76,7 +67,7 @@ ViewModule::loadSelf() } else { - cWarning() << Q_FUNC_INFO << "No view step was created"; + cWarning() << "No view step was created"; } } @@ -89,13 +80,12 @@ ViewModule::jobs() const void -ViewModule::initFrom( const QVariantMap& moduleDescriptor ) +ViewModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); - QString load; - if ( !moduleDescriptor.value( "load" ).toString().isEmpty() ) + QString load = moduleDescriptor.load(); + if ( !load.isEmpty() ) { - load = moduleDescriptor.value( "load" ).toString(); load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. diff --git a/src/libcalamaresui/modulesystem/ViewModule.h b/src/libcalamaresui/modulesystem/ViewModule.h index 1d24ca811..217611b03 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.h +++ b/src/libcalamaresui/modulesystem/ViewModule.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARES_VIEWMODULE_H @@ -42,11 +33,11 @@ public: RequirementsList checkRequirements() override; protected: - void initFrom( const QVariantMap& moduleDescriptor ) override; + void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit ViewModule(); - virtual ~ViewModule() override; + ~ViewModule() override; QPluginLoader* m_loader; ViewStep* m_viewStep = nullptr; diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp index bd15d7a68..d10aada73 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CalamaresUtilsGui.h" @@ -189,16 +180,20 @@ createRoundedImage( const QPixmap& pixmap, const QSize& size, float frameWidthPc void unmarginLayout( QLayout* layout ) { - layout->setContentsMargins( 0, 0, 0, 0 ); - layout->setMargin( 0 ); - layout->setSpacing( 0 ); - - for ( int i = 0; i < layout->count(); i++ ) + if ( layout ) { - QLayout* childLayout = layout->itemAt( i )->layout(); - if ( childLayout ) + layout->setContentsMargins( 0, 0, 0, 0 ); + layout->setMargin( 0 ); + layout->setSpacing( 0 ); + + for ( int i = 0; i < layout->count(); i++ ) { - unmarginLayout( childLayout ); + auto* childItem = layout->itemAt( i ); + QLayout* childLayout = childItem ? childItem->layout() : nullptr; + if ( childLayout ) + { + unmarginLayout( childLayout ); + } } } } @@ -207,6 +202,10 @@ unmarginLayout( QLayout* layout ) int defaultFontSize() { + if ( s_defaultFontSize <= 0 ) + { + s_defaultFontSize = QFont().pointSize(); + } return s_defaultFontSize; } diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.h b/src/libcalamaresui/utils/CalamaresUtilsGui.h index 961ed5bc7..aa7aff79b 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.h +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CALAMARESUTILSGUI_H @@ -87,6 +78,7 @@ UIDLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = CalamaresUtils::Original, const QSize& size = QSize( 0, 0 ) ); +// TODO:3.3:This has only one consumer, move to ImageRegistry, make static /** * @brief createRoundedImage returns a rounded version of a pixmap. * @param avatar the input pixmap. @@ -103,6 +95,7 @@ UIDLLEXPORT QPixmap createRoundedImage( const QPixmap& avatar, const QSize& size */ UIDLLEXPORT void unmarginLayout( QLayout* layout ); +// TODO:3.3:This has only one consumer, move to LicensePage, make static /** * @brief clearLayout recursively walks the QLayout tree and deletes all the child * widgets and layouts. @@ -113,7 +106,7 @@ UIDLLEXPORT void clearLayout( QLayout* layout ); UIDLLEXPORT void setDefaultFontSize( int points ); UIDLLEXPORT int defaultFontSize(); // in points UIDLLEXPORT int defaultFontHeight(); // in pixels, DPI-specific -UIDLLEXPORT QFont defaultFont(); +UIDLLEXPORT QFont defaultFont(); // TODO:3.3:This has one consumer, move to BlankViewStep UIDLLEXPORT QFont largeFont(); UIDLLEXPORT QSize defaultIconSize(); diff --git a/src/libcalamaresui/utils/ImageRegistry.cpp b/src/libcalamaresui/utils/ImageRegistry.cpp index a08bbfc7d..3ae519f55 100644 --- a/src/libcalamaresui/utils/ImageRegistry.cpp +++ b/src/libcalamaresui/utils/ImageRegistry.cpp @@ -1,28 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * SPDX-License-Identifier: GPLv3+ - * License-Filename: LICENSES/GPLv3+-ImageRegistry + * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Copyright 2019, Adriaan de Groot */ -/* - * Copyright 2012, Christian Muehlhaeuser - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - #include "ImageRegistry.h" #include @@ -51,18 +34,14 @@ ImageRegistry::icon( const QString& image, CalamaresUtils::ImageMode mode ) qint64 -ImageRegistry::cacheKey( const QSize& size, qreal opacity, QColor tint ) +ImageRegistry::cacheKey( const QSize& size ) { - return size.width() * 100 + size.height() * 10 + static_cast< qint64 >( opacity * 100.0 ) + tint.value(); + return size.width() * 100 + size.height() * 10; } QPixmap -ImageRegistry::pixmap( const QString& image, - const QSize& size, - CalamaresUtils::ImageMode mode, - qreal opacity, - QColor tint ) +ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode ) { Q_ASSERT( !( size.width() < 0 || size.height() < 0 ) ); if ( size.width() < 0 || size.height() < 0 ) @@ -81,7 +60,7 @@ ImageRegistry::pixmap( const QString& image, { subsubcache = subcache.value( mode ); - const qint64 ck = cacheKey( size, opacity, tint ); + const qint64 ck = cacheKey( size ); if ( subsubcache.contains( ck ) ) { return subsubcache.value( ck ); @@ -98,23 +77,9 @@ ImageRegistry::pixmap( const QString& image, p.fill( Qt::transparent ); QPainter pixPainter( &p ); - pixPainter.setOpacity( opacity ); svgRenderer.render( &pixPainter ); pixPainter.end(); - if ( tint.alpha() > 0 ) - { - QImage resultImage( p.size(), QImage::Format_ARGB32_Premultiplied ); - QPainter painter( &resultImage ); - painter.drawPixmap( 0, 0, p ); - painter.setCompositionMode( QPainter::CompositionMode_Screen ); - painter.fillRect( resultImage.rect(), tint ); - painter.end(); - - resultImage.setAlphaChannel( p.toImage().alphaChannel() ); - p = QPixmap::fromImage( resultImage ); - } - pixmap = p; } else @@ -145,7 +110,7 @@ ImageRegistry::pixmap( const QString& image, } } - putInCache( image, size, mode, opacity, pixmap, tint ); + putInCache( image, size, mode, pixmap ); } return pixmap; @@ -156,9 +121,7 @@ void ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, - qreal opacity, - const QPixmap& pixmap, - QColor tint ) + const QPixmap& pixmap ) { QHash< qint64, QPixmap > subsubcache; QHash< int, QHash< qint64, QPixmap > > subcache; @@ -172,7 +135,7 @@ ImageRegistry::putInCache( const QString& image, } } - subsubcache.insert( cacheKey( size, opacity, tint ), pixmap ); + subsubcache.insert( cacheKey( size ), pixmap ); subcache.insert( mode, subsubcache ); s_cache.insert( image, subcache ); } diff --git a/src/libcalamaresui/utils/ImageRegistry.h b/src/libcalamaresui/utils/ImageRegistry.h index f73ee36e6..513fd254c 100644 --- a/src/libcalamaresui/utils/ImageRegistry.h +++ b/src/libcalamaresui/utils/ImageRegistry.h @@ -1,28 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * SPDX-License-Identifier: GPLv3+ - * License-Filename: LICENSES/GPLv3+-ImageRegistry + * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Copyright 2019, Adriaan de Groot */ -/* - * Copyright 2012, Christian Muehlhaeuser - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - #ifndef IMAGE_REGISTRY_H #define IMAGE_REGISTRY_H @@ -39,20 +22,12 @@ public: explicit ImageRegistry(); QIcon icon( const QString& image, CalamaresUtils::ImageMode mode = CalamaresUtils::Original ); - QPixmap pixmap( const QString& image, - const QSize& size, - CalamaresUtils::ImageMode mode = CalamaresUtils::Original, - qreal opacity = 1.0, - QColor tint = QColor( 0, 0, 0, 0 ) ); + QPixmap + pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode = CalamaresUtils::Original ); private: - qint64 cacheKey( const QSize& size, qreal opacity, QColor tint ); - void putInCache( const QString& image, - const QSize& size, - CalamaresUtils::ImageMode mode, - qreal opacity, - const QPixmap& pixmap, - QColor tint ); + qint64 cacheKey( const QSize& size ); + void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, const QPixmap& pixmap ); }; #endif // IMAGE_REGISTRY_H diff --git a/src/libcalamaresui/utils/Paste.cpp b/src/libcalamaresui/utils/Paste.cpp index 1b9ad4dfe..d782d138e 100644 --- a/src/libcalamaresui/utils/Paste.cpp +++ b/src/libcalamaresui/utils/Paste.cpp @@ -1,52 +1,76 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Bill Auger + * SPDX-FileCopyrightText: 2019 Bill Auger + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Paste.h" +#include "Branding.h" +#include "DllMacro.h" #include "utils/Logger.h" +#include "utils/Units.h" +#include "widgets/TranslationFix.h" +#include +#include #include -#include +#include +#include #include #include +#include -namespace CalamaresUtils -{ +using namespace CalamaresUtils::Units; -QString -sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort ) +/** @brief Reads the logfile, returns its contents. + * + * Returns an empty QByteArray() on any kind of error. + */ +STATICTEST QByteArray +logFileContents( const qint64 sizeLimitBytes ) { - QString pasteUrlFmt = parent->tr( "Install log posted to:\n%1" ); - QFile pasteSourceFile( Logger::logFile() ); + if ( sizeLimitBytes > 0 ) + { + cDebug() << "Log upload size limit was limited to" << sizeLimitBytes << "bytes"; + } + if ( sizeLimitBytes == 0 ) + { + cDebug() << "Log upload size is 0, upload disabled."; + return QByteArray(); + } + + const QString name = Logger::logFile(); + QFile pasteSourceFile( name ); if ( !pasteSourceFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { - cError() << "Could not open log file"; - return QString(); + cWarning() << "Could not open log file" << name; + return QByteArray(); } - - QByteArray pasteData; - while ( !pasteSourceFile.atEnd() ) + if ( sizeLimitBytes < 0 ) { - pasteData += pasteSourceFile.readLine(); + return pasteSourceFile.readAll(); } + QFileInfo fi( pasteSourceFile ); + if ( fi.size() > sizeLimitBytes ) + { + cDebug() << "Only last" << sizeLimitBytes << "bytes of log file (sized" << fi.size() << "bytes) uploaded"; + fi.refresh(); // Because we just wrote to the file with that cDebug() ^^ + pasteSourceFile.seek( fi.size() - sizeLimitBytes ); + } + return pasteSourceFile.read( sizeLimitBytes ); +} + +STATICTEST QString +ficheLogUpload( const QByteArray& pasteData, const QUrl& serverUrl, QObject* parent ) +{ QTcpSocket* socket = new QTcpSocket( parent ); - socket->connectToHost( ficheHost, fichePort ); + // 16 bits of port-number + socket->connectToHost( serverUrl.host(), quint16( serverUrl.port() ) ); if ( !socket->waitForConnected() ) { @@ -55,7 +79,7 @@ sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort return QString(); } - cDebug() << "Connected to paste server"; + cDebug() << "Connected to paste server" << serverUrl.host(); socket->write( pasteData ); @@ -66,7 +90,7 @@ sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort return QString(); } - cDebug() << "Paste data written to paste server"; + cDebug() << Logger::SubEntry << "Paste data written to paste server"; if ( !socket->waitForReadyRead() ) { @@ -75,25 +99,100 @@ sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort return QString(); } - cDebug() << "Reading response from paste server"; - - char resp[ 1024 ]; - resp[ 0 ] = '\0'; - qint64 nBytesRead = socket->readLine( resp, 1024 ); + cDebug() << Logger::SubEntry << "Reading response from paste server"; + QByteArray responseText = socket->readLine( 1024 ); socket->close(); - QUrl pasteUrl = QUrl( QString( resp ).trimmed(), QUrl::StrictMode ); - QString pasteUrlStr = pasteUrl.toString(); - QRegularExpression pasteUrlRegex( "^http[s]?://" + ficheHost ); - QString pasteUrlMsg = QString( pasteUrlFmt ).arg( pasteUrlStr ); - - if ( nBytesRead < 8 || !pasteUrl.isValid() || !pasteUrlRegex.match( pasteUrlStr ).hasMatch() ) + QUrl pasteUrl = QUrl( QString( responseText ).trimmed(), QUrl::StrictMode ); + if ( pasteUrl.isValid() && pasteUrl.host() == serverUrl.host() ) + { + cDebug() << Logger::SubEntry << "Paste server results:" << pasteUrl; + return pasteUrl.toString(); + } + else { cError() << "No data from paste server"; return QString(); } - - cDebug() << "Paste server results:" << pasteUrlMsg; - return pasteUrlMsg; } -} // namespace CalamaresUtils + +QString +CalamaresUtils::Paste::doLogUpload( QObject* parent ) +{ + auto [ type, serverUrl, sizeLimitBytes ] = Calamares::Branding::instance()->uploadServer(); + if ( !serverUrl.isValid() ) + { + cWarning() << "Upload configured with invalid URL"; + return QString(); + } + if ( type == Calamares::Branding::UploadServerType::None ) + { + // Early return to avoid reading the log file + return QString(); + } + if ( sizeLimitBytes == 0 ) + { + // Suggests that it is un-set in the config file + cWarning() << "Upload configured to send 0 bytes"; + return QString(); + } + + QByteArray pasteData = logFileContents( sizeLimitBytes ); + if ( pasteData.isEmpty() ) + { + // An error has already been logged + return QString(); + } + + switch ( type ) + { + case Calamares::Branding::UploadServerType::None: + cWarning() << "No upload configured."; + return QString(); + case Calamares::Branding::UploadServerType::Fiche: + return ficheLogUpload( pasteData, serverUrl, parent ); + } + return QString(); +} + +QString +CalamaresUtils::Paste::doLogUploadUI( QWidget* parent ) +{ + // These strings originated in the ViewManager class + QString pasteUrl = CalamaresUtils::Paste::doLogUpload( parent ); + QString pasteUrlMessage; + if ( pasteUrl.isEmpty() ) + { + pasteUrlMessage = QCoreApplication::translate( "Calamares::ViewManager", + "The upload was unsuccessful. No web-paste was done." ); + } + else + { + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText( pasteUrl, QClipboard::Clipboard ); + + if ( clipboard->supportsSelection() ) + { + clipboard->setText( pasteUrl, QClipboard::Selection ); + } + QString pasteUrlFmt = QCoreApplication::translate( "Calamares::ViewManager", + "Install log posted to\n\n%1\n\nLink copied to clipboard" ); + pasteUrlMessage = pasteUrlFmt.arg( pasteUrl ); + } + + QMessageBox mb( QMessageBox::Critical, + QCoreApplication::translate( "Calamares::ViewManager", "Install Log Paste URL" ), + pasteUrlMessage, + QMessageBox::Ok ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); + return pasteUrl; +} + + +bool +CalamaresUtils::Paste::isEnabled() +{ + auto [ type, serverUrl, sizeLimitBytes ] = Calamares::Branding::instance()->uploadServer(); + return type != Calamares::Branding::UploadServerType::None && sizeLimitBytes != 0; +} diff --git a/src/libcalamaresui/utils/Paste.h b/src/libcalamaresui/utils/Paste.h index fd088882c..c77625415 100644 --- a/src/libcalamaresui/utils/Paste.h +++ b/src/libcalamaresui/utils/Paste.h @@ -1,37 +1,43 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Bill Auger + * SPDX-FileCopyrightText: 2019 Bill Auger + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_PASTE_H #define UTILS_PASTE_H -#include // for quint16 +#include class QObject; -class QString; +class QWidget; namespace CalamaresUtils { - +namespace Paste +{ /** @brief Send the current log file to a pastebin * * Returns the (string) URL that the pastebin gives us. */ -QString sendLogToPastebin( QObject* parent, const QString& ficheHost, quint16 fichePort ); +QString doLogUpload( QObject* parent ); + +/** @brief Send the current log file to a pastebin + * + * As doLogUpload(), but also sets the clipboard and displays + * a message saying it's been done. + */ +QString doLogUploadUI( QWidget* parent ); + +/** @brief Is paste enabled? + * + * Checks the branding instance if paste can be done. + */ +bool isEnabled(); +} // namespace Paste } // namespace CalamaresUtils diff --git a/src/libcalamaresui/utils/PythonQtUtils.cpp b/src/libcalamaresui/utils/PythonQtUtils.cpp index 3a60839a4..bc4e034f0 100644 --- a/src/libcalamaresui/utils/PythonQtUtils.cpp +++ b/src/libcalamaresui/utils/PythonQtUtils.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtUtils.h" diff --git a/src/libcalamaresui/utils/PythonQtUtils.h b/src/libcalamaresui/utils/PythonQtUtils.h index dc889b2d0..49f3bb1c4 100644 --- a/src/libcalamaresui/utils/PythonQtUtils.h +++ b/src/libcalamaresui/utils/PythonQtUtils.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTUTILS_H diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp index 0b2c84616..b73bf7172 100644 --- a/src/libcalamaresui/utils/Qml.cpp +++ b/src/libcalamaresui/utils/Qml.cpp @@ -1,25 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Qml.h" #include "Branding.h" +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "Settings.h" #include "ViewManager.h" +#include "network/Manager.h" +#include "utils/Dirs.h" #include "utils/Logger.h" #include @@ -28,11 +24,81 @@ #include #include +static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" ); + namespace CalamaresUtils { +QDir +qmlModulesDir() +{ + return s_qmlModulesDir; +} void -callQMLFunction( QQuickItem* qmlObject, const char* method ) +setQmlModulesDir( const QDir& dir ) +{ + s_qmlModulesDir = dir; +} + +static QStringList +qmlDirCandidates( bool assumeBuilddir ) +{ + static const char QML[] = "qml"; + + QStringList qmlDirs; + if ( CalamaresUtils::isAppDataDirOverridden() ) + { + qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); + } + else + { + if ( assumeBuilddir ) + { + qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir + } + if ( CalamaresUtils::haveExtraDirs() ) + for ( auto s : CalamaresUtils::extraDataDirs() ) + { + qmlDirs << ( s + QML ); + } + qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); + } + + return qmlDirs; +} + +bool +initQmlModulesDir() +{ + QStringList qmlDirCandidatesByPriority + = qmlDirCandidates( Calamares::Settings::instance() && Calamares::Settings::instance()->debugMode() ); + + for ( const QString& path : qmlDirCandidatesByPriority ) + { + QDir dir( path ); + if ( dir.exists() && dir.isReadable() ) + { + cDebug() << "Using Calamares QML directory" << dir.absolutePath(); + CalamaresUtils::setQmlModulesDir( dir ); + return true; + } + } + + cError() << "Cowardly refusing to continue startup without a QML directory." + << Logger::DebugList( qmlDirCandidatesByPriority ); + if ( CalamaresUtils::isAppDataDirOverridden() ) + { + cError() << "FATAL: explicitly configured application data directory is missing qml/"; + } + else + { + cError() << "FATAL: none of the expected QML paths exist."; + } + return false; +} + +void +callQmlFunction( QQuickItem* qmlObject, const char* method ) { QByteArray methodSignature( method ); methodSignature.append( "()" ); @@ -69,14 +135,14 @@ addExpansions( QmlSearch method, QStringList& candidates, const QStringList& nam std::transform( names.constBegin(), names.constEnd(), std::back_inserter( candidates ), - [&]( const QString& s ) { return s.isEmpty() ? QString() : bPath.arg( brandDir, s ); } ); + [ & ]( const QString& s ) { return s.isEmpty() ? QString() : bPath.arg( brandDir, s ); } ); } if ( ( method == QmlSearch::Both ) || ( method == QmlSearch::QrcOnly ) ) { std::transform( names.constBegin(), names.constEnd(), std::back_inserter( candidates ), - [&]( const QString& s ) { return s.isEmpty() ? QString() : qrPath.arg( s ); } ); + [ & ]( const QString& s ) { return s.isEmpty() ? QString() : qrPath.arg( s ); } ); } } @@ -147,7 +213,7 @@ qmlSearchNames() } void -registerCalamaresModels() +registerQmlModels() { static bool done = false; if ( !done ) @@ -156,14 +222,30 @@ registerCalamaresModels() // Because branding and viewmanager have a parent (CalamaresApplication // and CalamaresWindow), they will not be deleted by QmlEngine. // https://doc.qt.io/qt-5/qtqml-cppintegration-data.html#data-ownership - qmlRegisterSingletonType< Calamares::Branding >( - "io.calamares.ui", 1, 0, "Branding", []( QQmlEngine*, QJSEngine* ) -> QObject* { - return Calamares::Branding::instance(); - } ); - qmlRegisterSingletonType< Calamares::Branding >( - "io.calamares.core", 1, 0, "ViewManager", []( QQmlEngine*, QJSEngine* ) -> QObject* { - return Calamares::ViewManager::instance(); - } ); + qmlRegisterSingletonType< Calamares::Branding >( "io.calamares.ui", + 1, + 0, + "Branding", + []( QQmlEngine*, QJSEngine* ) -> QObject* + { return Calamares::Branding::instance(); } ); + qmlRegisterSingletonType< Calamares::ViewManager >( "io.calamares.ui", + 1, + 0, + "ViewManager", + []( QQmlEngine*, QJSEngine* ) -> QObject* + { return Calamares::ViewManager::instance(); } ); + qmlRegisterSingletonType< Calamares::GlobalStorage >( + "io.calamares.core", + 1, + 0, + "Global", + []( QQmlEngine*, QJSEngine* ) -> QObject* { return Calamares::JobQueue::instance()->globalStorage(); } ); + qmlRegisterSingletonType< CalamaresUtils::Network::Manager >( + "io.calamares.core", + 1, + 0, + "Network", + []( QQmlEngine*, QJSEngine* ) -> QObject* { return &CalamaresUtils::Network::Manager::instance(); } ); } } diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h index b109d8381..2d6655e9e 100644 --- a/src/libcalamaresui/utils/Qml.h +++ b/src/libcalamaresui/utils/Qml.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef UTILS_QML_H @@ -24,10 +15,25 @@ #include "modulesystem/InstanceKey.h" #include "utils/NamedEnum.h" +#include + class QQuickItem; namespace CalamaresUtils { +/// @brief the extra directory where Calamares searches for QML files +UIDLLEXPORT QDir qmlModulesDir(); +/// @brief sets specific directory for searching for QML files +UIDLLEXPORT void setQmlModulesDir( const QDir& dir ); + +/** @brief initialize QML search path with branding directories + * + * Picks a suitable branding directory (from the build-dir in debug mode, + * otherwise based on the branding directory) and adds it to the + * QML modules directory; returns @c false if none is found. + */ +UIDLLEXPORT bool initQmlModulesDir(); + /** @brief Sets up global Calamares models for QML * * This needs to be called at least once to make the global Calamares @@ -36,10 +42,11 @@ namespace CalamaresUtils * The following objects are made available globally: * - `io.calamares.ui.Branding` (an object, see Branding.h) * - `io.calamares.core.ViewManager` (a model, see ViewManager.h) + * - `io.calamares.core.Global` (an object, see GlobalStorage.h) * Additionally, modules based on QmlViewStep have a context * property `config` referring to that module's configuration (if any). */ -UIDLLEXPORT void registerCalamaresModels(); +UIDLLEXPORT void registerQmlModels(); /** @brief Calls the QML method @p method on @p qmlObject * @@ -49,7 +56,7 @@ UIDLLEXPORT void registerCalamaresModels(); * * If there is a return value from the QML method, it is logged (but not otherwise used). */ -UIDLLEXPORT void callQMLFunction( QQuickItem* qmlObject, const char* method ); +UIDLLEXPORT void callQmlFunction( QQuickItem* qmlObject, const char* method ); /** @brief Search modes for loading Qml files. * @@ -65,7 +72,7 @@ enum class QmlSearch Both }; -///@brief Names for the search terms (in config files) +/// @brief Names for the search terms (in config files) UIDLLEXPORT const NamedEnumTable< QmlSearch >& qmlSearchNames(); /** @brief Find a suitable QML file, given the search method and name hints diff --git a/src/libcalamaresui/utils/QtCompat.h b/src/libcalamaresui/utils/QtCompat.h new file mode 100644 index 000000000..d53c01e0b --- /dev/null +++ b/src/libcalamaresui/utils/QtCompat.h @@ -0,0 +1,42 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * 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 + +/* 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/utils/TestPaste.cpp b/src/libcalamaresui/utils/TestPaste.cpp new file mode 100644 index 000000000..2245c76c4 --- /dev/null +++ b/src/libcalamaresui/utils/TestPaste.cpp @@ -0,0 +1,86 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ + +#include "Paste.h" +#include "network/Manager.h" + +#include "utils/Logger.h" + +#include +#include + +extern QByteArray logFileContents( qint64 sizeLimitBytes ); +extern QString ficheLogUpload( const QByteArray& pasteData, const QUrl& serverUrl, QObject* parent ); + +class TestPaste : public QObject +{ + Q_OBJECT + +public: + TestPaste() {} + ~TestPaste() override {} + +private Q_SLOTS: + void testGetLogFile(); + void testFichePaste(); + void testUploadSize(); +}; + +void +TestPaste::testGetLogFile() +{ + QFile::remove( Logger::logFile() ); + // This test assumes nothing **else** has set up logging yet + QByteArray logLimitedBefore = logFileContents( 16 ); + QVERIFY( logLimitedBefore.isEmpty() ); + QByteArray logUnlimitedBefore = logFileContents( -1 ); + QVERIFY( logUnlimitedBefore.isEmpty() ); + + Logger::setupLogLevel( Logger::LOGDEBUG ); + Logger::setupLogfile(); + + QByteArray logLimitedAfter = logFileContents( 16 ); + QVERIFY( !logLimitedAfter.isEmpty() ); + QByteArray logUnlimitedAfter = logFileContents( -1 ); + QVERIFY( !logUnlimitedAfter.isEmpty() ); +} + +void +TestPaste::testFichePaste() +{ + QString blabla( "the quick brown fox tested Calamares and found it rubbery" ); + QDateTime now = QDateTime::currentDateTime(); + + QByteArray d = ( blabla + now.toString() ).toUtf8(); + QString s = ficheLogUpload( d, QUrl( "http://termbin.com:9999" ), nullptr ); + + cDebug() << "Paste data to" << s; + QVERIFY( !s.isEmpty() ); +} + +void +TestPaste::testUploadSize() +{ + QByteArray logContent = logFileContents( 100 ); + QString s = ficheLogUpload( logContent, QUrl( "http://termbin.com:9999" ), nullptr ); + + QVERIFY( !s.isEmpty() ); + + QUrl url( s ); + QByteArray returnedData = CalamaresUtils::Network::Manager::instance().synchronousGet( url ); + + QCOMPARE( returnedData.size(), 100 ); +} +QTEST_GUILESS_MAIN( TestPaste ) + +#include "utils/moc-warnings.h" + +#include "TestPaste.moc" diff --git a/src/libcalamaresui/viewpages/BlankViewStep.cpp b/src/libcalamaresui/viewpages/BlankViewStep.cpp index af10c7a99..ea51e3f02 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.cpp +++ b/src/libcalamaresui/viewpages/BlankViewStep.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "BlankViewStep.h" diff --git a/src/libcalamaresui/viewpages/BlankViewStep.h b/src/libcalamaresui/viewpages/BlankViewStep.h index ab44205ac..1845fcda9 100644 --- a/src/libcalamaresui/viewpages/BlankViewStep.h +++ b/src/libcalamaresui/viewpages/BlankViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef BLANKVIEWSTEP_H @@ -38,7 +29,7 @@ public: const QString& description, const QString& details = QString(), QObject* parent = nullptr ); - virtual ~BlankViewStep() override; + ~BlankViewStep() override; QString prettyName() const override; diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp index c9bc4b8c3..998d9f38b 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp @@ -1,48 +1,64 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ExecutionViewStep.h" +#include "Slideshow.h" + #include "Branding.h" +#include "CalamaresConfig.h" #include "Job.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" - #include "modulesystem/Module.h" #include "modulesystem/ModuleManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Dirs.h" #include "utils/Logger.h" -#include "utils/Qml.h" #include "utils/Retranslator.h" +#include "widgets/LogWidget.h" +#include #include +#include #include +#include #include -#include -#include -#include -#include +#include +#include +#include +#include #include +static Calamares::Slideshow* +makeSlideshow( QWidget* parent ) +{ + const int api = Calamares::Branding::instance()->slideshowAPI(); + switch ( api ) + { + case -1: + return new Calamares::SlideshowPictures( parent ); +#ifdef WITH_QML + case 1: + [[fallthrough]]; + case 2: + return new Calamares::SlideshowQML( parent ); +#endif + default: + cWarning() << "Unknown Branding slideshow API" << api; + return new Calamares::SlideshowPictures( parent ); + } +} + namespace Calamares { @@ -51,38 +67,48 @@ ExecutionViewStep::ExecutionViewStep( QObject* parent ) , m_widget( new QWidget ) , m_progressBar( new QProgressBar ) , m_label( new QLabel ) - , m_qmlShow( new QQuickWidget ) - , m_qmlComponent( nullptr ) - , m_qmlObject( nullptr ) + , m_slideshow( makeSlideshow( m_widget ) ) + , m_tab_widget( new QTabWidget ) + , m_log_widget( new LogWidget ) { + m_widget->setObjectName( "slideshow" ); + m_progressBar->setObjectName( "exec-progress" ); + m_label->setObjectName( "exec-message" ); + QVBoxLayout* layout = new QVBoxLayout( m_widget ); - QVBoxLayout* innerLayout = new QVBoxLayout; + QVBoxLayout* bottomLayout = new QVBoxLayout; + QHBoxLayout* barLayout = new QHBoxLayout; m_progressBar->setMaximum( 10000 ); - m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); - m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView ); - m_qmlShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() ); + m_tab_widget->addTab( m_slideshow->widget(), "Slideshow" ); + m_tab_widget->addTab( m_log_widget, "Log" ); + m_tab_widget->tabBar()->hide(); - layout->addWidget( m_qmlShow ); + layout->addWidget( m_tab_widget ); CalamaresUtils::unmarginLayout( layout ); - layout->addLayout( innerLayout ); + layout->addLayout( bottomLayout ); - innerLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); - innerLayout->addWidget( m_progressBar ); - innerLayout->addWidget( m_label ); + bottomLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); + bottomLayout->addLayout( barLayout ); + bottomLayout->addWidget( m_label ); + + QToolBar* toolBar = new QToolBar; + const auto logButtonIcon = QIcon::fromTheme( "utilities-terminal" ); + auto toggleLogAction = toolBar->addAction( + Branding::instance()->image( + { "utilities-log-viewer", "utilities-terminal", "text-x-log", "text-x-changelog", "preferences-log" }, + QSize( 32, 32 ) ), + "Toggle log" ); + auto toggleLogButton = dynamic_cast< QToolButton* >( toolBar->widgetForAction( toggleLogAction ) ); + connect( toggleLogButton, &QToolButton::clicked, this, &ExecutionViewStep::toggleLog ); + + + barLayout->addWidget( m_progressBar ); + barLayout->addWidget( toolBar ); - cDebug() << "QML import paths:" << Logger::DebugList( m_qmlShow->engine()->importPathList() ); - if ( Branding::instance()->slideshowAPI() == 2 ) - { - cDebug() << "QML load on startup, API 2."; - loadQmlV2(); - } connect( JobQueue::instance(), &JobQueue::progress, this, &ExecutionViewStep::updateFromJobQueue ); -#if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 ) - CALAMARES_RETRANSLATE( m_qmlShow->engine()->retranslate(); ) -#endif } @@ -139,113 +165,29 @@ ExecutionViewStep::isAtEnd() const return !JobQueue::instance()->isRunning(); } -void -ExecutionViewStep::loadQmlV2() -{ - if ( !m_qmlComponent && !Calamares::Branding::instance()->slideshowPath().isEmpty() ) - { - m_qmlComponent = new QQmlComponent( m_qmlShow->engine(), - QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), - QQmlComponent::CompilationMode::Asynchronous ); - connect( m_qmlComponent, &QQmlComponent::statusChanged, this, &ExecutionViewStep::loadQmlV2Complete ); - } -} - -/// @brief State-change of the slideshow, for changeSlideShowState() -enum class Slideshow -{ - Start, - Stop -}; - -/** @brief Tells the slideshow we activated or left the show. - * - * If @p state is @c Slideshow::Start, calls suitable activation procedures. - * If @p state is @c Slideshow::Stop, calls deactivation procedures. - * - * Applies V1 and V2 QML activation / deactivation: - * - V1 loads the QML in @p widget on activation. Sets root object property - * *activatedInCalamares* as appropriate. - * - V2 calls onActivate() or onLeave() in the QML as appropriate. Also - * sets the *activatedInCalamares* property. - */ -static void -changeSlideShowState( Slideshow state, QQuickItem* slideshow, QQuickWidget* widget ) -{ - bool activate = state == Slideshow::Start; - - if ( Branding::instance()->slideshowAPI() == 2 ) - { - // The QML was already loaded in the constructor, need to start it - CalamaresUtils::callQMLFunction( slideshow, activate ? "onActivate" : "onLeave" ); - } - else if ( !Calamares::Branding::instance()->slideshowPath().isEmpty() ) - { - // API version 1 assumes onCompleted is the trigger - if ( activate ) - { - widget->setSource( QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ) ); - } - // needs the root object for property setting, below - slideshow = widget->rootObject(); - } - - // V1 API has picked up the root object for use, V2 passed it in. - if ( slideshow ) - { - static const char propertyName[] = "activatedInCalamares"; - auto property = slideshow->property( propertyName ); - if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) - { - slideshow->setProperty( propertyName, activate ); - } - } -} - -void -ExecutionViewStep::loadQmlV2Complete() -{ - if ( m_qmlComponent && m_qmlComponent->isReady() && !m_qmlObject ) - { - cDebug() << "QML component complete, API 2"; - // Don't do this again - disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &ExecutionViewStep::loadQmlV2Complete ); - - QObject* o = m_qmlComponent->create(); - m_qmlObject = qobject_cast< QQuickItem* >( o ); - if ( !m_qmlObject ) - { - delete o; - } - else - { - cDebug() << Logger::SubEntry << "Loading" << Calamares::Branding::instance()->slideshowPath(); - - // setContent() is public API, but not documented publicly. - // It is marked \internal in the Qt sources, but does exactly - // what is needed: sets up visual parent by replacing the root - // item, and handling resizes. - m_qmlShow->setContent( - QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), m_qmlComponent, m_qmlObject ); - if ( ViewManager::instance()->currentStep() == this ) - { - // We're alreay visible! Must have been slow QML loading, and we - // passed onActivate already. - changeSlideShowState( Slideshow::Start, m_qmlObject, m_qmlShow ); - } - } - } -} - void ExecutionViewStep::onActivate() { - changeSlideShowState( Slideshow::Start, m_qmlObject, m_qmlShow ); + m_slideshow->changeSlideShowState( Slideshow::Start ); + + const auto instanceDescriptors = Calamares::Settings::instance()->moduleInstances(); JobQueue* queue = JobQueue::instance(); - foreach ( const QString& instanceKey, m_jobInstanceKeys ) + for ( const auto& instanceKey : m_jobInstanceKeys ) { + const auto& moduleDescriptor = Calamares::ModuleManager::instance()->moduleDescriptor( instanceKey ); Calamares::Module* module = Calamares::ModuleManager::instance()->moduleInstance( instanceKey ); + + const auto instanceDescriptor + = std::find_if( instanceDescriptors.constBegin(), + instanceDescriptors.constEnd(), + [ = ]( const Calamares::InstanceDescription& d ) { return d.key() == instanceKey; } ); + int weight = moduleDescriptor.weight(); + if ( instanceDescriptor != instanceDescriptors.constEnd() && instanceDescriptor->explicitWeight() ) + { + weight = instanceDescriptor->weight(); + } + weight = qBound( 1, weight, 100 ); if ( module ) { auto jl = module->jobs(); @@ -256,7 +198,7 @@ ExecutionViewStep::onActivate() j->setEmergency( true ); } } - queue->enqueue( jl ); + queue->enqueue( weight, jl ); } } @@ -272,7 +214,7 @@ ExecutionViewStep::jobs() const void -ExecutionViewStep::appendJobModuleInstanceKey( const QString& instanceKey ) +ExecutionViewStep::appendJobModuleInstanceKey( const ModuleSystem::InstanceKey& instanceKey ) { m_jobInstanceKeys.append( instanceKey ); } @@ -282,19 +224,33 @@ void ExecutionViewStep::updateFromJobQueue( qreal percent, const QString& message ) { m_progressBar->setValue( int( percent * m_progressBar->maximum() ) ); - m_label->setText( message ); + if ( !message.isEmpty() ) + { + m_label->setText( message ); + } +} + +void +ExecutionViewStep::toggleLog() +{ + const bool logBecomesVisible = m_tab_widget->currentIndex() == 0; // ie. is not visible right now + if ( logBecomesVisible ) + { + m_log_widget->start(); + } + else + { + m_log_widget->stop(); + } + m_tab_widget->setCurrentIndex( logBecomesVisible ? 1 : 0 ); } void ExecutionViewStep::onLeave() { - changeSlideShowState( Slideshow::Stop, m_qmlObject, m_qmlShow ); - // API version 2 is explicitly stopped; version 1 keeps running - if ( Branding::instance()->slideshowAPI() == 2 ) - { - delete m_qmlObject; - m_qmlObject = nullptr; - } + m_log_widget->stop(); + m_slideshow->changeSlideShowState( Slideshow::Stop ); } + } // namespace Calamares diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.h b/src/libcalamaresui/viewpages/ExecutionViewStep.h index e797c3cb2..f545a8d43 100644 --- a/src/libcalamaresui/viewpages/ExecutionViewStep.h +++ b/src/libcalamaresui/viewpages/ExecutionViewStep.h @@ -1,39 +1,32 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef EXECUTIONVIEWSTEP_H #define EXECUTIONVIEWSTEP_H #include "ViewStep.h" +#include "modulesystem/InstanceKey.h" +#include "widgets/LogWidget.h" #include class QLabel; class QObject; class QProgressBar; -class QQmlComponent; -class QQuickItem; -class QQuickWidget; +class QTabWidget; namespace Calamares { +class Slideshow; + class ExecutionViewStep : public ViewStep { Q_OBJECT @@ -58,23 +51,21 @@ public: JobList jobs() const override; - void appendJobModuleInstanceKey( const QString& instanceKey ); - -public slots: - void loadQmlV2Complete(); + void appendJobModuleInstanceKey( const ModuleSystem::InstanceKey& instanceKey ); private: QWidget* m_widget; QProgressBar* m_progressBar; QLabel* m_label; - QQuickWidget* m_qmlShow; - QQmlComponent* m_qmlComponent; - QQuickItem* m_qmlObject; ///< The actual show + Slideshow* m_slideshow; + QTabWidget* m_tab_widget; + LogWidget* m_log_widget; - QStringList m_jobInstanceKeys; + QList< ModuleSystem::InstanceKey > m_jobInstanceKeys; - void loadQmlV2(); ///< Loads the slideshow QML (from branding) for API version 2 void updateFromJobQueue( qreal percent, const QString& message ); + + void toggleLog(); }; } // namespace Calamares diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp index ba7657b09..0d667a097 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtGlobalStorageWrapper.h" diff --git a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h index 946f93e97..5d1282d0f 100644 --- a/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTGLOBALSTORAGEWRAPPER_H diff --git a/src/libcalamaresui/viewpages/PythonQtJob.cpp b/src/libcalamaresui/viewpages/PythonQtJob.cpp index 0718df95d..d41c70f1f 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.cpp +++ b/src/libcalamaresui/viewpages/PythonQtJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtJob.h" diff --git a/src/libcalamaresui/viewpages/PythonQtJob.h b/src/libcalamaresui/viewpages/PythonQtJob.h index a73e7eb82..4d48921e1 100644 --- a/src/libcalamaresui/viewpages/PythonQtJob.h +++ b/src/libcalamaresui/viewpages/PythonQtJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTJOB_H diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp index d16bd56f8..4cd72f8c0 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtUtilsWrapper.h" diff --git a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h index 19b8b623d..e39249185 100644 --- a/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h +++ b/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTUTILSWRAPPER_H diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp index 5e313ff98..df3c11994 100644 --- a/src/libcalamaresui/viewpages/PythonQtViewStep.cpp +++ b/src/libcalamaresui/viewpages/PythonQtViewStep.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PythonQtViewStep.h" @@ -57,7 +48,7 @@ PythonQtViewStep::PythonQtViewStep( PythonQtObjectPtr cxt, QObject* parent ) CalamaresUtils::unmarginLayout( m_widget->layout() ); m_cxt.addObject( "_calamares_module_basewidget", m_widget ); - CALAMARES_RETRANSLATE_WIDGET( + CALAMARES_RETRANSLATE_FOR( m_widget, CalamaresUtils::lookupAndCall( m_obj, { "retranslate" }, { CalamaresUtils::translatorLocaleName() } ); ) } diff --git a/src/libcalamaresui/viewpages/PythonQtViewStep.h b/src/libcalamaresui/viewpages/PythonQtViewStep.h index 5358bc824..b23a540b9 100644 --- a/src/libcalamaresui/viewpages/PythonQtViewStep.h +++ b/src/libcalamaresui/viewpages/PythonQtViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PYTHONQTVIEWSTEP_H diff --git a/src/libcalamaresui/viewpages/QmlViewStep.cpp b/src/libcalamaresui/viewpages/QmlViewStep.cpp index 7140cd10f..b0392e404 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.cpp +++ b/src/libcalamaresui/viewpages/QmlViewStep.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "QmlViewStep.h" @@ -58,7 +49,7 @@ changeQMLState( QMLAction action, QQuickItem* item ) static const char propertyName[] = "activatedInCalamares"; bool activate = action == QMLAction::Start; - CalamaresUtils::callQMLFunction( item, activate ? "onActivate" : "onLeave" ); + CalamaresUtils::callQmlFunction( item, activate ? "onActivate" : "onLeave" ); auto property = item->property( propertyName ); if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) @@ -76,7 +67,7 @@ QmlViewStep::QmlViewStep( QObject* parent ) , m_spinner( new WaitingWidget( tr( "Loading ..." ) ) ) , m_qmlWidget( new QQuickWidget ) { - CalamaresUtils::registerCalamaresModels(); + CalamaresUtils::registerQmlModels(); QVBoxLayout* layout = new QVBoxLayout( m_widget ); layout->addWidget( m_spinner ); @@ -151,6 +142,22 @@ QmlViewStep::widget() return m_widget; } +QSize +QmlViewStep::widgetMargins( Qt::Orientations panelSides ) +{ + // If any panels around it, use the standard, but if all the + // panels are hidden, like on full-screen with subsumed navigation, + // then no margins. + if ( panelSides ) + { + return ViewStep::widgetMargins( panelSides ); + } + else + { + return QSize( 0, 0 ); + } +} + void QmlViewStep::loadComplete() { @@ -161,7 +168,7 @@ QmlViewStep::loadComplete() } if ( m_qmlComponent->isReady() && !m_qmlObject ) { - cDebug() << "QML component complete" << m_qmlFileName; + cDebug() << Logger::SubEntry << "QML component complete" << m_qmlFileName << "creating object"; // Don't do this again disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &QmlViewStep::loadComplete ); @@ -189,7 +196,7 @@ QmlViewStep::showQml() { if ( !m_qmlWidget || !m_qmlObject ) { - cDebug() << "showQml() called but no QML object"; + cWarning() << "showQml() called but no QML object"; return; } if ( m_spinner ) @@ -201,7 +208,7 @@ QmlViewStep::showQml() } else { - cDebug() << "showQml() called twice"; + cWarning() << "showQml() called twice"; } if ( ViewManager::instance()->currentStep() == this ) @@ -221,7 +228,7 @@ QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) = CalamaresUtils::qmlSearchNames().find( CalamaresUtils::getString( configurationMap, "qmlSearch" ), ok ); if ( !ok ) { - cDebug() << "Bad QML search mode."; + cWarning() << "Bad QML search mode set for" << moduleInstanceKey(); } QString qmlFile = CalamaresUtils::getString( configurationMap, "qmlFilename" ); @@ -246,7 +253,7 @@ QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) } else { - cWarning() << "QML configuration set after component has loaded."; + cWarning() << "QML configuration set after component" << moduleInstanceKey() << "has loaded."; } } diff --git a/src/libcalamaresui/viewpages/QmlViewStep.h b/src/libcalamaresui/viewpages/QmlViewStep.h index cad6bb395..9817851b6 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.h +++ b/src/libcalamaresui/viewpages/QmlViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef QMLVIEWSTEP_H @@ -35,6 +26,15 @@ namespace Calamares * This is generally a **base** class for other view steps, but * it can be used stand-alone for viewsteps that don't really have * any functionality. + * + * Most subclasses will override the following methods: + * - prettyName() to provide a meaningful human-readable name + * - jobs() if there is real work to be done during installation + * - getConfig() to return a meaningful configuration object + * + * For details on the interaction between the config object and + * the QML in the module, see the module documentation: + * src/modules/README.md */ class QmlViewStep : public Calamares::ViewStep { @@ -50,11 +50,12 @@ public: * @see Qml.h for available Calamares internals. */ QmlViewStep( QObject* parent = nullptr ); - virtual ~QmlViewStep() override; + ~QmlViewStep() override; virtual QString prettyName() const override; virtual QWidget* widget() override; + virtual QSize widgetMargins( Qt::Orientations panelSides ) override; virtual bool isNextEnabled() const override; virtual bool isBackEnabled() const override; diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp new file mode 100644 index 000000000..6ae5618db --- /dev/null +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -0,0 +1,284 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Slideshow.h" + +#include "Branding.h" +#include "utils/Dirs.h" +#include "utils/Logger.h" +#ifdef WITH_QML +#include "utils/Qml.h" +#endif +#include "utils/Retranslator.h" + +#include +#include +#ifdef WITH_QML +#include +#include +#include +#include +#endif +#include + +#include + +namespace Calamares +{ + +Slideshow::~Slideshow() {} + +#ifdef WITH_QML +SlideshowQML::SlideshowQML( QWidget* parent ) + : Slideshow( parent ) + , m_qmlShow( new QQuickWidget ) + , m_qmlComponent( nullptr ) + , m_qmlObject( nullptr ) +{ + m_qmlShow->setObjectName( "qml" ); + + CalamaresUtils::registerQmlModels(); + + m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView ); + m_qmlShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() ); + + cDebug() << "QML import paths:" << Logger::DebugList( m_qmlShow->engine()->importPathList() ); +#if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 ) + CALAMARES_RETRANSLATE( if ( m_qmlShow ) { m_qmlShow->engine()->retranslate(); } ); +#endif + + if ( Branding::instance()->slideshowAPI() == 2 ) + { + cDebug() << "QML load on startup, API 2."; + loadQmlV2(); + } +} + +SlideshowQML::~SlideshowQML() +{ + delete m_qmlObject; + delete m_qmlComponent; + delete m_qmlShow; +} + +QWidget* +SlideshowQML::widget() +{ + return m_qmlShow; +} + +void +SlideshowQML::loadQmlV2() +{ + QMutexLocker l( &m_mutex ); + if ( !m_qmlComponent && !Calamares::Branding::instance()->slideshowPath().isEmpty() ) + { + m_qmlComponent = new QQmlComponent( m_qmlShow->engine(), + QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), + QQmlComponent::CompilationMode::Asynchronous ); + connect( m_qmlComponent, &QQmlComponent::statusChanged, this, &SlideshowQML::loadQmlV2Complete ); + } +} + +void +SlideshowQML::loadQmlV2Complete() +{ + QMutexLocker l( &m_mutex ); + if ( m_qmlComponent && m_qmlComponent->isReady() && !m_qmlObject ) + { + cDebug() << "QML component complete, API 2"; + // Don't do this again + disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &SlideshowQML::loadQmlV2Complete ); + + QObject* o = m_qmlComponent->create(); + m_qmlObject = qobject_cast< QQuickItem* >( o ); + if ( !m_qmlObject ) + { + delete o; + } + else + { + cDebug() << Logger::SubEntry << "Loading" << Calamares::Branding::instance()->slideshowPath(); + + // setContent() is public API, but not documented publicly. + // It is marked \internal in the Qt sources, but does exactly + // what is needed: sets up visual parent by replacing the root + // item, and handling resizes. + m_qmlShow->setContent( + QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), m_qmlComponent, m_qmlObject ); + if ( isActive() ) + { + // We're alreay visible! Must have been slow QML loading, and we + // passed onActivate already. changeSlideShowState() locks + // the same mutex: call changeSlideShowState() after l is dead. + QTimer::singleShot( 0, this, &SlideshowQML::startSlideShow ); + } + } + } + else + { + if ( m_qmlObject ) + { + cWarning() << "QML object already created"; + } + else if ( !m_qmlComponent ) + { + cWarning() << "QML component does not exist"; + } + else if ( m_qmlComponent && !m_qmlComponent->isReady() ) + { + cWarning() << "QML component not ready:" << m_qmlComponent->errors(); + } + } +} + +void +SlideshowQML::startSlideShow() +{ + changeSlideShowState( Slideshow::Start ); +} + + +/* + * Applies V1 and V2 QML activation / deactivation: + * - V1 loads the QML in @p widget on activation. Sets root object property + * *activatedInCalamares* as appropriate. + * - V2 calls onActivate() or onLeave() in the QML as appropriate. Also + * sets the *activatedInCalamares* property. + */ +void +SlideshowQML::changeSlideShowState( Action state ) +{ + QMutexLocker l( &m_mutex ); + bool activate = state == Slideshow::Start; + + if ( Branding::instance()->slideshowAPI() == 2 ) + { + // The QML was already loaded in the constructor, need to start it + CalamaresUtils::callQmlFunction( m_qmlObject, activate ? "onActivate" : "onLeave" ); + } + else if ( !Calamares::Branding::instance()->slideshowPath().isEmpty() ) + { + // API version 1 assumes onCompleted is the trigger + if ( activate ) + { + m_qmlShow->setSource( QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ) ); + } + // needs the root object for property setting, below + m_qmlObject = m_qmlShow->rootObject(); + } + + // V1 API has picked up the root object for use, V2 passed it in. + if ( m_qmlObject ) + { + static const char propertyName[] = "activatedInCalamares"; + auto property = m_qmlObject->property( propertyName ); + if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) + { + m_qmlObject->setProperty( propertyName, activate ); + } + } + + if ( ( Branding::instance()->slideshowAPI() == 2 ) && ( state == Slideshow::Stop ) ) + { + delete m_qmlObject; + m_qmlObject = nullptr; + } + + m_state = state; +} +#endif + +SlideshowPictures::SlideshowPictures( QWidget* parent ) + : Slideshow( parent ) + , m_label( new QLabel( parent ) ) + , m_timer( new QTimer( this ) ) + , m_imageIndex( 0 ) + , m_images( Branding::instance()->slideshowImages() ) +{ + m_label->setObjectName( "image" ); + + m_label->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + m_label->setAlignment( Qt::AlignCenter ); + m_timer->setInterval( std::chrono::milliseconds( 2000 ) ); + connect( m_timer, &QTimer::timeout, this, &SlideshowPictures::next ); +} + +SlideshowPictures::~SlideshowPictures() +{ + delete m_timer; + delete m_label; +} + +QWidget* +SlideshowPictures::widget() +{ + return m_label; +} + +void +SlideshowPictures::changeSlideShowState( Calamares::Slideshow::Action a ) +{ + QMutexLocker l( &m_mutex ); + m_state = a; + if ( a == Slideshow::Start ) + { + m_imageIndex = -1; + if ( m_images.count() < 1 ) + { + m_label->setPixmap( QPixmap( ":/data/images/squid.svg" ) ); + } + else + { + + m_timer->start(); + QTimer::singleShot( 0, this, &SlideshowPictures::next ); + } + } + else + { + m_timer->stop(); + } +} + +void +SlideshowPictures::next() +{ + QMutexLocker l( &m_mutex ); + + if ( m_imageIndex < 0 ) + { + // Initialization, don't do the advance-by-one + m_imageIndex = 0; + } + else + { + m_imageIndex++; + if ( m_imageIndex >= m_images.count() ) + { + m_imageIndex = 0; + } + } + + if ( m_imageIndex >= m_images.count() ) + { + // Unusual case: timer is running, but we have 0 images to display. + // .. this would have been caught in changeSlideShowState(), which + // .. special-cases 0 images. + return; + } + + m_label->setPixmap( QPixmap( m_images.at( m_imageIndex ) ) ); +} + + +} // namespace Calamares diff --git a/src/libcalamaresui/viewpages/Slideshow.h b/src/libcalamaresui/viewpages/Slideshow.h new file mode 100644 index 000000000..41dacd46e --- /dev/null +++ b/src/libcalamaresui/viewpages/Slideshow.h @@ -0,0 +1,142 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef LIBCALAMARESUI_SLIDESHOW_H +#define LIBCALAMARESUI_SLIDESHOW_H + +#include "CalamaresConfig.h" + +#include +#include +#include + +class QLabel; +class QTimer; +#ifdef WITH_QML +class QQmlComponent; +class QQuickItem; +class QQuickWidget; +#endif + +namespace Calamares +{ + +/** @brief API for Slideshow objects + * + * A Slideshow (subclass) object is created by the ExecutionViewStep + * and needs to manage its own configuration (e.g. from Branding). + * The slideshow is started and stopped when it becomes visible + * and when installation is over, by calling changeSlideShowState() + * as appropriate. + */ +class Slideshow : public QObject +{ + Q_OBJECT +public: + /// @brief State-change of the slideshow, for changeSlideShowState() + enum Action + { + Start, + Stop + }; + + Slideshow( QWidget* parent = nullptr ) + : QObject( parent ) + { + } + ~Slideshow() override; + + /// @brief Is the slideshow being shown **right now**? + bool isActive() const { return m_state == Start; } + + /** @brief The actual widget to show the user. + * + * Depending on the style of slideshow, this might be a QQuickWidget, + * or a QLabel, or something else entirely. + */ + virtual QWidget* widget() = 0; + + /** @brief Tells the slideshow we activated or left the show. + * + * If @p state is @c Slideshow::Start, calls suitable activation procedures. + * If @p state is @c Slideshow::Stop, calls deactivation procedures. + */ + virtual void changeSlideShowState( Action a ) = 0; + +protected: + QMutex m_mutex; + Action m_state = Stop; +}; + +#ifdef WITH_QML +/** @brief Slideshow using a QML file + * + * This is the "classic" slideshow in Calamares, which runs some QML + * while the installation is in progress. It is configured through + * Branding settings *slideshow* and *slideshowAPI*, showing the QML + * file from *slideshow*. The API version influences when and how the + * QML is loaded; version 1 does so only when the slideshow is activated, + * while version 2 does so asynchronously. + */ +class SlideshowQML : public Slideshow +{ + Q_OBJECT +public: + SlideshowQML( QWidget* parent ); + ~SlideshowQML() override; + + QWidget* widget() override; + void changeSlideShowState( Action a ) override; + +public slots: + void loadQmlV2Complete(); + void loadQmlV2(); ///< Loads the slideshow QML (from branding) for API version 2 + + /// Implementation detail + void startSlideShow(); + +private: + QQuickWidget* m_qmlShow; + QQmlComponent* m_qmlComponent; + QQuickItem* m_qmlObject; ///< The actual show +}; +#endif + +/** @brief Slideshow using images + * + * This is an "oldschool" slideshow, but new in Calamares, which + * displays static image files one-by-one. It is for systems that + * do not use QML at all. It is configured through the Branding + * setting *slideshow*. When using this widget, the setting must + * be a list of filenames; the API is set to -1. + */ +class SlideshowPictures : public Slideshow +{ + Q_OBJECT +public: + SlideshowPictures( QWidget* parent ); + ~SlideshowPictures() override; + + QWidget* widget() override; + virtual void changeSlideShowState( Action a ) override; + +public slots: + void next(); + +private: + QLabel* m_label; + QTimer* m_timer; + int m_imageIndex; + QStringList m_images; +}; + +} // namespace Calamares +#endif diff --git a/src/libcalamaresui/viewpages/ViewStep.cpp b/src/libcalamaresui/viewpages/ViewStep.cpp index 11cfa2beb..26c7ee778 100644 --- a/src/libcalamaresui/viewpages/ViewStep.cpp +++ b/src/libcalamaresui/viewpages/ViewStep.cpp @@ -1,24 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ViewStep.h" +#include +#include + namespace Calamares { @@ -85,4 +79,14 @@ ViewStep::checkRequirements() return RequirementsList(); } +QSize +ViewStep::widgetMargins( Qt::Orientations panelSides ) +{ + Q_UNUSED( panelSides ) + + // Application's default style + const auto* s = QApplication::style(); + return QSize( s->pixelMetric( QStyle::PM_LayoutLeftMargin ), s->pixelMetric( QStyle::PM_LayoutTopMargin ) ); +} + } // namespace Calamares diff --git a/src/libcalamaresui/viewpages/ViewStep.h b/src/libcalamaresui/viewpages/ViewStep.h index bdc235476..c20a9d396 100644 --- a/src/libcalamaresui/viewpages/ViewStep.h +++ b/src/libcalamaresui/viewpages/ViewStep.h @@ -1,27 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VIEWSTEP_H #define VIEWSTEP_H -#include "Job.h" #include "DllMacro.h" +#include "Job.h" #include "modulesystem/InstanceKey.h" #include "modulesystem/Requirement.h" @@ -50,29 +41,63 @@ class UIDLLEXPORT ViewStep : public QObject Q_OBJECT public: explicit ViewStep( QObject* parent = nullptr ); - virtual ~ViewStep() override; + ~ViewStep() override; + /** @brief Human-readable name of the step + * + * This (translated) string is shown in the sidebar (progress) + * and during installation. There is no default. + */ virtual QString prettyName() const = 0; - /** + /** @brief Describe what this step will do during install + * * Optional. May return a non-empty string describing what this * step is going to do (should be translated). This is also used * in the summary page to describe what is going to be done. * Return an empty string to provide no description. + * + * The default implementation returns an empty string, so nothing + * will be displayed for this step when a summary is shown. */ virtual QString prettyStatus() const; - /** + /** @brief Return a long description what this step will do during install + * * Optional. May return a widget which will be inserted in the summary * page. The caller takes ownership of the widget. Return nullptr to * provide no widget. In general, this is only used for complicated * steps where prettyStatus() is not sufficient. + * + * The default implementation returns nullptr, so nothing + * will be displayed for this step when a summary is shown. */ virtual QWidget* createSummaryWidget() const; - //TODO: we might want to make this a QSharedPointer + /** @brief Get (or create) the widget for this view step + * + * While a view step **may** create the widget when it is loaded, + * it is recommended to wait with widget creation until the + * widget is actually asked for: a view step **may** be used + * without a UI. + */ virtual QWidget* widget() = 0; + /** @brief Get margins for this widget + * + * This is called by the layout manager to find the desired + * margins (width is used for left and right margin, height is + * used for top and bottom margins) for the widget. The + * @p panelSides indicates where there are panels in the overall + * layout: horizontally and / or vertically adjacent (or none!) + * to the view step's widget. + * + * Should return a size based also on QStyle metrics for layout. + * The default implementation just returns the default layout metrics + * (often 11 pixels on a side). + */ + virtual QSize widgetMargins( Qt::Orientations panelSides ); + /** * @brief Multi-page support, go next * @@ -149,10 +174,12 @@ signals: void nextStatusChanged( bool status ); /* Emitted when the viewstep thinks it needs more space than is currently - * available for display. @p enlarge is the requested additional space, - * e.g. 24px vertical. This request may be silently ignored. + * available for display. @p size is the requested space, that is needed + * to display the entire page. + * + * This request may be silently ignored. */ - void enlarge( QSize enlarge ) const; + void ensureSize( QSize enlarge ) const; protected: Calamares::ModuleSystem::InstanceKey m_instanceKey; diff --git a/src/libcalamaresui/widgets/ClickableLabel.cpp b/src/libcalamaresui/widgets/ClickableLabel.cpp index 62985acf8..be7b142f1 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.cpp +++ b/src/libcalamaresui/widgets/ClickableLabel.cpp @@ -1,24 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClickableLabel.h" -#include +#include // for doubleClickInterval() + +namespace Calamares +{ ClickableLabel::ClickableLabel( QWidget* parent ) @@ -53,3 +47,5 @@ ClickableLabel::mouseReleaseEvent( QMouseEvent* event ) emit clicked(); } } + +} // namespace Calamares diff --git a/src/libcalamaresui/widgets/ClickableLabel.h b/src/libcalamaresui/widgets/ClickableLabel.h index fd66082c5..8c5561677 100644 --- a/src/libcalamaresui/widgets/ClickableLabel.h +++ b/src/libcalamaresui/widgets/ClickableLabel.h @@ -1,35 +1,38 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#ifndef CLICKABLELABEL_H -#define CLICKABLELABEL_H +#ifndef LIBCALAMARESUI_CLICKABLELABEL_H +#define LIBCALAMARESUI_CLICKABLELABEL_H +#include #include -#include -class ClickableLabel : public QLabel +#include "DllMacro.h" + +namespace Calamares +{ + +/** @brief A Label where the whole label area is clickable + * + * When clicking anywhere on the Label (text, background, whatever) + * the signal clicked() is emitted. Use this as a buddy for radio + * buttons or other clickable things where you want mouse interaction + * with the label, to be the same as mouse interaction with the control. + */ +class UIDLLEXPORT ClickableLabel : public QLabel { Q_OBJECT public: explicit ClickableLabel( QWidget* parent = nullptr ); explicit ClickableLabel( const QString& text, QWidget* parent = nullptr ); - virtual ~ClickableLabel() override; + ~ClickableLabel() override; signals: void clicked(); @@ -39,7 +42,9 @@ protected: virtual void mouseReleaseEvent( QMouseEvent* event ) override; private: - QTime m_time; + QElapsedTimer m_time; }; -#endif // CLICKABLELABEL_H +} // namespace Calamares + +#endif // LIBCALAMARESUI_CLICKABLELABEL_H diff --git a/src/libcalamaresui/widgets/ErrorDialog.cpp b/src/libcalamaresui/widgets/ErrorDialog.cpp new file mode 100644 index 000000000..8c682f964 --- /dev/null +++ b/src/libcalamaresui/widgets/ErrorDialog.cpp @@ -0,0 +1,106 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Artem Grinev + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "ErrorDialog.h" +#include "ui_ErrorDialog.h" + +#include "widgets/TranslationFix.h" +#include +#include + +namespace Calamares +{ + +ErrorDialog::ErrorDialog( QWidget* parent ) + : QDialog( parent ) + , ui( new Ui::ErrorDialog ) +{ + ui->setupUi( this ); + ui->iconLabel->setPixmap( QIcon::fromTheme( "dialog-error" ).pixmap( 64 ) ); + ui->detailsWidget->hide(); + ui->offerWebPasteLabel->hide(); +} + +ErrorDialog::~ErrorDialog() +{ + delete ui; +} + +QString +ErrorDialog::heading() const +{ + return ui->headingLabel->text(); +} + +QString +ErrorDialog::informativeText() const +{ + return ui->informativeTextLabel->text(); +} + +QString +ErrorDialog::details() const +{ + return ui->detailsBrowser->toPlainText(); +} + +void +ErrorDialog::setHeading( const QString& newHeading ) +{ + if ( ui->headingLabel->text() != newHeading ) + { + ui->headingLabel->setText( newHeading ); + emit headingChanged(); + } +} + +void +ErrorDialog::setInformativeText( const QString& newInformativeText ) +{ + if ( ui->informativeTextLabel->text() != newInformativeText ) + { + ui->informativeTextLabel->setText( newInformativeText ); + emit informativeTextChanged(); + } +} + +void +ErrorDialog::setDetails( const QString& newDetails ) +{ + if ( ui->detailsBrowser->toPlainText() != newDetails ) + { + ui->detailsBrowser->setPlainText( newDetails ); + ui->detailsWidget->setVisible( !ui->detailsBrowser->toPlainText().trimmed().isEmpty() ); + emit detailsChanged(); + } +} + +bool +ErrorDialog::shouldOfferWebPaste() const +{ + return m_shouldOfferWebPaste; +} + +void +ErrorDialog::setShouldOfferWebPaste( bool newShouldOfferWebPaste ) +{ + if ( m_shouldOfferWebPaste != newShouldOfferWebPaste ) + { + m_shouldOfferWebPaste = newShouldOfferWebPaste; + + ui->offerWebPasteLabel->setVisible( m_shouldOfferWebPaste ); + ui->buttonBox->setStandardButtons( m_shouldOfferWebPaste ? ( QDialogButtonBox::Yes | QDialogButtonBox::No ) + : QDialogButtonBox::Close ); + fixButtonLabels( ui->buttonBox ); + + emit shouldOfferWebPasteChanged(); + } +} + +} // namespace Calamares diff --git a/src/libcalamaresui/widgets/ErrorDialog.h b/src/libcalamaresui/widgets/ErrorDialog.h new file mode 100644 index 000000000..c4949a89c --- /dev/null +++ b/src/libcalamaresui/widgets/ErrorDialog.h @@ -0,0 +1,83 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Artem Grinev + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef LIBCALAMARESUI_ERRORDIALOG_H +#define LIBCALAMARESUI_ERRORDIALOG_H + +#include + +namespace Ui +{ +class ErrorDialog; +} + +namespace Calamares +{ +class ErrorDialog : public QDialog +{ + Q_OBJECT + + Q_PROPERTY( QString heading READ heading WRITE setHeading NOTIFY headingChanged ) + Q_PROPERTY( QString informativeText READ informativeText WRITE setInformativeText NOTIFY informativeTextChanged ) + Q_PROPERTY( QString details READ details WRITE setDetails NOTIFY detailsChanged ) + Q_PROPERTY( bool shouldOfferWebPaste READ shouldOfferWebPaste WRITE setShouldOfferWebPaste NOTIFY + shouldOfferWebPasteChanged ) + +public: + explicit ErrorDialog( QWidget* parent = nullptr ); + ~ErrorDialog() override; + + /** @brief The heading (title) of the error dialog + * + * This is a short (one-line) title. It is human-readable, so should + * be translated at the time it is set. + */ + QString heading() const; + void setHeading( const QString& newHeading ); + + /** @brief The description of the problem + * + * Longer, human-readable, description of the problem. This text + * is word-wrapped as necessary. + */ + QString informativeText() const; + void setInformativeText( const QString& newInformativeText ); + + /** @brief Details of the problem + * + * This is generally command-output; it might not be translated + * when set. It should be considered "background to the informative + * text", or maybe "the reasons". Write the informative text for + * the end-user. + */ + QString details() const; + void setDetails( const QString& newDetails ); + + /** @brief Enable web-paste button + * + * The web-paste button can be configured at a global level, + * but each individual error dialog can be set separately. + */ + bool shouldOfferWebPaste() const; + void setShouldOfferWebPaste( bool newShouldOfferWebPaste ); + +signals: + void headingChanged(); + void informativeTextChanged(); + void detailsChanged(); + void shouldOfferWebPasteChanged(); + +private: + Ui::ErrorDialog* ui; + bool m_shouldOfferWebPaste = false; +}; + +}; // namespace Calamares + +#endif // LIBCALAMARESUI_ERRORDIALOG_H diff --git a/src/libcalamaresui/widgets/ErrorDialog.ui b/src/libcalamaresui/widgets/ErrorDialog.ui new file mode 100644 index 000000000..edc9eb1a0 --- /dev/null +++ b/src/libcalamaresui/widgets/ErrorDialog.ui @@ -0,0 +1,137 @@ + + + +SPDX-FileCopyrightText: 2021 Artem Grinev <agrinev@manjaro.org> +SPDX-License-Identifier: GPL-3.0-or-later + + ErrorDialog + + + + 0 + 0 + 425 + 262 + + + + Dialog + + + + + + + + + + 0 + 0 + + + + + + + + + + + Details: + + + + + + + + + + + + + + + + Would you like to paste the install log to the web? + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + buttonBox + accepted() + ErrorDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ErrorDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp index c495ca5bb..195aad67e 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FixedAspectRatioLabel.h" diff --git a/src/libcalamaresui/widgets/FixedAspectRatioLabel.h b/src/libcalamaresui/widgets/FixedAspectRatioLabel.h index 9466fcd15..7dd058775 100644 --- a/src/libcalamaresui/widgets/FixedAspectRatioLabel.h +++ b/src/libcalamaresui/widgets/FixedAspectRatioLabel.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FIXEDASPECTRATIOLABEL_H @@ -28,7 +19,7 @@ class FixedAspectRatioLabel : public QLabel Q_OBJECT public: explicit FixedAspectRatioLabel( QWidget* parent = nullptr ); - virtual ~FixedAspectRatioLabel() override; + ~FixedAspectRatioLabel() override; public slots: void setPixmap( const QPixmap& pixmap ); diff --git a/src/libcalamaresui/widgets/LogWidget.cpp b/src/libcalamaresui/widgets/LogWidget.cpp new file mode 100644 index 000000000..fb5772023 --- /dev/null +++ b/src/libcalamaresui/widgets/LogWidget.cpp @@ -0,0 +1,113 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2022 Bob van der Linden + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "LogWidget.h" + +#include "utils/Logger.h" + +#include +#include +#include +#include +#include + +namespace Calamares +{ + +LogThread::LogThread( QObject* parent ) + : QThread( parent ) +{ +} + +LogThread::~LogThread() +{ + quit(); + requestInterruption(); + wait(); +} + +void +LogThread::run() +{ + const auto filePath = Logger::logFile(); + + qint64 lastPosition = 0; + + while ( !QThread::currentThread()->isInterruptionRequested() ) + { + QFile file( filePath ); + + qint64 fileSize = file.size(); + // Check whether the file size has changed since last time + // we read the file. + if ( lastPosition != fileSize && file.open( QFile::ReadOnly | QFile::Text ) ) + { + + // Start reading at the position we ended up last time we read the file. + file.seek( lastPosition ); + + QTextStream in( &file ); + auto chunk = in.readAll(); + qint64 newPosition = in.pos(); + + lastPosition = newPosition; + + Q_EMIT onLogChunk( chunk ); + } + QThread::msleep( 100 ); + } +} + +LogWidget::LogWidget( QWidget* parent ) + : QWidget( parent ) + , m_text( new QPlainTextEdit ) + , m_log_thread( this ) +{ + auto layout = new QStackedLayout( this ); + setLayout( layout ); + + m_text->setReadOnly( true ); + m_text->setVerticalScrollBarPolicy( Qt::ScrollBarPolicy::ScrollBarAlwaysOn ); + + QFont monospaceFont( "monospace" ); + monospaceFont.setStyleHint( QFont::Monospace ); + m_text->setFont( monospaceFont ); + + layout->addWidget( m_text ); + + connect( &m_log_thread, &LogThread::onLogChunk, this, &LogWidget::handleLogChunk ); + + m_log_thread.setPriority( QThread::LowestPriority ); + m_log_thread.start(); +} + +void +LogWidget::handleLogChunk( const QString& logChunk ) +{ + m_text->appendPlainText( logChunk ); +} + +void +LogWidget::start() +{ + if ( !m_log_thread.isRunning() ) + { + m_text->clear(); + m_log_thread.start(); + } +} + +void +LogWidget::stop() +{ + m_log_thread.requestInterruption(); +} + + +} // namespace Calamares diff --git a/src/libcalamaresui/widgets/LogWidget.h b/src/libcalamaresui/widgets/LogWidget.h new file mode 100644 index 000000000..5b3ef17a9 --- /dev/null +++ b/src/libcalamaresui/widgets/LogWidget.h @@ -0,0 +1,55 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2022 Bob van der Linden + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef LIBCALAMARESUI_LOGWIDGET_H +#define LIBCALAMARESUI_LOGWIDGET_H + +#include +#include +#include + +namespace Calamares +{ + +class LogThread : public QThread +{ + Q_OBJECT + + void run() override; + +public: + explicit LogThread( QObject* parent = nullptr ); + ~LogThread() override; + +Q_SIGNALS: + void onLogChunk( const QString& logChunk ); +}; + +class LogWidget : public QWidget +{ + Q_OBJECT + + QPlainTextEdit* m_text; + LogThread m_log_thread; + +public: + explicit LogWidget( QWidget* parent = nullptr ); + +public Q_SLOTS: + /// @brief Called by the thread when there is new data + void handleLogChunk( const QString& logChunk ); + + /// @brief Stop watching for log data + void stop(); + /// @brief Start watching for new log data + void start(); +}; + +} // namespace Calamares +#endif // LOGWIDGET_H diff --git a/src/modules/partition/gui/PrettyRadioButton.cpp b/src/libcalamaresui/widgets/PrettyRadioButton.cpp similarity index 60% rename from src/modules/partition/gui/PrettyRadioButton.cpp rename to src/libcalamaresui/widgets/PrettyRadioButton.cpp index 18627f41c..b79f93a25 100644 --- a/src/modules/partition/gui/PrettyRadioButton.cpp +++ b/src/libcalamaresui/widgets/PrettyRadioButton.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PrettyRadioButton.h" @@ -21,11 +12,14 @@ #include "utils/CalamaresUtilsGui.h" #include "widgets/ClickableLabel.h" +#include #include #include #include #include +namespace Calamares +{ PrettyRadioButton::PrettyRadioButton( QWidget* parent ) : QWidget( parent ) @@ -45,10 +39,8 @@ PrettyRadioButton::PrettyRadioButton( QWidget* parent ) m_mainLayout->addWidget( m_label, 0, 1 ); m_mainLayout->setContentsMargins( 0, 0, 0, 0 ); - connect( m_label, &ClickableLabel::clicked, - m_radio, &QRadioButton::click ); - connect( m_radio, &QRadioButton::toggled, - this, &PrettyRadioButton::toggleOptions ); + connect( m_label, &ClickableLabel::clicked, m_radio, &QRadioButton::click ); + connect( m_radio, &QRadioButton::toggled, this, &PrettyRadioButton::toggleOptions ); } @@ -80,17 +72,33 @@ PrettyRadioButton::iconSize() const } -QRadioButton* -PrettyRadioButton::buttonWidget() const +void +PrettyRadioButton::setChecked( bool checked ) { - return m_radio; + m_radio->setChecked( checked ); } + +bool +PrettyRadioButton::isChecked() const +{ + return m_radio->isChecked(); +} + +void +PrettyRadioButton::addToGroup( QButtonGroup* group, int id ) +{ + group->addButton( m_radio, id ); +} + + void PrettyRadioButton::addOptionsComboBox( QComboBox* box ) { if ( !box ) + { return; + } if ( !m_optionsLayout ) { @@ -105,12 +113,16 @@ PrettyRadioButton::addOptionsComboBox( QComboBox* box ) toggleOptions( m_radio->isChecked() ); } - m_optionsLayout->insertWidget( m_optionsLayout->count()-1, box ); + m_optionsLayout->insertWidget( m_optionsLayout->count() - 1, box ); } void PrettyRadioButton::toggleOptions( bool toggle ) { if ( m_optionsLayout ) + { m_optionsLayout->parentWidget()->setVisible( toggle ); + } } + +} // namespace Calamares diff --git a/src/libcalamaresui/widgets/PrettyRadioButton.h b/src/libcalamaresui/widgets/PrettyRadioButton.h new file mode 100644 index 000000000..1874457a8 --- /dev/null +++ b/src/libcalamaresui/widgets/PrettyRadioButton.h @@ -0,0 +1,77 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef LIBCALAMARESUI_PRETTYRADIOBUTTON_H +#define LIBCALAMARESUI_PRETTYRADIOBUTTON_H + +#include "DllMacro.h" + +#include + +class QButtonGroup; +class QComboBox; +class QGridLayout; +class QHBoxLayout; + +namespace Calamares +{ +class ClickableLabel; + +/** @brief A radio button with fancy label next to it. + * + * The fancy label is used so that the text alongside the radio + * button can word-wrap, be multi-line, and support rich text. + * + * The radio button itself can be retrieved with buttonWidget(), + * and the whole behaves a lot like a label. Extra options can be + * added to the display (options are hidden when the button is + * not selected) with addOptionsComboBox(). + */ +class UIDLLEXPORT PrettyRadioButton : public QWidget +{ + Q_OBJECT +public: + explicit PrettyRadioButton( QWidget* parent = nullptr ); + ~PrettyRadioButton() override {} + + /// @brief Passes @p text on to the ClickableLabel + void setText( const QString& text ); + + // Icon applies to the radio-button part + void setIconSize( const QSize& size ); + QSize iconSize() const; + void setIcon( const QIcon& icon ); + + // Applies to the radio-button part + void setChecked( bool checked ); + bool isChecked() const; + + /** @brief Adds the radio-button part to the given @p group + * + * For managing the pretty-radio-button in button groups like normal + * radio buttons, call addToGroup() rather that group->addButton(). + */ + void addToGroup( QButtonGroup* group, int id = -1 ); + + /// @brief Add an options drop-down to this button. + void addOptionsComboBox( QComboBox* ); + +protected slots: + /// Options are hidden when the radio button is off + void toggleOptions( bool checked ); + +protected: + ClickableLabel* m_label; + QRadioButton* m_radio; + QGridLayout* m_mainLayout; + QHBoxLayout* m_optionsLayout; +}; + +} // namespace Calamares +#endif // LIBCALAMARESUI_PRETTYRADIOBUTTON_H diff --git a/src/libcalamaresui/widgets/TranslationFix.cpp b/src/libcalamaresui/widgets/TranslationFix.cpp new file mode 100644 index 000000000..dbfd0bd83 --- /dev/null +++ b/src/libcalamaresui/widgets/TranslationFix.cpp @@ -0,0 +1,61 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "TranslationFix.h" + +#include +#include +#include +#include +#include + +namespace Calamares +{ + +//Using QMessageBox's StandardButton enum here but according to headers they should be kept in-sync between multiple classes. +static std::pair< decltype( QMessageBox::Ok ), const char* > maps[] = { + { QMessageBox::Ok, QT_TRANSLATE_NOOP( "StandardButtons", "&OK" ) }, + { QMessageBox::Yes, QT_TRANSLATE_NOOP( "StandardButtons", "&Yes" ) }, + { QMessageBox::No, QT_TRANSLATE_NOOP( "StandardButtons", "&No" ) }, + { QMessageBox::Cancel, QT_TRANSLATE_NOOP( "StandardButtons", "&Cancel" ) }, + { QMessageBox::Close, QT_TRANSLATE_NOOP( "StandardButtons", "&Close" ) }, +}; + +template < typename TButtonBox > +void +fixButtonLabels( TButtonBox* box ) +{ + if ( !box ) + { + return; + } + + for ( auto [ sb, label ] : maps ) + { + auto* button = box->button( static_cast< typename TButtonBox::StandardButton >( int( sb ) ) ); + if ( button ) + { + button->setText( QCoreApplication::translate( "StandardButtons", label ) ); + } + } +} + +void +fixButtonLabels( QMessageBox* box ) +{ + fixButtonLabels< QMessageBox >( box ); +} + +void +fixButtonLabels( QDialogButtonBox* box ) +{ + fixButtonLabels< QDialogButtonBox >( box ); +} + +} // namespace Calamares diff --git a/src/libcalamaresui/widgets/TranslationFix.h b/src/libcalamaresui/widgets/TranslationFix.h new file mode 100644 index 000000000..89ee9a51a --- /dev/null +++ b/src/libcalamaresui/widgets/TranslationFix.h @@ -0,0 +1,34 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef LIBCALAMARESUI_WIDGETS_TRANSLATIONFIX_H +#define LIBCALAMARESUI_WIDGETS_TRANSLATIONFIX_H + +#include "DllMacro.h" + +class QMessageBox; +class QDialogButtonBox; + +namespace Calamares +{ + +/** @brief Fixes the labels on the standard buttons of the message box + * + * Updates OK / Cancel / Yes / No because there does not + * seem to be a way to do so in the Retranslator code + * (in libcalamares) since the translated strings may come + * from a variety of platform-plugin sources and we can't + * guess the context. + */ +void UIDLLEXPORT fixButtonLabels( QMessageBox* ); + +void UIDLLEXPORT fixButtonLabels( QDialogButtonBox* ); +} // namespace Calamares + +#endif diff --git a/src/libcalamaresui/widgets/WaitingWidget.cpp b/src/libcalamaresui/widgets/WaitingWidget.cpp index 1a658b35b..aef5aecf5 100644 --- a/src/libcalamaresui/widgets/WaitingWidget.cpp +++ b/src/libcalamaresui/widgets/WaitingWidget.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WaitingWidget.h" diff --git a/src/libcalamaresui/widgets/WaitingWidget.h b/src/libcalamaresui/widgets/WaitingWidget.h index 0d8b6fd5b..850b81ca9 100644 --- a/src/libcalamaresui/widgets/WaitingWidget.h +++ b/src/libcalamaresui/widgets/WaitingWidget.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WAITINGWIDGET_H diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt index b72b755d3..03384105e 100644 --- a/src/modules/CMakeLists.txt +++ b/src/modules/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # The variable SKIP_MODULES can be set to skip particular modules; # individual modules can also decide they must be skipped (e.g. OS-specific # modules, or ones with unmet dependencies). Collect the skipped modules @@ -10,65 +16,29 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamaresui ) -if( BUILD_TESTING ) - add_executable( test_conf test_conf.cpp ) - target_link_libraries( test_conf yamlcpp Qt5::Core ) - target_include_directories( test_conf PUBLIC ${YAMLCPP_INCLUDE_DIR} ) -endif() - string( REPLACE " " ";" SKIP_LIST "${SKIP_MODULES}" ) file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) list( SORT SUBDIRECTORIES ) -set( _use_categories "" ) -set( _found_categories "" ) - foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) - list( FIND SKIP_LIST ${SUBDIRECTORY} DO_SKIP ) - - set( _skip_reason "user request" ) - # Handle the USE_ variables by looking for subdirectories - # with a - kind of name. - if( SUBDIRECTORY MATCHES "^[a-zA-Z0-9_]+-" ) - string( REGEX REPLACE "^[^-]+-" "" _implementation ${SUBDIRECTORY} ) - string( REGEX REPLACE "-.*" "" _category ${SUBDIRECTORY} ) - if( USE_${_category} ) - list( APPEND _use_categories ${_category} ) - if( "${_implementation}" STREQUAL "${USE_${_category}}" ) - list( APPEND _found_categories ${_category} ) - else() - list( APPEND SKIP_LIST ${SUBDIRECTORY} ) - set( _skip_reason "USE_${_category}=${USE_${_category}}" ) - set( DO_SKIP 1 ) - endif() - endif() - endif() - - if( NOT DO_SKIP EQUAL -1 ) - message( "${ColorReset}-- Skipping module ${BoldRed}${SUBDIRECTORY}${ColorReset}." ) - message( "" ) - list( APPEND LIST_SKIPPED_MODULES "${SUBDIRECTORY} (${_skip_reason})" ) - elseif( ( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" ) AND - ( DO_SKIP EQUAL -1 ) ) - set( SKIPPED_MODULES ) - calamares_add_module_subdirectory( ${SUBDIRECTORY} ) - if ( SKIPPED_MODULES ) - list( APPEND LIST_SKIPPED_MODULES "${SKIPPED_MODULES}" ) - endif() - endif() + calamares_add_module_subdirectory( ${SUBDIRECTORY} LIST_SKIPPED_MODULES ) endforeach() -# This is *also* done in top-level, so list is displayed -# both before and after the feature summary. -calamares_explain_skipped_modules( ${LIST_SKIPPED_MODULES} ) +# TODO:3.3: Use FindPython3 +if ( BUILD_TESTING AND BUILD_SCHEMA_TESTING AND PYTHONINTERP_FOUND AND PYTHON_EXECUTABLE ) + # The tests for each config file are independent of whether the + # module is enabled or not: the config file should match its schema + # regardless. + foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) + set( _schema_file "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/${SUBDIRECTORY}.schema.yaml" ) + set( _conf_file "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/${SUBDIRECTORY}.conf" ) + if ( EXISTS "${_schema_file}" AND EXISTS "${_conf_file}" ) + add_test( + NAME validate-${SUBDIRECTORY} + COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/ci/configvalidator.py" "${_schema_file}" "${_conf_file}" + ) + endif() + endforeach() +endif() -foreach( _category ${_use_categories} ) - list( FIND _found_categories ${_category} _found ) - if ( _found EQUAL -1 ) - message( FATAL_ERROR "USE_${_category} is set to ${USE_${_category}} and no module matches." ) - endif() -endforeach() - -include( CalamaresAddTranslations ) -add_calamares_python_translations( ${CALAMARES_TRANSLATION_LANGUAGES} ) diff --git a/src/modules/README.md b/src/modules/README.md index 2a9ef64c7..e5bd2e7b6 100644 --- a/src/modules/README.md +++ b/src/modules/README.md @@ -1,5 +1,10 @@ # Calamares modules + + Calamares modules are plugins that provide features like installer pages, batch jobs, etc. An installer page (visible to the user) is called a "view", while other modules are "jobs". @@ -9,20 +14,16 @@ Each Calamares module lives in its own directory. All modules are installed in `$DESTDIR/lib/calamares/modules`. There are two **types** of Calamares module: -* viewmodule, for user-visible modules. These may be in C++, or PythonQt. +* viewmodule, for user-visible modules. These use C++ and either Widgets or QML * jobmodule, for not-user-visible modules. These may be done in C++, - Python, or as external processes. + Python, or as external processes (external processes not recommended). -A viewmodule exposes a UI to the user. The PythonQt-based modules -are considered experimental (and as of march 2019 may be on the -way out again as never-used-much and PythonQt is not packaged -on Debian anymore). +A viewmodule exposes a UI to the user. -There are three (four) **interfaces** for Calamares modules: +There are three **interfaces** for Calamares modules: * qtplugin (viewmodules, jobmodules), * python (jobmodules only), -* pythonqt (viewmodules, jobmodules, optional), -* process (jobmodules only). +* process (jobmodules only, not recommended). ## Module directory @@ -38,7 +39,7 @@ recommended way to create such modules -- the module descriptor file is optional, since it can be generated by the build system. For other module interfaces, the module descriptor file is required. -The module descriptor file must be placed in the module's directory. +The module descriptor file, if required, is placed in the module's directory. The module descriptor file is a YAML 1.2 document which defines the module's name, type, interface and possibly other properties. The name of the module as defined in `module.desc` must be the same as the name @@ -50,16 +51,30 @@ Module descriptors **must** have the following keys: - *interface* (see below for the different interfaces; generally we refer to the kinds of modules by their interface) -Module descriptors for Python and PythonQt modules **must** have the following key: +Module descriptors for C++ modules **may** have the following key: +- *load* (the name of the shared library to load; if empty, uses a + standard library name derived from the module name) + +Module descriptors for Python modules **must** have the following key: - *script* (the name of the Python script to load, nearly always `main.py`) +Module descriptors for process modules **must** have the following key: +- *command* (the command to run) + +Module descriptors for process modules **may** have the following keys: +- *timeout* (how long, in seconds, to wait for the command to run) +- *chroot* (if true, run the command in the target system rather than the host) +Note that process modules are not recommended. + Module descriptors **may** have the following keys: - *emergency* (a boolean value, set to true to mark the module - as an emergency module) + as an emergency module; see the section *Emergency Modules*, below) - *noconfig* (a boolean value, set to true to state that the module has no configuration file; defaults to false) - *requiredModules* (a list of modules which are required for this module to operate properly) +- *weight* (a relative module weight, used to scale progress reporting) + ### Required Modules @@ -72,24 +87,30 @@ it needs those keys. ### Emergency Modules -Only C++ modules and job modules may be emergency modules. If, during an -*exec* step in the sequence, a module fails, installation as a whole fails -and the install is aborted. If there are emergency modules in the **same** -exec block, those will be executed before the installation is aborted. -Non-emergency modules are not executed. +If, during an *exec* step in the sequence, a module fails, installation as +a whole fails and the install is aborted. If there are emergency modules +in the **same** exec block, those will be executed before the installation +is aborted. Non-emergency modules are not executed. If an emergency-module fails while processing emergency-modules for another failed module, that failure is ignored and emergency-module processing continues. Use the EMERGENCY keyword in the CMake description of a C++ module -to generate a suitable `module.desc`. +to generate a suitable `module.desc`. For Python modules, manually add +`emergency: true` to `module.desc`. A module that is marked as an emergency module in its module.desc must **also** set the *emergency* key to *true* in its configuration file (see below). If it does not, the module is not considered to be an emergency -module after all (this is so that you can have modules that have several -instances, only some of which are actually needed for emergencies). +module after all. This is so that you can have modules that have several +instances, only some of which are actually needed for emergencies. + +In summary: +- in `module.desc`, write `emergency: true` to make it **possible** to + run the module in emergency mode, +- in `.conf`, write `emergency: true` to make that specific + module run in emergency mode. ### Module-specific configuration @@ -98,6 +119,10 @@ named `.conf`. If such a file is present in the module's directory, it can be shipped as a *default* configuration file. This only happens if the CMake-time option `INSTALL_CONFIG` is on. +The name of the configuration file for a given module can be +influenced by the `settings.conf` of the overall Calamares configuration. +By default, though, the module's own name is used. + Modules that have *noconfig* set to true will not attempt to read a configuration file, and will not warn that one is missing; conversely if *noconfig* is set to false (or is missing, since @@ -116,6 +141,65 @@ All sample module configuration files are installed in files with the same name placed manually (or by the packager) in `/etc/calamares/modules`. +### Module Weights + +During the *exec* phase of an installation, where jobs are run and +things happen to the target system, there is a running progress bar. +It goes from 0% to 100% while all of the jobs for that exec phase +are run. Generally, one module creates one job, but this varies a little +(e.g. the partition module can spawn a whole bunch of jobs to +deal with each disk, and the users module has separate jobs for +the regular user and the root user). + +By default, modules all "weigh" the same, and each job is equal. +A typical installation has about 30 modules in the exec phase, +so there may be 40 jobs or so: each job represents 2.5% of the +overall progress of the installation. + +The consequence is that the *unpackfs* module, which needs to write +a few hundred MB to disk, gets 2.5% of the progress, and the *machineid* +module, which is essentially instantaneous, also gets 2.5% of the progress. +This makes progress reporting seem weird and uneven, and suggests to users +that Calamares may be "hanging" during the unpackfs stage. + +A module may be assigned a different "weight" in the `module.desc` +file (or via the CMake macros for adding plugins). This gives the +module more space in the overall progress: for instance, the *unpackfs* +module now has a weight of 12, so (assuming there are 38 modules +in the exec phase with a weight of 1, and *unpackfs* with a weight of 12) +regular modules get 2% (1 in 50 total weight) of the overall progress +bar, and the *unpackfs* module gets 24% (12 in 50). While this doesn't +speed anything up, it does make the progress in the unpackfs module more +visible. + +It is also possible to set a weight on a specific module **instance**, +which can be done in `settings.conf`. This overrides any weight +set in the module descriptor. Doing so is the recommended approach, +since that is where the specific installation-process is configured; +it is possible to take the whole installation-process into account +for determining the relative weights there. + + +## Global storage keys + +Some modules place values in global storage so that they can be referenced later by other modules or even other parts of the same module. The following table represents a partial list of the values available as well as where they originate from and which module consume them. + +Key |Source |Consumers|Description +------------------|----------------|---|--- +btrfsSubvolumes |mount |fstab|List of maps containing the mountpoint and btrtfs subvolume +btrfsRootSubvolume|mount |bootloader, luksopenswaphook|String containing the subvolume mounted at root +efiSystemPartition|partition |bootloader, fstab|String containing the path to the ESP relative to the installed system +extraMounts |mount |unpackfs|List of maps holding metadata for the temporary mountpoints used by the installer +fullname |users ||The full username (e.g. "Jane Q. Public") +hostname |users ||A string containing the hostname of the new system +netinstallAdd |packagechooser |netinstall|Data to add to netinstall tree. Same format as netinstall.yaml +netinstallSelect |packagechooser |netinstall|List of group names to select in the netinstall tree +partitions |partition, rawfs|numerous modules|List of maps of metadata about each partition +rootMountPoint |mount |numerous modules|A string with the absolute path to the root mountpoint +username |users |networkcfg, plasmainf, preservefiles|A string containing the username of the new user +zfsDatasets |zfs |bootloader, grubcfg, mount|List of maps of zfs datasets including the name and mount information +zfsInfo |partition |mount, zfs|List of encrypted zfs partitions and the encription info +zfsPoolInfo |zfs |mount, umount|List of maps of zfs pool info including the name and mountpoint ## C++ modules @@ -133,22 +217,79 @@ a `CMakeLists.txt` with a `calamares_add_plugin` call. It will be picked up automatically by our CMake magic. The `module.desc` file is not recommended: nearly all cases can be described in CMake. +Modules can be tested with the `loadmodule` testing executable in +the build directory. See the section on [testing modules](#testing-modules) +for more details. + + +### C++ Jobmodule + +**TODO:** this needs documentation + +### C++ Widgets Viewmodule + +**TODO:** this needs documentation + +### C++ QML Viewmodule + +A QML Viewmodule (or view step) puts much of the UI work in one or more +QML files; the files may be loaded from the branding directory or compiled +into the module. Which QML is used depends on the deployment and the +configuration files for Calamares. + +#### Explicit properties + +The QML can access data from the C++ framework though properties +exposed to QML. There are two libraries that need to be imported +explicitly: + +``` +import io.calamares.core 1.0 +import io.calamares.ui 1.0 +``` + +The *ui* library contains the *Branding* object, which corresponds to +the branding information set through `branding.desc`. The Branding +class (in `src/libcalamaresui/Branding.h` offers a QObject-property +based API, where the most important functions are `string()` and the +convenience functions `versionedName()` and similar. + +The *core* library contains both *ViewManager*, which handles overall +progress through the application, and *Global*, which holds global +storage information. Both objects have an extensive API. The *ViewManager* +can behave as a model for list views and the like. + +These explicit properties from libraries are shared across all the +QML modules (for global storage that goes without saying: it is +the mechanism to share information with other modules). + +#### Implicit properties + +Each module also has an implicit context property available to it. +No import is needed. The context property *config* (note lower case) +holds the Config object for the module. + +The Config object is the bridge between C++ and QML. + +A Config object must inherit QObject and should expose, as `Q_PROPERTY`, +all of the relevant configuration information for the module instance. +The general description how to do that is available +in the [Qt documentation](https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html). ## Python modules Modules may use one of the python interfaces, which may be present in a Calamares installation (but also may not be). These modules must have -a `module.desc` file. The Python script must implement one or more of the -Python interfaces for Calamares -- either the python jobmodule interface, -or the experimental pythonqt job- and viewmodule interfaces. +a `module.desc` file. The Python script must implement the +Python jobmodule interface. To add a Python or process jobmodule, put it in a subdirectory and make sure it has a `module.desc`. It will be picked up automatically by our CMake magic. For all kinds of Python jobs, the key *script* must be set to the name of the main python file for the job. This is almost universally `main.py`. -`CMakeLists.txt` is *not* used for Python and process jobmodules. +`CMakeLists.txt` is *not* used for Python jobmodules. Calamares offers a Python API for module developers, the core Calamares functionality is exposed as `libcalamares.job` for job data, @@ -159,8 +300,10 @@ All code in Python job modules must obey PEP8, the only exception are `libcalamares.globalstorage` keys, which should always be camelCaseWithLowerCaseInitial to match the C++ identifier convention. -For testing and debugging we provide the `testmodule.py` script which -fakes a limited Calamares Python environment for running a single jobmodule. +Modules can be tested with the `loadmodule` testing executable in +the build directory. See the section on [testing modules](#testing-modules) +for more details. + ### Python Jobmodule @@ -174,35 +317,172 @@ description if something went wrong. ### Python API -**TODO:** this needs documentation +The interface from a Python module to Calamares internals is +found in the *libcalamares* module. This is not a standard Python +module, and is only available inside the Calamares "runtime" for +Python modules (it is implemented through Boost::Python in C++). + +A module should start by importing the Calamares internals: + +``` +import libcalamares +``` + +There are three important (sub)modules in *libcalamares*: +- *globalstorage* behaves like a dictionary, and interfaces + with the global storage in Calamares; use it to transfer + information between modules (e.g. the *partition* module + shares the partition layout it creates). Note that some information + in global storage is expected to be structured, and it may be + dicts-within-dicts. + + An example of using globalstorage: + ``` + if not libcalamares.globalstorage.contains("lala"): + libcalamares.globalstorage.insert("lala", 72) + ``` +- *job* is the interface to the job's behavior, with one important + data member: *configuration* which is a dictionary derived from the + configuration file for the module (if there is one, empty otherwise). + Less important data is *pretty_name* (a string) and *working_path* + which are normally not needed. The *pretty_name* value is + obtained by the Calamares internals by calling the `pretty_name()` + function inside the Python module. + + There is one function: `setprogress(p)` which can be passed a float + *p* between 0 and 1 to indicate 0% to 100% completion of the module's + work. +- *utils* is where non-job-specific functions are placed: + - `debug(s)` and `warning(s)` are logger functions, which send output + to the usual Calamares logging functions. Use these over `print()` + which may not be visible at all. + - `mount(device, path, type, options)` mounts a filesystem from + *device* onto *path*, as if running the mount command from the shell. + Use this in preference to running mount by hand. In Calamares 3.3 + this function also handles privilege escalation. + - `gettext_path()` and `gettext_languages()` are support functions + for translations, which would normally be called only once when + setting up gettext (see below). + - `obscure(s)` is a lousy string obfuscation mechanism. Do not use it. + - A half-dozen functions for running a command and dealing with its + output. These are recommended over using `os.system()` or the *subprocess* + module because they handle the chroot behavior for running in the + target system transparently. In Calamares 3.3 these functions also + handle privilege escalation. See below, *Running Commands in Python* for details. + +A module **must** contain a `run()` function to do the actual work +of the module. The module **may** define the following functions +to provide information to Calamares: +- `pretty_name()` returns a string that is a human-readable name or + short description of the module. Since it is human-readable, + return a translated string. +- `pretty_status_message()` returns a (longer) string that is a human-readable + description of the state of the module, or what it is doing. This is + primarily of importance for long-running modules. The function is called + by the Calamares framework when the module reports progress through the + `job.setprogress()` function. Since the status is human-readable, + return a translated string. + +### Python Translations + +Translations in Python modules -- at least the ones in the Calamares core +repository -- are handled through gettext. You should import the standard +Python *gettext* module. Conventionally, `_` is used to mark translations. +That function needs to be configured specifically for use in Calamares +so that it can find the translations. A boilerplate solution is this: + +``` +import gettext +_ = gettext.translation("calamares-python", + localedir=libcalamares.utils.gettext_path(), + languages=libcalamares.utils.gettext_languages(), + fallback=True).gettext +``` + +Error messages should be logged in English, and given to the user +in translated form. In particular, when returning an error message +and description from the `run()` function, return translated forms, +like the following: + +``` +return ( + _("No configuration found"), + _("")) +``` + +### Running Commands in Python + +The use of the `os.system()` function and *subprocess* modules is +discouraged. Using these makes the caller responsible for handling +any chroot or other target-versus-host-system manipulation, and in +Calamares 3.3 may require additional privilege escalation handling. + +The primary functions for running a command from Python are: +- `target_env_process_output(command, callback, stdin, timeout)` +- `host_env_process_output(command, callback, stdin, timeout)` +They run the given *command* (which must be a list of strings, like +`sys.argv` or what would be passed to a *subprocess* module call) +either in the target system (within the chroot) or in the host system. +Except for *command*, the arguments are optional. + +A very simple example is running `ls` from a Python module (with `libcalamares.utils.` qualification omitted): +``` +target_env_process_output(["ls"]) +``` + +The functions return 0. If the exit code of *command* is not 0, an exception +is raised instead of returning 0. The exception is `subprocess.CalledProcessError` +(as if the *subprocess* module had been used), and the `returncode` member +of the exception object can be used to determine the exit code. + +Parameter *stdin* may be a string which is fed to the command as standard input. +The *timeout* is in seconds, with 0 (or a negative number) treated as no-timeout. + +Parameter *callback* is special: +- If it is `None`, no special handling of the command's output is done. + The output will be logged, though (if there is any). +- If it is a list, then the output of the command will be appended to the list, + one line at a time. Lines will still contain the trailing newline character + (if there is one; output may end without a newline). + Use this approach to process the command output after it has completed. +- Anything else is assumed to be a callable function that takes one parameter. + The function is called once for each line of output produced by the command. + The line of output still contains the trailing newline character (if there is one). + Use this approach to process the command output while it is running. + +Here are three examples of running `ls` with different callbacks: +``` +# No processing at all, output is logged +target_env_process_output(["ls"]) +target_env_process_output(["ls"], None) + +# Appends to the list +ls_output = [] +target_env_process_output(["ls"], ls_output) + +# Calls the function for each line, which then calls debug() +def handle_output(s): + debug(f"ls said {s}") +target_env_process_output(["ls"], handle_output) +``` +There are additional functions for running commands in the target, +which can select what they return and whether exceptions are raised +or only an exit code is returned. These functions have an overload +that takes a single string (the name of an executable) as well. They should +all be considered deprecated by the callback-enabled functions, above. -## PythonQt modules +- `target_env_call(command, stdin, timeout)` returns the exit code, does not raise. +- `check_target_env_call(command, stdin, timeout)` raises on a non-zero exit code. +- `check_target_env_output(command, stdin, timeout)` returns a single string with the output of *command*, raises on a non-zero exit code. -> Type: viewmodule, jobmodule -> Interface: pythonqt +All of the API functions for running commands set the environment +LC_ALL and LANG to "C" for the called command. -The PythonQt modules are considered experimental and may be removed again -due to low uptake. Their documentation is also almost completely lacking. +## Process modules -### PythonQt Jobmodule - -A PythonQt jobmodule implements the experimental Job interface by defining -a subclass of something. - -### PythonQt Viewmodule - -A PythonQt viewmodule implements the experimental View interface by defining -a subclass of something. - -### Python API - -**TODO:** this needs documentation - - - -## Process jobmodules +Use of this kind of module is **not** recommended. > Type: jobmodule > Interface: process @@ -214,3 +494,31 @@ The module-descriptor key *command* should have a string as value, which is passed to the shell -- remember to quote it properly. It is generally recommended to use a *shellprocess* job module instead (less configuration, easier to have multiple instances). + +`CMakeLists.txt` is *not* used for process jobmodules. + + +## Testing Modules + +For testing purposes there is an executable `loadmodule` which is +built, but not installed. It can be found in the build directory. +The `loadmodule` executable behaves like single-module Calamares: +it loads global configuration, job configuration, and then runs +a single module which may be a C++ module or a Python module, +a Job or a ViewModule. + +The same application can also be used to test translations, +branding, and slideshows, without starting up a whole Calamares +each time. It is possible to run multiple `loadmodule` executables +at the same time (Calamares tries to enforce that it runs only +once). + +The following arguments can be used with `loadmodule` +(there are more; run `loadmodule --help` for a complete list): + - `--global` takes a filename and reads the file to provide data in + global storage. The file must be YAML-formatted. + - `--job` takes a filename and reads that to provide the job + configuration (e.g. the `.conf` file for the module). + - `--ui` runs a view module with a UI. Without this option, + view modules are run as jobs, and most of them are not + prepared for that, and will crash. diff --git a/src/modules/bootloader/bootloader.conf b/src/modules/bootloader/bootloader.conf index 51337de9d..224ee8d72 100644 --- a/src/modules/bootloader/bootloader.conf +++ b/src/modules/bootloader/bootloader.conf @@ -1,6 +1,13 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Bootloader configuration. The bootloader is installed to allow # the system to start (and pick one of the installed operating # systems to run). +# +# Take note that Debian-derivatives that use unmodified GRUB EFI packages +# should specifically set *efiBootloaderId* to "debian" because that is +# hard-coded in `grubx64.efi`. --- # Define which bootloader you want to use for EFI installations # Possible options are 'grub', 'sb-shim' and 'systemd-boot'. @@ -43,6 +50,20 @@ efiBootMgr: "efibootmgr" # setting the option here, keep in mind that the name is sanitized # (problematic characters, see above, are replaced). # +# There are some special words possible at the end of *efiBootloaderId*: +# @@SERIAL@@ can be used to obtain a uniquely-numbered suffix +# that is added to the Id (yielding, e.g., `dirname1` or `dirname72`) +# @@RANDOM@@ can be used to obtain a unique 4-digit hex suffix +# @@PHRASE@@ can be used to obtain a unique 1-to-3-word suffix +# from a dictionary of space-themed words +# These words must be at the **end** of the *efiBootloaderId* value. +# There must also be at most one of them. If there is none, no suffix- +# processing is done and the *efiBootloaderId* is used unchanged. +# +# NOTE: Debian derivatives that use the unmodified Debian GRUB EFI +# packages may need to set this to "debian" because that is +# hard-coded in `grubx64.efi`. +# # efiBootloaderId: "dirname" # Optionally install a copy of the GRUB EFI bootloader as the EFI diff --git a/src/modules/bootloader/bootloader.schema.yaml b/src/modules/bootloader/bootloader.schema.yaml new file mode 100644 index 000000000..152d3ab72 --- /dev/null +++ b/src/modules/bootloader/bootloader.schema.yaml @@ -0,0 +1,35 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/bootloader +additionalProperties: false +type: object +properties: + efiBootLoader: { type: string } + kernel: { type: string } + img: { type: string } + fallback: { type: string } + timeout: { type: string } # Inserted verbatim + bootloaderEntryName: { type: string } + kernelLine: { type: string } + fallbackKernelLine: { type: string } + + # Programs + grubInstall: { type: string } + grubMkconfig: { type: string } + grubCfg: { type: string } + grubProbe: { type: string } + efiBootMgr: { type: string } + + efiBootloaderId: { type: string } + installEFIFallback: { type: boolean } + +required: + - efiBootLoader + - kernel + - img + - grubInstall + - grubMkconfig + - grubCfg + - grubProbe diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 31d22ff04..fb8e19ac2 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -1,32 +1,24 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2014, Anke Boersma -# Copyright 2014, Daniel Hillenbrand -# Copyright 2014, Benjamin Vaudour -# Copyright 2014-2019, Kevin Kofler -# Copyright 2015-2018, Philip Mueller -# Copyright 2016-2017, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017-2019, Adriaan de Groot -# Copyright 2017, Gabriel Craciunescu -# Copyright 2017, Ben Green +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2014 Anke Boersma +# SPDX-FileCopyrightText: 2014 Daniel Hillenbrand +# SPDX-FileCopyrightText: 2014 Benjamin Vaudour +# SPDX-FileCopyrightText: 2014-2019 Kevin Kofler +# SPDX-FileCopyrightText: 2015-2018 Philip Mueller +# SPDX-FileCopyrightText: 2016-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot +# SPDX-FileCopyrightText: 2017 Gabriel Craciunescu +# SPDX-FileCopyrightText: 2017 Ben Green +# SPDX-FileCopyrightText: 2021 Neal Gompa +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import shutil @@ -57,7 +49,6 @@ def get_uuid(): :return: """ - root_mount_point = libcalamares.globalstorage.value("rootMountPoint") partitions = libcalamares.globalstorage.value("partitions") for partition in partitions: @@ -101,6 +92,50 @@ def get_kernel_line(kernel_type): return "" +def get_zfs_root(): + """ + Looks in global storage to find the zfs root + + :return: A string containing the path to the zfs root or None if it is not found + """ + + zfs = libcalamares.globalstorage.value("zfsDatasets") + + if not zfs: + libcalamares.utils.warning("Failed to locate zfs dataset list") + return None + + # Find the root dataset + for dataset in zfs: + try: + if dataset["mountpoint"] == "/": + return dataset["zpool"] + "/" + dataset["dsName"] + except KeyError: + # This should be impossible + libcalamares.utils.warning("Internal error handling zfs dataset") + raise + + return None + + +def is_btrfs_root(partition): + """ Returns True if the partition object refers to a btrfs root filesystem + + :param partition: A partition map from global storage + :return: True if btrfs and root, False otherwise + """ + return partition["mountPoint"] == "/" and partition["fs"] == "btrfs" + + +def is_zfs_root(partition): + """ Returns True if the partition object refers to a zfs root filesystem + + :param partition: A partition map from global storage + :return: True if zfs and root, False otherwise + """ + return partition["mountPoint"] == "/" and partition["fs"] == "zfs" + + def create_systemd_boot_conf(install_path, efi_dir, uuid, entry, entry_name, kernel_type): """ Creates systemd-boot configuration files based on given parameters. @@ -142,6 +177,25 @@ def create_systemd_boot_conf(install_path, efi_dir, uuid, entry, entry_name, ker "root=/dev/mapper/" + partition["luksMapperName"]] + for partition in partitions: + # systemd-boot with a BTRFS root filesystem needs to be told abouut the root subvolume. + # If a btrfs root subvolume wasn't set, it means the root is directly on the partition + # and this option isn't needed + if is_btrfs_root(partition): + btrfs_root_subvolume = libcalamares.globalstorage.value("btrfsRootSubvolume") + if btrfs_root_subvolume: + kernel_params.append("rootflags=subvol=" + btrfs_root_subvolume) + + # zfs needs to be told the location of the root dataset + if is_zfs_root(partition): + zfs_root_path = get_zfs_root() + if zfs_root_path is not None: + kernel_params.append("zfs=" + zfs_root_path) + else: + # Something is really broken if we get to this point + libcalamares.utils.warning("Internal error handling zfs dataset") + raise Exception("Internal zfs data missing, please contact your distribution") + if cryptdevice_params: kernel_params.extend(cryptdevice_params) else: @@ -170,7 +224,7 @@ def create_systemd_boot_conf(install_path, efi_dir, uuid, entry, entry_name, ker # Copy kernel and initramfs to a subdirectory of /efi partition files_dir = os.path.join(install_path + efi_dir, entry_name) - os.mkdir(files_dir) + os.makedirs(files_dir, exist_ok=True) kernel_path = install_path + kernel kernel_name = os.path.basename(kernel_path) @@ -214,10 +268,166 @@ def create_loader(loader_path, entry): loader_file.write(line) -def efi_label(): +class suffix_iterator(object): + """ + Wrapper for one of the "generator" classes below to behave like + a proper Python iterator. The iterator is initialized with a + maximum number of attempts to generate a new suffix. + """ + def __init__(self, attempts, generator): + self.generator = generator + self.attempts = attempts + self.counter = 0 + + def __iter__(self): + return self + + def __next__(self): + self.counter += 1 + if self.counter <= self.attempts: + return self.generator.next() + raise StopIteration + + +class serialEfi(object): + """ + EFI Id generator that appends a serial number to the given name. + """ + def __init__(self, name): + self.name = name + # So the first call to next() will bump it to 0 + self.counter = -1 + + def next(self): + self.counter += 1 + if self.counter > 0: + return "{!s}{!s}".format(self.name, self.counter) + else: + return self.name + + +def render_in_base(value, base_values, length=-1): + """ + Renders @p value in base-N, where N is the number of + items in @p base_values. When rendering, use the items + of @p base_values (e.g. use "0123456789" to get regular decimal + rendering, or "ABCDEFGHIJ" for letters-as-numbers 'encoding'). + + If length is positive, pads out to at least that long with + leading "zeroes", whatever base_values[0] is. + """ + if value < 0: + raise ValueError("Cannot render negative values") + if len(base_values) < 2: + raise ValueError("Insufficient items for base-N rendering") + if length < 1: + length = 1 + digits = [] + base = len(base_values) + while value > 0: + place = value % base + value = value // base + digits.append(base_values[place]) + while len(digits) < length: + digits.append(base_values[0]) + return "".join(reversed(digits)) + + +class randomEfi(object): + """ + EFI Id generator that appends a random 4-digit hex number to the given name. + """ + def __init__(self, name): + self.name = name + # So the first call to next() will bump it to 0 + self.counter = -1 + + def next(self): + self.counter += 1 + if self.counter > 0: + import random + v = random.randint(0, 65535) # 16 bits + return "{!s}{!s}".format(self.name, render_in_base(v, "0123456789ABCDEF", 4)) + else: + return self.name + + +class phraseEfi(object): + """ + EFI Id generator that appends a random phrase to the given name. + """ + words = ("Sun", "Moon", "Mars", "Soyuz", "Falcon", "Kuaizhou", "Gaganyaan") + + def __init__(self, name): + self.name = name + # So the first call to next() will bump it to 0 + self.counter = -1 + + def next(self): + self.counter += 1 + if self.counter > 0: + import random + desired_length = 1 + self.counter // 5 + v = random.randint(0, len(self.words) ** desired_length) + return "{!s}{!s}".format(self.name, render_in_base(v, self.words)) + else: + return self.name + + +def get_efi_suffix_generator(name): + """ + Handle EFI bootloader Ids with @@@@ for suffix-processing. + """ + if "@@" not in name: + raise ValueError("Misplaced call to get_efi_suffix_generator, no @@") + parts = name.split("@@") + if len(parts) != 3: + raise ValueError("EFI Id {!r} is malformed".format(name)) + if parts[2]: + # Supposed to be empty because the string ends with "@@" + raise ValueError("EFI Id {!r} is malformed".format(name)) + if parts[1] not in ("SERIAL", "RANDOM", "PHRASE"): + raise ValueError("EFI suffix {!r} is unknown".format(parts[1])) + + generator = None + if parts[1] == "SERIAL": + generator = serialEfi(parts[0]) + elif parts[1] == "RANDOM": + generator = randomEfi(parts[0]) + elif parts[1] == "PHRASE": + generator = phraseEfi(parts[0]) + if generator is None: + raise ValueError("EFI suffix {!r} is unsupported".format(parts[1])) + + return generator + + +def change_efi_suffix(efi_directory, bootloader_id): + """ + Returns a label based on @p bootloader_id that is usable within + @p efi_directory. If there is a @@@@ suffix marker + in the given id, tries to generate a unique label. + """ + if bootloader_id.endswith("@@"): + # Do 10 attempts with any suffix generator + g = suffix_iterator(10, get_efi_suffix_generator(bootloader_id)) + else: + # Just one attempt + g = [bootloader_id] + + for candidate_name in g: + if not os.path.exists(os.path.join(efi_directory, candidate_name)): + return candidate_name + return bootloader_id + + +def efi_label(efi_directory): + """ + Returns a sanitized label, possibly unique, that can be + used within @p efi_directory. + """ if "efiBootloaderId" in libcalamares.job.configuration: - efi_bootloader_id = libcalamares.job.configuration[ - "efiBootloaderId"] + efi_bootloader_id = change_efi_suffix( efi_directory, libcalamares.job.configuration["efiBootloaderId"] ) else: branding = libcalamares.globalstorage.value("branding") efi_bootloader_id = branding["bootloaderEntryName"] @@ -237,6 +447,25 @@ def efi_word_size(): return efi_bitness +def efi_boot_next(): + """ + Tell EFI to definitely boot into the just-installed + system next time. + """ + boot_mgr = libcalamares.job.configuration["efiBootMgr"] + boot_entry = None + efi_bootvars = subprocess.check_output([boot_mgr], text=True) + for line in efi_bootvars.split('\n'): + if not line: + continue + words = line.split() + if len(words) >= 2 and words[0] == "BootOrder:": + boot_entry = words[1].split(',')[0] + break + if boot_entry: + subprocess.call([boot_mgr, "-n", boot_entry]) + + def install_systemd_boot(efi_directory): """ Installs systemd-boot as bootloader for EFI setups. @@ -271,6 +500,107 @@ def install_systemd_boot(efi_directory): create_loader(loader_path, distribution_translated) +def get_grub_efi_parameters(): + """ + Returns a 3-tuple of suitable parameters for GRUB EFI installation, + depending on the host machine architecture. The return is + - target name + - grub.efi name + - boot.efi name + all three are strings. May return None if there is no suitable + set for the current machine. May return unsuitable values if the + host architecture is unknown (e.g. defaults to x86_64). + """ + import platform + efi_bitness = efi_word_size() + cpu_type = platform.machine() + + if efi_bitness == "32": + # Assume all 32-bitters are legacy x86 + return ("i386-efi", "grubia32.efi", "bootia32.efi") + elif efi_bitness == "64" and cpu_type == "aarch64": + return ("arm64-efi", "grubaa64.efi", "bootaa64.efi") + elif efi_bitness == "64" and cpu_type == "loongarch64": + return ("loongarch64-efi", "grubloongarch64.efi", "bootloongarch64.efi") + elif efi_bitness == "64": + # If it's not ARM, must by AMD64 + return ("x86_64-efi", "grubx64.efi", "bootx64.efi") + libcalamares.utils.warning("Could not find GRUB parameters for bits {b} and cpu {c}".format(b=repr(efi_bitness), c=repr(cpu_type))) + return None + + +def run_grub_mkconfig(partitions, output_file): + """ + Runs grub-mkconfig in the target environment + + :param partitions: The partitions list from global storage + :param output_file: A string containing the path to the generating grub config file + :return: + """ + + # zfs needs an environment variable set for grub-mkconfig + if any([is_zfs_root(partition) for partition in partitions]): + check_target_env_call(["sh", "-c", "ZPOOL_VDEV_NAME_PATH=1 " + + libcalamares.job.configuration["grubMkconfig"] + " -o " + output_file]) + else: + # The input file /etc/default/grub should already be filled out by the + # grubcfg job module. + check_target_env_call([libcalamares.job.configuration["grubMkconfig"], "-o", output_file]) + + +def run_grub_install(fw_type, partitions, efi_directory): + """ + Runs grub-install in the target environment + + :param fw_type: A string which is "efi" for UEFI installs. Any other value results in a BIOS install + :param partitions: The partitions list from global storage + :param efi_directory: The path of the efi directory relative to the root of the install + :return: + """ + + is_zfs = any([is_zfs_root(partition) for partition in partitions]) + + # zfs needs an environment variable set for grub + if is_zfs: + check_target_env_call(["sh", "-c", "echo ZPOOL_VDEV_NAME_PATH=1 >> /etc/environment"]) + + if fw_type == "efi": + assert efi_directory is not None + efi_bootloader_id = efi_label(efi_directory) + efi_target, efi_grub_file, efi_boot_file = get_grub_efi_parameters() + + if is_zfs: + check_target_env_call(["sh", "-c", "ZPOOL_VDEV_NAME_PATH=1 " + libcalamares.job.configuration["grubInstall"] + + " --target=" + efi_target + " --efi-directory=" + efi_directory + + " --bootloader-id=" + efi_bootloader_id + " --force"]) + else: + check_target_env_call([libcalamares.job.configuration["grubInstall"], + "--target=" + efi_target, + "--efi-directory=" + efi_directory, + "--bootloader-id=" + efi_bootloader_id, + "--force"]) + else: + assert efi_directory is None + if libcalamares.globalstorage.value("bootLoader") is None: + return + + boot_loader = libcalamares.globalstorage.value("bootLoader") + if boot_loader["installPath"] is None: + return + + if is_zfs: + check_target_env_call(["sh", "-c", "ZPOOL_VDEV_NAME_PATH=1 " + + libcalamares.job.configuration["grubInstall"] + + " --target=i386-pc --recheck --force " + + boot_loader["installPath"]]) + else: + check_target_env_call([libcalamares.job.configuration["grubInstall"], + "--target=i386-pc", + "--recheck", + "--force", + boot_loader["installPath"]]) + + def install_grub(efi_directory, fw_type): """ Installs grub as bootloader, either in pc or efi mode. @@ -278,6 +608,12 @@ def install_grub(efi_directory, fw_type): :param efi_directory: :param fw_type: """ + # get the partition from global storage + partitions = libcalamares.globalstorage.value("partitions") + if not partitions: + libcalamares.utils.warning(_("Failed to install grub, no partitions defined in global storage")) + return + if fw_type == "efi": libcalamares.utils.debug("Bootloader: grub (efi)") install_path = libcalamares.globalstorage.value("rootMountPoint") @@ -286,23 +622,11 @@ def install_grub(efi_directory, fw_type): if not os.path.isdir(install_efi_directory): os.makedirs(install_efi_directory) - efi_bootloader_id = efi_label() - efi_bitness = efi_word_size() + efi_bootloader_id = efi_label(efi_directory) - if efi_bitness == "32": - efi_target = "i386-efi" - efi_grub_file = "grubia32.efi" - efi_boot_file = "bootia32.efi" - elif efi_bitness == "64": - efi_target = "x86_64-efi" - efi_grub_file = "grubx64.efi" - efi_boot_file = "bootx64.efi" + efi_target, efi_grub_file, efi_boot_file = get_grub_efi_parameters() - check_target_env_call([libcalamares.job.configuration["grubInstall"], - "--target=" + efi_target, - "--efi-directory=" + efi_directory, - "--bootloader-id=" + efi_bootloader_id, - "--force"]) + run_grub_install(fw_type, partitions, efi_directory) # VFAT is weird, see issue CAL-385 install_efi_directory_firmware = (vfat_correct_case( @@ -321,51 +645,36 @@ def install_grub(efi_directory, fw_type): os.makedirs(install_efi_boot_directory) # Workaround for some UEFI firmwares - FALLBACK = "installEFIFallback" - libcalamares.utils.debug("UEFI Fallback: " + str(libcalamares.job.configuration.get(FALLBACK, ""))) - if libcalamares.job.configuration.get(FALLBACK, True): + fallback = "installEFIFallback" + libcalamares.utils.debug("UEFI Fallback: " + str(libcalamares.job.configuration.get(fallback, ""))) + if libcalamares.job.configuration.get(fallback, True): libcalamares.utils.debug(" .. installing '{!s}' fallback firmware".format(efi_boot_file)) efi_file_source = os.path.join(install_efi_directory_firmware, - efi_bootloader_id, - efi_grub_file) - efi_file_target = os.path.join(install_efi_boot_directory, - efi_boot_file) + efi_bootloader_id, + efi_grub_file) + efi_file_target = os.path.join(install_efi_boot_directory, efi_boot_file) shutil.copy2(efi_file_source, efi_file_target) else: libcalamares.utils.debug("Bootloader: grub (bios)") - if libcalamares.globalstorage.value("bootLoader") is None: - return + run_grub_install(fw_type, partitions, None) - boot_loader = libcalamares.globalstorage.value("bootLoader") - if boot_loader["installPath"] is None: - return - - check_target_env_call([libcalamares.job.configuration["grubInstall"], - "--target=i386-pc", - "--recheck", - "--force", - boot_loader["installPath"]]) - - # The input file /etc/default/grub should already be filled out by the - # grubcfg job module. - check_target_env_call([libcalamares.job.configuration["grubMkconfig"], - "-o", libcalamares.job.configuration["grubCfg"]]) + run_grub_mkconfig(partitions, libcalamares.job.configuration["grubCfg"]) def install_secureboot(efi_directory): """ Installs the secureboot shim in the system by calling efibootmgr. """ - efi_bootloader_id = efi_label() + efi_bootloader_id = efi_label(efi_directory) install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory if efi_word_size() == "64": - install_efi_bin = "shim64.efi" - else: - install_efi_bin = "shim.efi" + install_efi_bin = "shimx64.efi" + elif efi_word_size() == "32": + install_efi_bin = "shimia32.efi" # Copied, roughly, from openSUSE's install script, # and pythonified. *disk* is something like /dev/sda, @@ -403,6 +712,8 @@ def install_secureboot(efi_directory): "-p", efi_partition_number, "-l", install_efi_directory + "/" + install_efi_bin]) + efi_boot_next() + # The input file /etc/default/grub should already be filled out by the # grubcfg job module. check_target_env_call([libcalamares.job.configuration["grubMkconfig"], @@ -462,6 +773,14 @@ def run(): libcalamares.utils.warning( "EFI system, but nothing mounted on {!s}".format(efi_system_partition) ) return None - prepare_bootloader(fw_type) + try: + prepare_bootloader(fw_type) + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Bootloader installation error"), + _("The bootloader could not be installed. The installation command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) return None diff --git a/src/modules/bootloader/module.desc b/src/modules/bootloader/module.desc index 083e1f4b5..44a1c0ee5 100644 --- a/src/modules/bootloader/module.desc +++ b/src/modules/bootloader/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" interface: "python" diff --git a/src/modules/bootloader/test.yaml b/src/modules/bootloader/test.yaml index 1cd6c418f..4623b55f7 100644 --- a/src/modules/bootloader/test.yaml +++ b/src/modules/bootloader/test.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount bootLoader: installPath: /dev/sdb diff --git a/src/modules/bootloader/tests/CMakeTests.txt b/src/modules/bootloader/tests/CMakeTests.txt new file mode 100644 index 000000000..e13529258 --- /dev/null +++ b/src/modules/bootloader/tests/CMakeTests.txt @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# We have tests to exercise some of the module internals. +# Those tests conventionally live in Python files here in the tests/ directory. Add them. +add_test( + NAME test-bootloader-efiname + COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-bootloader-efiname.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) diff --git a/src/modules/bootloader/tests/test-bootloader-efiname.py b/src/modules/bootloader/tests/test-bootloader-efiname.py new file mode 100644 index 000000000..8957733ca --- /dev/null +++ b/src/modules/bootloader/tests/test-bootloader-efiname.py @@ -0,0 +1,67 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Calamares Boilerplate +import libcalamares +libcalamares.globalstorage = libcalamares.GlobalStorage(None) +libcalamares.globalstorage.insert("testing", True) + +# Module prep-work +from src.modules.bootloader import main + +# Specific Bootloader test +g = main.get_efi_suffix_generator("derp@@SERIAL@@") +assert g is not None +assert g.next() == "derp" # First time, no suffix +for n in range(9): + print(g.next()) +# We called next() 10 times in total, starting from 0 +assert g.next() == "derp10" + +g = main.get_efi_suffix_generator("derp@@RANDOM@@") +assert g is not None +for n in range(10): + print(g.next()) +# it's random, nothing to assert + +g = main.get_efi_suffix_generator("derp@@PHRASE@@") +assert g is not None +for n in range(10): + print(g.next()) +# it's random, nothing to assert + +# Check invalid things +try: + g = main.get_efi_suffix_generator("derp") + raise TypeError("Shouldn't get generator (no indicator)") +except ValueError as e: + pass + +try: + g = main.get_efi_suffix_generator("derp@@HEX@@") + raise TypeError("Shouldn't get generator (unknown indicator)") +except ValueError as e: + pass + +try: + g = main.get_efi_suffix_generator("derp@@SERIAL@@x") + raise TypeError("Shouldn't get generator (trailing garbage)") +except ValueError as e: + pass + +try: + g = main.get_efi_suffix_generator("derp@@SERIAL@@@@RANDOM@@") + raise TypeError("Shouldn't get generator (multiple indicators)") +except ValueError as e: + pass + + +# Try the generator (assuming no calamares- test files exist in /tmp) +import os +assert "calamares-single" == main.change_efi_suffix("/tmp", "calamares-single") +assert "calamares-serial" == main.change_efi_suffix("/tmp", "calamares-serial@@SERIAL@@") +try: + os.makedirs("/tmp/calamares-serial", exist_ok=True) + assert "calamares-serial1" == main.change_efi_suffix("/tmp", "calamares-serial@@SERIAL@@") +finally: + os.rmdir("/tmp/calamares-serial") diff --git a/src/modules/contextualprocess/Binding.h b/src/modules/contextualprocess/Binding.h index 25b5c7547..fc9f65557 100644 --- a/src/modules/contextualprocess/Binding.h +++ b/src/modules/contextualprocess/Binding.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This file isn't public API, but is used to express the API that diff --git a/src/modules/contextualprocess/CMakeLists.txt b/src/modules/contextualprocess/CMakeLists.txt index 2df4cfe37..d7716bbfb 100644 --- a/src/modules/contextualprocess/CMakeLists.txt +++ b/src/modules/contextualprocess/CMakeLists.txt @@ -1,10 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( contextualprocess TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ContextualProcessJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) @@ -14,5 +17,5 @@ calamares_add_test( Tests.cpp ContextualProcessJob.cpp # Builds it a second time LIBRARIES - yamlcpp + yamlcpp::yamlcpp ) diff --git a/src/modules/contextualprocess/ContextualProcessJob.cpp b/src/modules/contextualprocess/ContextualProcessJob.cpp index 1173a3071..8bc011127 100644 --- a/src/modules/contextualprocess/ContextualProcessJob.cpp +++ b/src/modules/contextualprocess/ContextualProcessJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ContextualProcessJob.h" @@ -77,7 +68,7 @@ fetch( QString& value, QStringList& selector, int index, const QVariant& v ) } const QVariantMap map = v.toMap(); const QString& key = selector.at( index ); - if ( index == selector.length() - 1) + if ( index == selector.length() - 1 ) { value = map.value( key ).toString(); return map.contains( key ); diff --git a/src/modules/contextualprocess/ContextualProcessJob.h b/src/modules/contextualprocess/ContextualProcessJob.h index 5ab4b935e..8d58a3cbe 100644 --- a/src/modules/contextualprocess/ContextualProcessJob.h +++ b/src/modules/contextualprocess/ContextualProcessJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CONTEXTUALPROCESSJOB_H @@ -35,7 +26,7 @@ class PLUGINDLLEXPORT ContextualProcessJob : public Calamares::CppJob public: explicit ContextualProcessJob( QObject* parent = nullptr ); - virtual ~ContextualProcessJob() override; + ~ContextualProcessJob() override; QString prettyName() const override; diff --git a/src/modules/contextualprocess/Tests.cpp b/src/modules/contextualprocess/Tests.cpp index 50ce9f400..aa51e1192 100644 --- a/src/modules/contextualprocess/Tests.cpp +++ b/src/modules/contextualprocess/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" diff --git a/src/modules/contextualprocess/Tests.h b/src/modules/contextualprocess/Tests.h index fd705a103..0aed1f4a5 100644 --- a/src/modules/contextualprocess/Tests.h +++ b/src/modules/contextualprocess/Tests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/contextualprocess/contextualprocess.conf b/src/modules/contextualprocess/contextualprocess.conf index 0f5972d04..b86fd922c 100644 --- a/src/modules/contextualprocess/contextualprocess.conf +++ b/src/modules/contextualprocess/contextualprocess.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the contextual process job. # # Contextual processes are based on **global** configuration values. diff --git a/src/modules/displaymanager/displaymanager.conf b/src/modules/displaymanager/displaymanager.conf index f6b5a397f..0fd2af163 100644 --- a/src/modules/displaymanager/displaymanager.conf +++ b/src/modules/displaymanager/displaymanager.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. # @@ -20,6 +23,7 @@ displaymanagers: - mdm - lxdm - kdm + - greetd # Enable the following settings to force a desktop environment # in your displaymanager configuration file. This will attempt diff --git a/src/modules/displaymanager/displaymanager.schema.yaml b/src/modules/displaymanager/displaymanager.schema.yaml new file mode 100644 index 000000000..89d657a3b --- /dev/null +++ b/src/modules/displaymanager/displaymanager.schema.yaml @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/displaymanager +additionalProperties: false +type: object +properties: + displaymanagers: + type: array + items: + type: string + enum: [slim, sddm, lightdm, gdm, mdm, lxdm, kdm, greetd] + minItems: 1 # Must be non-empty, if present at all + defaultDesktopEnvironment: + type: object + properties: + executable: { type: string } + desktopFile: { type: string } + required: [ executable, desktopFile ] + basicSetup: { type: boolean, default: false } + sysconfigSetup: { type: boolean, default: false } diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index c00ae1dac..ab68488ed 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -1,34 +1,23 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014-2018, Philip Müller -# Copyright 2014-2015, Teo Mrnjavac -# Copyright 2014, Kevin Kofler -# Copyright 2017, Alf Gaida -# Copyright 2017, Bernhard Landauer -# Copyright 2017, 2019, Adriaan de Groot -# Copyright 2019, Dominic Hayes +# SPDX-FileCopyrightText: 2014-2018 Philip Müller +# SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac +# SPDX-FileCopyrightText: 2014 Kevin Kofler +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 Bernhard Landauer +# SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2019 Dominic Hayes +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import abc import os -import re import libcalamares -import configparser from libcalamares.utils import gettext_path, gettext_languages @@ -184,7 +173,6 @@ desktop_environments = [ '/usr/bin/budgie-session', 'budgie-desktop' # Budgie v8 ), DesktopEnvironment('/usr/bin/gnome-session', 'gnome'), - DesktopEnvironment('/usr/bin/startxfce4', 'xfce'), DesktopEnvironment('/usr/bin/cinnamon-session-cinnamon', 'cinnamon'), DesktopEnvironment('/usr/bin/mate-session', 'mate'), DesktopEnvironment('/usr/bin/enlightenment_start', 'enlightenment'), @@ -193,9 +181,22 @@ desktop_environments = [ DesktopEnvironment('/usr/bin/lxqt-session', 'lxqt'), DesktopEnvironment('/usr/bin/pekwm', 'pekwm'), DesktopEnvironment('/usr/bin/pantheon-session', 'pantheon'), - DesktopEnvironment('/usr/bin/i3', 'i3'), DesktopEnvironment('/usr/bin/startdde', 'deepin'), - DesktopEnvironment('/usr/bin/openbox-session', 'openbox') + DesktopEnvironment('/usr/bin/startxfce4', 'xfce'), + DesktopEnvironment('/usr/bin/openbox-session', 'openbox'), + DesktopEnvironment('/usr/bin/i3', 'i3'), + DesktopEnvironment('/usr/bin/awesome', 'awesome'), + DesktopEnvironment('/usr/bin/bspwm', 'bspwm'), + DesktopEnvironment('/usr/bin/herbstluftwm', 'herbstluftwm'), + DesktopEnvironment('/usr/bin/qtile', 'qtile'), + DesktopEnvironment('/usr/bin/xmonad', 'xmonad'), + DesktopEnvironment('/usr/bin/dwm', 'dwm'), + DesktopEnvironment('/usr/bin/jwm', 'jwm'), + DesktopEnvironment('/usr/bin/icewm-session', 'icewm-session'), + DesktopEnvironment('/usr/bin/fvwm3', 'fvwm3'), + DesktopEnvironment('/usr/bin/sway', 'sway'), + DesktopEnvironment('/usr/bin/ukui-session', 'ukui'), + DesktopEnvironment('/usr/bin/cutefish-session', 'cutefish-xsession'), ] @@ -287,6 +288,10 @@ class DMmdm(DisplayManager): with open(mdm_conf_path, 'w') as mdm_conf: for line in text: + if 'AutomaticLogin=' in line: + line = "" + if 'AutomaticLoginEnable=True' in line: + line = "" if '[daemon]' in line: if do_autologin: line = ( @@ -396,6 +401,10 @@ class DMgdm(DisplayManager): with open(gdm_conf_path, 'w') as gdm_conf: for line in text: + if 'AutomaticLogin=' in line: + line = "" + if 'AutomaticLoginEnable=True' in line: + line = "" if '[daemon]' in line: if do_autologin: line = ( @@ -785,6 +794,8 @@ class DMsddm(DisplayManager): executable = "sddm" def set_autologin(self, username, do_autologin, default_desktop_environment): + import configparser + # Systems with Sddm as Desktop Manager sddm_conf_path = os.path.join(self.root_mount_point, "etc/sddm.conf") @@ -824,6 +835,92 @@ class DMsddm(DisplayManager): pass +class DMgreetd(DisplayManager): + name = "greetd" + executable = "greetd" + greeter_user = "greeter" + greeter_group = "greetd" + config_data = {} + + def os_path(self, path): + return os.path.join(self.root_mount_point, path) + + def config_path(self): + return self.os_path("etc/greetd/config.toml") + + def environments_path(self): + return self.os_path("etc/greetd/environments") + + def config_load(self): + import toml + + if (os.path.exists(self.config_path())): + with open(self.config_path(), "r") as f: + self.config_data = toml.load(f) + + self.config_data['terminal'] = dict(vt = "next") + + default_session_group = self.config_data.get('default_session', None) + if not default_session_group: + self.config_data['default_session'] = {} + + self.config_data['default_session']['user'] = self.greeter_user + + return self.config_data + + def config_write(self): + import toml + with open(self.config_path(), "w") as f: + toml.dump(self.config_data, f) + + def basic_setup(self): + if libcalamares.utils.target_env_call( + ['getent', 'group', self.greeter_group] + ) != 0: + libcalamares.utils.target_env_call( + ['groupadd', self.greeter_group] + ) + + if libcalamares.utils.target_env_call( + ['getent', 'passwd', self.greeter_user] + ) != 0: + libcalamares.utils.target_env_call( + ['useradd', + '-c', '"Greeter User"', + '-g', self.greeter_group, + '-s', '/bin/bash', + self.greeter_user + ] + ) + + def desktop_environment_setup(self, default_desktop_environment): + with open(self.environments_path(), 'w') as envs_file: + envs_file.write(default_desktop_environment.desktop_file) + envs_file.write("\n") + + def greeter_setup(self): + pass + + def set_autologin(self, username, do_autologin, default_desktop_environment): + self.config_load() + + de_command = default_desktop_environment.executable + if os.path.exists(self.os_path("usr/bin/gtkgreed")) and os.path.exists(self.os_path("usr/bin/cage")): + self.config_data['default_session']['command'] = "cage -s -- gtkgreet" + elif os.path.exists(self.os_path("usr/bin/tuigreet")): + tuigreet_base_cmd = "tuigreet --remember --time --issue --asterisks --cmd " + self.config_data['default_session']['command'] = tuigreet_base_cmd + de_command + elif os.path.exists(self.os_path("usr/bin/ddlm")): + self.config_data['default_session']['command'] = "ddlm --target " + de_command + else: + self.config_data['default_session']['command'] = "agreety --cmd " + de_command + + if do_autologin == True: + self.config_data['initial_session'] = dict(command = de_command, user = username) + + self.config_write() + + class DMsysconfig(DisplayManager): name = "sysconfig" executable = None @@ -893,7 +990,7 @@ def run(): if not displaymanagers: return ( _("No display managers selected for the displaymanager module."), - _("The displaymanagers list is empty or undefined in both" + _("The displaymanagers list is empty or undefined in both " "globalstorage and displaymanager.conf.") ) @@ -912,7 +1009,7 @@ def run(): else: dm_instance = None else: - libcalamares.utils.debug("{!s} has {!d} implementation classes.".format(dm).format(len(impl))) + libcalamares.utils.debug("{!s} has {!s} implementation classes.".format(dm, len(impl))) if dm_instance is None: libcalamares.utils.debug("{!s} selected but not installed".format(dm)) @@ -947,7 +1044,7 @@ def run(): else: enable_basic_setup = False - username = libcalamares.globalstorage.value("autologinUser") + username = libcalamares.globalstorage.value("autoLoginUser") if username is not None: do_autologin = True libcalamares.utils.debug("Setting up autologin for user {!s}.".format(username)) diff --git a/src/modules/displaymanager/module.desc b/src/modules/displaymanager/module.desc index ad7ae4423..a58941879 100644 --- a/src/modules/displaymanager/module.desc +++ b/src/modules/displaymanager/module.desc @@ -1,6 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "displaymanager" interface: "python" -requires: [] script: "main.py" diff --git a/src/modules/displaymanager/tests/1.global b/src/modules/displaymanager/tests/1.global new file mode 100644 index 000000000..ee06ccfe1 --- /dev/null +++ b/src/modules/displaymanager/tests/1.global @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +rootMountPoint: /tmp diff --git a/src/modules/displaymanager/tests/CMakeTests.txt b/src/modules/displaymanager/tests/CMakeTests.txt new file mode 100644 index 000000000..70e3d580d --- /dev/null +++ b/src/modules/displaymanager/tests/CMakeTests.txt @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# We have tests to load (some) of the DMs specifically, to test their +# configuration code. Those tests conventionally live in Python +# files here in the tests/ directory. Add them. +foreach(_dmname greetd sddm) + add_test( + NAME configure-displaymanager-${_dmname} + COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-dm-${_dmname}.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) +endforeach() diff --git a/src/modules/displaymanager/tests/test-dm-greetd.py b/src/modules/displaymanager/tests/test-dm-greetd.py new file mode 100644 index 000000000..d41c2dadf --- /dev/null +++ b/src/modules/displaymanager/tests/test-dm-greetd.py @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Calamares Boilerplate +import libcalamares +libcalamares.globalstorage = libcalamares.GlobalStorage(None) +libcalamares.globalstorage.insert("testing", True) + +# Module prep-work +from src.modules.displaymanager import main +default_desktop_environment = main.DesktopEnvironment("startplasma-x11", "kde-plasma.desktop") + +import os +os.makedirs("/tmp/etc/greetd/", exist_ok=True) +try: + os.remove("/tmp/etc/greetd/config.toml") +except FileNotFoundError as e: + pass + +# Specific DM test +d = main.DMgreetd("/tmp") +d.set_autologin("d", True, default_desktop_environment) +# .. and again (this time checks load/save) +d.set_autologin("d", True, default_desktop_environment) +d.set_autologin("d", True, default_desktop_environment) diff --git a/src/modules/displaymanager/tests/test-dm-sddm.py b/src/modules/displaymanager/tests/test-dm-sddm.py new file mode 100644 index 000000000..b5c334948 --- /dev/null +++ b/src/modules/displaymanager/tests/test-dm-sddm.py @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Calamares Boilerplate +import libcalamares +libcalamares.globalstorage = libcalamares.GlobalStorage(None) +libcalamares.globalstorage.insert("testing", True) + +# Module prep-work +from src.modules.displaymanager import main +default_desktop_environment = main.DesktopEnvironment("startplasma-x11", "kde-plasma.desktop") + +# Specific DM test +d = main.DMsddm("/tmp") +d.set_autologin("d", True, default_desktop_environment) +# .. and again (this time checks load/save) +d.set_autologin("d", True, default_desktop_environment) +d.set_autologin("d", True, default_desktop_environment) diff --git a/src/modules/dracut/main.py b/src/modules/dracut/main.py index a929ac70b..392dd8a51 100644 --- a/src/modules/dracut/main.py +++ b/src/modules/dracut/main.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014-2015, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares from libcalamares.utils import target_env_call diff --git a/src/modules/dracut/module.desc b/src/modules/dracut/module.desc index 6d808ac88..9029bf66b 100644 --- a/src/modules/dracut/module.desc +++ b/src/modules/dracut/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "dracut" diff --git a/src/modules/dracutlukscfg/CMakeLists.txt b/src/modules/dracutlukscfg/CMakeLists.txt index 1a07b042d..aaa7a8c17 100644 --- a/src/modules/dracutlukscfg/CMakeLists.txt +++ b/src/modules/dracutlukscfg/CMakeLists.txt @@ -1,10 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( dracutlukscfg TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES DracutLuksCfgJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB NO_CONFIG ) diff --git a/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp b/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp index e151acc0c..8a61420ca 100644 --- a/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp +++ b/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Kevin Kofler + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DracutLuksCfgJob.h" @@ -29,50 +20,42 @@ #include "utils/Logger.h" -// static -const QLatin1String DracutLuksCfgJob::CONFIG_FILE( "/etc/dracut.conf.d/calamares-luks.conf" ); +static const QLatin1String CONFIG_FILE( "/etc/dracut.conf.d/calamares-luks.conf" ); -// static -const char* DracutLuksCfgJob::CONFIG_FILE_HEADER +static const char CONFIG_FILE_HEADER[] = "# Configuration file automatically written by the Calamares system installer\n" "# (This file is written once at install time and should be safe to edit.)\n" "# Enables support for LUKS full disk encryption with single sign on from GRUB.\n" "\n"; -// static -const char* DracutLuksCfgJob::CONFIG_FILE_CRYPTTAB_KEYFILE_LINE +static const char CONFIG_FILE_CRYPTTAB_KEYFILE_LINE[] = "# force installing /etc/crypttab even if hostonly=\"no\", install the keyfile\n" "install_items+=\" /etc/crypttab /crypto_keyfile.bin \"\n"; -// static -const char* DracutLuksCfgJob::CONFIG_FILE_CRYPTTAB_LINE = "# force installing /etc/crypttab even if hostonly=\"no\"\n" - "install_items+=\" /etc/crypttab \"\n"; +static const char CONFIG_FILE_CRYPTTAB_LINE[] = "# force installing /etc/crypttab even if hostonly=\"no\"\n" + "install_items+=\" /etc/crypttab \"\n"; -// static -const QLatin1String DracutLuksCfgJob::CONFIG_FILE_SWAPLINE( - "# enable automatic resume from swap\nadd_device+=\" /dev/disk/by-uuid/%1 \"\n" ); +static const QLatin1String + CONFIG_FILE_SWAPLINE( "# enable automatic resume from swap\nadd_device+=\" /dev/disk/by-uuid/%1 \"\n" ); -// static -QString -DracutLuksCfgJob::rootMountPoint() +static QString +rootMountPoint() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "rootMountPoint" ) ).toString(); } -// static -QVariantList -DracutLuksCfgJob::partitions() +static QVariantList +partitions() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); } -// static -bool -DracutLuksCfgJob::isRootEncrypted() +static bool +isRootEncrypted() { - const QVariantList partitions = DracutLuksCfgJob::partitions(); + const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); @@ -85,11 +68,10 @@ DracutLuksCfgJob::isRootEncrypted() return false; } -// static -bool -DracutLuksCfgJob::hasUnencryptedSeparateBoot() +static bool +hasUnencryptedSeparateBoot() { - const QVariantList partitions = DracutLuksCfgJob::partitions(); + const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); @@ -102,11 +84,10 @@ DracutLuksCfgJob::hasUnencryptedSeparateBoot() return false; } -// static -QString -DracutLuksCfgJob::swapOuterUuid() +static QString +swapOuterUuid() { - const QVariantList partitions = DracutLuksCfgJob::partitions(); + const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); @@ -159,7 +140,7 @@ DracutLuksCfgJob::exec() QTextStream outStream( &configFile ); outStream << CONFIG_FILE_HEADER << ( hasUnencryptedSeparateBoot() ? CONFIG_FILE_CRYPTTAB_LINE : CONFIG_FILE_CRYPTTAB_KEYFILE_LINE ); - const QString swapOuterUuid = DracutLuksCfgJob::swapOuterUuid(); + const QString swapOuterUuid = ::swapOuterUuid(); if ( !swapOuterUuid.isEmpty() ) { cDebug() << "[DRACUTLUKSCFG]: Swap outer UUID" << swapOuterUuid; diff --git a/src/modules/dracutlukscfg/DracutLuksCfgJob.h b/src/modules/dracutlukscfg/DracutLuksCfgJob.h index 52b290d1c..33029f93a 100644 --- a/src/modules/dracutlukscfg/DracutLuksCfgJob.h +++ b/src/modules/dracutlukscfg/DracutLuksCfgJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Kevin Kofler - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DRACUTLUKSCFGJOB_H @@ -35,24 +26,13 @@ class PLUGINDLLEXPORT DracutLuksCfgJob : public Calamares::CppJob public: explicit DracutLuksCfgJob( QObject* parent = nullptr ); - virtual ~DracutLuksCfgJob() override; + ~DracutLuksCfgJob() override; QString prettyName() const override; Calamares::JobResult exec() override; private: - static const QLatin1String CONFIG_FILE; - static const char* CONFIG_FILE_HEADER; - static const char* CONFIG_FILE_CRYPTTAB_KEYFILE_LINE; - static const char* CONFIG_FILE_CRYPTTAB_LINE; - static const QLatin1String CONFIG_FILE_SWAPLINE; - - static QString rootMountPoint(); - static QVariantList partitions(); - static bool isRootEncrypted(); - static bool hasUnencryptedSeparateBoot(); - static QString swapOuterUuid(); }; CALAMARES_PLUGIN_FACTORY_DECLARATION( DracutLuksCfgJobFactory ) diff --git a/src/modules/dummycpp/CMakeLists.txt b/src/modules/dummycpp/CMakeLists.txt index 0841eaa2b..2916b4d67 100644 --- a/src/modules/dummycpp/CMakeLists.txt +++ b/src/modules/dummycpp/CMakeLists.txt @@ -1,9 +1,12 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( dummycpp TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES DummyCppJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) diff --git a/src/modules/dummycpp/DummyCppJob.cpp b/src/modules/dummycpp/DummyCppJob.cpp index 5a2ca1803..afccdc7d5 100644 --- a/src/modules/dummycpp/DummyCppJob.cpp +++ b/src/modules/dummycpp/DummyCppJob.cpp @@ -1,27 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac (original dummypython code) - * Copyright 2016, Kevin Kofler - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac (original dummypython code) + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DummyCppJob.h" #include -#include #include #include "CalamaresVersion.h" diff --git a/src/modules/dummycpp/DummyCppJob.h b/src/modules/dummycpp/DummyCppJob.h index bf8625950..5271a73a5 100644 --- a/src/modules/dummycpp/DummyCppJob.h +++ b/src/modules/dummycpp/DummyCppJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Kevin Kofler - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Kevin Kofler + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DUMMYCPPJOB_H @@ -35,7 +26,7 @@ class PLUGINDLLEXPORT DummyCppJob : public Calamares::CppJob public: explicit DummyCppJob( QObject* parent = nullptr ); - virtual ~DummyCppJob() override; + ~DummyCppJob() override; QString prettyName() const override; diff --git a/src/modules/dummycpp/dummycpp.conf b/src/modules/dummycpp/dummycpp.conf index 1f2e1daee..b00a42825 100644 --- a/src/modules/dummycpp/dummycpp.conf +++ b/src/modules/dummycpp/dummycpp.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is a dummy (example) module for C++ Jobs. # # The code is the documentation for the configuration file. diff --git a/src/modules/dummycpp/module.desc b/src/modules/dummycpp/module.desc index 11b9c500c..bc768a17a 100644 --- a/src/modules/dummycpp/module.desc +++ b/src/modules/dummycpp/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummycpp job # # The metadata for C++ (qtplugin) plugins is almost never interesting: diff --git a/src/modules/dummyprocess/module.desc b/src/modules/dummyprocess/module.desc index 55d11cfab..a329b7725 100644 --- a/src/modules/dummyprocess/module.desc +++ b/src/modules/dummyprocess/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy process jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/dummypython/dummypython.conf b/src/modules/dummypython/dummypython.conf index c700120e7..6ea50c5d1 100644 --- a/src/modules/dummypython/dummypython.conf +++ b/src/modules/dummypython/dummypython.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is a dummy (example) module for a Python Job Module. # # The code is the documentation for the configuration file. diff --git a/src/modules/dummypython/main.py b/src/modules/dummypython/main.py index 96de6030f..aa748006d 100644 --- a/src/modules/dummypython/main.py +++ b/src/modules/dummypython/main.py @@ -1,24 +1,15 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . """ === Example Python jobmodule. diff --git a/src/modules/dummypython/module.desc b/src/modules/dummypython/module.desc index ebe81af1a..52c1d09d2 100644 --- a/src/modules/dummypython/module.desc +++ b/src/modules/dummypython/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy python jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/dummypythonqt/dummypythonqt.conf b/src/modules/dummypythonqt/dummypythonqt.conf index 5bc64abfa..6caf9cc18 100644 --- a/src/modules/dummypythonqt/dummypythonqt.conf +++ b/src/modules/dummypythonqt/dummypythonqt.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is a dummy (example) module for PythonQt. # # The code is the documentation for the configuration file. diff --git a/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 96b7a6c53..000000000 Binary files a/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 8192eb723..000000000 Binary files a/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bbe53ce95..000000000 Binary files a/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 2a7ecc372..000000000 Binary files a/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index cbd832bc7..000000000 Binary files a/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/dummypythonqt.po new file mode 100644 index 000000000..d2783e5e3 --- /dev/null +++ b/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/dummypythonqt.po @@ -0,0 +1,42 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-30 23:13+0200\n" +"PO-Revision-Date: 2016-12-16 12:18+0000\n" +"Language-Team: Bengali (https://www.transifex.com/calamares/teams/20061/bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/modules/dummypythonqt/main.py:84 +msgid "Click me!" +msgstr "" + +#: src/modules/dummypythonqt/main.py:94 +msgid "A new QLabel." +msgstr "" + +#: src/modules/dummypythonqt/main.py:97 +msgid "Dummy PythonQt ViewStep" +msgstr "" + +#: src/modules/dummypythonqt/main.py:183 +msgid "The Dummy PythonQt Job" +msgstr "" + +#: src/modules/dummypythonqt/main.py:186 +msgid "This is the Dummy PythonQt Job. The dummy job says: {}" +msgstr "" + +#: src/modules/dummypythonqt/main.py:190 +msgid "A status message for Dummy PythonQt Job." +msgstr "" diff --git a/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 988a78d7e..000000000 Binary files a/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b22984ed7..000000000 Binary files a/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index c83734ac0..000000000 Binary files a/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 1e836027f..000000000 Binary files a/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9af7a6614..000000000 Binary files a/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/dummypythonqt.pot b/src/modules/dummypythonqt/lang/dummypythonqt.pot index 7a2fc3386..f3a9fc325 100644 --- a/src/modules/dummypythonqt/lang/dummypythonqt.pot +++ b/src/modules/dummypythonqt/lang/dummypythonqt.pot @@ -8,35 +8,35 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-07 22:12+0200\n" +"POT-Creation-Date: 2022-02-17 15:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Language: \n" -#: src/modules/dummypythonqt/main.py:84 +#: src/modules/dummypythonqt/main.py:75 msgid "Click me!" msgstr "Click me!" -#: src/modules/dummypythonqt/main.py:94 +#: src/modules/dummypythonqt/main.py:85 msgid "A new QLabel." msgstr "A new QLabel." -#: src/modules/dummypythonqt/main.py:97 +#: src/modules/dummypythonqt/main.py:88 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" -#: src/modules/dummypythonqt/main.py:183 +#: src/modules/dummypythonqt/main.py:174 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" -#: src/modules/dummypythonqt/main.py:186 +#: src/modules/dummypythonqt/main.py:177 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "This is the Dummy PythonQt Job. The dummy job says: {}" -#: src/modules/dummypythonqt/main.py:190 +#: src/modules/dummypythonqt/main.py:181 msgid "A status message for Dummy PythonQt Job." msgstr "A status message for Dummy PythonQt Job." diff --git a/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 6f98c92cc..000000000 Binary files a/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 283b865e9..000000000 Binary files a/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index ad243b6ea..000000000 Binary files a/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 5fcc8a7de..000000000 Binary files a/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 54ca84802..000000000 Binary files a/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index db7159023..000000000 Binary files a/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index cdb2466fa..000000000 Binary files a/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 43448bf58..000000000 Binary files a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 248498cd7..000000000 Binary files a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po index d4b0f1355..373a4c3e9 100644 --- a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po +++ b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Danial Behzadi , 2020 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-05 11:34-0400\n" +"POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" +"Last-Translator: Danial Behzadi , 2020\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,24 +23,24 @@ msgstr "" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" -msgstr "" +msgstr "کلیکم کنید!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." -msgstr "" +msgstr "یک QLabel جدید." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" -msgstr "" +msgstr "گام نمایش PythonQt الکی" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" -msgstr "" +msgstr "کار PythonQt الکی" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" -msgstr "" +msgstr "این کار PythonQt الکی است. کار الکی می‌گوید: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." -msgstr "" +msgstr "پیام وضعیتی برای کار PythonQt الکی." diff --git a/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index fcc562306..000000000 Binary files a/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b8d951621..000000000 Binary files a/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 17561fc31..000000000 Binary files a/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 33cbe602c..000000000 Binary files a/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bd8794f5a..000000000 Binary files a/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index e6061d7c4..000000000 Binary files a/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9c22e2c82..000000000 Binary files a/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 6d12c7ddc..000000000 Binary files a/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index afc284949..000000000 Binary files a/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 75365c3b7..000000000 Binary files a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po index 7bbd86a27..41a0444c0 100644 --- a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po +++ b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po @@ -5,16 +5,16 @@ # # Translators: # Kukuh Syafaat , 2016 -# Wantoyo , 2017 +# Wantoyèk , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-05 11:34-0400\n" +"POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" -"Last-Translator: Wantoyo , 2017\n" +"Last-Translator: Wantoyèk , 2017\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b2f98c8d3..000000000 Binary files a/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index c1989cc8f..000000000 Binary files a/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 4d131a0f8..000000000 Binary files a/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bd70c8130..000000000 Binary files a/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index fa0c9819a..000000000 Binary files a/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9f6a1c4e6..000000000 Binary files a/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 61b880bb7..000000000 Binary files a/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index c42841514..000000000 Binary files a/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.po new file mode 100644 index 000000000..651fe2fa4 --- /dev/null +++ b/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.po @@ -0,0 +1,42 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-30 23:13+0200\n" +"PO-Revision-Date: 2016-12-16 12:18+0000\n" +"Language-Team: Latvian (https://www.transifex.com/calamares/teams/20061/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#: src/modules/dummypythonqt/main.py:84 +msgid "Click me!" +msgstr "" + +#: src/modules/dummypythonqt/main.py:94 +msgid "A new QLabel." +msgstr "" + +#: src/modules/dummypythonqt/main.py:97 +msgid "Dummy PythonQt ViewStep" +msgstr "" + +#: src/modules/dummypythonqt/main.py:183 +msgid "The Dummy PythonQt Job" +msgstr "" + +#: src/modules/dummypythonqt/main.py:186 +msgid "This is the Dummy PythonQt Job. The dummy job says: {}" +msgstr "" + +#: src/modules/dummypythonqt/main.py:190 +msgid "A status message for Dummy PythonQt Job." +msgstr "" diff --git a/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index bad77684e..000000000 Binary files a/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 258ea94f6..000000000 Binary files a/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 48aca7e96..000000000 Binary files a/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 549cfa6b5..000000000 Binary files a/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 020b2e549..000000000 Binary files a/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 95b99b007..000000000 Binary files a/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index a0bf42817..000000000 Binary files a/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 5ef78795b..000000000 Binary files a/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 3845d3070..000000000 Binary files a/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index b07421664..000000000 Binary files a/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 931086b0d..000000000 Binary files a/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index db7fccbbf..000000000 Binary files a/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 763803202..000000000 Binary files a/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 8234ab079..000000000 Binary files a/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po index 36cffdf1e..6335e9c56 100644 --- a/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po +++ b/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Besnik , 2017 +# Besnik Bleta , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-05 11:34-0400\n" +"POT-Creation-Date: 2020-04-15 13:39+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" -"Last-Translator: Besnik , 2017\n" +"Last-Translator: Besnik Bleta , 2017\n" "Language-Team: Albanian (https://www.transifex.com/calamares/teams/20061/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 5c8099cd4..000000000 Binary files a/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9f59500bd..000000000 Binary files a/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index eb7d7d69d..000000000 Binary files a/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 502e4d130..000000000 Binary files a/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 9e62f7154..000000000 Binary files a/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 6b860e05c..000000000 Binary files a/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index e7588670d..000000000 Binary files a/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 4e1a2c34a..000000000 Binary files a/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index 61ec39334..000000000 Binary files a/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo deleted file mode 100644 index f13ff2d5f..000000000 Binary files a/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.mo and /dev/null differ diff --git a/src/modules/dummypythonqt/main.py b/src/modules/dummypythonqt/main.py index f830caf30..e33c20e6f 100644 --- a/src/modules/dummypythonqt/main.py +++ b/src/modules/dummypythonqt/main.py @@ -1,23 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2016-2017, Teo Mrnjavac -# Copyright 2017, Alf Gaida +# SPDX-FileCopyrightText: 2016-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import platform diff --git a/src/modules/dummypythonqt/module.desc b/src/modules/dummypythonqt/module.desc index 46633a6db..a747daeaa 100644 --- a/src/modules/dummypythonqt/module.desc +++ b/src/modules/dummypythonqt/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy pythonqt jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/finished/CMakeLists.txt b/src/modules/finished/CMakeLists.txt index 6482fb2cd..619f6d8b0 100644 --- a/src/modules/finished/CMakeLists.txt +++ b/src/modules/finished/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) @@ -6,12 +11,12 @@ calamares_add_plugin( finished TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES + Config.cpp FinishedViewStep.cpp FinishedPage.cpp UI FinishedPage.ui LINK_PRIVATE_LIBRARIES - calamaresui Qt5::DBus SHARED_LIB ) diff --git a/src/modules/finished/Config.cpp b/src/modules/finished/Config.cpp new file mode 100644 index 000000000..d6d602db0 --- /dev/null +++ b/src/modules/finished/Config.cpp @@ -0,0 +1,232 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "Branding.h" +#include "Settings.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +#include +#include +#include +#include + +const NamedEnumTable< Config::RestartMode >& +restartModes() +{ + using M = Config::RestartMode; + static const NamedEnumTable< M > table { { "never", M::Never }, + { "user-unchecked", M::UserDefaultUnchecked }, + { "unchecked", M::UserDefaultUnchecked }, + { "user-checked", M::UserDefaultChecked }, + { "checked", M::UserDefaultChecked }, + { "always", M::Always } + + }; + return table; +} + + +Config::Config( QObject* parent ) + : QObject( parent ) +{ +} + +void +Config::setRestartNowMode( Config::RestartMode m ) +{ + // Can only go "down" in state (Always > UserDefaultChecked > .. > Never) + if ( m > m_restartNowMode ) + { + return; + } + + // If changing to an unconditional mode, also set other flag + if ( m == RestartMode::Always || m == RestartMode::Never ) + { + setRestartNowWanted( m == RestartMode::Always ); + } + + if ( m != m_restartNowMode ) + { + m_restartNowMode = m; + emit restartModeChanged( m ); + } +} + +void +Config::setRestartNowWanted( bool w ) +{ + // Follow the mode which may affect @p w + if ( m_restartNowMode == RestartMode::Always ) + { + w = true; + } + if ( m_restartNowMode == RestartMode::Never ) + { + w = false; + } + + if ( w != m_userWantsRestart ) + { + m_userWantsRestart = w; + emit restartNowWantedChanged( w ); + } +} + +void +Config::onInstallationFailed( const QString& message, const QString& details ) +{ + const bool msgChange = message != m_failureMessage; + const bool detChange = details != m_failureDetails; + m_failureMessage = message; + m_failureDetails = details; + if ( msgChange ) + { + emit failureMessageChanged( message ); + } + if ( detChange ) + { + emit failureDetailsChanged( message ); + } + if ( ( msgChange || detChange ) ) + { + emit failureChanged( hasFailed() ); + if ( hasFailed() ) + { + setRestartNowMode( Config::RestartMode::Never ); + } + } +} + + +void +Config::doRestart( bool restartAnyway ) +{ + cDebug() << "mode=" << restartModes().find( restartNowMode() ) << " user wants restart?" << restartNowWanted() + << "force restart?" << restartAnyway; + if ( restartNowMode() != RestartMode::Never && restartAnyway ) + { + cDebug() << Logger::SubEntry << "Running restart command" << m_restartNowCommand; + QProcess::execute( "/bin/sh", { "-c", m_restartNowCommand } ); + } +} + + +void +Config::doNotify( bool hasFailed, bool sendAnyway ) +{ + const char* const failName = hasFailed ? "failed" : "succeeded"; + + if ( !sendAnyway ) + { + cDebug() << "Notification not sent; completion:" << failName; + return; + } + + QDBusInterface notify( + "org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications" ); + if ( notify.isValid() ) + { + cDebug() << "Sending notification of completion:" << failName; + + QString title; + QString message; + if ( hasFailed ) + { + title = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Failed" ) : tr( "Installation Failed" ); + message = Calamares::Settings::instance()->isSetupMode() + ? tr( "The setup of %1 did not complete successfully." ) + : tr( "The installation of %1 did not complete successfully." ); + } + else + { + title = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Complete" ) + : tr( "Installation Complete" ); + message = Calamares::Settings::instance()->isSetupMode() ? tr( "The setup of %1 is complete." ) + : tr( "The installation of %1 is complete." ); + } + + const auto* branding = Calamares::Branding::instance(); + QDBusReply< uint > r = notify.call( "Notify", + QString( "Calamares" ), + QVariant( 0U ), + QString( "calamares" ), + title, + message.arg( branding->versionedName() ), + QStringList(), + QVariantMap(), + QVariant( 0 ) ); + if ( !r.isValid() ) + { + cWarning() << "Could not call org.freedesktop.Notifications.Notify at end of installation." << r.error(); + } + } + else + { + cWarning() << "Could not get dbus interface for notifications at end of installation." << notify.lastError(); + } +} + + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + RestartMode mode = RestartMode::Never; + + //TODO:3.3 remove deprecated restart settings + QString restartMode = CalamaresUtils::getString( configurationMap, "restartNowMode" ); + if ( restartMode.isEmpty() ) + { + if ( configurationMap.contains( "restartNowEnabled" ) ) + { + cWarning() << "Configuring the finished module with deprecated restartNowEnabled settings"; + } + + bool restartNowEnabled = CalamaresUtils::getBool( configurationMap, "restartNowEnabled", false ); + bool restartNowChecked = CalamaresUtils::getBool( configurationMap, "restartNowChecked", false ); + + if ( !restartNowEnabled ) + { + mode = RestartMode::Never; + } + else + { + mode = restartNowChecked ? RestartMode::UserDefaultChecked : RestartMode::UserDefaultUnchecked; + } + } + else + { + bool ok = false; + mode = restartModes().find( restartMode, ok ); + if ( !ok ) + { + cWarning() << "Configuring the finished module with bad restartNowMode" << restartMode; + } + } + + m_restartNowMode = mode; + m_userWantsRestart = ( mode == RestartMode::Always || mode == RestartMode::UserDefaultChecked ); + emit restartModeChanged( m_restartNowMode ); + emit restartNowWantedChanged( m_userWantsRestart ); + + if ( mode != RestartMode::Never ) + { + QString restartNowCommand = CalamaresUtils::getString( configurationMap, "restartNowCommand" ); + if ( restartNowCommand.isEmpty() ) + { + restartNowCommand = QStringLiteral( "shutdown -r now" ); + } + m_restartNowCommand = restartNowCommand; + } + + m_notifyOnFinished = CalamaresUtils::getBool( configurationMap, "notifyOnFinished", false ); +} diff --git a/src/modules/finished/Config.h b/src/modules/finished/Config.h new file mode 100644 index 000000000..1349b7445 --- /dev/null +++ b/src/modules/finished/Config.h @@ -0,0 +1,130 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef FINISHED_CONFIG_H +#define FINISHED_CONFIG_H + +#include "utils/NamedEnum.h" + +#include + +class Config : public QObject +{ + Q_OBJECT + + Q_PROPERTY( RestartMode restartNowMode READ restartNowMode WRITE setRestartNowMode NOTIFY restartModeChanged ) + Q_PROPERTY( bool restartNowWanted READ restartNowWanted WRITE setRestartNowWanted NOTIFY restartNowWantedChanged ) + + Q_PROPERTY( QString restartNowCommand READ restartNowCommand CONSTANT FINAL ) + Q_PROPERTY( bool notifyOnFinished READ notifyOnFinished CONSTANT FINAL ) + + Q_PROPERTY( QString failureMessage READ failureMessage NOTIFY failureMessageChanged ) + Q_PROPERTY( QString failureDetails READ failureDetails NOTIFY failureDetailsChanged ) + Q_PROPERTY( bool failed READ hasFailed NOTIFY failureChanged ) + +public: + Config( QObject* parent = nullptr ); + + enum class RestartMode + { + Never, + UserDefaultUnchecked, + UserDefaultChecked, + Always + }; + Q_ENUM( RestartMode ) + + void setConfigurationMap( const QVariantMap& configurationMap ); + +public Q_SLOTS: + RestartMode restartNowMode() const { return m_restartNowMode; } + void setRestartNowMode( RestartMode m ); + + bool restartNowWanted() const + { + if ( restartNowMode() == RestartMode::Never ) + { + return false; + } + return ( restartNowMode() == RestartMode::Always ) || m_userWantsRestart; + } + void setRestartNowWanted( bool w ); + + QString restartNowCommand() const { return m_restartNowCommand; } + bool notifyOnFinished() const { return m_notifyOnFinished; } + + QString failureMessage() const { return m_failureMessage; } + QString failureDetails() const { return m_failureDetails; } + /// Failure is if any of the failure messages is non-empty + bool hasFailed() const { return !m_failureMessage.isEmpty() || !m_failureDetails.isEmpty(); } + + /** @brief Run the restart command, if desired. + * + * This should generally not be called somewhere during the + * application's execution, but only in response to QApplication::quit() + * or something like that when the user expects the system to restart. + * + * The "if desired" part is: only if the restart mode allows it, + * **and** the user has checked the box (or done whatever to + * turn on restartNowWanted()). + * + * - The one-argument form ignores what the user wants and restarts + * if @p restartAnyway is @c true **unless** the mode is Never + * - The no-argument form uses the user setting + */ + void doRestart( bool restartAnyway ); + void doRestart() { doRestart( restartNowWanted() ); } + + /** @brief Send DBus notification + * + * At the end of installation (when the FinishedViewStep is activated), + * send a desktop notification via DBus that the install is done. + * + * - The two-argument form sends success or failure, and can be + * forced to send by setting @p sendAnyway to @c true. + * - The one-argument form sends success or failure and takes + * the notifyOnFinished() configuration into account. + * - The no-argument form checks if a failure was signalled previously + * and uses that to decide if it was a failure. + * + */ + void doNotify( bool hasFailed, bool sendAnyway ); + void doNotify( bool hasFailed ) { doNotify( hasFailed, notifyOnFinished() ); } + void doNotify() { doNotify( hasFailed() ); } + + /** @brief Tell the config the install failed + * + * This should be connected to the JobQueue and is called by + * the queue when the installation fails, with a suitable message. + */ + void onInstallationFailed( const QString& message, const QString& details ); + +signals: + void restartModeChanged( RestartMode m ); + void restartNowWantedChanged( bool w ); + void failureMessageChanged( const QString& ); + void failureDetailsChanged( const QString& ); + void failureChanged( bool ); + +private: + // Configuration parts + QString m_restartNowCommand; + RestartMode m_restartNowMode = RestartMode::Never; + bool m_userWantsRestart = false; + bool m_notifyOnFinished = false; + + // Dynamic parts + bool m_hasFailed = false; + QString m_failureMessage; + QString m_failureDetails; +}; + +const NamedEnumTable< Config::RestartMode >& restartModes(); + +#endif diff --git a/src/modules/finished/FinishedPage.cpp b/src/modules/finished/FinishedPage.cpp index 4bffa8221..949c5f64c 100644 --- a/src/modules/finished/FinishedPage.cpp +++ b/src/modules/finished/FinishedPage.cpp @@ -1,45 +1,29 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FinishedPage.h" +#include "Config.h" #include "ui_FinishedPage.h" -#include "CalamaresVersion.h" -#include "utils/Logger.h" -#include "utils/CalamaresUtilsGui.h" -#include "utils/Retranslator.h" -#include "ViewManager.h" - -#include -#include -#include -#include -#include #include "Branding.h" #include "Settings.h" +#include "utils/Retranslator.h" -FinishedPage::FinishedPage( QWidget* parent ) +#include + + +FinishedPage::FinishedPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::FinishedPage ) - , m_mode( FinishedViewStep::RestartMode::UserUnchecked ) { ui->setupUi( this ); @@ -47,78 +31,23 @@ FinishedPage::FinishedPage( QWidget* parent ) ui->mainText->setWordWrap( true ); ui->mainText->setOpenExternalLinks( true ); - CALAMARES_RETRANSLATE( - ui->retranslateUi( this ); - if ( Calamares::Settings::instance()->isSetupMode() ) - { - ui->mainText->setText( tr( "

All done.


" - "%1 has been set up on your computer.
" - "You may now start using your new system." ) - .arg( *Calamares::Branding::VersionedName ) ); - ui->restartCheckBox->setToolTip( tr ( "" - "

When this box is checked, your system will " - "restart immediately when you click on " - "Done " - "or close the setup program.

" ) ); - } - else - { - ui->mainText->setText( tr( "

All done.


" - "%1 has been installed on your computer.
" - "You may now restart into your new system, or continue " - "using the %2 Live environment." ) - .arg( *Calamares::Branding::VersionedName, *Calamares::Branding::ProductName ) ); - ui->restartCheckBox->setToolTip( tr ( "" - "

When this box is checked, your system will " - "restart immediately when you click on " - "Done " - "or close the installer.

" ) ); - } - ) + connect( config, + &Config::restartModeChanged, + [ this ]( Config::RestartMode mode ) + { + using Mode = Config::RestartMode; + + ui->restartCheckBox->setVisible( mode != Mode::Never ); + ui->restartCheckBox->setEnabled( mode != Mode::Always ); + } ); + connect( config, &Config::restartNowWantedChanged, ui->restartCheckBox, &QCheckBox::setChecked ); + connect( ui->restartCheckBox, + &QCheckBox::stateChanged, + [ config ]( int state ) { config->setRestartNowWanted( state != 0 ); } ); + + CALAMARES_RETRANSLATE_SLOT( &FinishedPage::retranslate ); } - -void -FinishedPage::setRestart( FinishedViewStep::RestartMode mode ) -{ - using Mode = FinishedViewStep::RestartMode; - - m_mode = mode; - - ui->restartCheckBox->setVisible( mode != Mode::Never ); - ui->restartCheckBox->setEnabled( mode != Mode::Always ); - ui->restartCheckBox->setChecked( ( mode == Mode::Always ) || ( mode == Mode::UserChecked ) ); -} - - -void -FinishedPage::setRestartNowCommand( const QString& command ) -{ - m_restartNowCommand = command; -} - - -void -FinishedPage::setUpRestart() -{ - cDebug() << "FinishedPage::setUpRestart(), Quit button" - << "setup=" << FinishedViewStep::modeName( m_mode ) - << "command=" << m_restartNowCommand; - - connect( qApp, &QApplication::aboutToQuit, - [this]() - { - if ( ui->restartCheckBox->isVisible() && - ui->restartCheckBox->isChecked() ) - { - cDebug() << "Running restart command" << m_restartNowCommand; - QProcess::execute( "/bin/sh", { "-c", m_restartNowCommand } ); - } - } - ); -} - - void FinishedPage::focusInEvent( QFocusEvent* e ) { @@ -128,18 +57,64 @@ FinishedPage::focusInEvent( QFocusEvent* e ) void FinishedPage::onInstallationFailed( const QString& message, const QString& details ) { - Q_UNUSED( details ) - if ( Calamares::Settings::instance()->isSetupMode() ) - ui->mainText->setText( tr( "

Setup Failed


" - "%1 has not been set up on your computer.
" - "The error message was: %2." ) - .arg( *Calamares::Branding::VersionedName ) - .arg( message ) ); - else - ui->mainText->setText( tr( "

Installation Failed


" - "%1 has not been installed on your computer.
" - "The error message was: %2." ) - .arg( *Calamares::Branding::VersionedName ) - .arg( message ) ); - setRestart( FinishedViewStep::RestartMode::Never ); + m_failure = !message.isEmpty() ? message : details; + retranslate(); +} + +void +FinishedPage::retranslate() +{ + + const auto* branding = Calamares::Branding::instance(); + + ui->retranslateUi( this ); + if ( !m_failure.has_value() ) + { + if ( Calamares::Settings::instance()->isSetupMode() ) + { + ui->mainText->setText( tr( "

All done.


" + "%1 has been set up on your computer.
" + "You may now start using your new system." ) + .arg( branding->versionedName() ) ); + ui->restartCheckBox->setToolTip( tr( "" + "

When this box is checked, your system will " + "restart immediately when you click on " + "Done " + "or close the setup program.

" ) ); + } + else + { + ui->mainText->setText( tr( "

All done.


" + "%1 has been installed on your computer.
" + "You may now restart into your new system, or continue " + "using the %2 Live environment." ) + .arg( branding->versionedName(), branding->productName() ) ); + ui->restartCheckBox->setToolTip( tr( "" + "

When this box is checked, your system will " + "restart immediately when you click on " + "Done " + "or close the installer.

" ) ); + } + } + else + { + const QString message = m_failure.value(); + + if ( Calamares::Settings::instance()->isSetupMode() ) + { + ui->mainText->setText( tr( "

Setup Failed


" + "%1 has not been set up on your computer.
" + "The error message was: %2." ) + .arg( branding->versionedName() ) + .arg( message ) ); + } + else + { + ui->mainText->setText( tr( "

Installation Failed


" + "%1 has not been installed on your computer.
" + "The error message was: %2." ) + .arg( branding->versionedName() ) + .arg( message ) ); + } + } } diff --git a/src/modules/finished/FinishedPage.h b/src/modules/finished/FinishedPage.h index 25b776ead..068efbdb5 100644 --- a/src/modules/finished/FinishedPage.h +++ b/src/modules/finished/FinishedPage.h @@ -1,29 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FINISHEDPAGE_H #define FINISHEDPAGE_H + #include -#include "FinishedViewStep.h" +#include +class Config; namespace Ui { class FinishedPage; @@ -33,24 +26,19 @@ class FinishedPage : public QWidget { Q_OBJECT public: - explicit FinishedPage( QWidget* parent = nullptr ); + explicit FinishedPage( Config* config, QWidget* parent = nullptr ); - void setRestart( FinishedViewStep::RestartMode mode ); - void setRestartNowCommand( const QString& command ); - - void setUpRestart(); public slots: void onInstallationFailed( const QString& message, const QString& details ); + void retranslate(); protected: - void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus + void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus private: Ui::FinishedPage* ui; - - FinishedViewStep::RestartMode m_mode; - QString m_restartNowCommand; + std::optional< QString > m_failure; }; -#endif // FINISHEDPAGE_H +#endif // FINISHEDPAGE_H diff --git a/src/modules/finished/FinishedPage.ui b/src/modules/finished/FinishedPage.ui index a5b4a9280..c02952b63 100644 --- a/src/modules/finished/FinishedPage.ui +++ b/src/modules/finished/FinishedPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + FinishedPage diff --git a/src/modules/finished/FinishedViewStep.cpp b/src/modules/finished/FinishedViewStep.cpp index f5c0935c3..5ba9c1897 100644 --- a/src/modules/finished/FinishedViewStep.cpp +++ b/src/modules/finished/FinishedViewStep.cpp @@ -1,65 +1,31 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FinishedViewStep.h" + +#include "Config.h" #include "FinishedPage.h" -#include "Branding.h" #include "JobQueue.h" -#include "Settings.h" -#include "utils/Logger.h" -#include "utils/NamedEnum.h" -#include "utils/Variant.h" - -#include -#include -#include -#include - -static const NamedEnumTable< FinishedViewStep::RestartMode >& -modeNames() -{ - using Mode = FinishedViewStep::RestartMode; - - static const NamedEnumTable< Mode > names{ - { QStringLiteral( "never" ), Mode::Never }, - { QStringLiteral( "user-unchecked" ), Mode::UserUnchecked }, - { QStringLiteral( "user-checked" ), Mode::UserChecked }, - { QStringLiteral( "always" ), Mode::Always } - } ; - - return names; -} +#include FinishedViewStep::FinishedViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_widget( new FinishedPage() ) - , installFailed( false ) - , m_notifyOnFinished( false ) + , m_config( new Config( this ) ) + , m_widget( new FinishedPage( m_config ) ) { auto jq = Calamares::JobQueue::instance(); - connect( jq, &Calamares::JobQueue::failed, - m_widget, &FinishedPage::onInstallationFailed ); - connect( jq, &Calamares::JobQueue::failed, - this, &FinishedViewStep::onInstallationFailed ); + connect( jq, &Calamares::JobQueue::failed, m_config, &Config::onInstallationFailed ); + connect( jq, &Calamares::JobQueue::failed, m_widget, &FinishedPage::onInstallationFailed ); emit nextStatusChanged( true ); } @@ -68,7 +34,9 @@ FinishedViewStep::FinishedViewStep( QObject* parent ) FinishedViewStep::~FinishedViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } @@ -113,46 +81,12 @@ FinishedViewStep::isAtEnd() const return true; } -void -FinishedViewStep::sendNotification() -{ - // If the installation failed, don't send notification popup; - // there's a (modal) dialog popped up with the failure notice. - if ( installFailed ) - return; - - QDBusInterface notify( "org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications" ); - if ( notify.isValid() ) - { - QDBusReply r = notify.call( "Notify", - QString( "Calamares" ), - QVariant( 0U ), - QString( "calamares" ), - Calamares::Settings::instance()->isSetupMode() - ? tr( "Setup Complete" ) - : tr( "Installation Complete" ), - Calamares::Settings::instance()->isSetupMode() - ? tr( "The setup of %1 is complete." ).arg( *Calamares::Branding::VersionedName ) - : tr( "The installation of %1 is complete." ).arg( *Calamares::Branding::VersionedName ), - QStringList(), - QVariantMap(), - QVariant( 0 ) - ); - if ( !r.isValid() ) - cWarning() << "Could not call org.freedesktop.Notifications.Notify at end of installation." << r.error(); - } - else - cWarning() << "Could not get dbus interface for notifications at end of installation." << notify.lastError(); -} - void FinishedViewStep::onActivate() { - m_widget->setUpRestart(); - - if ( m_notifyOnFinished ) - sendNotification(); + m_config->doNotify(); + connect( qApp, &QApplication::aboutToQuit, m_config, qOverload<>( &Config::doRestart ) ); } @@ -162,59 +96,10 @@ FinishedViewStep::jobs() const return Calamares::JobList(); } -void -FinishedViewStep::onInstallationFailed( const QString& message, const QString& details ) -{ - Q_UNUSED( message ) - Q_UNUSED( details ) - installFailed = true; -} - void FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - RestartMode mode = RestartMode::Never; - - QString restartMode = CalamaresUtils::getString( configurationMap, "restartNowMode" ); - if ( restartMode.isEmpty() ) - { - if ( configurationMap.contains( "restartNowEnabled" ) ) - cWarning() << "Configuring the finished module with deprecated restartNowEnabled settings"; - - bool restartNowEnabled = CalamaresUtils::getBool( configurationMap, "restartNowEnabled", false ); - bool restartNowChecked = CalamaresUtils::getBool( configurationMap, "restartNowChecked", false ); - - if ( !restartNowEnabled ) - mode = RestartMode::Never; - else - mode = restartNowChecked ? RestartMode::UserChecked : RestartMode::UserUnchecked; - } - else - { - bool ok = false; - mode = modeNames().find( restartMode, ok ); - if ( !ok ) - cWarning() << "Configuring the finished module with bad restartNowMode" << restartMode; - } - - m_widget->setRestart( mode ); - - if ( mode != RestartMode::Never ) - { - QString restartNowCommand = CalamaresUtils::getString( configurationMap, "restartNowCommand" ); - if ( restartNowCommand.isEmpty() ) - restartNowCommand = QStringLiteral( "shutdown -r now" ); - m_widget->setRestartNowCommand( restartNowCommand ); - } - - m_notifyOnFinished = CalamaresUtils::getBool( configurationMap, "notifyOnFinished", false ); + m_config->setConfigurationMap( configurationMap ); } -QString FinishedViewStep::modeName(FinishedViewStep::RestartMode m) -{ - bool ok = false; - return modeNames().find( m, ok ); // May be QString() -} - - -CALAMARES_PLUGIN_FACTORY_DEFINITION( FinishedViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( FinishedViewStepFactory, registerPlugin< FinishedViewStep >(); ) diff --git a/src/modules/finished/FinishedViewStep.h b/src/modules/finished/FinishedViewStep.h index 2df37e9b6..c0f64153d 100644 --- a/src/modules/finished/FinishedViewStep.h +++ b/src/modules/finished/FinishedViewStep.h @@ -1,32 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FINISHEDVIEWSTEP_H #define FINISHEDVIEWSTEP_H -#include - +#include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include "DllMacro.h" - +class Config; class FinishedPage; class PLUGINDLLEXPORT FinishedViewStep : public Calamares::ViewStep @@ -34,18 +23,8 @@ class PLUGINDLLEXPORT FinishedViewStep : public Calamares::ViewStep Q_OBJECT public: - enum class RestartMode - { - Never=0, ///< @brief Don't show button, just exit - UserUnchecked, ///< @brief Show button, starts unchecked - UserChecked, ///< @brief Show button, starts checked - Always ///< @brief Show button, can't change, checked - }; - /// @brief Returns the config-name of the given restart-mode @p m - static QString modeName( RestartMode m ); - explicit FinishedViewStep( QObject* parent = nullptr ); - virtual ~FinishedViewStep() override; + ~FinishedViewStep() override; QString prettyName() const override; @@ -63,20 +42,9 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; -public slots: - void onInstallationFailed( const QString& message, const QString& details ); - private: + Config* m_config; FinishedPage* m_widget; - - /** - * @brief At the end of installation (when this step is activated), - * send a desktop notification via DBus that the install is done. - */ - void sendNotification(); - - bool installFailed; - bool m_notifyOnFinished; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( FinishedViewStepFactory ) diff --git a/src/modules/finished/finished.conf b/src/modules/finished/finished.conf index 3b6dd9dd1..7abfb36f1 100644 --- a/src/modules/finished/finished.conf +++ b/src/modules/finished/finished.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the "finished" page, which is usually shown only at # the end of the installation (successful or not). --- diff --git a/src/modules/finished/finished.schema.yaml b/src/modules/finished/finished.schema.yaml new file mode 100644 index 000000000..380292d1b --- /dev/null +++ b/src/modules/finished/finished.schema.yaml @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/finished +additionalProperties: false +type: object +properties: + restartNowEnabled: { type: boolean, default: true } # TODO:3.3: remove + restartNowChecked: { type: boolean, default: false } # TODO:3.3: remove + restartNowCommand: { type: string } + restartNowMode: { type: string, enum: [ never, user-unchecked, user-checked, always ] } + notifyOnFinished: { type: boolean } diff --git a/src/modules/finishedq/CMakeLists.txt b/src/modules/finishedq/CMakeLists.txt new file mode 100644 index 000000000..facc2d691 --- /dev/null +++ b/src/modules/finishedq/CMakeLists.txt @@ -0,0 +1,31 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2021 Anke Boersma +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "finishedq (QML is not supported in this build)" ) + return() +endif() + +find_package( Qt5 ${QT_VERSION} CONFIG COMPONENTS DBus Network ) +if ( NOT TARGET Qt5::DBus OR NOT TARGET Qt5::Network ) + calamares_skip_module( "finishedq (missing DBus or Network)" ) + return() +endif() + +set( _finished ${CMAKE_CURRENT_SOURCE_DIR}/../finished ) +include_directories( ${_finished} ) + +calamares_add_plugin( finishedq + TYPE viewmodule + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + FinishedQmlViewStep.cpp + ${_finished}/Config.cpp + RESOURCES + finishedq.qrc + LINK_PRIVATE_LIBRARIES + Qt5::DBus + SHARED_LIB +) diff --git a/src/modules/finishedq/FinishedQmlViewStep.cpp b/src/modules/finishedq/FinishedQmlViewStep.cpp new file mode 100644 index 000000000..531d7380e --- /dev/null +++ b/src/modules/finishedq/FinishedQmlViewStep.cpp @@ -0,0 +1,92 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "FinishedQmlViewStep.h" + +#include "Config.h" + +#include "JobQueue.h" +#include + +CALAMARES_PLUGIN_FACTORY_DEFINITION( FinishedQmlViewStepFactory, registerPlugin< FinishedQmlViewStep >(); ) + +FinishedQmlViewStep::FinishedQmlViewStep( QObject* parent ) + : Calamares::QmlViewStep( parent ) + , m_config( new Config( this ) ) +{ + auto jq = Calamares::JobQueue::instance(); + connect( jq, &Calamares::JobQueue::failed, m_config, &Config::onInstallationFailed ); + + emit nextStatusChanged( true ); +} + +QString +FinishedQmlViewStep::prettyName() const +{ + return tr( "Finish" ); +} + +bool +FinishedQmlViewStep::isNextEnabled() const +{ + return false; +} + + +bool +FinishedQmlViewStep::isBackEnabled() const +{ + return false; +} + + +bool +FinishedQmlViewStep::isAtBeginning() const +{ + return true; +} + + +bool +FinishedQmlViewStep::isAtEnd() const +{ + return true; +} + + +void +FinishedQmlViewStep::onActivate() +{ + m_config->doNotify(); + connect( qApp, &QApplication::aboutToQuit, m_config, qOverload<>( &Config::doRestart ) ); + QmlViewStep::onActivate(); +} + + +Calamares::JobList +FinishedQmlViewStep::jobs() const +{ + return Calamares::JobList(); +} + +QObject* +FinishedQmlViewStep::getConfig() +{ + return m_config; +} + +void +FinishedQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_config->setConfigurationMap( configurationMap ); + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); +} diff --git a/src/modules/finishedq/FinishedQmlViewStep.h b/src/modules/finishedq/FinishedQmlViewStep.h new file mode 100644 index 000000000..7bcf0e67f --- /dev/null +++ b/src/modules/finishedq/FinishedQmlViewStep.h @@ -0,0 +1,57 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef FINISHEDQMLVIEWSTEP_H +#define FINISHEDQMLVIEWSTEP_H + +#include + +#include "Config.h" + +#include "DllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/QmlViewStep.h" + +#include + +class Config; + +class PLUGINDLLEXPORT FinishedQmlViewStep : public Calamares::QmlViewStep +{ + Q_OBJECT + +public: + explicit FinishedQmlViewStep( QObject* parent = nullptr ); + + QString prettyName() const override; + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + void onActivate() override; + + Calamares::JobList jobs() const override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + QObject* getConfig() override; + +private: + Config* m_config; + + bool m_installFailed; // Track if onInstallationFailed() was called +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( FinishedQmlViewStepFactory ) + +#endif diff --git a/src/modules/finishedq/finishedq.conf b/src/modules/finishedq/finishedq.conf new file mode 100644 index 000000000..ee226c356 --- /dev/null +++ b/src/modules/finishedq/finishedq.conf @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the "finishedq" page, which is usually shown only at +# the end of the installation (successful or not). +# +# See the documentation for the "finished" module for a full explanation +# of the configuration options; the description here applies primarily +# to the use that the QML makes of them. +--- +# Behavior of the "restart system now" button. +# +# The example QML for this module offers a "Restart Now" button, +# which the user can click on. It calls directly to the restart +# function. If the user closes the installer in some other way, +# (the "Done" button or close-window) a restart **might** happen: +# +# - never +# Do not restart (this will also block the "Restart Now" button, +# so it is not very useful) +# - user-unchecked +# Do not restart on other ways of closing the window. No checkbox +# is shown in the example QML, so there is no way for the user to +# express a choice -- except by clicking the "Restart Now" button. +# - user-checked +# Do restart on other ways of closing the window. This makes close +# and "Restart Now" do the same thing. No checkbox is shown by the QML, +# so the machine will **always** restart. +# - always +# Same as above. +# +# For the **specific** example QML included with this module, only +# *user-unchecked* really makes sense. +restartNowMode: user-unchecked +restartNowCommand: "systemctl -i reboot" +notifyOnFinished: false diff --git a/src/modules/finishedq/finishedq.qml b/src/modules/finishedq/finishedq.qml new file mode 100644 index 000000000..789ac4cfb --- /dev/null +++ b/src/modules/finishedq/finishedq.qml @@ -0,0 +1,101 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.3 + +Page { + + id: finished + + width: parent.width + height: parent.height + + header: Kirigami.Heading { + width: parent.width + height: 100 + id: header + Layout.fillWidth: true + horizontalAlignment: Qt.AlignHCenter + color: Kirigami.Theme.textColor + level: 1 + text: qsTr("Installation Completed") + + Text { + anchors.top: header.bottom + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + font.pointSize: 12 + text: qsTr("%1 has been installed on your computer.
+ You may now restart into your new system, or continue using the Live environment.").arg(Branding.string(Branding.ProductName)) + } + + Image { + source: "seedling.svg" + anchors.top: header.bottom + anchors.topMargin: 80 + anchors.horizontalCenter: parent.horizontalCenter + width: 64 + height: 64 + mipmap: true + } + } + + RowLayout { + Layout.alignment: Qt.AlignRight|Qt.AlignVCenter + anchors.centerIn: parent + spacing: 6 + + Button { + id: button + text: qsTr("Close Installer") + icon.name: "application-exit" + onClicked: { ViewManager.quit(); } + } + + Button { + text: qsTr("Restart System") + icon.name: "system-reboot" + onClicked: { config.doRestart(true); } + } + } + + Item { + + Layout.fillHeight: true + Layout.fillWidth: true + anchors.bottom: parent.bottom + anchors.bottomMargin : 100 + anchors.horizontalCenter: parent.horizontalCenter + + Text { + anchors.centerIn: parent + anchors.top: parent.top + horizontalAlignment: Text.AlignHCenter + text: qsTr("

A full log of the install is available as installation.log in the home directory of the Live user.
+ This log is copied to /var/log/installation.log of the target system.

") + } + } + + function onActivate() + { + } + + function onLeave() + { + } +} diff --git a/src/modules/finishedq/finishedq.qrc b/src/modules/finishedq/finishedq.qrc new file mode 100644 index 000000000..e0918eb7f --- /dev/null +++ b/src/modules/finishedq/finishedq.qrc @@ -0,0 +1,6 @@ + + + finishedq.qml + seedling.svg + + diff --git a/src/modules/finishedq/finishedq@mobile.qml b/src/modules/finishedq/finishedq@mobile.qml new file mode 100644 index 000000000..d1ed7d1b0 --- /dev/null +++ b/src/modules/finishedq/finishedq@mobile.qml @@ -0,0 +1,121 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * License-Filename: LICENSE + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.3 + +Page { + + id: finished + + width: parent.width + height: parent.height + + header: Kirigami.Heading { + width: parent.width + height: 100 + id: header + Layout.fillWidth: true + horizontalAlignment: Qt.AlignHCenter + color: Kirigami.Theme.textColor + level: 1 + text: qsTr("Installation Completed") + + Text { + anchors.top: header.bottom + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + font.pointSize: 12 + text: qsTr("%1 has been installed on your computer.
+ You may now restart your device.").arg(Branding.string(Branding.ProductName)) + } + + Image { + source: "seedling.svg" + anchors.top: header.bottom + anchors.topMargin: 80 + anchors.horizontalCenter: parent.horizontalCenter + width: 64 + height: 64 + mipmap: true + } + } + + RowLayout { + Layout.alignment: Qt.AlignRight|Qt.AlignVCenter + anchors.centerIn: parent + spacing: 6 + + Button { + id: button + text: qsTr("Close") + icon.name: "application-exit" + onClicked: { ViewManager.quit(); } + } + + Button { + text: qsTr("Restart") + icon.name: "system-reboot" + onClicked: { config.doRestart(true); } + } + } + + Item { + + Layout.fillHeight: true + Layout.fillWidth: true + anchors.bottom: parent.bottom + anchors.bottomMargin : 100 + anchors.horizontalCenter: parent.horizontalCenter + + ProgressBar { + id: autoRestartBar + value: 1.0 + anchors.horizontalCenter: parent.horizontalCenter + + } + + Timer { + id: autoRestartTimer + // This is in milliseconds and should be less than 1000 (because of logic in onTriggered) + interval: 100 + repeat: true + running: false + // Whenever the timer fires (1000 / interval times a second) count the progress bar down + // by 1%. When the bar is empty, try to restart normally; as a backup, when the bar + // is empty change settings and schedule it to quit 1000 milliseconds (1s) later. + onTriggered: { + autoRestartBar.value -= 0.01; + if (autoRestartBar.value <= 0.0) { + // First time through here, set the interval to 1000 so that the + // second time (1 second later) goes to quit(). + if ( interval > 999) { ViewManager.quit(); } + else { config.doRestart(true); running = false; interval = 1000; repeat = false; start(); } + } + } + } + } + + function onActivate() + { + autoRestartTimer.running = true + } + + function onLeave() + { + } +} diff --git a/src/modules/finishedq/seedling.svg b/src/modules/finishedq/seedling.svg new file mode 100644 index 000000000..8f3501b17 --- /dev/null +++ b/src/modules/finishedq/seedling.svg @@ -0,0 +1 @@ + diff --git a/src/modules/finishedq/seedling.svg.license b/src/modules/finishedq/seedling.svg.license new file mode 100644 index 000000000..0604e8da9 --- /dev/null +++ b/src/modules/finishedq/seedling.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2021 FontAwesome +SPDX-License-Identifier: CC-BY-4.0 diff --git a/src/modules/fsresizer/CMakeLists.txt b/src/modules/fsresizer/CMakeLists.txt index 6808f1bea..e721d7f6b 100644 --- a/src/modules/fsresizer/CMakeLists.txt +++ b/src/modules/fsresizer/CMakeLists.txt @@ -1,21 +1,17 @@ -find_package( KPMcore 3.3 ) +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( KF5Config CONFIG ) find_package( KF5I18n CONFIG ) find_package( KF5WidgetsAddons CONFIG ) -set( _partition_defs "" ) +include( KPMcoreHelper ) if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND ) include_directories( ${KPMCORE_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src/modules/partition ) - if( KPMcore_VERSION VERSION_GREATER_EQUAL "4.2" ) - list( APPEND _partition_defs WITH_KPMCORE42API WITH_KPMCORE4API ) # kpmcore 4.2 with new API - elseif( KPMcore_VERSION VERSION_GREATER_EQUAL "4.0" ) - list( APPEND _partition_defs WITH_KPMCORE4API ) # kpmcore 4 with new API - elseif( KPMcore_VERSION VERSION_GREATER "3.3.70" ) - message( FATAL_ERROR "KPMCore beta versions ${KPMcore_VERSION} are not supported" ) - endif() - # The PartitionIterator is a small class, and it's easiest -- but also a # gross hack -- to just compile it again from the partition module tree. calamares_add_plugin( fsresizer @@ -25,8 +21,7 @@ if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND ResizeFSJob.cpp LINK_PRIVATE_LIBRARIES kpmcore - calamares - COMPILE_DEFINITIONS ${_partition_defs} + COMPILE_DEFINITIONS ${KPMcore_API_DEFINITIONS} SHARED_LIB ) @@ -36,8 +31,8 @@ if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND Tests.cpp LIBRARIES calamares_job_fsresizer # From above - yamlcpp - DEFINITIONS ${_partition_defs} + yamlcpp::yamlcpp + DEFINITIONS ${KPMcore_API_DEFINITIONS} ) else() if ( NOT KPMcore_FOUND ) diff --git a/src/modules/fsresizer/ResizeFSJob.cpp b/src/modules/fsresizer/ResizeFSJob.cpp index 217f1315e..f972b9fa4 100644 --- a/src/modules/fsresizer/ResizeFSJob.cpp +++ b/src/modules/fsresizer/ResizeFSJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizeFSJob.h" @@ -26,7 +17,6 @@ #include "utils/Units.h" #include "utils/Variant.h" -#include #include #include @@ -46,9 +36,7 @@ ResizeFSJob::ResizeFSJob( QObject* parent ) } -ResizeFSJob::~ResizeFSJob() -{ -} +ResizeFSJob::~ResizeFSJob() {} QString @@ -62,7 +50,8 @@ ResizeFSJob::findPartition() { using DeviceList = QList< Device* >; #if defined( WITH_KPMCORE4API ) - DeviceList devices = m_kpmcore.backend()->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag(0) ); + DeviceList devices + = m_kpmcore.backend()->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag( 0 ) ); #else DeviceList devices = m_kpmcore.backend()->scanDevices( /* excludeReadOnly */ true ); #endif @@ -70,14 +59,17 @@ ResizeFSJob::findPartition() cDebug() << "ResizeFSJob found" << devices.count() << "devices."; for ( DeviceList::iterator dev_it = devices.begin(); dev_it != devices.end(); ++dev_it ) { - if ( ! ( *dev_it ) ) - continue; - cDebug() << "ResizeFSJob found" << ( *dev_it )->deviceNode(); - for ( auto part_it = PartitionIterator::begin( *dev_it ); part_it != PartitionIterator::end( *dev_it ); ++part_it ) + if ( !( *dev_it ) ) { - cDebug() << Logger::SubEntry << ( *part_it )->mountPoint() << "on" << ( *part_it )->deviceNode(); - if ( ( !m_fsname.isEmpty() && ( *part_it )->mountPoint() == m_fsname ) || - ( !m_devicename.isEmpty() && ( *part_it )->deviceNode() == m_devicename ) ) + continue; + } + cDebug() << "ResizeFSJob found" << ( *dev_it )->deviceNode(); + for ( auto part_it = PartitionIterator::begin( *dev_it ); part_it != PartitionIterator::end( *dev_it ); + ++part_it ) + { + cDebug() << Logger::SubEntry << ( *part_it )->mountPoint() << "on" << ( *part_it )->deviceNode(); + if ( ( !m_fsname.isEmpty() && ( *part_it )->mountPoint() == m_fsname ) + || ( !m_devicename.isEmpty() && ( *part_it )->deviceNode() == m_devicename ) ) { cDebug() << Logger::SubEntry << "matched configuration dev=" << m_devicename << "fs=" << m_fsname; return PartitionMatch( *dev_it, *part_it ); @@ -101,11 +93,17 @@ qint64 ResizeFSJob::findGrownEnd( ResizeFSJob::PartitionMatch m ) { if ( !m.first || !m.second ) + { return -1; // Missing device data + } if ( !ResizeOperation::canGrow( m.second ) ) + { return -1; // Operation is doomed + } if ( !m_size.isValid() ) + { return -1; // Must have a grow-size + } cDebug() << "Containing device size" << m.first->totalLogical(); qint64 last_available = m.first->totalLogical() - 1; // Numbered from 0 @@ -170,12 +168,11 @@ ResizeFSJob::exec() tr( "Invalid configuration" ), tr( "The file-system resize job has an invalid configuration and will not run." ) ); - if ( !m_kpmcore) + if ( !m_kpmcore ) { cWarning() << "Could not load KPMCore backend (2)."; - return Calamares::JobResult::error( - tr( "KPMCore not Available" ), - tr( "Calamares cannot start KPMCore for the file-system resize job." ) ); + return Calamares::JobResult::error( tr( "KPMCore not Available" ), + tr( "Calamares cannot start KPMCore for the file-system resize job." ) ); } m_kpmcore.backend()->initFSSupport(); // Might not be enough, see below @@ -184,34 +181,32 @@ ResizeFSJob::exec() if ( !m.first || !m.second ) return Calamares::JobResult::error( tr( "Resize Failed" ), - !m_fsname.isEmpty() ? tr( "The filesystem %1 could not be found in this system, and cannot be resized." ).arg( m_fsname ) - : tr( "The device %1 could not be found in this system, and cannot be resized." ).arg( m_devicename ) ); + !m_fsname.isEmpty() + ? tr( "The filesystem %1 could not be found in this system, and cannot be resized." ).arg( m_fsname ) + : tr( "The device %1 could not be found in this system, and cannot be resized." ).arg( m_devicename ) ); m.second->fileSystem().init(); // Initialize support for specific FS if ( !ResizeOperation::canGrow( m.second ) ) { cDebug() << "canGrow() returned false."; - return Calamares::JobResult::error( - tr( "Resize Failed" ), - !m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) - : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); + return Calamares::JobResult::error( tr( "Resize Failed" ), + !m_fsname.isEmpty() + ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) + : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); } qint64 new_end = findGrownEnd( m ); - cDebug() << "Resize from" - << m.second->firstSector() << '-' << m.second->lastSector() - << '(' << m.second->length() << ')' - << "to -" << new_end; + cDebug() << "Resize from" << m.second->firstSector() << '-' << m.second->lastSector() << '(' << m.second->length() + << ')' << "to -" << new_end; if ( new_end < 0 ) - return Calamares::JobResult::error( - tr( "Resize Failed" ), - !m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) - : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); + return Calamares::JobResult::error( tr( "Resize Failed" ), + !m_fsname.isEmpty() + ? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname ) + : tr( "The device %1 cannot be resized." ).arg( m_devicename ) ); if ( new_end == 0 ) { - cWarning() << "Resize operation on" << m_fsname << m_devicename - << "skipped as not-useful."; + cWarning() << "Resize operation on" << m_fsname << m_devicename << "skipped as not-useful."; if ( m_required ) return Calamares::JobResult::error( tr( "Resize Failed" ), @@ -226,13 +221,13 @@ ResizeFSJob::exec() ResizeOperation op( *m.first, *m.second, m.second->firstSector(), new_end ); Report op_report( nullptr ); if ( op.execute( op_report ) ) + { cDebug() << "Resize operation OK."; + } else { cDebug() << "Resize failed." << op_report.output(); - return Calamares::JobResult::error( - tr( "Resize Failed" ), - op_report.toText() ); + return Calamares::JobResult::error( tr( "Resize Failed" ), op_report.toText() ); } } @@ -243,8 +238,8 @@ ResizeFSJob::exec() void ResizeFSJob::setConfigurationMap( const QVariantMap& configurationMap ) { - m_fsname = configurationMap["fs"].toString(); - m_devicename = configurationMap["dev"].toString(); + m_fsname = configurationMap[ "fs" ].toString(); + m_devicename = configurationMap[ "dev" ].toString(); if ( m_fsname.isEmpty() && m_devicename.isEmpty() ) { @@ -252,10 +247,10 @@ ResizeFSJob::setConfigurationMap( const QVariantMap& configurationMap ) return; } - m_size = PartitionSize( configurationMap["size"].toString() ); - m_atleast = PartitionSize( configurationMap["atleast"].toString() ); + m_size = PartitionSize( configurationMap[ "size" ].toString() ); + m_atleast = PartitionSize( configurationMap[ "atleast" ].toString() ); m_required = CalamaresUtils::getBool( configurationMap, "required", false ); } -CALAMARES_PLUGIN_FACTORY_DEFINITION( ResizeFSJobFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( ResizeFSJobFactory, registerPlugin< ResizeFSJob >(); ) diff --git a/src/modules/fsresizer/ResizeFSJob.h b/src/modules/fsresizer/ResizeFSJob.h index f7ff676cd..52c4692e6 100644 --- a/src/modules/fsresizer/ResizeFSJob.h +++ b/src/modules/fsresizer/ResizeFSJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEFSJOB_H @@ -42,7 +33,7 @@ class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob public: explicit ResizeFSJob( QObject* parent = nullptr ); - virtual ~ResizeFSJob() override; + ~ResizeFSJob() override; QString prettyName() const override; @@ -51,26 +42,13 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Is the configuration of this job valid? */ - bool isValid() const - { - return ( !m_fsname.isEmpty() || !m_devicename.isEmpty() ) && - m_size.isValid(); - } + bool isValid() const { return ( !m_fsname.isEmpty() || !m_devicename.isEmpty() ) && m_size.isValid(); } - QString name() const - { - return m_fsname.isEmpty() ? m_devicename : m_fsname; - } + QString name() const { return m_fsname.isEmpty() ? m_devicename : m_fsname; } - PartitionSize size() const - { - return m_size; - } + PartitionSize size() const { return m_size; } - PartitionSize minimumSize() const - { - return m_atleast; - } + PartitionSize minimumSize() const { return m_atleast; } private: CalamaresUtils::Partition::KPMManager m_kpmcore; @@ -80,7 +58,7 @@ private: QString m_devicename; bool m_required; - using PartitionMatch = QPair; + using PartitionMatch = QPair< Device*, Partition* >; /** @brief Find the configured FS */ PartitionMatch findPartition(); @@ -90,4 +68,4 @@ private: CALAMARES_PLUGIN_FACTORY_DECLARATION( ResizeFSJobFactory ) -#endif // RESIZEFSJOB_H +#endif // RESIZEFSJOB_H diff --git a/src/modules/fsresizer/Tests.cpp b/src/modules/fsresizer/Tests.cpp index 42d587631..7cd60ee9e 100644 --- a/src/modules/fsresizer/Tests.cpp +++ b/src/modules/fsresizer/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" @@ -36,20 +27,17 @@ using SizeUnit = CalamaresUtils::Partition::SizeUnit; QTEST_GUILESS_MAIN( FSResizerTests ) -FSResizerTests::FSResizerTests() -{ -} +FSResizerTests::FSResizerTests() {} -FSResizerTests::~FSResizerTests() -{ -} +FSResizerTests::~FSResizerTests() {} void FSResizerTests::initTestCase() { } -void FSResizerTests::testConfigurationRobust() +void +FSResizerTests::testConfigurationRobust() { ResizeFSJob j; @@ -72,7 +60,8 @@ atleast: 600MiB QCOMPARE( j.minimumSize().value(), 0 ); } -void FSResizerTests::testConfigurationValues() +void +FSResizerTests::testConfigurationValues() { ResizeFSJob j; @@ -84,7 +73,7 @@ atleast: 600MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/") ); + QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::Percent ); QCOMPARE( j.minimumSize().unit(), SizeUnit::MiB ); QCOMPARE( j.size().value(), 100 ); @@ -99,7 +88,7 @@ atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/") ); + QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); @@ -113,7 +102,7 @@ atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/dev/m00") ); + QCOMPARE( j.name(), QString( "/dev/m00" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); @@ -128,7 +117,7 @@ size: 71MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); - QCOMPARE( j.name(), QString("/") ); + QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 71 ); diff --git a/src/modules/fsresizer/Tests.h b/src/modules/fsresizer/Tests.h index 958c0e655..f3d2308ec 100644 --- a/src/modules/fsresizer/Tests.h +++ b/src/modules/fsresizer/Tests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/fsresizer/fsresizer.conf b/src/modules/fsresizer/fsresizer.conf index 33329248d..e58c39822 100644 --- a/src/modules/fsresizer/fsresizer.conf +++ b/src/modules/fsresizer/fsresizer.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Module that resizes a single FS to fill the entire (rest) of # a device. This is used in OEM situations where an image is # flashed onto an SD card (or similar) and used to boot a device, diff --git a/src/modules/fstab/fstab.conf b/src/modules/fstab/fstab.conf index 7724fd841..560aa0073 100644 --- a/src/modules/fstab/fstab.conf +++ b/src/modules/fstab/fstab.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Creates /etc/fstab and /etc/crypttab in the target system. # Also creates mount points for all the filesystems. # @@ -8,9 +11,23 @@ # Mount options to use for all filesystems. If a specific filesystem # is listed here, use those options, otherwise use the *default* # options from this mapping. +# +# With kernels 5.15 and newer be cautious of adding the option space_cache +# to the btrfs mount options. The default in 5.15 changed to space_cache=v2. +# If space_cache or space_cache=v1 are specified, it may fail to remount. +# +# btrfs_swap options are used when a swapfile is chosen with a btrfs root +# the options are applied to the subvolume which holds the swap partition +# +# The settings shown here apply only the btrfs defaults; these +# are generally the right ones. Commented-out lines show other +# options wich **might** be applicable for specific situations. mountOptions: default: defaults,noatime - btrfs: defaults,noatime,space_cache + # btrfs: defaults,noatime,autodefrag,compress=zstd + btrfs: defaults + # btrfs_swap: defaults,noatime + btrfs_swap: defaults # Mount options to use for the EFI System Partition. If not defined, the # *mountOptions* for *vfat* are used, or if that is not set either, @@ -20,12 +37,25 @@ efiMountOptions: umask=0077 # If a filesystem is on an SSD, add the following options. If a specific # filesystem is listed here, use those options, otherwise no additional # options are set (i.e. there is no *default* like in *mountOptions*). +# +# This example configuration applies the *discard* option to most +# common filesystems on an SSD. This may not be the right option +# for your distribution. If you use a systemd timer to trim the +# SSD, it may interfere with the *discard* option. Opinions vary +# as to whether *discard* is worth the effort -- it depends on +# the usage pattern of the disk as well. +# +# ssdExtraMountOptions: +# ext4: discard +# jfs: discard +# xfs: discard +# swap: discard +# btrfs: discard,compress=lzo +# +# The standard configuration applies asynchronous discard support and ssd optimizations to btrfs +# and does nothing for other filesystems. ssdExtraMountOptions: - ext4: discard - jfs: discard - xfs: discard - swap: discard - btrfs: ssd,compress=zstd,commit=120 + btrfs: discard=async,ssd # Additional options added to each line in /etc/crypttab crypttabOptions: luks diff --git a/src/modules/fstab/fstab.schema.yaml b/src/modules/fstab/fstab.schema.yaml new file mode 100644 index 000000000..087e82cac --- /dev/null +++ b/src/modules/fstab/fstab.schema.yaml @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/fstab +additionalProperties: false +type: object +properties: + mountOptions: + type: object + additionalProperties: true # we don't know which FS exist + properties: + default: { type: string } + btrfs: { type: string } + required: [ default ] + ssdExtraMountOptions: + type: object + additionalProperties: true # we don't know which FS exist + properties: + ext4: { type: string } + jfs: { type: string } + xfs: { type: string } + swap: { type: string } + btrfs: { type: string } + btrfs_swap: { type: string } + efiMountOptions: { type: string } + crypttabOptions: { type: string } +required: [ mountOptions ] diff --git a/src/modules/fstab/main.py b/src/modules/fstab/main.py old mode 100644 new mode 100755 index c58e8eb11..95f10a643 --- a/src/modules/fstab/main.py +++ b/src/modules/fstab/main.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2016, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import re @@ -53,7 +44,7 @@ CRYPTTAB_HEADER = """# /etc/crypttab: mappings for encrypted partitions. # # See crypttab(5) for the supported syntax. # -# NOTE: Do not list your root (/) partition here, it must be set up +# NOTE: You need not list your root (/) partition here, but it must be set up # beforehand by the initramfs (/etc/mkinitcpio.conf). The same applies # to encrypted swap, which should be set up with mkinitcpio-openswap # for resume support. @@ -101,7 +92,8 @@ def disk_name_for_partition(partition): """ name = os.path.basename(partition["device"]) - if name.startswith("/dev/mmcblk") or name.startswith("/dev/nvme"): + if name.startswith("mmcblk") or name.startswith("nvme"): + # Typical mmc device is mmcblk0p1, nvme looks like nvme0n1p2 return re.sub("p[0-9]+$", "", name) return re.sub("[0-9]+$", "", name) @@ -166,11 +158,28 @@ class FstabGenerator(object): if not mapper_name or not luks_uuid: return None + password = "/crypto_keyfile.bin" + crypttab_options = self.crypttab_options + + # Set crypttab password for partition to none and remove crypttab options + # if crypto_keyfile.bin was not generated + if not os.path.exists(os.path.join(self.root_mount_point, "crypto_keyfile.bin")): + password = "none" + crypttab_options = "" + # on root partition when /boot is unencrypted + elif partition["mountPoint"] == "/": + if any([p["mountPoint"] == "/boot" + and "luksMapperName" not in p + for p in self.partitions]): + password = "none" + crypttab_options = "" + + return dict( name=mapper_name, device="UUID=" + luks_uuid, - password="/crypto_keyfile.bin", - options=self.crypttab_options, + password=password, + options=crypttab_options, ) def print_crypttab_line(self, dct, file=None): @@ -192,31 +201,20 @@ class FstabGenerator(object): print(FSTAB_HEADER, file=fstab_file) for partition in self.partitions: - # Special treatment for a btrfs root with @ and @home - # subvolumes + # Special treatment for a btrfs subvolumes if (partition["fs"] == "btrfs" and partition["mountPoint"] == "/"): - output = subprocess.check_output(['btrfs', - 'subvolume', - 'list', - self.root_mount_point]) - output_lines = output.splitlines() - for line in output_lines: - if line.endswith(b'path @'): - root_entry = partition - root_entry["subvol"] = "@" - dct = self.generate_fstab_line_info(root_entry) - if dct: + # Subvolume list has been created in mount.conf and curated in mount module, + # so all subvolumes here should be safe to add to fstab + btrfs_subvolumes = libcalamares.globalstorage.value("btrfsSubvolumes") + for s in btrfs_subvolumes: + mount_entry = partition + mount_entry["mountPoint"] = s["mountPoint"] + mount_entry["subvol"] = s["subvolume"] + dct = self.generate_fstab_line_info(mount_entry) + if dct: self.print_fstab_line(dct, file=fstab_file) - elif line.endswith(b'path @home'): - home_entry = partition - home_entry["mountPoint"] = "/home" - home_entry["subvol"] = "@home" - dct = self.generate_fstab_line_info(home_entry) - if dct: - self.print_fstab_line(dct, file=fstab_file) - - else: + elif partition["fs"] != "zfs": # zfs partitions don't need an entry in fstab dct = self.generate_fstab_line_info(partition) if dct: self.print_fstab_line(dct, file=fstab_file) @@ -239,7 +237,7 @@ class FstabGenerator(object): # Some "fs" names need special handling in /etc/fstab, so remap them. filesystem = partition["fs"].lower() filesystem = FS_MAP.get(filesystem, filesystem) - has_luks = "luksMapperName" in partition + luks_mapper_name = partition.get("luksMapperName", None) mount_point = partition["mountPoint"] disk_name = disk_name_for_partition(partition) is_ssd = disk_name in self.ssd_disks @@ -256,7 +254,11 @@ class FstabGenerator(object): libcalamares.utils.debug("Ignoring foreign swap {!s} {!s}".format(disk_name, partition.get("uuid", None))) return None - options = self.get_mount_options(filesystem, mount_point) + # If this is btrfs subvol a dedicated to a swapfile, use different options than a normal btrfs subvol + if filesystem == "btrfs" and partition.get("subvol", None) == "/@swap": + options = self.get_mount_options("btrfs_swap", mount_point) + else: + options = self.get_mount_options(filesystem, mount_point) if is_ssd: extra = self.ssd_extra_mount_options.get(filesystem) @@ -264,9 +266,9 @@ class FstabGenerator(object): if extra: options += "," + extra - if mount_point == "/": + if mount_point == "/" and filesystem != "btrfs": check = 1 - elif mount_point: + elif mount_point and mount_point != "swap" and filesystem != "btrfs": check = 2 else: check = 0 @@ -274,13 +276,22 @@ class FstabGenerator(object): if mount_point == "/": self.root_is_ssd = is_ssd - if filesystem == "btrfs" and "subvol" in partition: + # If there's a set-and-not-empty subvolume set, add it + if filesystem == "btrfs" and partition.get("subvol",None): options = "subvol={},".format(partition["subvol"]) + options - if has_luks: - device = "/dev/mapper/" + partition["luksMapperName"] - else: + device = None + if luks_mapper_name: + device = "/dev/mapper/" + luks_mapper_name + elif partition["uuid"]: device = "UUID=" + partition["uuid"] + else: + device = partition["device"] + + if not device: + # TODO: we get here when the user mounted a previously encrypted partition + # This should be catched early in the process + return None return dict(device=device, mount_point=mount_point, @@ -316,6 +327,47 @@ class FstabGenerator(object): self.mount_options["default"]) +def create_swapfile(root_mount_point, root_btrfs): + """ + Creates /swapfile in @p root_mount_point ; if the root filesystem + is on btrfs, then handle some btrfs specific features as well, + as documented in + https://wiki.archlinux.org/index.php/Swap#Swap_file + + The swapfile-creation covers progress from 0.2 to 0.5 + """ + libcalamares.job.setprogress(0.2) + if root_btrfs: + # btrfs swapfiles must reside on a subvolume that is not snapshotted to prevent file system corruption + swapfile_path = os.path.join(root_mount_point, "swap/swapfile") + with open(swapfile_path, "wb") as f: + pass + o = subprocess.check_output(["chattr", "+C", swapfile_path]) + libcalamares.utils.debug("swapfile attributes: {!s}".format(o)) + o = subprocess.check_output(["btrfs", "property", "set", swapfile_path, "compression", "none"]) + libcalamares.utils.debug("swapfile compression: {!s}".format(o)) + else: + swapfile_path = os.path.join(root_mount_point, "swapfile") + with open(swapfile_path, "wb") as f: + pass + # Create the swapfile; swapfiles are small-ish + zeroes = bytes(16384) + with open(swapfile_path, "wb") as f: + total = 0 + desired_size = 512 * 1024 * 1024 # 512MiB + while total < desired_size: + chunk = f.write(zeroes) + if chunk < 1: + libcalamares.utils.debug("Short write on {!s}, cancelling.".format(swapfile_path)) + break + libcalamares.job.setprogress(0.2 + 0.3 * ( total / desired_size ) ) + total += chunk + os.chmod(swapfile_path, 0o600) + o = subprocess.check_output(["mkswap", swapfile_path]) + libcalamares.utils.debug("swapfile mkswap: {!s}".format(o)) + libcalamares.job.setprogress(0.5) + + def run(): """ Configures fstab. @@ -339,13 +391,47 @@ def run(): _("No root mount point is given for
{!s}
to use.") .format("fstab")) - mount_options = conf["mountOptions"] + # This follows the GS settings from the partition module's Config object + swap_choice = global_storage.value( "partitionChoices" ) + if swap_choice: + swap_choice = swap_choice.get( "swap", None ) + if swap_choice and swap_choice == "file": + # There's no formatted partition for it, so we'll sneak in an entry + root_partitions = [ p["fs"].lower() for p in partitions if p["mountPoint"] == "/" ] + root_btrfs = (root_partitions[0] == "btrfs") if root_partitions else False + if root_btrfs: + partitions.append( dict(fs="swap", mountPoint=None, claimed=True, device="/swap/swapfile", uuid=None) ) + else: + partitions.append( dict(fs="swap", mountPoint=None, claimed=True, device="/swapfile", uuid=None) ) + else: + swap_choice = None + + libcalamares.job.setprogress(0.1) + mount_options = conf.get("mountOptions", {}) ssd_extra_mount_options = conf.get("ssdExtraMountOptions", {}) crypttab_options = conf.get("crypttabOptions", "luks") + + # We rely on mount_options having a default; if there wasn't one, + # bail out with a meaningful error. + if not mount_options: + return (_("Configuration Error"), + _("No
{!s}
configuration is given for
{!s}
to use.") + .format("mountOptions", "fstab")) + generator = FstabGenerator(partitions, root_mount_point, mount_options, ssd_extra_mount_options, crypttab_options) - return generator.run() + if swap_choice is not None: + libcalamares.job.setprogress(0.2) + root_partitions = [ p["fs"].lower() for p in partitions if p["mountPoint"] == "/" ] + root_btrfs = (root_partitions[0] == "btrfs") if root_partitions else False + create_swapfile(root_mount_point, root_btrfs) + + try: + libcalamares.job.setprogress(0.5) + return generator.run() + finally: + libcalamares.job.setprogress(1.0) diff --git a/src/modules/fstab/module.desc b/src/modules/fstab/module.desc index bbd416606..77cb7adbc 100644 --- a/src/modules/fstab/module.desc +++ b/src/modules/fstab/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "fstab" diff --git a/src/modules/fstab/test.yaml b/src/modules/fstab/test.yaml index e95b52e5d..cd2034571 100644 --- a/src/modules/fstab/test.yaml +++ b/src/modules/fstab/test.yaml @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount partitions: - device: /dev/sda1 diff --git a/src/modules/fstab/test2.yaml b/src/modules/fstab/test2.yaml new file mode 100644 index 000000000..0e91bf649 --- /dev/null +++ b/src/modules/fstab/test2.yaml @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# This test shows how btrfs root would work +rootMountPoint: /tmp/mount +partitions: + - device: /dev/sda1 + fs: btrfs + mountPoint: / + uuid: 2a00f1d5-1217-49a7-bedd-b55c85764732 + - device: /dev/sda2 + fs: swap + uuid: 59406569-446f-4730-a874-9f6b4b44fee3 + mountPoint: + - device: /dev/sdb1 + fs: btrfs + mountPoint: /home + uuid: 59406569-abcd-1234-a874-9f6b4b44fee3 +btrfsSubvolumes: + - mountPoint: / + subvolume: "@ROOT" + - mountPoint: /var + subvolume: "@var" + - mountPoint: /usr/local + subvolume: "@local" diff --git a/src/modules/globalStorage.yaml b/src/modules/globalStorage.yaml deleted file mode 100644 index 1187fe93a..000000000 --- a/src/modules/globalStorage.yaml +++ /dev/null @@ -1,18 +0,0 @@ ---- -syntax: "YAML map of anything" -example: - whats_this: "fake global storage contents" - from_where: "globalStorage.yaml" -a_list: - - "item1" - - "item2" - - "item3" - - "item4" -a_list_of_maps: - - name: "an Item" - contents: - - "an element" - - "another element" - - name: "another item" - contents: - - "not much" diff --git a/src/modules/grubcfg/grubcfg.conf b/src/modules/grubcfg/grubcfg.conf index ba31d6070..afc5e89b8 100644 --- a/src/modules/grubcfg/grubcfg.conf +++ b/src/modules/grubcfg/grubcfg.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Create, overwrite or update /etc/default/grub in the target system. # # Write lines to /etc/default/grub (in the target system) based @@ -17,12 +20,25 @@ # already existed. If set to false, edits the existing file instead. overwrite: false +# If set to true, prefer to write files in /etc/default/grub.d/ +# rather than the single file /etc/default/grub. If this is set, +# Calamares will write /etc/default/grub.d/00Calamares instead. +prefer_grub_d: false + # If set to true, an **existing** setting for GRUB_DISTRIBUTOR is # kept, not updated to the *bootloaderEntryName* from the branding file. # Use this if the GRUB_DISTRIBUTOR setting in the file is "smart" in # some way (e.g. uses shell-command substitution). +# +# TODO:3.3:snake-case this key keepDistributor: false +# The default kernel params that should always be applied. +# This is an array of strings. If it is unset, the default is +# `["quiet"]`. To avoid the default, explicitly set this key +# to an empty list, `[]`. +kernel_params: [ "quiet" ] + # Default entries to write to /etc/default/grub if it does not exist yet or if # we are overwriting it. # diff --git a/src/modules/grubcfg/grubcfg.schema.yaml b/src/modules/grubcfg/grubcfg.schema.yaml new file mode 100644 index 000000000..35d63c063 --- /dev/null +++ b/src/modules/grubcfg/grubcfg.schema.yaml @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/grubcfg +additionalProperties: false +type: object +properties: + overwrite: { type: boolean, default: false } + # TODO:3.3:snake-case this key + keepDistributor: { type: boolean, default: false } + prefer_grub_d: { type: boolean, default: false } + kernel_params: { type: array, items: { type: string } } + defaults: + type: object + additionalProperties: true # Other fields are acceptable + properties: + GRUB_TIMEOUT: { type: integer } + GRUB_DEFAULT: { type: string } + GRUB_DISABLE_SUBMENU: { type: boolean, default: true } + GRUB_TERMINAL_OUTPUT: { type: string } + GRUB_DISABLE_RECOVERY: { type: boolean, default: true } + required: [ GRUB_TIMEOUT, GRUB_DEFAULT, GRUB_TERMINAL_OUTPUT ] diff --git a/src/modules/grubcfg/main.py b/src/modules/grubcfg/main.py index 040e823f0..bddb0b8ef 100644 --- a/src/modules/grubcfg/main.py +++ b/src/modules/grubcfg/main.py @@ -1,26 +1,17 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014-2019, Philip Müller -# Copyright 2015-2017, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017, 2019, Adriaan de Groot -# Copyright 2017-2018, Gabriel Craciunescu +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2015-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2017-2018 Gabriel Craciunescu +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares import os @@ -37,6 +28,59 @@ def pretty_name(): return _("Configure GRUB.") +def get_grub_config_path(root_mount_point): + """ + Figures out where to put the grub config files. Returns + a the full path of a file inside that + directory, as "the config file". + + Returns a path into @p root_mount_point. + """ + default_dir = os.path.join(root_mount_point, "etc/default") + default_config_file = "grub" + + if "prefer_grub_d" in libcalamares.job.configuration and libcalamares.job.configuration["prefer_grub_d"]: + possible_dir = os.path.join(root_mount_point, "etc/default/grub.d") + if os.path.exists(possible_dir) and os.path.isdir(possible_dir): + default_dir = possible_dir + default_config_file = "00calamares" + + if not os.path.exists(default_dir): + try: + os.mkdir(default_dir) + except: + libcalamares.utils.debug("Failed to create '%r'" % default_dir) + raise + + return os.path.join(default_dir, default_config_file) + + +def get_zfs_root(): + """ + Looks in global storage to find the zfs root + + :return: A string containing the path to the zfs root or None if it is not found + """ + + zfs = libcalamares.globalstorage.value("zfsDatasets") + + if not zfs: + libcalamares.utils.warning("Failed to locate zfs dataset list") + return None + + # Find the root dataset + for dataset in zfs: + try: + if dataset["mountpoint"] == "/": + return dataset["zpool"] + "/" + dataset["dsName"] + except KeyError: + # This should be impossible + libcalamares.utils.warning("Internal error handling zfs dataset") + raise + + return None + + def modify_grub_default(partitions, root_mount_point, distributor): """ Configures '/etc/default/grub' for hibernation and plymouth. @@ -54,8 +98,7 @@ def modify_grub_default(partitions, root_mount_point, distributor): is always updated to set this value. :return: """ - default_dir = os.path.join(root_mount_point, "etc/default") - default_grub = os.path.join(default_dir, "grub") + default_grub = get_grub_config_path(root_mount_point) distributor_replace = distributor.replace("'", "'\\''") dracut_bin = libcalamares.utils.target_env_call( ["sh", "-c", "which dracut"] @@ -75,6 +118,9 @@ def modify_grub_default(partitions, root_mount_point, distributor): swap_outer_uuid = "" swap_outer_mappername = None no_save_default = False + unencrypted_separate_boot = any(p["mountPoint"] == "/boot" and "luksMapperName" not in p for p in partitions) + # If there is no dracut, and the root partition is ZFS, this gets set below + zfs_root_path = None for partition in partitions: if partition["mountPoint"] in ("/", "/boot") and partition["fs"] in ("btrfs", "f2fs"): @@ -125,7 +171,14 @@ def modify_grub_default(partitions, root_mount_point, distributor): ) ] - kernel_params = ["quiet"] + if partition["fs"] == "zfs" and partition["mountPoint"] == "/": + zfs_root_path = get_zfs_root() + + kernel_params = libcalamares.job.configuration.get("kernel_params", ["quiet"]) + + # Currently, grub doesn't detect this properly so it must be set manually + if zfs_root_path: + kernel_params.insert(0, "zfs=" + zfs_root_path) if cryptdevice_params: kernel_params.extend(cryptdevice_params) @@ -149,9 +202,6 @@ def modify_grub_default(partitions, root_mount_point, distributor): distributor_line = "GRUB_DISTRIBUTOR='{!s}'".format(distributor_replace) - if not os.path.exists(default_dir): - os.mkdir(default_dir) - have_kernel_cmd = False have_distributor_line = False @@ -232,7 +282,7 @@ def modify_grub_default(partitions, root_mount_point, distributor): if not have_distributor_line: lines.append(distributor_line) - if cryptdevice_params: + if cryptdevice_params and not unencrypted_separate_boot: lines.append("GRUB_ENABLE_CRYPTODISK=y") with open(default_grub, 'w') as grub_file: diff --git a/src/modules/grubcfg/module.desc b/src/modules/grubcfg/module.desc index 34f1a5a1e..293e75ba7 100644 --- a/src/modules/grubcfg/module.desc +++ b/src/modules/grubcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "grubcfg" diff --git a/src/modules/grubcfg/tests/1.global b/src/modules/grubcfg/tests/1.global index 02ae840cb..7dedc1527 100644 --- a/src/modules/grubcfg/tests/1.global +++ b/src/modules/grubcfg/tests/1.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true diff --git a/src/modules/grubcfg/tests/2.global b/src/modules/grubcfg/tests/2.global index 83e79db28..31c6f1166 100644 --- a/src/modules/grubcfg/tests/2.global +++ b/src/modules/grubcfg/tests/2.global @@ -1,8 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true firmwareType: bios bootLoader: grub -rootMountPoint: /tmp/calamares +rootMountPoint: /tmp/calamares/grubcfg-test-2 branding: bootloaderEntryName: generic diff --git a/src/modules/grubcfg/tests/2.job b/src/modules/grubcfg/tests/2.job index d7b8db9d1..92e598394 100644 --- a/src/modules/grubcfg/tests/2.job +++ b/src/modules/grubcfg/tests/2.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- overwrite: true keepDistributor: false diff --git a/src/modules/grubcfg/tests/3.global b/src/modules/grubcfg/tests/3.global new file mode 100644 index 000000000..f9e1e6954 --- /dev/null +++ b/src/modules/grubcfg/tests/3.global @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +bogus: true +firmwareType: bios +bootLoader: grub +rootMountPoint: /tmp/calamares/grubcfg-test-3 + +branding: + bootloaderEntryName: generic +partitions: [] + diff --git a/src/modules/grubcfg/tests/3.job b/src/modules/grubcfg/tests/3.job new file mode 100644 index 000000000..7d579839c --- /dev/null +++ b/src/modules/grubcfg/tests/3.job @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +overwrite: true +prefer_grub_d: true # But it doesn't exist +keepDistributor: false +defaults: + GRUB_TIMEOUT: 5 + GRUB_DEFAULT: "saved" + GRUB_DISABLE_SUBMENU: true + GRUB_TERMINAL_OUTPUT: "console" + GRUB_DISABLE_RECOVERY: true diff --git a/src/modules/grubcfg/tests/4.global b/src/modules/grubcfg/tests/4.global new file mode 100644 index 000000000..1e8d37fc6 --- /dev/null +++ b/src/modules/grubcfg/tests/4.global @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +bogus: true +firmwareType: bios +bootLoader: grub +rootMountPoint: /tmp/calamares/grubcfg-test-4 + +branding: + bootloaderEntryName: generic +partitions: [] + diff --git a/src/modules/grubcfg/tests/4.job b/src/modules/grubcfg/tests/4.job new file mode 100644 index 000000000..58fd8bcb7 --- /dev/null +++ b/src/modules/grubcfg/tests/4.job @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +overwrite: true +prefer_grub_d: true +keepDistributor: false +defaults: + GRUB_TIMEOUT: 5 + GRUB_DEFAULT: "saved" + GRUB_DISABLE_SUBMENU: true + GRUB_TERMINAL_OUTPUT: "console" + GRUB_DISABLE_RECOVERY: true diff --git a/src/modules/grubcfg/tests/CMakeTests.txt b/src/modules/grubcfg/tests/CMakeTests.txt new file mode 100644 index 000000000..54a0721e4 --- /dev/null +++ b/src/modules/grubcfg/tests/CMakeTests.txt @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Special cases for grubcfg configuration tests: +# - 2.global specifies /tmp/calamares as the rootMountPath, +# so we end up editing files there. Create the directory +# beforehand, so the test doesn't blow up. + +add_test( + NAME make-grubcfg-dirs + COMMAND ${CMAKE_COMMAND} -E make_directory + /tmp/calamares/grubcfg-test-2/etc/default + /tmp/calamares/grubcfg-test-3/etc/default + /tmp/calamares/grubcfg-test-4/etc/default/grub.d + ) +set_tests_properties(load-grubcfg-2 PROPERTIES DEPENDS make-grubcfg-dirs) +set_tests_properties(load-grubcfg-3 PROPERTIES DEPENDS make-grubcfg-dirs) +set_tests_properties(load-grubcfg-4 PROPERTIES DEPENDS make-grubcfg-dirs) + diff --git a/src/modules/hostinfo/CMakeLists.txt b/src/modules/hostinfo/CMakeLists.txt index 3d6e0973f..55be66f81 100644 --- a/src/modules/hostinfo/CMakeLists.txt +++ b/src/modules/hostinfo/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # Configuration for hostinfo # # There isn't anything to configure for the hostinfo module. @@ -22,8 +28,6 @@ calamares_add_plugin( hostinfo EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES HostInfoJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB NO_CONFIG ) @@ -38,5 +42,5 @@ calamares_add_test( Tests.cpp HostInfoJob.cpp LIBRARIES - yamlcpp + yamlcpp::yamlcpp ) diff --git a/src/modules/hostinfo/HostInfoJob.cpp b/src/modules/hostinfo/HostInfoJob.cpp index c2959fb6b..0be419978 100644 --- a/src/modules/hostinfo/HostInfoJob.cpp +++ b/src/modules/hostinfo/HostInfoJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "HostInfoJob.h" @@ -113,6 +104,38 @@ hostCPU_FreeBSD() #endif #if defined( Q_OS_LINUX ) +static QString +hostCPUmatchARM( const QString& s ) +{ + /* The "CPU implementer" line is for ARM CPUs in general. + * + * The specific value given distinguishes *which designer* + * (or architecture licensee, who cares) produced the current + * silicon. For instance, a list from lscpu-arm.c (Linux kernel) + * shows this: + * + static const struct hw_impl hw_implementer[] = { + { 0x41, arm_part, "ARM" }, + { 0x42, brcm_part, "Broadcom" }, + { 0x43, cavium_part, "Cavium" }, + { 0x44, dec_part, "DEC" }, + { 0x48, hisi_part, "HiSilicon" }, + { 0x4e, nvidia_part, "Nvidia" }, + { 0x50, apm_part, "APM" }, + { 0x51, qcom_part, "Qualcomm" }, + { 0x53, samsung_part, "Samsung" }, + { 0x56, marvell_part, "Marvell" }, + { 0x66, faraday_part, "Faraday" }, + { 0x69, intel_part, "Intel" }, + { -1, unknown_part, "unknown" }, + }; + * + * Since the specific implementor isn't interesting, just + * map everything to "ARM". + */ + return QStringLiteral( "ARM" ); +} + QString hostCPU_Linux() { @@ -127,6 +150,10 @@ hostCPU_Linux() { return hostCPUmatch( line ); } + if ( line.startsWith( "CPU implementer" ) ) + { + return hostCPUmatchARM( line ); + } } } return QString(); // Not open, or not found diff --git a/src/modules/hostinfo/HostInfoJob.h b/src/modules/hostinfo/HostInfoJob.h index 5db169b0e..b252da7e0 100644 --- a/src/modules/hostinfo/HostInfoJob.h +++ b/src/modules/hostinfo/HostInfoJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef HOSTINFOJOB_H @@ -52,7 +43,7 @@ class PLUGINDLLEXPORT HostInfoJob : public Calamares::CppJob public: explicit HostInfoJob( QObject* parent = nullptr ); - virtual ~HostInfoJob() override; + ~HostInfoJob() override; QString prettyName() const override; diff --git a/src/modules/hostinfo/Tests.cpp b/src/modules/hostinfo/Tests.cpp index 8241ef022..f3863d98b 100644 --- a/src/modules/hostinfo/Tests.cpp +++ b/src/modules/hostinfo/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "HostInfoJob.h" @@ -31,7 +22,7 @@ class HostInfoTests : public QObject Q_OBJECT public: HostInfoTests() {} - virtual ~HostInfoTests() {} + ~HostInfoTests() override {} private Q_SLOTS: void initTestCase(); @@ -59,7 +50,33 @@ HostInfoTests::testHostOS() QCOMPARE( expect, hostOS() ); QCOMPARE( expect, hostOSName() ); // Might be the same - QCOMPARE( QStringLiteral( "Intel" ), hostCPU() ); // On all my developer machines + + // This is a lousy test, too: the implementation reads /proc/cpuinfo + // and that's the only way we could use, too, to find what the "right" + // answer is. + QStringList x86cpunames { QStringLiteral( "Intel" ), QStringLiteral( "AMD" ) }; + QStringList armcpunames { QStringLiteral( "ARM" ) }; + const QString cpu = hostCPU(); + QVERIFY( x86cpunames.contains( cpu ) || armcpunames.contains( cpu ) ); + + // Try to detect family in a different way + QFile modalias( "/sys/devices/system/cpu/modalias" ); + if ( modalias.open( QIODevice::ReadOnly ) ) + { + QString cpumodalias = modalias.readLine(); + if ( cpumodalias.contains( "type:x86" ) ) + { + QVERIFY( x86cpunames.contains( cpu ) ); + } + else if ( cpumodalias.contains( "type:aarch64" ) ) + { + QVERIFY( armcpunames.contains( cpu ) ); + } + else + { + QCOMPARE( cpu, QString( "Unknown CPU modalias '%1'" ).arg( cpumodalias ) ); + } + } } diff --git a/src/modules/hwclock/main.py b/src/modules/hwclock/main.py index f18cf12a9..be9fabf5f 100644 --- a/src/modules/hwclock/main.py +++ b/src/modules/hwclock/main.py @@ -1,26 +1,17 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014 - 2015, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2017-2018, Gabriel Craciunescu -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017-2018 Gabriel Craciunescu +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/hwclock/module.desc b/src/modules/hwclock/module.desc index 47d1b6c14..d13435b3c 100644 --- a/src/modules/hwclock/module.desc +++ b/src/modules/hwclock/module.desc @@ -1,7 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "hwclock" interface: "python" -requires: [] script: "main.py" noconfig: true diff --git a/src/modules/initcpio/CMakeLists.txt b/src/modules/initcpio/CMakeLists.txt index 5140c97e0..48fd09371 100644 --- a/src/modules/initcpio/CMakeLists.txt +++ b/src/modules/initcpio/CMakeLists.txt @@ -1,10 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( initcpio TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES InitcpioJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) @@ -14,5 +17,5 @@ calamares_add_test( Tests.cpp LIBRARIES calamares_job_initcpio # From above - yamlcpp + yamlcpp::yamlcpp ) diff --git a/src/modules/initcpio/InitcpioJob.cpp b/src/modules/initcpio/InitcpioJob.cpp index 38f3a8961..df995ccbf 100644 --- a/src/modules/initcpio/InitcpioJob.cpp +++ b/src/modules/initcpio/InitcpioJob.cpp @@ -1,19 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2022 Evan James + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InitcpioJob.h" @@ -40,15 +32,22 @@ InitcpioJob::prettyName() const return tr( "Creating initramfs with mkinitcpio." ); } +/** @brief Sets secure permissions on each initramfs + * + * Iterates over each initramfs contained directly in the directory @p d. + * For each initramfs found, the permissions are set to owner read/write only. + * + */ void fixPermissions( const QDir& d ) { - for ( const auto& fi : d.entryInfoList( { "initramfs*" }, QDir::Files ) ) + const auto initramList = d.entryInfoList( { "initramfs*" }, QDir::Files ); + for ( const auto& fi : initramList ) { QFile f( fi.absoluteFilePath() ); if ( f.exists() ) { - cDebug() << "initcpio fixing permissions for" << f.fileName(); + cDebug() << "initcpio setting permissions for" << f.fileName(); f.setPermissions( QFileDevice::ReadOwner | QFileDevice::WriteOwner ); } } @@ -72,9 +71,19 @@ InitcpioJob::exec() } } + // If the kernel option isn't set to a specific kernel, run mkinitcpio on all kernels + QStringList command = { "mkinitcpio" }; + if ( m_kernel.isEmpty() || m_kernel == "all" ) + { + command.append( "-P" ); + } + else + { + command.append( { "-p", m_kernel } ); + } + cDebug() << "Updating initramfs with kernel" << m_kernel; - auto r = CalamaresUtils::System::instance()->targetEnvCommand( - { "mkinitcpio", "-p", m_kernel }, QString(), QString() /* no timeout , 0 */ ); + auto r = CalamaresUtils::System::instance()->targetEnvCommand( command, QString(), QString() /* no timeout , 0 */ ); return r.explainProcess( "mkinitcpio", std::chrono::seconds( 10 ) /* fake timeout */ ); } @@ -82,25 +91,6 @@ void InitcpioJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_kernel = CalamaresUtils::getString( configurationMap, "kernel" ); - if ( m_kernel.isEmpty() ) - { - m_kernel = QStringLiteral( "all" ); - } - else if ( m_kernel == "$uname" ) - { - auto r = CalamaresUtils::System::runCommand( - CalamaresUtils::System::RunLocation::RunInHost, { "/bin/uname", "-r" }, QString(), QString(), std::chrono::seconds( 3 ) ); - if ( r.getExitCode() == 0 ) - { - m_kernel = r.getOutput(); - cDebug() << "*initcpio* using running kernel" << m_kernel; - } - else - { - cWarning() << "*initcpio* could not determine running kernel, using 'all'." << Logger::Continuation - << r.getExitCode() << r.getOutput(); - } - } m_unsafe = CalamaresUtils::getBool( configurationMap, "be_unsafe", false ); } diff --git a/src/modules/initcpio/InitcpioJob.h b/src/modules/initcpio/InitcpioJob.h index cdc48f6ce..6e7f2b585 100644 --- a/src/modules/initcpio/InitcpioJob.h +++ b/src/modules/initcpio/InitcpioJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INITCPIOJOB_H @@ -32,7 +23,7 @@ class PLUGINDLLEXPORT InitcpioJob : public Calamares::CppJob public: explicit InitcpioJob( QObject* parent = nullptr ); - virtual ~InitcpioJob() override; + ~InitcpioJob() override; QString prettyName() const override; diff --git a/src/modules/initcpio/Tests.cpp b/src/modules/initcpio/Tests.cpp index e0590ba25..bff163b5f 100644 --- a/src/modules/initcpio/Tests.cpp +++ b/src/modules/initcpio/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" @@ -31,23 +22,20 @@ #include extern void fixPermissions( const QDir& d ); - + QTEST_GUILESS_MAIN( InitcpioTests ) -InitcpioTests::InitcpioTests() -{ -} +InitcpioTests::InitcpioTests() {} -InitcpioTests::~InitcpioTests() -{ -} +InitcpioTests::~InitcpioTests() {} void InitcpioTests::initTestCase() { } -void InitcpioTests::testFixPermissions() +void +InitcpioTests::testFixPermissions() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Fixing up /boot"; @@ -56,4 +44,3 @@ void InitcpioTests::testFixPermissions() fixPermissions( QDir( "/nonexistent/nonexistent" ) ); QVERIFY( true ); } - diff --git a/src/modules/initcpio/Tests.h b/src/modules/initcpio/Tests.h index 5bab26d3f..aac48d0c4 100644 --- a/src/modules/initcpio/Tests.h +++ b/src/modules/initcpio/Tests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/initcpio/initcpio.conf b/src/modules/initcpio/initcpio.conf index 517e48392..d2a126864 100644 --- a/src/modules/initcpio/initcpio.conf +++ b/src/modules/initcpio/initcpio.conf @@ -1,22 +1,26 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Run mkinitcpio(8) with the given preset value --- # This key defines the kernel to be loaded. # It can have the following values: -# - empty or unset, interpreted as "all" -# - the literal string "$uname" (without quotes, with dollar), -# which will use the output of `uname -r` to determine the -# running kernel, and use that. -# - any other string. +# - the name of a single mkinitcpio preset +# - empty or unset +# - the literal string "all" # -# Whatever is set, that string is passed as *preset* argument to the -# `-p` option of *mkinitcpio*. Take care that both "$uname" operates -# in the host system, and might not be correct if the target system is -# updated (to a newer kernel) as part of the installation. +# If kernel is set to "all" or empty/unset then mkinitpio is called for all +# kernels. Otherwise it is called with a single preset with the value +# contained in kernel. # -# Note that "all" is probably not a good preset to use either. -kernel: linux312 +kernel: linux # Set this to true to turn off mitigations for lax file # permissions on initramfs (which, in turn, can compromise # your LUKS encryption keys, CVS-2019-13179). +# +# If your initramfs are stored in the EFI partition or another non-POSIX +# filesystem, this has no effect as the file permissions cannot be changed. +# In this case, ensure the partition is mounted securely. +# be_unsafe: false diff --git a/src/modules/initcpio/initcpio.schema.yaml b/src/modules/initcpio/initcpio.schema.yaml new file mode 100644 index 000000000..2024182bf --- /dev/null +++ b/src/modules/initcpio/initcpio.schema.yaml @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/initcpio +additionalProperties: false +type: object +properties: + kernel: { type: string } + be_unsafe: { type: boolean, default: false } +required: [ kernel ] diff --git a/src/modules/initcpiocfg/main.py b/src/modules/initcpiocfg/main.py index b3c43ea0b..1fd4af714 100644 --- a/src/modules/initcpiocfg/main.py +++ b/src/modules/initcpiocfg/main.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Rohan Garg -# Copyright 2015,2019,2020, Philip Müller -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Rohan Garg +# SPDX-FileCopyrightText: 2015 2019-2020, Philip Müller +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares from libcalamares.utils import debug, target_env_call @@ -37,35 +28,84 @@ def pretty_name(): return _("Configuring mkinitcpio.") -def cpuinfo(): +def detect_plymouth(): """ - Return the information in /proc/cpuinfo as a dictionary in the following - format: + Checks existence (runnability) of plymouth in the target system. - cpu_info['proc0']={...} - cpu_info['proc1']={...} + @return True if plymouth exists in the target, False otherwise """ - cpu_info = OrderedDict() - procinfo = OrderedDict() + # Used to only check existence of path /usr/bin/plymouth in target + return target_env_call(["sh", "-c", "which plymouth"]) == 0 - nprocs = 0 - with open('/proc/cpuinfo') as cpuinfo_file: - for line in cpuinfo_file: - if not line.strip(): - # end of one processor - cpu_info["proc{!s}".format(nprocs)] = procinfo - nprocs += 1 - # Reset - procinfo = OrderedDict() - else: - if len(line.split(':')) == 2: - splitted_line = line.split(':')[1].strip() - procinfo[line.split(':')[0].strip()] = splitted_line +class cpuinfo(object): + """ + Object describing the current CPU's characteristics. It may be + be considered a named tuple, there's no behavior here. + + Fields in the object: + - is_intel (if it's definitely an Intel CPU) + - is_amd (if it's definitely an AMD CPU) + - number_of_cores + It is possible for both is_* fields to be False. + """ + def __init__(self): + self.is_intel = False + self.is_amd = False + self.number_of_cores = 0 + + cpu = self._cpuinfo() + self.is_intel = cpu['proc0']['vendor_id'].lower() == "genuineintel" + self.is_amd = cpu['proc0']['vendor_id'].lower() == "authenticamd" + self.number_of_cores = len(cpu) + + @staticmethod + def _cpuinfo(): + """ + Return the information in /proc/cpuinfo as a dictionary in the following + format: + + cpu_info['proc0']={...} + cpu_info['proc1']={...} + """ + cpu_info = OrderedDict() + procinfo = OrderedDict() + + nprocs = 0 + + with open('/proc/cpuinfo') as cpuinfo_file: + for line in cpuinfo_file: + if not line.strip(): + # end of one processor + cpu_info["proc{!s}".format(nprocs)] = procinfo + nprocs += 1 + # Reset + procinfo = OrderedDict() else: - procinfo[line.split(':')[0].strip()] = '' + if len(line.split(':')) == 2: + splitted_line = line.split(':')[1].strip() + procinfo[line.split(':')[0].strip()] = splitted_line + else: + procinfo[line.split(':')[0].strip()] = '' - return cpu_info + return cpu_info + + +def get_host_initcpio(): + """ + Reads the host system mkinitcpio.conf and returns all + the lines from that file, or an empty list if it does + not exist. + """ + hostfile = "/etc/mkinitcpio.conf" + try: + with open(hostfile, "r") as mkinitcpio_file: + mklins = [x.strip() for x in mkinitcpio_file.readlines()] + except FileNotFoundError: + libcalamares.utils.debug("Could not open host file '%s'" % hostfile) + mklins = [] + + return mklins def write_mkinitcpio_lines(hooks, modules, files, root_mount_point): @@ -77,57 +117,41 @@ def write_mkinitcpio_lines(hooks, modules, files, root_mount_point): :param files: :param root_mount_point: """ - hostfile = "/etc/mkinitcpio.conf" - try: - with open(hostfile, "r") as mkinitcpio_file: - mklins = [x.strip() for x in mkinitcpio_file.readlines()] - except FileNotFoundError: - libcalamares.utils.debug("Could not open host file '%s'" % hostfile) - mklins = [] + mklins = get_host_initcpio() - for i in range(len(mklins)): - if mklins[i].startswith("HOOKS"): - joined_hooks = ' '.join(hooks) - mklins[i] = "HOOKS=\"{!s}\"".format(joined_hooks) - elif mklins[i].startswith("MODULES"): - joined_modules = ' '.join(modules) - mklins[i] = "MODULES=\"{!s}\"".format(joined_modules) - elif mklins[i].startswith("FILES"): - joined_files = ' '.join(files) - mklins[i] = "FILES=\"{!s}\"".format(joined_files) + target_path = os.path.join(root_mount_point, "etc/mkinitcpio.conf") + with open(target_path, "w") as mkinitcpio_file: + for line in mklins: + # Replace HOOKS, MODULES and FILES lines with what we + # have found via find_initcpio_features() + if line.startswith("HOOKS"): + line = "HOOKS=\"{!s}\"".format(' '.join(hooks)) + elif line.startswith("MODULES"): + line = "MODULES=\"{!s}\"".format(' '.join(modules)) + elif line.startswith("FILES"): + line = "FILES=\"{!s}\"".format(' '.join(files)) + mkinitcpio_file.write(line + "\n") - path = os.path.join(root_mount_point, "etc/mkinitcpio.conf") - with open(path, "w") as mkinitcpio_file: - mkinitcpio_file.write("\n".join(mklins) + "\n") - -def detect_plymouth(): +def find_initcpio_features(partitions, root_mount_point): """ - Checks existence (runnability) of plymouth in the target system. + Returns a tuple (hooks, modules, files) needed to support + the given @p partitions (filesystems types, encryption, etc) + in the target. - @return True if plymouth exists in the target, False otherwise + :param partitions: (from GS) + :param root_mount_point: (from GS) + + :return 3-tuple of lists """ - # Used to only check existence of path /usr/bin/plymouth in target - isPlymouth = target_env_call(["sh", "-c", "which plymouth"]) - debug("which plymouth exit code: {!s}".format(isPlymouth)) - - return isPlymouth == 0 - -def modify_mkinitcpio_conf(partitions, root_mount_point): - """ - Modifies mkinitcpio.conf - - :param partitions: - :param root_mount_point: - """ - cpu = cpuinfo() - swap_uuid = "" - btrfs = "" - lvm2 = "" - hooks = ["base", "udev", "autodetect", "modconf", "block", "keyboard", - "keymap"] + hooks = ["base", "udev", "autodetect", "modconf", "block", "keyboard", "keymap", "consolefont"] modules = [] files = [] + + swap_uuid = "" + uses_btrfs = False + uses_zfs = False + uses_lvm2 = False encrypt_hook = False openswap_hook = False unencrypted_separate_boot = False @@ -154,32 +178,41 @@ def modify_mkinitcpio_conf(partitions, root_mount_point): openswap_hook = True if partition["fs"] == "btrfs": - btrfs = "yes" + uses_btrfs = True + + # In addition to checking the filesystem, check to ensure that zfs is enabled + if partition["fs"] == "zfs" and libcalamares.globalstorage.contains("zfsPoolInfo"): + uses_zfs = True if "lvm2" in partition["fs"]: - lvm2 = "yes" + uses_lvm2 = True if partition["mountPoint"] == "/" and "luksMapperName" in partition: encrypt_hook = True - if (partition["mountPoint"] == "/boot" - and "luksMapperName" not in partition): + if (partition["mountPoint"] == "/boot" and "luksMapperName" not in partition): unencrypted_separate_boot = True if partition["mountPoint"] == "/usr": hooks.append("usr") if encrypt_hook: - hooks.append("encrypt") + if detect_plymouth() and unencrypted_separate_boot: + hooks.append("plymouth-encrypt") + else: + hooks.append("encrypt") if not unencrypted_separate_boot and \ os.path.isfile( os.path.join(root_mount_point, "crypto_keyfile.bin") ): files.append("/crypto_keyfile.bin") - if lvm2: + if uses_lvm2: hooks.append("lvm2") + if uses_zfs: + hooks.append("zfs") + if swap_uuid != "": if encrypt_hook and openswap_hook: hooks.extend(["openswap"]) @@ -187,15 +220,12 @@ def modify_mkinitcpio_conf(partitions, root_mount_point): else: hooks.extend(["filesystems"]) - if btrfs == "yes" and cpu['proc0']['vendor_id'].lower() != "genuineintel": - modules.append("crc32c") - elif (btrfs == "yes" - and cpu['proc0']['vendor_id'].lower() == "genuineintel"): - modules.append("crc32c-intel") - elif not os.path.exists(os.path.join(root_mount_point, "usr/bin/grub-set-bootflag")): + if uses_btrfs: + modules.append("crc32c-intel" if cpuinfo().is_intel else "crc32c") + else: hooks.append("fsck") - write_mkinitcpio_lines(hooks, modules, files, root_mount_point) + return (hooks, modules, files) def run(): @@ -216,6 +246,7 @@ def run(): return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("initcpiocfg")) - modify_mkinitcpio_conf(partitions, root_mount_point) + hooks, modules, files = find_initcpio_features(partitions, root_mount_point) + write_mkinitcpio_lines(hooks, modules, files, root_mount_point) return None diff --git a/src/modules/initcpiocfg/module.desc b/src/modules/initcpiocfg/module.desc index 936a99bbe..a64fdf173 100644 --- a/src/modules/initcpiocfg/module.desc +++ b/src/modules/initcpiocfg/module.desc @@ -1,5 +1,13 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Writes a mkinitcpio.conf into the target system. It copies +# the host system's /etc/mkinitcpio.conf, and replaces any +# HOOKS, MODULES, and FILES lines with calculated values +# based on what the installation (seems to) need. --- type: "job" name: "initcpiocfg" interface: "python" script: "main.py" +noconfig: true diff --git a/src/modules/initramfs/CMakeLists.txt b/src/modules/initramfs/CMakeLists.txt index b3287c896..2dec41cba 100644 --- a/src/modules/initramfs/CMakeLists.txt +++ b/src/modules/initramfs/CMakeLists.txt @@ -1,10 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( initramfs TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES InitramfsJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) @@ -14,5 +17,5 @@ calamares_add_test( Tests.cpp LIBRARIES calamares_job_initramfs # From above - yamlcpp + yamlcpp::yamlcpp ) diff --git a/src/modules/initramfs/InitramfsJob.cpp b/src/modules/initramfs/InitramfsJob.cpp index 468047c45..d83b4673c 100644 --- a/src/modules/initramfs/InitramfsJob.cpp +++ b/src/modules/initramfs/InitramfsJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InitramfsJob.h" @@ -78,8 +69,11 @@ InitramfsJob::setConfigurationMap( const QVariantMap& configurationMap ) } else if ( m_kernel == "$uname" ) { - auto r = CalamaresUtils::System::runCommand( - CalamaresUtils::System::RunLocation::RunInHost, { "/bin/uname", "-r" }, QString(), QString(), std::chrono::seconds( 3 ) ); + auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, + { "/bin/uname", "-r" }, + QString(), + QString(), + std::chrono::seconds( 3 ) ); if ( r.getExitCode() == 0 ) { m_kernel = r.getOutput(); @@ -87,6 +81,7 @@ InitramfsJob::setConfigurationMap( const QVariantMap& configurationMap ) } else { + m_kernel = QStringLiteral( "all" ); cWarning() << "*initramfs* could not determine running kernel, using 'all'." << Logger::Continuation << r.getExitCode() << r.getOutput(); } diff --git a/src/modules/initramfs/InitramfsJob.h b/src/modules/initramfs/InitramfsJob.h index 3239c6929..c09c9eba2 100644 --- a/src/modules/initramfs/InitramfsJob.h +++ b/src/modules/initramfs/InitramfsJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INITRAMFSJOB_H @@ -32,7 +23,7 @@ class PLUGINDLLEXPORT InitramfsJob : public Calamares::CppJob public: explicit InitramfsJob( QObject* parent = nullptr ); - virtual ~InitramfsJob() override; + ~InitramfsJob() override; QString prettyName() const override; diff --git a/src/modules/initramfs/Tests.cpp b/src/modules/initramfs/Tests.cpp index 2a236e64b..f1c9b5e24 100644 --- a/src/modules/initramfs/Tests.cpp +++ b/src/modules/initramfs/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" @@ -33,32 +24,30 @@ QTEST_GUILESS_MAIN( InitramfsTests ) -InitramfsTests::InitramfsTests() -{ -} +InitramfsTests::InitramfsTests() {} -InitramfsTests::~InitramfsTests() -{ -} +InitramfsTests::~InitramfsTests() {} void InitramfsTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); - (void) new Calamares::JobQueue(); - (void) new CalamaresUtils::System( true ); + (void)new Calamares::JobQueue(); + (void)new CalamaresUtils::System( true ); } static const char contents[] = "UMASK=0077\n"; static const char confFile[] = "/tmp/calamares-safe-umask"; -void InitramfsTests::cleanup() +void +InitramfsTests::cleanup() { QFile::remove( confFile ); } -void InitramfsTests::testCreateTargetFile() +void +InitramfsTests::testCreateTargetFile() { static const char short_confFile[] = "/calamares-safe-umask"; @@ -79,8 +68,7 @@ void InitramfsTests::testCreateTargetFile() QFileInfo fi( path ); QVERIFY( fi.exists() ); - QCOMPARE( ulong( fi.size() ), sizeof( contents )-1 ); // don't count trailing NUL + QCOMPARE( ulong( fi.size() ), sizeof( contents ) - 1 ); // don't count trailing NUL QFile::remove( path ); - } diff --git a/src/modules/initramfs/Tests.h b/src/modules/initramfs/Tests.h index 715c90169..377424589 100644 --- a/src/modules/initramfs/Tests.h +++ b/src/modules/initramfs/Tests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/initramfs/initramfs.conf b/src/modules/initramfs/initramfs.conf index a989d83c3..c9dcf1697 100644 --- a/src/modules/initramfs/initramfs.conf +++ b/src/modules/initramfs/initramfs.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# ## initramfs module # # This module is specific to Debian based distros. Post installation on Debian diff --git a/src/modules/initramfscfg/encrypt_hook b/src/modules/initramfscfg/encrypt_hook index 257097303..70d661a98 100755 --- a/src/modules/initramfscfg/encrypt_hook +++ b/src/modules/initramfscfg/encrypt_hook @@ -1,4 +1,7 @@ #!/bin/sh +# +# SPDX-FileCopyrightText: 2016 David McKinney +# SPDX-License-Identifier: GPL-3.0-or-later PREREQ="" diff --git a/src/modules/initramfscfg/encrypt_hook_nokey b/src/modules/initramfscfg/encrypt_hook_nokey index db51475bd..8ee669c30 100755 --- a/src/modules/initramfscfg/encrypt_hook_nokey +++ b/src/modules/initramfscfg/encrypt_hook_nokey @@ -1,4 +1,7 @@ #!/bin/sh +# +# SPDX-FileCopyrightText: 2016 David McKinney +# SPDX-License-Identifier: GPL-3.0-or-later PREREQ="" diff --git a/src/modules/initramfscfg/main.py b/src/modules/initramfscfg/main.py index 52d512567..974e2634d 100644 --- a/src/modules/initramfscfg/main.py +++ b/src/modules/initramfscfg/main.py @@ -1,27 +1,18 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Rohan Garg -# Copyright 2015, Philip Müller -# Copyright 2016, David McKinney -# Copyright 2016, Kevin Kofler -# Copyright 2017, Alf Gaida -# Copyright 2017, 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Rohan Garg +# SPDX-FileCopyrightText: 2015 Philip Müller +# SPDX-FileCopyrightText: 2016 David McKinney +# SPDX-FileCopyrightText: 2016 Kevin Kofler +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/initramfscfg/module.desc b/src/modules/initramfscfg/module.desc index c00e8170f..17db29465 100644 --- a/src/modules/initramfscfg/module.desc +++ b/src/modules/initramfscfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "initramfscfg" diff --git a/src/modules/interactiveterminal/CMakeLists.txt b/src/modules/interactiveterminal/CMakeLists.txt index 5eff610d5..20aee8257 100644 --- a/src/modules/interactiveterminal/CMakeLists.txt +++ b/src/modules/interactiveterminal/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) set( kf5_ver 5.41 ) @@ -20,8 +25,6 @@ if ( KF5Parts_FOUND AND KF5Service_FOUND ) SOURCES InteractiveTerminalViewStep.cpp InteractiveTerminalPage.cpp - LINK_PRIVATE_LIBRARIES - calamaresui LINK_LIBRARIES KF5::Service KF5::Parts diff --git a/src/modules/interactiveterminal/InteractiveTerminalPage.cpp b/src/modules/interactiveterminal/InteractiveTerminalPage.cpp index 5b2f81bfa..ea30c21ef 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalPage.cpp +++ b/src/modules/interactiveterminal/InteractiveTerminalPage.cpp @@ -1,31 +1,24 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InteractiveTerminalPage.h" -#include "viewpages/ViewStep.h" -#include "utils/Retranslator.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" +#include "utils/Retranslator.h" +#include "viewpages/ViewStep.h" +#include "widgets/TranslationFix.h" -#include -#include #include +#include +#include +#include #include #include @@ -49,34 +42,45 @@ InteractiveTerminalPage::InteractiveTerminalPage( QWidget* parent ) void InteractiveTerminalPage::errorKonsoleNotInstalled() { - QMessageBox::critical( this, - tr( "Konsole not installed"), - tr( "Please install KDE Konsole and try again!" ), - QMessageBox::Ok ); + QMessageBox mb( QMessageBox::Critical, + tr( "Konsole not installed" ), + tr( "Please install KDE Konsole and try again!" ), + QMessageBox::Ok ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); } void InteractiveTerminalPage::onActivate() { if ( m_termHostWidget ) + { return; - // For whatever reason, instead of simply linking against a library we - // need to do a runtime query to KService just to get a sodding terminal - // widget. + } + +#if KCOREADDONS_VERSION_MAJOR != 5 +#error Incompatible with not-KF5 +#endif +#if KCOREADDONS_VERSION_MINOR >= 86 + // 5.86 deprecated a bunch of KService and PluginFactory and related methods + auto md = KPluginMetaData::findPluginById( QString(), "konsolepart" ); + if ( !md.isValid() ) + { + errorKonsoleNotInstalled(); + return; + } + auto* p = KPluginFactory::instantiatePlugin< KParts::ReadOnlyPart >( md, this ).plugin; +#else KService::Ptr service = KService::serviceByDesktopName( "konsolepart" ); if ( !service ) { - // And all of this hoping the Konsole application is installed. If not, - // tough cookies. errorKonsoleNotInstalled(); - return ; + return; } // Create one instance of konsolepart. - KParts::ReadOnlyPart* p = - service->createInstance< KParts::ReadOnlyPart >( this, - this, - {} ); + KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} ); +#endif if ( !p ) { // One more opportunity for the loading operation to fail. @@ -100,8 +104,6 @@ InteractiveTerminalPage::onActivate() m_termHostWidget = p->widget(); m_layout->addWidget( m_termHostWidget ); - cDebug() << "Part widget ought to be" - << m_termHostWidget->metaObject()->className(); t->showShellInDir( QDir::home().path() ); t->sendInput( QString( "%1\n" ).arg( m_command ) ); @@ -113,7 +115,5 @@ InteractiveTerminalPage::setCommand( const QString& command ) { m_command = command; CALAMARES_RETRANSLATE( - m_headerLabel->setText( tr( "Executing script:  %1" ) - .arg( m_command ) ); - ) + m_headerLabel->setText( tr( "Executing script:  %1" ).arg( m_command ) ); ); } diff --git a/src/modules/interactiveterminal/InteractiveTerminalPage.h b/src/modules/interactiveterminal/InteractiveTerminalPage.h index 503a53756..86ba075ad 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalPage.h +++ b/src/modules/interactiveterminal/InteractiveTerminalPage.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INTERACTIVETERMINALPAGE_H @@ -43,4 +34,4 @@ private: void errorKonsoleNotInstalled(); }; -#endif // INTERACTIVETERMINALPAGE_H +#endif // INTERACTIVETERMINALPAGE_H diff --git a/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp b/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp index 874c8a9cc..b01321c18 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp +++ b/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "InteractiveTerminalViewStep.h" @@ -24,7 +15,8 @@ #include -CALAMARES_PLUGIN_FACTORY_DEFINITION( InteractiveTerminalViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( InteractiveTerminalViewStepFactory, + registerPlugin< InteractiveTerminalViewStep >(); ) InteractiveTerminalViewStep::InteractiveTerminalViewStep( QObject* parent ) : Calamares::ViewStep( parent ) @@ -37,7 +29,9 @@ InteractiveTerminalViewStep::InteractiveTerminalViewStep( QObject* parent ) InteractiveTerminalViewStep::~InteractiveTerminalViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } @@ -102,8 +96,8 @@ InteractiveTerminalViewStep::onActivate() void InteractiveTerminalViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - if ( configurationMap.contains( "command" ) && - configurationMap.value( "command").type() == QVariant::String ) + if ( configurationMap.contains( "command" ) && configurationMap.value( "command" ).type() == QVariant::String ) + { m_widget->setCommand( configurationMap.value( "command" ).toString() ); + } } - diff --git a/src/modules/interactiveterminal/InteractiveTerminalViewStep.h b/src/modules/interactiveterminal/InteractiveTerminalViewStep.h index bf26ba91e..8e0e6508f 100644 --- a/src/modules/interactiveterminal/InteractiveTerminalViewStep.h +++ b/src/modules/interactiveterminal/InteractiveTerminalViewStep.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef INTERACTIVETERMINALPAGEPLUGIN_H @@ -35,7 +26,7 @@ class PLUGINDLLEXPORT InteractiveTerminalViewStep : public Calamares::ViewStep public: explicit InteractiveTerminalViewStep( QObject* parent = nullptr ); - virtual ~InteractiveTerminalViewStep() override; + ~InteractiveTerminalViewStep() override; QString prettyName() const override; @@ -60,4 +51,4 @@ private: CALAMARES_PLUGIN_FACTORY_DECLARATION( InteractiveTerminalViewStepFactory ) -#endif // INTERACTIVETERMINALPAGEPLUGIN_H +#endif // INTERACTIVETERMINALPAGEPLUGIN_H diff --git a/src/modules/interactiveterminal/interactiveterminal.conf b/src/modules/interactiveterminal/interactiveterminal.conf index 067bce8be..9354f8f4a 100644 --- a/src/modules/interactiveterminal/interactiveterminal.conf +++ b/src/modules/interactiveterminal/interactiveterminal.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # The interactive terminal provides a konsole (terminal) window # during the installation process. The terminal runs in the # host system, so you will need to change directories to the diff --git a/src/modules/keyboard/AdditionalLayoutInfo.h b/src/modules/keyboard/AdditionalLayoutInfo.h new file mode 100644 index 000000000..61e854d3b --- /dev/null +++ b/src/modules/keyboard/AdditionalLayoutInfo.h @@ -0,0 +1,25 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Artem Grinev + * 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 + +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 c0d8575c6..fe341cef0 100644 --- a/src/modules/keyboard/CMakeLists.txt +++ b/src/modules/keyboard/CMakeLists.txt @@ -1,9 +1,13 @@ -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) - +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( keyboard TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES + Config.cpp KeyboardViewStep.cpp KeyboardPage.cpp KeyboardLayoutModel.cpp @@ -14,7 +18,14 @@ calamares_add_plugin( keyboard KeyboardPage.ui RESOURCES keyboard.qrc - LINK_PRIVATE_LIBRARIES - calamaresui SHARED_LIB ) + +calamares_add_test( + keyboardtest + SOURCES + Tests.cpp + SetKeyboardLayoutJob.cpp + RESOURCES + keyboard.qrc +) diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index 8b651d05d..9afaef5f3 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2020, Camilo Higuita * + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Camilo Higuita * + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" @@ -25,171 +16,31 @@ #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" +#include "utils/RAII.h" #include "utils/Retranslator.h" +#include "utils/String.h" +#include "utils/Variant.h" #include #include #include -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() -{ - beginResetModel(); - const auto models = KeyboardGlobal::getKeyboardModels(); - auto index = -1; - for ( const auto& key : models.keys() ) - { - index++; - m_list << QMap< QString, QString > { { "label", key }, { "key", models[ key ] } }; - if ( models[ key ] == "pc105" ) - { - this->setCurrentIndex( index ); - } - } - endResetModel(); -} - -void -KeyboardModelsModel::refresh() -{ - m_list.clear(); - setCurrentIndex( -1 ); - detectModels(); -} - -QVariant -KeyboardModelsModel::data( const QModelIndex& index, int role ) const -{ - if ( !index.isValid() ) - { - return QVariant(); - } - 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" } }; -} - -int -KeyboardModelsModel::currentIndex() const -{ - return m_currentIndex; -} - -const QMap< QString, QString > -KeyboardModelsModel::item( const int& index ) const -{ - if ( index >= m_list.count() || index < 0 ) - { - return QMap< QString, QString >(); - } - - return m_list.at( index ); -} - -const QMap< QString, QString > -KeyboardVariantsModel::item( const int& index ) const -{ - if ( index >= m_list.count() || index < 0 ) - { - return QMap< QString, QString >(); - } - - return m_list.at( index ); -} - -void -KeyboardModelsModel::setCurrentIndex( const int& index ) -{ - if ( index >= m_list.count() || index < 0 ) - { - return; - } - - m_currentIndex = index; - emit currentIndexChanged( m_currentIndex ); -} - -KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent ) - : QAbstractListModel( parent ) -{ -} - -int -KeyboardVariantsModel::currentIndex() const -{ - return m_currentIndex; -} - -void -KeyboardVariantsModel::setCurrentIndex( const int& index ) -{ - if ( index >= m_list.count() || index < 0 ) - { - return; - } - - m_currentIndex = index; - emit currentIndexChanged( m_currentIndex ); -} - -QVariant -KeyboardVariantsModel::data( const QModelIndex& index, int role ) const -{ - if ( !index.isValid() ) - { - return QVariant(); - } - 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(); -} - -QHash< int, QByteArray > -KeyboardVariantsModel::roleNames() const -{ - return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; -} - -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(); -} /* 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 ) +xkbmap_layout_args( const QString& layout, const QString& variant ) { QStringList r { "-layout", layout }; if ( !variant.isEmpty() ) @@ -199,6 +50,103 @@ xkbmap_args( const QString& layout, const QString& variant ) return r; } +static inline QStringList +xkbmap_layout_args( const QStringList& layouts, + const QStringList& variants, + const QString& switchOption = "grp:alt_shift_toggle" ) +{ + if ( layouts.size() != variants.size() ) + { + cError() << "Number of layouts and variants must be equal (empty string should be used if there is no " + "corresponding variant)"; + return QStringList(); + } + + QStringList r { "-layout", layouts.join( "," ) }; + + if ( !variants.isEmpty() ) + { + r << "-variant" << variants.join( "," ); + } + + if ( !switchOption.isEmpty() ) + { + r << "-option" << switchOption; + } + + return r; +} + +/* Returns group-switch setxkbd option if set + * or an empty string otherwise + */ +static inline QString +xkbmap_query_grp_option() +{ + QProcess setxkbmapQuery; + setxkbmapQuery.start( "setxkbmap", { "-query" } ); + setxkbmapQuery.waitForFinished(); + + QString outputLine; + + do + { + outputLine = setxkbmapQuery.readLine(); + } while ( setxkbmapQuery.canReadLine() && !outputLine.startsWith( "options:" ) ); + + if ( !outputLine.startsWith( "options:" ) ) + { + return QString(); + } + + int index = outputLine.indexOf( "grp:" ); + + if ( index == -1 ) + { + return QString(); + } + + //it's either in the end of line or before the other option so \s or , + int lastIndex = outputLine.indexOf( QRegExp( "[\\s,]" ), index ); + + return outputLine.mid( index, lastIndex - index ); +} + +AdditionalLayoutInfo +Config::getAdditionalLayoutInfo( const QString& layout ) +{ + QFile layoutTable( ":/non-ascii-layouts" ); + + if ( !layoutTable.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + cError() << "Non-ASCII layout table could not be opened"; + return AdditionalLayoutInfo(); + } + + QString tableLine; + + do + { + tableLine = layoutTable.readLine(); + } while ( layoutTable.canReadLine() && !tableLine.startsWith( layout ) ); + + if ( !tableLine.startsWith( layout ) ) + { + return AdditionalLayoutInfo(); + } + + QStringList tableEntries = tableLine.split( " ", SplitSkipEmptyParts ); + + AdditionalLayoutInfo r; + + r.additionalLayout = tableEntries[ 1 ]; + r.additionalVariant = tableEntries[ 2 ] == "-" ? "" : tableEntries[ 2 ]; + + r.vconsoleKeymap = tableEntries[ 3 ]; + + return r; +} + Config::Config( QObject* parent ) : QObject( parent ) , m_keyboardModelsModel( new KeyboardModelsModel( this ) ) @@ -208,39 +156,89 @@ Config::Config( QObject* parent ) m_setxkbmapTimer.setSingleShot( true ); // 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 } ); - emit prettyStatusChanged(); - } ); + connect( m_keyboardModelsModel, + &KeyboardModelsModel::currentIndexChanged, + [ & ]( int index ) + { + // Set Xorg keyboard model + m_selectedModel = m_keyboardModelsModel->key( index ); + QProcess::execute( "setxkbmap", xkbmap_model_args( m_selectedModel ) ); + emit prettyStatusChanged(); + } ); - connect( m_keyboardLayoutsModel, &KeyboardLayoutModel::currentIndexChanged, [&]( int index ) { - m_selectedLayout = m_keyboardLayoutsModel->item( index ).first; - updateVariants( QPersistentModelIndex( m_keyboardLayoutsModel->index( index ) ) ); - emit prettyStatusChanged(); - } ); + connect( m_keyboardLayoutsModel, + &KeyboardLayoutModel::currentIndexChanged, + [ & ]( int index ) + { + m_selectedLayout = m_keyboardLayoutsModel->item( index ).first; + updateVariants( QPersistentModelIndex( m_keyboardLayoutsModel->index( index ) ) ); + emit prettyStatusChanged(); + } ); - connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, [&]( int index ) { - m_selectedVariant = m_keyboardVariantsModel->item( index )[ "key" ]; + connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, this, &Config::xkbChanged ); - // Set Xorg keyboard layout - if ( m_setxkbmapTimer.isActive() ) + // If the user picks something explicitly -- not a consequence of + // a guess -- then move to UserSelected state and stay there. + connect( m_keyboardModelsModel, &KeyboardModelsModel::currentIndexChanged, this, &Config::selectionChange ); + connect( m_keyboardLayoutsModel, &KeyboardLayoutModel::currentIndexChanged, this, &Config::selectionChange ); + connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, this, &Config::selectionChange ); + + m_selectedModel = m_keyboardModelsModel->key( m_keyboardModelsModel->currentIndex() ); + m_selectedLayout = m_keyboardLayoutsModel->item( m_keyboardLayoutsModel->currentIndex() ).first; + m_selectedVariant = m_keyboardVariantsModel->key( m_keyboardVariantsModel->currentIndex() ); +} + +void +Config::xkbChanged( int index ) +{ + // Set Xorg keyboard layout + variant + m_selectedVariant = m_keyboardVariantsModel->key( index ); + + if ( m_setxkbmapTimer.isActive() ) + { + m_setxkbmapTimer.stop(); + m_setxkbmapTimer.disconnect( this ); + } + + connect( &m_setxkbmapTimer, &QTimer::timeout, this, &Config::xkbApply ); + + m_setxkbmapTimer.start( QApplication::keyboardInputInterval() ); + emit prettyStatusChanged(); +} + +void +Config::xkbApply() +{ + m_additionalLayoutInfo = getAdditionalLayoutInfo( m_selectedLayout ); + + if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() ) + { + m_additionalLayoutInfo.groupSwitcher = xkbmap_query_grp_option(); + + if ( m_additionalLayoutInfo.groupSwitcher.isEmpty() ) { - m_setxkbmapTimer.stop(); - m_setxkbmapTimer.disconnect( this ); + m_additionalLayoutInfo.groupSwitcher = "grp:alt_shift_toggle"; } - 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_setxkbmapTimer.disconnect( this ); - } ); - m_setxkbmapTimer.start( QApplication::keyboardInputInterval() ); - emit prettyStatusChanged(); - } ); + 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 ); } + KeyboardModelsModel* Config::keyboardModels() const { @@ -277,8 +275,15 @@ findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout ) } void -Config::init() +Config::detectCurrentKeyboardLayout() { + if ( m_state != State::Initial ) + { + return; + } + cScopedAssignment returnToIntial( &m_state, State::Initial ); + m_state = State::Guessing; + //### Detect current keyboard layout and variant QString currentLayout; QString currentVariant; @@ -287,20 +292,27 @@ Config::init() if ( process.waitForFinished() ) { - const QStringList list = QString( process.readAll() ).split( "\n", QString::SkipEmptyParts ); + 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( "+", QString::SkipEmptyParts ); + 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 ); @@ -346,11 +358,11 @@ Config::prettyStatus() const { QString status; status += tr( "Set keyboard model to %1.
" ) - .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( "" ); status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant ); @@ -358,37 +370,38 @@ 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; } -void -Config::guessLayout( const QStringList& langParts ) +static void +guessLayout( const QStringList& langParts, KeyboardLayoutModel* layouts, KeyboardVariantsModel* variants ) { 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 < m_keyboardLayoutsModel->rowCount(); ++i ) + for ( int i = 0; i < layouts->rowCount(); ++i ) { - QModelIndex idx = m_keyboardLayoutsModel->index( i ); + QModelIndex idx = layouts->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; - m_keyboardLayoutsModel->setCurrentIndex( i ); + layouts->setCurrentIndex( i ); foundCountryPart = true; break; } @@ -399,15 +412,13 @@ Config::guessLayout( const QStringList& langParts ) if ( countryPart != langParts.rend() ) { cDebug() << "Next level:" << *countryPart; - for ( int variantnumber = 0; variantnumber < m_keyboardVariantsModel->rowCount(); ++variantnumber ) + for ( int variantnumber = 0; variantnumber < variants->rowCount(); ++variantnumber ) { - if ( m_keyboardVariantsModel->item( variantnumber )[ "key" ].compare( *countryPart, - Qt::CaseInsensitive ) ) + if ( variants->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" ]; + variants->setCurrentIndex( variantnumber ); + cDebug() << Logger::SubEntry << "matched variant" << *countryPart << ' ' + << variants->key( variantnumber ); } } } @@ -416,8 +427,15 @@ Config::guessLayout( const QStringList& langParts ) } void -Config::onActivate() +Config::guessLocaleKeyboardLayout() { + if ( m_state != State::Initial ) + { + return; + } + cScopedAssignment returnToIntial( &m_state, State::Initial ); + m_state = State::Guessing; + /* Guessing a keyboard layout based on the locale means * mapping between language identifiers in _ * format to keyboard mappings, which are _ @@ -455,12 +473,12 @@ Config::onActivate() { "ar_TN", arabic }, { "ar_YE", arabic }, { "ca_ES", "cat_ES" }, /* Catalan */ - { "as_ES", "ast_ES" }, /* Asturian */ - { "en_CA", "eng_CA" }, /* Canadian English */ + { "en_CA", "us" }, /* Canadian English */ { "el_CY", "gr" }, /* Greek in Cyprus */ - { "el_GR", "gr" }, /* Greek in Greeze */ + { "el_GR", "gr" }, /* Greek in Greece */ { "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */ - { "ha_NG", "hausa_NG" } /* Hausa */ + { "ha_NG", "hausa_NG" }, /* Hausa */ + { "en_IN", "us" }, /* India, US English keyboards are common in India */ } ); // Try to preselect a layout, depending on language and locale @@ -496,14 +514,7 @@ Config::onActivate() } if ( !lang.isEmpty() ) { - const auto langParts = lang.split( '_', QString::SkipEmptyParts ); - - // 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 ); + guessLayout( lang.split( '_', SplitSkipEmptyParts ), m_keyboardLayoutsModel, m_keyboardVariantsModel ); } } @@ -515,6 +526,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? @@ -537,3 +555,33 @@ Config::updateVariants( const QPersistentModelIndex& currentItem, QString curren } } } + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + using namespace CalamaresUtils; + + const auto xorgConfDefault = QStringLiteral( "00-keyboard.conf" ); + m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName", xorgConfDefault ); + if ( m_xOrgConfFileName.isEmpty() ) + { + m_xOrgConfFileName = xorgConfDefault; + } + m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" ); + m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true ); +} + +void +Config::retranslate() +{ + retranslateKeyboardModels(); +} + +void +Config::selectionChange() +{ + if ( m_state == State::Initial ) + { + m_state = State::UserSelected; + } +} diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h index a05a5ab86..436ead4b5 100644 --- a/src/modules/keyboard/Config.h +++ b/src/modules/keyboard/Config.h @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARD_CONFIG_H #define KEYBOARD_CONFIG_H +#include "AdditionalLayoutInfo.h" #include "Job.h" #include "KeyboardLayoutModel.h" @@ -29,63 +21,6 @@ #include #include -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 @@ -97,19 +32,64 @@ class Config : public QObject public: Config( QObject* parent = nullptr ); - void init(); + /// @brief Based on current xkb settings, pick a layout + void detectCurrentKeyboardLayout(); + /// @brief Based on current locale, pick a layout + void guessLocaleKeyboardLayout(); - Calamares::JobList - createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); + Calamares::JobList createJobs(); QString prettyStatus() const; - void onActivate(); + /// @brief When leaving the page, write to GS void finalize(); + 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; + + /** @brief Call this to change application language + * + * The models (for keyboard model, layouts and variants) provide + * translations of strings in the xkb table, so need to be + * notified of language changes as well. + * + * Only widgets get LanguageChange events, so one of them will + * need to call this. + */ + void retranslate(); + + void setConfigurationMap( const QVariantMap& configurationMap ); + +signals: + void prettyStatusChanged(); + private: - void guessLayout( const QStringList& langParts ); void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() ); + /* These two methods are used in tandem to apply changes to the + * keyboard layout. This introduces a slight delay between selecting + * a keyboard, and applying it to the system -- so that if you + * scroll through or down-arrow through the list of keyboards, + * you don't get buried under xkbset processes. + * + * xkbChanged() is called when the selection changes, and triggers + * a delayed call to xkbApply() which does the actual work. + */ + void xkbChanged( int index ); + void xkbApply(); + KeyboardModelsModel* m_keyboardModelsModel; KeyboardLayoutModel* m_keyboardLayoutsModel; KeyboardVariantsModel* m_keyboardVariantsModel; @@ -117,16 +97,34 @@ private: QString m_selectedLayout; QString m_selectedModel; QString m_selectedVariant; + + // Layout (and corresponding info) added if current one doesn't support ASCII (e.g. Russian or Japanese) + AdditionalLayoutInfo m_additionalLayoutInfo; + QTimer m_setxkbmapTimer; -protected: - KeyboardModelsModel* keyboardModels() const; - KeyboardLayoutModel* keyboardLayouts() const; - KeyboardVariantsModel* keyboardVariants() const; + // From configuration + QString m_xOrgConfFileName; + QString m_convertedKeymapPath; + bool m_writeEtcDefaultKeyboard = true; + // The state determines whether we guess settings or preserve them: + // - Initial -> Guessing + // - Initial -> UserSelected + // - Guessing -> Initial + enum class State + { + Initial, // after configuration, nothing special going on + Guessing, // on activation + UserSelected // explicit choice is made, preserve that + }; + State m_state = State::Initial; -signals: - void prettyStatusChanged(); + /** @brief Handles state change when selections in model, variant, layout + * + * This handles the Initial -> UserSelected transition in particular. + */ + void selectionChange(); }; diff --git a/src/modules/keyboard/KeyboardData_p.cxxtr b/src/modules/keyboard/KeyboardData_p.cxxtr new file mode 100644 index 000000000..39783035a --- /dev/null +++ b/src/modules/keyboard/KeyboardData_p.cxxtr @@ -0,0 +1,825 @@ +/* GENERATED FILE DO NOT EDIT +* +* === This file is part of Calamares - === +* +* SPDX-FileCopyrightText: no +* SPDX-License-Identifier: CC0-1.0 +* +* This file is derived from base.lst in the Xorg distribution +* +*/ + +/** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ + +// *INDENT-OFF* +// clang-format off +/* This returns a reference to local, which is a terrible idea. + * Good thing it's not meant to be compiled. + */ +class kb_models : public QObject { +Q_OBJECT +public: + const QStringList& table() + { + return QStringList { + tr("A4Tech KB-21", "kb_models"), + tr("A4Tech KBS-8", "kb_models"), + tr("A4Tech Wireless Desktop RFKB-23", "kb_models"), + tr("Acer AirKey V", "kb_models"), + tr("Acer C300", "kb_models"), + tr("Acer Ferrari 4000", "kb_models"), + tr("Acer laptop", "kb_models"), + tr("Advance Scorpius KI", "kb_models"), + tr("Apple", "kb_models"), + tr("Apple Aluminium (ANSI)", "kb_models"), + tr("Apple Aluminium (ISO)", "kb_models"), + tr("Apple Aluminium (JIS)", "kb_models"), + tr("Apple laptop", "kb_models"), + tr("Asus laptop", "kb_models"), + tr("Azona RF2300 wireless Internet", "kb_models"), + tr("BTC 5090", "kb_models"), + tr("BTC 5113RF Multimedia", "kb_models"), + tr("BTC 5126T", "kb_models"), + tr("BTC 6301URF", "kb_models"), + tr("BTC 9000", "kb_models"), + tr("BTC 9000A", "kb_models"), + tr("BTC 9001AH", "kb_models"), + tr("BTC 9019U", "kb_models"), + tr("BTC 9116U Mini Wireless Internet and Gaming", "kb_models"), + tr("BenQ X-Touch", "kb_models"), + tr("BenQ X-Touch 730", "kb_models"), + tr("BenQ X-Touch 800", "kb_models"), + tr("Brother Internet", "kb_models"), + tr("Cherry B.UNLIMITED", "kb_models"), + tr("Cherry Blue Line CyBo@rd", "kb_models"), + tr("Cherry Blue Line CyBo@rd (alt.)", "kb_models"), + tr("Cherry CyBo@rd USB-Hub", "kb_models"), + tr("Cherry CyMotion Expert", "kb_models"), + tr("Cherry CyMotion Master Linux", "kb_models"), + tr("Cherry CyMotion Master XPress", "kb_models"), + tr("Chicony Internet", "kb_models"), + tr("Chicony KB-9885", "kb_models"), + tr("Chicony KU-0108", "kb_models"), + tr("Chicony KU-0420", "kb_models"), + tr("Chromebook", "kb_models"), + tr("Classmate PC", "kb_models"), + tr("Compaq Armada laptop", "kb_models"), + tr("Compaq Easy Access", "kb_models"), + tr("Compaq Internet (13 keys)", "kb_models"), + tr("Compaq Internet (18 keys)", "kb_models"), + tr("Compaq Internet (7 keys)", "kb_models"), + tr("Compaq Presario laptop", "kb_models"), + tr("Compaq iPaq", "kb_models"), + tr("Creative Desktop Wireless 7000", "kb_models"), + tr("DTK2000", "kb_models"), + tr("Dell", "kb_models"), + tr("Dell 101-key PC", "kb_models"), + tr("Dell Inspiron 6000/8000 laptop", "kb_models"), + tr("Dell Latitude laptop", "kb_models"), + tr("Dell Precision M laptop", "kb_models"), + tr("Dell Precision M65 laptop", "kb_models"), + tr("Dell SK-8125", "kb_models"), + tr("Dell SK-8135", "kb_models"), + tr("Dell USB Multimedia", "kb_models"), + tr("Dexxa Wireless Desktop", "kb_models"), + tr("Diamond 9801/9802", "kb_models"), + tr("Ennyah DKB-1008", "kb_models"), + tr("Everex STEPnote", "kb_models"), + tr("FL90", "kb_models"), + tr("Fujitsu-Siemens Amilo laptop", "kb_models"), + tr("Generic 101-key PC", "kb_models"), + tr("Generic 102-key PC", "kb_models"), + tr("Generic 104-key PC", "kb_models"), + tr("Generic 104-key PC with L-shaped Enter key", "kb_models"), + tr("Generic 105-key PC", "kb_models"), + tr("Generic 86-key PC", "kb_models"), + tr("Genius Comfy KB-12e", "kb_models"), + tr("Genius Comfy KB-16M/Multimedia KWD-910", "kb_models"), + tr("Genius Comfy KB-21e-Scroll", "kb_models"), + tr("Genius KB-19e NB", "kb_models"), + tr("Genius KKB-2050HS", "kb_models"), + tr("Gyration", "kb_models"), + tr("Happy Hacking", "kb_models"), + tr("Happy Hacking for Mac", "kb_models"), + tr("Hewlett-Packard Internet", "kb_models"), + tr("Hewlett-Packard Mini 110 laptop", "kb_models"), + tr("Hewlett-Packard NEC SK-2500 Multimedia", "kb_models"), + tr("Hewlett-Packard Omnibook 500", "kb_models"), + tr("Hewlett-Packard Omnibook 500 FA", "kb_models"), + tr("Hewlett-Packard Omnibook 6000/6100", "kb_models"), + tr("Hewlett-Packard Omnibook XE3 GC", "kb_models"), + tr("Hewlett-Packard Omnibook XE3 GF", "kb_models"), + tr("Hewlett-Packard Omnibook XT1000", "kb_models"), + tr("Hewlett-Packard Pavilion ZT1100", "kb_models"), + tr("Hewlett-Packard Pavilion dv5", "kb_models"), + tr("Hewlett-Packard nx9020", "kb_models"), + tr("Honeywell Euroboard", "kb_models"), + tr("IBM Rapid Access", "kb_models"), + tr("IBM Rapid Access II", "kb_models"), + tr("IBM Space Saver", "kb_models"), + tr("IBM ThinkPad 560Z/600/600E/A22E", "kb_models"), + tr("IBM ThinkPad R60/T60/R61/T61", "kb_models"), + tr("IBM ThinkPad Z60m/Z60t/Z61m/Z61t", "kb_models"), + tr("Keytronic FlexPro", "kb_models"), + tr("Kinesis", "kb_models"), + tr("Logitech", "kb_models"), + tr("Logitech Access", "kb_models"), + tr("Logitech Cordless Desktop", "kb_models"), + tr("Logitech Cordless Desktop (alt.)", "kb_models"), + tr("Logitech Cordless Desktop EX110", "kb_models"), + tr("Logitech Cordless Desktop LX-300", "kb_models"), + tr("Logitech Cordless Desktop Navigator", "kb_models"), + tr("Logitech Cordless Desktop Optical", "kb_models"), + tr("Logitech Cordless Desktop Pro (2nd alt.)", "kb_models"), + tr("Logitech Cordless Desktop iTouch", "kb_models"), + tr("Logitech Cordless Freedom/Desktop Navigator", "kb_models"), + tr("Logitech G15 extra keys via G15daemon", "kb_models"), + tr("Logitech Internet", "kb_models"), + tr("Logitech Internet 350", "kb_models"), + tr("Logitech Internet Navigator", "kb_models"), + tr("Logitech Ultra-X", "kb_models"), + tr("Logitech Ultra-X Cordless Media Desktop", "kb_models"), + tr("Logitech diNovo", "kb_models"), + tr("Logitech diNovo Edge", "kb_models"), + tr("Logitech iTouch", "kb_models"), + tr("Logitech iTouch Cordless Y-RB6", "kb_models"), + tr("Logitech iTouch Internet Navigator SE", "kb_models"), + tr("Logitech iTouch Internet Navigator SE USB", "kb_models"), + tr("MacBook/MacBook Pro", "kb_models"), + tr("MacBook/MacBook Pro (intl.)", "kb_models"), + tr("Macintosh", "kb_models"), + tr("Macintosh Old", "kb_models"), + tr("Memorex MX1998", "kb_models"), + tr("Memorex MX2500 EZ-Access", "kb_models"), + tr("Memorex MX2750", "kb_models"), + tr("Microsoft Comfort Curve 2000", "kb_models"), + tr("Microsoft Internet", "kb_models"), + tr("Microsoft Internet Pro (Swedish)", "kb_models"), + tr("Microsoft Natural", "kb_models"), + tr("Microsoft Natural Elite", "kb_models"), + tr("Microsoft Natural Ergonomic 4000", "kb_models"), + tr("Microsoft Natural Pro OEM", "kb_models"), + tr("Microsoft Natural Pro USB/Internet Pro", "kb_models"), + tr("Microsoft Natural Pro/Internet Pro", "kb_models"), + tr("Microsoft Natural Wireless Ergonomic 7000", "kb_models"), + tr("Microsoft Office Keyboard", "kb_models"), + tr("Microsoft Surface", "kb_models"), + tr("Microsoft Wireless Multimedia 1.0A", "kb_models"), + tr("NEC SK-1300", "kb_models"), + tr("NEC SK-2500", "kb_models"), + tr("NEC SK-6200", "kb_models"), + tr("NEC SK-7100", "kb_models"), + tr("Northgate OmniKey 101", "kb_models"), + tr("OLPC", "kb_models"), + tr("Ortek Multimedia/Internet MCK-800", "kb_models"), + tr("PC-98", "kb_models"), + tr("Propeller Voyager KTEZ-1000", "kb_models"), + tr("QTronix Scorpius 98N+", "kb_models"), + tr("SVEN Ergonomic 2500", "kb_models"), + tr("SVEN Slim 303", "kb_models"), + tr("Samsung SDM 4500P", "kb_models"), + tr("Samsung SDM 4510P", "kb_models"), + tr("Sanwa Supply SKB-KG3", "kb_models"), + tr("Silvercrest Multimedia Wireless", "kb_models"), + tr("SteelSeries Apex 300 (Apex RAW)", "kb_models"), + tr("Sun Type 6 (Japanese)", "kb_models"), + tr("Sun Type 6 USB (Japanese)", "kb_models"), + tr("Sun Type 6 USB (Unix)", "kb_models"), + tr("Sun Type 6/7 USB", "kb_models"), + tr("Sun Type 6/7 USB (European)", "kb_models"), + tr("Sun Type 7 USB", "kb_models"), + tr("Sun Type 7 USB (European)", "kb_models"), + tr("Sun Type 7 USB (Japanese)/Japanese 106-key", "kb_models"), + tr("Sun Type 7 USB (Unix)", "kb_models"), + tr("Super Power Multimedia", "kb_models"), + tr("Symplon PaceBook tablet", "kb_models"), + tr("Targa Visionary 811", "kb_models"), + tr("Toshiba Satellite S3000", "kb_models"), + tr("Truly Ergonomic 227", "kb_models"), + tr("Truly Ergonomic 229", "kb_models"), + tr("Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)", "kb_models"), + tr("Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)", "kb_models"), + tr("Trust Direct Access", "kb_models"), + tr("Trust Slimline", "kb_models"), + tr("Trust Wireless Classic", "kb_models"), + tr("TypeMatrix EZ-Reach 2020", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 PS2", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 USB", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 USB (106:JP mode)", "kb_models"), + tr("Unitek KB-1925", "kb_models"), + tr("ViewSonic KU-306 Internet", "kb_models"), + tr("Winbook Model XP5", "kb_models"), + tr("Yahoo! Internet", "kb_models"), + tr("eMachines m6800 laptop", "kb_models"), + QString() + }; +} +} + +/* This returns a reference to local, which is a terrible idea. + * Good thing it's not meant to be compiled. + */ +class kb_layouts : public QObject { +Q_OBJECT +public: + const QStringList& table() + { + return QStringList { + tr("Afghani", "kb_layouts"), + tr("Albanian", "kb_layouts"), + tr("Amharic", "kb_layouts"), + tr("Arabic", "kb_layouts"), + tr("Arabic (Morocco)", "kb_layouts"), + tr("Arabic (Syria)", "kb_layouts"), + tr("Armenian", "kb_layouts"), + tr("Azerbaijani", "kb_layouts"), + tr("Bambara", "kb_layouts"), + tr("Bangla", "kb_layouts"), + tr("Belarusian", "kb_layouts"), + tr("Belgian", "kb_layouts"), + tr("Bosnian", "kb_layouts"), + tr("Braille", "kb_layouts"), + tr("Bulgarian", "kb_layouts"), + tr("Burmese", "kb_layouts"), + tr("Chinese", "kb_layouts"), + tr("Croatian", "kb_layouts"), + tr("Czech", "kb_layouts"), + tr("Danish", "kb_layouts"), + tr("Dhivehi", "kb_layouts"), + tr("Dutch", "kb_layouts"), + tr("Dzongkha", "kb_layouts"), + tr("English (Australian)", "kb_layouts"), + tr("English (Cameroon)", "kb_layouts"), + tr("English (Ghana)", "kb_layouts"), + tr("English (Nigeria)", "kb_layouts"), + tr("English (South Africa)", "kb_layouts"), + tr("English (UK)", "kb_layouts"), + tr("English (US)", "kb_layouts"), + tr("Esperanto", "kb_layouts"), + tr("Estonian", "kb_layouts"), + tr("Faroese", "kb_layouts"), + tr("Filipino", "kb_layouts"), + tr("Finnish", "kb_layouts"), + tr("French", "kb_layouts"), + tr("French (Canada)", "kb_layouts"), + tr("French (Democratic Republic of the Congo)", "kb_layouts"), + tr("French (Guinea)", "kb_layouts"), + tr("French (Togo)", "kb_layouts"), + tr("Georgian", "kb_layouts"), + tr("German", "kb_layouts"), + tr("German (Austria)", "kb_layouts"), + tr("German (Switzerland)", "kb_layouts"), + tr("Greek", "kb_layouts"), + tr("Hebrew", "kb_layouts"), + tr("Hungarian", "kb_layouts"), + tr("Icelandic", "kb_layouts"), + tr("Indian", "kb_layouts"), + tr("Indonesian (Arab Melayu, phonetic)", "kb_layouts"), + tr("Indonesian (Javanese)", "kb_layouts"), + tr("Iraqi", "kb_layouts"), + tr("Irish", "kb_layouts"), + tr("Italian", "kb_layouts"), + tr("Japanese", "kb_layouts"), + tr("Japanese (PC-98)", "kb_layouts"), + tr("Kabylian (azerty layout, no dead keys)", "kb_layouts"), + tr("Kazakh", "kb_layouts"), + tr("Khmer (Cambodia)", "kb_layouts"), + tr("Korean", "kb_layouts"), + tr("Kyrgyz", "kb_layouts"), + tr("Lao", "kb_layouts"), + tr("Latvian", "kb_layouts"), + tr("Lithuanian", "kb_layouts"), + tr("Macedonian", "kb_layouts"), + tr("Malay (Jawi, Arabic Keyboard)", "kb_layouts"), + tr("Maltese", "kb_layouts"), + tr("Maori", "kb_layouts"), + tr("Moldavian", "kb_layouts"), + tr("Mongolian", "kb_layouts"), + tr("Montenegrin", "kb_layouts"), + tr("Nepali", "kb_layouts"), + tr("Norwegian", "kb_layouts"), + tr("Persian", "kb_layouts"), + tr("Polish", "kb_layouts"), + tr("Portuguese", "kb_layouts"), + tr("Portuguese (Brazil)", "kb_layouts"), + tr("Romanian", "kb_layouts"), + tr("Russian", "kb_layouts"), + tr("Serbian", "kb_layouts"), + tr("Sinhala (phonetic)", "kb_layouts"), + tr("Slovak", "kb_layouts"), + tr("Slovenian", "kb_layouts"), + tr("Spanish", "kb_layouts"), + tr("Spanish (Latin American)", "kb_layouts"), + tr("Swahili (Kenya)", "kb_layouts"), + tr("Swahili (Tanzania)", "kb_layouts"), + tr("Swedish", "kb_layouts"), + tr("Taiwanese", "kb_layouts"), + tr("Tajik", "kb_layouts"), + tr("Thai", "kb_layouts"), + tr("Tswana", "kb_layouts"), + tr("Turkish", "kb_layouts"), + tr("Turkmen", "kb_layouts"), + tr("Ukrainian", "kb_layouts"), + tr("Urdu (Pakistan)", "kb_layouts"), + tr("Uzbek", "kb_layouts"), + tr("Vietnamese", "kb_layouts"), + tr("Wolof", "kb_layouts"), + QString() + }; +} +} + +/* This returns a reference to local, which is a terrible idea. + * Good thing it's not meant to be compiled. + */ +class kb_variants : public QObject { +Q_OBJECT +public: + const QStringList& table() + { + return QStringList { + tr("Akan", "kb_variants"), + tr("Albanian (Plisi)", "kb_variants"), + tr("Albanian (Veqilharxhi)", "kb_variants"), + tr("Arabic (AZERTY)", "kb_variants"), + tr("Arabic (AZERTY, Eastern Arabic numerals)", "kb_variants"), + tr("Arabic (Algeria)", "kb_variants"), + tr("Arabic (Buckwalter)", "kb_variants"), + tr("Arabic (Eastern Arabic numerals)", "kb_variants"), + tr("Arabic (Macintosh)", "kb_variants"), + tr("Arabic (OLPC)", "kb_variants"), + tr("Arabic (Pakistan)", "kb_variants"), + tr("Arabic (QWERTY)", "kb_variants"), + tr("Arabic (QWERTY, Eastern Arabic numerals)", "kb_variants"), + tr("Armenian (alt. eastern)", "kb_variants"), + tr("Armenian (alt. phonetic)", "kb_variants"), + tr("Armenian (eastern)", "kb_variants"), + tr("Armenian (phonetic)", "kb_variants"), + tr("Armenian (western)", "kb_variants"), + tr("Asturian (Spain, with bottom-dot H and L)", "kb_variants"), + tr("Avatime", "kb_variants"), + tr("Azerbaijani (Cyrillic)", "kb_variants"), + tr("Bangla (India)", "kb_variants"), + tr("Bangla (India, Baishakhi Inscript)", "kb_variants"), + tr("Bangla (India, Baishakhi)", "kb_variants"), + tr("Bangla (India, Bornona)", "kb_variants"), + tr("Bangla (India, Gitanjali)", "kb_variants"), + tr("Bangla (India, Probhat)", "kb_variants"), + tr("Bangla (Probhat)", "kb_variants"), + tr("Bashkirian", "kb_variants"), + tr("Belarusian (Latin)", "kb_variants"), + tr("Belarusian (intl.)", "kb_variants"), + tr("Belarusian (legacy)", "kb_variants"), + tr("Belgian (ISO, alt.)", "kb_variants"), + tr("Belgian (Latin-9 only, alt.)", "kb_variants"), + tr("Belgian (Sun dead keys)", "kb_variants"), + tr("Belgian (Sun dead keys, alt.)", "kb_variants"), + tr("Belgian (Wang 724 AZERTY)", "kb_variants"), + tr("Belgian (alt.)", "kb_variants"), + tr("Belgian (no dead keys)", "kb_variants"), + tr("Berber (Morocco, Tifinagh alt.)", "kb_variants"), + tr("Berber (Morocco, Tifinagh extended phonetic)", "kb_variants"), + tr("Berber (Morocco, Tifinagh extended)", "kb_variants"), + tr("Berber (Morocco, Tifinagh phonetic)", "kb_variants"), + tr("Berber (Morocco, Tifinagh phonetic, alt.)", "kb_variants"), + tr("Berber (Morocco, Tifinagh)", "kb_variants"), + tr("Bosnian (US)", "kb_variants"), + tr("Bosnian (US, with Bosnian digraphs)", "kb_variants"), + tr("Bosnian (with Bosnian digraphs)", "kb_variants"), + tr("Bosnian (with guillemets)", "kb_variants"), + tr("Braille (left-handed inverted thumb)", "kb_variants"), + tr("Braille (left-handed)", "kb_variants"), + tr("Braille (right-handed inverted thumb)", "kb_variants"), + tr("Braille (right-handed)", "kb_variants"), + tr("Bulgarian (enhanced)", "kb_variants"), + tr("Bulgarian (new phonetic)", "kb_variants"), + tr("Bulgarian (traditional phonetic)", "kb_variants"), + tr("Burmese Zawgyi", "kb_variants"), + tr("Cameroon (AZERTY, intl.)", "kb_variants"), + tr("Cameroon (Dvorak, intl.)", "kb_variants"), + tr("Cameroon Multilingual (QWERTY, intl.)", "kb_variants"), + tr("Canadian (intl.)", "kb_variants"), + tr("Canadian (intl., 1st part)", "kb_variants"), + tr("Canadian (intl., 2nd part)", "kb_variants"), + tr("Catalan (Spain, with middle-dot L)", "kb_variants"), + tr("Cherokee", "kb_variants"), + tr("Chuvash", "kb_variants"), + tr("Chuvash (Latin)", "kb_variants"), + tr("CloGaelach", "kb_variants"), + tr("Crimean Tatar (Turkish Alt-Q)", "kb_variants"), + tr("Crimean Tatar (Turkish F)", "kb_variants"), + tr("Crimean Tatar (Turkish Q)", "kb_variants"), + tr("Croatian (US)", "kb_variants"), + tr("Croatian (US, with Croatian digraphs)", "kb_variants"), + tr("Croatian (with Croatian digraphs)", "kb_variants"), + tr("Croatian (with guillemets)", "kb_variants"), + tr("Czech (QWERTY)", "kb_variants"), + tr("Czech (QWERTY, Macintosh)", "kb_variants"), + tr("Czech (QWERTY, extended backslash)", "kb_variants"), + tr("Czech (UCW, only accented letters)", "kb_variants"), + tr("Czech (US, Dvorak, UCW support)", "kb_variants"), + tr("Czech (with <\|> key)", "kb_variants"), + tr("Danish (Dvorak)", "kb_variants"), + tr("Danish (Macintosh)", "kb_variants"), + tr("Danish (Macintosh, no dead keys)", "kb_variants"), + tr("Danish (Windows)", "kb_variants"), + tr("Danish (no dead keys)", "kb_variants"), + tr("Default", "kb_variants"), + tr("Dutch (Macintosh)", "kb_variants"), + tr("Dutch (Sun dead keys)", "kb_variants"), + tr("Dutch (standard)", "kb_variants"), + tr("English (Canada)", "kb_variants"), + tr("English (Colemak)", "kb_variants"), + tr("English (Dvorak)", "kb_variants"), + tr("English (Dvorak, alt. intl.)", "kb_variants"), + tr("English (Dvorak, intl., with dead keys)", "kb_variants"), + tr("English (Dvorak, left-handed)", "kb_variants"), + tr("English (Dvorak, right-handed)", "kb_variants"), + tr("English (Ghana, GILLBT)", "kb_variants"), + tr("English (Ghana, multilingual)", "kb_variants"), + tr("English (India, with rupee)", "kb_variants"), + tr("English (Macintosh)", "kb_variants"), + tr("English (Mali, US, Macintosh)", "kb_variants"), + tr("English (Mali, US, intl.)", "kb_variants"), + tr("English (Norman)", "kb_variants"), + tr("English (UK, Colemak)", "kb_variants"), + tr("English (UK, Dvorak)", "kb_variants"), + tr("English (UK, Dvorak, with UK punctuation)", "kb_variants"), + tr("English (UK, Macintosh)", "kb_variants"), + tr("English (UK, Macintosh, intl.)", "kb_variants"), + tr("English (UK, extended, Windows)", "kb_variants"), + tr("English (UK, intl., with dead keys)", "kb_variants"), + tr("English (US, Symbolic)", "kb_variants"), + tr("English (US, alt. intl.)", "kb_variants"), + tr("English (US, euro on 5)", "kb_variants"), + tr("English (US, intl., with dead keys)", "kb_variants"), + tr("English (Workman)", "kb_variants"), + tr("English (Workman, intl., with dead keys)", "kb_variants"), + tr("English (classic Dvorak)", "kb_variants"), + tr("English (intl., with AltGr dead keys)", "kb_variants"), + tr("English (programmer Dvorak)", "kb_variants"), + tr("English (the divide/multiply toggle the layout)", "kb_variants"), + tr("Esperanto (Brazil, Nativo)", "kb_variants"), + tr("Esperanto (Portugal, Nativo)", "kb_variants"), + tr("Esperanto (legacy)", "kb_variants"), + tr("Estonian (Dvorak)", "kb_variants"), + tr("Estonian (US)", "kb_variants"), + tr("Estonian (no dead keys)", "kb_variants"), + tr("Ewe", "kb_variants"), + tr("Faroese (no dead keys)", "kb_variants"), + tr("Filipino (Capewell-Dvorak, Baybayin)", "kb_variants"), + tr("Filipino (Capewell-Dvorak, Latin)", "kb_variants"), + tr("Filipino (Capewell-QWERF 2006, Baybayin)", "kb_variants"), + tr("Filipino (Capewell-QWERF 2006, Latin)", "kb_variants"), + tr("Filipino (Colemak, Baybayin)", "kb_variants"), + tr("Filipino (Colemak, Latin)", "kb_variants"), + tr("Filipino (Dvorak, Baybayin)", "kb_variants"), + tr("Filipino (Dvorak, Latin)", "kb_variants"), + tr("Filipino (QWERTY, Baybayin)", "kb_variants"), + tr("Finnish (Macintosh)", "kb_variants"), + tr("Finnish (Windows)", "kb_variants"), + tr("Finnish (classic)", "kb_variants"), + tr("Finnish (classic, no dead keys)", "kb_variants"), + tr("French (AZERTY)", "kb_variants"), + tr("French (AZERTY, AFNOR)", "kb_variants"), + tr("French (BEPO)", "kb_variants"), + tr("French (BEPO, AFNOR)", "kb_variants"), + tr("French (BEPO, Latin-9 only)", "kb_variants"), + tr("French (Breton)", "kb_variants"), + tr("French (Cameroon)", "kb_variants"), + tr("French (Canada, Dvorak)", "kb_variants"), + tr("French (Canada, legacy)", "kb_variants"), + tr("French (Dvorak)", "kb_variants"), + tr("French (Macintosh)", "kb_variants"), + tr("French (Mali, alt.)", "kb_variants"), + tr("French (Morocco)", "kb_variants"), + tr("French (Sun dead keys)", "kb_variants"), + tr("French (Switzerland)", "kb_variants"), + tr("French (Switzerland, Macintosh)", "kb_variants"), + tr("French (Switzerland, Sun dead keys)", "kb_variants"), + tr("French (Switzerland, no dead keys)", "kb_variants"), + tr("French (US)", "kb_variants"), + tr("French (alt.)", "kb_variants"), + tr("French (alt., Latin-9 only)", "kb_variants"), + tr("French (alt., Sun dead keys)", "kb_variants"), + tr("French (alt., no dead keys)", "kb_variants"), + tr("French (legacy, alt.)", "kb_variants"), + tr("French (legacy, alt., Sun dead keys)", "kb_variants"), + tr("French (legacy, alt., no dead keys)", "kb_variants"), + tr("French (no dead keys)", "kb_variants"), + tr("Friulian (Italy)", "kb_variants"), + tr("Fula", "kb_variants"), + tr("Ga", "kb_variants"), + tr("Georgian (France, AZERTY Tskapo)", "kb_variants"), + tr("Georgian (Italy)", "kb_variants"), + tr("Georgian (MESS)", "kb_variants"), + tr("Georgian (ergonomic)", "kb_variants"), + tr("German (Austria, Macintosh)", "kb_variants"), + tr("German (Austria, Sun dead keys)", "kb_variants"), + tr("German (Austria, no dead keys)", "kb_variants"), + tr("German (Dvorak)", "kb_variants"), + tr("German (E1)", "kb_variants"), + tr("German (E2)", "kb_variants"), + tr("German (Macintosh)", "kb_variants"), + tr("German (Macintosh, no dead keys)", "kb_variants"), + tr("German (Neo 2)", "kb_variants"), + tr("German (QWERTY)", "kb_variants"), + tr("German (Sun dead keys)", "kb_variants"), + tr("German (Switzerland, Macintosh)", "kb_variants"), + tr("German (Switzerland, Sun dead keys)", "kb_variants"), + tr("German (Switzerland, legacy)", "kb_variants"), + tr("German (Switzerland, no dead keys)", "kb_variants"), + tr("German (T3)", "kb_variants"), + tr("German (US)", "kb_variants"), + tr("German (dead acute)", "kb_variants"), + tr("German (dead grave acute)", "kb_variants"), + tr("German (dead tilde)", "kb_variants"), + tr("German (no dead keys)", "kb_variants"), + tr("Greek (extended)", "kb_variants"), + tr("Greek (no dead keys)", "kb_variants"), + tr("Greek (polytonic)", "kb_variants"), + tr("Greek (simple)", "kb_variants"), + tr("Gujarati", "kb_variants"), + tr("Hanyu Pinyin (with AltGr dead keys)", "kb_variants"), + tr("Hausa (Ghana)", "kb_variants"), + tr("Hausa (Nigeria)", "kb_variants"), + tr("Hawaiian", "kb_variants"), + tr("Hebrew (Biblical, Tiro)", "kb_variants"), + tr("Hebrew (lyx)", "kb_variants"), + tr("Hebrew (phonetic)", "kb_variants"), + tr("Hindi (Bolnagri)", "kb_variants"), + tr("Hindi (KaGaPa, phonetic)", "kb_variants"), + tr("Hindi (Wx)", "kb_variants"), + tr("Hungarian (QWERTY)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (no dead keys)", "kb_variants"), + tr("Hungarian (standard)", "kb_variants"), + tr("Icelandic (Dvorak)", "kb_variants"), + tr("Icelandic (Macintosh)", "kb_variants"), + tr("Icelandic (Macintosh, legacy)", "kb_variants"), + tr("Icelandic (Sun dead keys)", "kb_variants"), + tr("Icelandic (no dead keys)", "kb_variants"), + tr("Igbo", "kb_variants"), + tr("Indic (phonetic, IPA)", "kb_variants"), + tr("Indonesian (Arab Melayu, extended phonetic)", "kb_variants"), + tr("Inuktitut", "kb_variants"), + tr("Irish (UnicodeExpert)", "kb_variants"), + tr("Italian (IBM 142)", "kb_variants"), + tr("Italian (Macintosh)", "kb_variants"), + tr("Italian (US)", "kb_variants"), + tr("Italian (Windows)", "kb_variants"), + tr("Italian (intl., with dead keys)", "kb_variants"), + tr("Italian (no dead keys)", "kb_variants"), + tr("Japanese (Dvorak)", "kb_variants"), + tr("Japanese (Kana 86)", "kb_variants"), + tr("Japanese (Kana)", "kb_variants"), + tr("Japanese (Macintosh)", "kb_variants"), + tr("Japanese (OADG 109A)", "kb_variants"), + tr("Kabylian (Algeria, Tifinagh)", "kb_variants"), + tr("Kabylian (azerty layout, with dead keys)", "kb_variants"), + tr("Kabylian (qwerty-gb layout, with dead keys)", "kb_variants"), + tr("Kabylian (qwerty-us layout, with dead keys)", "kb_variants"), + tr("Kalmyk", "kb_variants"), + tr("Kannada", "kb_variants"), + tr("Kannada (KaGaPa, phonetic)", "kb_variants"), + tr("Kashubian", "kb_variants"), + tr("Kazakh (Latin)", "kb_variants"), + tr("Kazakh (extended)", "kb_variants"), + tr("Kazakh (with Russian)", "kb_variants"), + tr("Kikuyu", "kb_variants"), + tr("Komi", "kb_variants"), + tr("Korean (101/104-key compatible)", "kb_variants"), + tr("Kurdish (Iran, Arabic-Latin)", "kb_variants"), + tr("Kurdish (Iran, F)", "kb_variants"), + tr("Kurdish (Iran, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Iran, Latin Q)", "kb_variants"), + tr("Kurdish (Iraq, Arabic-Latin)", "kb_variants"), + tr("Kurdish (Iraq, F)", "kb_variants"), + tr("Kurdish (Iraq, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Iraq, Latin Q)", "kb_variants"), + tr("Kurdish (Syria, F)", "kb_variants"), + tr("Kurdish (Syria, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Syria, Latin Q)", "kb_variants"), + tr("Kurdish (Turkey, F)", "kb_variants"), + tr("Kurdish (Turkey, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Turkey, Latin Q)", "kb_variants"), + tr("Kyrgyz (phonetic)", "kb_variants"), + tr("Lao (STEA)", "kb_variants"), + tr("Latvian (F)", "kb_variants"), + tr("Latvian (adapted)", "kb_variants"), + tr("Latvian (apostrophe)", "kb_variants"), + tr("Latvian (ergonomic, ŪGJRMV)", "kb_variants"), + tr("Latvian (modern)", "kb_variants"), + tr("Latvian (tilde)", "kb_variants"), + tr("Lithuanian (IBM LST 1205-92)", "kb_variants"), + tr("Lithuanian (LEKP)", "kb_variants"), + tr("Lithuanian (LEKPa)", "kb_variants"), + tr("Lithuanian (US)", "kb_variants"), + tr("Lithuanian (standard)", "kb_variants"), + tr("Lower Sorbian", "kb_variants"), + tr("Lower Sorbian (QWERTZ)", "kb_variants"), + tr("Macedonian (no dead keys)", "kb_variants"), + tr("Malay (Jawi, phonetic)", "kb_variants"), + tr("Malayalam", "kb_variants"), + tr("Malayalam (Lalitha)", "kb_variants"), + tr("Malayalam (enhanced Inscript, with rupee)", "kb_variants"), + tr("Maltese (UK, with AltGr overrides)", "kb_variants"), + tr("Maltese (US layout with AltGr overrides)", "kb_variants"), + tr("Maltese (US)", "kb_variants"), + tr("Manipuri (Eeyek)", "kb_variants"), + tr("Marathi (KaGaPa, phonetic)", "kb_variants"), + tr("Marathi (enhanced Inscript)", "kb_variants"), + tr("Mari", "kb_variants"), + tr("Mmuock", "kb_variants"), + tr("Moldavian (Gagauz)", "kb_variants"), + tr("Mongolian (Bichig)", "kb_variants"), + tr("Mongolian (Galik)", "kb_variants"), + tr("Mongolian (Manchu Galik)", "kb_variants"), + tr("Mongolian (Manchu)", "kb_variants"), + tr("Mongolian (Todo Galik)", "kb_variants"), + tr("Mongolian (Todo)", "kb_variants"), + tr("Mongolian (Xibe)", "kb_variants"), + tr("Montenegrin (Cyrillic)", "kb_variants"), + tr("Montenegrin (Cyrillic, ZE and ZHE swapped)", "kb_variants"), + tr("Montenegrin (Cyrillic, with guillemets)", "kb_variants"), + tr("Montenegrin (Latin, QWERTY)", "kb_variants"), + tr("Montenegrin (Latin, Unicode)", "kb_variants"), + tr("Montenegrin (Latin, Unicode, QWERTY)", "kb_variants"), + tr("Montenegrin (Latin, with guillemets)", "kb_variants"), + tr("Northern Saami (Finland)", "kb_variants"), + tr("Northern Saami (Norway)", "kb_variants"), + tr("Northern Saami (Norway, no dead keys)", "kb_variants"), + tr("Northern Saami (Sweden)", "kb_variants"), + tr("Norwegian (Colemak)", "kb_variants"), + tr("Norwegian (Dvorak)", "kb_variants"), + tr("Norwegian (Macintosh)", "kb_variants"), + tr("Norwegian (Macintosh, no dead keys)", "kb_variants"), + tr("Norwegian (Windows)", "kb_variants"), + tr("Norwegian (no dead keys)", "kb_variants"), + tr("Occitan", "kb_variants"), + tr("Ogham", "kb_variants"), + tr("Ogham (IS434)", "kb_variants"), + tr("Ol Chiki", "kb_variants"), + tr("Oriya", "kb_variants"), + tr("Ossetian (Georgia)", "kb_variants"), + tr("Ossetian (Windows)", "kb_variants"), + tr("Ossetian (legacy)", "kb_variants"), + tr("Pannonian Rusyn", "kb_variants"), + tr("Pashto", "kb_variants"), + tr("Pashto (Afghanistan, OLPC)", "kb_variants"), + tr("Persian (Afghanistan, Dari OLPC)", "kb_variants"), + tr("Persian (with Persian keypad)", "kb_variants"), + tr("Polish (British keyboard)", "kb_variants"), + tr("Polish (Dvorak)", "kb_variants"), + tr("Polish (Dvorak, with Polish quotes on key 1)", "kb_variants"), + tr("Polish (Dvorak, with Polish quotes on quotemark key)", "kb_variants"), + tr("Polish (QWERTZ)", "kb_variants"), + tr("Polish (legacy)", "kb_variants"), + tr("Polish (programmer Dvorak)", "kb_variants"), + tr("Portuguese (Brazil, Dvorak)", "kb_variants"), + tr("Portuguese (Brazil, IBM/Lenovo ThinkPad)", "kb_variants"), + tr("Portuguese (Brazil, Nativo for US keyboards)", "kb_variants"), + tr("Portuguese (Brazil, Nativo)", "kb_variants"), + tr("Portuguese (Brazil, no dead keys)", "kb_variants"), + tr("Portuguese (Macintosh)", "kb_variants"), + tr("Portuguese (Macintosh, Sun dead keys)", "kb_variants"), + tr("Portuguese (Macintosh, no dead keys)", "kb_variants"), + tr("Portuguese (Nativo for US keyboards)", "kb_variants"), + tr("Portuguese (Nativo)", "kb_variants"), + tr("Portuguese (Sun dead keys)", "kb_variants"), + tr("Portuguese (no dead keys)", "kb_variants"), + tr("Punjabi (Gurmukhi Jhelum)", "kb_variants"), + tr("Punjabi (Gurmukhi)", "kb_variants"), + tr("Romanian (Germany)", "kb_variants"), + tr("Romanian (Germany, no dead keys)", "kb_variants"), + tr("Romanian (Windows)", "kb_variants"), + tr("Romanian (cedilla)", "kb_variants"), + tr("Romanian (standard cedilla)", "kb_variants"), + tr("Romanian (standard)", "kb_variants"), + tr("Russian (Belarus)", "kb_variants"), + tr("Russian (Czech, phonetic)", "kb_variants"), + tr("Russian (DOS)", "kb_variants"), + tr("Russian (Georgia)", "kb_variants"), + tr("Russian (Germany, phonetic)", "kb_variants"), + tr("Russian (Kazakhstan, with Kazakh)", "kb_variants"), + tr("Russian (Macintosh)", "kb_variants"), + tr("Russian (Poland, phonetic Dvorak)", "kb_variants"), + tr("Russian (Sweden, phonetic)", "kb_variants"), + tr("Russian (Sweden, phonetic, no dead keys)", "kb_variants"), + tr("Russian (US, phonetic)", "kb_variants"), + tr("Russian (Ukraine, standard RSTU)", "kb_variants"), + tr("Russian (legacy)", "kb_variants"), + tr("Russian (phonetic)", "kb_variants"), + tr("Russian (phonetic, AZERTY)", "kb_variants"), + tr("Russian (phonetic, Dvorak)", "kb_variants"), + tr("Russian (phonetic, French)", "kb_variants"), + tr("Russian (phonetic, Windows)", "kb_variants"), + tr("Russian (phonetic, YAZHERTY)", "kb_variants"), + tr("Russian (typewriter)", "kb_variants"), + tr("Russian (typewriter, legacy)", "kb_variants"), + tr("Saisiyat (Taiwan)", "kb_variants"), + tr("Samogitian", "kb_variants"), + tr("Sanskrit (KaGaPa, phonetic)", "kb_variants"), + tr("Serbian (Cyrillic, ZE and ZHE swapped)", "kb_variants"), + tr("Serbian (Cyrillic, with guillemets)", "kb_variants"), + tr("Serbian (Latin)", "kb_variants"), + tr("Serbian (Latin, QWERTY)", "kb_variants"), + tr("Serbian (Latin, Unicode)", "kb_variants"), + tr("Serbian (Latin, Unicode, QWERTY)", "kb_variants"), + tr("Serbian (Latin, with guillemets)", "kb_variants"), + tr("Serbian (Russia)", "kb_variants"), + tr("Serbo-Croatian (US)", "kb_variants"), + tr("Sicilian", "kb_variants"), + tr("Silesian", "kb_variants"), + tr("Sindhi", "kb_variants"), + tr("Sinhala (US)", "kb_variants"), + tr("Slovak (QWERTY)", "kb_variants"), + tr("Slovak (QWERTY, extended backslash)", "kb_variants"), + tr("Slovak (extended backslash)", "kb_variants"), + tr("Slovenian (US)", "kb_variants"), + tr("Slovenian (with guillemets)", "kb_variants"), + tr("Spanish (Dvorak)", "kb_variants"), + tr("Spanish (Latin American, Colemak for gaming)", "kb_variants"), + tr("Spanish (Latin American, Colemak)", "kb_variants"), + tr("Spanish (Latin American, Dvorak)", "kb_variants"), + tr("Spanish (Latin American, Sun dead keys)", "kb_variants"), + tr("Spanish (Latin American, dead tilde)", "kb_variants"), + tr("Spanish (Latin American, no dead keys)", "kb_variants"), + tr("Spanish (Macintosh)", "kb_variants"), + tr("Spanish (Sun dead keys)", "kb_variants"), + tr("Spanish (Windows)", "kb_variants"), + tr("Spanish (dead tilde)", "kb_variants"), + tr("Spanish (no dead keys)", "kb_variants"), + tr("Swedish (Dvorak)", "kb_variants"), + tr("Swedish (Dvorak, intl.)", "kb_variants"), + tr("Swedish (Macintosh)", "kb_variants"), + tr("Swedish (Svdvorak)", "kb_variants"), + tr("Swedish (US)", "kb_variants"), + tr("Swedish (no dead keys)", "kb_variants"), + tr("Swedish Sign Language", "kb_variants"), + tr("Syriac", "kb_variants"), + tr("Syriac (phonetic)", "kb_variants"), + tr("Taiwanese (indigenous)", "kb_variants"), + tr("Tajik (legacy)", "kb_variants"), + tr("Tamil (Inscript)", "kb_variants"), + tr("Tamil (Sri Lanka, TamilNet '99)", "kb_variants"), + tr("Tamil (Sri Lanka, TamilNet '99, TAB encoding)", "kb_variants"), + tr("Tamil (TamilNet '99 with Tamil numerals)", "kb_variants"), + tr("Tamil (TamilNet '99)", "kb_variants"), + tr("Tamil (TamilNet '99, TAB encoding)", "kb_variants"), + tr("Tamil (TamilNet '99, TSCII encoding)", "kb_variants"), + tr("Tatar", "kb_variants"), + tr("Telugu", "kb_variants"), + tr("Telugu (KaGaPa, phonetic)", "kb_variants"), + tr("Telugu (Sarala)", "kb_variants"), + tr("Thai (Pattachote)", "kb_variants"), + tr("Thai (TIS-820.2538)", "kb_variants"), + tr("Tibetan", "kb_variants"), + tr("Tibetan (with ASCII numerals)", "kb_variants"), + tr("Turkish (Alt-Q)", "kb_variants"), + tr("Turkish (F)", "kb_variants"), + tr("Turkish (Germany)", "kb_variants"), + tr("Turkish (Sun dead keys)", "kb_variants"), + tr("Turkish (intl., with dead keys)", "kb_variants"), + tr("Turkmen (Alt-Q)", "kb_variants"), + tr("Udmurt", "kb_variants"), + tr("Ukrainian (Windows)", "kb_variants"), + tr("Ukrainian (homophonic)", "kb_variants"), + tr("Ukrainian (legacy)", "kb_variants"), + tr("Ukrainian (phonetic)", "kb_variants"), + tr("Ukrainian (standard RSTU)", "kb_variants"), + tr("Ukrainian (typewriter)", "kb_variants"), + tr("Urdu (Pakistan, CRULP)", "kb_variants"), + tr("Urdu (Pakistan, NLA)", "kb_variants"), + tr("Urdu (Windows)", "kb_variants"), + tr("Urdu (alt. phonetic)", "kb_variants"), + tr("Urdu (phonetic)", "kb_variants"), + tr("Uyghur", "kb_variants"), + tr("Uzbek (Afghanistan)", "kb_variants"), + tr("Uzbek (Afghanistan, OLPC)", "kb_variants"), + tr("Uzbek (Latin)", "kb_variants"), + tr("Vietnamese (French)", "kb_variants"), + tr("Vietnamese (US)", "kb_variants"), + tr("Yakut", "kb_variants"), + tr("Yoruba", "kb_variants"), + QString() + }; +} +} + diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 7e24df570..ed171a476 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -1,26 +1,146 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "KeyboardLayoutModel.h" +#include "utils/Logger.h" +#include "utils/RAII.h" +#include "utils/Retranslator.h" + +#include + #include +static QTranslator* s_kbtranslator = nullptr; + +void +retranslateKeyboardModels() +{ + if ( !s_kbtranslator ) + { + s_kbtranslator = new QTranslator; + } + (void)CalamaresUtils::loadTranslator( + CalamaresUtils::translatorLocaleName(), QStringLiteral( "kb_" ), s_kbtranslator ); +} + + +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: + if ( s_kbtranslator && !s_kbtranslator->isEmpty() && m_contextname ) + { + auto s = s_kbtranslator->translate( m_contextname, item.label.toUtf8().data() ); + if ( !s.isEmpty() ) + { + return s; + } + } + 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 ) +{ + m_contextname = "kb_models"; + + // 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"; + setCurrentIndex(); // If pc105 was seen, select it now +} + KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent ) : QAbstractListModel( parent ) @@ -47,7 +167,18 @@ KeyboardLayoutModel::data( const QModelIndex& index, int role ) const switch ( role ) { case Qt::DisplayRole: - return m_layouts.at( index.row() ).second.description; + { + auto description = m_layouts.at( index.row() ).second.description; + if ( s_kbtranslator && !s_kbtranslator->isEmpty() ) + { + auto s = s_kbtranslator->translate( "kb_layouts", description.toUtf8().data() ); + if ( !s.isEmpty() ) + { + return s; + } + } + return description; + } case KeyboardVariantsRole: return QVariant::fromValue( m_layouts.at( index.row() ).second.variants ); case KeyboardLayoutKeyRole: @@ -68,6 +199,16 @@ KeyboardLayoutModel::item( const int& index ) const return m_layouts.at( index ); } +QString +KeyboardLayoutModel::key( int index ) const +{ + if ( index >= m_layouts.count() || index < 0 ) + { + return QString(); + } + return m_layouts.at( index ).first; +} + void KeyboardLayoutModel::init() { @@ -80,9 +221,8 @@ KeyboardLayoutModel::init() std::stable_sort( m_layouts.begin(), m_layouts.end(), []( const QPair< QString, KeyboardGlobal::KeyboardInfo >& a, - const QPair< QString, KeyboardGlobal::KeyboardInfo >& b ) { - return a.second.description < b.second.description; - } ); + const QPair< QString, KeyboardGlobal::KeyboardInfo >& b ) + { return a.second.description < b.second.description; } ); } QHash< int, QByteArray > @@ -92,15 +232,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 @@ -108,3 +251,24 @@ KeyboardLayoutModel::currentIndex() const { return m_currentIndex; } + + +KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent ) + : XKBListModel( parent ) +{ + m_contextname = "kb_variants"; +} + +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 }; + } + m_currentIndex = -1; + endResetModel(); +} diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index e0007fdbc..c2306c001 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDLAYOUTMODEL_H @@ -26,6 +17,85 @@ #include #include +/** @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; + const char* m_contextname = nullptr; +}; + + +/** @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 @@ -44,10 +114,17 @@ 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; + /** @brief xkb key for a given index (row) + * + * This is like calling data( QModelIndex( index ), KeyboardLayoutKeyRole ).toString(), + * but shorter and faster. Can return an empty string if index is invalid. + */ + QString key( int index ) const; + protected: QHash< int, QByteArray > roleNames() const override; @@ -60,4 +137,24 @@ 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 ); +}; + +/** @brief Adjust to changes in application language. + */ +void retranslateKeyboardModels(); + #endif // KEYBOARDLAYOUTMODEL_H diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 21e55d5d0..c821c4633 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -1,28 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "KeyboardPage.h" +#include "Config.h" #include "KeyboardLayoutModel.h" #include "SetKeyboardLayoutJob.h" #include "keyboardwidget/keyboardpreview.h" @@ -32,9 +25,9 @@ #include "JobQueue.h" #include "utils/Logger.h" #include "utils/Retranslator.h" +#include "utils/String.h" #include -#include #include class LayoutItem : public QListWidgetItem @@ -42,458 +35,89 @@ class LayoutItem : public QListWidgetItem public: QString data; - virtual ~LayoutItem(); + ~LayoutItem() override; }; 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 ); + { + auto* model = config->keyboardModels(); + model->setCurrentIndex(); // To default PC105 + ui->physicalModelSelector->setModel( model ); + ui->physicalModelSelector->setCurrentIndex( model->currentIndex() ); + } + { + auto* model = config->keyboardLayouts(); + ui->layoutSelector->setModel( model ); + ui->layoutSelector->setCurrentIndex( model->index( model->currentIndex() ) ); + } + { + auto* model = config->keyboardVariants(); + ui->variantSelector->setModel( model ); + ui->variantSelector->setCurrentIndex( model->index( model->currentIndex() ) ); + cDebug() << "Variants now total=" << model->rowCount() << "selected=" << model->currentIndex(); + } - // Connect signals and slots - connect( ui->listVariant, &QListWidget::currentItemChanged, this, &KeyboardPage::onListVariantCurrentItemChanged ); + connect( ui->buttonRestore, + &QPushButton::clicked, + [ config = config ] { config->keyboardModels()->setCurrentIndex(); } ); - connect( - ui->buttonRestore, &QPushButton::clicked, [this] { ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); } ); + 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->comboBoxModel, - static_cast< void ( QComboBox::* )( const QString& ) >( &QComboBox::currentIndexChanged ), - [this]( const QString& text ) { - QString model = m_models.value( text, "pc105" ); - - // Set Xorg keyboard model - QProcess::execute( "setxkbmap", QStringList { "-model", model } ); + 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 ) ); + m_keyboardPreview->setLayout( m_config->keyboardLayouts()->key( index ) ); + m_keyboardPreview->setVariant( + m_config->keyboardVariants()->key( m_config->keyboardVariants()->currentIndex() ) ); } ); - CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ) + 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 ) ); + m_keyboardPreview->setVariant( m_config->keyboardVariants()->key( index ) ); + } ); + CALAMARES_RETRANSLATE_SLOT( &KeyboardPage::retranslate ); } - KeyboardPage::~KeyboardPage() { delete ui; } - void -KeyboardPage::init() +KeyboardPage::retranslate() { - //### 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", QString::SkipEmptyParts ); - - 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( "+", QString::SkipEmptyParts ); - 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; - } - } - } - - //### 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 ) ); - } -} - - -QString -KeyboardPage::prettyStatus() const -{ - QString status; - status += tr( "Set keyboard model to %1.
" ).arg( ui->comboBoxModel->currentText() ); - - QString layout = ui->listLayout->currentIndex().data().toString(); - QString variant = ui->listVariant->currentItem() ? ui->listVariant->currentItem()->text() : QString( "" ); - 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(); - } - } - } - } - } -} - - -void -KeyboardPage::onActivate() -{ - /* Guessing a keyboard layout based on the locale means - * mapping between language identifiers in _ - * format to keyboard mappings, which are _ - * 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 _. - */ - 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", "eng_CA" }, /* 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 */ - } ); - - 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( '_', QString::SkipEmptyParts ); - - // 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; -} - -void -KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous ) -{ - 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; + ui->retranslateUi( this ); + m_config->retranslate(); } diff --git a/src/modules/keyboard/KeyboardPage.h b/src/modules/keyboard/KeyboardPage.h index 1ce21787c..1c644cc08 100644 --- a/src/modules/keyboard/KeyboardPage.h +++ b/src/modules/keyboard/KeyboardPage.h @@ -1,24 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDPAGE_H @@ -35,42 +27,22 @@ namespace Ui class Page_Keyboard; } +class Config; class KeyBoardPreview; class KeyboardPage : public QWidget { Q_OBJECT public: - explicit KeyboardPage( QWidget* parent = nullptr ); - virtual ~KeyboardPage(); + 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 ); + void retranslate(); 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 5df874b21..f7592fc6a 100644 --- a/src/modules/keyboard/KeyboardPage.ui +++ b/src/modules/keyboard/KeyboardPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + Page_Keyboard @@ -72,7 +76,7 @@ - + 0 @@ -106,10 +110,10 @@ 9 - + - + @@ -135,9 +139,9 @@
- comboBoxModel - listLayout - listVariant + physicalModelSelector + layoutSelector + variantSelector LE_TestKeyboard buttonRestore diff --git a/src/modules/keyboard/KeyboardViewStep.cpp b/src/modules/keyboard/KeyboardViewStep.cpp index e6e89eb1c..029e1ae85 100644 --- a/src/modules/keyboard/KeyboardViewStep.cpp +++ b/src/modules/keyboard/KeyboardViewStep.cpp @@ -1,41 +1,29 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #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 ); } @@ -58,7 +46,7 @@ KeyboardViewStep::prettyName() const QString KeyboardViewStep::prettyStatus() const { - return m_prettyStatus; + return m_config->prettyStatus(); } @@ -72,7 +60,7 @@ KeyboardViewStep::widget() bool KeyboardViewStep::isNextEnabled() const { - return m_nextEnabled; + return true; } @@ -100,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->guessLocaleKeyboardLayout(); } 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 208d50686..902b888fd 100644 --- a/src/modules/keyboard/KeyboardViewStep.h +++ b/src/modules/keyboard/KeyboardViewStep.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDVIEWSTEP_H @@ -26,6 +17,7 @@ #include +class Config; class KeyboardPage; class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep @@ -34,7 +26,7 @@ class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep public: explicit KeyboardViewStep( QObject* parent = nullptr ); - virtual ~KeyboardViewStep() override; + ~KeyboardViewStep() override; QString prettyName() const override; QString prettyStatus() const override; @@ -55,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/README.md b/src/modules/keyboard/README.md deleted file mode 100644 index cf4ce3994..000000000 --- a/src/modules/keyboard/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Keyboard layout configuration viewmodule ---- -Requires ckbcomp script. - * Debian package console-setup or - * Manjaro package keyboardctl https://github.com/manjaro/packages-core/tree/master/keyboardctl diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.cpp b/src/modules/keyboard/SetKeyboardLayoutJob.cpp index 5223e8fae..c80d84e7d 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.cpp +++ b/src/modules/keyboard/SetKeyboardLayoutJob.cpp @@ -1,25 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2014, Kevin Kofler + * SPDX-FileCopyrightText: 2011 Lennart Poettering + * SPDX-FileCopyrightText: Kay Sievers + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from systemd (localed.c): * Copyright 2011 Lennart Poettering * Copyright 2013 Kay Sievers * (originally under LGPLv2.1+, used under the LGPL to GPL conversion clause) * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetKeyboardLayoutJob.h" @@ -28,6 +21,7 @@ #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#include "utils/String.h" #include #include @@ -39,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 ) @@ -46,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 ) @@ -85,16 +81,21 @@ SetKeyboardLayoutJob::findConvertedKeymap( const QString& convertedKeymapPath ) } -QString -SetKeyboardLayoutJob::findLegacyKeymap() const +STATICTEST QString +findLegacyKeymap( const QString& layout, const QString& model, const QString& variant ) { - cDebug() << "Looking for legacy keymap in QRC"; + cDebug() << "Looking for legacy keymap" << layout << model << variant << "in QRC"; int bestMatching = 0; QString name; QFile file( ":/kbd-model-map" ); - file.open( QIODevice::ReadOnly | QIODevice::Text ); + if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + cDebug() << Logger::SubEntry << "Could not read QRC"; + return QString(); + } + QTextStream stream( &file ); while ( !stream.atEnd() ) { @@ -104,7 +105,7 @@ SetKeyboardLayoutJob::findLegacyKeymap() const continue; } - QStringList mapping = line.split( '\t', QString::SkipEmptyParts ); + QStringList mapping = line.split( '\t', SplitSkipEmptyParts ); if ( mapping.size() < 5 ) { continue; @@ -115,20 +116,20 @@ SetKeyboardLayoutJob::findLegacyKeymap() const // Determine how well matching this entry is // We assume here that we have one X11 layout. If the UI changes to // allow more than one layout, this should change too. - if ( m_layout == mapping[ 1 ] ) + if ( layout == mapping[ 1 ] ) // If we got an exact match, this is best { matching = 10; } // Look for an entry whose first layout matches ours - else if ( mapping[ 1 ].startsWith( m_layout + ',' ) ) + else if ( mapping[ 1 ].startsWith( layout + ',' ) ) { matching = 5; } if ( matching > 0 ) { - if ( m_model.isEmpty() || m_model == mapping[ 2 ] ) + if ( model.isEmpty() || model == mapping[ 2 ] ) { matching++; } @@ -143,7 +144,7 @@ SetKeyboardLayoutJob::findLegacyKeymap() const mappingVariant.remove( 1, 0 ); } - if ( m_variant == mappingVariant ) + if ( variant == mappingVariant ) { matching++; } @@ -168,10 +169,18 @@ SetKeyboardLayoutJob::findLegacyKeymap() const return name; } +QString +SetKeyboardLayoutJob::findLegacyKeymap() const +{ + return ::findLegacyKeymap( m_layout, m_model, m_variant ); +} + bool SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const QString& convertedKeymapPath ) const { + cDebug() << "Writing vconsole data to" << vconsoleConfPath; + QString keymap = findConvertedKeymap( convertedKeymapPath ); if ( keymap.isEmpty() ) { @@ -198,15 +207,20 @@ SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const file.close(); if ( stream.status() != QTextStream::Ok ) { + cError() << "Could not read lines from" << file.fileName(); return false; } } // Write out the existing lines and replace the KEYMAP= line - file.open( QIODevice::WriteOnly | QIODevice::Text ); + if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) ) + { + cError() << "Could not open" << file.fileName() << "for writing."; + return false; + } QTextStream stream( &file ); bool found = false; - foreach ( const QString& existingLine, existingLines ) + for ( const QString& existingLine : qAsConst( existingLines ) ) { if ( existingLine.trimmed().startsWith( "KEYMAP=" ) ) { @@ -226,7 +240,7 @@ SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const stream.flush(); file.close(); - cDebug() << "Written KEYMAP=" << keymap << "to vconsole.conf"; + cDebug() << Logger::SubEntry << "Written KEYMAP=" << keymap << "to vconsole.conf" << stream.status(); return ( stream.status() == QTextStream::Ok ); } @@ -235,8 +249,14 @@ SetKeyboardLayoutJob::writeVConsoleData( const QString& vconsoleConfPath, const bool SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const { + cDebug() << "Writing X11 configuration to" << keyboardConfPath; + QFile file( keyboardConfPath ); - file.open( QIODevice::WriteOnly | QIODevice::Text ); + if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) ) + { + cError() << "Could not open" << file.fileName() << "for writing."; + return false; + } QTextStream stream( &file ); stream << "# Read and parsed by systemd-localed. It's probably wise not to edit this file\n" @@ -245,19 +265,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"; @@ -265,8 +300,8 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const file.close(); - cDebug() << "Written XkbLayout" << m_layout << "; XkbModel" << m_model << "; XkbVariant" << m_variant - << "to X.org file" << keyboardConfPath; + cDebug() << Logger::SubEntry << "Written XkbLayout" << m_layout << "; XkbModel" << m_model << "; XkbVariant" + << m_variant << "to X.org file" << keyboardConfPath << stream.status(); return ( stream.status() == QTextStream::Ok ); } @@ -275,8 +310,14 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const bool SetKeyboardLayoutJob::writeDefaultKeyboardData( const QString& defaultKeyboardPath ) const { + cDebug() << "Writing default keyboard data to" << defaultKeyboardPath; + QFile file( defaultKeyboardPath ); - file.open( QIODevice::WriteOnly | QIODevice::Text ); + if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) ) + { + cError() << "Could not open" << defaultKeyboardPath << "for writing"; + return false; + } QTextStream stream( &file ); stream << "# KEYBOARD CONFIGURATION FILE\n\n" @@ -291,8 +332,8 @@ SetKeyboardLayoutJob::writeDefaultKeyboardData( const QString& defaultKeyboardPa file.close(); - cDebug() << "Written XKBMODEL" << m_model << "; XKBLAYOUT" << m_layout << "; XKBVARIANT" << m_variant - << "to /etc/default/keyboard file" << defaultKeyboardPath; + cDebug() << Logger::SubEntry << "Written XKBMODEL" << m_model << "; XKBLAYOUT" << m_layout << "; XKBVARIANT" + << m_variant << "to /etc/default/keyboard file" << defaultKeyboardPath << stream.status(); return ( stream.status() == QTextStream::Ok ); } @@ -307,60 +348,72 @@ SetKeyboardLayoutJob::exec() Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QDir destDir( gs->value( "rootMountPoint" ).toString() ); - // Get the path to the destination's /etc/vconsole.conf - QString vconsoleConfPath = destDir.absoluteFilePath( "etc/vconsole.conf" ); - - // Get the path to the destination's /etc/X11/xorg.conf.d/00-keyboard.conf - QString xorgConfDPath; - QString keyboardConfPath; - if ( QDir::isAbsolutePath( m_xOrgConfFileName ) ) { - keyboardConfPath = m_xOrgConfFileName; - while ( keyboardConfPath.startsWith( '/' ) ) + // Get the path to the destination's /etc/vconsole.conf + QString vconsoleConfPath = destDir.absoluteFilePath( "etc/vconsole.conf" ); + + // Get the path to the destination's path to the converted key mappings + QString convertedKeymapPath = m_convertedKeymapPath; + if ( !convertedKeymapPath.isEmpty() ) { - keyboardConfPath.remove( 0, 1 ); + while ( convertedKeymapPath.startsWith( '/' ) ) + { + convertedKeymapPath.remove( 0, 1 ); + } + convertedKeymapPath = destDir.absoluteFilePath( convertedKeymapPath ); } - keyboardConfPath = destDir.absoluteFilePath( keyboardConfPath ); - xorgConfDPath = QFileInfo( keyboardConfPath ).path(); - } - else - { - xorgConfDPath = destDir.absoluteFilePath( "etc/X11/xorg.conf.d" ); - keyboardConfPath = QDir( xorgConfDPath ).absoluteFilePath( m_xOrgConfFileName ); - } - destDir.mkpath( xorgConfDPath ); - QString defaultKeyboardPath; - if ( QDir( destDir.absoluteFilePath( "etc/default" ) ).exists() ) - { - defaultKeyboardPath = destDir.absoluteFilePath( "etc/default/keyboard" ); - } - - // Get the path to the destination's path to the converted key mappings - QString convertedKeymapPath = m_convertedKeymapPath; - if ( !convertedKeymapPath.isEmpty() ) - { - while ( convertedKeymapPath.startsWith( '/' ) ) + if ( !writeVConsoleData( vconsoleConfPath, convertedKeymapPath ) ) { - convertedKeymapPath.remove( 0, 1 ); + return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for the virtual console." ), + tr( "Failed to write to %1" ).arg( vconsoleConfPath ) ); } - convertedKeymapPath = destDir.absoluteFilePath( convertedKeymapPath ); } - if ( !writeVConsoleData( vconsoleConfPath, convertedKeymapPath ) ) - return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for the virtual console." ), - tr( "Failed to write to %1" ).arg( vconsoleConfPath ) ); - - if ( !writeX11Data( keyboardConfPath ) ) - return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11." ), - tr( "Failed to write to %1" ).arg( keyboardConfPath ) ); - - if ( !defaultKeyboardPath.isEmpty() && m_writeEtcDefaultKeyboard ) { - if ( !writeDefaultKeyboardData( defaultKeyboardPath ) ) - return Calamares::JobResult::error( - tr( "Failed to write keyboard configuration to existing /etc/default directory." ), - tr( "Failed to write to %1" ).arg( keyboardConfPath ) ); + // Get the path to the destination's /etc/X11/xorg.conf.d/00-keyboard.conf + QString xorgConfDPath; + QString keyboardConfPath; + if ( QDir::isAbsolutePath( m_xOrgConfFileName ) ) + { + keyboardConfPath = m_xOrgConfFileName; + while ( keyboardConfPath.startsWith( '/' ) ) + { + keyboardConfPath.remove( 0, 1 ); + } + keyboardConfPath = destDir.absoluteFilePath( keyboardConfPath ); + xorgConfDPath = QFileInfo( keyboardConfPath ).path(); + } + else + { + xorgConfDPath = destDir.absoluteFilePath( "etc/X11/xorg.conf.d" ); + keyboardConfPath = QDir( xorgConfDPath ).absoluteFilePath( m_xOrgConfFileName ); + } + destDir.mkpath( xorgConfDPath ); + + if ( !writeX11Data( keyboardConfPath ) ) + { + return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11." ), + tr( "Failed to write to %1" ).arg( keyboardConfPath ) ); + } + } + + { + QString defaultKeyboardPath; + if ( QDir( destDir.absoluteFilePath( "etc/default" ) ).exists() ) + { + defaultKeyboardPath = destDir.absoluteFilePath( "etc/default/keyboard" ); + } + + if ( !defaultKeyboardPath.isEmpty() && m_writeEtcDefaultKeyboard ) + { + if ( !writeDefaultKeyboardData( defaultKeyboardPath ) ) + { + return Calamares::JobResult::error( + tr( "Failed to write keyboard configuration to existing /etc/default directory." ), + tr( "Failed to write to %1" ).arg( defaultKeyboardPath ) ); + } + } } return Calamares::JobResult::ok(); diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.h b/src/modules/keyboard/SetKeyboardLayoutJob.h index 599642b19..15fadfb52 100644 --- a/src/modules/keyboard/SetKeyboardLayoutJob.h +++ b/src/modules/keyboard/SetKeyboardLayoutJob.h @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2014, Kevin Kofler + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETKEYBOARDLAYOUTJOB_H #define SETKEYBOARDLAYOUTJOB_H +#include "AdditionalLayoutInfo.h" #include "Job.h" @@ -30,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 ); @@ -47,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/Tests.cpp b/src/modules/keyboard/Tests.cpp new file mode 100644 index 000000000..4c6d0cebb --- /dev/null +++ b/src/modules/keyboard/Tests.cpp @@ -0,0 +1,67 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ +#include "utils/Logger.h" + +#include + +// Internals of SetKeyboardLayoutJob.cpp +extern QString findLegacyKeymap( const QString& layout, const QString& model, const QString& variant ); + +class KeyboardLayoutTests : public QObject +{ + Q_OBJECT +public: + KeyboardLayoutTests() {} + ~KeyboardLayoutTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testSimpleLayoutLookup_data(); + void testSimpleLayoutLookup(); +}; + +void +KeyboardLayoutTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); +} + +void +KeyboardLayoutTests::testSimpleLayoutLookup_data() +{ + QTest::addColumn< QString >( "layout" ); + QTest::addColumn< QString >( "model" ); + QTest::addColumn< QString >( "variant" ); + QTest::addColumn< QString >( "vconsole" ); + + QTest::newRow( "us" ) << QString( "us" ) << QString() << QString() << QString( "us" ); + QTest::newRow( "turkish default" ) << QString( "tr" ) << QString() << QString() << QString( "trq" ); + QTest::newRow( "turkish alt-q" ) << QString( "tr" ) << QString() << QString( "alt" ) << QString( "trq" ); + QTest::newRow( "turkish f" ) << QString( "tr" ) << QString() << QString( "f" ) << QString( "trf" ); +} + + +void +KeyboardLayoutTests::testSimpleLayoutLookup() +{ + QFETCH( QString, layout ); + QFETCH( QString, model ); + QFETCH( QString, variant ); + QFETCH( QString, vconsole ); + + QCOMPARE( findLegacyKeymap( layout, model, variant ), vconsole ); +} + + +QTEST_GUILESS_MAIN( KeyboardLayoutTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/keyboard/images/restore.png.license b/src/modules/keyboard/images/restore.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/keyboard/images/restore.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboard/kbd-model-map b/src/modules/keyboard/kbd-model-map index 49ec4ad75..6ec00c81b 100644 --- a/src/modules/keyboard/kbd-model-map +++ b/src/modules/keyboard/kbd-model-map @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2015 Systemd authors and contributors +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +# # Copied from systemd-localed # # https://cgit.freedesktop.org/systemd/systemd/log/src/locale/kbd-model-map @@ -8,6 +12,13 @@ # # Updates: # - 2018-09-26 Added "Austrian" keyboard (de at). Issue #1035 +# - 2020-09-09 Added "Turkish F" keyboard. Issue #1397 +# +# Note that keyboard variants should be listed from least to most-specific +# within a layout. Keyboard lookups only consider a subsequent +# line if it has a strictly better match than previous ones: +# listing specific variants early can mean a poor match with them +# is not overridden by a poor match with a later generic variant. # # Generated from system-config-keyboard's model list # consolelayout xlayout xmodel xvariant xoptions @@ -15,6 +26,7 @@ sg ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp nl nl pc105 - terminate:ctrl_alt_bksp mk-utf mk,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll trq tr pc105 - terminate:ctrl_alt_bksp +trf tr pc105 f terminate:ctrl_alt_bksp uk gb pc105 - terminate:ctrl_alt_bksp is-latin1 is pc105 - terminate:ctrl_alt_bksp de de pc105 - terminate:ctrl_alt_bksp diff --git a/src/modules/keyboard/keyboard.conf b/src/modules/keyboard/keyboard.conf index ee97c3939..3b2f3a312 100644 --- a/src/modules/keyboard/keyboard.conf +++ b/src/modules/keyboard/keyboard.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- @@ -6,8 +9,12 @@ # Relative paths are assumed to be relative to /etc/X11/xorg.conf.d xOrgConfFileName: "/etc/X11/xorg.conf.d/00-keyboard.conf" -# The path to search for keymaps converted from X11 to kbd format +# The path to search for keymaps converted from X11 to kbd format. +# Common paths for this are: +# - /lib/kbd/keymaps/xkb +# - /usr/share/kbd/keymaps/xkb # Leave this empty if the setting does not make sense on your distribution. +# convertedKeymapPath: "/lib/kbd/keymaps/xkb" # Write keymap configuration to /etc/default/keyboard, usually diff --git a/src/modules/keyboard/keyboard.qrc b/src/modules/keyboard/keyboard.qrc index dd211e630..4283d8190 100644 --- a/src/modules/keyboard/keyboard.qrc +++ b/src/modules/keyboard/keyboard.qrc @@ -2,5 +2,6 @@ kbd-model-map images/restore.png + non-ascii-layouts
diff --git a/src/modules/keyboard/keyboard.schema.yaml b/src/modules/keyboard/keyboard.schema.yaml new file mode 100644 index 000000000..08a2ababe --- /dev/null +++ b/src/modules/keyboard/keyboard.schema.yaml @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/finished +additionalProperties: false +type: object +properties: + xOrgConfFileName: { type: string } + convertedKeymapPath: { type: string } + writeEtcDefaultKeyboard: { type: boolean, default: true } +required: [ xOrgConfFileName, convertedKeymapPath ] diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp index f363ea844..d01c8b591 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp @@ -1,7 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer @@ -9,18 +11,8 @@ * * Source by Georg Grabler * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "keyboardglobal.h" @@ -43,18 +35,22 @@ static const char XKB_FILE[] = "/usr/share/X11/xkb/rules/base.lst"; * or hits end-of-file. Returns true if the section is found. The * @p name must include the "! " section marker as well. */ -static bool findSection( QFile& fh, const char* name ) +static bool +findSection( QFile& fh, const char* name ) { while ( !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( name ) ) + { return true; + } } return false; } -static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) +static KeyboardGlobal::ModelsMap +parseKeyboardModels( const char* filepath ) { KeyboardGlobal::ModelsMap models; @@ -75,9 +71,11 @@ static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) // check if we start a new section if ( line.startsWith( '!' ) ) + { 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$" ); @@ -86,10 +84,6 @@ static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) { QString modelDesc = rx.cap( 2 ); QString model = rx.cap( 1 ); - - if ( model == "pc105" ) - modelDesc += " - " + QObject::tr( "Default Keyboard Model" ); - models.insert( modelDesc, model ); } } @@ -98,7 +92,8 @@ static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) } -KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) +KeyboardGlobal::LayoutsMap +parseKeyboardLayouts( const char* filepath ) { KeyboardGlobal::LayoutsMap layouts; @@ -120,7 +115,9 @@ KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) + { break; + } QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); @@ -147,7 +144,9 @@ KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) + { break; + } QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\S+): (\\w.*)\n$" ); @@ -176,14 +175,15 @@ KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) } -KeyboardGlobal::LayoutsMap KeyboardGlobal::getKeyboardLayouts() +KeyboardGlobal::LayoutsMap +KeyboardGlobal::getKeyboardLayouts() { return parseKeyboardLayouts( XKB_FILE ); } -KeyboardGlobal::ModelsMap KeyboardGlobal::getKeyboardModels() +KeyboardGlobal::ModelsMap +KeyboardGlobal::getKeyboardModels() { return parseKeyboardModels( XKB_FILE ); } - diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.h b/src/modules/keyboard/keyboardwidget/keyboardglobal.h index 1732dc913..07c6e5ea2 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.h +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.h @@ -1,44 +1,37 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDGLOBAL_H #define KEYBOARDGLOBAL_H -#include -#include -#include +#include #include -#include -#include +#include #include +#include #include #include -#include +#include +#include +#include class KeyboardGlobal { public: - struct KeyboardInfo { + struct KeyboardInfo + { QString description; QMap< QString, QString > variants; }; @@ -50,4 +43,4 @@ public: static ModelsMap getKeyboardModels(); }; -#endif // KEYBOARDGLOBAL_H +#endif // KEYBOARDGLOBAL_H diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp index 26aa18d87..04ca5f20f 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp @@ -1,29 +1,25 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include "utils/Logger.h" #include "keyboardpreview.h" +#include "utils/Logger.h" +#include "utils/String.h" + +#include + KeyBoardPreview::KeyBoardPreview( QWidget* parent ) : QWidget( parent ) , layout( "us" ) @@ -31,307 +27,377 @@ KeyBoardPreview::KeyBoardPreview( QWidget* parent ) , usable_width( 0 ) , key_w( 0 ) { - setMinimumSize(700, 191); + setMinimumSize( 700, 191 ); // We must set up the font size in pixels to fit the keys - lowerFont = QFont("Helvetica", 10, QFont::DemiBold); - lowerFont.setPixelSize(16); - upperFont = QFont("Helvetica", 8); - upperFont.setPixelSize(13); + lowerFont = QFont( "Helvetica", 10, QFont::DemiBold ); + lowerFont.setPixelSize( 16 ); + upperFont = QFont( "Helvetica", 8 ); + upperFont.setPixelSize( 13 ); // Setup keyboard types - kbList[KB_104].kb_extended_return = false; - kbList[KB_104].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd); - kbList[KB_104].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b << 0x2b); - kbList[KB_104].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28); - kbList[KB_104].keys.append(QList() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35); + kbList[ KB_104 ].kb_extended_return = false; + kbList[ KB_104 ].keys.append( QList< int >() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa + << 0xb << 0xc << 0xd ); + kbList[ KB_104 ].keys.append( QList< int >() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 + << 0x19 << 0x1a << 0x1b << 0x2b ); + kbList[ KB_104 ].keys.append( QList< int >() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 + << 0x27 << 0x28 ); + kbList[ KB_104 ].keys.append( QList< int >() + << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35 ); - kbList[KB_105].kb_extended_return = true; - kbList[KB_105].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd); - kbList[KB_105].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b); - kbList[KB_105].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28 << 0x2b); - kbList[KB_105].keys.append(QList() << 0x54 << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35); + kbList[ KB_105 ].kb_extended_return = true; + kbList[ KB_105 ].keys.append( QList< int >() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa + << 0xb << 0xc << 0xd ); + kbList[ KB_105 ].keys.append( QList< int >() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 + << 0x19 << 0x1a << 0x1b ); + kbList[ KB_105 ].keys.append( QList< int >() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 + << 0x27 << 0x28 << 0x2b ); + kbList[ KB_105 ].keys.append( QList< int >() << 0x54 << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 + << 0x34 << 0x35 ); - kbList[KB_106].kb_extended_return = true; - kbList[KB_106].keys.append(QList() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa << 0xb << 0xc << 0xd << 0xe); - kbList[KB_106].keys.append(QList() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 << 0x19 << 0x1a << 0x1b); - kbList[KB_106].keys.append(QList() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 << 0x27 << 0x28 << 0x29); - kbList[KB_106].keys.append(QList() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 << 0x35 << 0x36); + kbList[ KB_106 ].kb_extended_return = true; + kbList[ KB_106 ].keys.append( QList< int >() << 0x29 << 0x2 << 0x3 << 0x4 << 0x5 << 0x6 << 0x7 << 0x8 << 0x9 << 0xa + << 0xb << 0xc << 0xd << 0xe ); + kbList[ KB_106 ].keys.append( QList< int >() << 0x10 << 0x11 << 0x12 << 0x13 << 0x14 << 0x15 << 0x16 << 0x17 << 0x18 + << 0x19 << 0x1a << 0x1b ); + kbList[ KB_106 ].keys.append( QList< int >() << 0x1e << 0x1f << 0x20 << 0x21 << 0x22 << 0x23 << 0x24 << 0x25 << 0x26 + << 0x27 << 0x28 << 0x29 ); + kbList[ KB_106 ].keys.append( QList< int >() << 0x2c << 0x2d << 0x2e << 0x2f << 0x30 << 0x31 << 0x32 << 0x33 << 0x34 + << 0x35 << 0x36 ); - kb = &kbList[KB_104]; + kb = &kbList[ KB_104 ]; } - -void KeyBoardPreview::setLayout(QString _layout) { +void +KeyBoardPreview::setLayout( QString _layout ) +{ layout = _layout; } - -void KeyBoardPreview::setVariant(QString _variant) { +void +KeyBoardPreview::setVariant( QString _variant ) +{ variant = _variant; - if (!loadCodes()) + if ( !loadCodes() ) + { return; + } loadInfo(); repaint(); } - //### //### Private //### - -void KeyBoardPreview::loadInfo() { +void +KeyBoardPreview::loadInfo() +{ // kb_104 - if (layout == "us" || layout == "th") - kb = &kbList[KB_104]; + if ( layout == "us" || layout == "th" ) + { + kb = &kbList[ KB_104 ]; + } // kb_106 - else if (layout == "jp") - kb = &kbList[KB_106]; + else if ( layout == "jp" ) + { + kb = &kbList[ KB_106 ]; + } // most keyboards are 105 key so default to that else - kb = &kbList[KB_105]; + { + kb = &kbList[ KB_105 ]; + } } - -bool KeyBoardPreview::loadCodes() { - if (layout.isEmpty()) - return false; - - QStringList param; - param << "-model" << "pc106" << "-layout" << layout << "-compact"; - if (!variant.isEmpty()) - param << "-variant" << variant; - - - QProcess process; - process.setEnvironment(QStringList() << "LANG=C" << "LC_MESSAGES=C"); - process.start("ckbcomp", param); - if (!process.waitForStarted()) +bool +KeyBoardPreview::loadCodes() +{ + if ( layout.isEmpty() ) { - cWarning() << "ckbcomp not found , keyboard preview disabled"; return false; } - if (!process.waitForFinished()) + QStringList param { "-model", "pc106", "-layout", layout, "-compact" }; + if ( !variant.isEmpty() ) { - cWarning() << "ckbcomp failed, keyboard preview disabled"; + param << "-variant" << variant; + } + + + QProcess process; + process.setEnvironment( QStringList() << "LANG=C" + << "LC_MESSAGES=C" ); + process.start( "ckbcomp", param ); + if ( !process.waitForStarted() ) + { + static bool need_warning = true; + if ( need_warning ) + { + cWarning() << "ckbcomp not found , keyboard preview disabled"; + need_warning = false; + } + return false; + } + + if ( !process.waitForFinished() ) + { + cWarning() << "ckbcomp failed, keyboard preview skipped for" << layout << variant; return false; } // Clear codes codes.clear(); - const QStringList list = QString(process.readAll()).split("\n", QString::SkipEmptyParts); + const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); - for (const QString &line : list) { - if (!line.startsWith("keycode") || !line.contains('=')) + for ( const QString& line : list ) + { + if ( !line.startsWith( "keycode" ) || !line.contains( '=' ) ) + { continue; + } - QStringList split = line.split('=').at(1).trimmed().split(' '); - if (split.size() < 4) + QStringList split = line.split( '=' ).at( 1 ).trimmed().split( ' ' ); + if ( split.size() < 4 ) + { continue; + } Code code; - code.plain = fromUnicodeString(split.at(0)); - code.shift = fromUnicodeString(split.at(1)); - code.ctrl = fromUnicodeString(split.at(2)); - code.alt = fromUnicodeString(split.at(3)); + code.plain = fromUnicodeString( split.at( 0 ) ); + code.shift = fromUnicodeString( split.at( 1 ) ); + code.ctrl = fromUnicodeString( split.at( 2 ) ); + code.alt = fromUnicodeString( split.at( 3 ) ); - if (code.ctrl == code.plain) + if ( code.ctrl == code.plain ) + { code.ctrl = ""; + } - if (code.alt == code.plain) + if ( code.alt == code.plain ) + { code.alt = ""; + } - codes.append(code); + codes.append( code ); } return true; } - -QString KeyBoardPreview::fromUnicodeString(QString raw) { - if (raw.startsWith("U+")) - return QChar(raw.mid(2).toInt(nullptr, 16)); - else if (raw.startsWith("+U")) - return QChar(raw.mid(3).toInt(nullptr, 16)); +QString +KeyBoardPreview::fromUnicodeString( QString raw ) +{ + if ( raw.startsWith( "U+" ) ) + { + return QChar( raw.mid( 2 ).toInt( nullptr, 16 ) ); + } + else if ( raw.startsWith( "+U" ) ) + { + return QChar( raw.mid( 3 ).toInt( nullptr, 16 ) ); + } return ""; } - -QString KeyBoardPreview::regular_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::regular_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).plain; + return codes.at( index - 1 ).plain; } - -QString KeyBoardPreview::shift_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::shift_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).shift; + return codes.at( index - 1 ).shift; } - -QString KeyBoardPreview::ctrl_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::ctrl_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).ctrl; + return codes.at( index - 1 ).ctrl; } - -QString KeyBoardPreview::alt_text(int index) { - if (index < 0 || index >= codes.size()) +QString +KeyBoardPreview::alt_text( int index ) +{ + if ( index < 0 || index >= codes.size() ) + { return ""; + } - return codes.at(index - 1).alt; + return codes.at( index - 1 ).alt; } - -void KeyBoardPreview::resizeEvent(QResizeEvent *) { +void +KeyBoardPreview::resizeEvent( QResizeEvent* ) +{ space = 6; - usable_width = width()-7; - key_w = (usable_width - 14 * space)/15; + usable_width = width() - 7; + key_w = ( usable_width - 14 * space ) / 15; - setMaximumHeight(key_w*4 + space*5 + 1); + setMaximumHeight( key_w * 4 + space * 5 + 1 ); } +void +KeyBoardPreview::paintEvent( QPaintEvent* event ) +{ + QPainter p( this ); + p.setRenderHint( QPainter::Antialiasing ); -void KeyBoardPreview::paintEvent(QPaintEvent* event) { - QPainter p(this); - p.setRenderHint(QPainter::Antialiasing); - - p.setBrush(QColor(0xd6, 0xd6, 0xd6)); - p.drawRect(rect()); + p.setBrush( QColor( 0xd6, 0xd6, 0xd6 ) ); + p.drawRect( rect() ); QPen pen; - pen.setWidth(1); - pen.setColor(QColor(0x58, 0x58, 0x58)); - p.setPen(pen); + pen.setWidth( 1 ); + pen.setColor( QColor( 0x58, 0x58, 0x58 ) ); + p.setPen( pen ); - p.setBrush(QColor(0x58, 0x58, 0x58)); + p.setBrush( QColor( 0x58, 0x58, 0x58 ) ); - p.setBackgroundMode(Qt::TransparentMode); - p.translate(0.5, 0.5); + p.setBackgroundMode( Qt::TransparentMode ); + p.translate( 0.5, 0.5 ); int rx = 3; - int x=6; - int y=6; + int x = 6; + int y = 6; int first_key_w = 0; - int remaining_x[] = {0,0,0,0}; - int remaining_widths[] = {0,0,0,0}; + int remaining_x[] = { 0, 0, 0, 0 }; + int remaining_widths[] = { 0, 0, 0, 0 }; - for (int i = 0; i < 4; i++) { - if (first_key_w > 0) { - first_key_w = int(first_key_w * 1.375); + for ( int i = 0; i < 4; i++ ) + { + if ( first_key_w > 0 ) + { + first_key_w = int( first_key_w * 1.375 ); - if (kb == &kbList[KB_105] && i == 3) - first_key_w = int(key_w * 1.275); + if ( kb == &kbList[ KB_105 ] && i == 3 ) + { + first_key_w = int( key_w * 1.275 ); + } - p.drawRoundedRect(QRectF(6, y, first_key_w, key_w), rx, rx); + p.drawRoundedRect( QRectF( 6, y, first_key_w, key_w ), rx, rx ); x = 6 + first_key_w + space; } - else { + else + { first_key_w = key_w; } + bool last_end = ( i == 1 && !kb->kb_extended_return ); + int rw = usable_width - x; + int ii = 0; - bool last_end = (i==1 && ! kb->kb_extended_return); - int rw=usable_width-x; - int ii=0; + for ( int k : kb->keys.at( i ) ) + { + QRectF rect = QRectF( x, y, key_w, key_w ); - for (int k : kb->keys.at(i)) { - QRectF rect = QRectF(x, y, key_w, key_w); + if ( ii == kb->keys.at( i ).size() - 1 && last_end ) + { + rect.setWidth( rw ); + } - if (ii == kb->keys.at(i).size()-1 && last_end) - rect.setWidth(rw); + p.drawRoundedRect( rect, rx, rx ); - p.drawRoundedRect(rect, rx, rx); + rect.adjust( 5, 1, 0, 0 ); - rect.adjust(5, 1, 0, 0); + p.setPen( QColor( 0x9e, 0xde, 0x00 ) ); + p.setFont( upperFont ); + p.drawText( rect, Qt::AlignLeft | Qt::AlignTop, shift_text( k ) ); - p.setPen(QColor(0x9e, 0xde, 0x00)); - p.setFont(upperFont); - p.drawText(rect, Qt::AlignLeft | Qt::AlignTop, shift_text(k)); + rect.setBottom( rect.bottom() - 2.5 ); - rect.setBottom(rect.bottom() - 2.5); - - p.setPen(QColor(0xff, 0xff, 0xff)); - p.setFont(lowerFont); - p.drawText(rect, Qt::AlignLeft | Qt::AlignBottom, regular_text(k)); + p.setPen( QColor( 0xff, 0xff, 0xff ) ); + p.setFont( lowerFont ); + p.drawText( rect, Qt::AlignLeft | Qt::AlignBottom, regular_text( k ) ); rw = rw - space - key_w; x = x + space + key_w; - ii = ii+1; + ii = ii + 1; - p.setPen(pen); + p.setPen( pen ); } + remaining_x[ i ] = x; + remaining_widths[ i ] = rw; - remaining_x[i] = x; - remaining_widths[i] = rw; - - if (i != 1 && i != 2) - p.drawRoundedRect(QRectF(x, y, rw, key_w), rx, rx); + if ( i != 1 && i != 2 ) + { + p.drawRoundedRect( QRectF( x, y, rw, key_w ), rx, rx ); + } y = y + space + key_w; } - if (kb->kb_extended_return) { - rx=rx*2; - int x1 = remaining_x[1]; - int y1 = 6 + key_w*1 + space*1; - int w1 = remaining_widths[1]; - int x2 = remaining_x[2]; - int y2 = 6 + key_w*2 + space*2; + if ( kb->kb_extended_return ) + { + rx = rx * 2; + int x1 = remaining_x[ 1 ]; + int y1 = 6 + key_w * 1 + space * 1; + int w1 = remaining_widths[ 1 ]; + int x2 = remaining_x[ 2 ]; + int y2 = 6 + key_w * 2 + space * 2; // this is some serious crap... but it has to be so // maybe one day keyboards won't look like this... // one can only hope QPainterPath pp; - pp.moveTo(x1, y1+rx); - pp.arcTo(x1, y1, rx, rx, 180, -90); - pp.lineTo(x1+w1-rx, y1); - pp.arcTo(x1+w1-rx, y1, rx, rx, 90, -90); - pp.lineTo(x1+w1, y2+key_w-rx); - pp.arcTo(x1+w1-rx, y2+key_w-rx, rx, rx, 0, -90); - pp.lineTo(x2+rx, y2+key_w); - pp.arcTo(x2, y2+key_w-rx, rx, rx, -90, -90); - pp.lineTo(x2, y1+key_w); - pp.lineTo(x1+rx, y1+key_w); - pp.arcTo(x1, y1+key_w-rx, rx, rx, -90, -90); + pp.moveTo( x1, y1 + rx ); + pp.arcTo( x1, y1, rx, rx, 180, -90 ); + pp.lineTo( x1 + w1 - rx, y1 ); + pp.arcTo( x1 + w1 - rx, y1, rx, rx, 90, -90 ); + pp.lineTo( x1 + w1, y2 + key_w - rx ); + pp.arcTo( x1 + w1 - rx, y2 + key_w - rx, rx, rx, 0, -90 ); + pp.lineTo( x2 + rx, y2 + key_w ); + pp.arcTo( x2, y2 + key_w - rx, rx, rx, -90, -90 ); + pp.lineTo( x2, y1 + key_w ); + pp.lineTo( x1 + rx, y1 + key_w ); + pp.arcTo( x1, y1 + key_w - rx, rx, rx, -90, -90 ); pp.closeSubpath(); - p.drawPath(pp); + p.drawPath( pp ); } - else { - x= remaining_x[2]; - y = 6 + key_w*2 + space*2; - p.drawRoundedRect(QRectF(x, y, remaining_widths[2], key_w), rx, rx); + else + { + x = remaining_x[ 2 ]; + y = 6 + key_w * 2 + space * 2; + p.drawRoundedRect( QRectF( x, y, remaining_widths[ 2 ], key_w ), rx, rx ); } - QWidget::paintEvent(event); + QWidget::paintEvent( event ); } diff --git a/src/modules/keyboard/keyboardwidget/keyboardpreview.h b/src/modules/keyboard/keyboardwidget/keyboardpreview.h index 881866147..f094a5ec7 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardpreview.h +++ b/src/modules/keyboard/keyboardwidget/keyboardpreview.h @@ -1,39 +1,30 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDPREVIEW_H #define KEYBOARDPREVIEW_H -#include -#include +#include #include #include -#include #include -#include +#include #include -#include +#include #include #include +#include class KeyBoardPreview : public QWidget @@ -41,40 +32,46 @@ class KeyBoardPreview : public QWidget Q_OBJECT public: explicit KeyBoardPreview( QWidget* parent = nullptr ); - - void setLayout(QString layout); - void setVariant(QString variant); + + void setLayout( QString layout ); + void setVariant( QString variant ); private: - enum KB_TYPE { KB_104, KB_105, KB_106 }; - - struct KB { - bool kb_extended_return; - QList > keys; + enum KB_TYPE + { + KB_104, + KB_105, + KB_106 }; - struct Code { + struct KB + { + bool kb_extended_return; + QList< QList< int > > keys; + }; + + struct Code + { QString plain, shift, ctrl, alt; }; QString layout, variant; QFont lowerFont, upperFont; - KB* kb, kbList[3]; - QList codes; + KB *kb, kbList[ 3 ]; + QList< Code > codes; int space, usable_width, key_w; void loadInfo(); bool loadCodes(); - QString regular_text(int index); - QString shift_text(int index); - QString ctrl_text(int index); - QString alt_text(int index); - QString fromUnicodeString(QString raw); + QString regular_text( int index ); + QString shift_text( int index ); + QString ctrl_text( int index ); + QString alt_text( int index ); + QString fromUnicodeString( QString raw ); protected: - void paintEvent(QPaintEvent* event); - void resizeEvent(QResizeEvent* event); - + void paintEvent( QPaintEvent* event ) override; + void resizeEvent( QResizeEvent* event ) override; }; -#endif // KEYBOARDPREVIEW_H +#endif // KEYBOARDPREVIEW_H diff --git a/src/modules/keyboard/layout-extractor.py b/src/modules/keyboard/layout-extractor.py new file mode 100644 index 000000000..44b0d6b50 --- /dev/null +++ b/src/modules/keyboard/layout-extractor.py @@ -0,0 +1,96 @@ +#! /usr/bin/env python3 +# +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +""" +Python3 script to scrape x keyboard layout file and produce translations. + +To use this script, you must have a base.lst in a standard location, +/usr/local/share/X11/xkb/rules/base.lst (this is usual on FreeBSD). + +Prints out a few tables of keyboard model, layout, variant names for +use in translations. +""" + +def scrape_file(file, modelsset, layoutsset, variantsset): + import re + # These RE's match what is in keyboardglobal.cpp + model_re = re.compile("^\\s+(\\S+)\\s+(\\w.*)\n$") + layout_re = re.compile("^\\s+(\\S+)\\s+(\\w.*)\n$") + variant_re = re.compile("^\\s+(\\S+)\\s+(\\S+): (\\w.*)\n$") + + MODEL, LAYOUT, VARIANT = range(3) + state = None + for line in file.readlines(): + # Handle changes in section + if line.startswith("! model"): + state = MODEL + continue + elif line.startswith("! layout"): + state = LAYOUT + continue + elif line.startswith("! variant"): + state = VARIANT + continue + elif not line.strip(): + state = None + # Unchanged from last blank + if state is None: + continue + + if state == MODEL: + m = model_re.match(line) + name = m.groups()[1] + modelsset.add(name) + if state == LAYOUT: + l = layout_re.match(line) + name = l.groups()[1] + layoutsset.add(name) + if state == VARIANT: + v = variant_re.match(line) + name = v.groups()[2] + variantsset.add(name) + + +def write_set(file, label, set): + file.write("/* This returns a reference to local, which is a terrible idea.\n * Good thing it's not meant to be compiled.\n */\n") + # Note {{ is an escaped { for Python string formatting + file.write("class {!s} : public QObject {{\nQ_OBJECT\npublic:\n".format(label)) + file.write("\tconst QStringList& table()\n\t{\n\treturn QStringList {\n") + for x in sorted(set): + file.write("""\t\ttr("{!s}", "{!s}"),\n""".format(x, label)) + file.write("\t\tQString()\n\t};\n}\n}\n\n") + +cpp_header_comment = """/* GENERATED FILE DO NOT EDIT +* +* === This file is part of Calamares - === +* +* SPDX-FileCopyrightText: no +* SPDX-License-Identifier: CC0-1.0 +* +* This file is derived from base.lst in the Xorg distribution +* +*/ + +/** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ + +// *INDENT-OFF* +// clang-format off +""" + +if __name__ == "__main__": + models=set() + layouts=set() + variants=set() + variants.add( "Default" ) + with open("/usr/local/share/X11/xkb/rules/base.lst", "r") as f: + scrape_file(f, models, layouts, variants) + with open("KeyboardData_p.cxxtr", "w") as f: + f.write(cpp_header_comment) + write_set(f, "kb_models", models) + write_set(f, "kb_layouts", layouts) + write_set(f, "kb_variants", variants) + diff --git a/src/modules/keyboard/non-ascii-layouts b/src/modules/keyboard/non-ascii-layouts new file mode 100644 index 000000000..ef2e42787 --- /dev/null +++ b/src/modules/keyboard/non-ascii-layouts @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# 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 +ua us - ua-utf +gr us - gr +he us - he +ar us - ar diff --git a/src/modules/keyboardq/CMakeLists.txt b/src/modules/keyboardq/CMakeLists.txt index f5fd2b64b..2b0577aa7 100644 --- a/src/modules/keyboardq/CMakeLists.txt +++ b/src/modules/keyboardq/CMakeLists.txt @@ -1,3 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "keyboardq (QML is not supported in this build)" ) + return() +endif() + set( _keyboard ${CMAKE_CURRENT_SOURCE_DIR}/../keyboard ) include_directories( ${_keyboard} ) @@ -13,7 +23,5 @@ calamares_add_plugin( keyboardq ${_keyboard}/keyboardwidget/keyboardglobal.cpp RESOURCES keyboardq.qrc - LINK_PRIVATE_LIBRARIES - calamaresui SHARED_LIB ) diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.cpp b/src/modules/keyboardq/KeyboardQmlViewStep.cpp index 783349075..231d2a090 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.cpp +++ b/src/modules/keyboardq/KeyboardQmlViewStep.cpp @@ -1,39 +1,29 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #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 @@ -45,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 @@ -75,21 +65,19 @@ KeyboardQmlViewStep::isAtEnd() const Calamares::JobList KeyboardQmlViewStep::jobs() const { - return m_jobs; + return m_config->createJobs(); } void KeyboardQmlViewStep::onActivate() { - m_config->onActivate(); + m_config->guessLocaleKeyboardLayout(); } void KeyboardQmlViewStep::onLeave() { m_config->finalize(); - m_jobs = m_config->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard ); - m_prettyStatus = m_config->prettyStatus(); } QObject* @@ -101,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 22826f2cd..eb31c3d59 100644 --- a/src/modules/keyboardq/KeyboardQmlViewStep.h +++ b/src/modules/keyboardq/KeyboardQmlViewStep.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KEYBOARDQMLVIEWSTEP_H @@ -22,14 +13,12 @@ #include "Config.h" -#include -#include -#include +#include "DllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/QmlViewStep.h" #include -class KeyboardPage; - class PLUGINDLLEXPORT KeyboardQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT @@ -56,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/data/Key.qml b/src/modules/keyboardq/data/Key.qml new file mode 100644 index 000000000..e5c766e41 --- /dev/null +++ b/src/modules/keyboardq/data/Key.qml @@ -0,0 +1,180 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import QtQuick 2.15 + +Item { + id: key + + property string mainLabel: "A" + property var secondaryLabels: []; + + property var iconSource; + + property var keyImageLeft: "" + property var keyImageRight: "" + property var keyImageCenter: "" + + property color keyColor: "#404040" + property color keyPressedColor: "grey" + property int keyBounds: 2 + property var keyPressedColorOpacity: 1 + + property var mainFontFamily: "Roboto" + property color mainFontColor: "white" + property int mainFontSize: 18 + + property var secondaryFontFamily: "Roboto" + property color secondaryFontColor: "white" + property int secondaryFontSize: 10 + + property bool secondaryLabelVisible: true + + property bool isChekable; + property bool isChecked; + + property bool upperCase; + + signal clicked() + signal alternatesClicked(string symbol) + + Item { + anchors.fill: parent + anchors.margins: key.keyBounds + visible: key.keyImageLeft != "" || key.keyImageCenter != "" || key.keyImageRight != "" ? 1 : 0 + Image { + id: backgroundImage_left + anchors.left: parent.left + height: parent.height + fillMode: Image.PreserveAspectFit + source: key.keyImageLeft + } + Image { + id: backgroundImage_right + anchors.right: parent.right + height: parent.height + fillMode: Image.PreserveAspectFit + source: key.keyImageRight + } + Image { + id: backgroundImage_center + anchors.fill: parent + anchors.leftMargin: backgroundImage_left.width - 1 + anchors.rightMargin: backgroundImage_right.width - 1 + height: parent.height + fillMode: Image.Stretch + source: key.keyImageCenter + } + } + + Rectangle { + id: backgroundItem + anchors.fill: parent + anchors.margins: key.keyBounds + color: key.isChecked || mouseArea.pressed ? key.keyPressedColor : key.keyColor; + opacity: key.keyPressedColorOpacity + } + + Column + { + anchors.centerIn: backgroundItem + + Text { + id: secondaryLabelsItem + smooth: true + anchors.right: parent.right + visible: true //secondaryLabelVisible + text: secondaryLabels.length > 0 ? secondaryLabels : "" + color: secondaryFontColor + + font.pixelSize: secondaryFontSize + font.weight: Font.Light + font.family: secondaryFontFamily + font.capitalization: upperCase ? Font.AllUppercase : + Font.MixedCase + } + + Row { + anchors.horizontalCenter: parent.horizontalCenter + + Image { + id: icon + smooth: true + anchors.verticalCenter: parent.verticalCenter + source: iconSource + //sourceSize.width: key.width * 0.6 + sourceSize.height: key.height * 0.4 + } + + Text { + id: mainLabelItem + smooth: true + anchors.verticalCenter: parent.verticalCenter + text: mainLabel + color: mainFontColor + visible: iconSource ? false : true + + font.pixelSize: mainFontSize + font.weight: Font.Light + font.family: mainFontFamily + font.capitalization: upperCase ? Font.AllUppercase : + Font.MixedCase + } + } + } + + Row { + id: alternatesRow + property int selectedIndex: -1 + visible: false + anchors.bottom: backgroundItem.top + anchors.left: backgroundItem.left + + Repeater { + model: secondaryLabels.length + + Rectangle { + property bool isSelected: alternatesRow.selectedIndex == index + color: isSelected ? mainLabelItem.color : key.keyPressedColor + height: backgroundItem.height + width: backgroundItem.width + + Text { + anchors.centerIn: parent + text: secondaryLabels[ index ] + font: mainLabelItem.font + color: isSelected ? key.keyPressedColor : mainLabelItem.color + } + } + } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onPressAndHold: alternatesRow.visible = true + onClicked: { + if (key.isChekable) key.isChecked = !key.isChecked + key.clicked() + } + + onReleased: { + alternatesRow.visible = false + if (alternatesRow.selectedIndex > -1) + key.alternatesClicked(secondaryLabels[alternatesRow.selectedIndex]) + } + + onMouseXChanged: { + alternatesRow.selectedIndex = + (mouseY < 0 && mouseX > 0 && mouseY < alternatesRow.width) ? + Math.floor(mouseX / backgroundItem.width) : + -1; + } + } +} diff --git a/src/modules/keyboardq/data/Keyboard.qml b/src/modules/keyboardq/data/Keyboard.qml new file mode 100644 index 000000000..5d1356a82 --- /dev/null +++ b/src/modules/keyboardq/data/Keyboard.qml @@ -0,0 +1,223 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import QtQuick 2.15 +import QtQuick.XmlListModel 2.10 + +Item { + id: keyboard + + width: 1024 + height: 640 + + property int rows: 4; + property int columns: 10; + + property string source: "generic.xml" + property var target; + + property color backgroundColor: "black" + + property var keyImageLeft: "" + property var keyImageRight: "" + property var keyImageCenter: "" + + property color keyColor: "#404040" + property color keyPressedColor: "grey" + property int keyBounds: 2 + property var keyPressedColorOpacity: 1 + + property var mainFontFamily: "Roboto" + property color mainFontColor: "white" + property int mainFontSize: 59 + + property var secondaryFontFamily: "Roboto" + property color secondaryFontColor: "white" + property int secondaryFontSize: 30 + + property bool secondaryLabelsVisible: false + property bool doSwitchSource: true + + property bool allUpperCase: false + + signal keyClicked(string key) + signal switchSource(string source) + signal enterClicked() + + Rectangle { + id: root + anchors.fill: parent + color: backgroundColor + + property int keyWidth: keyboard.width / columns; + property int keyHeight: keyboard.height / rows; + + property int xmlIndex: 1 + + Text { + id: proxyMainTextItem + color: keyboard.mainFontColor + font.pixelSize: keyboard.mainFontSize + font.weight: Font.Light + font.family: keyboard.mainFontFamily + font.capitalization: keyboard.allUpperCase ? Font.AllUppercase : + Font.MixedCase + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + + Text { + id: proxySecondaryTextItem + color: keyboard.secondaryFontColor + font.pixelSize: keyboard.secondaryFontSize + font.weight: Font.Light + font.family: keyboard.secondaryFontFamily + font.capitalization: keyboard.allUpperCase ? Font.AllUppercase : + Font.MixedCase + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + + Column { + id: column + anchors.centerIn: parent + + Repeater { + id: rowRepeater + + model: XmlListModel { + id: keyboardModel + source: keyboard.source + query: "/Keyboard/Row" + + Behavior on source { + NumberAnimation { + easing.type: Easing.InOutSine + duration: 100 + } + } + } + + Row { + id: keyRow + property int rowIndex: index + anchors.horizontalCenter: if(parent) parent.horizontalCenter + + Repeater { + id: keyRepeater + + model: XmlListModel { + source: keyboard.source + query: "/Keyboard/Row[" + (rowIndex + 1) + "]/Key" + + XmlRole { name: "labels"; query: "@labels/string()" } + XmlRole { name: "ratio"; query: "@ratio/number()" } + XmlRole { name: "icon"; query: "@icon/string()" } + XmlRole { name: "checkable"; query: "@checkable/string()" } + } + + Key { + id: key + width: root.keyWidth * ratio + height: root.keyHeight + iconSource: icon + mainFontFamily: proxyMainTextItem.font + mainFontColor: proxyMainTextItem.color + secondaryFontFamily: proxySecondaryTextItem.font + secondaryFontColor: proxySecondaryTextItem.color + secondaryLabelVisible: keyboard.secondaryLabelsVisible + keyColor: keyboard.keyColor + keyImageLeft: keyboard.keyImageLeft + keyImageRight: keyboard.keyImageRight + keyImageCenter: keyboard.keyImageCenter + keyPressedColor: keyboard.keyPressedColor + keyPressedColorOpacity: keyboard.keyPressedColorOpacity + keyBounds: keyboard.keyBounds + isChekable: checkable + isChecked: isChekable && + command && + command === "shift" && + keyboard.allUpperCase + upperCase: keyboard.allUpperCase + + property var command + property var params: labels + + onParamsChanged: { + var labelSplit; + + if(params[0] === '|') + { + mainLabel = '|' + labelSplit = params + } + else + { + labelSplit = params.split(/[|]+/) + + if (labelSplit[0] === '!') + mainLabel = '!'; + else + mainLabel = params.split(/[!|]+/)[0].toString(); + } + + if (labelSplit[1]) secondaryLabels = labelSplit[1]; + + if (labelSplit[0] === '!') + command = params.split(/[!|]+/)[1]; + else + command = params.split(/[!]+/)[1]; + } + + onClicked: { + if (command) + { + var commandList = command.split(":"); + + switch(commandList[0]) + { + case "source": + keyboard.switchSource(commandList[1]) + if(doSwitchSource) keyboard.source = commandList[1] + return; + case "shift": + keyboard.allUpperCase = !keyboard.allUpperCase + return; + case "backspace": + keyboard.keyClicked('\b'); + target.text = target.text.substring(0,target.text.length-1) + return; + case "enter": + keyboard.enterClicked() + return; + case "tab": + keyboard.keyClicked('\t'); + target.text = target.text + " " + return; + default: return; + } + } + if (mainLabel.length === 1) + root.emitKeyClicked(mainLabel); + } + onAlternatesClicked: root.emitKeyClicked(symbol); + } + } + } + } + } + + function emitKeyClicked(text) { + var emitText = keyboard.allUpperCase ? text.toUpperCase() : text; + keyClicked( emitText ); + target.text = target.text + emitText + } + } +} + diff --git a/src/modules/keyboardq/data/afgani.xml b/src/modules/keyboardq/data/afgani.xml new file mode 100644 index 000000000..8b445b2eb --- /dev/null +++ b/src/modules/keyboardq/data/afgani.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/ar.xml b/src/modules/keyboardq/data/ar.xml new file mode 100644 index 000000000..a0e5ad0c6 --- /dev/null +++ b/src/modules/keyboardq/data/ar.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/backspace.svg b/src/modules/keyboardq/data/backspace.svg new file mode 100755 index 000000000..4d29e246c --- /dev/null +++ b/src/modules/keyboardq/data/backspace.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + diff --git a/src/modules/keyboardq/data/backspace.svg.license b/src/modules/keyboardq/data/backspace.svg.license new file mode 100644 index 000000000..36158c604 --- /dev/null +++ b/src/modules/keyboardq/data/backspace.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019 https://www.onlinewebfonts.com/fonts +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboardq/data/button_bkg_center.png b/src/modules/keyboardq/data/button_bkg_center.png new file mode 100755 index 000000000..d17e1698e Binary files /dev/null and b/src/modules/keyboardq/data/button_bkg_center.png differ diff --git a/src/modules/keyboardq/data/button_bkg_center.png.license b/src/modules/keyboardq/data/button_bkg_center.png.license new file mode 100644 index 000000000..d36c167bb --- /dev/null +++ b/src/modules/keyboardq/data/button_bkg_center.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019 MarcoPellin +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboardq/data/button_bkg_left.png b/src/modules/keyboardq/data/button_bkg_left.png new file mode 100755 index 000000000..0a674af6c Binary files /dev/null and b/src/modules/keyboardq/data/button_bkg_left.png differ diff --git a/src/modules/keyboardq/data/button_bkg_left.png.license b/src/modules/keyboardq/data/button_bkg_left.png.license new file mode 100644 index 000000000..d36c167bb --- /dev/null +++ b/src/modules/keyboardq/data/button_bkg_left.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019 MarcoPellin +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboardq/data/button_bkg_right.png b/src/modules/keyboardq/data/button_bkg_right.png new file mode 100755 index 000000000..ce7c4ad71 Binary files /dev/null and b/src/modules/keyboardq/data/button_bkg_right.png differ diff --git a/src/modules/keyboardq/data/button_bkg_right.png.license b/src/modules/keyboardq/data/button_bkg_right.png.license new file mode 100644 index 000000000..d36c167bb --- /dev/null +++ b/src/modules/keyboardq/data/button_bkg_right.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019 MarcoPellin +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboardq/data/de.xml b/src/modules/keyboardq/data/de.xml new file mode 100644 index 000000000..883d4dddf --- /dev/null +++ b/src/modules/keyboardq/data/de.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/empty.xml b/src/modules/keyboardq/data/empty.xml new file mode 100644 index 000000000..a8afccb11 --- /dev/null +++ b/src/modules/keyboardq/data/empty.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/en.xml b/src/modules/keyboardq/data/en.xml new file mode 100644 index 000000000..3602f1d94 --- /dev/null +++ b/src/modules/keyboardq/data/en.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/enter.svg b/src/modules/keyboardq/data/enter.svg new file mode 100755 index 000000000..c66a74921 --- /dev/null +++ b/src/modules/keyboardq/data/enter.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/enter.svg.license b/src/modules/keyboardq/data/enter.svg.license new file mode 100644 index 000000000..36158c604 --- /dev/null +++ b/src/modules/keyboardq/data/enter.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019 https://www.onlinewebfonts.com/fonts +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboardq/data/es.xml b/src/modules/keyboardq/data/es.xml new file mode 100644 index 000000000..3cac9be1c --- /dev/null +++ b/src/modules/keyboardq/data/es.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/fr.xml b/src/modules/keyboardq/data/fr.xml new file mode 100644 index 000000000..5328c49a7 --- /dev/null +++ b/src/modules/keyboardq/data/fr.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/generic.xml b/src/modules/keyboardq/data/generic.xml new file mode 100644 index 000000000..1be4ec4c8 --- /dev/null +++ b/src/modules/keyboardq/data/generic.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/generic_qz.xml b/src/modules/keyboardq/data/generic_qz.xml new file mode 100644 index 000000000..b8e36cd79 --- /dev/null +++ b/src/modules/keyboardq/data/generic_qz.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/pt.xml b/src/modules/keyboardq/data/pt.xml new file mode 100644 index 000000000..fa883f04d --- /dev/null +++ b/src/modules/keyboardq/data/pt.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/ru.xml b/src/modules/keyboardq/data/ru.xml new file mode 100644 index 000000000..729ff6971 --- /dev/null +++ b/src/modules/keyboardq/data/ru.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/scan.xml b/src/modules/keyboardq/data/scan.xml new file mode 100644 index 000000000..efdb01de0 --- /dev/null +++ b/src/modules/keyboardq/data/scan.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/keyboardq/data/shift.svg b/src/modules/keyboardq/data/shift.svg new file mode 100755 index 000000000..825ba649b --- /dev/null +++ b/src/modules/keyboardq/data/shift.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + diff --git a/src/modules/keyboardq/data/shift.svg.license b/src/modules/keyboardq/data/shift.svg.license new file mode 100644 index 000000000..36158c604 --- /dev/null +++ b/src/modules/keyboardq/data/shift.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2019 https://www.onlinewebfonts.com/fonts +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/keyboardq/keyboardq.conf b/src/modules/keyboardq/keyboardq.conf index ee97c3939..d122f30d7 100644 --- a/src/modules/keyboardq/keyboardq.conf +++ b/src/modules/keyboardq/keyboardq.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # NOTE: you must have ckbcomp installed and runnable # on the live system, for keyboard layout previews. --- diff --git a/src/modules/keyboardq/keyboardq.qml b/src/modules/keyboardq/keyboardq.qml index a093fe31f..be96ec85a 100644 --- a/src/modules/keyboardq/keyboardq.qml +++ b/src/modules/keyboardq/keyboardq.qml @@ -1,204 +1,310 @@ -import io.calamares.modules 1.0 as Modules +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 import io.calamares.ui 1.0 -import QtQuick 2.10 -import QtQuick.Controls 2.10 +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Window 2.14 import QtQuick.Layouts 1.3 + import org.kde.kirigami 2.7 as Kirigami +import "data" -ResponsiveBase -{ - id: control - Modules.Keyboard //locale handler - { - id: _keyboard - } +Item { + width: 800 //parent.width + height: 600 - title: stackView.currentItem.title - subtitle: stackView.currentItem.subtitle + readonly property color backgroundColor: "#E6E9EA" //Kirigami.Theme.backgroundColor + readonly property color listBackgroundColor: "white" + readonly property color textFieldColor: "#121212" + readonly property color textFieldBackgroundColor: "#F8F8F8" + readonly property color textColor: Kirigami.Theme.textColor + readonly property color highlightedTextColor: Kirigami.Theme.highlightedTextColor + readonly property color highlightColor: Kirigami.Theme.highlightColor + property var langXml: ["de", "en", "es", "fr", "ru",] + property var arXml: ["Arabic"] + property var ruXml: ["Azerba", "Belaru", "Kazakh", "Kyrgyz", "Mongol", + "Russia", "Tajik", "Ukrain"] + property var frXml: ["Bambar", "Belgia","French", "Wolof"] + property var enXml: ["Bikol", "Chines", "Englis", "Irish", "Lithua", "Maori"] + property var esXml: ["Spanis"] + property var deXml: ["German"] + property var ptXml: ["Portug"] + property var scanXml: ["Danish", "Finnis", "Norweg", "Swedis"] + property var afganiXml: ["Afghan"] + property var genericXml: ["Armeni", "Bulgar", "Dutch", "Estoni", "Icelan", + "Indone", "Italia", "Latvia", "Maltes", "Moldav", "Romani", "Swahil", "Turkis"] + property var genericQzXml: ["Albani", "Bosnia", "Croati", "Czech", "Hungar", + "Luxemb", "Monten", "Polish", "Serbia", "Sloven", "Slovak"] + property var genericAzXml: [] - stackView.initialItem: Item - { - id: _keyboardModelsComponet + property var keyIndex: [] - property string title: qsTr("Keyboard Model") - property string subtitle: qsTr("Pick your preferred keyboard model or use the default one based on the detected hardware") + Rectangle { + id: backgroundItem + anchors.fill: parent + color: backgroundColor - ListViewTemplate - { - id: _keyboardModelListView + Label { + id: header + anchors.horizontalCenter: parent.horizontalCenter + text: qsTr("To activate keyboard preview, select a layout.") + color: textColor + font.bold: true + } - anchors.centerIn: parent - implicitWidth: Math.min(parent.width, 500) - implicitHeight: Math.min(contentHeight, 500) - currentIndex: model.currentIndex + Label { + id: intro + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: header.bottom + color: textColor + horizontalAlignment: Text.AlignHCenter + width: parent.width / 1.2 + wrapMode: Text.WordWrap + text: ( config.prettyStatus) + } - header: ToolButton - { - icon.name: "view-refresh" - onClicked: model.refresh() - text: qsTr("Refresh") - } - footer: RowLayout - { - width: parent.width - z: 99999 + RowLayout { + id: models + anchors.top: intro.bottom + anchors.topMargin: 10 + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width /1.5 + spacing: 10 - Button - { - Layout.fillWidth: true - text: qsTr("Layouts") - icon.name: "go-previous" - onClicked: control.stackView.push(_keyboardLayoutsComponent) - } - } + Label { + Layout.alignment: Qt.AlignCenter + text: qsTr("Keyboard Model:") + color: textColor + font.bold: true + } - model: _keyboard.Config.keyboardModelsModel + ComboBox { + Layout.fillWidth: true + textRole: "label" + model: config.keyboardModelsModel + currentIndex: model.currentIndex + onCurrentIndexChanged: config.keyboardModels = currentIndex + } + } - delegate: ListItemDelegate - { - id: _delegate - label1.text: model.label - onClicked: - { - _keyboardModelListView.model.currentIndex = index - control.stackView.push(_keyboardLayoutsComponent) - } - } - } + StackView { + id: stack + anchors.top: models.bottom + anchors.topMargin: 10 + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + clip: true - } + initialItem: Item { - Component - { - id: _keyboardLayoutsComponent + ListView { + id: layouts - Item - { - property string title: qsTr("Keyboard Layout") - property string subtitle: _keyboard.Config.prettyStatus + ScrollBar.vertical: ScrollBar { + active: true + } - ListViewTemplate - { - id: _layoutsListView + width: parent.width / 2 + height: 200 + anchors.horizontalCenter: parent.horizontalCenter + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 - anchors.centerIn: parent + Rectangle { + z: parent.z - 1 + anchors.fill: parent + color: listBackgroundColor + opacity: 0.7 + } - implicitWidth: Math.min(parent.width, 500) - implicitHeight: Math.min(contentHeight, 500) + model: config.keyboardLayoutsModel + currentIndex: model.currentIndex + Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center) + delegate: ItemDelegate { - currentIndex: model.currentIndex - footer: RowLayout - { - width: parent.width - z: 99999 + hoverEnabled: true + width: parent.width + height: 18 + highlighted: ListView.isCurrentItem - Button - { - Layout.fillWidth: true - icon.name: "go-previous" - text: qsTr("Models") - onClicked: control.stackView.pop() - } + RowLayout { + anchors.fill: parent - Button - { - Layout.fillWidth: true - icon.name: "go-next" - text: qsTr("Variants") - onClicked: control.stackView.push(_keyboardVariantsComponent) - } - } + Label { + id: label1 + text: model.label + Layout.fillHeight: true + Layout.fillWidth: true + padding: 10 + width: parent.width + height: 32 + color: highlighted ? highlightedTextColor : textColor - model: _keyboard.Config.keyboardLayoutsModel + background: Rectangle { + color: highlighted || hovered ? highlightColor : listBackgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + } - delegate: ListItemDelegate - { - id: _delegate - label1.text: model.label - onClicked: - { - _layoutsListView.model.currentIndex = index - _layoutsListView.positionViewAtIndex(index, ListView.Center) - control.stackView.push(_keyboardVariantsComponent) - } - } - } - } + onClicked: { + layouts.model.currentIndex = index + keyIndex = label1.text.substring(0,6) + stack.push(variantsList) + layouts.positionViewAtIndex(index, ListView.Center) + } + } + } + Button { - } + Layout.fillWidth: true + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -parent.height / 3.5 + anchors.left: parent.left + anchors.leftMargin: parent.width / 15 + icon.name: "go-next" + text: qsTr("Variants") + onClicked: stack.push(variantsList) + } + } - Component - { - id: _keyboardVariantsComponent + Component { + id: variantsList - Item - { - property string title: qsTr("Keyboard Layout") - property string subtitle: _keyboard.Config.prettyStatus + Item { - ListViewTemplate - { - id: _variantsListView + ListView { + id: variants - anchors.centerIn: parent + ScrollBar.vertical: ScrollBar { + active: true + } - implicitWidth: Math.min(parent.width, 500) - implicitHeight: Math.min(contentHeight, 500) + width: parent.width / 2 + height: 200 + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: 10 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 - currentIndex: model.currentIndex + Rectangle { + z: parent.z - 1 + anchors.fill: parent + color: listBackgroundColor + opacity: 0.7 + } - footerPositioning: ListView.OverlayFooter + model: config.keyboardVariantsModel + currentIndex: model.currentIndex + Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center) - footer: RowLayout - { - z: 99999 - width: parent.width + delegate: ItemDelegate { + hoverEnabled: true + width: parent.width + height: 18 + highlighted: ListView.isCurrentItem - Button - { - Layout.fillWidth: true - text: qsTr("Layouts") - icon.name: "go-previous" - onClicked: control.stackView.pop() - } - } + RowLayout { + anchors.fill: parent - model: _keyboard.Config.keyboardVariantsModel + Label { + text: model.label + Layout.fillHeight: true + Layout.fillWidth: true + padding: 10 + width: parent.width + height: 30 + color: highlighted ? highlightedTextColor : textColor - delegate: ListItemDelegate - { - id: _delegate - label1.text: model.label - onClicked: - { - _variantsListView.model.currentIndex = index - _variantsListView.positionViewAtIndex(index, ListView.Center) - } - } - } - } + background: Rectangle { + color: highlighted || hovered ? highlightColor : listBackgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + } - } + onClicked: { + variants.model.currentIndex = index + variants.positionViewAtIndex(index, ListView.Center) + } + } + } + Button { + Layout.fillWidth: true + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -parent.height / 3.5 + anchors.left: parent.left + anchors.leftMargin: parent.width / 15 + icon.name: "go-previous" + text: qsTr("Layouts") + onClicked: stack.pop() + } + } + } + } - TextField - { - placeholderText: qsTr("Test your keyboard") - Layout.preferredHeight: 60 - Layout.maximumWidth: 500 - Layout.fillWidth: true - Layout.alignment: Qt.AlignCenter - - background: Rectangle - { - color: Kirigami.Theme.backgroundColor - radius: 5 - opacity: 0.3 - } - } + TextField { + id: textInput + placeholderText: qsTr("Type here to test your keyboard") + height: 36 + width: parent.width / 1.5 + horizontalAlignment: TextInput.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: keyboard.top + anchors.bottomMargin: parent.height / 25 + color: textFieldColor + background:Rectangle { + z: parent.z - 1 + anchors.fill: parent + color: textFieldBackgroundColor + radius: 2 + } + } + Keyboard { + id: keyboard + width: parent.width + height: parent.height / 3 + anchors.bottom: parent.bottom + source: langXml.includes(keyIndex) ? (keyIndex + ".xml") : + afganiXml.includes(keyIndex) ? "afgani.xml" : + scanXml.includes(keyIndex) ? "scan.xml" : + genericXml.includes(keyIndex) ? "generic.xml" : + genericQzXml.includes(keyIndex) ? "generic_qz.xml" : + arXml.includes(keyIndex) ? "ar.xml" : + deXml.includes(keyIndex) ? "de.xml" : + enXml.includes(keyIndex) ? "en.xml" : + esXml.includes(keyIndex) ? "es.xml" : + frXml.includes(keyIndex) ? "fr.xml" : + ptXml.includes(keyIndex) ? "pt.xml" : + ruXml.includes(keyIndex) ? "ru.xml" :"empty.xml" + rows: 4 + columns: 10 + keyColor: "transparent" + keyPressedColorOpacity: 0.2 + keyImageLeft: "button_bkg_left.png" + keyImageRight: "button_bkg_right.png" + keyImageCenter: "button_bkg_center.png" + target: textInput + onEnterClicked: console.log("Enter!") + } + } } diff --git a/src/modules/keyboardq/keyboardq.qrc b/src/modules/keyboardq/keyboardq.qrc index 492f6e213..d2473a8ec 100644 --- a/src/modules/keyboardq/keyboardq.qrc +++ b/src/modules/keyboardq/keyboardq.qrc @@ -3,5 +3,6 @@ ../keyboard/kbd-model-map ../keyboard/images/restore.png keyboardq.qml + ../keyboard/non-ascii-layouts
diff --git a/src/modules/license/CMakeLists.txt b/src/modules/license/CMakeLists.txt index 164233b3b..0cd838799 100644 --- a/src/modules/license/CMakeLists.txt +++ b/src/modules/license/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( license @@ -9,7 +14,5 @@ calamares_add_plugin( license LicenseWidget.cpp UI LicensePage.ui - LINK_PRIVATE_LIBRARIES - calamaresui SHARED_LIB ) diff --git a/src/modules/license/LicensePage.cpp b/src/modules/license/LicensePage.cpp index 237e8d0dc..8700aad60 100644 --- a/src/modules/license/LicensePage.cpp +++ b/src/modules/license/LicensePage.cpp @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LicensePage.h" @@ -40,7 +31,6 @@ #include #include #include -#include #include @@ -107,10 +97,6 @@ LicensePage::LicensePage( QWidget* parent ) // ui->verticalLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() ); CalamaresUtils::unmarginLayout( ui->verticalLayout ); - ui->mainText->setWordWrap( true ); - ui->mainText->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); - - ui->acceptFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain ); ui->acceptFrame->setStyleSheet( mustAccept ); ui->acceptFrame->layout()->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); @@ -118,7 +104,7 @@ LicensePage::LicensePage( QWidget* parent ) connect( ui->acceptCheckBox, &QCheckBox::toggled, this, &LicensePage::checkAcceptance ); - CALAMARES_RETRANSLATE_SLOT( &LicensePage::retranslate ) + CALAMARES_RETRANSLATE_SLOT( &LicensePage::retranslate ); } void diff --git a/src/modules/license/LicensePage.h b/src/modules/license/LicensePage.h index dcd3ea7b4..73a62defa 100644 --- a/src/modules/license/LicensePage.h +++ b/src/modules/license/LicensePage.h @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LICENSEPAGE_H diff --git a/src/modules/license/LicensePage.ui b/src/modules/license/LicensePage.ui index b5936d5de..817775c38 100644 --- a/src/modules/license/LicensePage.ui +++ b/src/modules/license/LicensePage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 demmm <anke62@gmail.com> +SPDX-License-Identifier: GPL-3.0-or-later + LicensePage diff --git a/src/modules/license/LicenseViewStep.cpp b/src/modules/license/LicenseViewStep.cpp index 89cddf27f..aca04a1b3 100644 --- a/src/modules/license/LicenseViewStep.cpp +++ b/src/modules/license/LicenseViewStep.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LicenseViewStep.h" diff --git a/src/modules/license/LicenseViewStep.h b/src/modules/license/LicenseViewStep.h index 6bfab4246..0e028f8c1 100644 --- a/src/modules/license/LicenseViewStep.h +++ b/src/modules/license/LicenseViewStep.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LICENSEPAGEPLUGIN_H @@ -36,7 +27,7 @@ class PLUGINDLLEXPORT LicenseViewStep : public Calamares::ViewStep public: explicit LicenseViewStep( QObject* parent = nullptr ); - virtual ~LicenseViewStep() override; + ~LicenseViewStep() override; QString prettyName() const override; diff --git a/src/modules/license/LicenseWidget.cpp b/src/modules/license/LicenseWidget.cpp index 09d2230e5..a8d581ab5 100644 --- a/src/modules/license/LicenseWidget.cpp +++ b/src/modules/license/LicenseWidget.cpp @@ -1,27 +1,19 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LicenseWidget.h" #include "utils/Logger.h" +#include "utils/QtCompat.h" #include #include @@ -57,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/license/LicenseWidget.h b/src/modules/license/LicenseWidget.h index a386ae353..eb7d8edd8 100644 --- a/src/modules/license/LicenseWidget.h +++ b/src/modules/license/LicenseWidget.h @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Anke Boersma - * Copyright 2015, Alexandre Arnt - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2015 Alexandre Arnt + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LICENSE_LICENSEWIDGET_H @@ -31,9 +22,10 @@ class QPushButton; class LicenseWidget : public QWidget { + Q_OBJECT public: LicenseWidget( LicenseEntry e, QWidget* parent = nullptr ); - virtual ~LicenseWidget() override; + ~LicenseWidget() override; void retranslateUi(); diff --git a/src/modules/license/README.md b/src/modules/license/README.md index 4c9862c8a..0ad7a636e 100644 --- a/src/modules/license/README.md +++ b/src/modules/license/README.md @@ -1,11 +1,25 @@ ### License Approval Module ---------- -For distributions shipping proprietary software, this module creates a globalstorage entry when the user accepts or declines one or more presented End User License Agreements files. -The number of licenses shown are configurable. The license.conf file has a few examples of how to add URLs. -If you do not want to include this module in your Calamares build, add ```-DSKIP_MODULES="license"``` to your build settings (CMake call). + + +For distributions shipping proprietary software, this module creates a +Global Storage entry when the user accepts or declines one or more of +the End User License Agreements files that are presented here. + +The number of licenses shown are configurable. The `license.conf` file +has a few examples of how to add URLs. + +If you do not want to include this module in your Calamares build, +add `-DSKIP_MODULES="license"` to your build settings (CMake call). + +How to implement the removal or not installing of proprietary software is +up to any distribution to implement. For example, proprietary graphics +drivers cannot simply be removed in the packages module, a free version +will need to be installed. -How to implement the removal or not installing of proprietary software is up to any distribution to implement. For example, proprietary graphics drivers cannot simply be removed in the packages module, a free version will need to be installed. An example of where the licenseAgree globalstorage entry is used: https://github.com/KaOSx/calamares/blob/master/src/modules/nonfree_drivers/main.py diff --git a/src/modules/license/license.conf b/src/modules/license/license.conf index 8a1672887..e32d49984 100644 --- a/src/modules/license/license.conf +++ b/src/modules/license/license.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration file for License viewmodule, Calamares # Syntax is YAML 1.2 --- diff --git a/src/modules/license/license.schema.yaml b/src/modules/license/license.schema.yaml new file mode 100644 index 000000000..d933ac15a --- /dev/null +++ b/src/modules/license/license.schema.yaml @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/license +additionalProperties: false +type: object +properties: + entries: + type: array + items: + type: object + additionalProperties: false + properties: + id: { type: string } + name: { type: string } + vendor: { type: string } + type: { type: string } + url: { type: string } + required: { type: boolean, default: false } + expand: { type: boolean, default: false } diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt index 2643ff548..272dea3de 100644 --- a/src/modules/locale/CMakeLists.txt +++ b/src/modules/locale/CMakeLists.txt @@ -1,3 +1,9 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # When debugging the timezone widget, add this debugging definition # to have a debugging-friendly timezone widget, debug logging, # and no intrusive timezone-setting while clicking around. @@ -20,15 +26,14 @@ calamares_add_plugin( locale LocaleViewStep.cpp SetTimezoneJob.cpp timezonewidget/timezonewidget.cpp - timezonewidget/localeglobal.cpp + timezonewidget/TimeZoneImage.cpp UI RESOURCES locale.qrc LINK_PRIVATE_LIBRARIES - calamaresui Qt5::Network ${geoip_libs} - yamlcpp + yamlcpp::yamlcpp SHARED_LIB ) @@ -36,5 +41,13 @@ calamares_add_test( localetest SOURCES Tests.cpp + Config.cpp LocaleConfiguration.cpp + SetTimezoneJob.cpp + timezonewidget/TimeZoneImage.cpp + DEFINITIONS + SOURCE_DIR="${CMAKE_CURRENT_LIST_DIR}/images" + DEBUG_TIMEZONES=1 + LIBRARIES + Qt5::Gui ) diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp index 47e7b7fcf..5888fd071 100644 --- a/src/modules/locale/Config.cpp +++ b/src/modules/locale/Config.cpp @@ -1,102 +1,52 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" -#include "LCLocaleDialog.h" #include "SetTimezoneJob.h" -#include "timezonewidget/timezonewidget.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" - -#include "locale/Label.h" -#include "locale/TimeZone.h" -#include "utils/CalamaresUtilsGui.h" +#include "locale/Global.h" +#include "locale/Translation.h" +#include "modulesystem/ModuleManager.h" +#include "network/Manager.h" #include "utils/Logger.h" -#include "utils/Retranslator.h" +#include "utils/Variant.h" -#include +#include #include +#include -Config::Config( QObject* parent ) - : QObject( parent ) - , m_regionList( CalamaresUtils::Locale::TZRegion::fromZoneTab() ) - , m_regionModel( new CalamaresUtils::Locale::CStringListModel( m_regionList ) ) - , m_zonesModel( new CalamaresUtils::Locale::CStringListModel() ) - , m_blockTzWidgetSet( false ) +/** @brief Load supported locale keys + * + * If i18n/SUPPORTED exists, read the lines from that and return those + * as supported locales; otherwise, try the file at @p localeGenPath + * and get lines from that. Failing both, try the output of `locale -a`. + * + * This gives us a list of locale identifiers (e.g. en_US.UTF-8), which + * are not particularly human-readable. + * + * Only UTF-8 locales are returned (even if the system claims to support + * other, non-UTF-8, locales). + */ +static QStringList +loadLocales( const QString& localeGenPath ) { - connect( m_regionModel, &CalamaresUtils::Locale::CStringListModel::currentIndexChanged, [&]() { - m_zonesModel->setList( static_cast< const CalamaresUtils::Locale::TZRegion* >( - m_regionModel->item( m_regionModel->currentIndex() ) ) - ->zones() ); - updateLocaleLabels(); - } ); - - connect( - m_zonesModel, &CalamaresUtils::Locale::CStringListModel::currentIndexChanged, [&]() { updateLocaleLabels(); } ); -} - -Config::~Config() -{ - qDeleteAll( m_regionList ); -} - -CalamaresUtils::Locale::CStringListModel* -Config::zonesModel() const -{ - return m_zonesModel; -} - -CalamaresUtils::Locale::CStringListModel* -Config::regionModel() const -{ - return m_regionModel; -} - -void -Config::setLocaleInfo( const QString& initialRegion, const QString& initialZone, const QString& localeGenPath ) -{ - using namespace CalamaresUtils::Locale; - - cDebug() << "REGION MODEL SIZE" << initialRegion << initialZone; - auto* region = m_regionList.find< TZRegion >( initialRegion ); - if ( region && region->zones().find< TZZone >( initialZone ) ) - { - this->m_regionModel->setCurrentIndex( m_regionModel->indexOf( initialRegion ) ); - m_zonesModel->setList( region->zones() ); - this->m_zonesModel->setCurrentIndex( m_zonesModel->indexOf( initialZone ) ); - } - else - { - this->m_regionModel->setCurrentIndex( m_regionModel->indexOf( "America" ) ); - m_zonesModel->setList( - static_cast< const TZRegion* >( m_regionModel->item( m_regionModel->currentIndex() ) )->zones() ); - this->m_zonesModel->setCurrentIndex( m_zonesModel->indexOf( "New_York" ) ); - } + QStringList localeGenLines; // Some distros come with a meaningfully commented and easy to parse locale.gen, // and others ship a separate file /usr/share/i18n/SUPPORTED with a clean list of // supported locales. We first try that one, and if it doesn't exist, we fall back // to parsing the lines from locale.gen - m_localeGenLines.clear(); + localeGenLines.clear(); QFile supported( "/usr/share/i18n/SUPPORTED" ); QByteArray ba; @@ -108,7 +58,7 @@ Config::setLocaleInfo( const QString& initialRegion, const QString& initialZone, const auto lines = ba.split( '\n' ); for ( const QByteArray& line : lines ) { - m_localeGenLines.append( QString::fromLatin1( line.simplified() ) ); + localeGenLines.append( QString::fromLatin1( line.simplified() ) ); } } else @@ -149,11 +99,11 @@ Config::setLocaleInfo( const QString& initialRegion, const QString& initialZone, continue; } - m_localeGenLines.append( lineString ); + localeGenLines.append( lineString ); } } - if ( m_localeGenLines.isEmpty() ) + if ( localeGenLines.isEmpty() ) { cWarning() << "cannot acquire a list of available locales." << "The locale and localecfg modules will be broken as long as this " @@ -163,162 +113,458 @@ Config::setLocaleInfo( const QString& initialRegion, const QString& initialZone, << "* a well-formed" << ( localeGenPath.isEmpty() ? QLatin1String( "/etc/locale.gen" ) : localeGenPath ) << "\n\tOR" << "* a complete pre-compiled locale-gen database which allows complete locale -a output."; - return; // something went wrong and there's nothing we can do about it. + return localeGenLines; // something went wrong and there's nothing we can do about it. } // Assuming we have a list of supported locales, we usually only want UTF-8 ones // because it's not 1995. - for ( auto it = m_localeGenLines.begin(); it != m_localeGenLines.end(); ) - { - if ( !it->contains( "UTF-8", Qt::CaseInsensitive ) && !it->contains( "utf8", Qt::CaseInsensitive ) ) - { - it = m_localeGenLines.erase( it ); - } - else - { - ++it; - } - } + auto notUtf8 = []( const QString& s ) + { return !s.contains( "UTF-8", Qt::CaseInsensitive ) && !s.contains( "utf8", Qt::CaseInsensitive ); }; + auto it = std::remove_if( localeGenLines.begin(), localeGenLines.end(), notUtf8 ); + localeGenLines.erase( it, localeGenLines.end() ); // We strip " UTF-8" from "en_US.UTF-8 UTF-8" because it's redundant redundant. - for ( auto it = m_localeGenLines.begin(); it != m_localeGenLines.end(); ++it ) + // Also simplify whitespace. + auto unredundant = []( QString& s ) { - if ( it->endsWith( " UTF-8" ) ) + if ( s.endsWith( " UTF-8" ) ) { - it->chop( 6 ); + s.chop( 6 ); } - *it = it->simplified(); + s = s.simplified(); + }; + std::for_each( localeGenLines.begin(), localeGenLines.end(), unredundant ); + + return localeGenLines; +} + +static bool +updateGSLocation( Calamares::GlobalStorage* gs, const CalamaresUtils::Locale::TimeZoneData* location ) +{ + const QString regionKey = QStringLiteral( "locationRegion" ); + const QString zoneKey = QStringLiteral( "locationZone" ); + + if ( !location ) + { + if ( gs->contains( regionKey ) || gs->contains( zoneKey ) ) + { + gs->remove( regionKey ); + gs->remove( zoneKey ); + return true; + } + return false; + } + + // Update the GS region and zone (and possibly the live timezone) + bool locationChanged + = ( location->region() != gs->value( regionKey ) ) || ( location->zone() != gs->value( zoneKey ) ); + + gs->insert( regionKey, location->region() ); + gs->insert( zoneKey, location->zone() ); + + return locationChanged; +} + +static void +updateGSLocale( Calamares::GlobalStorage* gs, const LocaleConfiguration& locale ) +{ + CalamaresUtils::Locale::insertGS( *gs, locale.toMap(), CalamaresUtils::Locale::InsertMode::Overwrite ); +} + +Config::Config( QObject* parent ) + : QObject( parent ) + , m_regionModel( std::make_unique< CalamaresUtils::Locale::RegionsModel >() ) + , m_zonesModel( std::make_unique< CalamaresUtils::Locale::ZonesModel >() ) + , m_regionalZonesModel( std::make_unique< CalamaresUtils::Locale::RegionalZonesModel >( m_zonesModel.get() ) ) +{ + // Slightly unusual: connect to our *own* signals. Wherever the language + // or the location is changed, these signals are emitted, so hook up to + // them to update global storage accordingly. This simplifies code: + // we don't need to call an update-GS method, or introduce an intermediate + // update-thing-and-GS method. And everywhere where we **do** change + // language or location, we already emit the signal. + connect( this, + &Config::currentLanguageCodeChanged, + [ & ]() + { + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + gs->insert( "locale", m_selectedLocaleConfiguration.toBcp47() ); + } ); + + connect( this, + &Config::currentLCCodeChanged, + [ & ]() { updateGSLocale( Calamares::JobQueue::instance()->globalStorage(), localeConfiguration() ); } ); + + connect( this, + &Config::currentLocationChanged, + [ & ]() + { + const bool locationChanged + = updateGSLocation( Calamares::JobQueue::instance()->globalStorage(), currentLocation() ); + + if ( locationChanged && m_adjustLiveTimezone ) + { + QProcess::execute( "timedatectl", // depends on systemd + { "set-timezone", currentTimezoneCode() } ); + } + + emit currentTimezoneCodeChanged( currentTimezoneCode() ); + emit currentTimezoneNameChanged( currentTimezoneName() ); + } ); + + auto prettyStatusNotify = [ & ]() { emit prettyStatusChanged( prettyStatus() ); }; + connect( this, &Config::currentLanguageStatusChanged, prettyStatusNotify ); + connect( this, &Config::currentLCStatusChanged, prettyStatusNotify ); + connect( this, &Config::currentLocationStatusChanged, prettyStatusNotify ); +} + +Config::~Config() {} + +void +Config::setCurrentLocation() +{ + if ( !m_currentLocation && m_startingTimezone.isValid() ) + { + setCurrentLocation( m_startingTimezone.first, m_startingTimezone.second ); + } + if ( !m_selectedLocaleConfiguration.explicit_lang ) + { + auto newLocale = automaticLocaleConfiguration(); + setLanguage( newLocale.language() ); } - updateGlobalStorage(); - updateLocaleLabels(); } void -Config::updateGlobalLocale() +Config::setCurrentLocation( const QString& regionzone ) { - auto* gs = Calamares::JobQueue::instance()->globalStorage(); - const QString bcp47 = m_selectedLocaleConfiguration.toBcp47(); - gs->insert( "locale", bcp47 ); + auto r = CalamaresUtils::GeoIP::splitTZString( regionzone ); + if ( r.isValid() ) + { + setCurrentLocation( r.first, r.second ); + } } void -Config::updateGlobalStorage() +Config::setCurrentLocation( const QString& regionName, const QString& zoneName ) { - auto* gs = Calamares::JobQueue::instance()->globalStorage(); - - const auto* location = currentLocation(); - bool locationChanged = ( location->region() != gs->value( "locationRegion" ) ) - || ( location->zone() != gs->value( "locationZone" ) ); - - gs->insert( "locationRegion", location->region() ); - gs->insert( "locationZone", location->zone() ); - - updateGlobalLocale(); - - // If we're in chroot mode (normal install mode), then we immediately set the - // timezone on the live system. When debugging timezones, don't bother. -#ifndef DEBUG_TIMEZONES - if ( locationChanged && Calamares::Settings::instance()->doChroot() ) + using namespace CalamaresUtils::Locale; + auto* zone = m_zonesModel->find( regionName, zoneName ); + if ( zone ) { - QProcess::execute( "timedatectl", // depends on systemd - { "set-timezone", location->region() + '/' + location->zone() } ); + setCurrentLocation( zone ); } -#endif - - // Preserve those settings that have been made explicit. - auto newLocale = guessLocaleConfiguration(); - if ( !m_selectedLocaleConfiguration.isEmpty() && m_selectedLocaleConfiguration.explicit_lang ) + else { - newLocale.setLanguage( m_selectedLocaleConfiguration.language() ); + // Recursive, but America/New_York always exists. + setCurrentLocation( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); } - if ( !m_selectedLocaleConfiguration.isEmpty() && m_selectedLocaleConfiguration.explicit_lc ) - { - newLocale.lc_numeric = m_selectedLocaleConfiguration.lc_numeric; - newLocale.lc_time = m_selectedLocaleConfiguration.lc_time; - newLocale.lc_monetary = m_selectedLocaleConfiguration.lc_monetary; - newLocale.lc_paper = m_selectedLocaleConfiguration.lc_paper; - newLocale.lc_name = m_selectedLocaleConfiguration.lc_name; - newLocale.lc_address = m_selectedLocaleConfiguration.lc_address; - newLocale.lc_telephone = m_selectedLocaleConfiguration.lc_telephone; - newLocale.lc_measurement = m_selectedLocaleConfiguration.lc_measurement; - newLocale.lc_identification = m_selectedLocaleConfiguration.lc_identification; - } - newLocale.explicit_lang = m_selectedLocaleConfiguration.explicit_lang; - newLocale.explicit_lc = m_selectedLocaleConfiguration.explicit_lc; - - m_selectedLocaleConfiguration = newLocale; - updateLocaleLabels(); } void -Config::updateLocaleLabels() +Config::setCurrentLocation( const CalamaresUtils::Locale::TimeZoneData* location ) { - LocaleConfiguration lc - = m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration() : m_selectedLocaleConfiguration; - auto labels = prettyLocaleStatus( lc ); - emit prettyStatusChanged(); -} + const bool updateLocation = ( location != m_currentLocation ); + if ( updateLocation ) + { + m_currentLocation = location; + } + // lang should be always be updated + auto newLocale = automaticLocaleConfiguration(); + if ( !m_selectedLocaleConfiguration.explicit_lang ) + { + setLanguage( newLocale.language() ); + } -std::pair< QString, QString > -Config::prettyLocaleStatus( const LocaleConfiguration& lc ) const -{ - using CalamaresUtils::Locale::Label; + if ( updateLocation ) + { + if ( !m_selectedLocaleConfiguration.explicit_lc ) + { + m_selectedLocaleConfiguration.lc_numeric = newLocale.lc_numeric; + m_selectedLocaleConfiguration.lc_time = newLocale.lc_time; + m_selectedLocaleConfiguration.lc_monetary = newLocale.lc_monetary; + m_selectedLocaleConfiguration.lc_paper = newLocale.lc_paper; + m_selectedLocaleConfiguration.lc_name = newLocale.lc_name; + m_selectedLocaleConfiguration.lc_address = newLocale.lc_address; + m_selectedLocaleConfiguration.lc_telephone = newLocale.lc_telephone; + m_selectedLocaleConfiguration.lc_measurement = newLocale.lc_measurement; + m_selectedLocaleConfiguration.lc_identification = newLocale.lc_identification; - Label lang( lc.language(), Label::LabelFormat::AlwaysWithCountry ); - Label num( lc.lc_numeric, Label::LabelFormat::AlwaysWithCountry ); - - return std::make_pair< QString, QString >( - tr( "The system language will be set to %1." ).arg( lang.label() ), - tr( "The numbers and dates locale will be set to %1." ).arg( num.label() ) ); -} - -Calamares::JobList -Config::createJobs() -{ - QList< Calamares::job_ptr > list; - const CalamaresUtils::Locale::TZZone* location = currentLocation(); - - Calamares::Job* j = new SetTimezoneJob( location->region(), location->zone() ); - list.append( Calamares::job_ptr( j ) ); - - return list; + emit currentLCStatusChanged( currentLCStatus() ); + } + emit currentLocationChanged( m_currentLocation ); + // Other signals come from the LocationChanged signal + } } LocaleConfiguration -Config::guessLocaleConfiguration() const +Config::automaticLocaleConfiguration() const { + // Special case: no location has been set at **all** + if ( !currentLocation() ) + { + return LocaleConfiguration(); + } return LocaleConfiguration::fromLanguageAndLocation( - QLocale().name(), m_localeGenLines, currentLocation() ? currentLocation()->country() : "" ); + QLocale().name(), supportedLocales(), currentLocation()->country() ); } -QMap< QString, QString > -Config::localesMap() +LocaleConfiguration +Config::localeConfiguration() const { - return m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().toMap() - : m_selectedLocaleConfiguration.toMap(); + return m_selectedLocaleConfiguration.isEmpty() ? automaticLocaleConfiguration() : m_selectedLocaleConfiguration; +} + +void +Config::setLanguageExplicitly( const QString& language ) +{ + m_selectedLocaleConfiguration.explicit_lang = true; + setLanguage( language ); +} + +void +Config::setLanguage( const QString& language ) +{ + if ( language != m_selectedLocaleConfiguration.language() ) + { + m_selectedLocaleConfiguration.setLanguage( language ); + + emit currentLanguageStatusChanged( currentLanguageStatus() ); + emit currentLanguageCodeChanged( currentLanguageCode() ); + } +} + +void +Config::setLCLocaleExplicitly( const QString& locale ) +{ + // TODO: improve the granularity of this setting. + m_selectedLocaleConfiguration.lc_numeric = locale; + m_selectedLocaleConfiguration.lc_time = locale; + m_selectedLocaleConfiguration.lc_monetary = locale; + m_selectedLocaleConfiguration.lc_paper = locale; + m_selectedLocaleConfiguration.lc_name = locale; + m_selectedLocaleConfiguration.lc_address = locale; + m_selectedLocaleConfiguration.lc_telephone = locale; + m_selectedLocaleConfiguration.lc_measurement = locale; + m_selectedLocaleConfiguration.lc_identification = locale; + m_selectedLocaleConfiguration.explicit_lc = true; + + emit currentLCStatusChanged( currentLCStatus() ); + emit currentLCCodeChanged( currentLCCode() ); +} + +QString +Config::currentLocationStatus() const +{ + return tr( "Set timezone to %1/%2." ) + .arg( m_currentLocation ? m_currentLocation->region() : QString(), + m_currentLocation ? m_currentLocation->zone() : QString() ); +} + +QString +Config::currentTimezoneCode() const +{ + if ( m_currentLocation ) + { + return m_currentLocation->region() + '/' + m_currentLocation->zone(); + } + return QString(); +} + +QString +Config::currentTimezoneName() const +{ + if ( m_currentLocation ) + { + return m_regionModel->tr( m_currentLocation->region() ) + '/' + m_currentLocation->tr(); + } + return QString(); +} + + +static inline QString +localeLabel( const QString& s ) +{ + using CalamaresUtils::Locale::Translation; + + Translation lang( { s }, Translation::LabelFormat::AlwaysWithCountry ); + return lang.label(); +} + +QString +Config::currentLanguageStatus() const +{ + return tr( "The system language will be set to %1." ) + .arg( localeLabel( m_selectedLocaleConfiguration.language() ) ); +} + +QString +Config::currentLCStatus() const +{ + return tr( "The numbers and dates locale will be set to %1." ) + .arg( localeLabel( m_selectedLocaleConfiguration.lc_numeric ) ); } QString Config::prettyStatus() const { - QString status; - status += tr( "Set timezone to %1/%2.
" ) - .arg( m_regionModel->item( m_regionModel->currentIndex() )->tr() ) - .arg( m_zonesModel->item( m_zonesModel->currentIndex() )->tr() ); - - LocaleConfiguration lc - = m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration() : m_selectedLocaleConfiguration; - auto labels = prettyLocaleStatus( lc ); - status += labels.first + "
"; - status += labels.second + "
"; - - return status; + QStringList l { currentLocationStatus(), currentLanguageStatus(), currentLCStatus() }; + return l.join( QStringLiteral( "
" ) ); } - -const CalamaresUtils::Locale::TZZone* -Config::currentLocation() const +static inline void +getLocaleGenLines( const QVariantMap& configurationMap, QStringList& localeGenLines ) { - return static_cast< const CalamaresUtils::Locale::TZZone* >( m_zonesModel->item( m_zonesModel->currentIndex() ) ); + QString localeGenPath = CalamaresUtils::getString( configurationMap, "localeGenPath" ); + if ( localeGenPath.isEmpty() ) + { + localeGenPath = QStringLiteral( "/etc/locale.gen" ); + } + localeGenLines = loadLocales( localeGenPath ); +} + +static inline void +getAdjustLiveTimezone( const QVariantMap& configurationMap, bool& adjustLiveTimezone ) +{ + adjustLiveTimezone = CalamaresUtils::getBool( + configurationMap, "adjustLiveTimezone", Calamares::Settings::instance()->doChroot() ); +#ifdef DEBUG_TIMEZONES + if ( adjustLiveTimezone ) + { + cWarning() << "Turning off live-timezone adjustments because debugging is on."; + adjustLiveTimezone = false; + } +#endif +#ifdef __FreeBSD__ + if ( adjustLiveTimezone ) + { + cWarning() << "Turning off live-timezone adjustments on FreeBSD."; + adjustLiveTimezone = false; + } +#endif +} + +static inline void +getStartingTimezone( const QVariantMap& configurationMap, CalamaresUtils::GeoIP::RegionZonePair& startingTimezone ) +{ + QString region = CalamaresUtils::getString( configurationMap, "region" ); + QString zone = CalamaresUtils::getString( configurationMap, "zone" ); + if ( !region.isEmpty() && !zone.isEmpty() ) + { + startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( region, zone ); + } + else + { + startingTimezone + = CalamaresUtils::GeoIP::RegionZonePair( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); + } + + if ( CalamaresUtils::getBool( configurationMap, "useSystemTimezone", false ) ) + { + auto systemtz = CalamaresUtils::GeoIP::splitTZString( QTimeZone::systemTimeZoneId() ); + if ( systemtz.isValid() ) + { + cDebug() << "Overriding configured timezone" << startingTimezone << "with system timezone" << systemtz; + startingTimezone = systemtz; + } + } +} + +static inline void +getGeoIP( const QVariantMap& configurationMap, std::unique_ptr< CalamaresUtils::GeoIP::Handler >& geoip ) +{ + bool ok = false; + QVariantMap map = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); + if ( ok ) + { + QString url = CalamaresUtils::getString( map, "url" ); + QString style = CalamaresUtils::getString( map, "style" ); + QString selector = CalamaresUtils::getString( map, "selector" ); + + geoip = std::make_unique< CalamaresUtils::GeoIP::Handler >( style, url, selector ); + if ( !geoip->isValid() ) + { + cWarning() << "GeoIP Style" << style << "is not recognized."; + } + } +} + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + getLocaleGenLines( configurationMap, m_localeGenLines ); + getAdjustLiveTimezone( configurationMap, m_adjustLiveTimezone ); + getStartingTimezone( configurationMap, m_startingTimezone ); + getGeoIP( configurationMap, m_geoip ); + +#ifndef BUILD_AS_TEST + if ( m_geoip && m_geoip->isValid() ) + { + connect( + Calamares::ModuleManager::instance(), &Calamares::ModuleManager::modulesLoaded, this, &Config::startGeoIP ); + } +#endif +} + +Calamares::JobList +Config::createJobs() +{ + Calamares::JobList list; + const auto* location = currentLocation(); + + if ( location ) + { + Calamares::Job* j = new SetTimezoneJob( location->region(), location->zone() ); + list.append( Calamares::job_ptr( j ) ); + } + + return list; +} + +void +Config::finalizeGlobalStorage() const +{ + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + updateGSLocale( gs, localeConfiguration() ); + updateGSLocation( gs, currentLocation() ); +} + + +void +Config::startGeoIP() +{ + if ( m_geoip && m_geoip->isValid() ) + { + auto& network = CalamaresUtils::Network::Manager::instance(); + if ( network.hasInternet() || network.synchronousPing( m_geoip->url() ) ) + { + using Watcher = QFutureWatcher< CalamaresUtils::GeoIP::RegionZonePair >; + m_geoipWatcher = std::make_unique< Watcher >(); + m_geoipWatcher->setFuture( m_geoip->query() ); + connect( m_geoipWatcher.get(), &Watcher::finished, this, &Config::completeGeoIP ); + } + } +} + +void +Config::completeGeoIP() +{ + if ( !currentLocation() ) + { + auto r = m_geoipWatcher->result(); + if ( r.isValid() ) + { + m_startingTimezone = r; + } + else + { + cWarning() << "GeoIP returned invalid result."; + } + } + else + { + cWarning() << "GeoIP result ignored because a location is already set."; + } + m_geoipWatcher.reset(); + m_geoip.reset(); } diff --git a/src/modules/locale/Config.h b/src/modules/locale/Config.h index 9105cb071..bcdaf0bbf 100644 --- a/src/modules/locale/Config.h +++ b/src/modules/locale/Config.h @@ -1,32 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot - * Copyright 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALE_CONFIG_H #define LOCALE_CONFIG_H #include "LocaleConfiguration.h" -#include "timezonewidget/localeglobal.h" #include "Job.h" +#include "geoip/Handler.h" +#include "geoip/Interface.h" #include "locale/TimeZone.h" -#include +#include #include #include @@ -34,53 +25,165 @@ class Config : public QObject { Q_OBJECT - Q_PROPERTY( CalamaresUtils::Locale::CStringListModel* zonesModel READ zonesModel CONSTANT FINAL ) - Q_PROPERTY( CalamaresUtils::Locale::CStringListModel* regionModel READ regionModel CONSTANT FINAL ) + Q_PROPERTY( const QStringList& supportedLocales READ supportedLocales CONSTANT FINAL ) + Q_PROPERTY( CalamaresUtils::Locale::RegionsModel* regionModel READ regionModel CONSTANT FINAL ) + Q_PROPERTY( CalamaresUtils::Locale::ZonesModel* zonesModel READ zonesModel CONSTANT FINAL ) + Q_PROPERTY( QAbstractItemModel* regionalZonesModel READ regionalZonesModel CONSTANT FINAL ) + + Q_PROPERTY( + CalamaresUtils::Locale::TimeZoneData* currentLocation READ currentLocation_c NOTIFY currentLocationChanged ) + + // Status are complete, human-readable, messages + Q_PROPERTY( QString currentLocationStatus READ currentLocationStatus NOTIFY currentLanguageStatusChanged ) + Q_PROPERTY( QString currentLanguageStatus READ currentLanguageStatus NOTIFY currentLanguageStatusChanged ) + Q_PROPERTY( QString currentLCStatus READ currentLCStatus NOTIFY currentLCStatusChanged ) + // Name are shorter human-readable names + // .. main difference is that status is a full sentence, like "Timezone is America/New York" + // while name is just "America/New York" (and the code, below, is "America/New_York") + Q_PROPERTY( QString currentTimezoneName READ currentTimezoneName NOTIFY currentTimezoneNameChanged ) + // Code are internal identifiers, like "en_US.UTF-8" + Q_PROPERTY( QString currentTimezoneCode READ currentTimezoneCode NOTIFY currentTimezoneCodeChanged ) + Q_PROPERTY( QString currentLanguageCode READ currentLanguageCode WRITE setLanguageExplicitly NOTIFY + currentLanguageCodeChanged ) + Q_PROPERTY( QString currentLCCode READ currentLCCode WRITE setLCLocaleExplicitly NOTIFY currentLCCodeChanged ) + + // This is a long human-readable string with all three statuses Q_PROPERTY( QString prettyStatus READ prettyStatus NOTIFY prettyStatusChanged FINAL ) public: Config( QObject* parent = nullptr ); - ~Config(); - CalamaresUtils::Locale::CStringListModel* regionModel() const; - CalamaresUtils::Locale::CStringListModel* zonesModel() const; - - void setLocaleInfo( const QString& initialRegion, const QString& initialZone, const QString& localeGenPath ); + ~Config() override; + void setConfigurationMap( const QVariantMap& ); + void finalizeGlobalStorage() const; Calamares::JobList createJobs(); - QMap< QString, QString > localesMap(); + + /// locale configuration (LC_* and LANG) based solely on the current location. + LocaleConfiguration automaticLocaleConfiguration() const; + /// locale configuration that takes explicit settings into account + LocaleConfiguration localeConfiguration() const; + + /// The human-readable description of what timezone is used + QString currentLocationStatus() const; + /// The human-readable description of what language is used + QString currentLanguageStatus() const; + /// The human-readable description of what locale (LC_*) is used + QString currentLCStatus() const; + + /// The human-readable summary of what the module will do QString prettyStatus() const; + // A long list of locale codes (e.g. en_US.UTF-8) + const QStringList& supportedLocales() const { return m_localeGenLines; } + // All the regions (Africa, America, ...) + CalamaresUtils::Locale::RegionsModel* regionModel() const { return m_regionModel.get(); } + // All of the timezones in the world, according to zone.tab + CalamaresUtils::Locale::ZonesModel* zonesModel() const { return m_zonesModel.get(); } + // This model can be filtered by region + CalamaresUtils::Locale::RegionalZonesModel* regionalZonesModel() const { return m_regionalZonesModel.get(); } + + const CalamaresUtils::Locale::TimeZoneData* currentLocation() const { return m_currentLocation; } + + + /// Special case, set location from starting timezone if not already set + void setCurrentLocation(); + private: - CalamaresUtils::Locale::CStringPairList m_regionList; - CalamaresUtils::Locale::CStringListModel* m_regionModel; - CalamaresUtils::Locale::CStringListModel* m_zonesModel; + CalamaresUtils::Locale::TimeZoneData* currentLocation_c() const + { + return const_cast< CalamaresUtils::Locale::TimeZoneData* >( m_currentLocation ); + } - LocaleConfiguration m_selectedLocaleConfiguration; +public Q_SLOTS: + /// Set the language, but do not mark it as user-choice + void setLanguage( const QString& language ); + /// Set a language by user-choice, overriding future location changes + void setLanguageExplicitly( const QString& language ); + /// Set LC (formats) by user-choice, overriding future location changes + void setLCLocaleExplicitly( const QString& locale ); - QStringList m_localeGenLines; - int m_currentRegion = -1; - - bool m_blockTzWidgetSet; - - LocaleConfiguration guessLocaleConfiguration() const; - - // For the given locale config, return two strings describing - // the settings for language and numbers. - std::pair< QString, QString > prettyLocaleStatus( const LocaleConfiguration& ) const; - - /** @brief Update the GS *locale* key with the selected system language. + /** @brief Sets a location by full name * - * This uses whatever is set in m_selectedLocaleConfiguration as the language, - * and writes it to GS *locale* key (as a string, in BCP47 format). + * @p regionzone should be an identifier from zone.tab, e.g. "Africa/Abidjan", + * which is split into regon and zone. Invalid names will **not** + * change the actual location. */ - void updateGlobalLocale(); - void updateGlobalStorage(); - void updateLocaleLabels(); + void setCurrentLocation( const QString& regionzone ); + /** @brief Sets a location by split name + * + * @p region should be "America" or the like, while @p zone + * names a zone within that region. + */ + void setCurrentLocation( const QString& region, const QString& zone ); - const CalamaresUtils::Locale::TZZone* currentLocation() const; + /** @brief Sets a location by pointer to zone data. + * + */ + void setCurrentLocation( const CalamaresUtils::Locale::TimeZoneData* tz ); + + QString currentLanguageCode() const { return localeConfiguration().language(); } + QString currentLCCode() const { return localeConfiguration().lc_numeric; } + QString currentTimezoneName() const; // human-readable + QString currentTimezoneCode() const; signals: - void prettyStatusChanged(); + void currentLocationChanged( const CalamaresUtils::Locale::TimeZoneData* location ) const; + void currentLocationStatusChanged( const QString& ) const; + void currentLanguageStatusChanged( const QString& ) const; + void currentLCStatusChanged( const QString& ) const; + void prettyStatusChanged( const QString& ) const; + void currentLanguageCodeChanged( const QString& ) const; + void currentLCCodeChanged( const QString& ) const; + void currentTimezoneCodeChanged( const QString& ) const; + void currentTimezoneNameChanged( const QString& ) const; + +private: + /// A list of supported locale identifiers (e.g. "en_US.UTF-8") + QStringList m_localeGenLines; + + /// The regions (America, Asia, Europe ..) + std::unique_ptr< CalamaresUtils::Locale::RegionsModel > m_regionModel; + std::unique_ptr< CalamaresUtils::Locale::ZonesModel > m_zonesModel; + std::unique_ptr< CalamaresUtils::Locale::RegionalZonesModel > m_regionalZonesModel; + + const CalamaresUtils::Locale::TimeZoneData* m_currentLocation = nullptr; + + /** @brief Specific locale configurations + * + * "Automatic" locale configuration based on the location (e.g. + * Europe/Amsterdam means Dutch language and Dutch locale) leave + * this empty; if the user explicitly sets something, then + * this configuration is non-empty and takes precedence over the + * automatic location settings (so a user in Amsterdam can still + * pick Ukranian settings, for instance). + */ + LocaleConfiguration m_selectedLocaleConfiguration; + + /** @brief Should we adjust the "live" timezone when the location changes? + * + * In the Widgets UI, clicking around on the world map adjusts the + * timezone, and the live system can be made to follow that. + */ + bool m_adjustLiveTimezone; + + /** @brief The initial timezone (region, zone) specified in the config. + * + * This may be overridden by setting *useSystemTimezone* or by + * GeoIP settings. + */ + CalamaresUtils::GeoIP::RegionZonePair m_startingTimezone; + + /** @brief Handler for GeoIP lookup (if configured) + * + * The GeoIP lookup needs to be started at some suitable time, + * by explicitly calling *TODO* + */ + std::unique_ptr< CalamaresUtils::GeoIP::Handler > m_geoip; + + // Implementation details for doing GeoIP lookup + void startGeoIP(); + void completeGeoIP(); + std::unique_ptr< QFutureWatcher< CalamaresUtils::GeoIP::RegionZonePair > > m_geoipWatcher; }; diff --git a/src/modules/locale/LCLocaleDialog.cpp b/src/modules/locale/LCLocaleDialog.cpp index db33f0c3d..afdceb2a1 100644 --- a/src/modules/locale/LCLocaleDialog.cpp +++ b/src/modules/locale/LCLocaleDialog.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LCLocaleDialog.h" @@ -69,16 +60,19 @@ LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringLis connect( dbb->button( QDialogButtonBox::Cancel ), &QPushButton::clicked, this, &QDialog::reject ); connect( m_localesWidget, &QListWidget::itemDoubleClicked, this, &QDialog::accept ); - connect( m_localesWidget, &QListWidget::itemSelectionChanged, [this, dbb]() { - if ( m_localesWidget->selectedItems().isEmpty() ) - { - dbb->button( QDialogButtonBox::Ok )->setEnabled( false ); - } - else - { - dbb->button( QDialogButtonBox::Ok )->setEnabled( true ); - } - } ); + connect( m_localesWidget, + &QListWidget::itemSelectionChanged, + [ this, dbb ]() + { + if ( m_localesWidget->selectedItems().isEmpty() ) + { + dbb->button( QDialogButtonBox::Ok )->setEnabled( false ); + } + else + { + dbb->button( QDialogButtonBox::Ok )->setEnabled( true ); + } + } ); if ( selected > -1 ) { diff --git a/src/modules/locale/LCLocaleDialog.h b/src/modules/locale/LCLocaleDialog.h index 81e4cb547..2d1869a62 100644 --- a/src/modules/locale/LCLocaleDialog.h +++ b/src/modules/locale/LCLocaleDialog.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LCLOCALEDIALOG_H diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp index f1810fb83..b7b895290 100644 --- a/src/modules/locale/LocaleConfiguration.cpp +++ b/src/modules/locale/LocaleConfiguration.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocaleConfiguration.h" @@ -37,7 +28,7 @@ LocaleConfiguration::LocaleConfiguration( const QString& localeName, const QStri lc_numeric = lc_time = lc_monetary = lc_paper = lc_name = lc_address = lc_telephone = lc_measurement = lc_identification = formatsName; - (void)setLanguage( localeName ); + setLanguage( localeName ); } @@ -83,7 +74,7 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, if ( language == "pt" || language == "zh" ) { QString proposedLocale = QString( "%1_%2" ).arg( language ).arg( countryCode ); - foreach ( QString line, linesForLanguage ) + for ( const QString& line : linesForLanguage ) { if ( line.contains( proposedLocale ) ) { @@ -210,6 +201,10 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, // but nearly all its native speakers also speak English, // and migrants are likely to use English. { "IE", "en" }, + // India has many languages even though Hindi is known as + // national language but English is used in all computer + // and mobile devices. + { "IN", "en" }, { "IT", "it" }, { "MA", "ar" }, { "MK", "mk" }, diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h index 4f4fc6b21..acd80953c 100644 --- a/src/modules/locale/LocaleConfiguration.h +++ b/src/modules/locale/LocaleConfiguration.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALECONFIGURATION_H @@ -26,36 +17,53 @@ class LocaleConfiguration { -public: - /// @brief Create an empty locale, with nothing set - explicit LocaleConfiguration(); - /// @brief Create a locale with everything set to the given @p localeName +public: // TODO: private (but need to be public for tests) + /** @brief Create a locale with everything set to the given @p localeName + * + * Consumers should use fromLanguageAndLocation() instead. + */ explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ ) : LocaleConfiguration( localeName, localeName ) { } - /// @brief Create a locale with language and formats separate + /** @brief Create a locale with language and formats separate + * + * Consumers should use fromLanguageAndLocation() instead. + */ explicit LocaleConfiguration( const QString& localeName, const QString& formatsName ); + /// @brief Create an empty locale, with nothing set + explicit LocaleConfiguration(); + + /** @brief Create a "sensible" locale configuration for @p language and @p countryCode + * + * This method applies some heuristics to pick a good locale (from the list + * @p availableLocales), along with a good language (for instance, in + * large countries with many languages, picking a generally used one). + */ static LocaleConfiguration fromLanguageAndLocation( const QString& language, const QStringList& availableLocales, const QString& countryCode ); + /// Is this an empty (default-constructed and not modified) configuration? bool isEmpty() const; - /** @brief sets lang and the BCP47 representation + /** @brief sets language to @p localeName * - * Note that the documentation how this works is in packages.conf + * The language may be regionalized, e.g. "nl_BE". Both the language + * (with region) and BCP47 representation (without region, lowercase) + * are updated. The BCP47 representation is used by the packages module. + * See also `packages.conf` for a discussion of how this is used. */ void setLanguage( const QString& localeName ); + /// Current language (including region) QString language() const { return m_lang; } - - // Note that the documentation how this works is in packages.conf + /// Current language (lowercase, BCP47 format, no region) QString toBcp47() const { return m_languageLocaleBcp47; } QMap< QString, QString > toMap() const; // These become all uppercase in locale.conf, but we keep them lowercase here to - // avoid confusion with locale.h. + // avoid confusion with , which defines (e.g.) LC_NUMERIC macro. QString lc_numeric, lc_time, lc_monetary, lc_paper, lc_name, lc_address, lc_telephone, lc_measurement, lc_identification; diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp index 4de30c99f..236f63ec3 100644 --- a/src/modules/locale/LocalePage.cpp +++ b/src/modules/locale/LocalePage.cpp @@ -1,82 +1,64 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocalePage.h" -#include "SetTimezoneJob.h" +#include "Config.h" +#include "LCLocaleDialog.h" #include "timezonewidget/timezonewidget.h" -#include "GlobalStorage.h" -#include "JobQueue.h" -#include "LCLocaleDialog.h" -#include "Settings.h" - -#include "locale/Label.h" -#include "locale/TimeZone.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" +#include "utils/RAII.h" #include "utils/Retranslator.h" #include #include #include -#include +#include #include -LocalePage::LocalePage( QWidget* parent ) +LocalePage::LocalePage( Config* config, QWidget* parent ) : QWidget( parent ) - , m_regionList( CalamaresUtils::Locale::TZRegion::fromZoneTab() ) - , m_regionModel( std::make_unique< CalamaresUtils::Locale::CStringListModel >( m_regionList ) ) + , m_config( config ) , m_blockTzWidgetSet( false ) { QBoxLayout* mainLayout = new QVBoxLayout; QBoxLayout* tzwLayout = new QHBoxLayout; - mainLayout->addLayout( tzwLayout ); - m_tzWidget = new TimeZoneWidget( this ); + m_tzWidget = new TimeZoneWidget( m_config->zonesModel(), this ); tzwLayout->addStretch(); tzwLayout->addWidget( m_tzWidget ); tzwLayout->addStretch(); - setMinimumWidth( m_tzWidget->width() ); - - QBoxLayout* bottomLayout = new QHBoxLayout; - mainLayout->addLayout( bottomLayout ); + // Adjust for margins and spacing in this page + m_tzWidget->setMinimumHeight( m_tzWidget->minimumHeight() + 12 ); // 2 * spacing + QBoxLayout* zoneAndRegionLayout = new QHBoxLayout; m_regionLabel = new QLabel( this ); - bottomLayout->addWidget( m_regionLabel ); + zoneAndRegionLayout->addWidget( m_regionLabel ); m_regionCombo = new QComboBox( this ); - bottomLayout->addWidget( m_regionCombo ); + zoneAndRegionLayout->addWidget( m_regionCombo ); m_regionCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_regionLabel->setBuddy( m_regionCombo ); - bottomLayout->addSpacing( 20 ); + zoneAndRegionLayout->addSpacing( 20 ); m_zoneLabel = new QLabel( this ); - bottomLayout->addWidget( m_zoneLabel ); + zoneAndRegionLayout->addWidget( m_zoneLabel ); m_zoneCombo = new QComboBox( this ); m_zoneCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); - bottomLayout->addWidget( m_zoneCombo ); + zoneAndRegionLayout->addWidget( m_zoneCombo ); m_zoneLabel->setBuddy( m_zoneCombo ); - mainLayout->addStretch(); QBoxLayout* localeLayout = new QHBoxLayout; m_localeLabel = new QLabel( this ); @@ -87,7 +69,6 @@ LocalePage::LocalePage( QWidget* parent ) m_localeChangeButton = new QPushButton( this ); m_localeChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); localeLayout->addWidget( m_localeChangeButton ); - mainLayout->addLayout( localeLayout ); QBoxLayout* formatsLayout = new QHBoxLayout; m_formatsLabel = new QLabel( this ); @@ -98,24 +79,49 @@ LocalePage::LocalePage( QWidget* parent ) m_formatsChangeButton = new QPushButton( this ); m_formatsChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); formatsLayout->addWidget( m_formatsChangeButton ); - mainLayout->addLayout( formatsLayout ); + mainLayout->addLayout( tzwLayout ); + mainLayout->addStretch(); + mainLayout->addLayout( zoneAndRegionLayout ); + mainLayout->addStretch(); + mainLayout->addLayout( localeLayout ); + mainLayout->addLayout( formatsLayout ); + setMinimumWidth( m_tzWidget->width() ); setLayout( mainLayout ); + // Set up the location before connecting signals, to avoid a signal + // storm as various parts interact. + { + auto* regions = m_config->regionModel(); + auto* zones = m_config->regionalZonesModel(); + auto* location = m_config->currentLocation(); + zones->setRegion( location->region() ); + m_regionCombo->setModel( regions ); + m_zoneCombo->setModel( zones ); + m_tzWidget->setCurrentLocation( location ); + locationChanged( location ); // doesn't inform TZ widget + } + + connect( config, &Config::currentLCStatusChanged, m_formatsLabel, &QLabel::setText ); + connect( config, &Config::currentLanguageStatusChanged, m_localeLabel, &QLabel::setText ); + connect( config, &Config::currentLocationChanged, m_tzWidget, &TimeZoneWidget::setCurrentLocation ); + connect( config, &Config::currentLocationChanged, this, &LocalePage::locationChanged ); + connect( m_tzWidget, + &TimeZoneWidget::locationChanged, + config, + QOverload< const CalamaresUtils::Locale::TimeZoneData* >::of( &Config::setCurrentLocation ) ); + connect( m_regionCombo, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &LocalePage::regionChanged ); connect( m_zoneCombo, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &LocalePage::zoneChanged ); - connect( m_tzWidget, &TimeZoneWidget::locationChanged, this, &LocalePage::locationChanged ); + connect( m_localeChangeButton, &QPushButton::clicked, this, &LocalePage::changeLocale ); connect( m_formatsChangeButton, &QPushButton::clicked, this, &LocalePage::changeFormats ); - CALAMARES_RETRANSLATE_SLOT( &LocalePage::updateLocaleLabels ) + CALAMARES_RETRANSLATE_SLOT( &LocalePage::updateLocaleLabels ); } -LocalePage::~LocalePage() -{ - qDeleteAll( m_regionList ); -} +LocalePage::~LocalePage() {} void @@ -125,175 +131,8 @@ LocalePage::updateLocaleLabels() m_zoneLabel->setText( tr( "Zone:" ) ); m_localeChangeButton->setText( tr( "&Change..." ) ); m_formatsChangeButton->setText( tr( "&Change..." ) ); - - LocaleConfiguration lc - = m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration() : m_selectedLocaleConfiguration; - auto labels = prettyLocaleStatus( lc ); - m_localeLabel->setText( labels.first ); - m_formatsLabel->setText( labels.second ); -} - -void -LocalePage::init( const QString& initialRegion, const QString& initialZone, const QString& localeGenPath ) -{ - using namespace CalamaresUtils::Locale; - - m_regionCombo->setModel( m_regionModel.get() ); - m_regionCombo->currentIndexChanged( m_regionCombo->currentIndex() ); - - auto* region = m_regionList.find< TZRegion >( initialRegion ); - if ( region && region->zones().find< TZZone >( initialZone ) ) - { - m_tzWidget->setCurrentLocation( initialRegion, initialZone ); - } - else - { - m_tzWidget->setCurrentLocation( "America", "New_York" ); - } - - // Some distros come with a meaningfully commented and easy to parse locale.gen, - // and others ship a separate file /usr/share/i18n/SUPPORTED with a clean list of - // supported locales. We first try that one, and if it doesn't exist, we fall back - // to parsing the lines from locale.gen - m_localeGenLines.clear(); - QFile supported( "/usr/share/i18n/SUPPORTED" ); - QByteArray ba; - - if ( supported.exists() && supported.open( QIODevice::ReadOnly | QIODevice::Text ) ) - { - ba = supported.readAll(); - supported.close(); - - const auto lines = ba.split( '\n' ); - for ( const QByteArray& line : lines ) - { - m_localeGenLines.append( QString::fromLatin1( line.simplified() ) ); - } - } - else - { - QFile localeGen( localeGenPath ); - if ( localeGen.open( QIODevice::ReadOnly | QIODevice::Text ) ) - { - ba = localeGen.readAll(); - localeGen.close(); - } - else - { - cWarning() << "Cannot open file" << localeGenPath - << ". Assuming the supported languages are already built into " - "the locale archive."; - QProcess localeA; - localeA.start( "locale", QStringList() << "-a" ); - localeA.waitForFinished(); - ba = localeA.readAllStandardOutput(); - } - const auto lines = ba.split( '\n' ); - for ( const QByteArray& line : lines ) - { - if ( line.startsWith( "## " ) || line.startsWith( "# " ) || line.simplified() == "#" ) - { - continue; - } - - QString lineString = QString::fromLatin1( line.simplified() ); - if ( lineString.startsWith( "#" ) ) - { - lineString.remove( '#' ); - } - lineString = lineString.simplified(); - - if ( lineString.isEmpty() ) - { - continue; - } - - m_localeGenLines.append( lineString ); - } - } - - if ( m_localeGenLines.isEmpty() ) - { - cWarning() << "cannot acquire a list of available locales." - << "The locale and localecfg modules will be broken as long as this " - "system does not provide" - << "\n\t " - << "* a well-formed" << supported.fileName() << "\n\tOR" - << "* a well-formed" - << ( localeGenPath.isEmpty() ? QLatin1String( "/etc/locale.gen" ) : localeGenPath ) << "\n\tOR" - << "* a complete pre-compiled locale-gen database which allows complete locale -a output."; - return; // something went wrong and there's nothing we can do about it. - } - - // Assuming we have a list of supported locales, we usually only want UTF-8 ones - // because it's not 1995. - auto notUtf8 = []( const QString& s ) { - return !s.contains( "UTF-8", Qt::CaseInsensitive ) && !s.contains( "utf8", Qt::CaseInsensitive ); - }; - auto it = std::remove_if( m_localeGenLines.begin(), m_localeGenLines.end(), notUtf8 ); - m_localeGenLines.erase( it, m_localeGenLines.end() ); - - // We strip " UTF-8" from "en_US.UTF-8 UTF-8" because it's redundant redundant. - // Also simplify whitespace. - auto unredundant = []( QString& s ) { - if ( s.endsWith( " UTF-8" ) ) - { - s.chop( 6 ); - } - s = s.simplified(); - }; - std::for_each( m_localeGenLines.begin(), m_localeGenLines.end(), unredundant ); - - updateGlobalStorage(); -} - -std::pair< QString, QString > -LocalePage::prettyLocaleStatus( const LocaleConfiguration& lc ) const -{ - using CalamaresUtils::Locale::Label; - - Label lang( lc.language(), Label::LabelFormat::AlwaysWithCountry ); - Label num( lc.lc_numeric, Label::LabelFormat::AlwaysWithCountry ); - - return std::make_pair< QString, QString >( - tr( "The system language will be set to %1." ).arg( lang.label() ), - tr( "The numbers and dates locale will be set to %1." ).arg( num.label() ) ); -} - -QString -LocalePage::prettyStatus() const -{ - QString status; - status += tr( "Set timezone to %1/%2.
" ).arg( m_regionCombo->currentText() ).arg( m_zoneCombo->currentText() ); - - LocaleConfiguration lc - = m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration() : m_selectedLocaleConfiguration; - auto labels = prettyLocaleStatus( lc ); - status += labels.first + "
"; - status += labels.second + "
"; - - return status; -} - - -Calamares::JobList -LocalePage::createJobs() -{ - QList< Calamares::job_ptr > list; - const CalamaresUtils::Locale::TZZone* location = m_tzWidget->currentLocation(); - - Calamares::Job* j = new SetTimezoneJob( location->region(), location->zone() ); - list.append( Calamares::job_ptr( j ) ); - - return list; -} - - -QMap< QString, QString > -LocalePage::localesMap() -{ - return m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().toMap() - : m_selectedLocaleConfiguration.toMap(); + m_localeLabel->setText( m_config->currentLanguageStatus() ); + m_formatsLabel->setText( m_config->currentLCStatus() ); } @@ -301,117 +140,41 @@ void LocalePage::onActivate() { m_regionCombo->setFocus(); - if ( m_selectedLocaleConfiguration.isEmpty() || !m_selectedLocaleConfiguration.explicit_lang ) - { - auto newLocale = guessLocaleConfiguration(); - m_selectedLocaleConfiguration.setLanguage( newLocale.language() ); - updateGlobalLocale(); - updateLocaleLabels(); - } -} - - -LocaleConfiguration -LocalePage::guessLocaleConfiguration() const -{ - return LocaleConfiguration::fromLanguageAndLocation( - QLocale().name(), m_localeGenLines, m_tzWidget->currentLocation()->country() ); -} - - -void -LocalePage::updateGlobalLocale() -{ - auto* gs = Calamares::JobQueue::instance()->globalStorage(); - const QString bcp47 = m_selectedLocaleConfiguration.toBcp47(); - gs->insert( "locale", bcp47 ); -} - - -void -LocalePage::updateGlobalStorage() -{ - auto* gs = Calamares::JobQueue::instance()->globalStorage(); - - const auto* location = m_tzWidget->currentLocation(); - bool locationChanged = ( location->region() != gs->value( "locationRegion" ) ) - || ( location->zone() != gs->value( "locationZone" ) ); - - gs->insert( "locationRegion", location->region() ); - gs->insert( "locationZone", location->zone() ); - - updateGlobalLocale(); - - // If we're in chroot mode (normal install mode), then we immediately set the - // timezone on the live system. When debugging timezones, don't bother. -#ifndef DEBUG_TIMEZONES - if ( locationChanged && Calamares::Settings::instance()->doChroot() ) - { - QProcess::execute( "timedatectl", // depends on systemd - { "set-timezone", location->region() + '/' + location->zone() } ); - } -#endif - - // Preserve those settings that have been made explicit. - auto newLocale = guessLocaleConfiguration(); - if ( !m_selectedLocaleConfiguration.isEmpty() && m_selectedLocaleConfiguration.explicit_lang ) - { - newLocale.setLanguage( m_selectedLocaleConfiguration.language() ); - } - if ( !m_selectedLocaleConfiguration.isEmpty() && m_selectedLocaleConfiguration.explicit_lc ) - { - newLocale.lc_numeric = m_selectedLocaleConfiguration.lc_numeric; - newLocale.lc_time = m_selectedLocaleConfiguration.lc_time; - newLocale.lc_monetary = m_selectedLocaleConfiguration.lc_monetary; - newLocale.lc_paper = m_selectedLocaleConfiguration.lc_paper; - newLocale.lc_name = m_selectedLocaleConfiguration.lc_name; - newLocale.lc_address = m_selectedLocaleConfiguration.lc_address; - newLocale.lc_telephone = m_selectedLocaleConfiguration.lc_telephone; - newLocale.lc_measurement = m_selectedLocaleConfiguration.lc_measurement; - newLocale.lc_identification = m_selectedLocaleConfiguration.lc_identification; - } - newLocale.explicit_lang = m_selectedLocaleConfiguration.explicit_lang; - newLocale.explicit_lc = m_selectedLocaleConfiguration.explicit_lc; - - m_selectedLocaleConfiguration = newLocale; updateLocaleLabels(); } + void LocalePage::regionChanged( int currentIndex ) { using namespace CalamaresUtils::Locale; - Q_UNUSED( currentIndex ) - QString selectedRegion = m_regionCombo->currentData().toString(); - - TZRegion* region = m_regionList.find< TZRegion >( selectedRegion ); - if ( !region ) + QString selectedRegion = m_regionCombo->itemData( currentIndex ).toString(); { - return; + cSignalBlocker z( m_zoneCombo ); + m_config->regionalZonesModel()->setRegion( selectedRegion ); } - - m_zoneCombo->blockSignals( true ); - m_zoneCombo->setModel( new CStringListModel( region->zones() ) ); - m_zoneCombo->blockSignals( false ); - m_zoneCombo->currentIndexChanged( m_zoneCombo->currentIndex() ); + m_zoneCombo->currentIndexChanged( 0 ); } void LocalePage::zoneChanged( int currentIndex ) { - Q_UNUSED( currentIndex ) if ( !m_blockTzWidgetSet ) - m_tzWidget->setCurrentLocation( m_regionCombo->currentData().toString(), - m_zoneCombo->currentData().toString() ); - - updateGlobalStorage(); + { + m_config->setCurrentLocation( m_regionCombo->currentData().toString(), + m_zoneCombo->itemData( currentIndex ).toString() ); + } } void -LocalePage::locationChanged( const CalamaresUtils::Locale::TZZone* location ) +LocalePage::locationChanged( const CalamaresUtils::Locale::TimeZoneData* location ) { - m_blockTzWidgetSet = true; + if ( !location ) + { + return; + } + cScopedAssignment b( &m_blockTzWidgetSet, true, false ); // Set region index int index = m_regionCombo->findData( location->region() ); @@ -430,58 +193,35 @@ LocalePage::locationChanged( const CalamaresUtils::Locale::TZZone* location ) } m_zoneCombo->setCurrentIndex( index ); - - m_blockTzWidgetSet = false; - - updateGlobalStorage(); } void LocalePage::changeLocale() { - LCLocaleDialog* dlg - = new LCLocaleDialog( m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().language() - : m_selectedLocaleConfiguration.language(), - m_localeGenLines, - this ); + QPointer< LCLocaleDialog > dlg( + new LCLocaleDialog( m_config->localeConfiguration().language(), m_config->supportedLocales(), this ) ); dlg->exec(); - if ( dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) + if ( dlg && dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) { - m_selectedLocaleConfiguration.setLanguage( dlg->selectedLCLocale() ); - m_selectedLocaleConfiguration.explicit_lang = true; - this->updateGlobalLocale(); - this->updateLocaleLabels(); + m_config->setLanguageExplicitly( dlg->selectedLCLocale() ); + updateLocaleLabels(); } - dlg->deleteLater(); + delete dlg; } void LocalePage::changeFormats() { - LCLocaleDialog* dlg - = new LCLocaleDialog( m_selectedLocaleConfiguration.isEmpty() ? guessLocaleConfiguration().lc_numeric - : m_selectedLocaleConfiguration.lc_numeric, - m_localeGenLines, - this ); + QPointer< LCLocaleDialog > dlg( + new LCLocaleDialog( m_config->localeConfiguration().lc_numeric, m_config->supportedLocales(), this ) ); dlg->exec(); - if ( dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) + if ( dlg && dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) { - // TODO: improve the granularity of this setting. - m_selectedLocaleConfiguration.lc_numeric = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_time = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_monetary = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_paper = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_name = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_address = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_telephone = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_measurement = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.lc_identification = dlg->selectedLCLocale(); - m_selectedLocaleConfiguration.explicit_lc = true; - - this->updateLocaleLabels(); + m_config->setLCLocaleExplicitly( dlg->selectedLCLocale() ); + updateLocaleLabels(); } - dlg->deleteLater(); + delete dlg; } diff --git a/src/modules/locale/LocalePage.h b/src/modules/locale/LocalePage.h index d6aaa6de8..3b76b77b7 100644 --- a/src/modules/locale/LocalePage.h +++ b/src/modules/locale/LocalePage.h @@ -1,27 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALEPAGE_H #define LOCALEPAGE_H #include "LocaleConfiguration.h" -#include "timezonewidget/localeglobal.h" #include "Job.h" #include "locale/TimeZone.h" @@ -33,51 +23,31 @@ class QComboBox; class QLabel; class QPushButton; + +class Config; class TimeZoneWidget; class LocalePage : public QWidget { Q_OBJECT public: - explicit LocalePage( QWidget* parent = nullptr ); - virtual ~LocalePage(); - - void init( const QString& initialRegion, const QString& initialZone, const QString& localeGenPath ); - - QString prettyStatus() const; - - Calamares::JobList createJobs(); - - QMap< QString, QString > localesMap(); + explicit LocalePage( class Config* config, QWidget* parent = nullptr ); + ~LocalePage() override; void onActivate(); private: - LocaleConfiguration guessLocaleConfiguration() const; + /// @brief Non-owning pointer to the ViewStep's config + Config* m_config; - // For the given locale config, return two strings describing - // the settings for language and numbers. - std::pair< QString, QString > prettyLocaleStatus( const LocaleConfiguration& ) const; - - /** @brief Update the GS *locale* key with the selected system language. - * - * This uses whatever is set in m_selectedLocaleConfiguration as the language, - * and writes it to GS *locale* key (as a string, in BCP47 format). - */ - void updateGlobalLocale(); - void updateGlobalStorage(); void updateLocaleLabels(); void regionChanged( int currentIndex ); void zoneChanged( int currentIndex ); - void locationChanged( const CalamaresUtils::Locale::TZZone* location ); + void locationChanged( const CalamaresUtils::Locale::TimeZoneData* location ); void changeLocale(); void changeFormats(); - // Dynamically, QList< TZRegion* > - CalamaresUtils::Locale::CStringPairList m_regionList; - std::unique_ptr< CalamaresUtils::Locale::CStringListModel > m_regionModel; - TimeZoneWidget* m_tzWidget; QComboBox* m_regionCombo; QComboBox* m_zoneCombo; @@ -89,9 +59,6 @@ private: QLabel* m_formatsLabel; QPushButton* m_formatsChangeButton; - LocaleConfiguration m_selectedLocaleConfiguration; - - QStringList m_localeGenLines; bool m_blockTzWidgetSet; }; diff --git a/src/modules/locale/LocaleViewStep.cpp b/src/modules/locale/LocaleViewStep.cpp index 4fa219065..2145ad201 100644 --- a/src/modules/locale/LocaleViewStep.cpp +++ b/src/modules/locale/LocaleViewStep.cpp @@ -1,26 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocaleViewStep.h" #include "LocalePage.h" -#include "timezonewidget/localeglobal.h" #include "widgets/WaitingWidget.h" #include "GlobalStorage.h" @@ -35,7 +25,6 @@ #include #include -#include CALAMARES_PLUGIN_FACTORY_DEFINITION( LocaleViewStepFactory, registerPlugin< LocaleViewStep >(); ) @@ -45,7 +34,7 @@ LocaleViewStep::LocaleViewStep( QObject* parent ) , m_widget( new QWidget() ) , m_actualWidget( nullptr ) , m_nextEnabled( false ) - , m_geoip( nullptr ) + , m_config( std::make_unique< Config >() ) { QBoxLayout* mainLayout = new QHBoxLayout; m_widget->setLayout( mainLayout ); @@ -67,32 +56,20 @@ LocaleViewStep::~LocaleViewStep() void LocaleViewStep::setUpPage() { + m_config->setCurrentLocation(); if ( !m_actualWidget ) { - m_actualWidget = new LocalePage(); + m_actualWidget = new LocalePage( m_config.get() ); } - m_actualWidget->init( m_startingTimezone.first, m_startingTimezone.second, m_localeGenPath ); m_widget->layout()->addWidget( m_actualWidget ); + ensureSize( m_actualWidget->sizeHint() ); + m_nextEnabled = true; emit nextStatusChanged( m_nextEnabled ); } -void -LocaleViewStep::fetchGeoIpTimezone() -{ - if ( m_geoip && m_geoip->isValid() ) - { - m_startingTimezone = m_geoip->get(); - if ( !m_startingTimezone.isValid() ) - { - cWarning() << "GeoIP lookup at" << m_geoip->url() << "failed."; - } - } -} - - QString LocaleViewStep::prettyName() const { @@ -103,7 +80,7 @@ LocaleViewStep::prettyName() const QString LocaleViewStep::prettyStatus() const { - return m_prettyStatus; + return m_config->prettyStatus(); } @@ -145,13 +122,14 @@ LocaleViewStep::isAtEnd() const Calamares::JobList LocaleViewStep::jobs() const { - return m_jobs; + return m_config->createJobs(); } void LocaleViewStep::onActivate() { + m_config->setCurrentLocation(); // Finalize the location if ( !m_actualWidget ) { setUpPage(); @@ -163,84 +141,12 @@ LocaleViewStep::onActivate() void LocaleViewStep::onLeave() { - if ( m_actualWidget ) - { - m_jobs = m_actualWidget->createJobs(); - m_prettyStatus = m_actualWidget->prettyStatus(); - - auto map = m_actualWidget->localesMap(); - QVariantMap vm; - for ( auto it = map.constBegin(); it != map.constEnd(); ++it ) - { - vm.insert( it.key(), it.value() ); - } - - Calamares::JobQueue::instance()->globalStorage()->insert( "localeConf", vm ); - } - else - { - m_jobs.clear(); - Calamares::JobQueue::instance()->globalStorage()->remove( "localeConf" ); - } + m_config->finalizeGlobalStorage(); } void LocaleViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - QString region = CalamaresUtils::getString( configurationMap, "region" ); - QString zone = CalamaresUtils::getString( configurationMap, "zone" ); - if ( !region.isEmpty() && !zone.isEmpty() ) - { - m_startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( region, zone ); - } - else - { - m_startingTimezone - = CalamaresUtils::GeoIP::RegionZonePair( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); - } - - m_localeGenPath = CalamaresUtils::getString( configurationMap, "localeGenPath" ); - if ( m_localeGenPath.isEmpty() ) - { - m_localeGenPath = QStringLiteral( "/etc/locale.gen" ); - } - - bool ok = false; - QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); - if ( ok ) - { - QString url = CalamaresUtils::getString( geoip, "url" ); - QString style = CalamaresUtils::getString( geoip, "style" ); - QString selector = CalamaresUtils::getString( geoip, "selector" ); - - m_geoip = std::make_unique< CalamaresUtils::GeoIP::Handler >( style, url, selector ); - if ( !m_geoip->isValid() ) - { - cWarning() << "GeoIP Style" << style << "is not recognized."; - } - } -} - -Calamares::RequirementsList -LocaleViewStep::checkRequirements() -{ - LocaleGlobal::init(); - if ( m_geoip && m_geoip->isValid() ) - { - auto& network = CalamaresUtils::Network::Manager::instance(); - if ( network.hasInternet() ) - { - fetchGeoIpTimezone(); - } - else - { - if ( network.synchronousPing( m_geoip->url() ) ) - { - fetchGeoIpTimezone(); - } - } - } - - return Calamares::RequirementsList(); + m_config->setConfigurationMap( configurationMap ); } diff --git a/src/modules/locale/LocaleViewStep.h b/src/modules/locale/LocaleViewStep.h index 841aba97f..12b05f9f8 100644 --- a/src/modules/locale/LocaleViewStep.h +++ b/src/modules/locale/LocaleViewStep.h @@ -1,34 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALEVIEWSTEP_H #define LOCALEVIEWSTEP_H -#include "geoip/Handler.h" -#include "geoip/Interface.h" -#include "utils/PluginFactory.h" -#include "viewpages/ViewStep.h" +#include "Config.h" #include "DllMacro.h" - -#include -#include +#include "utils/PluginFactory.h" +#include "viewpages/ViewStep.h" #include @@ -40,7 +27,7 @@ class PLUGINDLLEXPORT LocaleViewStep : public Calamares::ViewStep public: explicit LocaleViewStep( QObject* parent = nullptr ); - virtual ~LocaleViewStep() override; + ~LocaleViewStep() override; QString prettyName() const override; QString prettyStatus() const override; @@ -60,25 +47,16 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; - /// @brief Do setup (returns empty list) asynchronously - virtual Calamares::RequirementsList checkRequirements() override; - private slots: void setUpPage(); private: - void fetchGeoIpTimezone(); QWidget* m_widget; LocalePage* m_actualWidget; bool m_nextEnabled; - QString m_prettyStatus; - CalamaresUtils::GeoIP::RegionZonePair m_startingTimezone; - QString m_localeGenPath; - - Calamares::JobList m_jobs; - std::unique_ptr< CalamaresUtils::GeoIP::Handler > m_geoip; + std::unique_ptr< Config > m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LocaleViewStepFactory ) diff --git a/src/modules/locale/SetTimezoneJob.cpp b/src/modules/locale/SetTimezoneJob.cpp index aa8c4c241..675cca8af 100644 --- a/src/modules/locale/SetTimezoneJob.cpp +++ b/src/modules/locale/SetTimezoneJob.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2015, Rohan Garg + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Rohan Garg + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetTimezoneJob.h" diff --git a/src/modules/locale/SetTimezoneJob.h b/src/modules/locale/SetTimezoneJob.h index 7b93770bb..d51171256 100644 --- a/src/modules/locale/SetTimezoneJob.h +++ b/src/modules/locale/SetTimezoneJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETTIMEZONEJOB_H diff --git a/src/modules/locale/Tests.cpp b/src/modules/locale/Tests.cpp index 83a2d42ff..6fe9d5662 100644 --- a/src/modules/locale/Tests.cpp +++ b/src/modules/locale/Tests.cpp @@ -1,28 +1,48 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ - -#include "Tests.h" +#include "Config.h" #include "LocaleConfiguration.h" +#include "timezonewidget/TimeZoneImage.h" + +#include "locale/TimeZone.h" +#include "utils/Logger.h" #include -QTEST_GUILESS_MAIN( LocaleTests ) +#include + +class LocaleTests : public QObject +{ + Q_OBJECT +public: + LocaleTests(); + ~LocaleTests() override; + +private Q_SLOTS: + void initTestCase(); + // Check the sample config file is processed correctly + void testEmptyLocaleConfiguration(); + void testDefaultLocaleConfiguration(); + void testSplitLocaleConfiguration(); + + // Check the TZ images for consistency + void testTZSanity(); + void testTZImages(); // No overlaps in images + void testTZLocations(); // No overlaps in locations + void testSpecificLocations(); + + // Check the Config loading + void testConfigInitialization(); +}; + +QTEST_MAIN( LocaleTests ) LocaleTests::LocaleTests() {} @@ -77,3 +97,177 @@ LocaleTests::testSplitLocaleConfiguration() QCOMPARE( lc3.toBcp47(), QStringLiteral( "da" ) ); QCOMPARE( lc3.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) ); } + +void +LocaleTests::testTZSanity() +{ + // Data source for all TZ info + QVERIFY( QFile( "/usr/share/zoneinfo/zone.tab" ).exists() ); + + // Contains a sensible number of total zones + const CalamaresUtils::Locale::ZonesModel zones; + QVERIFY( zones.rowCount( QModelIndex() ) > 100 ); +} + + +void +LocaleTests::testTZImages() +{ + // This test messes around with log-levels a lot so + // that it produces useful output (e.g. listing the problems, + // not every check it ever does). + Logger::setupLogLevel( Logger::LOGDEBUG ); + + // Number of zone images + // + // + auto images = TimeZoneImageList::fromDirectory( SOURCE_DIR ); + QCOMPARE( images.count(), images.zoneCount ); + + // All image sizes consistent + // + // + const QSize windowSize( 780, 340 ); + { + QImage background( SOURCE_DIR "/bg.png" ); + QVERIFY( !background.isNull() ); + QCOMPARE( background.size(), windowSize ); + } + for ( const auto& image : images ) + { + QCOMPARE( image.size(), windowSize ); + } + + // Check zones are uniquely-claimed + // + // + using namespace CalamaresUtils::Locale; + const ZonesModel m; + + int overlapcount = 0; + for ( auto it = m.begin(); it; ++it ) + { + QString region = m.data( m.index( it.index() ), ZonesModel::RegionRole ).toString(); + QString zoneName = m.data( m.index( it.index() ), ZonesModel::KeyRole ).toString(); + QVERIFY( !region.isEmpty() ); + QVERIFY( !zoneName.isEmpty() ); + const auto* zone = m.find( region, zoneName ); + const auto* iterzone = *it; + + QVERIFY( iterzone ); + QVERIFY( zone ); + QCOMPARE( zone, iterzone ); + QCOMPARE( zone->zone(), zoneName ); + QCOMPARE( zone->region(), region ); + + int overlap = 0; + auto pos = images.getLocationPosition( zone->longitude(), zone->latitude() ); + QVERIFY( images.index( pos, overlap ) >= 0 ); + QVERIFY( overlap > 0 ); // At least one image contains the spot + if ( overlap > 1 ) + { + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << Logger::SubEntry << "Zone" << zone->zone() << pos; + (void)images.index( pos, overlap ); + Logger::setupLogLevel( Logger::LOGERROR ); + overlapcount++; + } + } + + QEXPECT_FAIL( "", "TZ Images not yet all fixed", Continue ); + QCOMPARE( overlapcount, 0 ); +} + +bool +operator<( const QPoint& l, const QPoint& r ) +{ + if ( l.x() < r.x() ) + { + return true; + } + if ( l.x() > r.x() ) + { + return false; + } + return l.y() < r.y(); +} + +void +listAll( const QPoint& p, const CalamaresUtils::Locale::ZonesModel& zones ) +{ + using namespace CalamaresUtils::Locale; + for ( auto it = zones.begin(); it; ++it ) + { + const auto* zone = *it; + if ( !zone ) + { + cError() << Logger::SubEntry << "NULL zone"; + return; + } + if ( p == TimeZoneImageList::getLocationPosition( zone->longitude(), zone->latitude() ) ) + { + cError() << Logger::SubEntry << zone->zone(); + } + } +} + +void +LocaleTests::testTZLocations() +{ + using namespace CalamaresUtils::Locale; + ZonesModel zones; + + QVERIFY( zones.rowCount( QModelIndex() ) > 100 ); + + int overlapcount = 0; + std::set< QPoint > occupied; + for ( auto it = zones.begin(); it; ++it ) + { + const auto* zone = *it; + QVERIFY( zone ); + + auto pos = TimeZoneImageList::getLocationPosition( zone->longitude(), zone->latitude() ); + if ( occupied.find( pos ) != occupied.end() ) + { + cError() << "Zone" << zone->zone() << "occupies same spot as .."; + listAll( pos, zones ); + overlapcount++; + } + occupied.insert( pos ); + } + + QEXPECT_FAIL( "", "TZ Images contain pixel-overlaps", Continue ); + QCOMPARE( overlapcount, 0 ); +} + +void +LocaleTests::testSpecificLocations() +{ + CalamaresUtils::Locale::ZonesModel zones; + const auto* gibraltar = zones.find( "Europe", "Gibraltar" ); + const auto* ceuta = zones.find( "Africa", "Ceuta" ); + QVERIFY( gibraltar ); + QVERIFY( ceuta ); + + auto gpos = TimeZoneImageList::getLocationPosition( gibraltar->longitude(), gibraltar->latitude() ); + auto cpos = TimeZoneImageList::getLocationPosition( ceuta->longitude(), ceuta->latitude() ); + QEXPECT_FAIL( "", "Gibraltar and Ceuta are really close", Continue ); + QVERIFY( gpos != cpos ); + QVERIFY( gibraltar->latitude() > ceuta->latitude() ); + QEXPECT_FAIL( "", "Gibraltar and Ceuta are really close", Continue ); + QVERIFY( gpos.y() < cpos.y() ); // Gibraltar is north of Ceuta +} + +void +LocaleTests::testConfigInitialization() +{ + Config c; + + QVERIFY( !c.currentLocation() ); + QVERIFY( !c.currentLocationStatus().isEmpty() ); +} + + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/locale/Tests.h b/src/modules/locale/Tests.h deleted file mode 100644 index 299eac61d..000000000 --- a/src/modules/locale/Tests.h +++ /dev/null @@ -1,40 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2019, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - - -#ifndef TESTS_H -#define TESTS_H - -#include - -class LocaleTests : public QObject -{ - Q_OBJECT -public: - LocaleTests(); - ~LocaleTests() override; - -private Q_SLOTS: - void initTestCase(); - // Check the sample config file is processed correctly - void testEmptyLocaleConfiguration(); - void testDefaultLocaleConfiguration(); - void testSplitLocaleConfiguration(); -}; - -#endif diff --git a/src/modules/locale/images/bg.png.license b/src/modules/locale/images/bg.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/locale/images/bg.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/locale/images/orig/bg.png b/src/modules/locale/images/orig/bg.png deleted file mode 100644 index d7479bf96..000000000 Binary files a/src/modules/locale/images/orig/bg.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-1.0.png b/src/modules/locale/images/orig/timezone_-1.0.png deleted file mode 100644 index fb00d83c5..000000000 Binary files a/src/modules/locale/images/orig/timezone_-1.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-10.0.png b/src/modules/locale/images/orig/timezone_-10.0.png deleted file mode 100644 index 472eb888a..000000000 Binary files a/src/modules/locale/images/orig/timezone_-10.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-11.0.png b/src/modules/locale/images/orig/timezone_-11.0.png deleted file mode 100644 index 5f8c5d6f9..000000000 Binary files a/src/modules/locale/images/orig/timezone_-11.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-2.0.png b/src/modules/locale/images/orig/timezone_-2.0.png deleted file mode 100644 index 30a1ec738..000000000 Binary files a/src/modules/locale/images/orig/timezone_-2.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-3.0.png b/src/modules/locale/images/orig/timezone_-3.0.png deleted file mode 100644 index c22dbb64a..000000000 Binary files a/src/modules/locale/images/orig/timezone_-3.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-3.5.png b/src/modules/locale/images/orig/timezone_-3.5.png deleted file mode 100644 index c1df00b9b..000000000 Binary files a/src/modules/locale/images/orig/timezone_-3.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-4.0.png b/src/modules/locale/images/orig/timezone_-4.0.png deleted file mode 100644 index 4b5a4318c..000000000 Binary files a/src/modules/locale/images/orig/timezone_-4.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-4.5.png b/src/modules/locale/images/orig/timezone_-4.5.png deleted file mode 100644 index 9e3c13459..000000000 Binary files a/src/modules/locale/images/orig/timezone_-4.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-5.0.png b/src/modules/locale/images/orig/timezone_-5.0.png deleted file mode 100644 index 06c15e697..000000000 Binary files a/src/modules/locale/images/orig/timezone_-5.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-5.5.png b/src/modules/locale/images/orig/timezone_-5.5.png deleted file mode 100644 index b1c788dc8..000000000 Binary files a/src/modules/locale/images/orig/timezone_-5.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-6.0.png b/src/modules/locale/images/orig/timezone_-6.0.png deleted file mode 100644 index 8505fb1f7..000000000 Binary files a/src/modules/locale/images/orig/timezone_-6.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-7.0.png b/src/modules/locale/images/orig/timezone_-7.0.png deleted file mode 100644 index fec235da4..000000000 Binary files a/src/modules/locale/images/orig/timezone_-7.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-8.0.png b/src/modules/locale/images/orig/timezone_-8.0.png deleted file mode 100644 index bdad7bf50..000000000 Binary files a/src/modules/locale/images/orig/timezone_-8.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-9.0.png b/src/modules/locale/images/orig/timezone_-9.0.png deleted file mode 100644 index 04cb3cb8b..000000000 Binary files a/src/modules/locale/images/orig/timezone_-9.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_-9.5.png b/src/modules/locale/images/orig/timezone_-9.5.png deleted file mode 100644 index b1c788dc8..000000000 Binary files a/src/modules/locale/images/orig/timezone_-9.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_0.0.png b/src/modules/locale/images/orig/timezone_0.0.png deleted file mode 100644 index e59b773ca..000000000 Binary files a/src/modules/locale/images/orig/timezone_0.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_1.0.png b/src/modules/locale/images/orig/timezone_1.0.png deleted file mode 100644 index 2053b7e2e..000000000 Binary files a/src/modules/locale/images/orig/timezone_1.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_10.0.png b/src/modules/locale/images/orig/timezone_10.0.png deleted file mode 100644 index 475dcf43a..000000000 Binary files a/src/modules/locale/images/orig/timezone_10.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_10.5.png b/src/modules/locale/images/orig/timezone_10.5.png deleted file mode 100644 index 6ec7f9fa9..000000000 Binary files a/src/modules/locale/images/orig/timezone_10.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_11.0.png b/src/modules/locale/images/orig/timezone_11.0.png deleted file mode 100644 index 6168aa2ba..000000000 Binary files a/src/modules/locale/images/orig/timezone_11.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_11.5.png b/src/modules/locale/images/orig/timezone_11.5.png deleted file mode 100644 index afdedd7e0..000000000 Binary files a/src/modules/locale/images/orig/timezone_11.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_12.0.png b/src/modules/locale/images/orig/timezone_12.0.png deleted file mode 100644 index d0b35317e..000000000 Binary files a/src/modules/locale/images/orig/timezone_12.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_12.75.png b/src/modules/locale/images/orig/timezone_12.75.png deleted file mode 100644 index 4f74a8582..000000000 Binary files a/src/modules/locale/images/orig/timezone_12.75.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_13.0.png b/src/modules/locale/images/orig/timezone_13.0.png deleted file mode 100644 index fe2f134cd..000000000 Binary files a/src/modules/locale/images/orig/timezone_13.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_2.0.png b/src/modules/locale/images/orig/timezone_2.0.png deleted file mode 100644 index ec1e87401..000000000 Binary files a/src/modules/locale/images/orig/timezone_2.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_3.0.png b/src/modules/locale/images/orig/timezone_3.0.png deleted file mode 100644 index eda59dce1..000000000 Binary files a/src/modules/locale/images/orig/timezone_3.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_3.5.png b/src/modules/locale/images/orig/timezone_3.5.png deleted file mode 100644 index 2dc7399a8..000000000 Binary files a/src/modules/locale/images/orig/timezone_3.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_4.0.png b/src/modules/locale/images/orig/timezone_4.0.png deleted file mode 100644 index 483dc5342..000000000 Binary files a/src/modules/locale/images/orig/timezone_4.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_4.5.png b/src/modules/locale/images/orig/timezone_4.5.png deleted file mode 100644 index e09ed90bb..000000000 Binary files a/src/modules/locale/images/orig/timezone_4.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_5.0.png b/src/modules/locale/images/orig/timezone_5.0.png deleted file mode 100644 index 1bb6d20f3..000000000 Binary files a/src/modules/locale/images/orig/timezone_5.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_5.5.png b/src/modules/locale/images/orig/timezone_5.5.png deleted file mode 100644 index f904cc298..000000000 Binary files a/src/modules/locale/images/orig/timezone_5.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_5.75.png b/src/modules/locale/images/orig/timezone_5.75.png deleted file mode 100644 index 827ce1a45..000000000 Binary files a/src/modules/locale/images/orig/timezone_5.75.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_6.0.png b/src/modules/locale/images/orig/timezone_6.0.png deleted file mode 100644 index 460f9cf11..000000000 Binary files a/src/modules/locale/images/orig/timezone_6.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_6.5.png b/src/modules/locale/images/orig/timezone_6.5.png deleted file mode 100644 index d307bf310..000000000 Binary files a/src/modules/locale/images/orig/timezone_6.5.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_7.0.png b/src/modules/locale/images/orig/timezone_7.0.png deleted file mode 100644 index 239115af9..000000000 Binary files a/src/modules/locale/images/orig/timezone_7.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_8.0.png b/src/modules/locale/images/orig/timezone_8.0.png deleted file mode 100644 index 3627686fd..000000000 Binary files a/src/modules/locale/images/orig/timezone_8.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_9.0.png b/src/modules/locale/images/orig/timezone_9.0.png deleted file mode 100644 index 65d2e46dd..000000000 Binary files a/src/modules/locale/images/orig/timezone_9.0.png and /dev/null differ diff --git a/src/modules/locale/images/orig/timezone_9.5.png b/src/modules/locale/images/orig/timezone_9.5.png deleted file mode 100644 index 1c3290c08..000000000 Binary files a/src/modules/locale/images/orig/timezone_9.5.png and /dev/null differ diff --git a/src/modules/locale/images/pin.png b/src/modules/locale/images/pin.png index d4b32ed22..842fa8051 100644 Binary files a/src/modules/locale/images/pin.png and b/src/modules/locale/images/pin.png differ diff --git a/src/modules/locale/images/pin.png.license b/src/modules/locale/images/pin.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/locale/images/pin.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/locale/images/timezone_-1.0.png b/src/modules/locale/images/timezone_-1.0.png index f76e008c6..4fdbd0e3f 100644 Binary files a/src/modules/locale/images/timezone_-1.0.png and b/src/modules/locale/images/timezone_-1.0.png differ diff --git a/src/modules/locale/images/timezone_-10.0.png b/src/modules/locale/images/timezone_-10.0.png index 2a04bf251..5feb49e2b 100644 Binary files a/src/modules/locale/images/timezone_-10.0.png and b/src/modules/locale/images/timezone_-10.0.png differ diff --git a/src/modules/locale/images/timezone_-11.0.png b/src/modules/locale/images/timezone_-11.0.png index e2cca1485..43436e2ad 100644 Binary files a/src/modules/locale/images/timezone_-11.0.png and b/src/modules/locale/images/timezone_-11.0.png differ diff --git a/src/modules/locale/images/timezone_-7.0.png b/src/modules/locale/images/timezone_-7.0.png index a4a12b9ae..c3f98ecbc 100644 Binary files a/src/modules/locale/images/timezone_-7.0.png and b/src/modules/locale/images/timezone_-7.0.png differ diff --git a/src/modules/locale/images/timezone_0.0.png b/src/modules/locale/images/timezone_0.0.png index 6178a0ce1..f098b9c67 100644 Binary files a/src/modules/locale/images/timezone_0.0.png and b/src/modules/locale/images/timezone_0.0.png differ diff --git a/src/modules/locale/images/timezone_1.0.png b/src/modules/locale/images/timezone_1.0.png index 0840db048..94f05e750 100644 Binary files a/src/modules/locale/images/timezone_1.0.png and b/src/modules/locale/images/timezone_1.0.png differ diff --git a/src/modules/locale/images/timezone_10.0.png b/src/modules/locale/images/timezone_10.0.png index 9dfbd31f6..9304fa4ad 100644 Binary files a/src/modules/locale/images/timezone_10.0.png and b/src/modules/locale/images/timezone_10.0.png differ diff --git a/src/modules/locale/images/timezone_11.0.png b/src/modules/locale/images/timezone_11.0.png index 71e62ee0c..b5395bad1 100644 Binary files a/src/modules/locale/images/timezone_11.0.png and b/src/modules/locale/images/timezone_11.0.png differ diff --git a/src/modules/locale/images/timezone_11.5.png b/src/modules/locale/images/timezone_11.5.png deleted file mode 100644 index 442cabfeb..000000000 Binary files a/src/modules/locale/images/timezone_11.5.png and /dev/null differ diff --git a/src/modules/locale/images/timezone_12.0.png b/src/modules/locale/images/timezone_12.0.png index 9d4b458e7..049026760 100644 Binary files a/src/modules/locale/images/timezone_12.0.png and b/src/modules/locale/images/timezone_12.0.png differ diff --git a/src/modules/locale/images/timezone_2.0.png b/src/modules/locale/images/timezone_2.0.png index d037c3f79..1bae9510e 100644 Binary files a/src/modules/locale/images/timezone_2.0.png and b/src/modules/locale/images/timezone_2.0.png differ diff --git a/src/modules/locale/images/timezone_3.0.png b/src/modules/locale/images/timezone_3.0.png index dc930b78c..d5c003b4e 100644 Binary files a/src/modules/locale/images/timezone_3.0.png and b/src/modules/locale/images/timezone_3.0.png differ diff --git a/src/modules/locale/images/timezone_5.0.png b/src/modules/locale/images/timezone_5.0.png index e8ea14466..a15aaccc0 100644 Binary files a/src/modules/locale/images/timezone_5.0.png and b/src/modules/locale/images/timezone_5.0.png differ diff --git a/src/modules/locale/images/timezone_5.5.png b/src/modules/locale/images/timezone_5.5.png index 78c972fab..172ad8127 100644 Binary files a/src/modules/locale/images/timezone_5.5.png and b/src/modules/locale/images/timezone_5.5.png differ diff --git a/src/modules/locale/images/timezone_8.0.png b/src/modules/locale/images/timezone_8.0.png index ee5095a26..6db98f18f 100644 Binary files a/src/modules/locale/images/timezone_8.0.png and b/src/modules/locale/images/timezone_8.0.png differ diff --git a/src/modules/locale/locale.conf b/src/modules/locale/locale.conf index 4beb4fe85..4463f7a94 100644 --- a/src/modules/locale/locale.conf +++ b/src/modules/locale/locale.conf @@ -1,5 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- -# This settings are used to set your default system time zone. +# These settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and # provided by the 'tzdata' package of your Distribution. # @@ -11,33 +14,58 @@ # the locale page can be set through keys *region* and *zone*. # If either is not set, defaults to America/New_York. # +# Note that useSystemTimezone and GeoIP settings can change the +# starting time zone. +# region: "America" zone: "New_York" +# Instead of using *region* and *zone* specified above, +# you can use the system's notion of the timezone, instead. +# This can help if your system is automatically configured with +# a sensible TZ rather than chasing a fixed default. +# +# The default is false. +# +# useSystemTimezone: true + +# Should changing the system location (e.g. clicking around on the timezone +# map) immediately reflect the changed timezone in the live system? +# By default, installers (with a target system) do, and setup (e.g. OEM +# configuration) does not, but you can switch it on here (or off, if +# you think it's annoying in the installer). +# +# Note that not all systems support live adjustment. +# +# adjustLiveTimezone: true # System locales are detected in the following order: # # - /usr/share/i18n/SUPPORTED # - localeGenPath (defaults to /etc/locale.gen if not set) -# - 'locale -a' output +# - `locale -a` output # -# Enable only when your Distribution is using an +# Enable only when your Distribution is using a # custom path for locale.gen # -#localeGenPath: "PATH_TO/locale.gen" +#localeGenPath: "/etc/locale.gen" # GeoIP based Language settings: Leave commented out to disable GeoIP. # # GeoIP needs a working Internet connection. # This can be managed from `welcome.conf` by adding -# internet to the list of required conditions. +# internet to the list of required conditions. (The welcome +# module can also do its own GeoIP lookups, independently +# of the lookup done here. The lookup in the welcome module +# is used to establish language; this one is for timezone). # -# The configuration -# is in three parts: a *style*, which can be "json" or "xml" -# depending on the kind of data returned by the service, and -# a *url* where the data is retrieved, and an optional *selector* -# to pick the right field out of the returned data (e.g. field -# name in JSON or element name in XML). +# The configuration is in three parts: +# - a *style*, which can be "json" or "xml" depending on the +# kind of data returned by the service, and +# - a *url* where the data is retrieved, and +# - an optional *selector* +# to pick the right field out of the returned data (e.g. field +# name in JSON or element name in XML). # # The default selector (when the setting is blank) is picked to # work with existing JSON providers (which use "time_zone") and @@ -45,8 +73,8 @@ zone: "New_York" # # If the service configured via *url* uses # a different attribute name (e.g. "timezone") in JSON or a -# different element tag (e.g. "") in XML, set this -# string to the name or tag to be used. +# different element tag (e.g. "") in XML, set the +# selector to the name or tag to be used. # # In JSON: # - if the string contains "." characters, this is used as a @@ -58,7 +86,10 @@ zone: "New_York" # - all elements with the named tag (e.g. all TimeZone) elements # from the document are checked; the first one with non-empty # text value is used. -# +# Special case: +# - the *style* "fixed" is also supported. This ignores the data +# returned from the URL (but the URL must still be valid!) +# and just returns the value of the *selector*. # # An HTTP(S) request is made to *url*. The request should return # valid data in a suitable format, depending on *style*; @@ -67,9 +98,6 @@ zone: "New_York" # does not follow the conventions of "suitable data" described # below, *selector* may be used to pick different data. # -# Note that this example URL works, but the service is shutting -# down in June 2018. -# # Suitable JSON data looks like # ``` # {"time_zone":"America/New_York"} @@ -84,9 +112,6 @@ zone: "New_York" # - backslashes are removed # - spaces are replaced with _ # -# Legacy settings "geoipStyle", "geoipUrl" and "geoipSelector" -# in the top-level are still supported, but I'd advise against. -# # To disable GeoIP checking, either comment-out the entire geoip section, # or set the *style* key to an unsupported format (e.g. `none`). # Also, note the analogous feature in src/modules/welcome/welcome.conf. @@ -95,3 +120,12 @@ geoip: style: "json" url: "https://geoip.kde.org/v1/calamares" selector: "" # leave blank for the default + +# For testing purposes, you could use *fixed* style, to see how Calamares +# behaves in a particular zone: +# +# geoip: +# style: "fixed" +# url: "https://geoip.kde.org/v1/calamares" # Still needs to be valid! +# selector: "America/Vancouver" # this is the selected zone +# diff --git a/src/modules/locale/locale.qrc b/src/modules/locale/locale.qrc index b6b0d0cf7..713943ae7 100644 --- a/src/modules/locale/locale.qrc +++ b/src/modules/locale/locale.qrc @@ -21,7 +21,6 @@ images/timezone_10.0.png images/timezone_10.5.png images/timezone_11.0.png - images/timezone_11.5.png images/timezone_12.0.png images/timezone_12.75.png images/timezone_13.0.png diff --git a/src/modules/locale/locale.schema.yaml b/src/modules/locale/locale.schema.yaml new file mode 100644 index 000000000..7aa781127 --- /dev/null +++ b/src/modules/locale/locale.schema.yaml @@ -0,0 +1,40 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/locale +additionalProperties: false +type: object +properties: + region: { type: string, + enum: [ + Africa, + America, + Antarctica, + Arctic, + Asia, + Atlantic, + Australia, + Europe, + Indian, + Pacific + ] + } + zone: { type: string } + useSystemTimezone: { type: boolean, default: false } + + adjustLiveTimezone: { type: boolean, default: true } + + localeGenPath: { type: string } + + # TODO: refactor, this is reused in welcome + geoip: + additionalProperties: false + type: object + properties: + style: { type: string, enum: [ none, fixed, xml, json ] } + url: { type: string } + selector: { type: string } + required: [ style, url, selector ] + +required: [ region, zone ] diff --git a/src/modules/locale/timezonewidget/TimeZoneImage.cpp b/src/modules/locale/timezonewidget/TimeZoneImage.cpp new file mode 100644 index 000000000..ad772ef63 --- /dev/null +++ b/src/modules/locale/timezonewidget/TimeZoneImage.cpp @@ -0,0 +1,200 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "TimeZoneImage.h" + +#include "utils/Logger.h" + +#include + +#include + +static const char* zoneNames[] + = { "0.0", "1.0", "2.0", "3.0", "3.5", "4.0", "4.5", "5.0", "5.5", "5.75", "6.0", "6.5", "7.0", + "8.0", "9.0", "9.5", "10.0", "10.5", "11.0", "12.0", "12.75", "13.0", "-1.0", "-2.0", "-3.0", "-3.5", + "-4.0", "-4.5", "-5.0", "-5.5", "-6.0", "-7.0", "-8.0", "-9.0", "-9.5", "-10.0", "-11.0" }; +static_assert( TimeZoneImageList::zoneCount == ( sizeof( zoneNames ) / sizeof( zoneNames[ 0 ] ) ), + "Incorrect number of zones" ); + +#define ZONE_NAME QStringLiteral( "zone" ) + +static_assert( TimeZoneImageList::zoneCount == 37, "Incorrect number of zones" ); + +TimeZoneImageList::TimeZoneImageList() {} + +TimeZoneImageList +TimeZoneImageList::fromQRC() +{ + TimeZoneImageList l; + for ( const auto* zoneName : zoneNames ) + { + l.append( QImage( QStringLiteral( ":/images/timezone_" ) + zoneName + ".png" ) ); + l.last().setText( ZONE_NAME, zoneName ); + } + + return l; +} + +TimeZoneImageList +TimeZoneImageList::fromDirectory( const QString& dirName ) +{ + TimeZoneImageList l; + QDir dir( dirName ); + if ( !dir.exists() ) + { + cWarning() << "TimeZone images directory" << dirName << "does not exist."; + return l; + } + + for ( const auto* zoneName : zoneNames ) + { + l.append( QImage( dir.filePath( QStringLiteral( "timezone_" ) + zoneName + ".png" ) ) ); + l.last().setText( ZONE_NAME, zoneName ); + } + + return l; +} + +QPoint +TimeZoneImageList::getLocationPosition( double longitude, double latitude ) +{ + constexpr double MAP_Y_OFFSET = 0.125; + constexpr double MAP_X_OFFSET = -0.0370; + constexpr double MATH_PI = 3.14159265; + + const int width = imageSize.width(); + const int height = imageSize.height(); + + double x = ( width / 2.0 + ( width / 2.0 ) * longitude / 180.0 ) + MAP_X_OFFSET * width; + double y = ( height / 2.0 - ( height / 2.0 ) * latitude / 90.0 ) + MAP_Y_OFFSET * height; + + // Far north, the MAP_Y_OFFSET no longer holds, cancel the Y offset; it's noticeable + // from 62 degrees north, so scale those 28 degrees as if the world is flat south + // of there, and we have a funny "rounded" top of the world. In practice the locations + // of the different cities / regions looks ok -- at least Thule ends up in the right + // country, and Inuvik isn't in the ocean. + if ( latitude > 70.0 ) + { + y -= sin( MATH_PI * ( latitude - 70.0 ) / 56.0 ) * MAP_Y_OFFSET * height * 0.8; + } + if ( latitude > 74.0 ) + { + y += 4; + } + if ( latitude > 69.0 ) + { + y -= 2; + } + if ( latitude > 59.0 ) + { + y -= 4 * int( ( latitude - 54.0 ) / 5.0 ); + } + if ( latitude > 54.0 ) + { + y -= 2; + } + if ( latitude > 49.0 ) + { + y -= int( ( latitude - 44.0 ) / 5.0 ); + } + // Far south, some stretching occurs as well, but it is less pronounced. + // Move down by 1 pixel per 5 degrees past 10 south + if ( latitude < 0 ) + { + y += int( ( -latitude ) / 5.0 ); + } + // Antarctica isn't shown on the map, but you could try clicking there + if ( latitude < -60 ) + { + y = height - 1; + } + + if ( x < 0 ) + { + x = width + x; + } + if ( x >= width ) + { + x -= width; + } + if ( y < 0 ) + { + y = height + y; + } + if ( y >= height ) + { + y -= height; + } + + return QPoint( int( x ), int( y ) ); +} + +// Pixel value indicating that a spot is outside of a zone +static constexpr const int RGB_TRANSPARENT = 0; + +int +TimeZoneImageList::index( QPoint pos, int& count ) const +{ + count = 0; + +#ifdef DEBUG_TIMEZONES + for ( int i = 0; i < size(); ++i ) + { + const QImage& zone = at( i ); + + // If not transparent set as current + if ( zone.pixel( pos ) != RGB_TRANSPARENT ) + { + // Log *all* the zones that contain this point, + // but only pick the first. + if ( !count ) + { + cDebug() << Logger::SubEntry << "First zone found" << i << zone.text( ZONE_NAME ); + } + else + { + cDebug() << Logger::SubEntry << "Also in zone" << i << zone.text( ZONE_NAME ); + } + count++; + } + } + if ( !count ) + { + return -1; + } +#endif + return index( pos ); +} + +int +TimeZoneImageList::index( QPoint pos ) const +{ + for ( int i = 0; i < size(); ++i ) + { + const QImage& zone = at( i ); + + // If not transparent set as current + if ( zone.pixel( pos ) != RGB_TRANSPARENT ) + { + return i; + } + } + return -1; +} + +QImage +TimeZoneImageList::find( QPoint p ) const +{ + int i = index( p ); + if ( i < 0 || size() <= i ) + { + return QImage(); + } + return at( i ); +} diff --git a/src/modules/locale/timezonewidget/TimeZoneImage.h b/src/modules/locale/timezonewidget/TimeZoneImage.h new file mode 100644 index 000000000..c36f4e2f7 --- /dev/null +++ b/src/modules/locale/timezonewidget/TimeZoneImage.h @@ -0,0 +1,76 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef TIMEZONEIMAGE_H +#define TIMEZONEIMAGE_H + +#include +#include + +using TimeZoneImage = QImage; + +/** @brief All the timezone images + * + * There's one fixed list of timezone images that can be loaded + * from the QRC, or from the source directory. + */ +class TimeZoneImageList : public QList< TimeZoneImage > +{ +private: + TimeZoneImageList(); + +public: + /** @brief loads all the images from QRC. + * + * The images are assumed to be compiled into the Qt resource + * system and are loaded from there. + */ + static TimeZoneImageList fromQRC(); + /** @brief loads all the images from a specified directory. + * + * No error is returned if files are missing. + */ + static TimeZoneImageList fromDirectory( const QString& dirName ); + + /** @brief Map longitude and latitude to pixel positions + * + * The image is flat, and stretched at the poles and generally + * a bit weird, so this maps the global coordinates (as found in + * the zones table as a floating-point longitude and latitude value) + * to an x,y position. + */ + static QPoint getLocationPosition( double longitude, double latitude ); + + /** @brief Find the index of the image claiming point @p p + * + * This maps a point (presumably from getLocationPosition(), so + * originating from a longitude and latitude) to a specific zone + * image index. Returns -1 if no image claims the point (e.g. if + * it is out of bounds). + */ + int index( QPoint p ) const; + /** @brief Find the index of the image claiming point @p p + * + * As `index(p)`, but also fills in @p count with the number of + * zones that claim the point. + */ + int index( QPoint p, int& count ) const; + /** @brief Get image of the zone claiming @p p + * + * Can return a null image, if the point is unclaimed or invalid. + */ + QImage find( QPoint p ) const; + + /// @brief The **expected** number of zones in the list. + static constexpr const int zoneCount = 37; + /// @brief The expected size of each zone image. + static constexpr const QSize imageSize = QSize( 780, 340 ); +}; + +#endif diff --git a/src/modules/locale/timezonewidget/localeglobal.cpp b/src/modules/locale/timezonewidget/localeglobal.cpp deleted file mode 100644 index d0e889148..000000000 --- a/src/modules/locale/timezonewidget/localeglobal.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2014-2016, Teo Mrnjavac - * - * Originally from the Manjaro Installation Framework - * by Roland Singer - * Copyright (C) 2007 Free Software Foundation, Inc. - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#include "localeglobal.h" - -#include "locale/TimeZone.h" - -#include - -//### -//### Private variables -//### - -QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > LocaleGlobal::locales; - - -//### -//### Public methods -//### - - -void -LocaleGlobal::init() -{ - // TODO: Error handling - initLocales(); -} - - -QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > -LocaleGlobal::getLocales() -{ - return locales; -} - - -//### -//### Private methods -//### - - -void -LocaleGlobal::initLocales() -{ - static const char LOCALESDIR[] = "/usr/share/i18n/locales"; - - locales.clear(); - - QStringList files = QDir( LOCALESDIR ).entryList( QDir::Files, QDir::Name ); - - for ( int i = 0; i < files.size(); ++i ) - { - QString filename = files.at( i ); - QFile file( QString( LOCALESDIR ) + "/" + filename ); - if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) - { - continue; - } - - QTextStream in( &file ); - QString commentChar = "%"; - Locale locale; - QString lang, territory; - - locale.locale = filename; - - while ( !in.atEnd() ) - { - QString line = in.readLine().trimmed(); - QStringList split = line.split( commentChar, QString::KeepEmptyParts ) - .first() - .split( QRegExp( " (?=[^\"]*(\"[^\"]*\"[^\"]*)*$)" ), QString::SkipEmptyParts ); - - if ( split.size() < 2 ) - { - continue; - } - - QString sub1 = QString( split.at( 0 ) ).remove( "\"" ); - QString sub2 = QString( split.at( 1 ) ).remove( "\"" ); - - if ( sub1 == "comment_char" ) - { - commentChar = sub2; - } - else if ( sub1 == "title" ) - { - locale.description = sub2; - } - else if ( sub1 == "territory" ) - { - territory = sub2; - } - else if ( sub1 == "language" ) - { - lang = sub2; - } - } - - if ( lang.isEmpty() || territory.isEmpty() ) - { - continue; - } - - locales[ lang ][ territory ].append( locale ); - } -} diff --git a/src/modules/locale/timezonewidget/localeglobal.h b/src/modules/locale/timezonewidget/localeglobal.h deleted file mode 100644 index 1dc9548d0..000000000 --- a/src/modules/locale/timezonewidget/localeglobal.h +++ /dev/null @@ -1,63 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot - * - * Originally from the Manjaro Installation Framework - * by Roland Singer - * Copyright (C) 2007 Free Software Foundation, Inc. - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#ifndef LOCALEGLOBAL_H -#define LOCALEGLOBAL_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace CalamaresUtils -{ -namespace Locale -{ -class TZZone; -} -} // namespace CalamaresUtils - -class LocaleGlobal -{ -public: - struct Locale - { - QString description, locale; - }; - - static void init(); - static QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > getLocales(); - -private: - static QHash< QString, QHash< QString, QList< LocaleGlobal::Locale > > > locales; - - static void initLocales(); -}; - -#endif // LOCALEGLOBAL_H diff --git a/src/modules/locale/timezonewidget/timezonewidget.cpp b/src/modules/locale/timezonewidget/timezonewidget.cpp index 400af0841..724bc59f7 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.cpp +++ b/src/modules/locale/timezonewidget/timezonewidget.cpp @@ -1,47 +1,42 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include - #include "locale/TimeZone.h" #include "utils/Logger.h" #include "timezonewidget.h" -// Pixel value indicating that a spot is outside of a zone -#define RGB_TRANSPARENT 0 - -static constexpr double MAP_Y_OFFSET = 0.125; -static constexpr double MAP_X_OFFSET = -0.0370; -constexpr static double MATH_PI = 3.14159265; +#include +#include #ifdef DEBUG_TIMEZONES // Adds a label to the timezone with this name -constexpr static QLatin1String ZONE_NAME( "zone" ); +#define ZONE_NAME QStringLiteral( "zone" ) #endif -TimeZoneWidget::TimeZoneWidget( QWidget* parent ) +static QPoint +getLocationPosition( const CalamaresUtils::Locale::TimeZoneData* l ) +{ + return TimeZoneImageList::getLocationPosition( l->longitude(), l->latitude() ); +} + + +TimeZoneWidget::TimeZoneWidget( const CalamaresUtils::Locale::ZonesModel* zones, QWidget* parent ) : QWidget( parent ) + , timeZoneImages( TimeZoneImageList::fromQRC() ) + , m_zonesData( zones ) { setMouseTracking( false ); setCursor( Qt::PointingHandCursor ); @@ -54,100 +49,36 @@ TimeZoneWidget::TimeZoneWidget( QWidget* parent ) background = QImage( ":/images/bg.png" ); pin = QImage( ":/images/pin.png" ); -#ifdef DEBUG_TIMEZONES - if ( background.size() != QSize( 780, 340 ) ) - { - cWarning() << "Timezone background size mitsmatch" << background.size(); - } -#endif - // Set size setMinimumSize( background.size() ); setMaximumSize( background.size() ); - - // Zone images - for ( const auto* zoneName : - { "0.0", "1.0", "2.0", "3.0", "3.5", "4.0", "4.5", "5.0", "5.5", "5.75", "6.0", "6.5", "7.0", - "8.0", "9.0", "9.5", "10.0", "10.5", "11.0", "11.5", "12.0", "12.75", "13.0", "-1.0", "-2.0", "-3.0", - "-3.5", "-4.0", "-4.5", "-5.0", "-5.5", "-6.0", "-7.0", "-8.0", "-9.0", "-9.5", "-10.0", "-11.0" } ) - { - timeZoneImages.append( QImage( QStringLiteral( ":/images/timezone_" ) + zoneName + ".png" ) ); -#ifdef DEBUG_TIMEZONES - if ( timeZoneImages.last().size() != background.size() ) - { - cWarning() << "Timezone image size mismatch" << zoneName << timeZoneImages.last().size(); - } - timeZoneImages.last().setText( ZONE_NAME, zoneName ); -#endif - } + setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); } void -TimeZoneWidget::setCurrentLocation( QString regionName, QString zoneName ) +TimeZoneWidget::setCurrentLocation( const TimeZoneData* location ) { - using namespace CalamaresUtils::Locale; - const auto& regions = TZRegion::fromZoneTab(); - auto* region = regions.find< TZRegion >( regionName ); - if ( !region ) + if ( location == m_currentLocation ) { return; } - auto* zone = region->zones().find< TZZone >( zoneName ); - if ( zone ) - { - setCurrentLocation( zone ); - } -} - - -void -TimeZoneWidget::setCurrentLocation( const CalamaresUtils::Locale::TZZone* location ) -{ m_currentLocation = location; // Set zone QPoint pos = getLocationPosition( location ); #ifdef DEBUG_TIMEZONES - cDebug() << "Setting location" << location->region() << location->zone() << '(' << location->country() << '@' << location->latitude() << 'N' << location->longitude() << 'E' << ')'; + cDebug() << "Setting location" << location->region() << location->zone() << '(' << location->country() << '@' + << location->latitude() << 'N' << location->longitude() << 'E' << ')'; cDebug() << Logger::SubEntry << "pixel x" << pos.x() << "pixel y" << pos.y(); - - bool found = false; #endif - - for ( int i = 0; i < timeZoneImages.size(); ++i ) - { - QImage zone = timeZoneImages[ i ]; - - // If not transparent set as current - if ( zone.pixel( pos ) != RGB_TRANSPARENT ) - { -#ifdef DEBUG_TIMEZONES - // Log *all* the zones that contain this point, - // but only pick the first. - if ( !found ) - { - currentZoneImage = zone; - found = true; - cDebug() << Logger::SubEntry << "First zone found" << i << zone.text( ZONE_NAME ); - } - else - { - cDebug() << Logger::SubEntry << "Also in zone" << i << zone.text( ZONE_NAME ); - } -#else - currentZoneImage = zone; - break; -#endif - } - } + currentZoneImage = timeZoneImages.find( pos ); // Repaint widget repaint(); - emit locationChanged( m_currentLocation ); } @@ -155,85 +86,18 @@ TimeZoneWidget::setCurrentLocation( const CalamaresUtils::Locale::TZZone* locati //### Private //### - -QPoint -TimeZoneWidget::getLocationPosition( double longitude, double latitude ) +struct PainterEnder { - const int width = this->width(); - const int height = this->height(); - - double x = ( width / 2.0 + ( width / 2.0 ) * longitude / 180.0 ) + MAP_X_OFFSET * width; - double y = ( height / 2.0 - ( height / 2.0 ) * latitude / 90.0 ) + MAP_Y_OFFSET * height; - - // Far north, the MAP_Y_OFFSET no longer holds, cancel the Y offset; it's noticeable - // from 62 degrees north, so scale those 28 degrees as if the world is flat south - // of there, and we have a funny "rounded" top of the world. In practice the locations - // of the different cities / regions looks ok -- at least Thule ends up in the right - // country, and Inuvik isn't in the ocean. - if ( latitude > 70.0 ) - { - y -= sin( MATH_PI * ( latitude - 70.0 ) / 56.0 ) * MAP_Y_OFFSET * height * 0.8; - } - if ( latitude > 74.0 ) - { - y += 4; - } - if ( latitude > 69.0 ) - { - y -= 2; - } - if ( latitude > 59.0 ) - { - y -= 4 * int( ( latitude - 54.0 ) / 5.0 ); - } - if ( latitude > 54.0 ) - { - y -= 2; - } - if ( latitude > 49.0 ) - { - y -= int( ( latitude - 44.0 ) / 5.0 ); - } - // Far south, some stretching occurs as well, but it is less pronounced. - // Move down by 1 pixel per 5 degrees past 10 south - if ( latitude < 0 ) - { - y += int( ( -latitude ) / 5.0 ); - } - // Antarctica isn't shown on the map, but you could try clicking there - if ( latitude < -60 ) - { - y = height - 1; - } - - if ( x < 0 ) - { - x = width + x; - } - if ( x >= width ) - { - x -= width; - } - if ( y < 0 ) - { - y = height + y; - } - if ( y >= height ) - { - y -= height; - } - - return QPoint( int( x ), int( y ) ); -} - + QPainter& p; + ~PainterEnder() { p.end(); } +}; void TimeZoneWidget::paintEvent( QPaintEvent* ) { - const int width = this->width(); - const int height = this->height(); QFontMetrics fontMetrics( font ); QPainter painter( this ); + PainterEnder painter_end { painter }; painter.setRenderHint( QPainter::Antialiasing ); painter.setFont( font ); @@ -244,6 +108,11 @@ TimeZoneWidget::paintEvent( QPaintEvent* ) // Draw zone image painter.drawImage( 0, 0, currentZoneImage ); + if ( !m_currentLocation ) + { + return; + } + #ifdef DEBUG_TIMEZONES QPoint point = getLocationPosition( m_currentLocation ); // Draw latitude lines @@ -252,19 +121,16 @@ TimeZoneWidget::paintEvent( QPaintEvent* ) QPen p( y_lat ? Qt::black : Qt::red ); p.setWidth( 0 ); painter.setPen( p ); - QPoint latLine0( getLocationPosition( 0, y_lat ) ); - int llx = latLine0.x() + ( ( y_lat & 1 ) ? -10 : 0 ); - int lly = latLine0.y(); - - for ( int c = 0; c < width; ++c ) - { - painter.drawPoint( c, lly ); - } + QPoint latLine0( TimeZoneImageList::getLocationPosition( 0, y_lat ) ); + painter.drawLine( 0, latLine0.y(), this->width() - 1, latLine0.y() ); } // Just a dot in the selected location, no label painter.setPen( Qt::red ); painter.drawPoint( point ); #else + const int width = this->width(); + const int height = this->height(); + // Draw pin at current location QPoint point = getLocationPosition( m_currentLocation ); @@ -274,9 +140,9 @@ TimeZoneWidget::paintEvent( QPaintEvent* ) // .. the lambda manages deprecations: the old one works in Qt 5.9 and Qt 5.10, // while the new one avoids deprecation messages in Qt 5.13 and later. #if QT_VERSION >= QT_VERSION_CHECK( 5, 11, 0 ) - auto textwidth = [&]( const QString& s ) { return fontMetrics.horizontalAdvance( s ); }; + auto textwidth = [ & ]( const QString& s ) { return fontMetrics.horizontalAdvance( s ); }; #else - auto textwidth = [&]( const QString& s ) { return fontMetrics.width( s ); }; + auto textwidth = [ & ]( const QString& s ) { return fontMetrics.width( s ); }; #endif const int textWidth = textwidth( m_currentLocation ? m_currentLocation->tr() : QString() ); const int textHeight = fontMetrics.height(); @@ -306,8 +172,6 @@ TimeZoneWidget::paintEvent( QPaintEvent* ) painter.setPen( Qt::white ); painter.drawText( rect.x() + 5, rect.bottom() - 4, m_currentLocation ? m_currentLocation->tr() : QString() ); #endif - - painter.end(); } @@ -319,40 +183,20 @@ TimeZoneWidget::mousePressEvent( QMouseEvent* event ) return; } - // Set nearest location - int nX = 999999, mX = event->pos().x(); - int nY = 999999, mY = event->pos().y(); - - using namespace CalamaresUtils::Locale; - const TZZone* closest = nullptr; - for ( const auto* region_p : TZRegion::fromZoneTab() ) + int mX = event->pos().x(); + int mY = event->pos().y(); + auto distance = [ & ]( const CalamaresUtils::Locale::TimeZoneData* zone ) { - const auto* region = dynamic_cast< const TZRegion* >( region_p ); - if ( region ) - { - for ( const auto* zone_p : region->zones() ) - { - const auto* zone = dynamic_cast< const TZZone* >( zone_p ); - if ( zone ) - { - QPoint locPos = getLocationPosition( zone->longitude(), zone->latitude() ); - - if ( ( abs( mX - locPos.x() ) + abs( mY - locPos.y() ) < abs( mX - nX ) + abs( mY - nY ) ) ) - { - closest = zone; - nX = locPos.x(); - nY = locPos.y(); - } - } - } - } - } + QPoint locPos = TimeZoneImageList::getLocationPosition( zone->longitude(), zone->latitude() ); + return double( abs( mX - locPos.x() ) + abs( mY - locPos.y() ) ); + }; + const auto* closest = m_zonesData->find( distance ); if ( closest ) { // Set zone image and repaint widget setCurrentLocation( closest ); // Emit signal - emit locationChanged( m_currentLocation ); + emit locationChanged( closest ); } } diff --git a/src/modules/locale/timezonewidget/timezonewidget.h b/src/modules/locale/timezonewidget/timezonewidget.h index d91c5cf27..7ccfb2b80 100644 --- a/src/modules/locale/timezonewidget/timezonewidget.h +++ b/src/modules/locale/timezonewidget/timezonewidget.h @@ -1,71 +1,73 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TIMEZONEWIDGET_H #define TIMEZONEWIDGET_H -#include "localeglobal.h" +#include "TimeZoneImage.h" #include "locale/TimeZone.h" -#include #include -#include -#include -#include -#include -#include -#include -#include #include +/** @brief The TimeZoneWidget shows a map and reports where clicks happen + * + * This widget shows a map (unspecified whether it's a whole world map + * or can show regionsvia some kind of internal state). Mouse clicks are + * translated into timezone locations (e.g. the zone for America/New_York). + * + * The current location can be changed programmatically, by name + * or through a pointer to a location. If a pointer is used, take care + * that the pointer is to a zone in the same model as used by the + * widget. + * + * When a location is chosen -- by mouse click or programmatically -- + * the locationChanged() signal is emitted with the new location. + * + * NOTE: the widget currently uses the globally cached TZRegion::fromZoneTab() + */ class TimeZoneWidget : public QWidget { Q_OBJECT public: - using TZZone = CalamaresUtils::Locale::TZZone; + using TimeZoneData = CalamaresUtils::Locale::TimeZoneData; - explicit TimeZoneWidget( QWidget* parent = nullptr ); - - void setCurrentLocation( QString region, QString zone ); - void setCurrentLocation( const TZZone* location ); - const TZZone* currentLocation() { return m_currentLocation; } + explicit TimeZoneWidget( const CalamaresUtils::Locale::ZonesModel* zones, QWidget* parent = nullptr ); +public Q_SLOTS: + /** @brief Sets a location by pointer + * + * Pointer should be within the same model as the widget uses. + */ + void setCurrentLocation( const TimeZoneData* location ); signals: - void locationChanged( const TZZone* location ); + /** @brief The location has changed by mouse click */ + void locationChanged( const TimeZoneData* location ); private: QFont font; QImage background, pin, currentZoneImage; - QList< QImage > timeZoneImages; - const TZZone* m_currentLocation = nullptr; // Not owned by me + TimeZoneImageList timeZoneImages; - QPoint getLocationPosition( const TZZone* l ) { return getLocationPosition( l->longitude(), l->latitude() ); } - QPoint getLocationPosition( double longitude, double latitude ); + const CalamaresUtils::Locale::ZonesModel* m_zonesData; + const TimeZoneData* m_currentLocation = nullptr; // Not owned by me - void paintEvent( QPaintEvent* event ); - void mousePressEvent( QMouseEvent* event ); + void paintEvent( QPaintEvent* event ) override; + void mousePressEvent( QMouseEvent* event ) override; }; #endif // TIMEZONEWIDGET_H diff --git a/src/modules/localecfg/main.py b/src/modules/localecfg/main.py index 9e50fb448..9cf593017 100644 --- a/src/modules/localecfg/main.py +++ b/src/modules/localecfg/main.py @@ -1,31 +1,23 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Anke Boersma -# Copyright 2015, Philip Müller -# Copyright 2016, Teo Mrnjavac -# Copyright 2018, AlmAck -# Copyright 2018-2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Anke Boersma +# SPDX-FileCopyrightText: 2015 Philip Müller +# SPDX-FileCopyrightText: 2016 Teo Mrnjavac +# SPDX-FileCopyrightText: 2018 AlmAck +# SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import re import shutil + import libcalamares import gettext @@ -80,8 +72,12 @@ def rewrite_locale_gen(srcfilename, destfilename, locale_conf): # Get entire source-file contents text = [] - with open(srcfilename, "r") as gen: - text = gen.readlines() + try: + with open(srcfilename, "r") as gen: + text = gen.readlines() + except FileNotFoundError: + # That's ok, the file doesn't exist so assume empty + pass # we want unique values, so locale_values should have 1 or 2 items locale_values = set(locale_conf.values()) diff --git a/src/modules/localecfg/module.desc b/src/modules/localecfg/module.desc index 4b8cd9e6d..030846a3e 100644 --- a/src/modules/localecfg/module.desc +++ b/src/modules/localecfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Enable the configured locales (those set by the user on the # user page) in /etc/locale.gen, if they are available in the # target system. diff --git a/src/modules/localeq/CMakeLists.txt b/src/modules/localeq/CMakeLists.txt index 458f44bfb..ee3f07314 100644 --- a/src/modules/localeq/CMakeLists.txt +++ b/src/modules/localeq/CMakeLists.txt @@ -1,3 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "localeq (QML is not supported in this build)" ) + return() +endif() + # When debugging the timezone widget, add this debugging definition # to have a debugging-friendly timezone widget, debug logging, # and no intrusive timezone-setting while clicking around. @@ -6,6 +16,17 @@ if( DEBUG_TIMEZONES ) add_definitions( -DDEBUG_TIMEZONES ) endif() +find_package(Qt5Location CONFIG) +set_package_properties(Qt5Location PROPERTIES + DESCRIPTION "Used for rendering the map" + TYPE RUNTIME +) +find_package(Qt5Positioning CONFIG) +set_package_properties(Qt5Positioning PROPERTIES + DESCRIPTION "Used for GeoLocation and GeoCoding" + TYPE RUNTIME +) + # Because we're sharing sources with the regular locale module set( _locale ${CMAKE_CURRENT_SOURCE_DIR}/../locale ) @@ -19,11 +40,9 @@ calamares_add_plugin( localeq ${_locale}/LocaleConfiguration.cpp ${_locale}/Config.cpp ${_locale}/SetTimezoneJob.cpp - ${_locale}/timezonewidget/localeglobal.cpp RESOURCES localeq.qrc LINK_PRIVATE_LIBRARIES - calamaresui Qt5::Network SHARED_LIB ) diff --git a/src/modules/localeq/LocaleQmlViewStep.cpp b/src/modules/localeq/LocaleQmlViewStep.cpp index 13fbeaacc..6139d3a45 100644 --- a/src/modules/localeq/LocaleQmlViewStep.cpp +++ b/src/modules/localeq/LocaleQmlViewStep.cpp @@ -1,95 +1,29 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018,2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 20182020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LocaleQmlViewStep.h" -#include "GlobalStorage.h" -#include "JobQueue.h" - -#include "geoip/Handler.h" -#include "network/Manager.h" -#include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" -#include "utils/Variant.h" -#include "utils/Yaml.h" - -#include "timezonewidget/localeglobal.h" - -#include "Branding.h" -#include "modulesystem/ModuleManager.h" -#include -#include -#include -#include CALAMARES_PLUGIN_FACTORY_DEFINITION( LocaleQmlViewStepFactory, registerPlugin< LocaleQmlViewStep >(); ) LocaleQmlViewStep::LocaleQmlViewStep( QObject* parent ) -: Calamares::QmlViewStep( parent ) -, m_config( new Config( this ) ) -, m_nextEnabled( false ) -, m_geoip( nullptr ) + : Calamares::QmlViewStep( parent ) + , m_config( std::make_unique< Config >( this ) ) { - emit nextStatusChanged( m_nextEnabled ); } QObject* LocaleQmlViewStep::getConfig() { - return m_config; -} - -void -LocaleQmlViewStep::fetchGeoIpTimezone() -{ - if ( m_geoip && m_geoip->isValid() ) - { - m_startingTimezone = m_geoip->get(); - if ( !m_startingTimezone.isValid() ) - { - cWarning() << "GeoIP lookup at" << m_geoip->url() << "failed."; - } - } - - m_config->setLocaleInfo(m_startingTimezone.first, m_startingTimezone.second, m_localeGenPath); -} - -Calamares::RequirementsList LocaleQmlViewStep::checkRequirements() -{ - LocaleGlobal::init(); - if ( m_geoip && m_geoip->isValid() ) - { - auto& network = CalamaresUtils::Network::Manager::instance(); - if ( network.hasInternet() ) - { - fetchGeoIpTimezone(); - } - else - { - if ( network.synchronousPing( m_geoip->url() ) ) - { - fetchGeoIpTimezone(); - } - } - } - - return Calamares::RequirementsList(); + return m_config.get(); } QString @@ -98,17 +32,21 @@ LocaleQmlViewStep::prettyName() const return tr( "Location" ); } +QString +LocaleQmlViewStep::prettyStatus() const +{ + return m_config->prettyStatus(); +} + bool LocaleQmlViewStep::isNextEnabled() const { - // TODO: should return true return true; } bool LocaleQmlViewStep::isBackEnabled() const { - // TODO: should return true (it's weird that you are not allowed to have welcome *after* anything return true; } @@ -116,7 +54,6 @@ LocaleQmlViewStep::isBackEnabled() const bool LocaleQmlViewStep::isAtBeginning() const { - // TODO: adjust to "pages" in the QML return true; } @@ -124,79 +61,31 @@ LocaleQmlViewStep::isAtBeginning() const bool LocaleQmlViewStep::isAtEnd() const { - // TODO: adjust to "pages" in the QML return true; } Calamares::JobList LocaleQmlViewStep::jobs() const { - return m_jobs; + return m_config->createJobs(); } -void LocaleQmlViewStep::onActivate() +void +LocaleQmlViewStep::onActivate() { - // TODO no sure if it is needed at all or for the abstract class to start something + m_config->setCurrentLocation(); // Finalize the location + QmlViewStep::onActivate(); } -void LocaleQmlViewStep::onLeave() +void +LocaleQmlViewStep::onLeave() { - if ( true ) - { - m_jobs = m_config->createJobs(); -// m_prettyStatus = m_actualWidget->prettyStatus(); - - auto map = m_config->localesMap(); - QVariantMap vm; - for ( auto it = map.constBegin(); it != map.constEnd(); ++it ) - { - vm.insert( it.key(), it.value() ); - } - - Calamares::JobQueue::instance()->globalStorage()->insert( "localeConf", vm ); - } - else - { - m_jobs.clear(); - Calamares::JobQueue::instance()->globalStorage()->remove( "localeConf" ); - } + m_config->finalizeGlobalStorage(); } -void LocaleQmlViewStep::setConfigurationMap(const QVariantMap& configurationMap) +void +LocaleQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - QString region = CalamaresUtils::getString( configurationMap, "region" ); - QString zone = CalamaresUtils::getString( configurationMap, "zone" ); - if ( !region.isEmpty() && !zone.isEmpty() ) - { - m_startingTimezone = CalamaresUtils::GeoIP::RegionZonePair( region, zone ); - } - else - { - m_startingTimezone - = CalamaresUtils::GeoIP::RegionZonePair( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); - } - - m_localeGenPath = CalamaresUtils::getString( configurationMap, "localeGenPath" ); - if ( m_localeGenPath.isEmpty() ) - { - m_localeGenPath = QStringLiteral( "/etc/locale.gen" ); - } - - bool ok = false; - QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); - if ( ok ) - { - QString url = CalamaresUtils::getString( geoip, "url" ); - QString style = CalamaresUtils::getString( geoip, "style" ); - QString selector = CalamaresUtils::getString( geoip, "selector" ); - - m_geoip = std::make_unique< CalamaresUtils::GeoIP::Handler >( style, url, selector ); - if ( !m_geoip->isValid() ) - { - cWarning() << "GeoIP Style" << style << "is not recognized."; - } - } - - checkRequirements(); - Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last + m_config->setConfigurationMap( configurationMap ); + QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } diff --git a/src/modules/localeq/LocaleQmlViewStep.h b/src/modules/localeq/LocaleQmlViewStep.h index 0639274d6..ca70ca5d9 100644 --- a/src/modules/localeq/LocaleQmlViewStep.h +++ b/src/modules/localeq/LocaleQmlViewStep.h @@ -1,33 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LOCALE_QMLVIEWSTEP_H #define LOCALE_QMLVIEWSTEP_H #include "Config.h" -#include "geoip/Handler.h" -#include "geoip/Interface.h" + +#include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" -#include - -#include -#include #include @@ -39,6 +26,7 @@ public: explicit LocaleQmlViewStep( QObject* parent = nullptr ); QString prettyName() const override; + QString prettyStatus() const override; bool isNextEnabled() const override; bool isBackEnabled() const override; @@ -46,29 +34,16 @@ public: bool isAtBeginning() const override; bool isAtEnd() const override; + virtual void onActivate() override; + virtual void onLeave() override; + Calamares::JobList jobs() const override; - void onActivate() override; - void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; QObject* getConfig() override; - virtual Calamares::RequirementsList checkRequirements() override; - private: - // TODO: a generic QML viewstep should return a config object from a method - Config *m_config; - - bool m_nextEnabled; - QString m_prettyStatus; - - CalamaresUtils::GeoIP::RegionZonePair m_startingTimezone; - QString m_localeGenPath; - - Calamares::JobList m_jobs; - std::unique_ptr< CalamaresUtils::GeoIP::Handler > m_geoip; - - void fetchGeoIpTimezone(); + std::unique_ptr< Config > m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LocaleQmlViewStepFactory ) diff --git a/src/modules/localeq/Map.qml b/src/modules/localeq/Map.qml new file mode 100644 index 000000000..ab0a01a58 --- /dev/null +++ b/src/modules/localeq/Map.qml @@ -0,0 +1,263 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.10 +import QtQuick.Window 2.14 +import QtQuick.Layouts 1.3 + +import org.kde.kirigami 2.7 as Kirigami + +import QtLocation 5.14 +import QtPositioning 5.14 + +Column { + width: parent.width + + // These are used by the map query to initially center the + // map on the user's likely location. They are updated by + // getIp() which does a more accurate GeoIP lookup than + // the default one in Calamares + property var cityName: "" + property var countryName: "" + + /* This is an extra GeoIP lookup, which will find better-accuracy + * location data for the user's IP, and then sets the current timezone + * and map location. Call it from Component.onCompleted so that + * it happens "on time" before the page is shown. + */ + function getIpOnline() { + var xhr = new XMLHttpRequest + + xhr.onreadystatechange = function() { + if (xhr.readyState === XMLHttpRequest.DONE) { + var responseJSON = JSON.parse(xhr.responseText) + var tz = responseJSON.timezone + var ct = responseJSON.city + var cy = responseJSON.country + + cityName = ct + countryName = cy + + config.setCurrentLocation(tz) + } + } + + // Define the target of the request + xhr.open("GET", "https://get.geojs.io/v1/ip/geo.json") + // Execute the request + xhr.send() + } + + /* This is an "offline" GeoIP lookup -- it just follows what + * Calamares itself has figured out with its GeoIP or configuration. + * Call it from the **Component** onActivate() -- in localeq.qml -- + * so it happens as the page is shown. + */ + function getIpOffline() { + cityName = config.currentLocation.zone + countryName = config.currentLocation.countryCode + } + + /* This is an **accurate** TZ lookup method: it queries an + * online service for the TZ at the given coordinates. It + * requires an internet connection, though, and the distribution + * will need to have an account with geonames to not hit the + * daily query limit. + * + * See below, in MouseArea, for calling the right method. + */ + function getTzOnline() { + var xhr = new XMLHttpRequest + var latC = map.center.latitude + var lonC = map.center.longitude + + xhr.onreadystatechange = function() { + if (xhr.readyState === XMLHttpRequest.DONE) { + var responseJSON = JSON.parse(xhr.responseText) + var tz2 = responseJSON.timezoneId + + config.setCurrentLocation(tz2) + } + } + + console.log("Online lookup", latC, lonC) + // Needs to move to localeq.conf, each distribution will need their own account + xhr.open("GET", "http://api.geonames.org/timezoneJSON?lat=" + latC + "&lng=" + lonC + "&username=SOME_USERNAME") + xhr.send() + } + + /* This is a quick TZ lookup method: it uses the existing + * Calamares "closest TZ" code, which has lots of caveats. + * + * See below, in MouseArea, for calling the right method. + */ + function getTzOffline() { + var latC = map.center.latitude + var lonC = map.center.longitude + var tz = config.zonesModel.lookup(latC, lonC) + console.log("Offline lookup", latC, lonC) + config.setCurrentLocation(tz.region, tz.zone) + } + + Rectangle { + width: parent.width + height: parent.height / 1.28 + + Plugin { + id: mapPlugin + preferred: ["osm", "esri"] // "esri", "here", "itemsoverlay", "mapbox", "mapboxgl", "osm" + } + + Map { + id: map + anchors.fill: parent + plugin: mapPlugin + activeMapType: supportedMapTypes[0] + //might be desirable to set zoom level configurable? + zoomLevel: 7 + bearing: 0 + tilt: 0 + copyrightsVisible : true + fieldOfView : 0 + + GeocodeModel { + id: geocodeModel + plugin: mapPlugin + autoUpdate: true + query: Address { + id: address + city: cityName + country: countryName + } + + onLocationsChanged: { + if (count == 1) { + map.center.latitude = get(0).coordinate.latitude + map.center.longitude = get(0).coordinate.longitude + } + } + } + + MapQuickItem { + id: marker + anchorPoint.x: image.width/4 + anchorPoint.y: image.height + coordinate: QtPositioning.coordinate( + map.center.latitude, + map.center.longitude) + //coordinate: QtPositioning.coordinate(40.730610, -73.935242) // New York + + sourceItem: Image { + id: image + width: 32 + height: 32 + source: "img/pin.svg" + } + } + + MouseArea { + acceptedButtons: Qt.LeftButton + anchors.fill: map + hoverEnabled: true + property var coordinate: map.toCoordinate(Qt.point(mouseX, mouseY)) + + onClicked: { + marker.coordinate = coordinate + map.center.latitude = coordinate.latitude + map.center.longitude = coordinate.longitude + + // Pick a TZ lookup method here (quick:offline, accurate:online) + getTzOffline(); + } + } + } + + Column { + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.bottomMargin: 5 + anchors.rightMargin: 10 + + MouseArea { + width: 32 + height:32 + cursorShape: Qt.PointingHandCursor + Image { + source: "img/plus.png" + anchors.centerIn: parent + width: 36 + height: 36 + } + + onClicked: map.zoomLevel++ + } + + MouseArea { + width: 32 + height:32 + cursorShape: Qt.PointingHandCursor + Image { + source: "img/minus.png" + anchors.centerIn: parent + width: 32 + height: 32 + } + + onClicked: map.zoomLevel-- + } + } + } + + Rectangle { + width: parent.width + height: 100 + anchors.horizontalCenter: parent.horizontalCenter + + Item { + id: location + Kirigami.Theme.inherit: false + Kirigami.Theme.colorSet: Kirigami.Theme.Complementary + anchors.horizontalCenter: parent.horizontalCenter + + Rectangle { + anchors.centerIn: parent + width: 300 + height: 30 + color: Kirigami.Theme.backgroundColor + + Text { + id: tzText + text: qsTr("Timezone: %1").arg(config.currentTimezoneName) + color: Kirigami.Theme.textColor + anchors.centerIn: parent + } + + /* If you want an extra (and accurate) GeoIP lookup, + * enable this one and disable the offline lookup in + * onActivate(). + Component.onCompleted: getIpOnline(); + */ + } + } + + Text { + anchors.top: location.bottom + anchors.topMargin: 20 + padding: 10 + width: parent.width + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor + text: qsTr("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.") + } + } +} diff --git a/src/modules/localeq/Offline.qml b/src/modules/localeq/Offline.qml new file mode 100644 index 000000000..937554cf6 --- /dev/null +++ b/src/modules/localeq/Offline.qml @@ -0,0 +1,238 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020-2022 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.10 +import QtQuick.Controls 2.10 +import QtQuick.Window 2.14 +import QtQuick.Layouts 1.3 + +import org.kde.kirigami 2.7 as Kirigami + +Page { + width: 800 //parent.width + height: 500 + + id: control + property string currentRegion + property string currentZone + + StackView { + id: stack + anchors.fill: parent + clip: true + + initialItem: Item { + + Label { + + id: region + anchors.horizontalCenter: parent.horizontalCenter + color: Kirigami.Theme.textColor + horizontalAlignment: Text.AlignCenter + text: qsTr("Select your preferred Region, or use the default settings.") + } + + ListView { + + id: list + ScrollBar.vertical: ScrollBar { + active: true + } + + width: parent.width / 2 + height: parent.height / 1.5 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 + + Rectangle { + + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 + } + + model: config.regionModel + currentIndex: -1 + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + height: 30 + highlighted: ListView.isCurrentItem + + Label { + + text: model.name + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + width: parent.width + height: 30 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor + + background: Rectangle { + + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + onClicked: { + + list.currentIndex = index + control.currentRegion = model.name + config.regionalZonesModel.region = control.currentRegion + tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName) + stack.push(zoneView) + } + } + } + } + + Component { + id: zoneView + + Item { + + Label { + + id: zone + anchors.horizontalCenter: parent.horizontalCenter + color: Kirigami.Theme.textColor + text: qsTr("Select your preferred Zone within your Region.") + } + + ListView { + + id: list2 + ScrollBar.vertical: ScrollBar { + active: true + } + + width: parent.width / 2 + height: parent.height / 1.5 + anchors.centerIn: parent + anchors.verticalCenterOffset: -30 + focus: true + clip: true + boundsBehavior: Flickable.StopAtBounds + spacing: 2 + + Rectangle { + + z: parent.z - 1 + anchors.fill: parent + color: "#BDC3C7" + radius: 5 + opacity: 0.7 + } + + model: config.regionalZonesModel + currentIndex : -1 + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + height: 30 + highlighted: ListView.isCurrentItem + + Label { + + text: model.name + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + width: parent.width + height: 30 + color: highlighted ? Kirigami.Theme.highlightedTextColor : Kirigami.Theme.textColor + + background: Rectangle { + + color: highlighted || hovered ? Kirigami.Theme.highlightColor : "white" //Kirigami.Theme.backgroundColor + opacity: highlighted || hovered ? 0.5 : 0.3 + } + } + + onClicked: { + + list2.currentIndex = index + list2.positionViewAtIndex(index, ListView.Center) + control.currentZone = model.name + config.setCurrentLocation(control.currentRegion, control.currentZone) + tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName) + } + } + } + + Button { + + Layout.fillWidth: true + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -30 + anchors.left: parent.left + anchors.leftMargin: parent.width / 15 + icon.name: "go-previous" + text: qsTr("Zones") + onClicked: stack.pop() + } + } + } + } + + Rectangle { + + width: parent.width + height: 60 + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + + Item { + + id: location + Kirigami.Theme.inherit: false + Kirigami.Theme.colorSet: Kirigami.Theme.Complementary + anchors.horizontalCenter: parent.horizontalCenter + + Rectangle { + + anchors.centerIn: parent + width: 300 + height: 30 + color: Kirigami.Theme.backgroundColor + + Text { + + id: tztext + text: qsTr("Timezone: %1").arg(config.currentTimezoneName) + color: Kirigami.Theme.textColor + anchors.centerIn: parent + } + } + } + + Text { + + anchors.top: location.bottom + anchors.topMargin: 20 + padding: 10 + width: parent.width + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor + text: qsTr("You can fine-tune Language and Locale settings below.") + } + } +} diff --git a/src/modules/localeq/i18n.qml b/src/modules/localeq/i18n.qml new file mode 100644 index 000000000..3ceae2ab8 --- /dev/null +++ b/src/modules/localeq/i18n.qml @@ -0,0 +1,204 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 - 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.ui 1.0 + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Layouts 1.3 + +import org.kde.kirigami 2.7 as Kirigami + +Item { + readonly property color backgroundColor: Kirigami.Theme.backgroundColor //"#F5F5F5" + readonly property color headerBackgroundColor: Kirigami.Theme.alternateBackgroundColor //"#d3d3d3" + readonly property color backgroundLighterColor: "#ffffff" + readonly property color highlightColor: Kirigami.Theme.highlightColor //"#3498DB" + readonly property color textColor: Kirigami.Theme.textColor + readonly property color highlightedTextColor: Kirigami.Theme.highlightedTextColor + + width: parent.width + height: parent.height + focus: true + + Rectangle { + id: textArea + x: 28 + y: 14 + anchors.fill: parent + color: backgroundColor + + Column { + id: languages + x: 130 + y: 40 + + Rectangle { + width: 250 + height: 140 + color: headerBackgroundColor + Text { + anchors.top: parent.top + width: 240 + wrapMode: Text.WordWrap + text: qsTr("

Languages


+ The system locale setting affects the language and character set for some command line user interface elements. The current setting is %1.").arg(config.currentLanguageCode) + font.pointSize: 10 + } + } + + Rectangle { + width: 250 + height: 300 + + ScrollView { + id: scroll1 + anchors.fill: parent + contentHeight: 800 + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + ListView { + id: list1 + focus: true + clip: true + width: parent.width + + model: config.supportedLocales + + currentIndex: -1 //model.currentLanguageCodeIndex + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + implicitHeight: 18 + highlighted: ListView.isCurrentItem + Label { + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 18 + color: highlighted ? highlightedTextColor : textColor + text: modelData + background: Rectangle { + + color: highlighted || hovered ? highlightColor : backgroundLighterColor + opacity: highlighted || hovered ? 0.5 : 0.9 + } + + MouseArea { + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + list1.currentIndex = index + } + } + } + } + onCurrentItemChanged: { config.currentLanguageCode = model[currentIndex] } /* This works because model is a stringlist */ + } + } + } + } + + Column { + id: lc_numeric + x: 430 + y: 40 + + Rectangle { + width: 250 + height: 140 + color: headerBackgroundColor + Text { + anchors.top: parent.top + width: 240 + wrapMode: Text.WordWrap + text: qsTr("

Locales


+ The system locale setting affects the numbers and dates format. The current setting is %1.").arg(config.currentLCCode) + font.pointSize: 10 + } + } + + Rectangle { + width: 250 + height: 300 + + ScrollView { + id: scroll2 + anchors.fill: parent + contentHeight: 800 + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + + ListView { + id: list2 + focus: true + clip: true + + model: config.supportedLocales + + currentIndex: -1 //model.currentLCCodeIndex + delegate: ItemDelegate { + + hoverEnabled: true + width: parent.width + implicitHeight: 18 + highlighted: ListView.isCurrentItem + Label { + Layout.fillHeight: true + Layout.fillWidth: true + width: parent.width + height: 18 + color: highlighted ? highlightedTextColor : textColor + text: modelData + background: Rectangle { + + color: highlighted || hovered ? highlightColor : backgroundLighterColor + opacity: highlighted || hovered ? 0.5 : 0.9 + } + + MouseArea { + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + list2.currentIndex = index + } + } + } + } + onCurrentItemChanged: { config.currentLCCode = model[currentIndex]; } /* This works because model is a stringlist */ + } + } + } + + } + + ToolButton { + id: toolButton + x: 19 + y: 29 + width: 105 + height: 48 + text: qsTr("Back") + hoverEnabled: true + onClicked: load.source = "" + + Image { + id: image1 + x: 0 + y: 13 + width: 22 + height: 22 + source: "img/chevron-left-solid.svg" + fillMode: Image.PreserveAspectFit + } + } + } +} diff --git a/src/modules/localeq/img/chevron-left-solid.svg b/src/modules/localeq/img/chevron-left-solid.svg new file mode 100644 index 000000000..41061c287 --- /dev/null +++ b/src/modules/localeq/img/chevron-left-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/modules/localeq/img/chevron-left-solid.svg.license b/src/modules/localeq/img/chevron-left-solid.svg.license new file mode 100644 index 000000000..5a578a8a2 --- /dev/null +++ b/src/modules/localeq/img/chevron-left-solid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 https://github.com/FortAwesome/Font-Awesome +SPDX-License-Identifier: CC-BY-4.0 diff --git a/src/modules/localeq/img/locale.svg b/src/modules/localeq/img/locale.svg new file mode 100755 index 000000000..20c21e562 --- /dev/null +++ b/src/modules/localeq/img/locale.svg @@ -0,0 +1,5720 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/localeq/img/locale.svg.license b/src/modules/localeq/img/locale.svg.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/localeq/img/locale.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/minus.png b/src/modules/localeq/img/minus.png new file mode 100644 index 000000000..be122dff2 Binary files /dev/null and b/src/modules/localeq/img/minus.png differ diff --git a/src/modules/localeq/img/minus.png.license b/src/modules/localeq/img/minus.png.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/localeq/img/minus.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/pin.svg b/src/modules/localeq/img/pin.svg new file mode 100644 index 000000000..b4185d1af --- /dev/null +++ b/src/modules/localeq/img/pin.svg @@ -0,0 +1,60 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/src/modules/localeq/img/pin.svg.license b/src/modules/localeq/img/pin.svg.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/localeq/img/pin.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/img/plus.png b/src/modules/localeq/img/plus.png new file mode 100644 index 000000000..3bd5d832c Binary files /dev/null and b/src/modules/localeq/img/plus.png differ diff --git a/src/modules/localeq/img/plus.png.license b/src/modules/localeq/img/plus.png.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/localeq/img/plus.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/localeq/localeq.conf b/src/modules/localeq/localeq.conf index 4beb4fe85..bb2a7e816 100644 --- a/src/modules/localeq/localeq.conf +++ b/src/modules/localeq/localeq.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- # This settings are used to set your default system time zone. # Time zones are usually located under /usr/share/zoneinfo and diff --git a/src/modules/localeq/localeq.qml b/src/modules/localeq/localeq.qml index 0e00d1b1b..dbaa09034 100644 --- a/src/modules/localeq/localeq.qml +++ b/src/modules/localeq/localeq.qml @@ -1,3 +1,13 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + import io.calamares.core 1.0 import io.calamares.ui 1.0 @@ -5,35 +15,81 @@ import QtQuick 2.10 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami -import QtGraphicalEffects 1.0 -RowLayout -{ - Rectangle { - width: parent.width / 3 - Layout.fillWidth: true - ColumnLayout { - id: regions - Repeater { - model: config.regionModel - Text { - text: label - } - } - } +Page { + width: 800 + height: 550 + + function onActivate() { + /* If you want the map to follow Calamares's GeoIP + * lookup or configuration, call the update function + * here, and disable the one at onCompleted in Map.qml. + */ + if (Network.hasInternet) { image.item.getIpOffline() } } - Rectangle { - width: parent.width / 3 - Layout.fillWidth: true - ColumnLayout { - id: zones - ListView { - model: config.zonesModel - delegate: Text { - text: label + + Loader { + id: image + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width + height: parent.height / 1.28 + // Network is in io.calamares.core + source: Network.hasInternet ? "Map.qml" : "Offline.qml" + } + + RowLayout { + anchors.bottom: parent.bottom + anchors.bottomMargin : 20 + width: parent.width + + Kirigami.FormLayout { + id: lang + + GridLayout { + anchors { + left: parent.left + top: parent.top + right: parent.right + } + rowSpacing: Kirigami.Units.largeSpacing + columnSpacing: Kirigami.Units.largeSpacing + + Image { + source: "img/locale.svg" + Layout.fillHeight: true + Layout.maximumHeight: Kirigami.Units.iconSizes.medium + Layout.preferredWidth: height + } + ColumnLayout { + Label { + Layout.fillWidth: true + wrapMode: Text.WordWrap + text: config.currentLanguageStatus + } + Kirigami.Separator { + Layout.fillWidth: true + } + Label { + Layout.fillWidth: true + wrapMode: Text.WordWrap + text: config.currentLCStatus + } + } + Button { + Layout.alignment: Qt.AlignRight|Qt.AlignVCenter + Layout.columnSpan: 2 + text: qsTr("Change") + //onClicked: console.log("Adjust Language clicked"); + onClicked: { + onClicked: load.source = "i18n.qml" + } } } } + + } + Loader { + id:load + anchors.fill: parent } } - diff --git a/src/modules/localeq/localeq.qrc b/src/modules/localeq/localeq.qrc index e2bf12636..a3f8dec9d 100644 --- a/src/modules/localeq/localeq.qrc +++ b/src/modules/localeq/localeq.qrc @@ -1,47 +1,13 @@ - - ../locale/images/bg.png - ../locale/images/pin.png - ../locale/images/timezone_0.0.png - ../locale/images/timezone_1.0.png - ../locale/images/timezone_2.0.png - ../locale/images/timezone_3.0.png - ../locale/images/timezone_3.5.png - ../locale/images/timezone_4.0.png - ../locale/images/timezone_4.5.png - ../locale/images/timezone_5.0.png - ../locale/images/timezone_5.5.png - ../locale/images/timezone_5.75.png - ../locale/images/timezone_6.0.png - ../locale/images/timezone_6.5.png - ../locale/images/timezone_7.0.png - ../locale/images/timezone_8.0.png - ../locale/images/timezone_9.0.png - ../locale/images/timezone_9.5.png - ../locale/images/timezone_10.0.png - ../locale/images/timezone_10.5.png - ../locale/images/timezone_11.0.png - ../locale/images/timezone_11.5.png - ../locale/images/timezone_12.0.png - ../locale/images/timezone_12.75.png - ../locale/images/timezone_13.0.png - ../locale/images/timezone_-1.0.png - ../locale/images/timezone_-2.0.png - ../locale/images/timezone_-3.0.png - ../locale/images/timezone_-3.5.png - ../locale/images/timezone_-4.0.png - ../locale/images/timezone_-4.5.png - ../locale/images/timezone_-5.0.png - ../locale/images/timezone_-5.5.png - ../locale/images/timezone_-6.0.png - ../locale/images/timezone_-7.0.png - ../locale/images/timezone_-8.0.png - ../locale/images/timezone_-9.0.png - ../locale/images/timezone_-9.5.png - ../locale/images/timezone_-10.0.png - ../locale/images/timezone_-11.0.png - + i18n.qml localeq.qml + Map.qml + Offline.qml + img/locale.svg + img/minus.png + img/pin.svg + img/plus.png + img/chevron-left-solid.svg diff --git a/src/modules/luksbootkeyfile/CMakeLists.txt b/src/modules/luksbootkeyfile/CMakeLists.txt index 5e69d3acb..dff682521 100644 --- a/src/modules/luksbootkeyfile/CMakeLists.txt +++ b/src/modules/luksbootkeyfile/CMakeLists.txt @@ -1,10 +1,20 @@ -calamares_add_plugin( luksbootkeyfile +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +calamares_add_plugin(luksbootkeyfile TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES LuksBootKeyFileJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB NO_CONFIG ) + +calamares_add_test( + luksbootkeyfiletest + SOURCES + Tests.cpp + LuksBootKeyFileJob.cpp +) diff --git a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp index 90d64d5a6..e8dfd4724 100644 --- a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp +++ b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp @@ -1,31 +1,24 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "LuksBootKeyFileJob.h" #include "utils/CalamaresUtilsSystem.h" +#include "utils/Entropy.h" #include "utils/Logger.h" +#include "utils/NamedEnum.h" #include "utils/UMask.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" +#include + LuksBootKeyFileJob::LuksBootKeyFileJob( QObject* parent ) : Calamares::CppJob( parent ) { @@ -113,15 +106,29 @@ static bool generateTargetKeyfile() { CalamaresUtils::UMask m( CalamaresUtils::UMask::Safe ); - auto r = CalamaresUtils::System::instance()->targetEnvCommand( - { "dd", "bs=512", "count=4", "if=/dev/urandom", QString( "of=%1" ).arg( keyfile ) } ); - if ( r.getExitCode() != 0 ) + + // Get the data + QByteArray entropy; + auto entropySource = CalamaresUtils::getEntropy( 2048, entropy ); + if ( entropySource != CalamaresUtils::EntropySource::URandom ) { - cWarning() << "Could not create LUKS keyfile:" << r.getOutput() << "(exit code" << r.getExitCode() << ')'; + cWarning() << "Could not get entropy from /dev/urandom for LUKS."; return false; } - // Give ample time to check that the file was created correctly - r = CalamaresUtils::System::instance()->targetEnvCommand( { "ls", "-la", "/" } ); + + auto fileResult = CalamaresUtils::System::instance()->createTargetFile( + keyfile, entropy, CalamaresUtils::System::WriteMode::Overwrite ); + entropy.fill( 'A' ); + if ( !fileResult ) + { + cWarning() << "Could not create LUKS keyfile:" << smash( fileResult.code() ); + return false; + } + + // Give ample time to check that the file was created correctly; + // we actually expect ls to return pretty-much-instantly. + auto r = CalamaresUtils::System::instance()->targetEnvCommand( + { "ls", "-la", "/" }, QString(), QString(), std::chrono::seconds( 5 ) ); cDebug() << "In target system after creating LUKS file" << r.getOutput(); return true; } @@ -129,8 +136,10 @@ generateTargetKeyfile() static bool setupLuks( const LuksDevice& d ) { + // Adding the key can take some times, measured around 15 seconds with + // a HDD (spinning rust) and a slow-ish computer. Give it a minute. auto r = CalamaresUtils::System::instance()->targetEnvCommand( - { "cryptsetup", "luksAddKey", d.device, keyfile }, QString(), d.passphrase, std::chrono::seconds( 15 ) ); + { "cryptsetup", "luksAddKey", d.device, keyfile }, QString(), d.passphrase, std::chrono::seconds( 60 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not configure LUKS keyfile on" << d.device << ':' << r.getOutput() << "(exit code" @@ -140,6 +149,53 @@ setupLuks( const LuksDevice& d ) return true; } +static QVariantList +partitionsFromGlobalStorage() +{ + Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); + return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); +} + +/// Checks if the partition (represented by @p map) mounts to the given @p path +STATICTEST bool +hasMountPoint( const QVariantMap& map, const QString& path ) +{ + const auto v = map.value( QStringLiteral( "mountPoint" ) ); + return v.isValid() && QDir::cleanPath( v.toString() ) == path; +} + +STATICTEST bool +isEncrypted( const QVariantMap& map ) +{ + return map.contains( QStringLiteral( "luksMapperName" ) ); +} + +/// Checks for any partition satisfying @p pred +STATICTEST bool +anyPartition( bool ( *pred )( const QVariantMap& ) ) +{ + const auto partitions = partitionsFromGlobalStorage(); + return std::find_if( partitions.cbegin(), + partitions.cend(), + [ &pred ]( const QVariant& partitionVariant ) { return pred( partitionVariant.toMap() ); } ) + != partitions.cend(); +} + +STATICTEST bool +hasUnencryptedSeparateBoot() +{ + return anyPartition( + []( const QVariantMap& partition ) + { return hasMountPoint( partition, QStringLiteral( "/boot" ) ) && !isEncrypted( partition ); } ); +} + +STATICTEST bool +hasEncryptedRoot() +{ + return anyPartition( []( const QVariantMap& partition ) + { return hasMountPoint( partition, QStringLiteral( "/" ) ) && isEncrypted( partition ); } ); +} + Calamares::JobResult LuksBootKeyFileJob::exec() { @@ -185,6 +241,14 @@ LuksBootKeyFileJob::exec() return Calamares::JobResult::ok(); } + // /boot partition is not encrypted, keyfile must not be used + // But only if root partition is not encrypted + if ( hasUnencryptedSeparateBoot() && !hasEncryptedRoot() ) + { + cDebug() << Logger::SubEntry << "/boot partition is not encrypted, skipping keyfile creation."; + return Calamares::JobResult::ok(); + } + if ( s.devices.first().passphrase.isEmpty() ) { cDebug() << Logger::SubEntry << "No root passphrase."; @@ -202,6 +266,12 @@ LuksBootKeyFileJob::exec() for ( const auto& d : s.devices ) { + // Skip setupLuks for root partition if system has an unencrypted /boot + if ( d.isRoot && hasUnencryptedSeparateBoot() ) + { + continue; + } + if ( !setupLuks( d ) ) return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), diff --git a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h index de9b9c677..9681228bd 100644 --- a/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h +++ b/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h @@ -1,19 +1,8 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LUKSBOOTKEYFILEJOB_H @@ -36,7 +25,7 @@ class PLUGINDLLEXPORT LuksBootKeyFileJob : public Calamares::CppJob Q_OBJECT public: explicit LuksBootKeyFileJob( QObject* parent = nullptr ); - virtual ~LuksBootKeyFileJob() override; + ~LuksBootKeyFileJob() override; QString prettyName() const override; diff --git a/src/modules/luksbootkeyfile/Tests.cpp b/src/modules/luksbootkeyfile/Tests.cpp new file mode 100644 index 000000000..6b6c7be81 --- /dev/null +++ b/src/modules/luksbootkeyfile/Tests.cpp @@ -0,0 +1,169 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2022 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/Logger.h" + +#include + +#undef STATICTEST +#define STATICTEST extern + +// Implementation details +STATICTEST bool hasMountPoint( const QVariantMap& map, const QString& path ); + +STATICTEST bool isEncrypted( const QVariantMap& map ); + +STATICTEST bool anyPartition( bool ( *pred )( const QVariantMap& ) ); + +STATICTEST bool hasUnencryptedSeparateBoot(); + +STATICTEST bool hasEncryptedRoot(); + +class LuksBootKeyFileTests : public QObject +{ + Q_OBJECT +public: + LuksBootKeyFileTests() {} + ~LuksBootKeyFileTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testMountPoint(); + void testIsEncrypted(); + void testAnyPartition(); +}; + +void +LuksBootKeyFileTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "LuksBootKeyFile test started."; + + if ( !Calamares::JobQueue::instance() ) + { + (void)new Calamares::JobQueue(); + } +} + +void +LuksBootKeyFileTests::testMountPoint() +{ + QVariantMap m; // As if this is a partition data + const QString key = QStringLiteral( "mountPoint" ); + const QString boot = QStringLiteral( "/boot" ); + const QString root = QStringLiteral( "/" ); + + QVERIFY( !hasMountPoint( m, QString() ) ); + QVERIFY( !hasMountPoint( m, boot ) ); + + m.insert( key, boot ); + QVERIFY( hasMountPoint( m, boot ) ); + QVERIFY( !hasMountPoint( m, QString() ) ); + QVERIFY( !hasMountPoint( m, root ) ); + + m.insert( key, root ); + QVERIFY( !hasMountPoint( m, boot ) ); + QVERIFY( !hasMountPoint( m, QString() ) ); + QVERIFY( hasMountPoint( m, root ) ); + + m.remove( key ); + QVERIFY( !hasMountPoint( m, root ) ); +} + +void +LuksBootKeyFileTests::testIsEncrypted() +{ + QVariantMap m; // As if this is a partition data + const QString key = QStringLiteral( "luksMapperName" ); + const QString name = QStringLiteral( "any-name" ); + + QVERIFY( !isEncrypted( m ) ); + + // Even an empty string is considered encrypted + m.insert( key, QString() ); + QVERIFY( isEncrypted( m ) ); + + m.insert( key, name ); + QVERIFY( isEncrypted( m ) ); + + m.insert( key, QString() ); + QVERIFY( isEncrypted( m ) ); + + m.remove( key ); + QVERIFY( !isEncrypted( m ) ); +} + + +void +LuksBootKeyFileTests::testAnyPartition() +{ + // This is kind of annoying: we need to build up + // partition data in GS because the functions we're testing + // go straight to GS. + auto* gs = Calamares::JobQueue::instanceGlobalStorage(); + QVERIFY( gs ); + + const QString partitionsKey = QStringLiteral( "partitions" ); + const QString mountPointKey = QStringLiteral( "mountPoint" ); + const QString boot = QStringLiteral( "/boot" ); + const QString root = QStringLiteral( "/" ); + + QVariantList partitions; + QVariantMap p; + QVERIFY( !gs->contains( partitionsKey ) ); + + // Empty list! + QVERIFY( !anyPartition( []( const QVariantMap& ) { return true; } ) ); + + gs->insert( partitionsKey, partitions ); + QVERIFY( !anyPartition( []( const QVariantMap& ) { return true; } ) ); // Still an empty list + + partitions.append( p ); + QCOMPARE( partitions.count(), 1 ); + gs->insert( partitionsKey, partitions ); + QVERIFY( anyPartition( []( const QVariantMap& ) { return true; } ) ); // Now a one-element list + QVERIFY( !anyPartition( []( const QVariantMap& ) { return false; } ) ); // Now a one-element list + + p.insert( mountPointKey, boot ); + QVERIFY( hasMountPoint( p, boot ) ); + partitions.append( p ); + QCOMPARE( partitions.count(), 2 ); + + // Note that GS is not updated yet, so we expect this to fail + QEXPECT_FAIL( "", "GS not updated", Continue ); + QVERIFY( anyPartition( + []( const QVariantMap& partdata ) + { + cDebug() << partdata; + return hasMountPoint( partdata, QStringLiteral( "/boot" ) ); + } ) ); + + gs->insert( partitionsKey, partitions ); // Update GS + QVERIFY( anyPartition( + []( const QVariantMap& partdata ) + { + cDebug() << partdata; + return hasMountPoint( partdata, QStringLiteral( "/boot" ) ); + } ) ); + QVERIFY( !anyPartition( []( const QVariantMap& partdata ) + { return hasMountPoint( partdata, QStringLiteral( "/" ) ); } ) ); + QVERIFY( !anyPartition( []( const QVariantMap& partdata ) { return hasMountPoint( partdata, QString() ); } ) ); + + QVERIFY( !hasEncryptedRoot() ); + QVERIFY( hasUnencryptedSeparateBoot() ); +} + +QTEST_GUILESS_MAIN( LuksBootKeyFileTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/luksopenswaphookcfg/CMakeLists.txt b/src/modules/luksopenswaphookcfg/CMakeLists.txt new file mode 100644 index 000000000..caede06a7 --- /dev/null +++ b/src/modules/luksopenswaphookcfg/CMakeLists.txt @@ -0,0 +1,22 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2021 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + +# Because LUKS Open Swap Hook (Job) is such a mouthful, we'll +# use LOSH all over the place as a shorthand. +calamares_add_plugin( luksopenswaphookcfg + TYPE job + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + LOSHJob.cpp + SHARED_LIB +) + +calamares_add_test( + luksopenswaphooktest + SOURCES + LOSHJob.cpp + Tests.cpp +) diff --git a/src/modules/luksopenswaphookcfg/LOSHInfo.h b/src/modules/luksopenswaphookcfg/LOSHInfo.h new file mode 100644 index 000000000..1a87f4e61 --- /dev/null +++ b/src/modules/luksopenswaphookcfg/LOSHInfo.h @@ -0,0 +1,66 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ +#ifndef LUKSOPENSWAPHOOKCFG_LOSHINFO_H +#define LUKSOPENSWAPHOOKCFG_LOSHINFO_H + +#include + +/** @brief Information needed to create a suitable config file + * + * The LUKS swap configuration has a handful of keys that need to + * be written to the config file. This struct holds those keys + * and can find the key values from Global Storage (where the + * *partition* module sets them). + */ +struct LOSHInfo +{ + // Member names copied from Python code + QString swap_outer_uuid; + QString swap_mapper_name; + QString mountable_keyfile_device; + QString swap_device_path; + QString keyfile_device_mount_options; + + bool isValid() const { return !swap_device_path.isEmpty(); } + + /** @brief Helper method for doing key-value replacements + * + * Given a named @p key (e.g. "duck", or "swap_device"), returns the + * value set for that key. Invalid keys (e.g. "duck") return an empty string. + */ + QString replacementFor( const QString& key ) const + { + if ( key == QStringLiteral( "swap_device" ) ) + { + return swap_device_path; + } + if ( key == QStringLiteral( "crypt_swap_name" ) ) + { + return swap_mapper_name; + } + if ( key == QStringLiteral( "keyfile_device" ) ) + { + return mountable_keyfile_device; + } + if ( key == QStringLiteral( "keyfile_filename" ) ) + { + return QStringLiteral( "crypto_keyfile.bin" ); + } + if ( key == QStringLiteral( "keyfile_device_mount_options" ) ) + { + return keyfile_device_mount_options; + } + return QString(); + } + + /** @brief Creates a struct from information already set in GS + * + */ + static LOSHInfo fromGlobalStorage(); +}; + +#endif diff --git a/src/modules/luksopenswaphookcfg/LOSHJob.cpp b/src/modules/luksopenswaphookcfg/LOSHJob.cpp new file mode 100644 index 000000000..42f160460 --- /dev/null +++ b/src/modules/luksopenswaphookcfg/LOSHJob.cpp @@ -0,0 +1,181 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ +#include "LOSHJob.h" + +#include "LOSHInfo.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Permissions.h" +#include "utils/PluginFactory.h" +#include "utils/String.h" +#include "utils/Variant.h" + +#include +#include +#include +#include + +LOSHJob::LOSHJob( QObject* parent ) + : Calamares::CppJob( parent ) +{ +} + +LOSHJob::~LOSHJob() {} + + +QString +LOSHJob::prettyName() const +{ + return tr( "Configuring encrypted swap." ); +} + +STATICTEST QString +get_assignment_part( const QString& line ) +{ + static QRegularExpression re( "^[# \\t]*([A-Za-z_]+)[ \\t]*=" ); + auto m = re.match( line ); + if ( m.hasMatch() ) + { + return m.captured( 1 ); + } + return QString(); +} + +/** Writes the config file at @p path + * + * NOTE: @p path is relative to the target system, not an absolute path. + */ +STATICTEST void +write_openswap_conf( const QString& path, QStringList& contents, const LOSHInfo& info ) +{ + if ( info.isValid() ) + { + for ( auto& line : contents ) + { + const QString key = get_assignment_part( line ); + QString replacement = info.replacementFor( key ); + if ( !replacement.isEmpty() ) + { + line.clear(); + line.append( QStringLiteral( "%1=%2" ).arg( key, replacement ) ); + } + } + cDebug() << "Writing" << contents.length() << "line configuration to" << path; + // \n between each two lines, and a \n at the end + CalamaresUtils::System::instance()->createTargetFile( + path, contents.join( '\n' ).append( '\n' ).toUtf8(), CalamaresUtils::System::WriteMode::Overwrite ); + } + else + { + cDebug() << "Will not write an invalid configuration to" << path; + } +} + +Calamares::JobResult +LOSHJob::exec() +{ + const auto* sys = CalamaresUtils::System::instance(); + if ( !sys ) + { + return Calamares::JobResult::internalError( + "LuksOpenSwapHook", tr( "No target system available." ), Calamares::JobResult::InvalidConfiguration ); + } + + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + if ( !gs || gs->value( "rootMountPoint" ).toString().isEmpty() ) + { + return Calamares::JobResult::internalError( + "LuksOpenSwapHook", tr( "No rootMountPoint is set." ), Calamares::JobResult::InvalidConfiguration ); + } + if ( m_configFilePath.isEmpty() ) + { + return Calamares::JobResult::internalError( + "LuksOpenSwapHook", tr( "No configFilePath is set." ), Calamares::JobResult::InvalidConfiguration ); + } + + QStringList contents = sys->readTargetFile( m_configFilePath ); + if ( contents.isEmpty() ) + { + contents << QStringLiteral( "# swap_device=" ) << QStringLiteral( "# crypt_swap_name=" ) + << QStringLiteral( "# keyfile_device=" ) << QStringLiteral( "# keyfile_filename=" ) + << QStringLiteral( "# keyfile_device_mount_options" ); + } + + write_openswap_conf( m_configFilePath, contents, LOSHInfo::fromGlobalStorage() ); + return Calamares::JobResult::ok(); +} + +void +LOSHJob::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_configFilePath = CalamaresUtils::getString( + configurationMap, QStringLiteral( "configFilePath" ), QStringLiteral( "/etc/openswap.conf" ) ); +} + +STATICTEST void +globalStoragePartitionInfo( Calamares::GlobalStorage* gs, LOSHInfo& info ) +{ + if ( !gs ) + { + return; + } + QVariantList l = gs->value( "partitions" ).toList(); + if ( l.isEmpty() ) + { + return; + } + + for ( const auto& pv : l ) + { + const QVariantMap partition = pv.toMap(); + if ( !partition.isEmpty() ) + { + QString mountPoint = partition.value( "mountPoint" ).toString(); + QString fileSystem = partition.value( "fs" ).toString(); + QString luksMapperName = partition.value( "luksMapperName" ).toString(); + // if partition["fs"] == "linuxswap" and "luksMapperName" in partition: + if ( fileSystem == QStringLiteral( "linuxswap" ) && !luksMapperName.isEmpty() ) + { + info.swap_outer_uuid = partition.value( "luksUuid" ).toString(); + info.swap_mapper_name = luksMapperName; + } + else if ( mountPoint == QStringLiteral( "/" ) && !luksMapperName.isEmpty() ) + { + + info.mountable_keyfile_device = QStringLiteral( "/dev/mapper/" ) + luksMapperName; + } + } + } + + if ( !info.mountable_keyfile_device.isEmpty() && !info.swap_outer_uuid.isEmpty() ) + { + info.swap_device_path = QStringLiteral( "/dev/disk/by-uuid/" ) + info.swap_outer_uuid; + } + + QString btrfsRootSubvolume = gs->value( "btrfsRootSubvolume" ).toString(); + if ( !btrfsRootSubvolume.isEmpty() ) + { + CalamaresUtils::removeLeading( btrfsRootSubvolume, '/' ); + info.keyfile_device_mount_options + = QStringLiteral( "keyfile_device_mount_options=--options=subvol=" ) + btrfsRootSubvolume; + } +} + +LOSHInfo +LOSHInfo::fromGlobalStorage() +{ + LOSHInfo i {}; + globalStoragePartitionInfo( + Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr, i ); + return i; +} + +CALAMARES_PLUGIN_FACTORY_DEFINITION( LOSHJobFactory, registerPlugin< LOSHJob >(); ) diff --git a/src/modules/luksopenswaphookcfg/LOSHJob.h b/src/modules/luksopenswaphookcfg/LOSHJob.h new file mode 100644 index 000000000..4a435a935 --- /dev/null +++ b/src/modules/luksopenswaphookcfg/LOSHJob.h @@ -0,0 +1,37 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ +#ifndef LUKSOPENSWAPHOOKCFG_LOSHJOB_H +#define LUKSOPENSWAPHOOKCFG_LOSHJOB_H + +#include "CppJob.h" +#include "DllMacro.h" +#include "utils/PluginFactory.h" + +#include +#include + +class PLUGINDLLEXPORT LOSHJob : public Calamares::CppJob +{ + Q_OBJECT + +public: + explicit LOSHJob( QObject* parent = nullptr ); + ~LOSHJob() override; + + QString prettyName() const override; + + Calamares::JobResult exec() override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + +private: + QString m_configFilePath; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( LOSHJobFactory ) + +#endif diff --git a/src/modules/luksopenswaphookcfg/Tests.cpp b/src/modules/luksopenswaphookcfg/Tests.cpp new file mode 100644 index 000000000..840bd9355 --- /dev/null +++ b/src/modules/luksopenswaphookcfg/Tests.cpp @@ -0,0 +1,253 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "LOSHInfo.h" +#include "LOSHJob.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" + +#include + +// LOSH = LUKS Open Swap Hook (Job) + +// Implementation details +extern QString get_assignment_part( const QString& line ); +extern void write_openswap_conf( const QString& path, QStringList& contents, const LOSHInfo& info ); + +class LOSHTests : public QObject +{ + Q_OBJECT +public: + LOSHTests(); + ~LOSHTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testAssignmentExtraction_data(); + void testAssignmentExtraction(); + + void testLOSHInfo(); + void testConfigWriting(); + void testJob(); +}; + +LOSHTests::LOSHTests() {} + +void +LOSHTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "LOSH test started."; +} + + +void +LOSHTests::testAssignmentExtraction_data() +{ + QTest::addColumn< QString >( "line" ); + QTest::addColumn< QString >( "match" ); + + QTest::newRow( "empty" ) << QString() << QString(); + QTest::newRow( "comment-only1" ) << QStringLiteral( "# " ) << QString(); + QTest::newRow( "comment-only2" ) << QStringLiteral( "###" ) << QString(); + QTest::newRow( "comment-only3" ) << QStringLiteral( "# # #" ) << QString(); + + QTest::newRow( "comment-text" ) << QStringLiteral( "# NOTE:" ) << QString(); + QTest::newRow( "comment-story" ) << QStringLiteral( "# This is a shell comment" ) << QString(); + // We look for assignments, but only for single-words + QTest::newRow( "comment-space-eq" ) << QStringLiteral( "# Check that a = b" ) << QString(); + + + QTest::newRow( "assignment1" ) << QStringLiteral( "a=1" ) << QStringLiteral( "a" ); + QTest::newRow( "assignment2" ) << QStringLiteral( "a = 1" ) << QStringLiteral( "a" ); + QTest::newRow( "assignment3" ) << QStringLiteral( "# a=1" ) << QStringLiteral( "a" ); + QTest::newRow( "assignment4" ) << QStringLiteral( "cows = 12" ) << QStringLiteral( "cows" ); + QTest::newRow( "assignment5" ) << QStringLiteral( "# # cows=1" ) << QStringLiteral( "cows" ); + QTest::newRow( "assignment6" ) << QStringLiteral( "# moose='cool' # not cows" ) << QStringLiteral( "moose" ); + QTest::newRow( "assignment7" ) << QStringLiteral( " moose=cows=42" ) << QStringLiteral( "moose" ); + QTest::newRow( "assignment8" ) << QStringLiteral( "#swap_device=/dev/something" ) + << QStringLiteral( "swap_device" ); + QTest::newRow( "assignment9" ) << QStringLiteral( "# swap_device=/dev/something" ) + << QStringLiteral( "swap_device" ); + QTest::newRow( "assignment10" ) << QStringLiteral( "swap_device=/dev/something" ) + << QStringLiteral( "swap_device" ); +} + +void +LOSHTests::testAssignmentExtraction() +{ + QFETCH( QString, line ); + QFETCH( QString, match ); + + QCOMPARE( get_assignment_part( line ), match ); +} + +static CalamaresUtils::System* +file_setup( const QTemporaryDir& tempRoot ) +{ + CalamaresUtils::System* ss = CalamaresUtils::System::instance(); + if ( !ss ) + { + ss = new CalamaresUtils::System( true ); + } + + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + if ( !gs ) + { + cDebug() << "Creating new JobQueue"; + (void)new Calamares::JobQueue(); + gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + } + if ( gs ) + { + // Working with a rootMountPoint set + gs->insert( "rootMountPoint", tempRoot.path() ); + } + return ss; +} + +static void +make_valid_loshinfo( LOSHInfo& i ) +{ + i.swap_outer_uuid = QStringLiteral( "UUID-0000" ); + i.swap_mapper_name = QStringLiteral( "/dev/mapper/0000" ); + i.swap_device_path = QStringLiteral( "/dev/sda0" ); + i.mountable_keyfile_device = QStringLiteral( "/dev/ada0p0s0" ); +} + +void +LOSHTests::testLOSHInfo() +{ + LOSHInfo i {}; + QVERIFY( !i.isValid() ); + + make_valid_loshinfo( i ); + QVERIFY( i.isValid() ); + QCOMPARE( i.replacementFor( QStringLiteral( "swap_device" ) ), QStringLiteral( "/dev/sda0" ) ); + QCOMPARE( i.replacementFor( QStringLiteral( "duck" ) ), QString() ); +} + + +void +LOSHTests::testConfigWriting() +{ + QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); + QVERIFY( tempRoot.isValid() ); + auto* ss = file_setup( tempRoot ); + QVERIFY( ss ); + QVERIFY( Calamares::JobQueue::instance()->globalStorage() ); + QVERIFY( QFile::exists( tempRoot.path() ) ); + QVERIFY( QFileInfo( tempRoot.path() ).isDir() ); + + const QString targetFilePath = QStringLiteral( "losh.conf" ); + const QString filePath = tempRoot.filePath( targetFilePath ); + QStringList contents { QStringLiteral( "# Calamares demo" ), + QStringLiteral( "# swap_device=a thing" ), + QStringLiteral( "# duck duck swap_device=another" ) }; + + // When the information is invalid, file contents are unchanged, + // and no file is written either. + LOSHInfo i {}; + QVERIFY( !i.isValid() ); + QVERIFY( !QFile::exists( filePath ) ); + write_openswap_conf( targetFilePath, contents, i ); // Invalid i + QVERIFY( !QFile::exists( filePath ) ); + QCOMPARE( contents.length(), 3 ); + QCOMPARE( contents.at( 1 ).left( 4 ), QStringLiteral( "# s" ) ); + + // Can we write there at all? + QFile derp( filePath ); + QVERIFY( derp.open( QIODevice::WriteOnly ) ); + QVERIFY( derp.write( "xx", 2 ) ); + derp.close(); + QVERIFY( QFile::exists( filePath ) ); + QVERIFY( QFile::remove( filePath ) ); + + // Once the information is valid, though, the file is written + make_valid_loshinfo( i ); + QVERIFY( i.isValid() ); + QVERIFY( !QFile::exists( filePath ) ); + write_openswap_conf( targetFilePath, contents, i ); // Now it is valid + QVERIFY( QFile::exists( filePath ) ); + QCOMPARE( contents.length(), 3 ); + QCOMPARE( i.swap_device_path, QStringLiteral( "/dev/sda0" ) ); // expected key value + QCOMPARE( contents.at( 1 ), QStringLiteral( "swap_device=/dev/sda0" ) ); // expected line + + // readLine() returns with newlines-added + QFile f( filePath ); + QVERIFY( f.open( QIODevice::ReadOnly ) ); + QCOMPARE( f.readLine(), QStringLiteral( "# Calamares demo\n" ) ); + QCOMPARE( f.readLine(), QStringLiteral( "swap_device=/dev/sda0\n" ) ); + QCOMPARE( f.readLine(), QStringLiteral( "# duck duck swap_device=another\n" ) ); + QCOMPARE( f.readLine(), QString() ); + QVERIFY( f.atEnd() ); + + // Note how the contents is updated on every write_openswap_conf() + i.swap_device_path = QStringLiteral( "/dev/zram/0.zram" ); + write_openswap_conf( targetFilePath, contents, i ); // Still valid + QCOMPARE( contents.length(), 3 ); + QCOMPARE( i.swap_device_path, QStringLiteral( "/dev/zram/0.zram" ) ); // expected key value + QCOMPARE( contents.at( 1 ), QStringLiteral( "swap_device=/dev/zram/0.zram" ) ); // expected line +} + + +void +LOSHTests::testJob() +{ + QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); + QVERIFY( tempRoot.isValid() ); + auto* ss = file_setup( tempRoot ); + QVERIFY( ss ); + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + QVERIFY( gs ); + + { + QDir d( tempRoot.path() ); + d.mkdir( "etc" ); + } + + QVERIFY( !LOSHInfo::fromGlobalStorage().isValid() ); + QVariantList outerPartition; + QVariantMap innerPartition; + innerPartition.insert( "mountPoint", "/" ); + innerPartition.insert( "fs", "ext4" ); + innerPartition.insert( "luksMapperName", "root" ); + innerPartition.insert( "luksUUID", "0000" ); + outerPartition.append( innerPartition ); + innerPartition.remove( "mountPoint" ); + innerPartition.insert( "fs", "linuxswap" ); + innerPartition.insert( "luksMapperName", "swap" ); + innerPartition.insert( "luksUuid", "0001" ); + outerPartition.append( innerPartition ); + gs->insert( "partitions", outerPartition ); + QVERIFY( LOSHInfo::fromGlobalStorage().isValid() ); + + LOSHJob j; + j.setConfigurationMap( QVariantMap() ); + auto jobresult = j.exec(); + QVERIFY( jobresult ); + + { + QFile f( tempRoot.filePath( "etc/openswap.conf" ) ); + QVERIFY( f.exists() ); + QVERIFY( f.open( QIODevice::ReadOnly ) ); + cDebug() << f.readAll(); + } +} + + +QTEST_GUILESS_MAIN( LOSHTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf index f5610cd7c..f1f03bbe4 100644 --- a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf +++ b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Writes an openswap configuration with LUKS settings to the given path --- # Path of the configuration file to write (in the target system) diff --git a/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml new file mode 100644 index 000000000..ed2ae7971 --- /dev/null +++ b/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/luksopenswaphookcfg +additionalProperties: false +type: object +properties: + configFilePath: { type: string } +required: [ configFilePath ] diff --git a/src/modules/luksopenswaphookcfg/main.py b/src/modules/luksopenswaphookcfg/main.py deleted file mode 100644 index a30ae999b..000000000 --- a/src/modules/luksopenswaphookcfg/main.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# === This file is part of Calamares - === -# -# Copyright 2016, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot -# -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . - -import libcalamares -import os.path - - -import gettext -_ = gettext.translation("calamares-python", - localedir=libcalamares.utils.gettext_path(), - languages=libcalamares.utils.gettext_languages(), - fallback=True).gettext - - -def pretty_name(): - return _("Configuring encrypted swap.") - - -def write_openswap_conf(partitions, root_mount_point, openswap_conf_path): - swap_outer_uuid = "" - swap_mapper_name = "" - mountable_keyfile_device = "" - - for partition in partitions: - if partition["fs"] == "linuxswap" and "luksMapperName" in partition: - swap_outer_uuid = partition["luksUuid"] - swap_mapper_name = partition["luksMapperName"] - - elif partition["mountPoint"] == "/" and "luksMapperName" in partition: - mountable_keyfile_device = ( - "/dev/mapper/{!s}".format(partition["luksMapperName"]) - ) - - if not mountable_keyfile_device or not swap_outer_uuid: - return None - - swap_device_path = "/dev/disk/by-uuid/{!s}".format(swap_outer_uuid) - - lines = [] - with open(os.path.join(root_mount_point, - openswap_conf_path), 'r') as openswap_file: - lines = [x.strip() for x in openswap_file.readlines()] - - for i in range(len(lines)): - if lines[i].startswith("swap_device"): - lines[i] = "swap_device={!s}".format(swap_device_path) - - elif lines[i].startswith("crypt_swap_name"): - lines[i] = "crypt_swap_name={!s}".format(swap_mapper_name) - - elif lines[i].startswith("keyfile_device"): - lines[i] = "keyfile_device={!s}".format(mountable_keyfile_device) - - elif lines[i].startswith("keyfile_filename"): - lines[i] = "keyfile_filename=crypto_keyfile.bin" - - with open(os.path.join(root_mount_point, - openswap_conf_path), 'w') as openswap_file: - openswap_file.write("\n".join(lines) + "\n") - - return None - - -def run(): - """ - This module sets up the openswap hook for a resumable encrypted swap. - :return: - """ - - root_mount_point = libcalamares.globalstorage.value("rootMountPoint") - openswap_conf_path = libcalamares.job.configuration["configFilePath"] - partitions = libcalamares.globalstorage.value("partitions") - - if not partitions: - libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) - return (_("Configuration Error"), - _("No partitions are defined for
{!s}
to use." ).format("luksopenswaphookcfg")) - if not root_mount_point: - libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) - return (_("Configuration Error"), - _("No root mount point is given for
{!s}
to use." ).format("luksopenswaphookcfg")) - - openswap_conf_path = openswap_conf_path.lstrip('/') - - return write_openswap_conf(partitions, root_mount_point, openswap_conf_path) diff --git a/src/modules/luksopenswaphookcfg/module.desc b/src/modules/luksopenswaphookcfg/module.desc deleted file mode 100644 index 53f8b7c39..000000000 --- a/src/modules/luksopenswaphookcfg/module.desc +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: "job" -name: "luksopenswaphookcfg" -interface: "python" -script: "main.py" diff --git a/src/modules/machineid/CMakeLists.txt b/src/modules/machineid/CMakeLists.txt index 4a916334c..0ab035ab4 100644 --- a/src/modules/machineid/CMakeLists.txt +++ b/src/modules/machineid/CMakeLists.txt @@ -1,11 +1,14 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( machineid TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES MachineIdJob.cpp Workers.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) diff --git a/src/modules/machineid/MachineIdJob.cpp b/src/modules/machineid/MachineIdJob.cpp index fc535e356..fef63828a 100644 --- a/src/modules/machineid/MachineIdJob.cpp +++ b/src/modules/machineid/MachineIdJob.cpp @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Kevin Kofler - * Copyright 2016, Philip Müller - * Copyright 2017, Alf Gaida - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-FileCopyrightText: 2016 Philip Müller + * SPDX-FileCopyrightText: 2017 Alf Gaida + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "MachineIdJob.h" @@ -66,14 +57,13 @@ MachineIdJob::exec() QString target_systemd_machineid_file = QStringLiteral( "/etc/machine-id" ); QString target_dbus_machineid_file = QStringLiteral( "/var/lib/dbus/machine-id" ); - QString target_entropy_file = QStringLiteral( "/var/lib/urandom/random-seed" ); const CalamaresUtils::System* system = CalamaresUtils::System::instance(); // Clear existing files - if ( m_entropy ) + for ( const auto& entropy_file : m_entropy_files ) { - system->removeTargetFile( target_entropy_file ); + system->removeTargetFile( entropy_file ); } if ( m_dbus ) { @@ -85,12 +75,18 @@ MachineIdJob::exec() } //Create new files - if ( m_entropy ) + for ( const auto& entropy_file : m_entropy_files ) { + if ( !CalamaresUtils::System::instance()->createTargetParentDirs( entropy_file ) ) + { + return Calamares::JobResult::error( + QObject::tr( "Directory not found" ), + QObject::tr( "Could not create new random file
%1
." ).arg( entropy_file ) ); + } auto r = MachineId::createEntropy( m_entropy_copy ? MachineId::EntropyGeneration::CopyFromHost : MachineId::EntropyGeneration::New, root, - target_entropy_file ); + entropy_file ); if ( !r ) { return r; @@ -98,6 +94,10 @@ MachineIdJob::exec() } if ( m_systemd ) { + if ( !system->createTargetParentDirs( target_systemd_machineid_file ) ) + { + cWarning() << "Could not create systemd data-directory."; + } auto r = MachineId::createSystemdMachineId( root, target_systemd_machineid_file ); if ( !r ) { @@ -152,8 +152,14 @@ MachineIdJob::setConfigurationMap( const QVariantMap& map ) // ignore it, though, if dbus is false m_dbus_symlink = m_dbus && m_dbus_symlink; - m_entropy = CalamaresUtils::getBool( map, "entropy", false ); 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* 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/MachineIdJob.h b/src/modules/machineid/MachineIdJob.h index 08943392a..7f406fc55 100644 --- a/src/modules/machineid/MachineIdJob.h +++ b/src/modules/machineid/MachineIdJob.h @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef MACHINEIDJOB_H #define MACHINEIDJOB_H #include +#include #include #include "CppJob.h" @@ -28,13 +20,16 @@ #include "DllMacro.h" +/** @brief Write 'random' data: machine id, entropy, UUIDs + * + */ class PLUGINDLLEXPORT MachineIdJob : public Calamares::CppJob { Q_OBJECT public: explicit MachineIdJob( QObject* parent = nullptr ); - virtual ~MachineIdJob() override; + ~MachineIdJob() override; QString prettyName() const override; @@ -42,14 +37,22 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; + /** @brief The list of filenames to write full of entropy. + * + * The list may be empty (no entropy files are configure) or + * contain one or more filenames to be interpreted within the + * target system. + */ + QStringList entropyFileNames() const { return m_entropy_files; } + private: bool m_systemd = false; ///< write systemd's files bool m_dbus = false; ///< write dbus files bool m_dbus_symlink = false; ///< .. or just symlink to systemd - bool m_entropy = false; ///< write an entropy file bool m_entropy_copy = false; ///< copy from host system + QStringList m_entropy_files; ///< names of files to write }; CALAMARES_PLUGIN_FACTORY_DECLARATION( MachineIdJobFactory ) diff --git a/src/modules/machineid/Tests.cpp b/src/modules/machineid/Tests.cpp index 2b6a9b1d1..0ad3e9e8b 100644 --- a/src/modules/machineid/Tests.cpp +++ b/src/modules/machineid/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "MachineIdJob.h" @@ -36,10 +27,11 @@ class MachineIdTests : public QObject Q_OBJECT public: MachineIdTests() {} - virtual ~MachineIdTests() {} + ~MachineIdTests() override {} private Q_SLOTS: void initTestCase(); + void testConfigEntropyFiles(); void testCopyFile(); @@ -54,6 +46,65 @@ MachineIdTests::initTestCase() Logger::setupLogLevel( Logger::LOGDEBUG ); } +void +MachineIdTests::testConfigEntropyFiles() +{ + static QString urandom_entropy( "/var/lib/urandom/random-seed" ); + // No config at all + { + QVariantMap m; + MachineIdJob j; + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames(), QStringList() ); + } + // No entropy, deprecated setting + { + QVariantMap m; + MachineIdJob j; + m.insert( "entropy", false ); + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames(), QStringList() ); + } + // Entropy, deprecated setting + { + QVariantMap m; + MachineIdJob j; + m.insert( "entropy", true ); + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames(), QStringList { urandom_entropy } ); + } + // Duplicate entry, with deprecated setting + { + QVariantMap m; + MachineIdJob j; + m.insert( "entropy", true ); + m.insert( "entropy-files", QStringList { urandom_entropy } ); + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames(), QStringList { urandom_entropy } ); + + m.clear(); + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames(), QStringList() ); + + // This would be weird + m.insert( "entropy", false ); + m.insert( "entropy-files", QStringList { urandom_entropy } ); + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames(), QStringList { urandom_entropy } ); + } + // No deprecated setting + { + QString tmp_entropy( "/tmp/entropy" ); + QVariantMap m; + MachineIdJob j; + m.insert( "entropy-files", QStringList { urandom_entropy, tmp_entropy } ); + j.setConfigurationMap( m ); + QVERIFY( !j.entropyFileNames().isEmpty() ); + QCOMPARE( j.entropyFileNames(), QStringList() << urandom_entropy << tmp_entropy ); + } +} + + void MachineIdTests::testCopyFile() { @@ -109,6 +160,7 @@ MachineIdTests::testJob() Logger::setupLogLevel( Logger::LOGDEBUG ); QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-job-XXXXXX" ) ); + // Only clean up if the tests succeed tempRoot.setAutoRemove( false ); cDebug() << "Temporary files as" << QDir::tempPath(); @@ -130,7 +182,7 @@ MachineIdTests::testJob() // Prepare part of the target filesystem { - QVERIFY( system->createTargetDirs("/etc") ); + QVERIFY( system->createTargetDirs( "/etc" ) ); auto r = system->createTargetFile( "/etc/machine-id", "Hello" ); QVERIFY( !r.failed() ); QVERIFY( r ); @@ -164,9 +216,30 @@ MachineIdTests::testJob() QFileInfo fi( "/tmp/var/lib/dbus/machine-id" ); QVERIFY( fi.exists() ); QVERIFY( fi.isSymLink() ); - QCOMPARE( fi.size(), 5); + QCOMPARE( fi.size(), 5 ); #endif } + + { + QString tmp_entropy2( "/pineapple.random" ); + QString tmp_entropy( "/tmp/entropy" ); + QVariantMap m; + MachineIdJob j; + m.insert( "entropy-files", QStringList { tmp_entropy2, tmp_entropy } ); + m.insert( "entropy", true ); + j.setConfigurationMap( m ); + QCOMPARE( j.entropyFileNames().count(), 3 ); // Because of the standard entropy entry + + // Check all three are created + auto r = j.exec(); + QVERIFY( r ); + for ( const auto& fileName : j.entropyFileNames() ) + { + cDebug() << "Verifying existence of" << fileName; + QVERIFY( QFile::exists( tempRoot.filePath( fileName.mid( 1 ) ) ) ); + } + } + tempRoot.setAutoRemove( true ); // All tests succeeded } diff --git a/src/modules/machineid/Workers.cpp b/src/modules/machineid/Workers.cpp index 76e466435..79d075c86 100644 --- a/src/modules/machineid/Workers.cpp +++ b/src/modules/machineid/Workers.cpp @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Kevin Kofler - * Copyright 2016, Philip Müller - * Copyright 2017, Alf Gaida - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Kevin Kofler + * SPDX-FileCopyrightText: 2016 Philip Müller + * SPDX-FileCopyrightText: 2017 Alf Gaida + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Workers.h" diff --git a/src/modules/machineid/Workers.h b/src/modules/machineid/Workers.h index 8cb8d74ff..51c9d526d 100644 --- a/src/modules/machineid/Workers.h +++ b/src/modules/machineid/Workers.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WORKERS_H diff --git a/src/modules/machineid/machineid.conf b/src/modules/machineid/machineid.conf index 97bd10a06..15e190299 100644 --- a/src/modules/machineid/machineid.conf +++ b/src/modules/machineid/machineid.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Machine-ID and other random data on the target system. # # This module can create a number of "random" things on the target: @@ -8,17 +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 -# this is a deprecated form of *dbus-symlink* -symlink: true -# Whether to create an entropy file -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). 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 new file mode 100644 index 000000000..59bb5f81b --- /dev/null +++ b/src/modules/machineid/machineid.schema.yaml @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/machineid +additionalProperties: false +type: object +properties: + 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: false } + entropy: { type: boolean, default: false } diff --git a/src/modules/mkinitfs/main.py b/src/modules/mkinitfs/main.py new file mode 100644 index 000000000..e3e6e176a --- /dev/null +++ b/src/modules/mkinitfs/main.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2014-2015 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Calamares is Free Software: see the License-Identifier above. +# + +import libcalamares +from libcalamares.utils import target_env_call + + +import gettext +_ = gettext.translation("calamares-python", + localedir=libcalamares.utils.gettext_path(), + languages=libcalamares.utils.gettext_languages(), + fallback=True).gettext + + +def pretty_name(): + return _("Creating initramfs with mkinitfs.") + + +def run_mkinitfs(): + """ + Creates initramfs, even when initramfs already exists. + + :return: + """ + return target_env_call(['mkinitfs']) + + +def run(): + """ + Starts routine to create initramfs. It passes back the exit code + if it fails. + + :return: + """ + return_code = run_mkinitfs() + + if return_code != 0: + return ( _("Failed to run mkinitfs on the target"), + _("The exit code was {}").format(return_code) ) diff --git a/src/modules/mkinitfs/module.desc b/src/modules/mkinitfs/module.desc new file mode 100644 index 000000000..decc3259f --- /dev/null +++ b/src/modules/mkinitfs/module.desc @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +type: "job" +name: "mkinitfs" +interface: "python" +script: "main.py" diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py index b10c5c0bf..a3318d1a0 100644 --- a/src/modules/mount/main.py +++ b/src/modules/mount/main.py @@ -1,25 +1,17 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Aurélien Gâteau -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot -# Copyright 2019, Kevin Kofler +# SPDX-FileCopyrightText: 2014 Aurélien Gâteau +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-FileCopyrightText: 2019 Kevin Kofler +# SPDX-FileCopyrightText: 2019-2020 Collabora Ltd +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import tempfile import subprocess @@ -28,109 +20,201 @@ import os import libcalamares import gettext + _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext +class ZfsException(Exception): + """Exception raised when there is a problem with zfs + + Attributes: + message -- explanation of the error + """ + + def __init__(self, message): + self.message = message + + def pretty_name(): return _("Mounting partitions.") + +def get_btrfs_subvolumes(partitions): + """ + Gets the job-configuration for btrfs subvolumes, or if there is + none given, returns a default configuration that matches + the setup (/ and /home) from before configurability was introduced. + + @param partitions + The partitions (from the partitioning module) that will exist on disk. + This is used to filter out subvolumes that don't need to be created + because they get a dedicated partition instead. + """ + btrfs_subvolumes = libcalamares.job.configuration.get("btrfsSubvolumes", None) + # Warn if there's no configuration at all, and empty configurations are + # replaced by a simple root-only layout. + if btrfs_subvolumes is None: + libcalamares.utils.warning("No configuration for btrfsSubvolumes") + if not btrfs_subvolumes: + btrfs_subvolumes = [dict(mountPoint="/", subvolume="/@"), dict(mountPoint="/home", subvolume="/@home")] + + # Filter out the subvolumes which have a dedicated partition + non_root_partition_mounts = [m for m in [p.get("mountPoint", None) for p in partitions] if + m is not None and m != '/'] + btrfs_subvolumes = list(filter(lambda s: s["mountPoint"] not in non_root_partition_mounts, btrfs_subvolumes)) + + # If we have a swap **file**, give it a separate subvolume. + swap_choice = libcalamares.globalstorage.value("partitionChoices") + if swap_choice and swap_choice.get("swap", None) == "file": + btrfs_subvolumes.append({'mountPoint': '/swap', 'subvolume': '/@swap'}) + + return btrfs_subvolumes + + +def mount_zfs(root_mount_point, partition): + """ Mounts a zfs partition at @p root_mount_point + + :param root_mount_point: The absolute path to the root of the install + :param partition: The partition map from global storage for this partition + :return: + """ + # Get the list of zpools from global storage + zfs_pool_list = libcalamares.globalstorage.value("zfsPoolInfo") + if not zfs_pool_list: + libcalamares.utils.warning("Failed to locate zfsPoolInfo data in global storage") + raise ZfsException(_("Internal error mounting zfs datasets")) + + # Find the zpool matching this partition + for zfs_pool in zfs_pool_list: + if zfs_pool["mountpoint"] == partition["mountPoint"]: + pool_name = zfs_pool["poolName"] + ds_name = zfs_pool["dsName"] + + # import the zpool + try: + libcalamares.utils.host_env_process_output(["zpool", "import", "-N", "-R", root_mount_point, pool_name], None) + except subprocess.CalledProcessError: + raise ZfsException(_("Failed to import zpool")) + + # Get the encrpytion information from global storage + zfs_info_list = libcalamares.globalstorage.value("zfsInfo") + encrypt = False + if zfs_info_list: + for zfs_info in zfs_info_list: + if zfs_info["mountpoint"] == partition["mountPoint"] and zfs_info["encrypted"] is True: + encrypt = True + passphrase = zfs_info["passphrase"] + + if encrypt is True: + # The zpool is encrypted, we need to unlock it + try: + libcalamares.utils.host_env_process_output(["zfs", "load-key", pool_name], None, passphrase) + except subprocess.CalledProcessError: + raise ZfsException(_("Failed to unlock zpool")) + + if partition["mountPoint"] == '/': + # Get the zfs dataset list from global storage + zfs = libcalamares.globalstorage.value("zfsDatasets") + + if not zfs: + libcalamares.utils.warning("Failed to locate zfs dataset list") + raise ZfsException(_("Internal error mounting zfs datasets")) + + zfs.sort(key=lambda x: x["mountpoint"]) + for dataset in zfs: + try: + if dataset["canMount"] == "noauto" or dataset["canMount"] is True: + libcalamares.utils.host_env_process_output(["zfs", "mount", + dataset["zpool"] + '/' + dataset["dsName"]]) + except subprocess.CalledProcessError: + raise ZfsException(_("Failed to set zfs mountpoint")) + else: + try: + libcalamares.utils.host_env_process_output(["zfs", "mount", pool_name + '/' + ds_name]) + except subprocess.CalledProcessError: + raise ZfsException(_("Failed to set zfs mountpoint")) + + def mount_partition(root_mount_point, partition, partitions): """ Do a single mount of @p partition inside @p root_mount_point. - - The @p partitions are used to handle btrfs special-cases: - then subvolumes are created for root and home. """ # Create mount point with `+` rather than `os.path.join()` because # `partition["mountPoint"]` starts with a '/'. raw_mount_point = partition["mountPoint"] + if not raw_mount_point: + return + mount_point = root_mount_point + raw_mount_point # Ensure that the created directory has the correct SELinux context on # SELinux-enabled systems. os.makedirs(mount_point, exist_ok=True) - subprocess.call(['chcon', '--reference=' + raw_mount_point, - mount_point]) + try: + subprocess.call(['chcon', '--reference=' + raw_mount_point, mount_point]) + except FileNotFoundError as e: + libcalamares.utils.warning(str(e)) + except OSError: + libcalamares.utils.error("Cannot run 'chcon' normally.") + raise fstype = partition.get("fs", "").lower() + if fstype == "unformatted": + return if fstype == "fat16" or fstype == "fat32": fstype = "vfat" + device = partition["device"] + if "luksMapperName" in partition: - libcalamares.utils.debug( - "about to mount {!s}".format(partition["luksMapperName"])) - libcalamares.utils.mount( - "/dev/mapper/{!s}".format(partition["luksMapperName"]), - mount_point, - fstype, - partition.get("options", ""), - ) + device = os.path.join("/dev/mapper", partition["luksMapperName"]) - else: - libcalamares.utils.mount(partition["device"], - mount_point, - fstype, - partition.get("options", ""), - ) + if fstype == "zfs": + mount_zfs(root_mount_point, partition) + else: # fstype == "zfs" + if libcalamares.utils.mount(device, + mount_point, + fstype, + partition.get("options", "")) != 0: + libcalamares.utils.warning("Cannot mount {}".format(device)) - # If the root partition is btrfs, we create a subvolume "@" - # for the root mount point. - # If a separate /home partition isn't defined, we also create - # a subvolume "@home". - # Finally we remount all of the above on the correct paths. + # Special handling for btrfs subvolumes. Create the subvolumes listed in mount.conf if fstype == "btrfs" and partition["mountPoint"] == '/': - has_home_mount_point = False - for p in partitions: - if "mountPoint" not in p or not p["mountPoint"]: + # Root has been mounted to btrfs volume -> create subvolumes from configuration + btrfs_subvolumes = get_btrfs_subvolumes(partitions) + + # Store created list in global storage so it can be used in the fstab module + libcalamares.globalstorage.insert("btrfsSubvolumes", btrfs_subvolumes) + # Create the subvolumes that are in the completed list + for s in btrfs_subvolumes: + if not s["subvolume"]: continue - if p["mountPoint"] == "/home": - has_home_mount_point = True - break - - subprocess.check_call(['btrfs', 'subvolume', 'create', - root_mount_point + '/@']) - - if not has_home_mount_point: - subprocess.check_call(['btrfs', 'subvolume', 'create', - root_mount_point + '/@home']) - + os.makedirs(root_mount_point + os.path.dirname(s["subvolume"]), exist_ok=True) + subprocess.check_call(["btrfs", "subvolume", "create", + root_mount_point + s["subvolume"]]) + if s["mountPoint"] == "/": + # insert the root subvolume into global storage + libcalamares.globalstorage.insert("btrfsRootSubvolume", s["subvolume"]) subprocess.check_call(["umount", "-v", root_mount_point]) + device = partition["device"] + if "luksMapperName" in partition: - libcalamares.utils.mount( - "/dev/mapper/{!s}".format(partition["luksMapperName"]), - mount_point, - fstype, - ",".join( - ["subvol=@", partition.get("options", "")]), - ) - if not has_home_mount_point: - libcalamares.utils.mount( - "/dev/mapper/{!s}".format(partition["luksMapperName"]), - root_mount_point + "/home", - fstype, - ",".join( - ["subvol=@home", partition.get("options", "")]), - ) - else: - libcalamares.utils.mount( - partition["device"], - mount_point, - fstype, - ",".join(["subvol=@", partition.get("options", "")]), - ) - if not has_home_mount_point: - libcalamares.utils.mount( - partition["device"], - root_mount_point + "/home", - fstype, - ",".join( - ["subvol=@home", partition.get("options", "")]), - ) + device = os.path.join("/dev/mapper", partition["luksMapperName"]) + + # Mount the subvolumes + for s in btrfs_subvolumes: + mount_option = "subvol={}".format(s['subvolume']) + subvolume_mountpoint = mount_point[:-1] + s['mountPoint'] + if libcalamares.utils.mount(device, + subvolume_mountpoint, + fstype, + ",".join([mount_option, partition.get("options", "")])) != 0: + libcalamares.utils.warning("Cannot mount {}".format(device)) def run(): @@ -143,7 +227,7 @@ def run(): if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), - _("No partitions are defined for
{!s}
to use." ).format("mount")) + _("No partitions are defined for
{!s}
to use.").format("mount")) root_mount_point = tempfile.mkdtemp(prefix="calamares-root-") @@ -160,10 +244,13 @@ def run(): # This way, we ensure / is mounted before the rest, and every mount point # is created on the right partition (e.g. if a partition is to be mounted # under /tmp, we make sure /tmp is mounted before the partition) - mountable_partitions = [ p for p in partitions + extra_mounts if "mountPoint" in p and p["mountPoint"] ] + mountable_partitions = [p for p in partitions + extra_mounts if "mountPoint" in p and p["mountPoint"]] mountable_partitions.sort(key=lambda x: x["mountPoint"]) - for partition in mountable_partitions: - mount_partition(root_mount_point, partition, partitions) + try: + for partition in mountable_partitions: + mount_partition(root_mount_point, partition, partitions) + except ZfsException as ze: + return _("zfs mounting error"), ze.message libcalamares.globalstorage.insert("rootMountPoint", root_mount_point) diff --git a/src/modules/mount/module.desc b/src/modules/mount/module.desc index 13e411716..e4486cf12 100644 --- a/src/modules/mount/module.desc +++ b/src/modules/mount/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mount" diff --git a/src/modules/mount/mount.conf b/src/modules/mount/mount.conf index bb28eed66..84dca05a7 100644 --- a/src/modules/mount/mount.conf +++ b/src/modules/mount/mount.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Mount filesystems in the target (generally, before treating the # target as a usable chroot / "live" system). Filesystems are # automatically mounted from the partitioning module. Filesystems @@ -9,10 +12,13 @@ # Extra filesystems to mount. The key's value is a list of entries; each # entry has four keys: # - device The device node to mount -# - fs The filesystem type to use +# - fs (optional) The filesystem type to use # - mountPoint Where to mount the filesystem # - options (optional) Extra options to pass to mount(8) # +# The device is not mounted if the mountPoint is unset or if the fs is +# set to unformatted. +# extraMounts: - device: proc fs: proc @@ -34,3 +40,26 @@ extraMountsEfi: - device: efivarfs fs: efivarfs mountPoint: /sys/firmware/efi/efivars + +# Btrfs subvolumes to create if root filesystem is on btrfs volume. +# If *mountpoint* is mounted already to another partition, it is ignored. +# Separate subvolume for swapfile is handled separately and automatically. +# +# It is possible to prevent subvolume creation -- this is likely only relevant +# for the root (/) subvolume -- by giving an empty string as a subvolume +# name. In this case no subvolume will be created. When using snapper as +# a rollback mechanism, it is recommended to **not** create a subvolume +# for root. + +btrfsSubvolumes: + - mountPoint: / + subvolume: /@ + # As an alternative: + # + # subvolume: "" + - mountPoint: /home + subvolume: /@home + - mountPoint: /var/cache + subvolume: /@cache + - mountPoint: /var/log + subvolume: /@log diff --git a/src/modules/mount/mount.schema.yaml b/src/modules/mount/mount.schema.yaml new file mode 100644 index 000000000..fb5dfb69c --- /dev/null +++ b/src/modules/mount/mount.schema.yaml @@ -0,0 +1,40 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/mount +additionalProperties: false +type: object +properties: + # TODO: share the schema definition, since these are identical + extraMounts: + type: array + items: + type: object + additionalProperties: false + properties: + device: { type: string } + fs: { type: string } + mountPoint: { type: string } + options: { type: string } + required: [ device, mountPoint ] + extraMountsEfi: + type: array + items: + type: object + additionalProperties: false + properties: + device: { type: string } + fs: { type: string } + mountPoint: { type: string } + options: { type: string } + required: [ device, mountPoint ] + btrfsSubvolumes: + type: array + items: + type: object + additionalProperties: false + properties: + mountPoint: { type: string } + subvolume: { type: string } + required: [ subvolume, mountPoint ] diff --git a/src/modules/mount/test.yaml b/src/modules/mount/tests/1.global similarity index 77% rename from src/modules/mount/test.yaml rename to src/modules/mount/tests/1.global index e1619296e..ce3e12e4e 100644 --- a/src/modules/mount/test.yaml +++ b/src/modules/mount/tests/1.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 partitions: - device: "/dev/sdb1" mountPoint: "/" diff --git a/src/modules/mount/tests/1.job b/src/modules/mount/tests/1.job new file mode 100644 index 000000000..94b3a1492 --- /dev/null +++ b/src/modules/mount/tests/1.job @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +bogus: true + +# No configuration needed because the partitions are +# all filesystems that require no special handling. diff --git a/src/modules/mount/tests/2.global b/src/modules/mount/tests/2.global new file mode 100644 index 000000000..20aba89ec --- /dev/null +++ b/src/modules/mount/tests/2.global @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +partitions: + - device: "/dev/sdb1" + mountPoint: "/" + fs: "btrfs" + +# Expect a complaint and a default btrfs layout diff --git a/src/modules/mount/tests/2.job b/src/modules/mount/tests/2.job new file mode 100644 index 000000000..40d8c6171 --- /dev/null +++ b/src/modules/mount/tests/2.job @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 + +# Expect a complaint and a default btrfs layout because the +# partitions use btrfs diff --git a/src/modules/mount/tests/3.global b/src/modules/mount/tests/3.global new file mode 100644 index 000000000..9dae421df --- /dev/null +++ b/src/modules/mount/tests/3.global @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +partitions: + - device: "/dev/sdb1" + mountPoint: "/" + fs: "btrfs" +partitionChoices: + swap: file diff --git a/src/modules/mount/tests/3.job b/src/modules/mount/tests/3.job new file mode 100644 index 000000000..94b3a1492 --- /dev/null +++ b/src/modules/mount/tests/3.job @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +bogus: true + +# No configuration needed because the partitions are +# all filesystems that require no special handling. diff --git a/src/modules/mount/tests/4.global b/src/modules/mount/tests/4.global new file mode 100644 index 000000000..1856c9dc3 --- /dev/null +++ b/src/modules/mount/tests/4.global @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +partitions: + - device: "/dev/sdb1" + mountPoint: "/" + fs: "btrfs" + - device: "/dev/sdb2" + mountPoint: "/home" + fs: "ext4" +partitionChoices: + swap: file diff --git a/src/modules/mount/tests/4.job b/src/modules/mount/tests/4.job new file mode 100644 index 000000000..dac758227 --- /dev/null +++ b/src/modules/mount/tests/4.job @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 + +btrfsSubvolumes: + - mountPoint: / + subvolume: /@ + - mountPoint: /home + subvolume: /@home + - mountPoint: /var/cache + subvolume: /@cache + - mountPoint: /var/log + subvolume: /@log diff --git a/src/modules/netinstall/CMakeLists.txt b/src/modules/netinstall/CMakeLists.txt index 3e6ac3cb5..13c6fa0ce 100644 --- a/src/modules/netinstall/CMakeLists.txt +++ b/src/modules/netinstall/CMakeLists.txt @@ -1,20 +1,23 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( netinstall TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES Config.cpp + groupstreeview.cpp + LoaderQueue.cpp NetInstallViewStep.cpp NetInstallPage.cpp PackageTreeItem.cpp PackageModel.cpp UI page_netinst.ui - RESOURCES - netinstall.qrc LINK_PRIVATE_LIBRARIES - calamaresui Qt5::Network - yamlcpp SHARED_LIB ) @@ -22,6 +25,8 @@ calamares_add_test( netinstalltest SOURCES Tests.cpp + Config.cpp + LoaderQueue.cpp PackageTreeItem.cpp PackageModel.cpp LIBRARIES diff --git a/src/modules/netinstall/Config.cpp b/src/modules/netinstall/Config.cpp index 556cb1cf9..c163d72a0 100644 --- a/src/modules/netinstall/Config.cpp +++ b/src/modules/netinstall/Config.cpp @@ -1,30 +1,26 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" +#include "LoaderQueue.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" #include "network/Manager.h" +#include "packages/Globals.h" #include "utils/Logger.h" -#include "utils/RAII.h" -#include "utils/Yaml.h" +#include "utils/Retranslator.h" +#include "utils/Variant.h" #include @@ -32,10 +28,20 @@ Config::Config( QObject* parent ) : QObject( parent ) , m_model( new PackageModel( this ) ) { + CALAMARES_RETRANSLATE_SLOT( &Config::retranslate ); } Config::~Config() {} +void +Config::retranslate() +{ + emit statusChanged( status() ); + emit sidebarLabelChanged( sidebarLabel() ); + emit titleLabelChanged( titleLabel() ); +} + + QString Config::status() const { @@ -48,11 +54,13 @@ Config::status() const case Status::FailedBadData: return tr( "Network Installation. (Disabled: Received invalid groups data)" ); case Status::FailedInternalError: - return tr( "Network Installation. (Disabled: internal error)" ); + return tr( "Network Installation. (Disabled: Internal error)" ); case Status::FailedNetworkError: return tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ); + case Status::FailedNoData: + return tr( "Network Installation. (Disabled: No package list)" ); } - NOTREACHED return QString(); + __builtin_unreachable(); } @@ -63,80 +71,112 @@ Config::setStatus( Status s ) emit statusChanged( status() ); } +QString +Config::sidebarLabel() const +{ + return m_sidebarLabel ? m_sidebarLabel->get() : tr( "Package selection" ); +} + +QString +Config::titleLabel() const +{ + return m_titleLabel ? m_titleLabel->get() : QString(); +} + + void Config::loadGroupList( const QVariantList& groupData ) { m_model->setupModelData( groupData ); - emit statusReady(); -} - -void -Config::loadGroupList( const QUrl& url ) -{ - if ( !url.isValid() ) + if ( m_model->rowCount() < 1 ) { - setStatus( Status::FailedBadConfiguration ); - } - - using namespace CalamaresUtils::Network; - - cDebug() << "NetInstall loading groups from" << url; - QNetworkReply* reply = Manager::instance().asynchronousGet( - url, - RequestOptions( RequestOptions::FakeUserAgent | RequestOptions::FollowRedirect, std::chrono::seconds( 30 ) ) ); - - if ( !reply ) - { - cDebug() << Logger::Continuation << "request failed immediately."; - setStatus( Status::FailedBadConfiguration ); + cWarning() << "NetInstall groups data was empty."; + setStatus( Status::FailedNoData ); } else { - m_reply = reply; - connect( reply, &QNetworkReply::finished, this, &Config::receivedGroupData ); + setStatus( Status::Ok ); } } void -Config::receivedGroupData() +Config::loadingDone() { - if ( !m_reply || !m_reply->isFinished() ) + if ( m_queue ) { - cWarning() << "NetInstall data called too early."; - setStatus( Status::FailedInternalError ); - return; - } - - cDebug() << "NetInstall group data received" << m_reply->size() << "bytes from" << m_reply->url(); - - cqDeleter< QNetworkReply > d{ m_reply }; - - // If m_required is *false* then we still say we're ready - // even if the reply is corrupt or missing. - if ( m_reply->error() != QNetworkReply::NoError ) - { - cWarning() << "unable to fetch netinstall package lists."; - cDebug() << Logger::SubEntry << "Netinstall reply error: " << m_reply->error(); - cDebug() << Logger::SubEntry << "Request for url: " << m_reply->url().toString() - << " failed with: " << m_reply->errorString(); - setStatus( Status::FailedNetworkError ); - return; - } - - QByteArray yamlData = m_reply->readAll(); - try - { - YAML::Node groups = YAML::Load( yamlData.constData() ); - - if ( !groups.IsSequence() ) - { - cWarning() << "NetInstall groups data does not form a sequence."; - } - loadGroupList( CalamaresUtils::yamlSequenceToVariant( groups ) ); - } - catch ( YAML::Exception& e ) - { - CalamaresUtils::explainYamlException( e, yamlData, "netinstall groups data" ); - setStatus( Status::FailedBadData ); + m_queue->deleteLater(); + m_queue = nullptr; } + emit statusReady(); +} + + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + setRequired( CalamaresUtils::getBool( configurationMap, "required", false ) ); + + // Get the translations, if any + bool bogus = false; + auto label = CalamaresUtils::getSubMap( configurationMap, "label", bogus ); + // Use a different class name for translation lookup because the + // .. table of strings lives in NetInstallViewStep.cpp and moving them + // .. around is annoying for translators. + static const char className[] = "NetInstallViewStep"; + + if ( label.contains( "sidebar" ) ) + { + m_sidebarLabel = new CalamaresUtils::Locale::TranslatedString( label, "sidebar", className ); + } + if ( label.contains( "title" ) ) + { + m_titleLabel = new CalamaresUtils::Locale::TranslatedString( label, "title", className ); + } + + // Lastly, load the groups data + const QString key = QStringLiteral( "groupsUrl" ); + const auto& groupsUrlVariant = configurationMap.value( key ); + m_queue = new LoaderQueue( this ); + if ( groupsUrlVariant.type() == QVariant::String ) + { + m_queue->append( SourceItem::makeSourceItem( groupsUrlVariant.toString(), configurationMap ) ); + } + else if ( groupsUrlVariant.type() == QVariant::List ) + { + for ( const auto& s : groupsUrlVariant.toStringList() ) + { + m_queue->append( SourceItem::makeSourceItem( s, configurationMap ) ); + } + } + + setStatus( required() ? Status::FailedNoData : Status::Ok ); + cDebug() << "Loading netinstall from" << m_queue->count() << "alternate sources."; + connect( m_queue, &LoaderQueue::done, this, &Config::loadingDone ); + m_queue->load(); +} + +void +Config::finalizeGlobalStorage( const Calamares::ModuleSystem::InstanceKey& key ) +{ + auto packages = model()->getPackages(); + + // This netinstall module may add two sub-steps to the packageOperations, + // one for installing and one for try-installing. + QVariantList installPackages; + QVariantList tryInstallPackages; + + for ( const auto& package : packages ) + { + if ( package->isCritical() ) + { + installPackages.append( package->toOperation() ); + } + else + { + tryInstallPackages.append( package->toOperation() ); + } + } + + CalamaresUtils::Packages::setGSPackageAdditions( + Calamares::JobQueue::instance()->globalStorage(), key, installPackages, tryInstallPackages ); } diff --git a/src/modules/netinstall/Config.h b/src/modules/netinstall/Config.h index 781c9be5d..58931c636 100644 --- a/src/modules/netinstall/Config.h +++ b/src/modules/netinstall/Config.h @@ -1,21 +1,12 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NETINSTALL_CONFIG_H @@ -23,10 +14,15 @@ #include "PackageModel.h" -#include -#include +#include "locale/TranslatableConfiguration.h" +#include "modulesystem/InstanceKey.h" -class QNetworkReply; +#include +#include + +#include + +class LoaderQueue; class Config : public QObject { @@ -35,9 +31,15 @@ class Config : public QObject Q_PROPERTY( PackageModel* packageModel MEMBER m_model FINAL ) Q_PROPERTY( QString status READ status NOTIFY statusChanged FINAL ) + // Translations, of the module name (for sidebar) and above the list + Q_PROPERTY( QString sidebarLabel READ sidebarLabel NOTIFY sidebarLabelChanged FINAL ) + Q_PROPERTY( QString titleLabel READ titleLabel NOTIFY titleLabelChanged FINAL ) + public: Config( QObject* parent = nullptr ); - virtual ~Config(); + ~Config() override; + + void setConfigurationMap( const QVariantMap& configurationMap ); enum class Status { @@ -45,21 +47,23 @@ public: FailedBadConfiguration, FailedInternalError, FailedNetworkError, - FailedBadData + FailedBadData, + FailedNoData }; + /// Human-readable, translated representation of the status QString status() const; + /// Internal code for the status + Status statusCode() const { return m_status; } void setStatus( Status s ); bool required() const { return m_required; } void setRequired( bool r ) { m_required = r; } - /** @brief Retrieves the groups, with name, description and packages - * - * Loads data from the given URL. Once done, the data is parsed - * and passed on to the other loadGroupList() method. - */ - void loadGroupList( const QUrl& url ); + PackageModel* model() const { return m_model; } + + QString sidebarLabel() const; + QString titleLabel() const; /** @brief Fill model from parsed data. * @@ -68,18 +72,28 @@ public: */ void loadGroupList( const QVariantList& groupData ); - PackageModel* model() const { return m_model; } + /** @brief Write the selected package lists to global storage + * + * Since the config doesn't know what module it is for, + * pass in an instance key. + */ + void finalizeGlobalStorage( const Calamares::ModuleSystem::InstanceKey& key ); -signals: +Q_SIGNALS: void statusChanged( QString status ); ///< Something changed + void sidebarLabelChanged( QString label ); + void titleLabelChanged( QString label ); void statusReady(); ///< Loading groups is complete -private slots: - void receivedGroupData(); ///< From async-loading group data +private Q_SLOTS: + void retranslate(); + void loadingDone(); private: + CalamaresUtils::Locale::TranslatedString* m_sidebarLabel = nullptr; // As it appears in the sidebar + CalamaresUtils::Locale::TranslatedString* m_titleLabel = nullptr; PackageModel* m_model = nullptr; - QNetworkReply* m_reply = nullptr; // For fetching data + LoaderQueue* m_queue = nullptr; Status m_status = Status::Ok; bool m_required = false; }; diff --git a/src/modules/netinstall/LoaderQueue.cpp b/src/modules/netinstall/LoaderQueue.cpp new file mode 100644 index 000000000..50b3354ba --- /dev/null +++ b/src/modules/netinstall/LoaderQueue.cpp @@ -0,0 +1,206 @@ +/* + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "LoaderQueue.h" + +#include "Config.h" +#include "network/Manager.h" +#include "utils/Logger.h" +#include "utils/RAII.h" +#include "utils/Yaml.h" + +#include +#include + +/** @brief Call fetchNext() on the queue if it can + * + * On destruction, a new call to fetchNext() is queued, so that + * the queue continues loading. Calling release() before the + * destructor skips the fetchNext(), ending the queue-loading. + * + * Calling done(b) is a conditional release: if @p b is @c true, + * queues a call to done() on the queue and releases it; otherwise, + * does nothing. + */ +class FetchNextUnless +{ +public: + FetchNextUnless( LoaderQueue* q ) + : m_q( q ) + { + } + ~FetchNextUnless() + { + if ( m_q ) + { + QMetaObject::invokeMethod( m_q, "fetchNext", Qt::QueuedConnection ); + } + } + void release() { m_q = nullptr; } + void done( bool b ) + { + if ( b ) + { + if ( m_q ) + { + QMetaObject::invokeMethod( m_q, "done", Qt::QueuedConnection ); + } + release(); + } + } + +private: + LoaderQueue* m_q = nullptr; +}; + +SourceItem +SourceItem::makeSourceItem( const QString& groupsUrl, const QVariantMap& configurationMap ) +{ + if ( groupsUrl == QStringLiteral( "local" ) ) + { + return SourceItem { QUrl(), configurationMap.value( "groups" ).toList() }; + } + else + { + return SourceItem { QUrl { groupsUrl }, QVariantList() }; + } +} + +LoaderQueue::LoaderQueue( Config* parent ) + : QObject( parent ) + , m_config( parent ) +{ +} + +void +LoaderQueue::append( SourceItem&& i ) +{ + m_queue.append( std::move( i ) ); +} + +void +LoaderQueue::load() +{ + QMetaObject::invokeMethod( this, "fetchNext", Qt::QueuedConnection ); +} + + +void +LoaderQueue::fetchNext() +{ + if ( m_queue.isEmpty() ) + { + emit done(); + return; + } + + auto source = m_queue.takeFirst(); + if ( source.isLocal() ) + { + m_config->loadGroupList( source.data ); + emit done(); + } + else + { + fetch( source.url ); + } +} + +void +LoaderQueue::fetch( const QUrl& url ) +{ + FetchNextUnless next( this ); + + if ( !url.isValid() ) + { + m_config->setStatus( Config::Status::FailedBadConfiguration ); + cDebug() << "Invalid URL" << url; + return; + } + + using namespace CalamaresUtils::Network; + + cDebug() << "NetInstall loading groups from" << url; + QNetworkReply* reply = Manager::instance().asynchronousGet( + url, + RequestOptions( RequestOptions::FakeUserAgent | RequestOptions::FollowRedirect, std::chrono::seconds( 30 ) ) ); + + if ( !reply ) + { + cDebug() << Logger::SubEntry << "Request failed immediately."; + // If nobody sets a different status, this will remain + m_config->setStatus( Config::Status::FailedBadConfiguration ); + } + else + { + // When the network request is done, **then** we might + // do the next item from the queue, so don't call fetchNext() now. + next.release(); + m_reply = reply; + connect( reply, &QNetworkReply::finished, this, &LoaderQueue::dataArrived ); + } +} + +void +LoaderQueue::dataArrived() +{ + FetchNextUnless next( this ); + + if ( !m_reply || !m_reply->isFinished() ) + { + cWarning() << "NetInstall data called too early."; + m_config->setStatus( Config::Status::FailedInternalError ); + return; + } + + cDebug() << "NetInstall group data received" << m_reply->size() << "bytes from" << m_reply->url(); + + cqDeleter< QNetworkReply > d { m_reply }; + + // If m_required is *false* then we still say we're ready + // even if the reply is corrupt or missing. + if ( m_reply->error() != QNetworkReply::NoError ) + { + cWarning() << "unable to fetch netinstall package lists."; + cDebug() << Logger::SubEntry << "Netinstall reply error: " << m_reply->error(); + cDebug() << Logger::SubEntry << "Request for url: " << m_reply->url().toString() + << " failed with: " << m_reply->errorString(); + m_config->setStatus( Config::Status::FailedNetworkError ); + return; + } + + QByteArray yamlData = m_reply->readAll(); + try + { + YAML::Node groups = YAML::Load( yamlData.constData() ); + + if ( groups.IsSequence() ) + { + m_config->loadGroupList( CalamaresUtils::yamlSequenceToVariant( groups ) ); + next.done( m_config->statusCode() == Config::Status::Ok ); + } + else if ( groups.IsMap() ) + { + auto map = CalamaresUtils::yamlMapToVariant( groups ); + m_config->loadGroupList( map.value( "groups" ).toList() ); + next.done( m_config->statusCode() == Config::Status::Ok ); + } + else + { + cWarning() << "NetInstall groups data does not form a sequence."; + } + } + catch ( YAML::Exception& e ) + { + CalamaresUtils::explainYamlException( e, yamlData, "netinstall groups data" ); + m_config->setStatus( Config::Status::FailedBadData ); + } +} diff --git a/src/modules/netinstall/LoaderQueue.h b/src/modules/netinstall/LoaderQueue.h new file mode 100644 index 000000000..d7baf58d4 --- /dev/null +++ b/src/modules/netinstall/LoaderQueue.h @@ -0,0 +1,77 @@ +/* + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef NETINSTALL_LOADERQUEUE_H +#define NETINSTALL_LOADERQUEUE_H + +#include +#include +#include + +class Config; +class QNetworkReply; + +/** @brief Data about an entry in *groupsUrl* + * + * This can be a specific URL, or "local" which uses data stored + * in the configuration file itself. + */ +struct SourceItem +{ + QUrl url; + QVariantList data; + + bool isUrl() const { return url.isValid(); } + bool isLocal() const { return !data.isEmpty(); } + bool isValid() const { return isUrl() || isLocal(); } + /** @brief Create a SourceItem + * + * If the @p groupsUrl is @c "local" then the *groups* key in + * the @p configurationMap is used as the source; otherwise the + * string is used as an actual URL. + */ + static SourceItem makeSourceItem( const QString& groupsUrl, const QVariantMap& configurationMap ); +}; + +/** @brief Queue of source items to load + * + * Queue things up by calling append() and then kick things off + * by calling load(). This will try to load the items, in order; + * the first one that succeeds will end the loading process. + * + * Signal done() is emitted when done (also when all of the items fail). + */ +class LoaderQueue : public QObject +{ + Q_OBJECT +public: + LoaderQueue( Config* parent ); + + void append( SourceItem&& i ); + int count() const { return m_queue.count(); } + +public Q_SLOTS: + void load(); + + void fetchNext(); + void fetch( const QUrl& url ); + void dataArrived(); + +Q_SIGNALS: + void done(); + +private: + QQueue< SourceItem > m_queue; + Config* m_config = nullptr; + QNetworkReply* m_reply = nullptr; +}; + +#endif diff --git a/src/modules/netinstall/NetInstallPage.cpp b/src/modules/netinstall/NetInstallPage.cpp index 80689e6d2..9c70e97eb 100644 --- a/src/modules/netinstall/NetInstallPage.cpp +++ b/src/modules/netinstall/NetInstallPage.cpp @@ -1,22 +1,13 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "NetInstallPage.h" @@ -24,6 +15,7 @@ #include "PackageModel.h" #include "ui_page_netinst.h" +#include "GlobalStorage.h" #include "JobQueue.h" #include "network/Manager.h" @@ -40,41 +32,21 @@ NetInstallPage::NetInstallPage( Config* c, QWidget* parent ) , ui( new Ui::Page_NetInst ) { ui->setupUi( this ); + ui->groupswidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents ); ui->groupswidget->setModel( c->model() ); - connect( c, &Config::statusChanged, this, &NetInstallPage::setStatus ); + connect( c, &Config::statusChanged, ui->netinst_status, &QLabel::setText ); + connect( c, + &Config::titleLabelChanged, + [ ui = this->ui ]( const QString title ) + { + ui->label->setVisible( !title.isEmpty() ); + ui->label->setText( title ); + } ); connect( c, &Config::statusReady, this, &NetInstallPage::expandGroups ); - - setPageTitle( nullptr ); - CALAMARES_RETRANSLATE_SLOT( &NetInstallPage::retranslate ); } NetInstallPage::~NetInstallPage() {} -void -NetInstallPage::setPageTitle( CalamaresUtils::Locale::TranslatedString* t ) -{ - m_title.reset( t ); - if ( !m_title ) - { - ui->label->hide(); - } - else - { - ui->label->show(); - } - retranslate(); -} - -void -NetInstallPage::retranslate() -{ - if ( m_title ) - { - ui->label->setText( m_title->get() ); // That's get() on the TranslatedString - } - ui->netinst_status->setText( m_config->status() ); -} - void NetInstallPage::expandGroups() { @@ -88,18 +60,25 @@ NetInstallPage::expandGroups() ui->groupswidget->setExpanded( index, true ); } } - // Make sure all the group names are visible - ui->groupswidget->resizeColumnToContents(0); -} - -void -NetInstallPage::setStatus( QString s ) -{ - ui->netinst_status->setText( s ); } void NetInstallPage::onActivate() { ui->groupswidget->setFocus(); + + // The netinstallSelect global storage value can be used to make additional items selected by default + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + const QStringList selectNames = gs->value( "netinstallSelect" ).toStringList(); + if ( !selectNames.isEmpty() ) + { + m_config->model()->setSelections( selectNames ); + } + + // If NetInstallAdd is found in global storage, add those items to the tree + const QVariantList groups = gs->value( "netinstallAdd" ).toList(); + if ( !groups.isEmpty() ) + { + m_config->model()->appendModelData( groups ); + } } diff --git a/src/modules/netinstall/NetInstallPage.h b/src/modules/netinstall/NetInstallPage.h index 13a106eaf..94ce6d4ba 100644 --- a/src/modules/netinstall/NetInstallPage.h +++ b/src/modules/netinstall/NetInstallPage.h @@ -1,21 +1,13 @@ -/* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot +/* === This file is part of Calamares - === * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NETINSTALLPAGE_H @@ -44,25 +36,10 @@ class NetInstallPage : public QWidget Q_OBJECT public: NetInstallPage( Config* config, QWidget* parent = nullptr ); - virtual ~NetInstallPage(); - - /** @brief Sets the page title - * - * In situations where there is more than one netinstall page, - * or you want some explanatory title above the treeview, - * set the page title. This page takes ownership of the - * TranslatedString object. - * - * Set to nullptr to remove the title. - */ - void setPageTitle( CalamaresUtils::Locale::TranslatedString* ); + ~NetInstallPage() override; void onActivate(); -public slots: - void retranslate(); - void setStatus( QString s ); - /** @brief Expand entries that should be pre-expanded. * * Follows the *expanded* key / the startExpanded field in the @@ -73,8 +50,6 @@ public slots: private: Config* m_config; Ui::Page_NetInst* ui; - - std::unique_ptr< CalamaresUtils::Locale::TranslatedString > m_title; // Above the treeview }; #endif // NETINSTALLPAGE_H diff --git a/src/modules/netinstall/NetInstallViewStep.cpp b/src/modules/netinstall/NetInstallViewStep.cpp index e99b43830..99d51af9e 100644 --- a/src/modules/netinstall/NetInstallViewStep.cpp +++ b/src/modules/netinstall/NetInstallViewStep.cpp @@ -1,31 +1,17 @@ -/* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot +/* === This file is part of Calamares - === * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "NetInstallViewStep.h" -#include "GlobalStorage.h" -#include "JobQueue.h" - -#include "utils/Logger.h" -#include "utils/Variant.h" - #include "NetInstallPage.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( NetInstallViewStepFactory, registerPlugin< NetInstallViewStep >(); ) @@ -33,7 +19,6 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( NetInstallViewStepFactory, registerPlugin< NetInstallViewStep::NetInstallViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new NetInstallPage( &m_config ) ) - , m_sidebarLabel( nullptr ) , m_nextEnabled( false ) { connect( &m_config, &Config::statusReady, this, &NetInstallViewStep::nextIsReady ); @@ -46,20 +31,22 @@ NetInstallViewStep::~NetInstallViewStep() { m_widget->deleteLater(); } - delete m_sidebarLabel; } QString NetInstallViewStep::prettyName() const { - return m_sidebarLabel ? m_sidebarLabel->get() : tr( "Package selection" ); + return m_config.sidebarLabel(); #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. + // + // These translations still live here, even though the lookup + // code is in the Config class. tr( "Package selection" ); tr( "Office software" ); tr( "Office package" ); @@ -134,68 +121,7 @@ NetInstallViewStep::onActivate() void NetInstallViewStep::onLeave() { - auto packages = m_config.model()->getPackages(); - cDebug() << "Netinstall: Processing" << packages.length() << "packages."; - - static const char PACKAGEOP[] = "packageOperations"; - - // Check if there's already a PACAKGEOP entry in GS, and if so we'll - // extend that one (overwriting the value in GS at the end of this method) - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QVariantList packageOperations = gs->contains( PACKAGEOP ) ? gs->value( PACKAGEOP ).toList() : QVariantList(); - cDebug() << Logger::SubEntry << "Existing package operations length" << packageOperations.length(); - - // Clear out existing operations for this module, going backwards: - // Sometimes we remove an item, and we don't want the index to - // fall off the end of the list. - for ( int index = packageOperations.length() - 1; 0 <= index; index-- ) - { - const QVariantMap op = packageOperations.at( index ).toMap(); - if ( op.contains( "source" ) && op.value( "source" ).toString() == moduleInstanceKey().toString() ) - { - cDebug() << Logger::SubEntry << "Removing existing operations for" << moduleInstanceKey(); - packageOperations.removeAt( index ); - } - } - - // This netinstall module may add two sub-steps to the packageOperations, - // one for installing and one for try-installing. - QVariantList installPackages; - QVariantList tryInstallPackages; - - for ( const auto& package : packages ) - { - if ( package->isCritical() ) - { - installPackages.append( package->toOperation() ); - } - else - { - tryInstallPackages.append( package->toOperation() ); - } - } - - if ( !installPackages.empty() ) - { - QVariantMap op; - op.insert( "install", QVariant( installPackages ) ); - op.insert( "source", moduleInstanceKey().toString() ); - packageOperations.append( op ); - cDebug() << Logger::SubEntry << installPackages.length() << "critical packages."; - } - if ( !tryInstallPackages.empty() ) - { - QVariantMap op; - op.insert( "try_install", QVariant( tryInstallPackages ) ); - op.insert( "source", moduleInstanceKey().toString() ); - packageOperations.append( op ); - cDebug() << Logger::SubEntry << tryInstallPackages.length() << "non-critical packages."; - } - - if ( !packageOperations.isEmpty() ) - { - gs->insert( PACKAGEOP, packageOperations ); - } + m_config.finalizeGlobalStorage( moduleInstanceKey() ); } void @@ -208,35 +134,5 @@ NetInstallViewStep::nextIsReady() void NetInstallViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - m_config.setRequired( CalamaresUtils::getBool( configurationMap, "required", false ) ); - - QString groupsUrl = CalamaresUtils::getString( configurationMap, "groupsUrl" ); - if ( !groupsUrl.isEmpty() ) - { - // Keep putting groupsUrl into the global storage, - // even though it's no longer used for in-module data-passing. - Calamares::JobQueue::instance()->globalStorage()->insert( "groupsUrl", groupsUrl ); - if ( groupsUrl == QStringLiteral( "local" ) ) - { - QVariantList l = configurationMap.value( "groups" ).toList(); - m_config.loadGroupList( l ); - } - else - { - m_config.loadGroupList( groupsUrl ); - } - } - - bool bogus = false; - auto label = CalamaresUtils::getSubMap( configurationMap, "label", bogus ); - - if ( label.contains( "sidebar" ) ) - { - m_sidebarLabel = new CalamaresUtils::Locale::TranslatedString( label, "sidebar", metaObject()->className() ); - } - if ( label.contains( "title" ) ) - { - m_widget->setPageTitle( - new CalamaresUtils::Locale::TranslatedString( label, "title", metaObject()->className() ) ); - } + m_config.setConfigurationMap( configurationMap ); } diff --git a/src/modules/netinstall/NetInstallViewStep.h b/src/modules/netinstall/NetInstallViewStep.h index d2114a346..8949632c1 100644 --- a/src/modules/netinstall/NetInstallViewStep.h +++ b/src/modules/netinstall/NetInstallViewStep.h @@ -1,20 +1,11 @@ /* - * Copyright 2016, Luca Giambonini - * Copyright 2016, Lisa Vitolo - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Luca Giambonini + * SPDX-FileCopyrightText: 2016 Lisa Vitolo + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NETINSTALLVIEWSTEP_H @@ -23,7 +14,6 @@ #include "Config.h" #include "DllMacro.h" -#include "locale/TranslatableConfiguration.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" @@ -37,7 +27,7 @@ class PLUGINDLLEXPORT NetInstallViewStep : public Calamares::ViewStep public: explicit NetInstallViewStep( QObject* parent = nullptr ); - virtual ~NetInstallViewStep() override; + ~NetInstallViewStep() override; QString prettyName() const override; @@ -65,7 +55,6 @@ private: Config m_config; NetInstallPage* m_widget; - CalamaresUtils::Locale::TranslatedString* m_sidebarLabel; // As it appears in the sidebar bool m_nextEnabled = false; }; diff --git a/src/modules/netinstall/PackageModel.cpp b/src/modules/netinstall/PackageModel.cpp index dad2207b2..d5bae1c89 100644 --- a/src/modules/netinstall/PackageModel.cpp +++ b/src/modules/netinstall/PackageModel.cpp @@ -1,27 +1,56 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017-2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageModel.h" +#include "utils/Logger.h" #include "utils/Variant.h" #include "utils/Yaml.h" +/// Recursive helper for setSelections() +static void +setSelections( const QStringList& selectNames, PackageTreeItem* item ) +{ + for ( int i = 0; i < item->childCount(); i++ ) + { + auto* child = item->child( i ); + setSelections( selectNames, child ); + } + if ( item->isGroup() && selectNames.contains( item->name() ) ) + { + item->setSelected( Qt::CheckState::Checked ); + } +} + +/** @brief Collects all the "source" values from @p groupList + * + * Iterates over @p groupList and returns all nonempty "source" + * values from the maps. + * + */ +static QStringList +collectSources( const QVariantList& groupList ) +{ + QStringList sources; + for ( const QVariant& group : groupList ) + { + QVariantMap groupMap = group.toMap(); + if ( !groupMap[ "source" ].toString().isEmpty() ) + { + sources.append( groupMap[ "source" ].toString() ); + } + } + + return sources; +} + PackageModel::PackageModel( QObject* parent ) : QAbstractItemModel( parent ) { @@ -178,6 +207,15 @@ PackageModel::headerData( int section, Qt::Orientation orientation, int role ) c return QVariant(); } +void +PackageModel::setSelections( const QStringList& selectNames ) +{ + if ( m_rootItem ) + { + ::setSelections( selectNames, m_rootItem ); + } +} + PackageTreeItem::List PackageModel::getPackages() const { @@ -232,33 +270,73 @@ PackageModel::setupModelData( const QVariantList& groupList, PackageTreeItem* pa continue; } - PackageTreeItem* item = new PackageTreeItem( groupMap, parent ); + PackageTreeItem* item = new PackageTreeItem( groupMap, PackageTreeItem::GroupTag { parent } ); if ( groupMap.contains( "selected" ) ) { item->setSelected( CalamaresUtils::getBool( groupMap, "selected", false ) ? Qt::Checked : Qt::Unchecked ); } if ( groupMap.contains( "packages" ) ) { - for ( const auto& packageName : groupMap.value( "packages" ).toStringList() ) + for ( const auto& packageName : groupMap.value( "packages" ).toList() ) { - item->appendChild( new PackageTreeItem( packageName, item ) ); + if ( packageName.type() == QVariant::String ) + { + item->appendChild( new PackageTreeItem( packageName.toString(), item ) ); + } + else + { + QVariantMap m = packageName.toMap(); + if ( !m.isEmpty() ) + { + item->appendChild( new PackageTreeItem( m, PackageTreeItem::PackageTag { item } ) ); + } + } + } + if ( !item->childCount() ) + { + cWarning() << "*packages* under" << item->name() << "is empty."; } } if ( groupMap.contains( "subgroups" ) ) { + bool haveWarned = false; + const auto& subgroupValue = groupMap.value( "subgroups" ); + if ( !subgroupValue.canConvert( QVariant::List ) ) + { + cWarning() << "*subgroups* under" << item->name() << "is not a list."; + haveWarned = true; + } + QVariantList subgroups = groupMap.value( "subgroups" ).toList(); if ( !subgroups.isEmpty() ) { setupModelData( subgroups, item ); // The children might be checked while the parent isn't (yet). // Children are added to their parent (below) without affecting - // the checked-state -- do it manually. - item->updateSelected(); + // the checked-state -- do it manually. Items with subgroups + // but no children have only hidden children -- those get + // handled specially. + if ( item->childCount() > 0 ) + { + item->updateSelected(); + } + } + else + { + if ( !haveWarned ) + { + cWarning() << "*subgroups* list under" << item->name() << "is empty."; + } } } if ( item->isHidden() ) { m_hiddenItems.append( item ); + if ( !item->isSelected() ) + { + cWarning() << "Item" << ( item->parentItem() ? item->parentItem()->name() : QString() ) << '.' + << item->name() << "is hidden, but not selected."; + } } else { @@ -271,9 +349,43 @@ PackageModel::setupModelData( const QVariantList& groupList, PackageTreeItem* pa void PackageModel::setupModelData( const QVariantList& l ) { - emit beginResetModel(); + beginResetModel(); delete m_rootItem; m_rootItem = new PackageTreeItem(); setupModelData( l, m_rootItem ); - emit endResetModel(); + endResetModel(); +} + +void +PackageModel::appendModelData( const QVariantList& groupList ) +{ + if ( m_rootItem ) + { + beginResetModel(); + + const QStringList sources = collectSources( groupList ); + + if ( !sources.isEmpty() ) + { + // Prune any existing data from the same source + QList< int > removeList; + for ( int i = 0; i < m_rootItem->childCount(); i++ ) + { + PackageTreeItem* child = m_rootItem->child( i ); + if ( sources.contains( child->source() ) ) + { + removeList.insert( 0, i ); + } + } + for ( const int& item : qAsConst( removeList ) ) + { + m_rootItem->removeChild( item ); + } + } + + // Add the new data to the model + setupModelData( groupList, m_rootItem ); + + endResetModel(); + } } diff --git a/src/modules/netinstall/PackageModel.h b/src/modules/netinstall/PackageModel.h index b4e8fc102..cc8668b2f 100644 --- a/src/modules/netinstall/PackageModel.h +++ b/src/modules/netinstall/PackageModel.h @@ -1,21 +1,11 @@ - -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGEMODEL_H @@ -63,9 +53,33 @@ public: int rowCount( const QModelIndex& parent = QModelIndex() ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; + /** @brief Sets the checked flag on matching groups in the tree + * + * Recursively traverses the tree pointed to by m_rootItem and + * checks if a group name matches any of the items in @p selectNames. + * If a match is found, set check the box for that group and it's children. + * + * Individual packages will not be matched. + * + */ + void setSelections( const QStringList& selectNames ); + PackageTreeItem::List getPackages() const; PackageTreeItem::List getItemPackages( PackageTreeItem* item ) const; + /** @brief Appends groups to the tree + * + * Uses the data from @p groupList to add elements to the + * existing tree that m_rootItem points to. If m_rootItem + * is not valid, it does nothing + * + * Before adding anything to the model, it ensures that there + * is no existing data from the same source. If there is, that + * data is pruned first + * + */ + void appendModelData( const QVariantList& groupList ); + private: friend class ItemTests; diff --git a/src/modules/netinstall/PackageTreeItem.cpp b/src/modules/netinstall/PackageTreeItem.cpp index edc89c536..5841606c4 100644 --- a/src/modules/netinstall/PackageTreeItem.cpp +++ b/src/modules/netinstall/PackageTreeItem.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageTreeItem.h" @@ -61,15 +52,27 @@ PackageTreeItem::PackageTreeItem( const QString& packageName, PackageTreeItem* p { } -PackageTreeItem::PackageTreeItem( const QVariantMap& groupData, PackageTreeItem* parent ) - : m_parentItem( parent ) +PackageTreeItem::PackageTreeItem( const QVariantMap& groupData, PackageTag&& parent ) + : m_parentItem( parent.parent ) + , m_packageName( CalamaresUtils::getString( groupData, "name" ) ) + , m_selected( parentCheckState( parent.parent ) ) + , m_description( CalamaresUtils::getString( groupData, "description" ) ) + , m_isGroup( false ) + , m_isCritical( parent.parent ? parent.parent->isCritical() : false ) + , m_showReadOnly( parent.parent ? parent.parent->isImmutable() : false ) +{ +} + +PackageTreeItem::PackageTreeItem( const QVariantMap& groupData, GroupTag&& parent ) + : m_parentItem( parent.parent ) , m_name( CalamaresUtils::getString( groupData, "name" ) ) - , m_selected( parentCheckState( parent ) ) + , m_selected( parentCheckState( parent.parent ) ) , m_description( CalamaresUtils::getString( groupData, "description" ) ) , m_preScript( CalamaresUtils::getString( groupData, "pre-install" ) ) , m_postScript( CalamaresUtils::getString( groupData, "post-install" ) ) + , m_source( CalamaresUtils::getString( groupData, "source" ) ) , m_isGroup( true ) - , m_isCritical( parentCriticality( groupData, parent ) ) + , m_isCritical( parentCriticality( groupData, parent.parent ) ) , m_isHidden( CalamaresUtils::getBool( groupData, "hidden", false ) ) , m_showReadOnly( CalamaresUtils::getBool( groupData, "immutable", false ) ) , m_startExpanded( CalamaresUtils::getBool( groupData, "expanded", false ) ) @@ -120,27 +123,16 @@ PackageTreeItem::row() const QVariant PackageTreeItem::data( int column ) const { - if ( isPackage() ) // packages have a packagename, groups don't + switch ( column ) { - switch ( column ) - { - case 0: - return QVariant( packageName() ); - default: - return QVariant(); - } - } - else - { - switch ( column ) // group - { - case 0: - return QVariant( name() ); - case 1: - return QVariant( description() ); - default: - return QVariant(); - } + case 0: + // packages have a packagename, groups don't + return QVariant( isPackage() ? packageName() : name() ); + case 1: + // packages often have a blank description + return QVariant( description() ); + default: + return QVariant(); } } @@ -257,6 +249,19 @@ PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected ) } } +void +PackageTreeItem::removeChild( int row ) +{ + if ( 0 <= row && row < m_childItems.count() ) + { + m_childItems.removeAt( row ); + } + else + { + cWarning() << "Attempt to remove invalid child in removeChild() at row " << row; + } +} + int PackageTreeItem::type() const { diff --git a/src/modules/netinstall/PackageTreeItem.h b/src/modules/netinstall/PackageTreeItem.h index d443bcdc6..2a0fca83e 100644 --- a/src/modules/netinstall/PackageTreeItem.h +++ b/src/modules/netinstall/PackageTreeItem.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright (c) 2017, Kyle Robbertze - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Kyle Robbertze + * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGETREEITEM_H @@ -29,10 +20,23 @@ class PackageTreeItem : public QStandardItem public: using List = QList< PackageTreeItem* >; + ///@brief A tag class to distinguish package-from-map from group-from-map + struct PackageTag + { + PackageTreeItem* parent; + }; + ///@brief A tag class to distinguish group-from-map from package-from-map + struct GroupTag + { + PackageTreeItem* parent; + }; + ///@brief A package (individual package) explicit PackageTreeItem( const QString& packageName, PackageTreeItem* parent = nullptr ); + ///@brief A package (individual package with description) + explicit PackageTreeItem( const QVariantMap& packageData, PackageTag&& parent ); ///@brief A group (sub-items and sub-groups are ignored) - explicit PackageTreeItem( const QVariantMap& groupData, PackageTreeItem* parent = nullptr ); + explicit PackageTreeItem( const QVariantMap& groupData, GroupTag&& parent ); ///@brief A root item, always selected, named "" explicit PackageTreeItem(); ~PackageTreeItem() override; @@ -52,6 +56,7 @@ public: QString description() const { return m_description; } QString preScript() const { return m_preScript; } QString postScript() const { return m_postScript; } + QString source() const { return m_source; } /** @brief Is this item a group-item? * @@ -120,6 +125,8 @@ public: void setSelected( Qt::CheckState isSelected ); void setChildrenSelected( Qt::CheckState isSelected ); + void removeChild( int row ); + /** @brief Update selectedness based on the children's states * * This only makes sense for groups, which might have packages @@ -153,6 +160,7 @@ private: QString m_description; QString m_preScript; QString m_postScript; + QString m_source; bool m_isGroup = false; bool m_isCritical = false; bool m_isHidden = false; diff --git a/src/modules/netinstall/README.md b/src/modules/netinstall/README.md deleted file mode 100644 index cb6159d95..000000000 --- a/src/modules/netinstall/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# Netinstall module - -The netinstall module allows distribution maintainers to ship minimal ISOs with -only a basic set of preinstalled packages. At installation time, the user is -presented with the choice to install groups of packages from a predefined list. - -Calamares will then use the *packages* module to install the packages. - - -## Module Configuration - -The `netinstall.conf` file is self-describing, and at the very -least should contain a *groupsUrl* key: - -``` - ---- - groupsUrl: -``` - -The URL must point to a YAML file, the *groups* file. See below for -the format of that groups file. The URL may be a local file (e.g. -scheme `file:///`) or a regular HTTP(s) URL. The URL has one special -case: the literal string `local` is used to indicate that the groups -data is contained in the `netinstall.conf` file itself. - - -## Groups Configuration - -Here is a short example of how the YAML file should look. - -``` - - name: "Group name" - description: "Description of the group" - packages: - - lsb-release - - avahi - - grub - - name: "Second group name" - ... -``` - - -The file is composed of a list of entries, each describing one group. The -keys *name*, *description* and *packages* are required for each group. - -More keys (per group) are supported: - - - *hidden*: if true, do not show the group on the page. Defaults to false. - - *selected*: if true, display the group as selected. Defaults to false. - - *critical*: if true, make the installation process fail if installing - any of the packages in the group fails. Otherwise, just log a warning. - Defaults to false. If not set in a subgroup (see below), inherits from - the parent group. - - *immutable*: if true, the state of the group (and all its subgroups) - cannot be changed; it really only makes sense in combination - with *selected* set to true. This only affects the user-interface. - - *expanded*: if true, the group is shown in an expanded form (that is, - not-collapsed) in the treeview on start. This only affects the user- - interface. Only top-level groups are show expanded-initially. - - *immutable*: if true, the group cannot be changed (packages selected - or deselected) and no checkboxes are shown for the group. - - *subgroups*: if present this follows the same structure as the top level - of the YAML file, allowing there to be sub-groups of packages to an - arbitary depth - - *pre-install*: an optional command to run within the new system before - the group's packages are installed. It will run before each package in - the group is installed. - - *post-install*: an optional command to run within the new system after - the group's packages are installed. It will run after each package in - the group is installed. - -If you set both *hidden* and *selected* for a group, you are basically creating -a "default" group of packages which will always be installed in the user's -system. - -> The note below applies to Calamares up-to-and-including 3.2.13, but will -> change in a later release. - -The *pre-install* and *post-install* commands are **not** passed to -a shell; see the **packages** module configuration (i.e. `packages.conf`) -for details. To use a full shell pipeline, call the shell explicitly. - - - -## Overall Configuration - -Here is the set of instructions to have the module work in your Calamares. - -First, if the module is used, we need to require a working Internet connection, -otherwise the module will be unable to fetch the package groups and to perform -the installation. Requirements for the Calamares instance are configured in the -`welcome.conf` file (configuration for the **welcome** module). Make sure -*internet* is listed under the *required* checks. - -In the `settings.conf` file, decide where the **netinstall** page should be -displayed. I put it just after the **welcome** page, but any position between -that and just before **partition** should make no difference. - -If not present, add the **packages** job in the *exec* list. This is the job -that calls the package manager to install packages. Make sure it is configured -to use the correct package manager for your distribution; this is configured in -`packages.conf`. - -The *exec* list in `settings.conf` should contain the following items in -order (it's ok for other jobs to be listed inbetween them, though): - -``` - - unpackfs - - networkcfg - - packages -``` - -**unpackfs** creates the chroot where the installation is performed, and unpacks -the root image with the filesystem structure; **networkcfg** set ups a working -network in the chroot; and finally **packages** can install packages in the -chroot. - -## Common issues - -If launching the package manager command returns you negative exit statuses and -nothing is actually invoked, this is likely an error in the setup of the chroot; -check that the parameter **rootMountPoint** is set to the correct value in the -Calamares configuration. - -If the command is run, but exits with error, check that the network is -working in the chroot. Make sure `/etc/resolv.conf` exists and that -it's not empty. diff --git a/src/modules/netinstall/Tests.cpp b/src/modules/netinstall/Tests.cpp index cfaf20efa..6b1db020c 100644 --- a/src/modules/netinstall/Tests.cpp +++ b/src/modules/netinstall/Tests.cpp @@ -1,28 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ +#include "Config.h" #include "PackageModel.h" #include "PackageTreeItem.h" #include "utils/Logger.h" +#include "utils/NamedEnum.h" #include "utils/Variant.h" #include "utils/Yaml.h" +#include + #include class ItemTests : public QObject @@ -30,7 +25,7 @@ class ItemTests : public QObject Q_OBJECT public: ItemTests(); - virtual ~ItemTests() {} + ~ItemTests() override {} private: void checkAllSelected( PackageTreeItem* p ); @@ -41,11 +36,17 @@ private Q_SLOTS: void initTestCase(); void testRoot(); + void testPackage(); + void testExtendedPackage(); + void testGroup(); void testCompare(); void testModel(); void testExampleFiles(); + + void testUrlFallback_data(); + void testUrlFallback(); }; ItemTests::ItemTests() {} @@ -77,6 +78,7 @@ ItemTests::testPackage() QCOMPARE( p.isSelected(), Qt::Unchecked ); QCOMPARE( p.packageName(), QStringLiteral( "bash" ) ); QVERIFY( p.name().isEmpty() ); // not a group + QVERIFY( p.description().isEmpty() ); QCOMPARE( p.parentItem(), nullptr ); QCOMPARE( p.childCount(), 0 ); QVERIFY( !p.isHidden() ); @@ -126,6 +128,33 @@ static const char doc_with_expanded[] = // *INDENT-ON* // clang-format on +void +ItemTests::testExtendedPackage() +{ + YAML::Node yamldoc = YAML::Load( doc ); + QVariantList yamlContents = CalamaresUtils::yamlSequenceToVariant( yamldoc ); + + QCOMPARE( yamlContents.length(), 1 ); + + // Kind of derpy, but we can treat a group as if it is a package + // because the keys name and description are the same + PackageTreeItem p( yamlContents[ 0 ].toMap(), PackageTreeItem::PackageTag { nullptr } ); + + QCOMPARE( p.isSelected(), Qt::Unchecked ); + QCOMPARE( p.packageName(), QStringLiteral( "CCR" ) ); + QVERIFY( p.name().isEmpty() ); // not a group + QVERIFY( !p.description().isEmpty() ); // because it is set + QVERIFY( p.description().startsWith( QStringLiteral( "Tools for the Chakra" ) ) ); + QCOMPARE( p.parentItem(), nullptr ); + QCOMPARE( p.childCount(), 0 ); + QVERIFY( !p.isHidden() ); + QVERIFY( !p.isCritical() ); + QVERIFY( !p.isGroup() ); + QVERIFY( p.isPackage() ); + QVERIFY( p == p ); +} + + void ItemTests::testGroup() { @@ -134,7 +163,7 @@ ItemTests::testGroup() QCOMPARE( yamlContents.length(), 1 ); - PackageTreeItem p( yamlContents[ 0 ].toMap(), nullptr ); + PackageTreeItem p( yamlContents[ 0 ].toMap(), PackageTreeItem::GroupTag { nullptr } ); QCOMPARE( p.name(), QStringLiteral( "CCR" ) ); QVERIFY( p.packageName().isEmpty() ); QVERIFY( p.description().startsWith( QStringLiteral( "Tools " ) ) ); @@ -147,7 +176,7 @@ ItemTests::testGroup() QVERIFY( !p.isPackage() ); QVERIFY( p == p ); - PackageTreeItem c( "zsh", nullptr ); + PackageTreeItem c( "zsh", nullptr ); // Single string, package QVERIFY( p != c ); } @@ -184,15 +213,17 @@ ItemTests::testCompare() QVariantList yamlContents = CalamaresUtils::yamlSequenceToVariant( yamldoc ); QCOMPARE( yamlContents.length(), 1 ); - PackageTreeItem p3( yamlContents[ 0 ].toMap(), nullptr ); + PackageTreeItem p3( yamlContents[ 0 ].toMap(), PackageTreeItem::GroupTag { nullptr } ); QVERIFY( p3 == p3 ); QVERIFY( p3 != p1 ); QVERIFY( p1 != p3 ); QCOMPARE( p3.childCount(), 0 ); // Doesn't load the packages: list - PackageTreeItem p4( CalamaresUtils::yamlSequenceToVariant( YAML::Load( doc ) )[ 0 ].toMap(), nullptr ); + PackageTreeItem p4( CalamaresUtils::yamlSequenceToVariant( YAML::Load( doc ) )[ 0 ].toMap(), + PackageTreeItem::GroupTag { nullptr } ); QVERIFY( p3 == p4 ); - PackageTreeItem p5( CalamaresUtils::yamlSequenceToVariant( YAML::Load( doc_no_packages ) )[ 0 ].toMap(), nullptr ); + PackageTreeItem p5( CalamaresUtils::yamlSequenceToVariant( YAML::Load( doc_no_packages ) )[ 0 ].toMap(), + PackageTreeItem::GroupTag { nullptr } ); QVERIFY( p3 == p5 ); } @@ -302,6 +333,93 @@ ItemTests::testExampleFiles() } } +void +ItemTests::testUrlFallback_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< int >( "status" ); + QTest::addColumn< int >( "count" ); + + using S = Config::Status; + + QTest::newRow( "bad" ) << "1a-single-bad.conf" << smash( S::FailedBadConfiguration ) << 0; + QTest::newRow( "empty" ) << "1a-single-empty.conf" << smash( S::FailedNoData ) << 0; + QTest::newRow( "error" ) << "1a-single-error.conf" << smash( S::FailedBadData ) << 0; + QTest::newRow( "two" ) << "1b-single-small.conf" << smash( S::Ok ) << 2; + QTest::newRow( "five" ) << "1b-single-large.conf" << smash( S::Ok ) << 5; + QTest::newRow( "none" ) << "1c-none.conf" << smash( S::FailedNoData ) << 0; + QTest::newRow( "unset" ) << "1c-unset.conf" << smash( S::FailedNoData ) << 0; + // Finds small, then stops + QTest::newRow( "fallback-small" ) << "1d-fallback-small.conf" << smash( S::Ok ) << 2; + // Finds large, then stops + QTest::newRow( "fallback-large" ) << "1d-fallback-large.conf" << smash( S::Ok ) << 5; + // Finds empty, finds small + QTest::newRow( "fallback-mixed" ) << "1d-fallback-mixed.conf" << smash( S::Ok ) << 2; + // Finds empty, then bad + QTest::newRow( "fallback-bad" ) << "1d-fallback-bad.conf" << smash( S::FailedBadConfiguration ) << 0; +} + +void +ItemTests::testUrlFallback() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + QFETCH( QString, filename ); + QFETCH( int, status ); + QFETCH( int, count ); + + cDebug() << "Loading" << filename; + + // BUILD_AS_TEST is the source-directory path + QString testdir = QString( "%1/tests" ).arg( BUILD_AS_TEST ); + QFile fi( QString( "%1/%2" ).arg( testdir, filename ) ); + QVERIFY( fi.exists() ); + + Config c; + + QFile yamlFile( fi.fileName() ); + if ( yamlFile.exists() && yamlFile.open( QFile::ReadOnly | QFile::Text ) ) + { + QString ba( yamlFile.readAll() ); + QVERIFY( ba.length() > 0 ); + QHash< QString, QString > replace; + replace.insert( "TESTDIR", testdir ); + QString correctedDocument = KMacroExpander::expandMacros( ba, replace, '$' ); + + try + { + YAML::Node yamldoc = YAML::Load( correctedDocument.toUtf8() ); + auto map = CalamaresUtils::yamlToVariant( yamldoc ).toMap(); + QVERIFY( map.count() > 0 ); + c.setConfigurationMap( map ); + } + catch ( YAML::Exception& ) + { + bool badYaml = true; + QVERIFY( !badYaml ); + } + } + else + { + QCOMPARE( QStringLiteral( "not found" ), fi.fileName() ); + } + + // Each of the configs sets required to **true**, which is not the default + QVERIFY( c.required() ); + + // Now give the loader time to complete + QEventLoop loop; + connect( &c, &Config::statusReady, &loop, &QEventLoop::quit ); + QSignalSpy spy( &c, &Config::statusReady ); + QTimer::singleShot( std::chrono::seconds( 1 ), &loop, &QEventLoop::quit ); + loop.exec(); + + // Check it didn't time out + QCOMPARE( spy.count(), 1 ); + // Check YAML-loading results + QCOMPARE( smash( c.statusCode() ), status ); + QCOMPARE( c.model()->rowCount(), count ); +} + QTEST_GUILESS_MAIN( ItemTests ) diff --git a/src/modules/netinstall/groupstreeview.cpp b/src/modules/netinstall/groupstreeview.cpp new file mode 100644 index 000000000..4e5ab8c8d --- /dev/null +++ b/src/modules/netinstall/groupstreeview.cpp @@ -0,0 +1,31 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2022 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ +#include "groupstreeview.h" + +#include "utils/Logger.h" + +#include + +void +GroupsTreeView::drawBranches( QPainter* painter, const QRect& rect, const QModelIndex& index ) const +{ + QTreeView::drawBranches( painter, rect, index ); + + // Empty names are handled specially: don't draw them as items, + // so the "branch" seems to just pass them by. + const QString s = index.data().toString(); + if ( s.isEmpty() ) + { + QStyleOptionViewItem opt = viewOptions(); + opt.state = QStyle::State_Sibling; + opt.rect = QRect( !isRightToLeft() ? rect.left() : rect.right() + 1, rect.top(), indentation(), rect.height() ); + painter->eraseRect( opt.rect ); + style()->drawPrimitive( QStyle::PE_IndicatorBranch, &opt, painter, this ); + } +} diff --git a/src/modules/netinstall/groupstreeview.h b/src/modules/netinstall/groupstreeview.h new file mode 100644 index 000000000..82f8bc031 --- /dev/null +++ b/src/modules/netinstall/groupstreeview.h @@ -0,0 +1,18 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2022 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ +#include + +class GroupsTreeView : public QTreeView +{ +public: + using QTreeView::QTreeView; + +protected: + virtual void drawBranches( QPainter* painter, const QRect& rect, const QModelIndex& index ) const override; +}; diff --git a/src/modules/netinstall/netinstall.conf b/src/modules/netinstall/netinstall.conf index 5368a9edf..d38c0b040 100644 --- a/src/modules/netinstall/netinstall.conf +++ b/src/modules/netinstall/netinstall.conf @@ -1,22 +1,86 @@ ---- -# This is the URL that is retrieved to get the netinstall groups-and-packages -# data (which should be in the format described in netinstall.yaml), e.g.: -# groupsUrl: http://example.org/netinstall.php -# or it can be a locally installed file: -# groupsUrl: file:///usr/share/calamares/netinstall.yaml +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # +### Netinstall module +# +# The netinstall module allows distribution maintainers to ship minimal ISOs +# with only a basic set of preinstalled packages. At installation time, the +# user is presented with the choice to install groups of packages from a +# predefined list. +# +# Calamares will then use the *packages* module to install the packages. +# Without a *packages* module in the exec phase somewhere **after** +# this netinstall, nothing will actually get installed. The packages +# module must be correctly configured **and** the package manager must +# be runnable from within the installed system at the point where it +# is invoked, otherwise you'll get nothing. +# +# There are two basic deployment schemes: +# - static package lists; the packages do not change for this release. +# In this case, the package list file may be on the ISO-image itself +# as a separate file, **or** included in this configuration file. +# Either will do; separate file is easier to update independently +# of the Calamares configuration, while merged configurations use +# fewer files overall and are closer to self-documenting. +# - online package lists; the package list is fetched from a remote +# URL and handled otherwise like a static list. This can be useful +# if the package list needs updating during the lifetime of an ISO- +# image, e.g. packages are added or renamed. +# +# There is only one required key for this module, *groupsUrl*. +# +# This module supports multiple instances through the *label* key, +# which allows you to distinguish them in the UI. +--- +# The *groupsUrl* determines where the data for the netinstall groups-and- +# packages comes from. The value of the key may be: +# +# - a single string (this is treated as a list with just that string in it) +# - a list of strings +# +# Each string is treated as a URL (see below for special cases. The +# list is examined **in order** and each URL is tried in turn. The +# first URL to load successfully -- even if it yields 0 packages -- +# ends the process. This allows using a network URL and a (fallback) +# local URL for package lists, or for using multiple mirrors of +# netinstall data. +# +# The URL must point to a YAML file that follows the format described +# below at the key *groups* -- except for the special case URL "local". # Note that the contents of the groups file is the **important** # part of the configuration of this module. It specifies what -# the user may select and what commands are to be run. +# groups and packages the user may select (and so what commands are to +# be run to install them). # -# The format of the groups file is documented in `README.md`. +# The format of the groups file is the same as the format of the +# *groups* key described below, **except** that a stand-alone +# groups file does not have to have the top-level *groups* key. +# (It **may** have one, though, for instance when you copy +# this configuration file to `netinstall.yaml` and key *groups* +# must have a list-of-groups as value; if the file does not have +# a top-level key *groups*, then the file must contain only a list of groups. # -# As a special case, setting *groupsUrl* to the literal string -# `local` means that the data is obtained from **this** config -# file, under the key *groups*. +# Each item in the list *groupsUrl* may be: +# - A remote URL like `http://example.org/netinstall.php` +# - A local file URL like `file:///usr/share/calamares/netinstall.yaml` +# - The special-case literal string `local` +# +# Non-special case URLs are loaded as YAML; if the load succeeds, then +# they are interpreted like the *groups* key below. The special case +# `local` loads the data directly from **this** file. # groupsUrl: local +# Alternate form: +# groupsUrl: [ local ] + +# Net-based package list, with fallback to local file +# groupsUrl: +# - http://example.com/calamares/netinstall.yaml +# - file:///etc/calamares/modules/netinstall.yaml + + + # If the installation can proceed without netinstall (e.g. the Live CD # can create a working installed system, but netinstall is preferred # to bring it up-to-date or extend functionality) leave this set to @@ -24,41 +88,141 @@ groupsUrl: local # # This only has an effect if the netinstall data cannot be retrieved, # or is corrupt: having "required" set, means the install cannot proceed. +# For local or file: type *groupsUrl* settings, this setting is not +# really meaningful. required: false # To support multiple instances of this module, # some strings are configurable and translatable here. -# - *sidebar* This is the name of the module in the progress-tree / sidebar +# Sub-keys under *label* are used for the user interface. +# - *sidebar* This is the name of the module in the progress-tree / sidebar # in Calamares. -# - *title* This is displayed above the list of packages. +# - *title* This is displayed above the list of packages. # If no *sidebar* values are provided, defaults to "Package selection" # and existing translations. If no *title* values are provided, no string # is displayed. # -# The following strings are already known to Calamares and can be +# Translations are handled through `[ll]` notation, much like in +# `.desktop` files. The string associated with `key[ll]` is used for +# *key* when when the language *ll* (language-code, like *nl* or *en_GB* +# or *ja*) is used. +# +# The following strings are **already** known to Calamares and can be # listed here in *untranslated* form (e.g. as value of *sidebar*) # without bothering with the translations: they are picked up from # the regular translation framework: -# - "Package selection" -# - "Office software" -# - "Office package" -# - "Browser software" -# - "Browser package" -# - "Web browser" +# - "Package selection" +# - "Office software" +# - "Office package" +# - "Browser software" +# - "Browser package" +# - "Web browser" +# - "Kernel" +# - "Services" +# - "Login" +# - "Desktop" +# - "Applications" +# - "Communication" +# - "Development" +# - "Office" +# - "Multimedia" +# - "Internet" +# - "Theming" +# - "Gaming" +# - "Utilities" +# Other strings should follow the translations format. label: sidebar: "Package selection" # sidebar[nl]: "Pakketkeuze" + # sidebar[en_GB]: "Package choice" + # sidebar[ja]: "知りません" # "I don't know" # title: "Office Package" # title[nl]: "Kantoorsoftware" # If, and only if, *groupsUrl* is set to the literal string `local`, # groups data is read from this file. The value of *groups* must be -# a list, with the same format as the regular `netinstall.yaml` file. -# See the `README.md` file in the *netinstall* module for documentation -# on the format of groups data. +# a list. Each item in the list is a group (of packages, or subgroups, +# or both). A standalone groups file contains just the list, +# (without the top-level *groups* key, or just the top-level *groups* +# key and with the list as its value, like in this file). # -# This is recommended only for small static package lists. +# Using `local` is recommended only for small static package lists. +# Here it is used for documentation purposes. +# +# +### Groups Format +# +# Each item in the list describes one group. The following keys are +# required for each group: +# +# - *name* of the group; short and human-readable. Shown in the first +# column of the UI. +# - *description* of the group; longer and human-readable. Shown in the +# second column of the UI. This is one of the things that visually +# distinguishes groups (with descriptions) from packages (without). +# - *packages*, a list of packages that belong to this group. +# The items of the *packages* list are actual package names +# as passed to the package manager (e.g. `qt5-creator-dev`). +# This list may be empty (e.g. if your group contains only +# subgroups). This key isn't **really** required, either -- +# one of *subgroups* or *packages* is. +# +# The following keys are **optional** for a group: +# +# - *hidden*: if true, do not show the group on the page. Defaults to false. +# - *selected*: if true, display the group as selected. Defaults to the +# parent group's value, if there is a parent group; top-level groups +# are set to true by default. +# - *critical*: if true, make the installation process fail if installing +# any of the packages in the group fails. Otherwise, just log a warning. +# Defaults to false. If not set in a subgroup (see below), inherits from +# the parent group. +# - *immutable*: if true, the state of the group (and all its subgroups) +# cannot be changed; no packages can be selected or deselected. No +# checkboxes are show for the group. Setting *immutable* to true +# really only makes sense in combination with *selected* set to true, +# so that the packages will be installed. (Setting a group to immutable +# can be seen as removing it from the user-interface.) +# - *expanded*: if true, the group is shown in an expanded form (that is, +# not-collapsed) in the treeview on start. This only affects the user- +# interface. Only top-level groups are show expanded-initially. +# - *subgroups*: if present this follows the same structure as the top level +# groups, allowing sub-groups of packages to an arbitary depth. +# - *pre-install*: an optional command to run within the new system before +# the group's packages are installed. It will run before **each** package in +# the group is installed. +# - *post-install*: an optional command to run within the new system after +# the group's packages are installed. It will run after **each** package in +# the group is installed. +# +# If you set both *hidden* and *selected* for a top-level group, you are +# creating a "default" group of packages which will always be installed +# in the user's system. Hidden selected subgroups are installed if their +# parent is selected. Setting *hidden* to true without *selected*, or with +# *selected* set to false, is kind of pointless and will generate a warning. +# +# The *pre-install* and *post-install* commands are **not** passed to +# a shell; see the **packages** module configuration (i.e. `packages.conf`) +# for details. To use a full shell pipeline, call the shell explicitly. +# +# Non-critical groups are installed by calling the package manager +# individually, once for each package (and ignoring errors), while +# critical packages are installed in one single call to the package +# manager (and errors cause the installation to terminate). +# +# +# +# The *groups* key below contains some common patterns for packages +# and sub-groups, with documentation. + + groups: + # This group is hidden, so the name and description are not really + # important. Since it is selected, these packages will be installed. + # It's non-critical, so they are installed one-by-one. + # + # This is a good approach for something you want up-to-date installed + # in the target system every time. - name: "Default" description: "Default group" hidden: true @@ -67,6 +231,15 @@ groups: packages: - base - chakra-live-skel + # The Shells group contains only subgroups, no packages itself. + # The *critical* value is set for the subgroups that do not + # override it; *selected* is set to false but because one of + # the subgroups sets *selected* to true, the overall state of + # **this** group is partly-selected. + # + # Each of the sub-groups lists a bunch of packages that can + # be individually selected, so a user can pick (for instance) + # just one of the ZSH packages if they like. - name: "Shells" description: "Shells" hidden: false @@ -85,6 +258,11 @@ groups: - zsh - zsh-completion - zsh-extensions + # The kernel group has no checkbox, because it is immutable. + # It can be (manually) expanded, and the packages inside it + # will be shown, also without checkboxes. This is a way to + # inform users that something will always be installed, + # sort of like a hidden+selected group but visible. - name: "Kernel" description: "Kernel bits" hidden: false @@ -95,6 +273,7 @@ groups: - kernel - kernel-debugsym - kernel-nvidia + # *selected* defaults to true for top-level - name: Communications description: "Communications Software" packages: @@ -102,3 +281,64 @@ groups: - konversation - nheko - quaternion + # Setting *selected* is supported. Here we also show off "rich" + # packages: ones with a package-name (for the package-manager) + # and a description (for the human). + - name: Editors + description: "Editing" + selected: false + packages: + - vi + - emacs + - nano + - name: kate-git + description: Kate (unstable) + - name: kate + description: KDE's text editor + # The "bare" package names can be intimidating, so you can use subgroups + # to provide human-readable names while hiding the packages themselves. + # This also allows you you group related packages -- suppose you feel + # that KDevelop should be installed always with PHP and Python support, + # but that support is split into multiple packages. + # + # So this subgroup (IDE) contains subgroups, one for each "package" + # we want to install. Each of those subgroups (Emacs, KDevelop) + # in turn contains **one** bogus subgroup, which then has the list + # of relevant packages. This extra-level-of-subgrouping allows us + # to list packages, while giving human-readable names. + # + # The name of the internal subgroup doesn't matter -- it is hidden + # from the user -- so we can give them all bogus names and + # descriptions, even the same name. Here, we use "Bogus". You + # can re-use the subgroup name, it doesn't really matter. + # + # Each internal subgroup is set to *hidden*, so it does not show up + # as an entry in the list, and it is set to *selected*, + # so that if you select its parent subgroup, the packages from + # the subgroup are selected with it and get installed. + - name: IDE + description: "Development Environment" + selected: false + subgroups: + - name: Emacs + description: LISP environment and editor + subgroups: + - name: Bogus + description: Bogus + hidden: true + selected: true + packages: + - emacs + - name: KDevelop + description: KDE's C++, PHP and Python environment + subgroups: + - name: Bogus + description: Bogus + hidden: true + selected: true + packages: + - kdevelop + - kdevelop-dev + - kdev-php + - kdev-python + diff --git a/src/modules/netinstall/netinstall.schema.yaml b/src/modules/netinstall/netinstall.schema.yaml new file mode 100644 index 000000000..05ab4cd08 --- /dev/null +++ b/src/modules/netinstall/netinstall.schema.yaml @@ -0,0 +1,89 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-FileContributor: benne-dee ( worked on groups schema ) +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/draft-07/schema# +$id: https://calamares.io/schemas/netinstall +definitions: + package: + $id: '#definitions/package' + oneOf: + - + type: string + description: bare package - actual package name as passed to the package manager + (e.g. `qt5-creator-dev`). + - + type: object + description: rich package - one with a package-name (for the package-manager) and + a description (for the human). + properties: + name: { type: string } + description: { type: string } + group: + $id: '#definitions/group' + type: object + description: Longer discussion in `netinstall.conf` file under 'Groups Format' + properties: + name: { type: string } + description: { type: string } + packages: + type: array + items: { $ref: '#definitions/package' } + hidden: { type: boolean, default: false } + selected: { type: boolean } + critical: { type: boolean, default: false } + immutable: { type: boolean } + expanded: { type: boolean } + subgroups: + type: array + items: { $ref: '#definitions/group' } + pre-install: + type: string + description: an optional command to run within the new system before the group's + packages are installed. It will run before **each** package in the group + is installed. + post-install: + type: string + description: an optional command to run within the new system after the group's + packages are installed. It will run after **each** package in the group + is installed. + required: [name, description] # Always required, at any level in the subgroups hirearchy + if: + properties: + subgroups: + maxItems: 0 + then: + required: [name, description, packages] # bottom-most (sub)group requires some package (otherwise, why bother?) + # This should validate `netinstall.yaml` also. + groups: + $id: '#definitions/groups' + type: array + items: { $ref: '#definitions/group' } + +oneOf: +- # netinstall.conf + type: object + description: netinstall.conf schema + additionalProperties: false + properties: + groupsUrl: { type: string } + required: { type: boolean, default: false } + label: # Translatable labels + type: object + additionalProperties: true + properties: + sidebar: { type: string } + title: { type: string } + groups: { $ref: '#definitions/groups' } + required: [ groupsUrl ] + +- # Groups file with top level *groups* key + type: object + description: Groups file with top level *groups* key + additionalProperties: false + properties: + groups: { $ref: '#definitions/groups' } + required: [ groups ] + +- # Groups file bare + { $ref: '#definitions/groups' } diff --git a/src/modules/netinstall/netinstall.yaml b/src/modules/netinstall/netinstall.yaml index e00f06c73..e55bc1b24 100644 --- a/src/modules/netinstall/netinstall.yaml +++ b/src/modules/netinstall/netinstall.yaml @@ -1,7 +1,18 @@ # Example configuration with groups and packages, taken from Chakra Linux. # -# This example is rather limited. See `README.md` for full documentation -# on the configuration format. +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# This example is rather limited. See `netinstall.conf` for full documentation +# on the configuration format. The module configuration file `netinstall.conf` +# **may** contain the package-list, but that is only useful for static +# package-lists. If you are updating the package lists or changing the package +# offerings, an online `netinstall.yaml` is the way to go; or you can put the +# `netinstall.yaml` on the installation media and modify that, while keeping +# your Calamares configuration constant. +# +# Which approach works depends on what you want to offer and how your +# ISO-image toolchain works. - name: "Default" description: "Default group" hidden: true diff --git a/src/modules/netinstall/page_netinst.ui b/src/modules/netinstall/page_netinst.ui index 32c11ec15..dd87ef7c4 100644 --- a/src/modules/netinstall/page_netinst.ui +++ b/src/modules/netinstall/page_netinst.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2016 shainer <syn.shainer@gmail.com> +SPDX-License-Identifier: GPL-3.0-or-later + Page_NetInst @@ -32,13 +36,13 @@ true - + 0 0 981 - 407 + 410 @@ -59,6 +63,13 @@ + + + GroupsTreeView + QTreeView +
groupstreeview.h
+
+
diff --git a/src/modules/netinstall/tests/1a-single-bad.conf b/src/modules/netinstall/tests/1a-single-bad.conf new file mode 100644 index 000000000..c08d3870c --- /dev/null +++ b/src/modules/netinstall/tests/1a-single-bad.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/bad.yaml diff --git a/src/modules/netinstall/tests/1a-single-empty.conf b/src/modules/netinstall/tests/1a-single-empty.conf new file mode 100644 index 000000000..2444a0435 --- /dev/null +++ b/src/modules/netinstall/tests/1a-single-empty.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-empty.yaml diff --git a/src/modules/netinstall/tests/1a-single-error.conf b/src/modules/netinstall/tests/1a-single-error.conf new file mode 100644 index 000000000..a602b17e1 --- /dev/null +++ b/src/modules/netinstall/tests/1a-single-error.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-error.yaml diff --git a/src/modules/netinstall/tests/1b-single-large.conf b/src/modules/netinstall/tests/1b-single-large.conf new file mode 100644 index 000000000..eee67e664 --- /dev/null +++ b/src/modules/netinstall/tests/1b-single-large.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-large.yaml diff --git a/src/modules/netinstall/tests/1b-single-small.conf b/src/modules/netinstall/tests/1b-single-small.conf new file mode 100644 index 000000000..2de9b4db2 --- /dev/null +++ b/src/modules/netinstall/tests/1b-single-small.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-small.yaml diff --git a/src/modules/netinstall/tests/1c-none.conf b/src/modules/netinstall/tests/1c-none.conf new file mode 100644 index 000000000..e0f097dcf --- /dev/null +++ b/src/modules/netinstall/tests/1c-none.conf @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: [] diff --git a/src/modules/netinstall/tests/1c-unset.conf b/src/modules/netinstall/tests/1c-unset.conf new file mode 100644 index 000000000..b25dbb6ea --- /dev/null +++ b/src/modules/netinstall/tests/1c-unset.conf @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true diff --git a/src/modules/netinstall/tests/1d-fallback-bad.conf b/src/modules/netinstall/tests/1d-fallback-bad.conf new file mode 100644 index 000000000..1a36f7854 --- /dev/null +++ b/src/modules/netinstall/tests/1d-fallback-bad.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-nonexistent.yaml + - file://$TESTDIR/data-empty.yaml + - file://$TESTDIR/data-empty.yaml + - file://$TESTDIR/data-bad.yaml diff --git a/src/modules/netinstall/tests/1d-fallback-large.conf b/src/modules/netinstall/tests/1d-fallback-large.conf new file mode 100644 index 000000000..5abb05ca8 --- /dev/null +++ b/src/modules/netinstall/tests/1d-fallback-large.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-nonexistent.yaml + - file://$TESTDIR/data-bad.yaml + - file://$TESTDIR/data-large.yaml + - file://$TESTDIR/data-small.yaml diff --git a/src/modules/netinstall/tests/1d-fallback-mixed.conf b/src/modules/netinstall/tests/1d-fallback-mixed.conf new file mode 100644 index 000000000..79cf677f9 --- /dev/null +++ b/src/modules/netinstall/tests/1d-fallback-mixed.conf @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-nonexistent.yaml + - file://$TESTDIR/data-empty.yaml + - file://$TESTDIR/data-bad.yaml + - file://$TESTDIR/data-empty.yaml + - file://$TESTDIR/data-small.yaml + - file://$TESTDIR/data-large.yaml + - file://$TESTDIR/data-bad.yaml diff --git a/src/modules/netinstall/tests/1d-fallback-small.conf b/src/modules/netinstall/tests/1d-fallback-small.conf new file mode 100644 index 000000000..e38a7d65f --- /dev/null +++ b/src/modules/netinstall/tests/1d-fallback-small.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +required: true +groupsUrl: + - file://$TESTDIR/data-nonexistent.yaml + - file://$TESTDIR/data-bad.yaml + - file://$TESTDIR/data-small.yaml + - file://$TESTDIR/data-large.yaml diff --git a/src/modules/netinstall/tests/data-empty.yaml b/src/modules/netinstall/tests/data-empty.yaml new file mode 100644 index 000000000..065a0a067 --- /dev/null +++ b/src/modules/netinstall/tests/data-empty.yaml @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +bogus: true + diff --git a/src/modules/netinstall/tests/data-error.yaml b/src/modules/netinstall/tests/data-error.yaml new file mode 100644 index 000000000..1445f8923 --- /dev/null +++ b/src/modules/netinstall/tests/data-error.yaml @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +derp +derp +herpa-derp: no +-- +# This file is not valid YAML diff --git a/src/modules/netinstall/tests/data-large.yaml b/src/modules/netinstall/tests/data-large.yaml new file mode 100644 index 000000000..7b47aa3b6 --- /dev/null +++ b/src/modules/netinstall/tests/data-large.yaml @@ -0,0 +1,38 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +- name: "Default" + description: "Default group" + hidden: false + selected: true + critical: false + packages: + - base +- name: "Two" + description: "group 2" + hidden: false + selected: true + critical: false + packages: + - chakra-live-two +- name: "Three" + description: "group 3" + hidden: false + selected: true + critical: false + packages: + - chakra-live-three +- name: "Four" + description: "group 4" + hidden: false + selected: true + critical: false + packages: + - chakra-live-four +- name: "Five" + description: "group 5" + hidden: false + selected: true + critical: false + packages: + - chakra-live-five diff --git a/src/modules/netinstall/tests/data-small.yaml b/src/modules/netinstall/tests/data-small.yaml new file mode 100644 index 000000000..6554cf738 --- /dev/null +++ b/src/modules/netinstall/tests/data-small.yaml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +- name: "Default" + description: "Default group" + hidden: false + selected: true + critical: false + packages: + - base +- name: "Second" + description: "Second group" + hidden: false + selected: true + critical: false + packages: + - chakra-live-skel diff --git a/src/modules/networkcfg/main.py b/src/modules/networkcfg/main.py index 00a264f53..807fdf613 100644 --- a/src/modules/networkcfg/main.py +++ b/src/modules/networkcfg/main.py @@ -1,25 +1,17 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-FileCopyrightText: 2021 Anke boersma +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import shutil @@ -37,21 +29,83 @@ def pretty_name(): return _("Saving network configuration.") +def get_live_user(): + """ + Gets the "live user" login. This might be "live", or "nitrux", + or something similar: it is the login name used *right now*, + and network configurations saved for that user, should be applied + also for the installed user (which probably has a different name). + """ + # getlogin() is a thin-wrapper, and depends on getlogin(3), + # which reads utmp -- and utmp isn't always set up right. + try: + return os.getlogin() + except OSError: + pass + # getpass will return the **current** user, which is generally root. + # That isn't very useful, because the network settings have been + # made outside of Calamares-running-as-root, as a different user. + # + # If Calamares is running as non-root, though, this is fine. + import getpass + name = getpass.getuser() + if name != "root": + return name + + # TODO: other mechanisms, e.g. guessing that "live" is the name + # TODO: support a what-is-the-live-user setting + return None + + +def replace_username(nm_config_filename, live_user, target_user): + """ + If @p live_user isn't None, then go through the given + file and replace @p live_user by the @p target_user. + + Reads the file, then (re-)writes it with new permissions lives. + """ + # FIXME: Perhaps if live_user is None, we should just replace **all** + # permissions lines? After all, this is supposed to be a live + # system so **whatever** NM networks are configured, should be + # available to the new user. + if live_user is None: + return + if not os.path.exists(nm_config_filename): + return + + with open(nm_config_filename, "r", encoding="UTF-8") as network_conf: + text = network_conf.readlines() + + live_permissions = 'permissions=user:{}:;'.format(live_user) + target_permissions = 'permissions=user:{}:;\n'.format(target_user) + with open(nm_config_filename, "w", encoding="UTF-8") as network_conf: + for line in text: + if live_permissions in line: + line = target_permissions + network_conf.write(line) + + +def path_pair(root_mount_point, relative_path): + """ + Returns /relative_path and the relative path in the target system. + """ + return ("/" + relative_path, os.path.join(root_mount_point, relative_path)) + + def run(): """ Setup network configuration """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") + user = libcalamares.globalstorage.value("username") + live_user = get_live_user() if root_mount_point is None: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(root_mount_point)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("networkcfg")) - source_nm = "/etc/NetworkManager/system-connections/" - target_nm = os.path.join( - root_mount_point, "etc/NetworkManager/system-connections/" - ) + source_nm, target_nm = path_pair(root_mount_point, "etc/NetworkManager/system-connections/") # Sanity checks. We don't want to do anything if a network # configuration already exists on the target @@ -68,18 +122,17 @@ def run(): continue try: - shutil.copy(source_network, target_network) + shutil.copy(source_network, target_network, follow_symlinks=False) + replace_username(target_network, live_user, user) except FileNotFoundError: libcalamares.utils.debug( - "Can't copy network configuration files in " - + "{}".format(source_network) + "Can't copy network configuration files in {}".format(source_network) ) except FileExistsError: pass # We need to overwrite the default resolv.conf in the chroot. - source_resolv = "/etc/resolv.conf" - target_resolv = os.path.join(root_mount_point, "etc/resolv.conf") + source_resolv, target_resolv = path_pair(root_mount_point, "etc/resolv.conf") if source_resolv != target_resolv and os.path.exists(source_resolv): try: os.remove(target_resolv) @@ -89,7 +142,7 @@ def run(): ) try: - shutil.copy(source_resolv, target_resolv) + shutil.copy(source_resolv, target_resolv, follow_symlinks=False) except Exception as err: libcalamares.utils.debug( "Can't copy resolv.conf from {}: {}".format(source_resolv, err) diff --git a/src/modules/networkcfg/module.desc b/src/modules/networkcfg/module.desc index c02305db2..cbafe8cd5 100644 --- a/src/modules/networkcfg/module.desc +++ b/src/modules/networkcfg/module.desc @@ -1,7 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "networkcfg" interface: "python" -requires: [] script: "main.py" noconfig: true diff --git a/src/modules/notesqml/CMakeLists.txt b/src/modules/notesqml/CMakeLists.txt index 6aedab5aa..5eab06663 100644 --- a/src/modules/notesqml/CMakeLists.txt +++ b/src/modules/notesqml/CMakeLists.txt @@ -1,3 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "notesqml (QML is not supported in this build)" ) + return() +endif() + calamares_add_plugin( notesqml TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO @@ -5,7 +15,5 @@ calamares_add_plugin( notesqml NotesQmlViewStep.cpp RESOURCES notesqml.qrc - LINK_PRIVATE_LIBRARIES - calamaresui SHARED_LIB ) diff --git a/src/modules/notesqml/NotesQmlViewStep.cpp b/src/modules/notesqml/NotesQmlViewStep.cpp index 5a6bbc494..9f57eb615 100644 --- a/src/modules/notesqml/NotesQmlViewStep.cpp +++ b/src/modules/notesqml/NotesQmlViewStep.cpp @@ -1,20 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "NotesQmlViewStep.h" @@ -45,7 +34,7 @@ NotesQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) m_notesName = new CalamaresUtils::Locale::TranslatedString( qmlLabel, "notes" ); } - Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } CALAMARES_PLUGIN_FACTORY_DEFINITION( NotesQmlViewStepFactory, registerPlugin< NotesQmlViewStep >(); ) diff --git a/src/modules/notesqml/NotesQmlViewStep.h b/src/modules/notesqml/NotesQmlViewStep.h index 5ffd4598e..485a7969e 100644 --- a/src/modules/notesqml/NotesQmlViewStep.h +++ b/src/modules/notesqml/NotesQmlViewStep.h @@ -1,20 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef NOTESQMLVIEWSTEP_H @@ -23,8 +12,8 @@ #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" -#include "utils/Variant.h" #include "utils/PluginFactory.h" +#include "utils/Variant.h" #include "viewpages/QmlViewStep.h" class PLUGINDLLEXPORT NotesQmlViewStep : public Calamares::QmlViewStep @@ -33,10 +22,10 @@ class PLUGINDLLEXPORT NotesQmlViewStep : public Calamares::QmlViewStep public: NotesQmlViewStep( QObject* parent = nullptr ); - virtual ~NotesQmlViewStep() override; + ~NotesQmlViewStep() override; QString prettyName() const override; - + void setConfigurationMap( const QVariantMap& configurationMap ) override; private: diff --git a/src/modules/notesqml/examples/notesqml.qml.example b/src/modules/notesqml/examples/notesqml.qml.example index a41fa98fd..782ae404e 100644 --- a/src/modules/notesqml/examples/notesqml.qml.example +++ b/src/modules/notesqml/examples/notesqml.qml.example @@ -1,20 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Some Calamares internals are available to all QML modules. @@ -25,60 +14,61 @@ */ import calamares.ui 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.2 -import QtQuick.Window 2.2 -import QtQuick.Layouts 1.3 -import QtQuick.Controls.Material 2.1 + import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import QtQuick.Controls.Material 2.1 -Item { - width: 740 - height: 420 + Item +{ +width: + 740 height : 420 - Flickable { - id: flick - anchors.fill: parent - contentHeight: 800 + Flickable + { + id: + flick anchors + .fill : parent contentHeight : 800 - ScrollBar.vertical: ScrollBar { - id: fscrollbar - width: 10 - policy: ScrollBar.AlwaysOn - } + ScrollBar.vertical : ScrollBar { id : fscrollbar width : 10 policy : ScrollBar.AlwaysOn } - TextArea { - id: intro + TextArea + { + id: + intro x: 1 y: 0 - width: parent.width - fscrollbar.width +width: + parent.width - fscrollbar.width font.pointSize: 14 - textFormat: Text.RichText - antialiasing: true - activeFocusOnPress: false - wrapMode: Text.WordWrap +textFormat: + Text.RichText +antialiasing: + true +activeFocusOnPress: + false +wrapMode: + Text.WordWrap - text: qsTr("

%1

-

This an example QML file, showing options in RichText with Flickable content.

+text: + qsTr( "

%1

+

This an example QML file, showing options in RichText with Flickable content.

-

QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

+

QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

-

This is bold text

-

This is italic text

-

This is underlined text

-

This text will be center-aligned.

-

This is strikethrough

+

This is bold text

+

This is italic text

+

This is underlined text

+

This text will be center-aligned.

+

This is strikethrough

-

Code example: - ls -l /home

+

Code example: + ls -l /home

-

Lists:

-
    -
  • Intel CPU systems
  • -
  • AMD CPU systems
  • -
- -

The vertical scrollbar is adjustable, current width set to 10.

").arg(Branding.string(Branding.VersionedName)) +

Lists:

+
    +
  • Intel CPU systems
  • +
  • AMD CPU systems
  • +
+

The vertical scrollbar is adjustable, current width set to 10.

").arg(Branding.string(Branding.VersionedName)) } } } diff --git a/src/modules/notesqml/notesqml.conf b/src/modules/notesqml/notesqml.conf index 88948bf64..c65f98879 100644 --- a/src/modules/notesqml/notesqml.conf +++ b/src/modules/notesqml/notesqml.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # The *notesqml* module can be used to display a QML file # as an installer step. This is most useful for release-notes # and similar somewhat-static content, but if you want to you diff --git a/src/modules/notesqml/notesqml.qml b/src/modules/notesqml/notesqml.qml index 374d9c399..7805f27fa 100644 --- a/src/modules/notesqml/notesqml.qml +++ b/src/modules/notesqml/notesqml.qml @@ -1,20 +1,9 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * * Copyright 2020, Anke Boersma * Copyright 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Some Calamares internals are available to all QML modules. diff --git a/src/modules/oemid/CMakeLists.txt b/src/modules/oemid/CMakeLists.txt index 0c4ad03ad..af7fe1ff7 100644 --- a/src/modules/oemid/CMakeLists.txt +++ b/src/modules/oemid/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( oemid TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO @@ -7,7 +12,6 @@ calamares_add_plugin( oemid UI OEMPage.ui LINK_PRIVATE_LIBRARIES - calamaresui Qt5::Widgets SHARED_LIB ) diff --git a/src/modules/oemid/IDJob.cpp b/src/modules/oemid/IDJob.cpp index 16461b191..ccda86057 100644 --- a/src/modules/oemid/IDJob.cpp +++ b/src/modules/oemid/IDJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "IDJob.h" @@ -27,52 +18,54 @@ #include #include -IDJob::IDJob(const QString& id, QObject* parent) +IDJob::IDJob( const QString& id, QObject* parent ) : Job( parent ) , m_batchIdentifier( id ) { } -QString IDJob::prettyName() const +QString +IDJob::prettyName() const { return tr( "OEM Batch Identifier" ); } -Calamares::JobResult IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) +Calamares::JobResult +IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) { if ( !QDir().mkpath( dirs ) ) { cError() << "Could not create directories" << dirs; - return Calamares::JobResult::error( - tr( "OEM Batch Identifier" ), - tr( "Could not create directories %1." ).arg( dirs ) ); + return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), + tr( "Could not create directories %1." ).arg( dirs ) ); } QFile output( QDir( dirs ).filePath( filename ) ); if ( output.exists() ) + { cWarning() << "Existing OEM Batch ID" << output.fileName() << "overwritten."; + } if ( !output.open( QIODevice::WriteOnly ) ) { cError() << "Could not write to" << output.fileName(); - return Calamares::JobResult::error( - tr( "OEM Batch Identifier" ), - tr( "Could not open file %1." ).arg( output.fileName() ) ); + return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), + tr( "Could not open file %1." ).arg( output.fileName() ) ); } if ( output.write( contents.toUtf8() ) < 0 ) { cError() << "Write error on" << output.fileName(); - return Calamares::JobResult::error( - tr( "OEM Batch Identifier" ), - tr( "Could not write to file %1." ).arg( output.fileName() ) ); + return Calamares::JobResult::error( tr( "OEM Batch Identifier" ), + tr( "Could not write to file %1." ).arg( output.fileName() ) ); } output.write( "\n" ); // Ignore error on this one return Calamares::JobResult::ok(); } -Calamares::JobResult IDJob::exec() +Calamares::JobResult +IDJob::exec() { cDebug() << "Setting OEM Batch ID to" << m_batchIdentifier; @@ -84,10 +77,11 @@ Calamares::JobResult IDJob::exec() // Don't bother translating internal errors if ( rootMount.isEmpty() && Calamares::Settings::instance()->doChroot() ) - return Calamares::JobResult::internalError( - "OEM Batch Identifier", - "No rootMountPoint is set, but a chroot is required. " - "Is there a module before oemid that sets up the partitions?", - Calamares::JobResult::InvalidConfiguration ); - return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, targetFile, m_batchIdentifier ); + return Calamares::JobResult::internalError( "OEM Batch Identifier", + "No rootMountPoint is set, but a chroot is required. " + "Is there a module before oemid that sets up the partitions?", + Calamares::JobResult::InvalidConfiguration ); + return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, + targetFile, + m_batchIdentifier ); } diff --git a/src/modules/oemid/IDJob.h b/src/modules/oemid/IDJob.h index 845a3f451..17d97b4ee 100644 --- a/src/modules/oemid/IDJob.h +++ b/src/modules/oemid/IDJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef IDJOB_H @@ -36,7 +27,7 @@ private: Calamares::JobResult writeId( const QString&, const QString&, const QString& ); QString m_batchIdentifier; -} ; +}; #endif diff --git a/src/modules/oemid/OEMPage.ui b/src/modules/oemid/OEMPage.ui index b14906537..2194ac24c 100644 --- a/src/modules/oemid/OEMPage.ui +++ b/src/modules/oemid/OEMPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + OEMPage diff --git a/src/modules/oemid/OEMViewStep.cpp b/src/modules/oemid/OEMViewStep.cpp index 8a12bd17c..0c1bdd1d8 100644 --- a/src/modules/oemid/OEMViewStep.cpp +++ b/src/modules/oemid/OEMViewStep.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "OEMViewStep.h" @@ -38,22 +29,18 @@ public: { m_ui->setupUi( this ); - CALAMARES_RETRANSLATE( - m_ui->retranslateUi( this ); - ) + CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ); } - virtual ~OEMPage() override; - + ~OEMPage() override; + Ui_OEMPage* m_ui; -} ; +}; -OEMPage::~OEMPage() -{ -} +OEMPage::~OEMPage() {} -OEMViewStep::OEMViewStep(QObject* parent) +OEMViewStep::OEMViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_visited( false ) @@ -63,86 +50,106 @@ OEMViewStep::OEMViewStep(QObject* parent) OEMViewStep::~OEMViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } -bool OEMViewStep::isBackEnabled() const +bool +OEMViewStep::isBackEnabled() const { return true; } -bool OEMViewStep::isNextEnabled() const +bool +OEMViewStep::isNextEnabled() const { return true; } -bool OEMViewStep::isAtBeginning() const +bool +OEMViewStep::isAtBeginning() const { return true; } -bool OEMViewStep::isAtEnd() const +bool +OEMViewStep::isAtEnd() const { return true; } -static QString substitute( QString s ) +static QString +substitute( QString s ) { QString t_date = QStringLiteral( "@@DATE@@" ); if ( s.contains( t_date ) ) { auto date = QDate::currentDate(); - s = s.replace( t_date, date.toString( Qt::ISODate )); + s = s.replace( t_date, date.toString( Qt::ISODate ) ); } return s; } -void OEMViewStep::onActivate() +void +OEMViewStep::onActivate() { if ( !m_widget ) - (void) widget(); + { + (void)widget(); + } if ( !m_visited && m_widget ) + { m_widget->m_ui->batchIdentifier->setText( m_user_batchIdentifier ); + } m_visited = true; ViewStep::onActivate(); } -void OEMViewStep::onLeave() +void +OEMViewStep::onLeave() { m_user_batchIdentifier = m_widget->m_ui->batchIdentifier->text(); ViewStep::onLeave(); } -QString OEMViewStep::prettyName() const +QString +OEMViewStep::prettyName() const { return tr( "OEM Configuration" ); } -QString OEMViewStep::prettyStatus() const +QString +OEMViewStep::prettyStatus() const { return tr( "Set the OEM Batch Identifier to %1." ).arg( m_user_batchIdentifier ); } -QWidget * OEMViewStep::widget() +QWidget* +OEMViewStep::widget() { - if (!m_widget) + if ( !m_widget ) + { m_widget = new OEMPage; + } return m_widget; } -Calamares::JobList OEMViewStep::jobs() const +Calamares::JobList +OEMViewStep::jobs() const { return Calamares::JobList() << Calamares::job_ptr( new IDJob( m_user_batchIdentifier ) ); } -void OEMViewStep::setConfigurationMap(const QVariantMap& configurationMap) +void +OEMViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_conf_batchIdentifier = CalamaresUtils::getString( configurationMap, "batch-identifier" ); m_user_batchIdentifier = substitute( m_conf_batchIdentifier ); } -CALAMARES_PLUGIN_FACTORY_DEFINITION( OEMViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( OEMViewStepFactory, registerPlugin< OEMViewStep >(); ) diff --git a/src/modules/oemid/OEMViewStep.h b/src/modules/oemid/OEMViewStep.h index 1f0e58915..a0b07c6fd 100644 --- a/src/modules/oemid/OEMViewStep.h +++ b/src/modules/oemid/OEMViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef OEMVIEWSTEP_H @@ -34,7 +25,7 @@ class PLUGINDLLEXPORT OEMViewStep : public Calamares::ViewStep public: explicit OEMViewStep( QObject* parent = nullptr ); - virtual ~OEMViewStep() override; + ~OEMViewStep() override; QString prettyName() const override; QString prettyStatus() const override; diff --git a/src/modules/oemid/oemid.conf b/src/modules/oemid/oemid.conf index 8f9bc3d08..921fb3b30 100644 --- a/src/modules/oemid/oemid.conf +++ b/src/modules/oemid/oemid.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This is an OEM setup (phase-0) configuration file. --- # The batch-identifier is written to /var/log/installer/oem-id. diff --git a/src/modules/openrcdmcryptcfg/main.py b/src/modules/openrcdmcryptcfg/main.py index 522d623bc..a0aabce7d 100644 --- a/src/modules/openrcdmcryptcfg/main.py +++ b/src/modules/openrcdmcryptcfg/main.py @@ -1,23 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2017, Ghiunhan Mamut -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2017 Ghiunhan Mamut +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os.path @@ -30,6 +21,7 @@ _ = gettext.translation("calamares-python", fallback=True).gettext + def pretty_name(): return _("Configuring OpenRC dmcrypt service.") @@ -37,6 +29,7 @@ def pretty_name(): def write_dmcrypt_conf(partitions, root_mount_point, dmcrypt_conf_path): crypto_target = "" crypto_source = "" + unencrypted_separate_boot = any(p["mountPoint"] == "/boot" and "luksMapperName" not in p for p in partitions) for partition in partitions: has_luks = "luksMapperName" in partition @@ -45,7 +38,6 @@ def write_dmcrypt_conf(partitions, root_mount_point, dmcrypt_conf_path): if not has_luks and not skip_partitions: libcalamares.utils.debug( "Skip writing OpenRC LUKS configuration for partition {!s}".format(partition["mountPoint"])) - if has_luks and not skip_partitions: crypto_target = partition["luksMapperName"] crypto_source = "/dev/disk/by-uuid/{!s}".format(partition["uuid"]) @@ -55,7 +47,9 @@ def write_dmcrypt_conf(partitions, root_mount_point, dmcrypt_conf_path): with open(os.path.join(root_mount_point, dmcrypt_conf_path), 'a+') as dmcrypt_file: dmcrypt_file.write("\ntarget=" + crypto_target) dmcrypt_file.write("\nsource=" + crypto_source) - dmcrypt_file.write("\nkey=/crypto_keyfile.bin") + # Don't use keyfile if boot is unencrypted, keys must not be stored on unencrypted partitions + if not unencrypted_separate_boot: + dmcrypt_file.write("\nkey=/crypto_keyfile.bin") dmcrypt_file.write("\n") if has_luks and skip_partitions: diff --git a/src/modules/openrcdmcryptcfg/module.desc b/src/modules/openrcdmcryptcfg/module.desc index 283adfdac..e63339573 100644 --- a/src/modules/openrcdmcryptcfg/module.desc +++ b/src/modules/openrcdmcryptcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "openrcdmcryptcfg" diff --git a/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf b/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf index 57ee2dc31..911a4eff3 100644 --- a/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf +++ b/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf @@ -1,2 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- configFilePath: /etc/conf.d/dmcrypt diff --git a/src/modules/packagechooser/CMakeLists.txt b/src/modules/packagechooser/CMakeLists.txt index d85eda8e2..d2e6ff118 100644 --- a/src/modules/packagechooser/CMakeLists.txt +++ b/src/modules/packagechooser/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 COMPONENTS Core Gui Widgets REQUIRED ) set( _extra_libraries "" ) set( _extra_src "" ) @@ -5,11 +10,12 @@ set( _extra_src "" ) ### OPTIONAL AppData XML support in PackageModel # # +# TODO:3.3:WITH->BUILD (this doesn't affect the ABI offered by Calamares) option( WITH_APPDATA "Support appdata: items in PackageChooser (requires QtXml)" ON ) if ( WITH_APPDATA ) find_package(Qt5 COMPONENTS Xml) if ( Qt5Xml_FOUND ) - add_definitions( -DHAVE_XML ) + add_definitions( -DHAVE_APPDATA ) list( APPEND _extra_libraries Qt5::Xml ) list( APPEND _extra_src ItemAppData.cpp ) endif() @@ -39,6 +45,7 @@ calamares_add_plugin( packagechooser TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES + Config.cpp PackageChooserPage.cpp PackageChooserViewStep.cpp PackageModel.cpp @@ -48,7 +55,6 @@ calamares_add_plugin( packagechooser UI page_package.ui LINK_PRIVATE_LIBRARIES - calamaresui ${_extra_libraries} SHARED_LIB ) diff --git a/src/modules/packagechooser/Config.cpp b/src/modules/packagechooser/Config.cpp new file mode 100644 index 000000000..667621597 --- /dev/null +++ b/src/modules/packagechooser/Config.cpp @@ -0,0 +1,362 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#ifdef HAVE_APPDATA +#include "ItemAppData.h" +#endif + +#ifdef HAVE_APPSTREAM +#include "ItemAppStream.h" +#include +#include +#endif + + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "packages/Globals.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +/** @brief This removes any values from @p groups that match @p source + * + * This is used to remove duplicates from the netinstallAdd structure + * It iterates over @p groups and for each map in the list, if the + * "source" element matches @p source, it is removed from the returned + * list. + */ +static QVariantList +pruneNetinstallAdd( const QString& source, const QVariant& groups ) +{ + QVariantList newGroupList; + const QVariantList groupList = groups.toList(); + for ( const QVariant& group : groupList ) + { + QVariantMap groupMap = group.toMap(); + if ( groupMap.value( "source", "" ).toString() != source ) + { + newGroupList.append( groupMap ); + } + } + return newGroupList; +} + +const NamedEnumTable< PackageChooserMode >& +packageChooserModeNames() +{ + static const NamedEnumTable< PackageChooserMode > names { + { "optional", PackageChooserMode::Optional }, + { "required", PackageChooserMode::Required }, + { "optionalmultiple", PackageChooserMode::OptionalMultiple }, + { "requiredmultiple", PackageChooserMode::RequiredMultiple }, + // and a bunch of aliases + { "zero-or-one", PackageChooserMode::Optional }, + { "radio", PackageChooserMode::Required }, + { "one", PackageChooserMode::Required }, + { "set", PackageChooserMode::OptionalMultiple }, + { "zero-or-more", PackageChooserMode::OptionalMultiple }, + { "multiple", PackageChooserMode::RequiredMultiple }, + { "one-or-more", PackageChooserMode::RequiredMultiple } + }; + return names; +} + +const NamedEnumTable< PackageChooserMethod >& +PackageChooserMethodNames() +{ + static const NamedEnumTable< PackageChooserMethod > names { + { "legacy", PackageChooserMethod::Legacy }, + { "custom", PackageChooserMethod::Legacy }, + { "contextualprocess", PackageChooserMethod::Legacy }, + { "packages", PackageChooserMethod::Packages }, + { "netinstall-add", PackageChooserMethod::NetAdd }, + { "netinstall-select", PackageChooserMethod::NetSelect }, + }; + return names; +} + +Config::Config( QObject* parent ) + : Calamares::ModuleSystem::Config( parent ) + , m_model( new PackageListModel( this ) ) + , m_mode( PackageChooserMode::Required ) +{ +} + +Config::~Config() {} + +const PackageItem& +Config::introductionPackage() const +{ + for ( int i = 0; i < m_model->packageCount(); ++i ) + { + const auto& package = m_model->packageData( i ); + if ( package.isNonePackage() ) + { + return package; + } + } + + static PackageItem* defaultIntroduction = nullptr; + if ( !defaultIntroduction ) + { + const auto name = QT_TR_NOOP( "Package Selection" ); + const auto description + = QT_TR_NOOP( "Please pick a product from the list. The selected product will be installed." ); + defaultIntroduction = new PackageItem( QString(), name, description ); + defaultIntroduction->screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); + defaultIntroduction->name = CalamaresUtils::Locale::TranslatedString( name, metaObject()->className() ); + defaultIntroduction->description + = CalamaresUtils::Locale::TranslatedString( description, metaObject()->className() ); + } + return *defaultIntroduction; +} + +static inline QString +make_gs_key( const Calamares::ModuleSystem::InstanceKey& key ) +{ + return QStringLiteral( "packagechooser_" ) + key.id(); +} + +void +Config::updateGlobalStorage( const QStringList& selected ) const +{ + if ( m_packageChoice.has_value() ) + { + cWarning() << "Inconsistent package choices -- both model and single-selection QML"; + } + if ( m_method == PackageChooserMethod::Legacy ) + { + QString value = selected.join( ',' ); + Calamares::JobQueue::instance()->globalStorage()->insert( make_gs_key( m_defaultId ), value ); + cDebug() << m_defaultId << "selected" << value; + } + else if ( m_method == PackageChooserMethod::Packages ) + { + QStringList packageNames = m_model->getInstallPackagesForNames( selected ); + cDebug() << m_defaultId << "packages to install" << packageNames; + CalamaresUtils::Packages::setGSPackageAdditions( + Calamares::JobQueue::instance()->globalStorage(), m_defaultId, packageNames ); + } + else if ( m_method == PackageChooserMethod::NetAdd ) + { + QVariantList netinstallDataList = m_model->getNetinstallDataForNames( selected ); + if ( netinstallDataList.isEmpty() ) + { + cWarning() << "No netinstall information found for " << selected; + } + else + { + // If an earlier packagechooser instance added this data to global storage, combine them + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs->contains( "netinstallAdd" ) ) + { + netinstallDataList + += pruneNetinstallAdd( QStringLiteral( "packageChooser" ), gs->value( "netinstallAdd" ) ); + } + gs->insert( "netinstallAdd", netinstallDataList ); + } + } + else if ( m_method == PackageChooserMethod::NetSelect ) + { + cDebug() << m_defaultId << "groups to select in netinstall" << selected; + QStringList newSelected = selected; + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + + // If an earlier packagechooser instance added this data to global storage, combine them + if ( gs->contains( "netinstallSelect" ) ) + { + auto selectedOrig = gs->value( "netinstallSelect" ); + if ( selectedOrig.canConvert( QVariant::StringList ) ) + { + newSelected += selectedOrig.toStringList(); + } + else + { + cWarning() << "Invalid NetinstallSelect data in global storage. Earlier selections purged"; + } + gs->remove( "netinstallSelect" ); + } + gs->insert( "netinstallSelect", newSelected ); + } + else + { + cWarning() << "Unknown packagechooser method" << smash( m_method ); + } +} + +void +Config::updateGlobalStorage() const +{ + if ( m_model->packageCount() > 0 ) + { + cWarning() << "Inconsistent package choices -- both model and single-selection QML"; + } + if ( m_method == PackageChooserMethod::Legacy ) + { + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( m_packageChoice.has_value() ) + { + gs->insert( make_gs_key( m_defaultId ), m_packageChoice.value() ); + } + else + { + gs->remove( make_gs_key( m_defaultId ) ); + } + } + else if ( m_method == PackageChooserMethod::Packages ) + { + cWarning() << "Unsupported single-selection packagechooser method 'Packages'"; + } + else + { + cWarning() << "Unknown packagechooser method" << smash( m_method ); + } +} + + +void +Config::setPackageChoice( const QString& packageChoice ) +{ + if ( packageChoice.isEmpty() ) + { + m_packageChoice.reset(); + } + else + { + m_packageChoice = packageChoice; + } + emit packageChoiceChanged( m_packageChoice.value_or( QString() ) ); +} + +QString +Config::prettyName() const +{ + return m_stepName ? m_stepName->get() : tr( "Packages" ); +} + +QString +Config::prettyStatus() const +{ + return tr( "Install option: %1" ).arg( m_packageChoice.value_or( tr( "None" ) ) ); +} + +static void +fillModel( PackageListModel* model, const QVariantList& items ) +{ + if ( items.isEmpty() ) + { + cWarning() << "No *items* for PackageChooser module."; + return; + } + +#ifdef HAVE_APPSTREAM + std::unique_ptr< AppStream::Pool > pool; + bool poolOk = false; +#endif + + cDebug() << "Loading PackageChooser model items from config"; + int item_index = 0; + for ( const auto& item_it : items ) + { + ++item_index; + QVariantMap item_map = item_it.toMap(); + if ( item_map.isEmpty() ) + { + cWarning() << "PackageChooser entry" << item_index << "is not valid."; + continue; + } + + if ( item_map.contains( "appdata" ) ) + { +#ifdef HAVE_XML + model->addPackage( fromAppData( item_map ) ); +#else + cWarning() << "Loading AppData XML is not supported."; +#endif + } + else if ( item_map.contains( "appstream" ) ) + { +#ifdef HAVE_APPSTREAM + if ( !pool ) + { + pool = std::make_unique< AppStream::Pool >(); + pool->setLocale( QStringLiteral( "ALL" ) ); + poolOk = pool->load(); + } + if ( pool && poolOk ) + { + model->addPackage( fromAppStream( *pool, item_map ) ); + } +#else + cWarning() << "Loading AppStream data is not supported."; +#endif + } + else + { + model->addPackage( PackageItem( item_map ) ); + } + } + cDebug() << Logger::SubEntry << "Loaded PackageChooser with" << model->packageCount() << "entries."; +} + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_mode = packageChooserModeNames().find( CalamaresUtils::getString( configurationMap, "mode" ), + PackageChooserMode::Required ); + m_method = PackageChooserMethodNames().find( CalamaresUtils::getString( configurationMap, "method" ), + PackageChooserMethod::Legacy ); + + if ( m_method == PackageChooserMethod::Legacy ) + { + cDebug() << "Using module ID" << m_defaultId; + } + + if ( configurationMap.contains( "items" ) ) + { + fillModel( m_model, configurationMap.value( "items" ).toList() ); + + QString default_item_id = CalamaresUtils::getString( configurationMap, "default" ); + if ( !default_item_id.isEmpty() ) + { + for ( int item_n = 0; item_n < m_model->packageCount(); ++item_n ) + { + QModelIndex item_idx = m_model->index( item_n, 0 ); + QVariant item_id = m_model->data( item_idx, PackageListModel::IdRole ); + + if ( item_id.toString() == default_item_id ) + { + m_defaultModelIndex = item_idx; + break; + } + } + } + } + else + { + setPackageChoice( CalamaresUtils::getString( configurationMap, "packageChoice" ) ); + if ( m_method != PackageChooserMethod::Legacy ) + { + cWarning() << "Single-selection QML module must use 'Legacy' method."; + } + } + + bool labels_ok = false; + auto labels = CalamaresUtils::getSubMap( configurationMap, "labels", labels_ok ); + if ( labels_ok ) + { + if ( labels.contains( "step" ) ) + { + m_stepName = new CalamaresUtils::Locale::TranslatedString( labels, "step" ); + } + } +} diff --git a/src/modules/packagechooser/Config.h b/src/modules/packagechooser/Config.h new file mode 100644 index 000000000..d1b783a8d --- /dev/null +++ b/src/modules/packagechooser/Config.h @@ -0,0 +1,128 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef PACKAGECHOOSER_CONFIG_H +#define PACKAGECHOOSER_CONFIG_H + +#include "PackageModel.h" + +#include "modulesystem/Config.h" +#include "modulesystem/InstanceKey.h" + +#include +#include + +enum class PackageChooserMode +{ + Optional, // zero or one + Required, // exactly one + OptionalMultiple, // zero or more + RequiredMultiple // one or more +}; + +const NamedEnumTable< PackageChooserMode >& packageChooserModeNames(); + +enum class PackageChooserMethod +{ + Legacy, // use contextualprocess or other custom + Packages, // use the packages module + NetAdd, // adds packages to the netinstall module + NetSelect, // makes selections in the netinstall module +}; + +const NamedEnumTable< PackageChooserMethod >& PackageChooserMethodNames(); + +class Config : public Calamares::ModuleSystem::Config +{ + Q_OBJECT + + /** @brief This is the single-select package-choice + * + * For (QML) modules that support only a single selection and + * just want to do things in a straightforward pick-this-one + * way, the packageChoice property is a (the) way to go. + * + * Writing to this property means that any other form of package- + * choice or selection is ignored. + */ + Q_PROPERTY( QString packageChoice READ packageChoice WRITE setPackageChoice NOTIFY packageChoiceChanged ) + Q_PROPERTY( QString prettyStatus READ prettyStatus NOTIFY prettyStatusChanged FINAL ) + +public: + Config( QObject* parent = nullptr ); + ~Config() override; + + /** @brief Sets the default Id for this Config + * + * The default Id is the (owning) module identifier for the config, + * and it is used when the Id read from the config file is empty. + * The **usual** configuration when using method *packages* is + * to rely on the default Id. + */ + void setDefaultId( const Calamares::ModuleSystem::InstanceKey& defaultId ) { m_defaultId = defaultId; } + void setConfigurationMap( const QVariantMap& ) override; + + PackageChooserMode mode() const { return m_mode; } + PackageListModel* model() const { return m_model; } + QModelIndex defaultSelectionIndex() const { return m_defaultModelIndex; } + + /** @brief Returns an "introductory package" which describes packagechooser + * + * If the model contains a "none" package, returns that one on + * the assumption that it is one to describe the whole; otherwise + * returns a totally generic description. + */ + const PackageItem& introductionPackage() const; + + /** @brief Write selection to global storage + * + * Updates the GS keys for this packagechooser, marking all + * (and only) the packages in @p selected as selected. + */ + void updateGlobalStorage( const QStringList& selected ) const; + /** @brief Write selection to global storage + * + * Updates the GS keys for this packagechooser, marking **only** + * the package choice as selected. This assumes that the single- + * selection QML code is in use. + */ + void updateGlobalStorage() const; + + QString packageChoice() const { return m_packageChoice.value_or( QString() ); } + void setPackageChoice( const QString& packageChoice ); + + QString prettyName() const; + QString prettyStatus() const; + +signals: + void packageChoiceChanged( QString packageChoice ); + void prettyStatusChanged(); + +private: + PackageListModel* m_model = nullptr; + QModelIndex m_defaultModelIndex; + + /// Selection mode for this module + PackageChooserMode m_mode = PackageChooserMode::Optional; + /// How this module stores to GS + PackageChooserMethod m_method = PackageChooserMethod::Legacy; + /// Value to use for id if none is set in the config file + Calamares::ModuleSystem::InstanceKey m_defaultId; + /** @brief QML selection (for single-selection approaches) + * + * If there is no value, then there has been no selection. + * Reading the property will return an empty QString. + */ + std::optional< QString > m_packageChoice; + CalamaresUtils::Locale::TranslatedString* m_stepName; // As it appears in the sidebar +}; + + +#endif diff --git a/src/modules/packagechooser/ItemAppData.cpp b/src/modules/packagechooser/ItemAppData.cpp index ed0ba9223..dd1eb1fb7 100644 --- a/src/modules/packagechooser/ItemAppData.cpp +++ b/src/modules/packagechooser/ItemAppData.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @brief Loading items from AppData XML files. diff --git a/src/modules/packagechooser/ItemAppData.h b/src/modules/packagechooser/ItemAppData.h index 72617ff0c..92d81220d 100644 --- a/src/modules/packagechooser/ItemAppData.h +++ b/src/modules/packagechooser/ItemAppData.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef ITEMAPPDATA_H diff --git a/src/modules/packagechooser/ItemAppStream.cpp b/src/modules/packagechooser/ItemAppStream.cpp index 83837a9ca..dbd1db4bc 100644 --- a/src/modules/packagechooser/ItemAppStream.cpp +++ b/src/modules/packagechooser/ItemAppStream.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /** @brief Loading items from AppData XML files. @@ -22,7 +13,7 @@ */ #include "PackageModel.h" -#include "locale/LabelModel.h" +#include "locale/TranslationsModel.h" #include "utils/Logger.h" #include "utils/Variant.h" @@ -96,7 +87,6 @@ fromComponent( AppStream::Component& component ) } } - auto screenshots = component.screenshots(); if ( screenshots.count() > 0 ) { diff --git a/src/modules/packagechooser/ItemAppStream.h b/src/modules/packagechooser/ItemAppStream.h index c44b84b06..9fa3608c3 100644 --- a/src/modules/packagechooser/ItemAppStream.h +++ b/src/modules/packagechooser/ItemAppStream.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef ITEMAPPSTREAM_H diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 16f50abab..721329c1b 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageChooserPage.h" @@ -37,17 +28,17 @@ PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent m_introduction.screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); ui->setupUi( this ); - CALAMARES_RETRANSLATE( updateLabels(); ) + CALAMARES_RETRANSLATE( updateLabels(); ); 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 ); } @@ -55,37 +46,6 @@ PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent ui->products->setMinimumWidth( 10 * CalamaresUtils::defaultFontHeight() ); } -/** @brief size the given @p pixmap to @p size - * - * This is "smart" in the sense that it tries to keep the image un-scaled - * (if it's just a little too big) and otherwise scales as needed. - * - * Returns a copy if any modifications are done. - */ -static QPixmap -smartClip( const QPixmap& pixmap, QSize size ) -{ - auto pixSize = pixmap.size(); - if ( ( pixSize.width() <= size.width() ) && ( pixSize.height() <= size.height() ) ) - { - return pixmap; - } - - // only slightly bigger? Trim the edges - constexpr int margin = 16; - if ( ( pixSize.width() <= size.width() + margin ) && ( pixSize.height() <= size.height() + margin ) ) - { - int x = pixSize.width() <= size.width() ? 0 : ( pixSize.width() - size.width() / 2 ); - int new_width = pixSize.width() <= size.width() ? pixSize.width() : size.width(); - int y = pixSize.height() <= size.height() ? 0 : ( pixSize.height() - size.height() / 2 ); - int new_height = pixSize.height() <= size.height() ? pixSize.height() : size.height(); - - return pixmap.copy( x, y, new_width, new_height ); - } - - return pixmap.scaled( size, Qt::KeepAspectRatio ); -} - void PackageChooserPage::currentChanged( const QModelIndex& index ) { @@ -109,7 +69,7 @@ PackageChooserPage::currentChanged( const QModelIndex& index ) } else { - ui->productScreenshot->setPixmap( smartClip( currentScreenshot, ui->productScreenshot->size() ) ); + ui->productScreenshot->setPixmap( currentScreenshot ); } } } @@ -145,8 +105,8 @@ PackageChooserPage::setSelection( const QModelIndex& index ) if ( index.isValid() ) { ui->products->selectionModel()->select( index, QItemSelectionModel::Select ); - currentChanged( index ); } + currentChanged( index ); } bool diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index b4ef2169b..90c2b28a6 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -1,24 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H +#include "Config.h" #include "PackageModel.h" #include diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 759c6eeab..e3b27df5c 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -1,37 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageChooserViewStep.h" -#ifdef HAVE_XML -#include "ItemAppData.h" -#endif -#ifdef HAVE_APPSTREAM -#include "ItemAppStream.h" -#include -#include -#endif +#include "Config.h" #include "PackageChooserPage.h" #include "PackageModel.h" #include "GlobalStorage.h" #include "JobQueue.h" - #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" @@ -44,10 +27,8 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlug PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) + , m_config( new Config( this ) ) , m_widget( nullptr ) - , m_model( nullptr ) - , m_mode( PackageChooserMode::Required ) - , m_stepName( nullptr ) { emit nextStatusChanged( false ); } @@ -59,15 +40,13 @@ PackageChooserViewStep::~PackageChooserViewStep() { m_widget->deleteLater(); } - delete m_model; - delete m_stepName; } QString PackageChooserViewStep::prettyName() const { - return m_stepName ? m_stepName->get() : tr( "Packages" ); + return m_config->prettyName(); } @@ -76,19 +55,11 @@ PackageChooserViewStep::widget() { if ( !m_widget ) { - m_widget = new PackageChooserPage( m_mode, nullptr ); - connect( m_widget, &PackageChooserPage::selectionChanged, [=]() { - emit nextStatusChanged( this->isNextEnabled() ); - } ); - - if ( m_model ) - { - hookupModel(); - } - else - { - cWarning() << "PackageChooser Widget created before model."; - } + m_widget = new PackageChooserPage( m_config->mode(), nullptr ); + connect( m_widget, + &PackageChooserPage::selectionChanged, + [ = ]() { emit nextStatusChanged( this->isNextEnabled() ); } ); + hookupModel(); } return m_widget; } @@ -97,18 +68,13 @@ PackageChooserViewStep::widget() bool PackageChooserViewStep::isNextEnabled() const { - if ( !m_model ) - { - return false; - } - if ( !m_widget ) { // No way to have changed anything return true; } - switch ( m_mode ) + switch ( m_config->mode() ) { case PackageChooserMode::Optional: case PackageChooserMode::OptionalMultiple: @@ -119,8 +85,7 @@ PackageChooserViewStep::isNextEnabled() const // exactly one OR one or more return m_widget->hasSelection(); } - - NOTREACHED return true; + __builtin_unreachable(); } @@ -149,22 +114,14 @@ PackageChooserViewStep::onActivate() { if ( !m_widget->hasSelection() ) { - m_widget->setSelection( m_defaultIdx ); + m_widget->setSelection( m_config->defaultSelectionIndex() ); } } void PackageChooserViewStep::onLeave() { - QString key = QStringLiteral( "packagechooser_%1" ).arg( m_id ); - QString value; - if ( m_widget->hasSelection() ) - { - value = m_widget->selectedPackageIds().join( ',' ); - } - Calamares::JobQueue::instance()->globalStorage()->insert( key, value ); - - cDebug() << "PackageChooser" << key << "selected" << value; + m_config->updateGlobalStorage( m_widget->selectedPackageIds() ); } Calamares::JobList @@ -177,145 +134,25 @@ PackageChooserViewStep::jobs() const void PackageChooserViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - QString mode = CalamaresUtils::getString( configurationMap, "mode" ); - bool mode_ok = false; - if ( !mode.isEmpty() ) - { - m_mode = roleNames().find( mode, mode_ok ); - } - if ( !mode_ok ) - { - m_mode = PackageChooserMode::Required; - } + m_config->setDefaultId( moduleInstanceKey() ); + m_config->setConfigurationMap( configurationMap ); - m_id = CalamaresUtils::getString( configurationMap, "id" ); - if ( m_id.isEmpty() ) - { - // Not set, so use the instance id - m_id = moduleInstanceKey().id(); - } - - bool labels_ok = false; - auto labels = CalamaresUtils::getSubMap( configurationMap, "labels", labels_ok ); - if ( labels_ok ) - { - if ( labels.contains( "step" ) ) - { - m_stepName = new CalamaresUtils::Locale::TranslatedString( labels, "step" ); - } - } - - QString default_item_id = CalamaresUtils::getString( configurationMap, "default" ); - m_defaultIdx = QModelIndex(); - - bool first_time = !m_model; - if ( configurationMap.contains( "items" ) ) - { - fillModel( configurationMap.value( "items" ).toList() ); - } - - if ( first_time && m_widget && m_model ) + if ( m_widget ) { hookupModel(); } - - // find default item - if ( first_time && m_model && !default_item_id.isEmpty() ) - { - for ( int item_n = 0; item_n < m_model->packageCount(); ++item_n ) - { - QModelIndex item_idx = m_model->index( item_n, 0 ); - QVariant item_id = m_model->data( item_idx, PackageListModel::IdRole ); - - if ( item_id.toString() == default_item_id ) - { - m_defaultIdx = item_idx; - break; - } - } - } } -void -PackageChooserViewStep::fillModel( const QVariantList& items ) -{ - if ( !m_model ) - { - m_model = new PackageListModel( nullptr ); - } - - if ( items.isEmpty() ) - { - cWarning() << "No *items* for PackageChooser module."; - return; - } - -#ifdef HAVE_APPSTREAM - std::unique_ptr< AppStream::Pool > pool; - bool poolOk = false; -#endif - - cDebug() << "Loading PackageChooser model items from config"; - int item_index = 0; - for ( const auto& item_it : items ) - { - ++item_index; - QVariantMap item_map = item_it.toMap(); - if ( item_map.isEmpty() ) - { - cWarning() << "PackageChooser entry" << item_index << "is not valid."; - continue; - } - - if ( item_map.contains( "appdata" ) ) - { -#ifdef HAVE_XML - m_model->addPackage( fromAppData( item_map ) ); -#else - cWarning() << "Loading AppData XML is not supported."; -#endif - } - else if ( item_map.contains( "appstream" ) ) - { -#ifdef HAVE_APPSTREAM - if ( !pool ) - { - pool = std::make_unique< AppStream::Pool >(); - pool->setLocale( QStringLiteral( "ALL" ) ); - poolOk = pool->load(); - } - if ( pool && poolOk ) - { - m_model->addPackage( fromAppStream( *pool, item_map ) ); - } -#else - cWarning() << "Loading AppStream data is not supported."; -#endif - } - else - { - m_model->addPackage( PackageItem( item_map ) ); - } - } -} void PackageChooserViewStep::hookupModel() { - if ( !m_model || !m_widget ) + if ( !m_config->model() || !m_widget ) { cError() << "Can't hook up model until widget and model both exist."; return; } - m_widget->setModel( m_model ); - for ( int i = 0; i < m_model->packageCount(); ++i ) - { - const auto& package = m_model->packageData( i ); - if ( package.id.isEmpty() ) - { - m_widget->setIntroduction( package ); - break; - } - } + m_widget->setModel( m_config->model() ); + m_widget->setIntroduction( m_config->introductionPackage() ); } diff --git a/src/modules/packagechooser/PackageChooserViewStep.h b/src/modules/packagechooser/PackageChooserViewStep.h index 9e9087971..76b35aed8 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.h +++ b/src/modules/packagechooser/PackageChooserViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGECHOOSERVIEWSTEP_H @@ -24,12 +15,9 @@ #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include "PackageModel.h" - -#include -#include #include +class Config; class PackageChooserPage; class PLUGINDLLEXPORT PackageChooserViewStep : public Calamares::ViewStep @@ -38,7 +26,7 @@ class PLUGINDLLEXPORT PackageChooserViewStep : public Calamares::ViewStep public: explicit PackageChooserViewStep( QObject* parent = nullptr ); - virtual ~PackageChooserViewStep() override; + ~PackageChooserViewStep() override; QString prettyName() const override; @@ -58,17 +46,10 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: - void fillModel( const QVariantList& items ); void hookupModel(); + Config* m_config; PackageChooserPage* m_widget; - PackageListModel* m_model; - - // Configuration - PackageChooserMode m_mode; - QString m_id; - CalamaresUtils::Locale::TranslatedString* m_stepName; // As it appears in the sidebar - QModelIndex m_defaultIdx; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index 12995fad5..f1d1184ad 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -1,78 +1,73 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PackageModel.h" +#include "Branding.h" #include "utils/Logger.h" #include "utils/Variant.h" -const NamedEnumTable< PackageChooserMode >& -roleNames() +#include + +/** @brief A wrapper for CalamaresUtils::getSubMap that excludes the success param + */ +static QVariantMap +getSubMap( const QVariantMap& map, const QString& key ) { - static const NamedEnumTable< PackageChooserMode > names { - { "optional", PackageChooserMode::Optional }, - { "required", PackageChooserMode::Required }, - { "optionalmultiple", PackageChooserMode::OptionalMultiple }, - { "requiredmultiple", PackageChooserMode::RequiredMultiple }, - // and a bunch of aliases - { "zero-or-one", PackageChooserMode::Optional }, - { "radio", PackageChooserMode::Required }, - { "one", PackageChooserMode::Required }, - { "set", PackageChooserMode::OptionalMultiple }, - { "zero-or-more", PackageChooserMode::OptionalMultiple }, - { "multiple", PackageChooserMode::RequiredMultiple }, - { "one-or-more", PackageChooserMode::RequiredMultiple } - }; - return names; + bool success; + + return CalamaresUtils::getSubMap( map, key, success ); +} + +static QPixmap +loadScreenshot( const QString& path ) +{ + if ( QFileInfo::exists( path ) ) + { + return QPixmap( path ); + } + + const auto* branding = Calamares::Branding::instance(); + if ( !branding ) + { + return QPixmap(); + } + return QPixmap( branding->componentDirectory() + QStringLiteral( "/" ) + path ); } PackageItem::PackageItem() {} -PackageItem::PackageItem( const QString& a_id, - const QString& a_package, - const QString& a_name, - const QString& a_description ) +PackageItem::PackageItem( const QString& a_id, const QString& a_name, const QString& a_description ) : id( a_id ) - , package( a_package ) , name( a_name ) , description( a_description ) { } PackageItem::PackageItem( const QString& a_id, - const QString& a_package, const QString& a_name, const QString& a_description, const QString& screenshotPath ) : id( a_id ) - , package( a_package ) , name( a_name ) , description( a_description ) , screenshot( screenshotPath ) { } -PackageItem::PackageItem::PackageItem( const QVariantMap& item_map ) +PackageItem::PackageItem( const QVariantMap& item_map ) : id( CalamaresUtils::getString( item_map, "id" ) ) - , package( CalamaresUtils::getString( item_map, "package" ) ) , name( CalamaresUtils::Locale::TranslatedString( item_map, "name" ) ) , description( CalamaresUtils::Locale::TranslatedString( item_map, "description" ) ) - , screenshot( CalamaresUtils::getString( item_map, "screenshot" ) ) + , screenshot( loadScreenshot( CalamaresUtils::getString( item_map, "screenshot" ) ) ) + , packageNames( CalamaresUtils::getStringList( item_map, "packages" ) ) + , netinstallData( getSubMap( item_map, "netinstall" ) ) { if ( name.isEmpty() && id.isEmpty() ) { @@ -114,6 +109,52 @@ PackageListModel::addPackage( PackageItem&& p ) } } +QStringList +PackageListModel::getInstallPackagesForName( const QString& id ) const +{ + for ( const auto& p : qAsConst( m_packages ) ) + { + if ( p.id == id ) + { + return p.packageNames; + } + } + return QStringList(); +} + +QStringList +PackageListModel::getInstallPackagesForNames( const QStringList& ids ) const +{ + QStringList l; + for ( const auto& p : qAsConst( m_packages ) ) + { + if ( ids.contains( p.id ) ) + { + l.append( p.packageNames ); + } + } + return l; +} + +QVariantList +PackageListModel::getNetinstallDataForNames( const QStringList& ids ) const +{ + QVariantList l; + for ( auto& p : m_packages ) + { + if ( ids.contains( p.id ) ) + { + if ( !p.netinstallData.isEmpty() ) + { + QVariantMap newData = p.netinstallData; + newData[ "source" ] = QStringLiteral( "packageChooser" ); + l.append( newData ); + } + } + } + return l; +} + int PackageListModel::rowCount( const QModelIndex& index ) const { diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index ee3b30185..18682a121 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGEMODEL_H @@ -27,24 +18,15 @@ #include #include -enum class PackageChooserMode -{ - Optional, // zero or one - Required, // exactly one - OptionalMultiple, // zero or more - RequiredMultiple // one or more -}; - -const NamedEnumTable< PackageChooserMode >& roleNames(); struct PackageItem { QString id; - // FIXME: unused - QString package; CalamaresUtils::Locale::TranslatedString name; CalamaresUtils::Locale::TranslatedString description; QPixmap screenshot; + QStringList packageNames; + QVariantMap netinstallData; /// @brief Create blank PackageItem PackageItem(); @@ -53,7 +35,7 @@ struct PackageItem * This constructor sets all the text members, * but leaves the screenshot blank. Set that separately. */ - PackageItem( const QString& id, const QString& package, const QString& name, const QString& description ); + PackageItem( const QString& id, const QString& name, const QString& description ); /** @brief Creates a PackageItem from given strings. * @@ -61,17 +43,21 @@ struct PackageItem * @p screenshotPath, which may be a QRC path (:/path/in/qrc) or * a filesystem path, whatever QPixmap understands. */ - PackageItem( const QString& id, - const QString& package, - const QString& name, - const QString& description, - const QString& screenshotPath ); + PackageItem( const QString& id, const QString& name, const QString& description, const QString& screenshotPath ); /** @brief Creates a PackageItem from a QVariantMap * * This is intended for use when loading PackageItems from a * configuration map. It will look up the various keys in the map * and handle translation strings as well. + * + * The following keys are used: + * - *id*: the identifier for this item; if it is the empty string + * then this is the special "no-package". + * - *name* (and *name[lang]*): for the name and its translations + * - *description* (and *description[lang]*) + * - *screenshot*: a path to a screenshot for this package + * - *packages*: a list of package names */ PackageItem( const QVariantMap& map ); @@ -97,7 +83,7 @@ class PackageListModel : public QAbstractListModel public: PackageListModel( PackageList&& items, QObject* parent ); PackageListModel( QObject* parent ); - virtual ~PackageListModel() override; + ~PackageListModel() override; /** @brief Add a package @p to the model * @@ -113,6 +99,27 @@ public: /// @brief Direct (non-abstract) count of package data int packageCount() const { return m_packages.count(); } + /** @brief Does a name lookup (based on id) and returns the packages member + * + * If there is a package with the given @p id, returns its packages + * (e.g. the names of underlying packages to install for it); returns + * an empty list if the id is not found. + */ + QStringList getInstallPackagesForName( const QString& id ) const; + /** @brief Name-lookup all the @p ids and returns the packages members + * + * Concatenates installPackagesForName() for each id in @p ids. + */ + QStringList getInstallPackagesForNames( const QStringList& ids ) const; + + /** @brief Does a name lookup (based on id) and returns the netinstall data + * + * If there is a package with an id in @p ids, returns their netinstall data + * + * returns a list of netinstall data or an emply list if none is found + */ + QVariantList getNetinstallDataForNames( const QStringList& ids ) const; + enum Roles : int { NameRole = Qt::DisplayRole, diff --git a/src/modules/packagechooser/Tests.cpp b/src/modules/packagechooser/Tests.cpp index da355dc96..1365b1452 100644 --- a/src/modules/packagechooser/Tests.cpp +++ b/src/modules/packagechooser/Tests.cpp @@ -1,24 +1,15 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" -#ifdef HAVE_XML +#ifdef HAVE_APPDATA #include "ItemAppData.h" #endif #ifdef HAVE_APPSTREAM @@ -77,7 +68,8 @@ PackageChooserTests::testAppData() QCOMPARE( p1.description.get(), QStringLiteral( "Calamares is an installer program for Linux distributions." ) ); // .. but en_GB doesn't have an entry in description, so uses
QCOMPARE( p1.description.get( QLocale( "en_GB" ) ), QStringLiteral( "Calamares Linux Installer" ) ); - QCOMPARE( p1.description.get( QLocale( "nl" ) ), QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); + QCOMPARE( p1.description.get( QLocale( "nl" ) ), + QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); QVERIFY( p1.screenshot.isNull() ); m.insert( "id", "calamares" ); @@ -85,7 +77,8 @@ PackageChooserTests::testAppData() PackageItem p2 = fromAppData( m ); QVERIFY( p2.isValid() ); QCOMPARE( p2.id, QStringLiteral( "calamares" ) ); - QCOMPARE( p2.description.get( QLocale( "nl" ) ), QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); + QCOMPARE( p2.description.get( QLocale( "nl" ) ), + QStringLiteral( "Calamares is een installatieprogramma voor Linux distributies." ) ); QVERIFY( !p2.screenshot.isNull() ); #endif } diff --git a/src/modules/packagechooser/Tests.h b/src/modules/packagechooser/Tests.h index 62efe92cc..34ac2f682 100644 --- a/src/modules/packagechooser/Tests.h +++ b/src/modules/packagechooser/Tests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PACKAGECHOOSERTESTS_H diff --git a/src/modules/packagechooser/images/calamares.png.license b/src/modules/packagechooser/images/calamares.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/packagechooser/images/calamares.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/packagechooser/images/no-selection.png.license b/src/modules/packagechooser/images/no-selection.png.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/packagechooser/images/no-selection.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/packagechooser/packagechooser.conf b/src/modules/packagechooser/packagechooser.conf index 90611a64b..1fa5187ae 100644 --- a/src/modules/packagechooser/packagechooser.conf +++ b/src/modules/packagechooser/packagechooser.conf @@ -1,25 +1,54 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the low-density software chooser --- -# The packagechooser writes a GlobalStorage value for the choice that -# has been made. The key is *packagechooser_*. If *id* is set here, -# it is substituted into the key name. If it is not set, the module's -# instance name is used; see the *instances* section of `settings.conf`. -# If there is just one packagechooser module, and no *id* is set, -# resulting GS key is probably *packagechooser_packagechooser*. -# -# The GS value is a comma-separated list of the IDs of the selected -# packages, or an empty string if none is selected. -# -# id: "" - # Software selection mode, to set whether the software packages # can be chosen singly, or multiply. # -# Possible modes are "optional", "required" (for zero or one) +# Possible modes are "optional", "required" (for zero-or-one or exactly-one) # or "optionalmultiple", "requiredmultiple" (for zero-or-more # or one-or-more). mode: required +# Software installation method: +# +# - "legacy" or "custom" or "contextualprocess" +# When set to "legacy", writes a GlobalStorage value for the choice that +# has been made. The key is *packagechooser_*. The module's +# instance name is used; see the *instances* section of `settings.conf`. +# If there is just one packagechooser module, and no special instance is set, +# resulting GS key is probably *packagechooser_packagechooser*. +# +# The GS value is a comma-separated list of the IDs of the selected +# packages, or an empty string if none is selected. +# +# With "legacy" installation, you should have a contextualprocess or similar +# module somewhere in the `exec` phase to process the GlobalStorage key +# and actually **do** something for the packages. +# +# - "packages" +# When set to "packages", writes GlobalStorage values suitable for +# consumption by the *packages* module (which should appear later +# in the `exec` section. These package settings will then be handed +# off to whatever package manager is configured there. +# +# - "netinstall-select" +# When this is set, the id(s) selected are passed to the netinstall module. +# Any id that matches a group name in that module is set to checked +# +# - "netinstall-add" +# With this method, the packagechooser module is used to add groups to the +# netinstall module. For this to hav=e any effect. You must set netinstall, +# which is described below. +# +# There is no need to put this module in the `exec` section. There +# are no jobs that this module provides. You should put **other** +# modules, either *contextualprocess* or *packages* or some custom +# module, in the `exec` section to do the actual work. +method: legacy + + # Human-visible strings in this module. These are all optional. # The following translated keys are used: # - *step*, used in the overall progress view (left-hand pane) @@ -27,13 +56,13 @@ mode: required # Each key can have a [locale] added to it, which is used as # the translated string for that locale. For the strings # associated with the "no-selection" item, see *items*, below -# with the explicit id "". +# with the explicit item-*id* "". # labels: step: "Office Suite" step[de]: "Office-Paket" -# (Optional) 'id' of pre-selected list-view item. +# (Optional) item-*id* of pre-selected list-view item. # Pre-selects one of the items below. # default: kde @@ -46,27 +75,55 @@ labels: # as a source for the data. # # For data provided by the list: the item has an id, which is used in -# setting the value of *packagechooser_*. The following fields -# are mandatory: +# setting the value of *packagechooser_*. The following field +# is mandatory: # -# - *id* : ID for the product. The ID "" is special, and is used for -# "no package selected". Only include this if the mode allows -# selecting none. -# - *package* : Package name for the product. While mandatory, this is -# not actually used anywhere. -# - *name* : Human-readable name of the product. To provide translations, -# add a *[lang]* decoration as part of the key name, -# e.g. `name[nl]` for Dutch. -# The list of usable languages can be found in -# `CMakeLists.txt` or as part of the debug output of Calamares. -# - *description* : Human-readable description. These can be translated -# as well. -# - *screenshot* : Path to a single screenshot of the product. May be -# a filesystem path or a QRC path, -# e.g. ":/images/no-selection.png". +# - *id* +# ID for the product. The ID "" is special, and is used for +# "no package selected". Only include this if the mode allows +# selecting none. The name and description given for the "no package +# selected" item are displayed when the module starts. # -# Use the empty string "" as ID / key for the "no selection" item if -# you want to customize the display of that item as well. +# Each item must adhere to one of three "styles" of item. Which styles +# are supported depends on compile-time dependencies of Calamares. +# Both AppData and AppStream may **optionally** be available. +# +# # Generic Items # +# +# These items are always supported. They require the most configuration +# **in this file** and duplicate information that may be available elsewhere +# (e.g. in AppData or AppStream), but do not require any additional +# dependencies. These items have the following **mandatory** fields: +# +# - *name* +# Human-readable name of the product. To provide translations, +# add a *[lang]* decoration as part of the key name, e.g. `name[nl]` +# for Dutch. The list of usable languages can be found in +# `CMakeLists.txt` or as part of the debug output of Calamares. +# - *description* +# Human-readable description. These can be translated as well. +# - *screenshot* +# Path to a single screenshot of the product. May be a filesystem +# path or a QRC path, e.g. ":/images/no-selection.png". If the path +# is not found (e.g. is a non-existent absolute path, or is a relative +# path that does not exist in the current working directory) then +# an additional attempt is made to load the image from the **branding** +# directory. +# +# The following fields are **optional** for an item: +# +# - *packages* : +# List of package names for the product. If using the *method* +# "packages", consider this item mandatory (because otherwise +# selecting the item would install no packages). +# +# - *netinstall* : +# The data in this field should follow the format of a group +# from the netinstall module documented in +# src/modules/netinstall/netinstall.conf. This is only used +# when method is set to "netinstall-add" +# +# # AppData Items # # # For data provided by AppData XML: the item has an *appdata* # key which points to an AppData XML file in the local filesystem. @@ -81,6 +138,8 @@ labels: # **may** specify an ID or screenshot path, as above. This will override # the settings from AppData. # +# # AppStream Items # +# # For data provided by AppStream cache: the item has an *appstream* # key which matches the AppStream identifier in the cache (e.g. # *org.kde.kwrite.desktop*). Data is retrieved from the AppStream diff --git a/src/modules/packagechooser/page_package.ui b/src/modules/packagechooser/page_package.ui index 8349f2b52..d021b08b3 100644 --- a/src/modules/packagechooser/page_package.ui +++ b/src/modules/packagechooser/page_package.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + PackageChooserPage @@ -33,20 +37,26 @@ - + + + + 0 + 0 + + Product Name - + 1 - 0 + 1 @@ -60,9 +70,9 @@ - + 0 - 2 + 0 @@ -82,6 +92,13 @@ + + + FixedAspectRatioLabel + QLabel +
widgets/FixedAspectRatioLabel.h
+
+
diff --git a/src/modules/packagechooserq/CMakeLists.txt b/src/modules/packagechooserq/CMakeLists.txt new file mode 100644 index 000000000..51a17e215 --- /dev/null +++ b/src/modules/packagechooserq/CMakeLists.txt @@ -0,0 +1,69 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-FileCopyrightText: 2021 Anke Boersma +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "packagechooserq (QML is not supported in this build)" ) + return() +endif() + +find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core ) + +# Add optional libraries here +set( USER_EXTRA_LIB ) + +# include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../packagechooser ) +set( _packagechooser ${CMAKE_CURRENT_SOURCE_DIR}/../packagechooser ) +include_directories( ${_packagechooser} ) + +### OPTIONAL AppData XML support in PackageModel +# +# +# TODO:3.3:WITH->BUILD (this doesn't affect the ABI offered by Calamares) +option( WITH_APPDATA "Support appdata: items in PackageChooser (requires QtXml)" ON ) +if ( WITH_APPDATA ) + find_package(Qt5 COMPONENTS Xml) + if ( Qt5Xml_FOUND ) + add_definitions( -DHAVE_APPDATA ) + list( APPEND _extra_libraries Qt5::Xml ) + list( APPEND _extra_src ${_packagechooser}/ItemAppData.cpp ) + endif() +endif() + +### OPTIONAL AppStream support in PackageModel +# +# +option( WITH_APPSTREAM "Support appstream: items in PackageChooser (requires libappstream-qt)" ON ) +if ( WITH_APPSTREAM ) + find_package(AppStreamQt) + set_package_properties( + AppStreamQt PROPERTIES + DESCRIPTION "Support for AppStream (cache) data" + URL "https://github.com/ximion/appstream" + PURPOSE "AppStream provides package data" + TYPE OPTIONAL + ) + if ( AppStreamQt_FOUND ) + add_definitions( -DHAVE_APPSTREAM ) + list( APPEND _extra_libraries AppStreamQt ) + list( APPEND _extra_src ${_packagechooser}/ItemAppStream.cpp ) + endif() +endif() + +calamares_add_plugin( packagechooserq + TYPE viewmodule + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + PackageChooserQmlViewStep.cpp + ${_packagechooser}/Config.cpp + ${_packagechooser}/PackageModel.cpp + ${_extra_src} + RESOURCES + packagechooserq.qrc + LINK_PRIVATE_LIBRARIES + calamaresui + ${_extra_libraries} + SHARED_LIB +) diff --git a/src/modules/packagechooserq/PackageChooserQmlViewStep.cpp b/src/modules/packagechooserq/PackageChooserQmlViewStep.cpp new file mode 100644 index 000000000..ae4aa3c48 --- /dev/null +++ b/src/modules/packagechooserq/PackageChooserQmlViewStep.cpp @@ -0,0 +1,86 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "PackageChooserQmlViewStep.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "locale/TranslatableConfiguration.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserQmlViewStepFactory, registerPlugin< PackageChooserQmlViewStep >(); ) + +PackageChooserQmlViewStep::PackageChooserQmlViewStep( QObject* parent ) + : Calamares::QmlViewStep( parent ) + , m_config( new Config( this ) ) +{ + emit nextStatusChanged( true ); +} + +QString +PackageChooserQmlViewStep::prettyName() const +{ + return m_config->prettyName(); +} + +QString +PackageChooserQmlViewStep::prettyStatus() const +{ + //QString option = m_pkgc; + //return tr( "Install option: %1" ).arg( option ); + return m_config->prettyStatus(); +} + +bool +PackageChooserQmlViewStep::isNextEnabled() const +{ + return true; +} + +bool +PackageChooserQmlViewStep::isBackEnabled() const +{ + return true; +} + +bool +PackageChooserQmlViewStep::isAtBeginning() const +{ + return true; +} + +bool +PackageChooserQmlViewStep::isAtEnd() const +{ + return true; +} + +Calamares::JobList +PackageChooserQmlViewStep::jobs() const +{ + Calamares::JobList l; + return l; +} + +void +PackageChooserQmlViewStep::onLeave() +{ + m_config->updateGlobalStorage(); +} + +void +PackageChooserQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_config->setDefaultId( moduleInstanceKey() ); + m_config->setConfigurationMap( configurationMap ); + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last +} diff --git a/src/modules/packagechooserq/PackageChooserQmlViewStep.h b/src/modules/packagechooserq/PackageChooserQmlViewStep.h new file mode 100644 index 000000000..1ac2451c2 --- /dev/null +++ b/src/modules/packagechooserq/PackageChooserQmlViewStep.h @@ -0,0 +1,58 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef PACKAGECHOOSERQMLVIEWSTEP_H +#define PACKAGECHOOSERQMLVIEWSTEP_H + +// Config from packagechooser module +#include "Config.h" + +#include "DllMacro.h" +#include "locale/TranslatableConfiguration.h" +#include "utils/PluginFactory.h" +#include "viewpages/QmlViewStep.h" + +#include + +class Config; +class PackageChooserPage; + +class PLUGINDLLEXPORT PackageChooserQmlViewStep : public Calamares::QmlViewStep +{ + Q_OBJECT + +public: + explicit PackageChooserQmlViewStep( QObject* parent = nullptr ); + + QString prettyName() const override; + QString prettyStatus() const override; + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + //void onActivate() override; + void onLeave() override; + + Calamares::JobList jobs() const override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + + QObject* getConfig() override { return m_config; } + +private: + Config* m_config; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserQmlViewStepFactory ) + +#endif // PACKAGECHOOSERQMLVIEWSTEP_H diff --git a/src/modules/packagechooserq/images/libreoffice.jpg b/src/modules/packagechooserq/images/libreoffice.jpg new file mode 100644 index 000000000..e216cc77a Binary files /dev/null and b/src/modules/packagechooserq/images/libreoffice.jpg differ diff --git a/src/modules/packagechooserq/images/libreoffice.jpg.license b/src/modules/packagechooserq/images/libreoffice.jpg.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/packagechooserq/images/libreoffice.jpg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/packagechooserq/images/no-selection.png b/src/modules/packagechooserq/images/no-selection.png new file mode 100644 index 000000000..b32d21702 Binary files /dev/null and b/src/modules/packagechooserq/images/no-selection.png differ diff --git a/src/modules/packagechooserq/images/no-selection.png.license b/src/modules/packagechooserq/images/no-selection.png.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/packagechooserq/images/no-selection.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/packagechooserq/images/plasma.png b/src/modules/packagechooserq/images/plasma.png new file mode 100644 index 000000000..e9e35a528 Binary files /dev/null and b/src/modules/packagechooserq/images/plasma.png differ diff --git a/src/modules/packagechooserq/images/plasma.png.license b/src/modules/packagechooserq/images/plasma.png.license new file mode 100644 index 000000000..16c11f071 --- /dev/null +++ b/src/modules/packagechooserq/images/plasma.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2021 pngegg +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/packagechooserq/packagechooserq.conf b/src/modules/packagechooserq/packagechooserq.conf new file mode 100644 index 000000000..9c1878f34 --- /dev/null +++ b/src/modules/packagechooserq/packagechooserq.conf @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the low-density software chooser, QML implementation +# +# The example QML implementation uses single-selection, rather than +# a model for the available packages. That makes it simpler: the +# QML itself codes the available options, descriptions and images +# -- after all, this is **low density** selection, so a custom UI +# can make sense for the few choices that need to be made. +# +# + +--- +# Software installation method: +# +# - "legacy" or "custom" or "contextualprocess" +# When set to "legacy", writes a GlobalStorage value for the choice that +# has been made. The key is *packagechooser_*. The module's +# instance name is used; see the *instances* section of `settings.conf`. +# If there is just one packagechooserq module, and no special instance is set, +# resulting GS key is probably *packagechooser_packagechooserq*. +# (Do note that the prefix of the GS key remains "packagechooser_") +# +# The GS value is a comma-separated list of the IDs of the selected +# packages, or an empty string if none is selected. +# +# With "legacy" installation, you should have a contextualprocess or similar +# module somewhere in the `exec` phase to process the GlobalStorage key +# and actually **do** something for the packages. +# +# - "packages" +# When set to "packages", writes GlobalStorage values suitable for +# consumption by the *packages* module (which should appear later +# in the `exec` section. These package settings will then be handed +# off to whatever package manager is configured there. +# +# There is no need to put this module in the `exec` section. There +# are no jobs that this module provides. You should put **other** +# modules, either *contextualprocess* or *packages* or some custom +# module, in the `exec` section to do the actual work. +# +method: legacy + +# Human-visible strings in this module. These are all optional. +# The following translated keys are used: +# - *step*, used in the overall progress view (left-hand pane) +# +# Each key can have a [locale] added to it, which is used as +# the translated string for that locale. For the strings +# associated with the "no-selection" item, see *items*, below +# with the explicit item-*id* "". +# +labels: + step: "Packages" + step[nl]: "Pakketten" + +# The *packageChoice* value is used for setting the default selection +# in the QML view; this should match one of the keys used in the QML +# module for package names. +# +# (e.g. the sample QML uses "no_office_suite", "minimal_install" and +# "libreoffice" as possible choices). +# +packageChoice: libreoffice + diff --git a/src/modules/packagechooserq/packagechooserq.qml b/src/modules/packagechooserq/packagechooserq.qml new file mode 100644 index 000000000..7d1613582 --- /dev/null +++ b/src/modules/packagechooserq/packagechooserq.qml @@ -0,0 +1,241 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.3 + +Item { + width: parent.width + height: parent.height + + Rectangle { + anchors.fill: parent + color: "#f2f2f2" + + ButtonGroup { + id: switchGroup + } + + Column { + id: column + anchors.centerIn: parent + spacing: 5 + + Rectangle { + //id: rectangle + width: 700 + height: 150 + color: "#ffffff" + radius: 10 + border.width: 0 + Text { + width: 450 + height: 104 + anchors.centerIn: parent + text: qsTr("LibreOffice is a powerful and free office suite, used by millions of people around the world. It includes several applications that make it the most versatile Free and Open Source office suite on the market.
+ Default option.") + font.pointSize: 10 + anchors.verticalCenterOffset: -10 + anchors.horizontalCenterOffset: 100 + wrapMode: Text.WordWrap + } + + Switch { + id: element2 + x: 500 + y: 110 + width: 187 + height: 14 + text: qsTr("LibreOffice") + checked: true + hoverEnabled: true + ButtonGroup.group: switchGroup + + indicator: Rectangle { + implicitWidth: 40 + implicitHeight: 14 + radius: 10 + color: element2.checked ? "#3498db" : "#B9B9B9" + border.color: element2.checked ? "#3498db" : "#cccccc" + + Rectangle { + x: element2.checked ? parent.width - width : 0 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: 10 + color: element2.down ? "#cccccc" : "#ffffff" + border.color: element2.checked ? (element1.down ? "#3498db" : "#3498db") : "#999999" + } + } + + onCheckedChanged: { + if ( checked ) { + config.packageChoice = "libreoffice" + } + } + } + + Image { + id: image2 + x: 8 + y: 25 + height: 100 + fillMode: Image.PreserveAspectFit + source: "images/libreoffice.jpg" + } + } + + Rectangle { + width: 700 + height: 150 + radius: 10 + border.width: 0 + Text { + width: 450 + height: 104 + anchors.centerIn: parent + text: qsTr("If you don't want to install an office suite, just select No Office Suite. You can always add one (or more) later on your installed system as the need arrives.") + font.pointSize: 10 + anchors.verticalCenterOffset: -10 + anchors.horizontalCenterOffset: 100 + wrapMode: Text.WordWrap + } + + Switch { + id: element1 + x: 500 + y: 110 + width: 187 + height: 14 + text: qsTr("No Office Suite") + checked: false + hoverEnabled: true + ButtonGroup.group: switchGroup + + indicator: Rectangle { + implicitWidth: 40 + implicitHeight: 14 + radius: 10 + color: element1.checked ? "#3498db" : "#B9B9B9" + border.color: element1.checked ? "#3498db" : "#cccccc" + + Rectangle { + x: element1.checked ? parent.width - width : 0 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: 10 + color: element1.down ? "#cccccc" : "#ffffff" + border.color: element1.checked ? (element1.down ? "#3498db" : "#3498db") : "#999999" + } + } + + onCheckedChanged: { + if ( checked ) { + config.packageChoice = "no_office_suite" + } + } + } + + Image { + id: image + x: 8 + y: 25 + height: 100 + fillMode: Image.PreserveAspectFit + source: "images/no-selection.png" + } + + } + + Rectangle { + width: 700 + height: 150 + color: "#ffffff" + radius: 10 + border.width: 0 + Text { + width: 450 + height: 104 + anchors.centerIn: parent + text: qsTr("Create a minimal Desktop install, remove all extra applications and decide later on what you would like to add to your system. Examples of what won't be on such an install, there will be no Office Suite, no media players, no image viewer or print support. It will be just a desktop, file browser, package manager, text editor and simple web-browser.") + font.pointSize: 10 + anchors.verticalCenterOffset: -10 + anchors.horizontalCenterOffset: 100 + wrapMode: Text.WordWrap + } + + Switch { + id: element3 + x: 500 + y: 110 + width: 187 + height: 14 + text: qsTr("Minimal Install") + checked: false + hoverEnabled: true + ButtonGroup.group: switchGroup + + indicator: Rectangle { + implicitWidth: 40 + implicitHeight: 14 + radius: 10 + color: element3.checked ? "#3498db" : "#B9B9B9" + border.color: element3.checked ? "#3498db" : "#cccccc" + + Rectangle { + x: element3.checked ? parent.width - width : 0 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: 10 + color: element3.down ? "#cccccc" : "#ffffff" + border.color: element3.checked ? (element3.down ? "#3498db" : "#3498db") : "#999999" + } + } + + onCheckedChanged: { + if ( checked ) { + config.packageChoice = "minimal_install" + } + } + } + + Image { + id: image3 + x: 8 + y: 25 + height: 100 + fillMode: Image.PreserveAspectFit + source: "images/plasma.png" + } + } + + Rectangle { + width: 700 + height: 25 + color: "#f2f2f2" + border.width: 0 + Text { + height: 25 + anchors.centerIn: parent + text: qsTr("Please select an option for your install, or use the default: LibreOffice included.") + font.pointSize: 10 + wrapMode: Text.WordWrap + } + } + } + } + +} diff --git a/src/modules/packagechooserq/packagechooserq.qrc b/src/modules/packagechooserq/packagechooserq.qrc new file mode 100644 index 000000000..1b892dce1 --- /dev/null +++ b/src/modules/packagechooserq/packagechooserq.qrc @@ -0,0 +1,8 @@ + + + packagechooserq.qml + images/libreoffice.jpg + images/no-selection.png + images/plasma.png + + diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index 8f58cd6fb..e373a3443 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -1,27 +1,18 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Pier Luigi Fiorini -# Copyright 2015-2017, Teo Mrnjavac -# Copyright 2016-2017, Kyle Robbertze -# Copyright 2017, Alf Gaida -# Copyright 2018, Adriaan de Groot -# Copyright 2018, Philip Müller +# SPDX-FileCopyrightText: 2014 Pier Luigi Fiorini +# SPDX-FileCopyrightText: 2015-2017 Teo Mrnjavac +# SPDX-FileCopyrightText: 2016-2017 Kyle Robbertze +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2018 Adriaan de Groot +# SPDX-FileCopyrightText: 2018 Philip Müller +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import abc from string import Template @@ -44,6 +35,10 @@ total_packages = 0 # For the entire job completed_packages = 0 # Done so far for this job group_packages = 0 # One group of packages from an -install or -remove entry +# A PM object may set this to a string (take care of translations!) +# to override the string produced by pretty_status_message() +custom_status_message = None + INSTALL = object() REMOVE = object() mode_packages = None # Changes to INSTALL or REMOVE @@ -60,6 +55,8 @@ def pretty_name(): def pretty_status_message(): + if custom_status_message is not None: + return custom_status_message if not group_packages: if (total_packages > 0): # Outside the context of an operation @@ -160,99 +157,105 @@ class PackageManager(metaclass=abc.ABCMeta): self.remove([packagedata["package"]]) self.run(packagedata["post-script"]) + def operation_install(self, package_list, from_local=False): + """ + Installs the list of packages named in @p package_list . + These can be strings -- plain package names -- or + structures (with a pre- and post-install step). -class PMPackageKit(PackageManager): - backend = "packagekit" + This operation is called for "critical" packages, + which are expected to succeed, or fail, all together. + However, if there are packages with pre- or post-scripts, + then packages are installed one-by-one instead. + + NOTE: package managers may reimplement this method + NOTE: exceptions are expected to leave this method, to indicate + failure of the installation. + """ + if all([isinstance(x, str) for x in package_list]): + self.install(package_list, from_local=from_local) + else: + for package in package_list: + self.install_package(package, from_local=from_local) + + def operation_try_install(self, package_list): + """ + Installs the list of packages named in @p package_list . + These can be strings -- plain package names -- or + structures (with a pre- and post-install step). + + This operation is called for "non-critical" packages, + which can succeed or fail without affecting the overall installation. + Packages are installed one-by-one to support package managers + that do not have a "install as much as you can" mode. + + NOTE: package managers may reimplement this method + NOTE: no package-installation exceptions should be raised + """ + # we make a separate package manager call for each package so a + # single failing package won't stop all of them + for package in package_list: + try: + self.install_package(package) + except subprocess.CalledProcessError: + libcalamares.utils.warning("Could not install package %s" % package) + + def operation_remove(self, package_list): + """ + Removes the list of packages named in @p package_list . + These can be strings -- plain package names -- or + structures (with a pre- and post-install step). + + This operation is called for "critical" packages, which are + expected to succeed or fail all together. + However, if there are packages with pre- or post-scripts, + then packages are removed one-by-one instead. + + NOTE: package managers may reimplement this method + NOTE: exceptions should be raised to indicate failure + """ + if all([isinstance(x, str) for x in package_list]): + self.remove(package_list) + else: + for package in package_list: + self.remove_package(package) + + def operation_try_remove(self, package_list): + """ + Same relation as try_install has to install, except it removes + packages instead. Packages are removed one-by-one. + + NOTE: package managers may reimplement this method + NOTE: no package-installation exceptions should be raised + """ + for package in package_list: + try: + self.remove_package(package) + except subprocess.CalledProcessError: + libcalamares.utils.warning("Could not remove package %s" % package) + +### PACKAGE MANAGER IMPLEMENTATIONS +# +# Keep these alphabetical (presumably both by class name and backend name), +# even the Dummy implementation. +# + +class PMApk(PackageManager): + backend = "apk" def install(self, pkgs, from_local=False): for pkg in pkgs: - check_target_env_call(["pkcon", "-py", "install", pkg]) + check_target_env_call(["apk", "add", pkg]) def remove(self, pkgs): for pkg in pkgs: - check_target_env_call(["pkcon", "-py", "remove", pkg]) + check_target_env_call(["apk", "del", pkg]) def update_db(self): - check_target_env_call(["pkcon", "refresh"]) + check_target_env_call(["apk", "update"]) def update_system(self): - check_target_env_call(["pkcon", "-py", "update"]) - -class PMZypp(PackageManager): - backend = "zypp" - - def install(self, pkgs, from_local=False): - check_target_env_call(["zypper", "--non-interactive", - "--quiet-install", "install", - "--auto-agree-with-licenses", - "install"] + pkgs) - - def remove(self, pkgs): - check_target_env_call(["zypper", "--non-interactive", - "remove"] + pkgs) - - def update_db(self): - check_target_env_call(["zypper", "--non-interactive", "update"]) - - def update_system(self): - # Doesn't need to update the system explicitly - pass - -class PMYum(PackageManager): - backend = "yum" - - def install(self, pkgs, from_local=False): - check_target_env_call(["yum", "-y", "install"] + pkgs) - - def remove(self, pkgs): - check_target_env_call(["yum", "--disablerepo=*", "-C", "-y", - "remove"] + pkgs) - - def update_db(self): - # Doesn't need updates - pass - - def update_system(self): - check_target_env_call(["yum", "-y", "upgrade"]) - -class PMDnf(PackageManager): - backend = "dnf" - - def install(self, pkgs, from_local=False): - check_target_env_call(["dnf", "-y", "install"] + pkgs) - - def remove(self, pkgs): - # ignore the error code for now because dnf thinks removing a - # nonexistent package is an error - target_env_call(["dnf", "--disablerepo=*", "-C", "-y", - "remove"] + pkgs) - - def update_db(self): - # Doesn't need updates - pass - - def update_system(self): - check_target_env_call(["dnf", "-y", "upgrade"]) - - -class PMUrpmi(PackageManager): - backend = "urpmi" - - def install(self, pkgs, from_local=False): - check_target_env_call(["urpmi", "--download-all", "--no-suggests", - "--no-verify-rpm", "--fastunsafe", - "--ignoresize", "--nolock", - "--auto"] + pkgs) - - def remove(self, pkgs): - check_target_env_call(["urpme", "--auto"] + pkgs) - - def update_db(self): - check_target_env_call(["urpmi.update", "-a"]) - - def update_system(self): - # Doesn't need to update the system explicitly - pass + check_target_env_call(["apk", "upgrade", "--available"]) class PMApt(PackageManager): @@ -275,61 +278,24 @@ class PMApt(PackageManager): pass -class PMPacman(PackageManager): - backend = "pacman" +class PMDnf(PackageManager): + backend = "dnf" def install(self, pkgs, from_local=False): - if from_local: - pacman_flags = "-U" - else: - pacman_flags = "-S" - - check_target_env_call(["pacman", pacman_flags, - "--noconfirm"] + pkgs) + check_target_env_call(["dnf", "-y", "install"] + pkgs) def remove(self, pkgs): - check_target_env_call(["pacman", "-Rs", "--noconfirm"] + pkgs) + # ignore the error code for now because dnf thinks removing a + # nonexistent package is an error + target_env_call(["dnf", "--disablerepo=*", "-C", "-y", + "remove"] + pkgs) def update_db(self): - check_target_env_call(["pacman", "-Sy"]) - - def update_system(self): - check_target_env_call(["pacman", "-Su", "--noconfirm"]) - - -class PMPortage(PackageManager): - backend = "portage" - - def install(self, pkgs, from_local=False): - check_target_env_call(["emerge", "-v"] + pkgs) - - def remove(self, pkgs): - check_target_env_call(["emerge", "-C"] + pkgs) - check_target_env_call(["emerge", "--depclean", "-q"]) - - def update_db(self): - check_target_env_call(["emerge", "--sync"]) - - def update_system(self): - # Doesn't need to update the system explicitly + # Doesn't need updates pass - -class PMEntropy(PackageManager): - backend = "entropy" - - def install(self, pkgs, from_local=False): - check_target_env_call(["equo", "i"] + pkgs) - - def remove(self, pkgs): - check_target_env_call(["equo", "rm"] + pkgs) - - def update_db(self): - check_target_env_call(["equo", "update"]) - def update_system(self): - # Doesn't need to update the system explicitly - pass + check_target_env_call(["dnf", "-y", "upgrade"]) class PMDummy(PackageManager): @@ -355,6 +321,186 @@ class PMDummy(PackageManager): libcalamares.utils.debug("Dummy backend: Running script '" + str(script) + "'") +class PMEntropy(PackageManager): + backend = "entropy" + + def install(self, pkgs, from_local=False): + check_target_env_call(["equo", "i"] + pkgs) + + def remove(self, pkgs): + check_target_env_call(["equo", "rm"] + pkgs) + + def update_db(self): + check_target_env_call(["equo", "update"]) + + def update_system(self): + # Doesn't need to update the system explicitly + pass + + +class PMLuet(PackageManager): + backend = "luet" + + def install(self, pkgs, from_local=False): + check_target_env_call(["luet", "install", "-y"] + pkgs) + + def remove(self, pkgs): + check_target_env_call(["luet", "uninstall", "-y"] + pkgs) + + def update_db(self): + # Luet checks for DB update everytime its ran. + pass + + def update_system(self): + check_target_env_call(["luet", "upgrade", "-y"]) + + +class PMPackageKit(PackageManager): + backend = "packagekit" + + def install(self, pkgs, from_local=False): + for pkg in pkgs: + check_target_env_call(["pkcon", "-py", "install", pkg]) + + def remove(self, pkgs): + for pkg in pkgs: + check_target_env_call(["pkcon", "-py", "remove", pkg]) + + def update_db(self): + check_target_env_call(["pkcon", "refresh"]) + + def update_system(self): + check_target_env_call(["pkcon", "-py", "update"]) + + +class PMPacman(PackageManager): + backend = "pacman" + + def __init__(self): + import re + progress_match = re.compile("^\\((\\d+)/(\\d+)\\)") + + def line_cb(line): + if line.startswith(":: "): + self.in_package_changes = "package" in line or "hooks" in line + else: + if self.in_package_changes and line.endswith("...\n"): + # Update the message, untranslated; do not change the + # progress percentage, since there may be more "installing..." + # lines in the output for the group, than packages listed + # explicitly. We don't know how to calculate proper progress. + global custom_status_message + custom_status_message = "pacman: " + line.strip() + libcalamares.job.setprogress(self.progress_fraction) + libcalamares.utils.debug(line) + + self.in_package_changes = False + self.line_cb = line_cb + + pacman = libcalamares.job.configuration.get("pacman", None) + if pacman is None: + pacman = dict() + if type(pacman) is not dict: + libcalamares.utils.warning("Job configuration *pacman* will be ignored.") + pacman = dict() + self.pacman_num_retries = pacman.get("num_retries", 0) + self.pacman_disable_timeout = pacman.get("disable_download_timeout", False) + self.pacman_needed_only = pacman.get("needed_only", False) + + def reset_progress(self): + self.in_package_changes = False + # These are globals + self.progress_fraction = (completed_packages * 1.0 / total_packages) + + def run_pacman(self, command, callback=False): + """ + Call pacman in a loop until it is successful or the number of retries is exceeded + :param command: The pacman command to run + :param callback: An optional boolean that indicates if this pacman run should use the callback + :return: + """ + + pacman_count = 0 + while pacman_count <= self.pacman_num_retries: + pacman_count += 1 + try: + if False: # callback: + libcalamares.utils.target_env_process_output(command, self.line_cb) + else: + libcalamares.utils.target_env_process_output(command) + + return + except subprocess.CalledProcessError: + if pacman_count <= self.pacman_num_retries: + pass + else: + raise + + def install(self, pkgs, from_local=False): + command = ["pacman"] + + if from_local: + command.append("-U") + else: + command.append("-S") + + # Don't ask for user intervention, take the default action + command.append("--noconfirm") + + # Don't report download progress for each file + command.append("--noprogressbar") + + if self.pacman_needed_only is True: + command.append("--needed") + + if self.pacman_disable_timeout is True: + command.append("--disable-download-timeout") + + command += pkgs + + self.reset_progress() + self.run_pacman(command, True) + + def remove(self, pkgs): + self.reset_progress() + self.run_pacman(["pacman", "-Rs", "--noconfirm"] + pkgs, True) + + def update_db(self): + self.run_pacman(["pacman", "-Sy"]) + + def update_system(self): + command = ["pacman", "-Su", "--noconfirm"] + if self.pacman_disable_timeout is True: + command.append("--disable-download-timeout") + + self.run_pacman(command) + + +class PMPamac(PackageManager): + backend = "pamac" + + def del_db_lock(self, lock="/var/lib/pacman/db.lck"): + # In case some error or crash, the database will be locked, + # resulting in remaining packages not being installed. + check_target_env_call(["rm", "-f", lock]) + + def install(self, pkgs, from_local=False): + self.del_db_lock() + check_target_env_call([self.backend, "install", "--no-confirm"] + pkgs) + + def remove(self, pkgs): + self.del_db_lock() + check_target_env_call([self.backend, "remove", "--no-confirm"] + pkgs) + + def update_db(self): + self.del_db_lock() + check_target_env_call([self.backend, "update", "--no-confirm"]) + + def update_system(self): + self.del_db_lock() + check_target_env_call([self.backend, "upgrade", "--no-confirm"]) + + class PMPisi(PackageManager): backend = "pisi" @@ -372,22 +518,77 @@ class PMPisi(PackageManager): pass -class PMApk(PackageManager): - backend = "apk" +class PMPortage(PackageManager): + backend = "portage" def install(self, pkgs, from_local=False): - for pkg in pkgs: - check_target_env_call(["apk", "add", pkg]) + check_target_env_call(["emerge", "-v"] + pkgs) def remove(self, pkgs): - for pkg in pkgs: - check_target_env_call(["apk", "del", pkg]) + check_target_env_call(["emerge", "-C"] + pkgs) + check_target_env_call(["emerge", "--depclean", "-q"]) def update_db(self): - check_target_env_call(["apk", "update"]) + check_target_env_call(["emerge", "--sync"]) def update_system(self): - check_target_env_call(["apk", "upgrade", "--available"]) + # Doesn't need to update the system explicitly + pass + + +class PMXbps(PackageManager): + backend = "xbps" + + def install(self, pkgs, from_local=False): + check_target_env_call(["xbps-install", "-Sy"] + pkgs) + + def remove(self, pkgs): + check_target_env_call(["xbps-remove", "-Ry", "--noconfirm"] + pkgs) + + def update_db(self): + check_target_env_call(["xbps-install", "-S"]) + + def update_system(self): + check_target_env_call(["xbps", "-Suy"]) + + +class PMYum(PackageManager): + backend = "yum" + + def install(self, pkgs, from_local=False): + check_target_env_call(["yum", "-y", "install"] + pkgs) + + def remove(self, pkgs): + check_target_env_call(["yum", "--disablerepo=*", "-C", "-y", + "remove"] + pkgs) + + def update_db(self): + # Doesn't need updates + pass + + def update_system(self): + check_target_env_call(["yum", "-y", "upgrade"]) + + +class PMZypp(PackageManager): + backend = "zypp" + + def install(self, pkgs, from_local=False): + check_target_env_call(["zypper", "--non-interactive", + "--quiet-install", "install", + "--auto-agree-with-licenses", + "install"] + pkgs) + + def remove(self, pkgs): + check_target_env_call(["zypper", "--non-interactive", + "remove"] + pkgs) + + def update_db(self): + check_target_env_call(["zypper", "--non-interactive", "update"]) + + def update_system(self): + # Doesn't need to update the system explicitly + pass # Collect all the subclasses of PackageManager defined above, @@ -465,45 +666,19 @@ def run_operations(pkgman, entry): group_packages = len(package_list) if key == "install": _change_mode(INSTALL) - if all([isinstance(x, str) for x in package_list]): - pkgman.install(package_list) - else: - for package in package_list: - pkgman.install_package(package) + pkgman.operation_install(package_list) elif key == "try_install": _change_mode(INSTALL) - # we make a separate package manager call for each package so a - # single failing package won't stop all of them - for package in package_list: - try: - pkgman.install_package(package) - except subprocess.CalledProcessError: - warn_text = "Could not install package " - warn_text += str(package) - libcalamares.utils.warning(warn_text) + pkgman.operation_try_install(package_list) elif key == "remove": _change_mode(REMOVE) - if all([isinstance(x, str) for x in package_list]): - pkgman.remove(package_list) - else: - for package in package_list: - pkgman.remove_package(package) + pkgman.operation_remove(package_list) elif key == "try_remove": _change_mode(REMOVE) - for package in package_list: - try: - pkgman.remove_package(package) - except subprocess.CalledProcessError: - warn_text = "Could not remove package " - warn_text += str(package) - libcalamares.utils.warning(warn_text) + pkgman.operation_try_remove(package_list) elif key == "localInstall": _change_mode(INSTALL) - if all([isinstance(x, str) for x in package_list]): - pkgman.install(package_list, from_local=True) - else: - for package in package_list: - pkgman.install_package(package, from_local=True) + pkgman.operation_install(package_list, from_local=True) elif key == "source": libcalamares.utils.debug("Package-list from {!s}".format(entry[key])) else: @@ -541,11 +716,27 @@ def run(): update_db = libcalamares.job.configuration.get("update_db", False) if update_db and libcalamares.globalstorage.value("hasInternet"): - pkgman.update_db() + try: + pkgman.update_db() + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Package Manager error"), + _("The package manager could not prepare updates. The command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) update_system = libcalamares.job.configuration.get("update_system", False) if update_system and libcalamares.globalstorage.value("hasInternet"): - pkgman.update_system() + try: + pkgman.update_system() + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Package Manager error"), + _("The package manager could not update the system. The command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) operations = libcalamares.job.configuration.get("operations", []) if libcalamares.globalstorage.contains("packageOperations"): @@ -565,11 +756,18 @@ def run(): for entry in operations: group_packages = 0 libcalamares.utils.debug(pretty_name()) - run_operations(pkgman, entry) + try: + run_operations(pkgman, entry) + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Package Manager error"), + _("The package manager could not make changes to the installed system. The command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) mode_packages = None libcalamares.job.setprogress(1.0) - libcalamares.utils.debug(pretty_name()) return None diff --git a/src/modules/packages/module.desc b/src/modules/packages/module.desc index 6a0423614..3e3053bfa 100644 --- a/src/modules/packages/module.desc +++ b/src/modules/packages/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "packages" diff --git a/src/modules/packages/packages.conf b/src/modules/packages/packages.conf index 032794177..6e62f4b5f 100644 --- a/src/modules/packages/packages.conf +++ b/src/modules/packages/packages.conf @@ -1,16 +1,38 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# The configuration for the package manager starts with the +# *backend* key, which picks one of the backends to use. +# In `main.py` there is a base class `PackageManager`. +# Implementations must subclass that and set a (class-level) +# property *backend* to the name of the backend (e.g. "dummy"). +# That property is used to match against the *backend* key here. +# +# You will have to add such a class for your package manager. +# It is fairly simple Python code. The API is described in the +# abstract methods in class `PackageManager`. Mostly, the only +# trick is to figure out the correct commands to use, and in particular, +# whether additional switches are required or not. Some package managers +# have more installer-friendly defaults than others, e.g., DNF requires +# passing --disablerepo=* -C to allow removing packages without Internet +# connectivity, and it also returns an error exit code if the package did +# not exist to begin with. --- # # Which package manager to use, options are: -# - packagekit - PackageKit CLI tool -# - zypp - Zypp RPM frontend -# - yum - Yum RPM frontend -# - dnf - DNF, the new RPM frontend -# - urpmi - Mandriva package manager +# - apk - Alpine Linux package manager # - apt - APT frontend for DEB and RPM +# - dnf - DNF, the new RPM frontend +# - entropy - Sabayon package manager (is being deprecated) +# - luet - Sabayon package manager (next-gen) +# - packagekit - PackageKit CLI tool # - pacman - Pacman +# - pamac - Manjaro package manager # - portage - Gentoo package manager -# - entropy - Sabayon package manager -# - apk = Alpine Linux package manager +# - yum - Yum RPM frontend +# - zypp - Zypp RPM frontend +# +# Not actually a package manager, but suitable for testing: # - dummy - Dummy manager, only logs # backend: dummy @@ -40,6 +62,23 @@ skip_if_no_internet: false update_db: true update_system: false +# pacman specific options +# +# *num_retries* should be a positive integer which specifies the +# number of times the call to pacman will be retried in the event of a +# failure. If it is missing, it will be set to 0. +# +# *disable_download_timeout* is a boolean that, when true, includes +# the flag --disable-download-timeout on calls to pacman. When missing, +# false is assumed. +# +# *needed_only* is a boolean that includes the pacman argument --needed +# when set to true. If missing, false is assumed. +pacman: + num_retries: 0 + disable_download_timeout: false + needed_only: false + # # List of maps with package operations such as install or remove. # Distro developers can provide a list of packages to remove diff --git a/src/modules/packages/packages.schema.yaml b/src/modules/packages/packages.schema.yaml new file mode 100644 index 000000000..d12f0507e --- /dev/null +++ b/src/modules/packages/packages.schema.yaml @@ -0,0 +1,53 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/packages +additionalProperties: false +type: object +properties: + backend: + type: string + enum: + - apk + - apt + - dnf + - entropy + - luet + - packagekit + - pacman + - pamac + - portage + - yum + - zypp + - dummy + + update_db: { type: boolean, default: true } + update_system: { type: boolean, default: false } + skip_if_no_internet: { type: boolean, default: false } + + pacman: + additionalProperties: false + type: object + properties: + num_retries: { type: integer, default: 0 } + disable_download_timeout: { type: boolean, default: false } + needed_only: { type: boolean, default: false } + + operations: + type: array + items: + additionalProperties: false + type: object + properties: + # TODO: these are either-string-or-struct items, + # need their own little schema. + install: { type: array } + remove: { type: array } + try_install: { type: array } + try_remove: { type: array } + localInstall: { type: array } + source: { type: string } + + +required: [ backend ] diff --git a/src/modules/packages/tests/1.global b/src/modules/packages/tests/1.global new file mode 100644 index 000000000..ee06ccfe1 --- /dev/null +++ b/src/modules/packages/tests/1.global @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +rootMountPoint: /tmp diff --git a/src/modules/packages/test.yaml b/src/modules/packages/tests/2.job similarity index 73% rename from src/modules/packages/test.yaml rename to src/modules/packages/tests/2.job index 8902b657a..ba205ed44 100644 --- a/src/modules/packages/test.yaml +++ b/src/modules/packages/tests/2.job @@ -1,5 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 backend: dummy -rootMountPoint: /tmp/mount operations: - install: - pre-script: touch /tmp/foo diff --git a/src/modules/packages/tests/CMakeTests.txt b/src/modules/packages/tests/CMakeTests.txt new file mode 100644 index 000000000..4f7d6185f --- /dev/null +++ b/src/modules/packages/tests/CMakeTests.txt @@ -0,0 +1,42 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# We have tests to load (some) of the package-managers specifically, to +# test their configuration code and implementation. Those tests conventionally +# live in Python files here in the tests/ directory. Add them. + +# Pacman (Arch) tests +set(_pm pacman) +add_test( + NAME configure-packages-${_pm} + COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-pm-${_pm}.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) +add_test( + NAME configure-packages-${_pm}-ops-1 + COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-pm-${_pm}.py ${CMAKE_CURRENT_LIST_DIR}/pm-pacman-1.yaml 4 1 1 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) +add_test( + NAME configure-packages-${_pm}-ops-2 + COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-pm-${_pm}.py ${CMAKE_CURRENT_LIST_DIR}/pm-pacman-2.yaml 3 0 0 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) + +if ( BUILD_TESTING AND BUILD_SCHEMA_TESTING AND PYTHONINTERP_FOUND AND PYTHON_EXECUTABLE ) + set( _module packages ) + set( _schema_file "${CMAKE_CURRENT_SOURCE_DIR}/${_module}/${_module}.schema.yaml" ) + message(STATUS "Schema ${_schema_file}") + foreach( _cf pm-pacman-1.yaml pm-pacman-2.yaml ) + set( _conf_file "${CMAKE_CURRENT_SOURCE_DIR}/${_module}/tests/${_cf}" ) + if ( EXISTS "${_schema_file}" AND EXISTS "${_conf_file}" ) + add_test( + NAME validate-packages-${_cf} + COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/ci/configvalidator.py" "${_schema_file}" "${_conf_file}" + ) + else() + message(FATAL_ERROR "Missing ${_conf_file}") + endif() + endforeach() +endif() + diff --git a/src/modules/packages/tests/pm-pacman-1.yaml b/src/modules/packages/tests/pm-pacman-1.yaml new file mode 100644 index 000000000..aeb5b8625 --- /dev/null +++ b/src/modules/packages/tests/pm-pacman-1.yaml @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +backend: pacman +operations: [] + +pacman: + num_retries: 4 + disable_download_timeout: true + needed_only: true + diff --git a/src/modules/packages/tests/pm-pacman-2.yaml b/src/modules/packages/tests/pm-pacman-2.yaml new file mode 100644 index 000000000..8b0bda397 --- /dev/null +++ b/src/modules/packages/tests/pm-pacman-2.yaml @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +backend: pacman +operations: [] + +# Leave some things unspecified +pacman: + num_retries: 3 + diff --git a/src/modules/packages/tests/test-pm-pacman.py b/src/modules/packages/tests/test-pm-pacman.py new file mode 100644 index 000000000..ee814b620 --- /dev/null +++ b/src/modules/packages/tests/test-pm-pacman.py @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Calamares Boilerplate +import libcalamares +libcalamares.globalstorage = libcalamares.GlobalStorage(None) +libcalamares.globalstorage.insert("testing", True) + +# Module prep-work +from src.modules.packages import main + +# .. we don't have a job in this test, so fake one +class Job(object): + def __init__(self, filename): + self.configuration = libcalamares.utils.load_yaml(filename) if filename is not None else dict() + +import sys +if len(sys.argv) > 4: + filename = sys.argv[1] + retry = int(sys.argv[2]) + timeout = bool(int(sys.argv[3])) + needed = bool(int(sys.argv[4])) +else: + filename = None + retry = 0 + timeout = False + needed = False + +libcalamares.utils.warning("Expecting {!s} retry={!s} timeout={!s} needed={!s}".format(filename, retry, timeout, needed)) + +# Specific PM test +libcalamares.job = Job(filename) +p = main.PMPacman() +assert p.pacman_num_retries == retry, "{!r} vs {!r}".format(p.pacman_num_retries, retry) +assert p.pacman_disable_timeout == timeout, "{!r} vs {!r}".format(p.pacman_disable_timeout, timeout) +assert p.pacman_needed_only == needed, "{!r} vs {!r}".format(p.pacman_needed_only, needed) diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 2f9474a29..940aacdd8 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -1,42 +1,56 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # When debugging the partitioning widget, or experimenting, you may # want to allow unsafe partitioning choices (e.g. doing things to the # current disk). Set DEBUG_PARTITION_UNSAFE to allow that (it turns off -# some filtering of devices). +# some filtering of devices). If you **do** allow unsafe partitioning, +# it will error out at runtime unless you **also** switch **off** +# DEBUG_PARTITION_BAIL_OUT, at which point you are welcome to shoot +# yourself in the foot. +# +# Independently, DEBUG_PARTITION_SKIP will not do the actual partitioning +# through KPMCore, but it **will** save the global storage setup as if +# it has done the partitioning. This is going to confuse subsequent +# modules since the partitions on disk won't match GS, but it can be +# useful for debugging simulated installations that don't need to +# mount the target filesystems. option( DEBUG_PARTITION_UNSAFE "Allow unsafe partitioning choices." OFF ) -option( DEBUG_PARTITION_LAME "Unsafe partitioning will error out on exec." ON ) +option( DEBUG_PARTITION_BAIL_OUT "Unsafe partitioning will error out on exec." ON ) +option( DEBUG_PARTITION_SKIP "Don't actually do any partitioning." OFF) + +# This is very chatty, useful mostly if you don't know what KPMCore offers. +option( DEBUG_FILESYSTEMS "Log all available Filesystems from KPMCore." OFF ) include_directories( ${CMAKE_SOURCE_DIR} ) # For 3rdparty set( _partition_defs ) if( DEBUG_PARTITION_UNSAFE ) - if( DEBUG_PARTITION_LAME ) - list( APPEND _partition_defs DEBUG_PARTITION_LAME ) + if( DEBUG_PARTITION_BAIL_OUT ) + list( APPEND _partition_defs DEBUG_PARTITION_BAIL_OUT ) endif() list( APPEND _partition_defs DEBUG_PARTITION_UNSAFE ) endif() +if ( DEBUG_FILESYSTEMS ) + list( APPEND _partition_defs DEBUG_FILESYSTEMS ) +endif() +if( DEBUG_PARTITION_SKIP ) + list( APPEND _partition_defs DEBUG_PARTITION_SKIP ) +endif() find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) -find_package( KPMcore 3.3 ) -set_package_properties( - KPMcore PROPERTIES - PURPOSE "For partition module" -) +include( KPMcoreHelper ) + find_package( KF5Config CONFIG ) find_package( KF5I18n CONFIG ) find_package( KF5WidgetsAddons CONFIG ) if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND ) - if ( KPMcore_VERSION VERSION_GREATER "3.3.0") - list( APPEND _partition_defs WITH_KPMCORE331API) # kpmcore > 3.3.0 with deprecations - endif() - if ( KPMcore_VERSION VERSION_GREATER "3.90") - list( APPEND _partition_defs WITH_KPMCORE4API) # kpmcore 4 with new API - endif() - if( KPMcore_VERSION VERSION_GREATER_EQUAL "4.2" ) - list( APPEND _partition_defs WITH_KPMCORE42API) # kpmcore 4.2 with new API - endif() - + list( APPEND _partition_defs ${KPMcore_API_DEFINITIONS} ) include_directories( ${KPMCORE_INCLUDE_DIR} ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) @@ -46,6 +60,9 @@ if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES + Config.cpp + PartitionViewStep.cpp + core/BootLoaderModel.cpp core/ColorUtils.cpp core/DeviceList.cpp @@ -71,12 +88,12 @@ if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND gui/PartitionLabelsView.cpp gui/PartitionSizeController.cpp gui/PartitionSplitterWidget.cpp - gui/PartitionViewStep.cpp - gui/PrettyRadioButton.cpp gui/ResizeVolumeGroupDialog.cpp gui/ScanningDialog.cpp gui/ReplaceWidget.cpp gui/VolumeGroupBaseDialog.cpp + jobs/AutoMountManagementJob.cpp + jobs/ChangeFilesystemLabelJob.cpp jobs/ClearMountsJob.cpp jobs/ClearTempMountsJob.cpp jobs/CreatePartitionJob.cpp @@ -102,7 +119,6 @@ if ( KPMcore_FOUND AND Qt5DBus_FOUND AND KF5CoreAddons_FOUND AND KF5Config_FOUND gui/VolumeGroupBaseDialog.ui LINK_PRIVATE_LIBRARIES kpmcore - calamaresui KF5::CoreAddons COMPILE_DEFINITIONS ${_partition_defs} SHARED_LIB @@ -114,3 +130,4 @@ else() calamares_skip_module( "partition (missing dependencies for KPMcore)" ) endif() endif() + diff --git a/src/modules/partition/Config.cpp b/src/modules/partition/Config.cpp new file mode 100644 index 000000000..367c4ee38 --- /dev/null +++ b/src/modules/partition/Config.cpp @@ -0,0 +1,377 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "core/PartUtils.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "partition/PartitionSize.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +Config::Config( QObject* parent ) + : QObject( parent ) +{ +} + +const NamedEnumTable< Config::InstallChoice >& +Config::installChoiceNames() +{ + static const NamedEnumTable< InstallChoice > names { { QStringLiteral( "none" ), InstallChoice::NoChoice }, + { QStringLiteral( "nochoice" ), InstallChoice::NoChoice }, + { QStringLiteral( "alongside" ), InstallChoice::Alongside }, + { QStringLiteral( "erase" ), InstallChoice::Erase }, + { QStringLiteral( "replace" ), InstallChoice::Replace }, + { QStringLiteral( "manual" ), InstallChoice::Manual } }; + return names; +} + +const NamedEnumTable< Config::SwapChoice >& +Config::swapChoiceNames() +{ + static const NamedEnumTable< SwapChoice > names { { QStringLiteral( "none" ), SwapChoice::NoSwap }, + { QStringLiteral( "small" ), SwapChoice::SmallSwap }, + { QStringLiteral( "suspend" ), SwapChoice::FullSwap }, + { QStringLiteral( "reuse" ), SwapChoice::ReuseSwap }, + { QStringLiteral( "file" ), SwapChoice::SwapFile } }; + + return names; +} + +Config::SwapChoice +pickOne( const Config::SwapChoiceSet& s ) +{ + if ( s.count() == 0 ) + { + return Config::SwapChoice::NoSwap; + } + if ( s.count() == 1 ) + { + return *( s.begin() ); + } + if ( s.contains( Config::SwapChoice::NoSwap ) ) + { + return Config::SwapChoice::NoSwap; + } + // Here, count > 1 but NoSwap is not a member. + return *( s.begin() ); +} + + +static Config::SwapChoiceSet +getSwapChoices( const QVariantMap& configurationMap ) +{ + // SWAP SETTINGS + // + // This is a bit convoluted because there's legacy settings to handle as well + // as the new-style list of choices, with mapping back-and-forth. + if ( configurationMap.contains( "userSwapChoices" ) + && ( configurationMap.contains( "ensureSuspendToDisk" ) || configurationMap.contains( "neverCreateSwap" ) ) ) + { + cError() << "Partition-module configuration mixes old- and new-style swap settings."; + } + + if ( configurationMap.contains( "ensureSuspendToDisk" ) ) + { + cWarning() << "Partition-module setting *ensureSuspendToDisk* is deprecated."; + } + bool ensureSuspendToDisk = CalamaresUtils::getBool( configurationMap, "ensureSuspendToDisk", true ); + + if ( configurationMap.contains( "neverCreateSwap" ) ) + { + cWarning() << "Partition-module setting *neverCreateSwap* is deprecated."; + } + bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false ); + + Config::SwapChoiceSet choices; // Available swap choices + if ( configurationMap.contains( "userSwapChoices" ) ) + { + // We've already warned about overlapping settings with the + // legacy *ensureSuspendToDisk* and *neverCreateSwap*. + QStringList l = configurationMap[ "userSwapChoices" ].toStringList(); + + for ( const auto& item : l ) + { + bool ok = false; + auto v = Config::swapChoiceNames().find( item, ok ); + if ( ok ) + { + choices.insert( v ); + } + } + + if ( choices.isEmpty() ) + { + cWarning() << "Partition-module configuration for *userSwapChoices* is empty:" << l; + choices.insert( Config::SwapChoice::FullSwap ); + } + + // suspend if it's one of the possible choices; suppress swap only if it's + // the **only** choice available. + ensureSuspendToDisk = choices.contains( Config::SwapChoice::FullSwap ); + neverCreateSwap = ( choices.count() == 1 ) && choices.contains( Config::SwapChoice::NoSwap ); + } + else + { + // Convert the legacy settings into a single setting for now. + if ( neverCreateSwap ) + { + choices.insert( Config::SwapChoice::NoSwap ); + } + else if ( ensureSuspendToDisk ) + { + choices.insert( Config::SwapChoice::FullSwap ); + } + else + { + choices.insert( Config::SwapChoice::SmallSwap ); + } + } + + // Not all are supported right now // FIXME + static const char unsupportedSetting[] = "Partition-module does not support *userSwapChoices* setting"; + +#define COMPLAIN_UNSUPPORTED( x ) \ + if ( choices.contains( x ) ) \ + { \ + bool bogus = false; \ + cWarning() << unsupportedSetting << Config::swapChoiceNames().find( x, bogus ); \ + choices.remove( x ); \ + } + + COMPLAIN_UNSUPPORTED( Config::SwapChoice::ReuseSwap ) +#undef COMPLAIN_UNSUPPORTED + + return choices; +} + +void +updateGlobalStorage( Config::InstallChoice installChoice, Config::SwapChoice swapChoice ) +{ + auto* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + if ( gs ) + { + QVariantMap m; + m.insert( "install", Config::installChoiceNames().find( installChoice ) ); + m.insert( "swap", Config::swapChoiceNames().find( swapChoice ) ); + gs->insert( "partitionChoices", m ); + } +} + +void +Config::setInstallChoice( int c ) +{ + if ( ( c < InstallChoice::NoChoice ) || ( c > InstallChoice::Manual ) ) + { + cWarning() << "Invalid install choice (int)" << c; + c = InstallChoice::NoChoice; + } + setInstallChoice( static_cast< InstallChoice >( c ) ); +} + +void +Config::setInstallChoice( InstallChoice c ) +{ + if ( c != m_installChoice ) + { + m_installChoice = c; + Q_EMIT installChoiceChanged( c ); + ::updateGlobalStorage( c, m_swapChoice ); + } +} + +void +Config::setSwapChoice( int c ) +{ + if ( ( c < SwapChoice::NoSwap ) || ( c > SwapChoice::SwapFile ) ) + { + cWarning() << "Invalid swap choice (int)" << c; + c = SwapChoice::NoSwap; + } + setSwapChoice( static_cast< SwapChoice >( c ) ); +} + +void +Config::setSwapChoice( Config::SwapChoice c ) +{ + if ( c != m_swapChoice ) + { + m_swapChoice = c; + Q_EMIT swapChoiceChanged( c ); + ::updateGlobalStorage( m_installChoice, c ); + } +} + +void +Config::setEraseFsTypeChoice( const QString& choice ) +{ + QString canonicalChoice = PartUtils::canonicalFilesystemName( choice, nullptr ); + if ( canonicalChoice != m_eraseFsTypeChoice ) + { + m_eraseFsTypeChoice = canonicalChoice; + Q_EMIT eraseModeFilesystemChanged( canonicalChoice ); + } +} + +bool +Config::acceptPartitionTableType( PartitionTable::TableType tableType ) const +{ + return m_requiredPartitionTableType.empty() + || m_requiredPartitionTableType.contains( PartitionTable::tableTypeToName( tableType ) ); +} + + +static void +fillGSConfigurationEFI( Calamares::GlobalStorage* gs, const QVariantMap& configurationMap ) +{ + // Set up firmwareType global storage entry. This is used, e.g. by the bootloader module. + QString firmwareType( PartUtils::isEfiSystem() ? QStringLiteral( "efi" ) : QStringLiteral( "bios" ) ); + gs->insert( "firmwareType", firmwareType ); + + gs->insert( "efiSystemPartition", + CalamaresUtils::getString( configurationMap, "efiSystemPartition", QStringLiteral( "/boot/efi" ) ) ); + + // Read and parse key efiSystemPartitionSize + if ( configurationMap.contains( "efiSystemPartitionSize" ) ) + { + const QString sizeString = CalamaresUtils::getString( configurationMap, "efiSystemPartitionSize" ); + CalamaresUtils::Partition::PartitionSize part_size = CalamaresUtils::Partition::PartitionSize( sizeString ); + if ( part_size.isValid() ) + { + // Insert once as string, once as a size-in-bytes; + // changes to these keys should be synchronized with PartUtils.cpp + gs->insert( "efiSystemPartitionSize", sizeString ); + gs->insert( "efiSystemPartitionSize_i", part_size.toBytes() ); + + // Assign long long int to long unsigned int to prevent compilation warning + size_t unsigned_part_size = part_size.toBytes(); + if ( unsigned_part_size != PartUtils::efiFilesystemMinimumSize() ) + { + cWarning() << "EFI partition size" << sizeString << "has been adjusted to" + << PartUtils::efiFilesystemMinimumSize() << "bytes"; + } + } + else + { + cWarning() << "EFI partition size" << sizeString << "is invalid, ignored"; + } + } + + // Read and parse key efiSystemPartitionName + if ( configurationMap.contains( "efiSystemPartitionName" ) ) + { + gs->insert( "efiSystemPartitionName", CalamaresUtils::getString( configurationMap, "efiSystemPartitionName" ) ); + } +} + +void +Config::fillConfigurationFSTypes( const QVariantMap& configurationMap ) +{ + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + + + // The defaultFileSystemType setting needs a bit more processing, + // as we want to cover various cases (such as different cases) + QString fsName = CalamaresUtils::getString( configurationMap, "defaultFileSystemType" ); + QString fsRealName; + FileSystem::Type fsType = FileSystem::Type::Unknown; + if ( fsName.isEmpty() ) + { + cWarning() << "Partition-module setting *defaultFileSystemType* is missing, will use ext4"; + fsRealName = PartUtils::canonicalFilesystemName( QStringLiteral( "ext4" ), &fsType ); + } + else + { + fsRealName = PartUtils::canonicalFilesystemName( fsName, &fsType ); + if ( fsType == FileSystem::Type::Unknown ) + { + cWarning() << "Partition-module setting *defaultFileSystemType* is bad (" << fsName + << ") using ext4 instead"; + fsRealName = PartUtils::canonicalFilesystemName( QStringLiteral( "ext4" ), &fsType ); + } + else if ( fsRealName != fsName ) + { + cWarning() << "Partition-module setting *defaultFileSystemType* changed to" << fsRealName; + } + } + Q_ASSERT( fsType != FileSystem::Type::Unknown ); + m_defaultFsType = fsType; + gs->insert( "defaultFileSystemType", fsRealName ); + + // TODO: canonicalize the names? How is translation supposed to work? + m_eraseFsTypes = CalamaresUtils::getStringList( configurationMap, "availableFileSystemTypes" ); + if ( !m_eraseFsTypes.contains( fsRealName ) ) + { + if ( !m_eraseFsTypes.isEmpty() ) + { + // Explicitly set, and doesn't include the default + cWarning() << "Partition-module *availableFileSystemTypes* does not contain the default" << fsRealName; + m_eraseFsTypes.prepend( fsRealName ); + } + else + { + // Not explicitly set, so it's empty; don't complain + m_eraseFsTypes = QStringList { fsRealName }; + } + } + + Q_ASSERT( !m_eraseFsTypes.isEmpty() ); + Q_ASSERT( m_eraseFsTypes.contains( fsRealName ) ); + m_eraseFsTypeChoice = fsRealName; + Q_EMIT eraseModeFilesystemChanged( m_eraseFsTypeChoice ); +} + + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + // Settings that overlap with the Welcome module + m_requiredStorageGiB = CalamaresUtils::getDouble( configurationMap, "requiredStorage", -1.0 ); + m_swapChoices = getSwapChoices( configurationMap ); + + bool nameFound = false; // In the name table (ignored, falls back to first entry in table) + m_initialInstallChoice = installChoiceNames().find( + CalamaresUtils::getString( configurationMap, "initialPartitioningChoice" ), nameFound ); + setInstallChoice( m_initialInstallChoice ); + + m_initialSwapChoice + = swapChoiceNames().find( CalamaresUtils::getString( configurationMap, "initialSwapChoice" ), nameFound ); + if ( !m_swapChoices.contains( m_initialSwapChoice ) ) + { + cWarning() << "Configuration for *initialSwapChoice* is not one of the *userSwapChoices*"; + if ( nameFound ) + { + cWarning() << Logger::SubEntry << "Choice" << swapChoiceNames().find( m_initialSwapChoice ) << "added."; + m_swapChoices.insert( m_initialSwapChoice ); + } + m_initialSwapChoice = pickOne( m_swapChoices ); + } + setSwapChoice( m_initialSwapChoice ); + + m_allowManualPartitioning = CalamaresUtils::getBool( configurationMap, "allowManualPartitioning", true ); + m_requiredPartitionTableType = CalamaresUtils::getStringList( configurationMap, "requiredPartitionTableType" ); + + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + fillGSConfigurationEFI( gs, configurationMap ); + fillConfigurationFSTypes( configurationMap ); +} + +void +Config::fillGSSecondaryConfiguration() const +{ + // If there's no setting (e.g. from the welcome page) for required storage + // then use ours, if it was set. + auto* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + if ( m_requiredStorageGiB >= 0.0 && gs && !gs->contains( "requiredStorageGiB" ) ) + { + gs->insert( "requiredStorageGiB", m_requiredStorageGiB ); + } +} diff --git a/src/modules/partition/Config.h b/src/modules/partition/Config.h new file mode 100644 index 000000000..2ac44b424 --- /dev/null +++ b/src/modules/partition/Config.h @@ -0,0 +1,182 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef PARTITION_CONFIG_H +#define PARTITION_CONFIG_H + +#include "utils/NamedEnum.h" + +#include +#include + +#include +#include + +class Config : public QObject +{ + Q_OBJECT + ///@brief The installation choice (Erase, Alongside, ...) + Q_PROPERTY( InstallChoice installChoice READ installChoice WRITE setInstallChoice NOTIFY installChoiceChanged ) + + ///@brief The swap choice (None, Small, Hibernate, ...) which only makes sense when Erase is chosen + Q_PROPERTY( SwapChoice swapChoice READ swapChoice WRITE setSwapChoice NOTIFY swapChoiceChanged ) + + ///@brief Name of the FS that will be used when erasing type disk (e.g. "default filesystem") + Q_PROPERTY( + QString eraseModeFilesystem READ eraseFsType WRITE setEraseFsTypeChoice NOTIFY eraseModeFilesystemChanged ) + + Q_PROPERTY( bool allowManualPartitioning READ allowManualPartitioning CONSTANT FINAL ) + +public: + Config( QObject* parent ); + ~Config() override = default; + + enum InstallChoice + { + NoChoice, + Alongside, + Erase, + Replace, + Manual + }; + Q_ENUM( InstallChoice ) + static const NamedEnumTable< InstallChoice >& installChoiceNames(); + + /** @brief Choice of swap (size and type) */ + enum SwapChoice + { + NoSwap, // don't create any swap, don't use any + ReuseSwap, // don't create, but do use existing + SmallSwap, // up to 8GiB of swap + FullSwap, // ensureSuspendToDisk -- at least RAM size + SwapFile // use a file (if supported) + }; + Q_ENUM( SwapChoice ) + static const NamedEnumTable< SwapChoice >& swapChoiceNames(); + using SwapChoiceSet = QSet< SwapChoice >; + + using EraseFsTypesSet = QStringList; + + void setConfigurationMap( const QVariantMap& ); + /** @brief Set GS values where other modules configuration has priority + * + * Some "required" values are duplicated between modules; if some + * othe module hasn't already set the GS value, take a value from + * the partitioning configuration. + * + * Applicable GS keys: + * - requiredStorageGiB + */ + void fillGSSecondaryConfiguration() const; + + /** @brief What kind of installation (partitioning) is requested **initially**? + * + * @return the partitioning choice (may be @c NoChoice) + */ + InstallChoice initialInstallChoice() const { return m_initialInstallChoice; } + + /** @brief What kind of installation (partition) is requested **now**? + * + * This changes depending on what the user selects (unlike the initial choice, + * which is fixed by the configuration). + * + * @return the partitioning choice (may be @c NoChoice) + */ + InstallChoice installChoice() const { return m_installChoice; } + + /** @brief The set of swap choices enabled for this install + * + * Not all swap choices are supported by each distro, so they + * can choose to enable or disable them. This method + * returns a set (hopefully non-empty) of configured swap choices. + */ + SwapChoiceSet swapChoices() const { return m_swapChoices; } + + /** @brief What kind of swap selection is requested **initially**? + * + * @return The swap choice (may be @c NoSwap ) + */ + SwapChoice initialSwapChoice() const { return m_initialSwapChoice; } + + /** @brief What kind of swap selection is requested **now**? + * + * A choice of swap only makes sense when install choice Erase is made. + * + * @return The swap choice (may be @c NoSwap). + */ + SwapChoice swapChoice() const { return m_swapChoice; } + + /** @brief Get the list of configured FS types to use with *erase* mode + * + * This list is not empty. + */ + EraseFsTypesSet eraseFsTypes() const { return m_eraseFsTypes; } + + /** @brief Currently-selected FS type for *erase* mode + */ + QString eraseFsType() const { return m_eraseFsTypeChoice; } + + /** @brief Configured default FS type (for other modes than erase) + * + * This is not "Unknown" or "Unformatted" + */ + FileSystem::Type defaultFsType() const { return m_defaultFsType; } + + /// @brief Is manual partitioning allowed (not explicitly disabled in the config file)? + bool allowManualPartitioning() const { return m_allowManualPartitioning; } + + /** @brief Will @p tableType be ok? + * + * If no required types are specified, it's ok, otherwise the + * type must be named in the list of required types. + */ + bool acceptPartitionTableType( PartitionTable::TableType tableType ) const; + /// @brief Returns list of acceptable types. May be empty. + QStringList partitionTableTypes() const { return m_requiredPartitionTableType; } + +public Q_SLOTS: + void setInstallChoice( int ); ///< Translates a button ID or so to InstallChoice + void setInstallChoice( InstallChoice ); + void setSwapChoice( int ); ///< Translates a button ID or so to SwapChoice + void setSwapChoice( SwapChoice ); + void setEraseFsTypeChoice( const QString& filesystemName ); ///< See property eraseModeFilesystem + +Q_SIGNALS: + void installChoiceChanged( InstallChoice ); + void swapChoiceChanged( SwapChoice ); + void eraseModeFilesystemChanged( const QString& ); + +private: + /** @brief Handle FS-type configuration, for erase and default */ + void fillConfigurationFSTypes( const QVariantMap& configurationMap ); + EraseFsTypesSet m_eraseFsTypes; + QString m_eraseFsTypeChoice; + FileSystem::Type m_defaultFsType; + + SwapChoiceSet m_swapChoices; + SwapChoice m_initialSwapChoice = NoSwap; + SwapChoice m_swapChoice = NoSwap; + InstallChoice m_initialInstallChoice = NoChoice; + InstallChoice m_installChoice = NoChoice; + qreal m_requiredStorageGiB = 0.0; // May duplicate setting in the welcome module + QStringList m_requiredPartitionTableType; + + bool m_allowManualPartitioning = true; +}; + +/** @brief Given a set of swap choices, return a sensible value from it. + * + * "Sensible" here means: if there is one value, use it; otherwise, use + * NoSwap if there are no choices, or if NoSwap is one of the choices, in the set. + * If that's not possible, any value from the set. + */ +Config::SwapChoice pickOne( const Config::SwapChoiceSet& s ); + + +#endif diff --git a/src/modules/partition/PartitionViewStep.cpp b/src/modules/partition/PartitionViewStep.cpp new file mode 100644 index 000000000..66817bab5 --- /dev/null +++ b/src/modules/partition/PartitionViewStep.cpp @@ -0,0 +1,732 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2020 Anke Boersma + +#include +#include +#include +#include + +PartitionViewStep::PartitionViewStep( QObject* parent ) + : Calamares::ViewStep( parent ) + , m_config( new Config( this ) ) + , m_core( nullptr ) + , m_widget( new QStackedWidget() ) + , m_choicePage( nullptr ) + , m_manualPartitionPage( nullptr ) +{ + m_widget->setContentsMargins( 0, 0, 0, 0 ); + + m_waitingWidget = new WaitingWidget( QString() ); + m_widget->addWidget( m_waitingWidget ); + CALAMARES_RETRANSLATE( + if ( m_waitingWidget ) { m_waitingWidget->setText( tr( "Gathering system information..." ) ); } ); + + m_core = new PartitionCoreModule( this ); // Unusable before init is complete! + // We're not done loading, but we need the configuration map first. +} + + +void +PartitionViewStep::initPartitionCoreModule() +{ + Q_ASSERT( m_core ); + m_core->init(); +} + + +void +PartitionViewStep::continueLoading() +{ + Q_ASSERT( !m_choicePage ); + m_choicePage = new ChoicePage( m_config ); + m_choicePage->init( m_core ); + m_widget->addWidget( m_choicePage ); + + // Instantiate the manual partitioning page as needed. + // + Q_ASSERT( !m_manualPartitionPage ); + // m_manualPartitionPage = new PartitionPage( m_core ); + // m_widget->addWidget( m_manualPartitionPage ); + + m_widget->removeWidget( m_waitingWidget ); + m_waitingWidget->deleteLater(); + m_waitingWidget = nullptr; + + connect( m_core, &PartitionCoreModule::hasRootMountPointChanged, this, &PartitionViewStep::nextPossiblyChanged ); + connect( m_choicePage, &ChoicePage::nextStatusChanged, this, &PartitionViewStep::nextPossiblyChanged ); +} + + +PartitionViewStep::~PartitionViewStep() +{ + if ( m_choicePage && m_choicePage->parent() == nullptr ) + { + m_choicePage->deleteLater(); + } + if ( m_manualPartitionPage && m_manualPartitionPage->parent() == nullptr ) + { + m_manualPartitionPage->deleteLater(); + } + delete m_core; +} + + +QString +PartitionViewStep::prettyName() const +{ + return tr( "Partitions" ); +} + +/** @brief Gather the pretty descriptions of all the partitioning jobs + * + * Returns a QStringList of each job's pretty description, including + * empty strings and duplicates. The list is in-order of how the + * jobs will be run. + */ +static QStringList +jobDescriptions( const Calamares::JobList& jobs ) +{ + QStringList jobsLines; + for ( const Calamares::job_ptr& job : qAsConst( jobs ) ) + { + if ( !job->prettyDescription().isEmpty() ) + { + jobsLines.append( job->prettyDescription() ); + } + } + return jobsLines; +} + +/** @brief A top-level description of what @p choice does + * + * Returns a (branded) string describing what @p choice will do. + */ +static QString +modeDescription( Config::InstallChoice choice ) +{ + const auto* branding = Calamares::Branding::instance(); + static const char context[] = "PartitionViewStep"; + + switch ( choice ) + { + case Config::InstallChoice::Alongside: + return QCoreApplication::translate( context, "Install %1 alongside another operating system." ) + .arg( branding->shortVersionedName() ); + case Config::InstallChoice::Erase: + return QCoreApplication::translate( context, "Erase disk and install %1." ) + .arg( branding->shortVersionedName() ); + case Config::InstallChoice::Replace: + return QCoreApplication::translate( context, "Replace a partition with %1." ) + .arg( branding->shortVersionedName() ); + case Config::InstallChoice::NoChoice: + case Config::InstallChoice::Manual: + return QCoreApplication::translate( context, "Manual partitioning." ); + } + return QString(); +} + +/** @brief A top-level description of what @p choice does to disk @p info + * + * Returns a (branded, and device-specific) string describing what + * will be done to device @p info when @p choice is made. The @p listLength + * is used to provide context; when more than one disk is in use, the description + * works differently. + */ +static QString +diskDescription( int listLength, const PartitionCoreModule::SummaryInfo& info, Config::InstallChoice choice ) +{ + const auto* branding = Calamares::Branding::instance(); + static const char context[] = "PartitionViewStep"; + + if ( listLength == 1 ) // this is the only disk preview + { + switch ( choice ) + { + case Config::Alongside: + return QCoreApplication::translate( + context, + "Install %1 alongside another operating system on disk " + "%2 (%3)." ) + .arg( branding->shortVersionedName() ) + .arg( info.deviceNode ) + .arg( info.deviceName ); + case Config::Erase: + return QCoreApplication::translate( context, + "Erase disk %2 (%3) and install %1." ) + .arg( branding->shortVersionedName() ) + .arg( info.deviceNode ) + .arg( info.deviceName ); + case Config::Replace: + return QCoreApplication::translate( + context, "Replace a partition on disk %2 (%3) with %1." ) + .arg( branding->shortVersionedName() ) + .arg( info.deviceNode ) + .arg( info.deviceName ); + case Config::NoChoice: + case Config::Manual: + return QCoreApplication::translate( + context, "Manual partitioning on disk %1 (%2)." ) + .arg( info.deviceNode ) + .arg( info.deviceName ); + } + return QString(); + } + else // multiple disk previews! + { + return QCoreApplication::translate( context, "Disk %1 (%2)" ) + .arg( info.deviceNode ) + .arg( info.deviceName ); + } +} + +QString +PartitionViewStep::prettyStatus() const +{ + const Config::InstallChoice choice = m_config->installChoice(); + const QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); + + cDebug() << "Summary for Partition" << list.length() << choice; + auto joinDiskInfo = [ choice = choice ]( QString& s, const PartitionCoreModule::SummaryInfo& i ) + { return s + diskDescription( 1, i, choice ); }; + const QString diskInfoLabel = std::accumulate( list.begin(), list.end(), QString(), joinDiskInfo ); + const QString jobsLabel = jobDescriptions( jobs() ).join( QStringLiteral( "
" ) ); + return diskInfoLabel + "
" + jobsLabel; +} + +QWidget* +PartitionViewStep::createSummaryWidget() const +{ + QWidget* widget = new QWidget; + QVBoxLayout* mainLayout = new QVBoxLayout; + widget->setLayout( mainLayout ); + mainLayout->setMargin( 0 ); + + Config::InstallChoice choice = m_config->installChoice(); + + QFormLayout* formLayout = new QFormLayout( widget ); + const int MARGIN = CalamaresUtils::defaultFontHeight() / 2; + formLayout->setContentsMargins( MARGIN, 0, MARGIN, MARGIN ); + mainLayout->addLayout( formLayout ); + +#if defined( DEBUG_PARTITION_UNSAFE ) || defined( DEBUG_PARTITION_BAIL_OUT ) || defined( DEBUG_PARTITION_SKIP ) + auto specialRow = [ = ]( CalamaresUtils::ImageType t, const QString& s ) + { + QLabel* icon = new QLabel; + icon->setPixmap( CalamaresUtils::defaultPixmap( t ) ); + formLayout->addRow( icon, new QLabel( s ) ); + }; +#endif +#if defined( DEBUG_PARTITION_UNSAFE ) + specialRow( CalamaresUtils::ImageType::StatusWarning, tr( "Unsafe partition actions are enabled." ) ); +#endif +#if defined( DEBUG_PARTITION_BAIL_OUT ) + specialRow( CalamaresUtils::ImageType::Information, tr( "Partitioning is configured to always fail." ) ); +#endif +#if defined( DEBUG_PARTITION_SKIP ) + specialRow( CalamaresUtils::ImageType::Information, tr( "No partitions will be changed." ) ); +#endif + + const QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); + if ( list.length() > 1 ) // There are changes on more than one disk + { + //NOTE: all of this should only happen when Manual partitioning is active. + // Any other choice should result in a list.length() == 1. + QLabel* modeLabel = new QLabel; + formLayout->addRow( modeLabel ); + modeLabel->setText( modeDescription( choice ) ); + } + for ( const auto& info : list ) + { + QLabel* diskInfoLabel = new QLabel; + diskInfoLabel->setText( diskDescription( list.length(), info, choice ) ); + formLayout->addRow( diskInfoLabel ); + + PartitionBarsView* preview; + PartitionLabelsView* previewLabels; + QVBoxLayout* field; + + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; + preview = new PartitionBarsView; + preview->setNestedPartitionsMode( mode ); + previewLabels = new PartitionLabelsView; + previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); + preview->setModel( info.partitionModelBefore ); + previewLabels->setModel( info.partitionModelBefore ); + preview->setSelectionMode( QAbstractItemView::NoSelection ); + previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); + info.partitionModelBefore->setParent( widget ); + field = new QVBoxLayout; + CalamaresUtils::unmarginLayout( field ); + field->setSpacing( 6 ); + field->addWidget( preview ); + field->addWidget( previewLabels ); + formLayout->addRow( tr( "Current:" ), field ); + + preview = new PartitionBarsView; + preview->setNestedPartitionsMode( mode ); + previewLabels = new PartitionLabelsView; + previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); + preview->setModel( info.partitionModelAfter ); + previewLabels->setModel( info.partitionModelAfter ); + preview->setSelectionMode( QAbstractItemView::NoSelection ); + previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); + previewLabels->setCustomNewRootLabel( + Calamares::Branding::instance()->string( Calamares::Branding::BootloaderEntryName ) ); + info.partitionModelAfter->setParent( widget ); + field = new QVBoxLayout; + CalamaresUtils::unmarginLayout( field ); + field->setSpacing( 6 ); + field->addWidget( preview ); + field->addWidget( previewLabels ); + formLayout->addRow( tr( "After:" ), field ); + } + const QStringList jobsLines = jobDescriptions( jobs() ); + if ( !jobsLines.isEmpty() ) + { + QLabel* jobsLabel = new QLabel( widget ); + mainLayout->addWidget( jobsLabel ); + jobsLabel->setText( jobsLines.join( "
" ) ); + jobsLabel->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); + QPalette pal; + pal.setColor( WindowBackground, pal.window().color().lighter( 108 ) ); + jobsLabel->setAutoFillBackground( true ); + jobsLabel->setPalette( pal ); + } + return widget; +} + +QWidget* +PartitionViewStep::widget() +{ + return m_widget; +} + +void +PartitionViewStep::next() +{ + if ( m_choicePage == m_widget->currentWidget() ) + { + if ( m_config->installChoice() == Config::InstallChoice::Manual ) + { + if ( !m_manualPartitionPage ) + { + m_manualPartitionPage = new PartitionPage( m_core ); + m_widget->addWidget( m_manualPartitionPage ); + } + + m_widget->setCurrentWidget( m_manualPartitionPage ); + m_manualPartitionPage->selectDeviceByIndex( m_choicePage->lastSelectedDeviceIndex() ); + if ( m_core->isDirty() ) + { + m_manualPartitionPage->onRevertClicked(); + } + } + cDebug() << "Choice applied: " << m_config->installChoice(); + } +} + + +void +PartitionViewStep::back() +{ + if ( m_widget->currentWidget() != m_choicePage ) + { + m_widget->setCurrentWidget( m_choicePage ); + m_choicePage->setLastSelectedDeviceIndex( m_manualPartitionPage->selectedDeviceIndex() ); + + if ( m_manualPartitionPage ) + { + m_manualPartitionPage->deleteLater(); + m_manualPartitionPage = nullptr; + } + } +} + + +bool +PartitionViewStep::isNextEnabled() const +{ + if ( m_choicePage && m_widget->currentWidget() == m_choicePage ) + { + return m_choicePage->isNextEnabled(); + } + + if ( m_manualPartitionPage && m_widget->currentWidget() == m_manualPartitionPage ) + { + return m_core->hasRootMountPoint(); + } + + return false; +} + +void +PartitionViewStep::nextPossiblyChanged( bool ) +{ + Q_EMIT nextStatusChanged( isNextEnabled() ); +} + +bool +PartitionViewStep::isBackEnabled() const +{ + return true; +} + + +bool +PartitionViewStep::isAtBeginning() const +{ + if ( m_widget->currentWidget() != m_choicePage ) + { + return false; + } + return true; +} + + +bool +PartitionViewStep::isAtEnd() const +{ + if ( m_widget->currentWidget() == m_choicePage ) + { + auto choice = m_config->installChoice(); + if ( Config::InstallChoice::Erase == choice || Config::InstallChoice::Replace == choice + || Config::InstallChoice::Alongside == choice ) + { + return true; + } + return false; + } + return true; +} + + +void +PartitionViewStep::onActivate() +{ + m_config->fillGSSecondaryConfiguration(); + + // if we're coming back to PVS from the next VS + if ( m_widget->currentWidget() == m_choicePage && m_config->installChoice() == Config::InstallChoice::Alongside ) + { + m_choicePage->applyActionChoice( Config::InstallChoice::Alongside ); + // m_choicePage->reset(); + //FIXME: ReplaceWidget should be reset maybe? + } +} + +static bool +shouldWarnForGPTOnBIOS( const PartitionCoreModule* core ) +{ + if ( PartUtils::isEfiSystem() ) + { + return false; + } + + const QString biosFlagName = PartitionTable::flagName( KPM_PARTITION_FLAG( BiosGrub ) ); + + auto [ r, device ] = core->bootLoaderModel()->findBootLoader( core->bootLoaderInstallPath() ); + Q_UNUSED( r ); + if ( device ) + { + auto* table = device->partitionTable(); + cDebug() << "Found device for bootloader" << device->deviceNode(); + if ( table && table->type() == PartitionTable::TableType::gpt ) + { + // So this is a BIOS system, and the bootloader will be installed on a GPT system + for ( const auto& partition : qAsConst( table->children() ) ) + { + using CalamaresUtils::Units::operator""_MiB; + if ( ( partition->activeFlags() & KPM_PARTITION_FLAG( BiosGrub ) ) + && ( partition->fileSystem().type() == FileSystem::Unformatted ) + && ( partition->capacity() >= 8_MiB ) ) + { + cDebug() << Logger::SubEntry << "Partition" << partition->devicePath() << partition->partitionPath() + << "is a suitable" << biosFlagName << "partition"; + return false; + } + } + } + cDebug() << Logger::SubEntry << "No suitable partition for" << biosFlagName << "found"; + } + else + { + cDebug() << "Found no device for" << core->bootLoaderInstallPath(); + } + return true; +} + +void +PartitionViewStep::onLeave() +{ + if ( m_widget->currentWidget() == m_choicePage ) + { + m_choicePage->onLeave(); + return; + } + + const auto* branding = Calamares::Branding::instance(); + if ( m_widget->currentWidget() == m_manualPartitionPage ) + { + if ( PartUtils::isEfiSystem() ) + { + const QString espMountPoint + = Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); +#ifdef WITH_KPMCORE4API + const auto espFlag = PartitionTable::Flag::Boot; +#else + const auto espFlag = PartitionTable::FlagEsp; +#endif + Partition* esp = m_core->findPartitionByMountPoint( espMountPoint ); + + QString message; + QString description; + + Logger::Once o; + + const bool okType = esp && PartUtils::isEfiFilesystemSuitableType( esp ); + const bool okSize = esp && PartUtils::isEfiFilesystemSuitableSize( esp ); + const bool okFlag = esp && PartUtils::isEfiBootable( esp ); + + if ( !esp ) + { + message = tr( "No EFI system partition configured" ); + } + else if ( !( okType && okSize && okFlag ) ) + { + message = tr( "EFI system partition configured incorrectly" ); + } + + if ( !esp || !( okType && okSize && okFlag ) ) + { + description = tr( "An EFI system partition is necessary to start %1." + "

" + "To configure an EFI system partition, go back and " + "select or create a suitable filesystem." ) + .arg( branding->shortProductName() ); + } + if ( !esp ) + { + cDebug() << o << "No ESP mounted"; + description.append( ' ' ); + description.append( + tr( "The filesystem must be mounted on %1." ).arg( espMountPoint ) ); + } + if ( !okType ) + { + cDebug() << o << "ESP wrong type"; + description.append( ' ' ); + description.append( tr( "The filesystem must have type FAT32." ) ); + } + if ( !okSize ) + { + cDebug() << o << "ESP too small"; + const qint64 atLeastBytes = static_cast< qint64 >( PartUtils::efiFilesystemMinimumSize() ); + const auto atLeastMiB = CalamaresUtils::BytesToMiB( atLeastBytes ); + description.append( ' ' ); + description.append( tr( "The filesystem must be at least %1 MiB in size." ).arg( atLeastMiB ) ); + } + if ( !okFlag ) + { + cDebug() << o << "ESP missing flag"; + description.append( ' ' ); + description.append( tr( "The filesystem must have flag %1 set." ) + .arg( PartitionTable::flagName( espFlag ) ) ); + } + if ( !description.isEmpty() ) + { + description.append( "

" ); + description.append( tr( "You can continue without setting up an EFI system " + "partition but your system may fail to start." ) ); + } + if ( !message.isEmpty() ) + { + QMessageBox mb( QMessageBox::Warning, message, description, QMessageBox::Ok, m_manualPartitionPage ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); + } + } + else + { + + cDebug() << "device: BIOS"; + + if ( shouldWarnForGPTOnBIOS( m_core ) ) + { + const QString biosFlagName = PartitionTable::flagName( KPM_PARTITION_FLAG( BiosGrub ) ); + QString message = tr( "Option to use GPT on BIOS" ); + QString description = tr( "A GPT partition table is the best option for all " + "systems. This installer supports such a setup for " + "BIOS systems too." + "

" + "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 " + "%2 flag enabled.

" + "An unformatted 8 MB partition is necessary " + "to start %1 on a BIOS system with GPT." ) + .arg( branding->shortProductName(), biosFlagName ); + + QMessageBox mb( + QMessageBox::Information, message, description, QMessageBox::Ok, m_manualPartitionPage ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); + } + } + + Partition* root_p = m_core->findPartitionByMountPoint( "/" ); + Partition* boot_p = m_core->findPartitionByMountPoint( "/boot" ); + + if ( root_p and boot_p ) + { + QString message; + QString description; + + // If the root partition is encrypted, and there's a separate boot + // partition which is not encrypted + if ( root_p->fileSystem().type() == FileSystem::Luks && boot_p->fileSystem().type() != FileSystem::Luks ) + { + message = tr( "Boot partition not encrypted" ); + description = tr( "A separate boot partition was set up together with " + "an encrypted root partition, but the boot partition " + "is not encrypted." + "

" + "There are security concerns with this kind of " + "setup, because important system files are kept " + "on an unencrypted partition.
" + "You may continue if you wish, but filesystem " + "unlocking will happen later during system startup." + "
To encrypt the boot partition, go back and " + "recreate it, selecting Encrypt " + "in the partition creation window." ); + + QMessageBox mb( QMessageBox::Warning, message, description, QMessageBox::Ok, m_manualPartitionPage ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); + } + } + } +} + + +void +PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_config->setConfigurationMap( configurationMap ); + + // Copy the efiSystemPartition setting to the global storage. It is needed not only in + // the EraseDiskPage, but also in the bootloader configuration modules (grub, bootloader). + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + + // Read and parse key swapPartitionName + if ( configurationMap.contains( "swapPartitionName" ) ) + { + gs->insert( "swapPartitionName", CalamaresUtils::getString( configurationMap, "swapPartitionName" ) ); + } + + // OTHER SETTINGS + // + gs->insert( "drawNestedPartitions", CalamaresUtils::getBool( configurationMap, "drawNestedPartitions", false ) ); + gs->insert( "alwaysShowPartitionLabels", + CalamaresUtils::getBool( configurationMap, "alwaysShowPartitionLabels", true ) ); + gs->insert( "enableLuksAutomatedPartitioning", + CalamaresUtils::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) ); + + QString partitionTableName = CalamaresUtils::getString( configurationMap, "defaultPartitionTableType" ); + if ( partitionTableName.isEmpty() ) + { + cWarning() << "Partition-module setting *defaultPartitionTableType* is unset, " + "will use gpt for efi or msdos for bios"; + } + gs->insert( "defaultPartitionTableType", partitionTableName ); + + // Now that we have the config, we load the PartitionCoreModule in the background + // because it could take a while. Then when it's done, we can set up the widgets + // and remove the spinner. + m_future = new QFutureWatcher< void >(); + connect( m_future, + &QFutureWatcher< void >::finished, + this, + [ this ] + { + continueLoading(); + this->m_future->deleteLater(); + this->m_future = nullptr; + } ); + + QFuture< void > future = QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); + m_future->setFuture( future ); + + m_core->partitionLayout().init( m_config->defaultFsType(), configurationMap.value( "partitionLayout" ).toList() ); +} + + +Calamares::JobList +PartitionViewStep::jobs() const +{ + return m_core->jobs( m_config ); +} + +Calamares::RequirementsList +PartitionViewStep::checkRequirements() +{ + if ( m_future ) + { + m_future->waitForFinished(); + } + + Calamares::RequirementsList l; + l.append( { + QLatin1String( "partitions" ), + [] { return tr( "has at least one disk device available." ); }, + [] { return tr( "There are no partitions to install on." ); }, + m_core->deviceModel()->rowCount() > 0, // satisfied +#ifdef DEBUG_PARTITION_UNSAFE + false // optional +#else + true // required +#endif + } ); + + return l; +} + + +CALAMARES_PLUGIN_FACTORY_DEFINITION( PartitionViewStepFactory, registerPlugin< PartitionViewStep >(); ) diff --git a/src/modules/partition/gui/PartitionViewStep.h b/src/modules/partition/PartitionViewStep.h similarity index 51% rename from src/modules/partition/gui/PartitionViewStep.h rename to src/modules/partition/PartitionViewStep.h index 63d11c816..ecba73f45 100644 --- a/src/modules/partition/gui/PartitionViewStep.h +++ b/src/modules/partition/PartitionViewStep.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONVIEWSTEP_H @@ -26,18 +17,18 @@ #include "DllMacro.h" -#include "core/PartitionActions.h" - #include #include class ChoicePage; +class Config; class PartitionPage; class PartitionCoreModule; class QStackedWidget; class WaitingWidget; -template class QFutureWatcher; +template < typename T > +class QFutureWatcher; /** * The starting point of the module. Instantiates PartitionCoreModule, @@ -49,9 +40,10 @@ class PLUGINDLLEXPORT PartitionViewStep : public Calamares::ViewStep public: explicit PartitionViewStep( QObject* parent = nullptr ); - virtual ~PartitionViewStep() override; + ~PartitionViewStep() override; QString prettyName() const override; + QString prettyStatus() const override; QWidget* createSummaryWidget() const override; QWidget* widget() override; @@ -78,19 +70,20 @@ private: void initPartitionCoreModule(); void continueLoading(); + /// "slot" for changes to next-status from the KPMCore and ChoicePage + void nextPossiblyChanged( bool ); + + Config* m_config; + PartitionCoreModule* m_core; - QStackedWidget* m_widget; - ChoicePage* m_choicePage; - PartitionPage* m_manualPartitionPage; + QStackedWidget* m_widget; + ChoicePage* m_choicePage; + PartitionPage* m_manualPartitionPage; WaitingWidget* m_waitingWidget; - QFutureWatcher* m_future; - - QSet< PartitionActions::Choices::SwapChoice > m_swapChoices; - - qreal m_requiredStorageGiB; // May duplicate setting in the welcome module + QFutureWatcher< void >* m_future; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PartitionViewStepFactory ) -#endif // PARTITIONVIEWSTEP_H +#endif // PARTITIONVIEWSTEP_H diff --git a/src/modules/partition/README.md b/src/modules/partition/README.md index 3491b309b..cbebd589e 100644 --- a/src/modules/partition/README.md +++ b/src/modules/partition/README.md @@ -1,5 +1,11 @@ # Architecture + + ## Overview The heart of the module is the PartitionCoreModule class. It holds Qt models for diff --git a/src/modules/partition/core/BootLoaderModel.cpp b/src/modules/partition/core/BootLoaderModel.cpp index 10b88be76..fd66c8514 100644 --- a/src/modules/partition/core/BootLoaderModel.cpp +++ b/src/modules/partition/core/BootLoaderModel.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/BootLoaderModel.h" @@ -27,6 +18,7 @@ // KPMcore #include +#include #include @@ -49,7 +41,6 @@ BootLoaderModel::~BootLoaderModel() {} void BootLoaderModel::init( const QList< Device* >& devices ) { - cDebug() << "BLM::init with" << devices.count() << "devices" << rowCount() << "rows"; beginResetModel(); blockSignals( true ); @@ -73,7 +64,6 @@ BootLoaderModel::createMbrItems() void BootLoaderModel::update() { - cDebug() << "BLM::update holds" << m_devices.count() << "devices" << rowCount() << "rows"; beginResetModel(); blockSignals( true ); updateInternal(); @@ -159,28 +149,39 @@ BootLoaderModel::data( const QModelIndex& index, int role ) const return QStandardItemModel::data( index, role ); } -namespace Calamares +std::pair< int, Device* > +BootLoaderModel::findBootLoader( const QString& path ) const { -int -findBootloader( const QAbstractItemModel* model, const QString& path ) -{ - for ( int i = 0; i < model->rowCount(); ++i ) + int r = 0; + for ( Device* d : m_devices ) { - const auto index = model->index( i, 0, QModelIndex() ); - if ( !index.isValid() ) + if ( d && d->deviceNode() == path ) { - continue; - } - QVariant var = model->data( index, BootLoaderModel::BootLoaderPathRole ); - if ( var.isValid() && var.toString() == path ) - { - return i; + return std::make_pair( r, d ); } + r++; } - return -1; + Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, path ); + if ( partition ) + { + const QString partition_device_path = partition->deviceNode(); + r = 0; + for ( Device* d : m_devices ) + { + if ( d && d->deviceNode() == partition_device_path ) + { + return std::make_pair( r, d ); + } + r++; + } + } + return std::make_pair( -1, nullptr ); } + +namespace Calamares +{ void restoreSelectedBootLoader( QComboBox& combo, const QString& path ) { @@ -191,12 +192,16 @@ restoreSelectedBootLoader( QComboBox& combo, const QString& path ) return; } - int r = -1; if ( path.isEmpty() ) { + cDebug() << "No path to restore, choosing default"; combo.setCurrentIndex( 0 ); + return; } - else if ( ( r = findBootloader( model, path ) ) >= 0 ) + + const BootLoaderModel* bmodel = qobject_cast< const BootLoaderModel* >( model ); + int r = bmodel ? bmodel->findBootLoader( path ).first : -1; + if ( r >= 0 ) { combo.setCurrentIndex( r ); } diff --git a/src/modules/partition/core/BootLoaderModel.h b/src/modules/partition/core/BootLoaderModel.h index 8daa8ca04..e640d4d7c 100644 --- a/src/modules/partition/core/BootLoaderModel.h +++ b/src/modules/partition/core/BootLoaderModel.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef BOOTLOADERMODEL_H #define BOOTLOADERMODEL_H @@ -35,6 +26,8 @@ class BootLoaderModel : public QStandardItemModel { Q_OBJECT public: + using DeviceList = QList< Device* >; + enum { BootLoaderPathRole = Qt::UserRole + 1, @@ -48,13 +41,19 @@ public: * Init the model with the list of devices. Does *not* take ownership of the * devices. */ - void init( const QList< Device* >& devices ); + void init( const DeviceList& devices ); void update(); QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; - using DeviceList = QList< Device* >; + /** @brief Looks up a boot-loader by device-name @p path (e.g. /dev/sda) + * + * Returns a row number (index) in the model and a Device*: if there **is** a + * device for the given @p path, index will be in range of the model and + * Device* non-null. Returns (-1, nullptr) otherwise. + */ + std::pair< int, Device* > findBootLoader( const QString& path ) const; private: DeviceList m_devices; @@ -66,13 +65,6 @@ private: namespace Calamares { -/** @brief Returns the row number of boot-loader @p path (e.g. /dev/sda) - * - * Assuming the @p model is a BootLoaderModel, will return a row number - * in the model. Returns -1 otherwise. - */ -int findBootloader( const QAbstractItemModel* model, const QString& path ); - /** @brief Tries to set @p path as selected item in @p combo * * Matches a boot-loader install path (e.g. /dev/sda) with a model diff --git a/src/modules/partition/core/ColorUtils.cpp b/src/modules/partition/core/ColorUtils.cpp index d04c4110d..fb613e240 100644 --- a/src/modules/partition/core/ColorUtils.cpp +++ b/src/modules/partition/core/ColorUtils.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/ColorUtils.h" diff --git a/src/modules/partition/core/ColorUtils.h b/src/modules/partition/core/ColorUtils.h index 3c65b75b2..9ebce580b 100644 --- a/src/modules/partition/core/ColorUtils.h +++ b/src/modules/partition/core/ColorUtils.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef COLORUTILS_H #define COLORUTILS_H diff --git a/src/modules/partition/core/DeviceList.cpp b/src/modules/partition/core/DeviceList.cpp index 944940d9a..b3a10dde7 100644 --- a/src/modules/partition/core/DeviceList.cpp +++ b/src/modules/partition/core/DeviceList.cpp @@ -1,31 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DeviceList.h" -#include "PartitionCoreModule.h" -#include "core/DeviceModel.h" -#include "core/KPMHelpers.h" - -#include "GlobalStorage.h" -#include "JobQueue.h" #include "partition/PartitionIterator.h" +#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include @@ -34,7 +20,6 @@ #include #include -#include using CalamaresUtils::Partition::PartitionIterator; @@ -56,16 +41,30 @@ hasRootPartition( Device* device ) return false; } +/** @brief Check if @p path holds an iso9660 filesystem + * + * The @p path should point to a device; blkid is used to check the FS type. + */ static bool blkIdCheckIso9660( const QString& path ) { - QProcess blkid; - blkid.start( "blkid", { path } ); - blkid.waitForFinished(); - QString output = QString::fromLocal8Bit( blkid.readAllStandardOutput() ); - return output.contains( "iso9660" ); + // If blkid fails, there's no output, but we don't care + auto r = CalamaresUtils::System::runCommand( { "blkid", path }, std::chrono::seconds( 30 ) ); + return r.getOutput().contains( "iso9660" ); } +/// @brief Convenience to check if @p partition holds an iso9660 filesystem +static bool +blkIdCheckIso9660P( const Partition* partition ) +{ + return blkIdCheckIso9660( partition->partitionPath() ); +} + +/** @brief Check if the @p device is an iso9660 device + * + * An iso9660 device is **probably** a CD-ROM. If the device holds an + * iso9660 FS, or any of its partitions do, then we call it an iso9660 device. + */ static bool isIso9660( const Device* device ) { @@ -81,17 +80,25 @@ isIso9660( const Device* device ) if ( device->partitionTable() && !device->partitionTable()->children().isEmpty() ) { - for ( const Partition* partition : device->partitionTable()->children() ) - { - if ( blkIdCheckIso9660( partition->partitionPath() ) ) - { - return true; - } - } + const auto& p = device->partitionTable()->children(); + return std::any_of( p.cbegin(), p.cend(), blkIdCheckIso9660P ); } return false; } +static inline bool +isZRam( const Device* device ) +{ + const QString path = device->deviceNode(); + return path.startsWith( "/dev/zram" ); +} + +static inline bool +isFloppyDrive( const Device* device ) +{ + const QString path = device->deviceNode(); + return path.startsWith( "/dev/fd" ) || path.startsWith( "/dev/floppy" ); +} static inline QDebug& operator<<( QDebug& s, QList< Device* >::iterator& it ) @@ -112,58 +119,80 @@ erase( DeviceList& l, DeviceList::iterator& it ) } QList< Device* > -getDevices( DeviceType which, qint64 minimumSize ) +getDevices( DeviceType which ) { - bool writableOnly = ( which == DeviceType::WritableOnly ); - CoreBackend* backend = CoreBackendManager::self()->backend(); + if ( !backend ) + { + cWarning() << "No KPM backend found."; + return {}; + } #if defined( WITH_KPMCORE4API ) DeviceList devices = backend->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag( 0 ) ); #else DeviceList devices = backend->scanDevices( /* excludeReadOnly */ true ); #endif + /* The list of devices is cleaned up for use: + * - some devices can **never** be used (e.g. floppies, nullptr) + * - some devices can be used if unsafe mode is on, but not in normal operation + * Two lambda's are defined, + * - removeInAllModes() + * - removeInSafeMode() + * To handle the difference. + */ #ifdef DEBUG_PARTITION_UNSAFE cWarning() << "Allowing unsafe partitioning choices." << devices.count() << "candidates."; -#ifdef DEBUG_PARTITION_LAME - cDebug() << Logger::SubEntry << "it has been lamed, and will fail."; +#ifdef DEBUG_PARTITION_BAIL_OUT + cDebug() << Logger::SubEntry << "unsafe partitioning has been lamed, and will fail."; #endif + + // Unsafe partitioning + auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it ) { return erase( l, it ); }; + auto removeInSafeMode = []( DeviceList&, DeviceList::iterator& it ) { return ++it; }; #else + // Safe partitioning + auto removeInAllModes = []( DeviceList& l, DeviceList::iterator& it ) { return erase( l, it ); }; + auto& removeInSafeMode = removeInAllModes; +#endif + cDebug() << "Removing unsuitable devices:" << devices.count() << "candidates."; + bool writableOnly = ( which == DeviceType::WritableOnly ); // Remove the device which contains / from the list for ( DeviceList::iterator it = devices.begin(); it != devices.end(); ) + { if ( !( *it ) ) { cDebug() << Logger::SubEntry << "Skipping nullptr device"; - it = erase( devices, it ); + it = removeInAllModes( devices, it ); } - else if ( ( *it )->deviceNode().startsWith( "/dev/zram" ) ) + else if ( isZRam( *it ) ) { cDebug() << Logger::SubEntry << "Removing zram" << it; - it = erase( devices, it ); + it = removeInAllModes( devices, it ); + } + else if ( isFloppyDrive( ( *it ) ) ) + { + cDebug() << Logger::SubEntry << "Removing floppy disk" << it; + it = removeInAllModes( devices, it ); } else if ( writableOnly && hasRootPartition( *it ) ) { cDebug() << Logger::SubEntry << "Removing device with root filesystem (/) on it" << it; - it = erase( devices, it ); + it = removeInSafeMode( devices, it ); } else if ( writableOnly && isIso9660( *it ) ) { cDebug() << Logger::SubEntry << "Removing device with iso9660 filesystem (probably a CD) on it" << it; - it = erase( devices, it ); - } - else if ( ( minimumSize >= 0 ) && !( ( *it )->capacity() > minimumSize ) ) - { - cDebug() << Logger::SubEntry << "Removing too-small" << it; - it = erase( devices, it ); + it = removeInSafeMode( devices, it ); } else { ++it; } -#endif - + } + cDebug() << Logger::SubEntry << "there are" << devices.count() << "devices left."; return devices; } diff --git a/src/modules/partition/core/DeviceList.h b/src/modules/partition/core/DeviceList.h index 6823d6951..b76a31a6b 100644 --- a/src/modules/partition/core/DeviceList.h +++ b/src/modules/partition/core/DeviceList.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DEVICELIST_H @@ -40,12 +31,9 @@ enum class DeviceType * the system, filtering out those that do not meet a criterium. * If set to WritableOnly, only devices which can be overwritten * safely are returned (e.g. RO-media are ignored, as are mounted partitions). - * @param minimumSize Can be used to filter devices based on their - * size (in bytes). If non-negative, only devices with a size - * greater than @p minimumSize will be returned. * @return a list of Devices meeting this criterium. */ -QList< Device* > getDevices( DeviceType which = DeviceType::All, qint64 minimumSize = -1 ); +QList< Device* > getDevices( DeviceType which = DeviceType::All ); } // namespace PartUtils diff --git a/src/modules/partition/core/DeviceModel.cpp b/src/modules/partition/core/DeviceModel.cpp index f881d265b..6959ac9c2 100644 --- a/src/modules/partition/core/DeviceModel.cpp +++ b/src/modules/partition/core/DeviceModel.cpp @@ -1,25 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include "core/DeviceModel.h" +#include "DeviceModel.h" #include "core/PartitionModel.h" +#include "core/SizeUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" @@ -27,9 +19,6 @@ // KPMcore #include -// KF5 -#include - #include #include @@ -39,9 +28,9 @@ static void sortDevices( DeviceModel::DeviceList& l ) { - std::sort( l.begin(), l.end(), []( const Device* dev1, const Device* dev2 ) { - return dev1->deviceNode() < dev2->deviceNode(); - } ); + std::sort( l.begin(), + l.end(), + []( const Device* dev1, const Device* dev2 ) { return dev1->deviceNode() < dev2->deviceNode(); } ); } DeviceModel::DeviceModel( QObject* parent ) @@ -92,7 +81,7 @@ DeviceModel::data( const QModelIndex& index, int role ) const //: device[name] - size[number] (device-node[name]) return tr( "%1 - %2 (%3)" ) .arg( device->name() ) - .arg( KFormat().formatByteSize( device->capacity() ) ) + .arg( formatByteSize( device->capacity() ) ) .arg( device->deviceNode() ); } else @@ -108,7 +97,7 @@ DeviceModel::data( const QModelIndex& index, int role ) const return CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionDisk, CalamaresUtils::Original, - QSize( CalamaresUtils::defaultIconSize().width() * 3, CalamaresUtils::defaultIconSize().height() * 3 ) ); + QSize( CalamaresUtils::defaultIconSize().width() * 2, CalamaresUtils::defaultIconSize().height() * 2 ) ); default: return QVariant(); } @@ -141,7 +130,7 @@ DeviceModel::swapDevice( Device* oldDevice, Device* newDevice ) m_devices[ indexOfOldDevice ] = newDevice; - emit dataChanged( index( indexOfOldDevice ), index( indexOfOldDevice ) ); + Q_EMIT dataChanged( index( indexOfOldDevice ), index( indexOfOldDevice ) ); } void diff --git a/src/modules/partition/core/DeviceModel.h b/src/modules/partition/core/DeviceModel.h index 29d1598ad..71918f64d 100644 --- a/src/modules/partition/core/DeviceModel.h +++ b/src/modules/partition/core/DeviceModel.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DEVICEMODEL_H #define DEVICEMODEL_H diff --git a/src/modules/partition/core/KPMHelpers.cpp b/src/modules/partition/core/KPMHelpers.cpp index 730d1d9af..92c9edb22 100644 --- a/src/modules/partition/core/KPMHelpers.cpp +++ b/src/modules/partition/core/KPMHelpers.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * Copyright 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/KPMHelpers.h" @@ -24,13 +15,15 @@ #include "partition/PartitionIterator.h" #include "utils/Logger.h" +#include "utils/String.h" -// KPMcore #include #include #include +#include #include #include +#include using CalamaresUtils::Partition::PartitionIterator; @@ -55,11 +48,13 @@ createNewPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, + const QString& fsLabel, qint64 firstSector, qint64 lastSector, PartitionTable::Flags flags ) { FileSystem* fs = FileSystemFactory::create( fsType, firstSector, lastSector, device.logicalSize() ); + fs->setLabel( fsLabel ); return new Partition( parent, device, role, @@ -80,6 +75,7 @@ createNewEncryptedPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, + const QString& fsLabel, qint64 firstSector, qint64 lastSector, const QString& passphrase, @@ -101,6 +97,7 @@ createNewEncryptedPartition( PartitionNode* parent, fs->createInnerFileSystem( fsType ); fs->setPassphrase( passphrase ); + fs->setLabel( fsLabel ); Partition* p = new Partition( parent, device, PartitionRole( newRoles ), @@ -132,4 +129,137 @@ clonePartition( Device* device, Partition* partition ) partition->activeFlags() ); } +#ifndef WITH_KPMCORE4API +// This function was added in KPMCore 4, implementation copied from src/fs/luks.cpp +/* + SPDX-FileCopyrightText: 2010 Volker Lanz + SPDX-FileCopyrightText: 2012-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + SPDX-FileCopyrightText: 2016 Chantara Tith + SPDX-FileCopyrightText: 2017 Christian Morlok + SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + SPDX-FileCopyrightText: 2020 Arnaud Ferraris + SPDX-FileCopyrightText: 2020 Gaël PORTAY + + SPDX-License-Identifier: GPL-3.0-or-later +*/ +static bool +testPassphrase( FS::luks* fs, const QString& deviceNode, const QString& passphrase ) +{ + ExternalCommand cmd( QStringLiteral( "cryptsetup" ), + { QStringLiteral( "open" ), + QStringLiteral( "--tries" ), + QStringLiteral( "1" ), + QStringLiteral( "--test-passphrase" ), + deviceNode } ); + if ( cmd.write( passphrase.toLocal8Bit() + '\n' ) && cmd.start( -1 ) && cmd.exitCode() == 0 ) + { + return true; + } + + return false; +} +#else +static bool +testPassphrase( FS::luks* fs, const QString& deviceNode, const QString& passphrase ) +{ + return fs->testPassphrase( deviceNode, passphrase ); +} +#endif + +// Adapted from luks cryptOpen which always opens a dialog to ask for a passphrase +int +updateLuksDevice( Partition* partition, const QString& passphrase ) +{ + const QString deviceNode = partition->partitionPath(); + + cDebug() << "Update Luks device: " << deviceNode; + + if ( passphrase.isEmpty() ) + { + cWarning() << Logger::SubEntry << "#1: Passphrase is empty"; + return 1; + } + + if ( partition->fileSystem().type() != FileSystem::Luks ) + { + cWarning() << Logger::SubEntry << "#2: Not a luks encrypted device"; + return 2; + } + + // Cast partition fs to luks fs + FS::luks* luksFs = dynamic_cast< FS::luks* >( &partition->fileSystem() ); + + // Test the given passphrase + if ( !testPassphrase( luksFs, deviceNode, passphrase ) ) + { + cWarning() << Logger::SubEntry << "#3: Passphrase incorrect"; + return 3; + } + + if ( luksFs->isCryptOpen() ) + { + if ( !luksFs->mapperName().isEmpty() ) + { + cWarning() << Logger::SubEntry << "#4: Device already decrypted"; + return 4; + } + else + { + cDebug() << Logger::SubEntry << "No mapper node found"; + luksFs->setCryptOpen( false ); + } + } + + ExternalCommand openCmd( QStringLiteral( "cryptsetup" ), + { QStringLiteral( "open" ), deviceNode, luksFs->suggestedMapperName( deviceNode ) } ); + + if ( !( openCmd.write( passphrase.toLocal8Bit() + '\n' ) && openCmd.start( -1 ) && openCmd.exitCode() == 0 ) ) + { + cWarning() << Logger::SubEntry << openCmd.exitCode() << ": cryptsetup command failed"; + return openCmd.exitCode(); + } + + // Save the existing passphrase + luksFs->setPassphrase( passphrase ); + + luksFs->scan( deviceNode ); + + if ( luksFs->mapperName().isEmpty() ) + { + cWarning() << Logger::SubEntry << "#5: No mapper node found"; + return 5; + } + + luksFs->loadInnerFileSystem( luksFs->mapperName() ); + luksFs->setCryptOpen( luksFs->innerFS() != nullptr ); + + if ( !luksFs->isCryptOpen() ) + { + cWarning() << Logger::SubEntry << "#6: Device could not be decrypted"; + return 6; + } + + return 0; +} + +Calamares::JobResult +execute( Operation& operation, const QString& failureMessage ) +{ + operation.setStatus( Operation::StatusRunning ); + + Report report( nullptr ); + if ( operation.execute( report ) ) + { + return Calamares::JobResult::ok(); + } + + // Remove the === lines from the report by trimming them to empty + QStringList l = report.toText().split( '\n' ); + std::for_each( l.begin(), l.end(), []( QString& s ) { CalamaresUtils::removeLeading( s, '=' ); } ); + + return Calamares::JobResult::error( failureMessage, l.join( '\n' ) ); +} + + } // namespace KPMHelpers diff --git a/src/modules/partition/core/KPMHelpers.h b/src/modules/partition/core/KPMHelpers.h index 326993362..261bd7b39 100644 --- a/src/modules/partition/core/KPMHelpers.h +++ b/src/modules/partition/core/KPMHelpers.h @@ -1,30 +1,23 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef KPMHELPERS_H #define KPMHELPERS_H -// KPMcore +#include "Job.h" + #include #include +#include +#include -// Qt #include #include @@ -64,6 +57,7 @@ Partition* createNewPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, + const QString& fsLabel, qint64 firstSector, qint64 lastSector, PartitionTable::Flags flags ); @@ -72,6 +66,7 @@ Partition* createNewEncryptedPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, + const QString& fsLabel, qint64 firstSector, qint64 lastSector, const QString& passphrase, @@ -79,6 +74,26 @@ Partition* createNewEncryptedPartition( PartitionNode* parent, Partition* clonePartition( Device* device, Partition* partition ); +int updateLuksDevice( Partition* partition, const QString& passphrase ); + +/** @brief Return a result for an @p operation + * + * Executes the operation, and if successful, returns a success result. + * Otherwise returns an error using @p failureMessage as the primary part + * of the error, and details obtained from the operation. + */ +Calamares::JobResult execute( Operation& operation, const QString& failureMessage ); +/** @brief Return a result for an @p operation + * + * It's acceptable to use an rvalue: the operation-running is the effect + * you're interested in, rather than keeping the temporary around. + */ +static inline Calamares::JobResult +execute( Operation&& operation, const QString& failureMessage ) +{ + return execute( operation, failureMessage ); +} + } // namespace KPMHelpers #endif /* KPMHELPERS_H */ diff --git a/src/modules/partition/core/OsproberEntry.h b/src/modules/partition/core/OsproberEntry.h index 1e1fd0eca..86b7691b8 100644 --- a/src/modules/partition/core/OsproberEntry.h +++ b/src/modules/partition/core/OsproberEntry.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef OSPROBERENTRY_H @@ -50,6 +41,7 @@ struct OsproberEntry { QString prettyName; QString path; + QString file; QString uuid; bool canBeResized; QStringList line; diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 4cc59d518..cb7c8a01d 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -1,27 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019 Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartUtils.h" -#include "PartitionCoreModule.h" - #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" @@ -33,6 +22,7 @@ #include "partition/PartitionQuery.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#include "utils/RAII.h" #include #include @@ -70,7 +60,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; } @@ -83,15 +73,15 @@ getRequiredStorageGiB( bool& ok ) } bool -canBeReplaced( Partition* candidate ) +canBeReplaced( Partition* candidate, const Logger::Once& o ) { if ( !candidate ) { - cDebug() << "Partition* is NULL"; + cDebug() << o << "Partition* is NULL"; return false; } - cDebug() << "Checking if" << convenienceName( candidate ) << "can be replaced."; + cDebug() << o << "Checking if" << convenienceName( candidate ) << "can be replaced."; if ( candidate->isMounted() ) { cDebug() << Logger::SubEntry << "NO, it is mounted."; @@ -111,7 +101,7 @@ canBeReplaced( Partition* candidate ) if ( availableStorageB > requiredStorageB ) { - cDebug() << "Partition" << convenienceName( candidate ) << "authorized for replace install."; + cDebug() << o << "Partition" << convenienceName( candidate ) << "authorized for replace install."; return true; } else @@ -128,31 +118,30 @@ canBeReplaced( Partition* candidate ) bool -canBeResized( Partition* candidate ) +canBeResized( Partition* candidate, const Logger::Once& o ) { if ( !candidate ) { - cDebug() << "Partition* is NULL"; + cDebug() << o << "Partition* is NULL"; return false; } - cDebug() << "Checking if" << convenienceName( candidate ) << "can be resized."; if ( !candidate->fileSystem().supportGrow() || !candidate->fileSystem().supportShrink() ) { - cDebug() << Logger::SubEntry << "NO, filesystem" << candidate->fileSystem().name() - << "does not support resize."; + cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", filesystem" + << candidate->fileSystem().name() << "does not support resize."; return false; } if ( isPartitionFreeSpace( candidate ) ) { - cDebug() << Logger::SubEntry << "NO, partition is free space"; + cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", partition is free space"; return false; } if ( candidate->isMounted() ) { - cDebug() << Logger::SubEntry << "NO, partition is mounted"; + cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", partition is mounted"; return false; } @@ -161,14 +150,14 @@ canBeResized( Partition* candidate ) PartitionTable* table = dynamic_cast< PartitionTable* >( candidate->parent() ); if ( !table ) { - cDebug() << Logger::SubEntry << "NO, no partition table found"; + cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", no partition table found"; return false; } if ( table->numPrimaries() >= table->maxPrimaries() ) { - cDebug() << Logger::SubEntry << "NO, partition table already has" << table->maxPrimaries() - << "primary partitions."; + cDebug() << o << "Can not resize" << convenienceName( candidate ) << ", partition table already has" + << table->maxPrimaries() << "primary partitions."; return false; } } @@ -177,7 +166,8 @@ canBeResized( Partition* candidate ) double requiredStorageGiB = getRequiredStorageGiB( ok ); if ( !ok ) { - cDebug() << Logger::SubEntry << "NO, requiredStorageGiB is not set correctly."; + cDebug() << o << "Can not resize" << convenienceName( candidate ) + << ", requiredStorageGiB is not set correctly."; return false; } @@ -188,7 +178,8 @@ canBeResized( Partition* candidate ) if ( availableStorageB > advisedStorageB ) { - cDebug() << "Partition" << convenienceName( candidate ) << "authorized for resize + autopartition install."; + cDebug() << o << "Partition" << convenienceName( candidate ) + << "authorized for resize + autopartition install."; return true; } else @@ -207,27 +198,27 @@ canBeResized( Partition* candidate ) bool -canBeResized( PartitionCoreModule* core, const QString& partitionPath ) +canBeResized( DeviceModel* dm, const QString& partitionPath, const Logger::Once& o ) { - cDebug() << "Checking if" << partitionPath << "can be resized."; - QString partitionWithOs = partitionPath; - if ( partitionWithOs.startsWith( "/dev/" ) ) + if ( partitionPath.startsWith( "/dev/" ) ) { - DeviceModel* dm = core->deviceModel(); for ( int i = 0; i < dm->rowCount(); ++i ) { Device* dev = dm->deviceForIndex( dm->index( i ) ); - Partition* candidate = CalamaresUtils::Partition::findPartitionByPath( { dev }, partitionWithOs ); + Partition* candidate = CalamaresUtils::Partition::findPartitionByPath( { dev }, partitionPath ); if ( candidate ) { - return canBeResized( candidate ); + return canBeResized( candidate, o ); } } - cDebug() << Logger::SubEntry << "no Partition* found for" << partitionWithOs; + cWarning() << "Can not resize" << partitionPath << ", no Partition* found."; + return false; + } + else + { + cWarning() << "Can not resize" << partitionPath << ", does not start with /dev"; + return false; } - - cDebug() << Logger::SubEntry << "Partition" << partitionWithOs << "CANNOT BE RESIZED FOR AUTOINSTALL."; - return false; } @@ -260,8 +251,6 @@ lookForFstabEntries( const QString& partitionPath ) { QFile fstabFile( mount.path() + "/etc/fstab" ); - cDebug() << Logger::SubEntry << "reading" << fstabFile.fileName(); - if ( fstabFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { const QStringList fstabLines = QString::fromLocal8Bit( fstabFile.readAll() ).split( '\n' ); @@ -271,10 +260,11 @@ lookForFstabEntries( const QString& partitionPath ) fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) ); } fstabFile.close(); - cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "lines."; + const int lineCount = fstabEntries.count(); std::remove_if( fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); - cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries."; + cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << lineCount + << "lines in" << fstabFile.fileName(); } else { @@ -367,8 +357,10 @@ findPartitionPathForMountPoint( const FstabEntryList& fstab, const QString& moun OsproberEntryList -runOsprober( PartitionCoreModule* core ) +runOsprober( DeviceModel* dm ) { + Logger::Once o; + QString osproberOutput; QProcess osprober; osprober.setProgram( "os-prober" ); @@ -405,28 +397,42 @@ runOsprober( PartitionCoreModule* core ) prettyName = lineColumns.value( 2 ).simplified(); } - QString path = lineColumns.value( 0 ).simplified(); + QString file, path = lineColumns.value( 0 ).simplified(); if ( !path.startsWith( "/dev/" ) ) //basic sanity check { continue; } + // strip extra file after device: /dev/name@/path/to/file + int index = path.indexOf( '@' ); + if ( index != -1 ) + { + file = path.right( path.length() - index - 1 ); + path = path.left( index ); + } + FstabEntryList fstabEntries = lookForFstabEntries( path ); QString homePath = findPartitionPathForMountPoint( fstabEntries, "/home" ); - osproberEntries.append( - { prettyName, path, QString(), canBeResized( core, path ), lineColumns, fstabEntries, homePath } ); + osproberEntries.append( { prettyName, + path, + file, + QString(), + canBeResized( dm, path, o ), + lineColumns, + fstabEntries, + homePath } ); osproberCleanLines.append( line ); } } if ( osproberCleanLines.count() > 0 ) { - cDebug() << "os-prober lines after cleanup:" << Logger::DebugList( osproberCleanLines ); + cDebug() << o << "os-prober lines after cleanup:" << Logger::DebugList( osproberCleanLines ); } else { - cDebug() << "os-prober gave no output."; + cDebug() << o << "os-prober gave no output."; } Calamares::JobQueue::instance()->globalStorage()->insert( "osproberLines", osproberCleanLines ); @@ -440,57 +446,122 @@ isEfiSystem() return QDir( "/sys/firmware/efi/efivars" ).exists(); } +bool +isEfiFilesystemSuitableType( const Partition* candidate ) +{ + auto type = candidate->fileSystem().type(); + + QT_WARNING_PUSH + QT_WARNING_DISABLE_CLANG( "-Wswitch-enum" ) + switch ( type ) + { + case FileSystem::Type::Fat32: + return true; +#ifdef WITH_KPMCORE4API + case FileSystem::Type::Fat12: +#endif + case FileSystem::Type::Fat16: + cWarning() << "FAT12 and FAT16 are probably not supported by EFI"; + return false; + default: + cWarning() << "EFI boot partition must be FAT32"; + return false; + } + QT_WARNING_POP +} + +bool +isEfiFilesystemSuitableSize( const Partition* candidate ) +{ + auto size = candidate->capacity(); // bytes + if ( size <= 0 ) + { + return false; + } + + if ( size_t( size ) >= efiFilesystemMinimumSize() ) + { + return true; + } + else + { + cWarning() << "Filesystem for EFI is too small (" << size << "bytes)"; + return false; + } +} + + bool isEfiBootable( const Partition* candidate ) { - cDebug() << "Check EFI bootable" << convenienceName( candidate ) << candidate->devicePath(); - cDebug() << Logger::SubEntry << "flags" << candidate->activeFlags(); + const auto flags = PartitionInfo::flags( candidate ); - auto flags = PartitionInfo::flags( candidate ); - - /* If bit 17 is set, old-style Esp flag, it's OK */ +#if defined( WITH_KPMCORE4API ) + // In KPMCore4, the flags are remapped, and the ESP flag is the same as Boot. + static_assert( KPM_PARTITION_FLAG_ESP == KPM_PARTITION_FLAG( Boot ), "KPMCore API enum changed" ); + return flags.testFlag( KPM_PARTITION_FLAG_ESP ); +#else + // In KPMCore3, bit 17 is the old-style Esp flag, and it's OK if ( flags.testFlag( KPM_PARTITION_FLAG_ESP ) ) { return true; } /* Otherwise, if it's a GPT table, Boot (bit 0) is the same as Esp */ - const PartitionNode* root = candidate; - while ( root && !root->isRoot() ) - { - root = root->parent(); - cDebug() << Logger::SubEntry << "moved towards root" << (void*)root; - } - - // Strange case: no root found, no partition table node? - if ( !root ) + const PartitionTable* table = CalamaresUtils::Partition::getPartitionTable( candidate ); + if ( !table ) { + cWarning() << "Root of partition table is not a PartitionTable object"; return false; } - - const PartitionTable* table = dynamic_cast< const PartitionTable* >( root ); - cDebug() << Logger::SubEntry << "partition table" << (void*)table << "type" - << ( table ? table->type() : PartitionTable::TableType::unknownTableType ); - return table && ( table->type() == PartitionTable::TableType::gpt ) && flags.testFlag( KPM_PARTITION_FLAG( Boot ) ); + if ( table->type() == PartitionTable::TableType::gpt ) + { + const auto bootFlag = KPM_PARTITION_FLAG( Boot ); + return flags.testFlag( bootFlag ); + } + return false; +#endif } -QString -findFS( QString fsName, FileSystem::Type* fsType ) +// TODO: this is configurable via the config file **already** +size_t +efiFilesystemMinimumSize() { - QStringList fsLanguage { QLatin1String( "C" ) }; // Required language list to turn off localization + using CalamaresUtils::Units::operator""_MiB; + + size_t uefisys_part_sizeB = 300_MiB; + + // The default can be overridden; the key used here comes + // from the partition module Config.cpp + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs->contains( "efiSystemPartitionSize_i" ) ) + { + qint64 v = gs->value( "efiSystemPartitionSize_i" ).toLongLong(); + uefisys_part_sizeB = v > 0 ? static_cast< size_t >( v ) : 0; + } + // There is a lower limit of what can be configured + if ( uefisys_part_sizeB < 32_MiB ) + { + uefisys_part_sizeB = 32_MiB; + } + return uefisys_part_sizeB; +} + + +QString +canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType ) +{ + cScopedAssignment type( fsType ); if ( fsName.isEmpty() ) { - fsName = QStringLiteral( "ext4" ); + type = FileSystem::Ext4; + return QStringLiteral( "ext4" ); } - FileSystem::Type tmpType = FileSystem::typeForName( fsName, fsLanguage ); - if ( tmpType != FileSystem::Unknown ) + QStringList fsLanguage { QLatin1String( "C" ) }; // Required language list to turn off localization + + if ( ( type = FileSystem::typeForName( fsName, fsLanguage ) ) != FileSystem::Unknown ) { - cDebug() << "Found filesystem" << fsName; - if ( fsType ) - { - *fsType = tmpType; - } return fsName; } @@ -501,7 +572,6 @@ findFS( QString fsName, FileSystem::Type* fsType ) if ( 0 == QString::compare( fsName, FileSystem::nameForType( t, fsLanguage ), Qt::CaseInsensitive ) ) { QString fsRealName = FileSystem::nameForType( t, fsLanguage ); - cDebug() << "Filesystem name" << fsName << "translated to" << fsRealName; if ( fsType ) { *fsType = t; @@ -510,8 +580,7 @@ findFS( QString fsName, FileSystem::Type* fsType ) } } - cDebug() << "Filesystem" << fsName << "not found, using ext4"; - fsName = QStringLiteral( "ext4" ); + cWarning() << "Filesystem" << fsName << "not found, using ext4"; // fsType can be used to check whether fsName was a valid filesystem. if ( fsType ) { @@ -531,7 +600,8 @@ findFS( QString fsName, FileSystem::Type* fsType ) } } #endif - return fsName; + type = FileSystem::Unknown; + return QStringLiteral( "ext4" ); } } // namespace PartUtils diff --git a/src/modules/partition/core/PartUtils.h b/src/modules/partition/core/PartUtils.h index 0db49d043..31b4cde84 100644 --- a/src/modules/partition/core/PartUtils.h +++ b/src/modules/partition/core/PartUtils.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019 Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTUTILS_H @@ -31,8 +22,12 @@ // Qt #include -class PartitionCoreModule; +class DeviceModel; class Partition; +namespace Logger +{ +class Once; +} namespace PartUtils { @@ -50,40 +45,70 @@ QString convenienceName( const Partition* const candidate ); * @brief canBeReplaced checks whether the given Partition satisfies the criteria * for replacing it with the new OS. * @param candidate the candidate partition to replace. + * @param o applied to debug-logging. * @return true if the criteria are met, otherwise false. */ -bool canBeReplaced( Partition* candidate ); +bool canBeReplaced( Partition* candidate, const Logger::Once& o ); /** * @brief canBeReplaced checks whether the given Partition satisfies the criteria * for resizing (shrinking) it to make room for a new OS. * @param candidate the candidate partition to resize. + * @param o applied to debug-logging. * @return true if the criteria are met, otherwise false. */ -bool canBeResized( Partition* candidate ); +bool canBeResized( Partition* candidate, const Logger::Once& o ); /** * @brief canBeReplaced checks whether the given Partition satisfies the criteria * for resizing (shrinking) it to make room for a new OS. - * @param core the PartitionCoreModule instance. + * @param dm the DeviceModel instance. * @param partitionPath the device path of the candidate partition to resize. + * @param o applied to debug-logging. * @return true if the criteria are met, otherwise false. */ -bool canBeResized( PartitionCoreModule* core, const QString& partitionPath ); +bool canBeResized( DeviceModel* dm, const QString& partitionPath, const Logger::Once& o ); /** * @brief runOsprober executes os-prober, parses the output and writes relevant * data to GlobalStorage. - * @param core the PartitionCoreModule instance. + * @param dm the DeviceModel instance. * @return a list of os-prober entries, parsed. */ -OsproberEntryList runOsprober( PartitionCoreModule* core ); +OsproberEntryList runOsprober( DeviceModel* dm ); /** * @brief Is this system EFI-enabled? Decides based on /sys/firmware/efi */ bool isEfiSystem(); +/** + * @brief Is the @p partition suitable as an EFI boot partition? + * Checks for filesystem type (FAT32). + */ +bool isEfiFilesystemSuitableType( const Partition* candidate ); + +/** + * @brief Is the @p partition suitable as an EFI boot partition? + * Checks for filesystem size (300MiB, see efiFilesystemMinimumSize). + */ +bool isEfiFilesystemSuitableSize( const Partition* candidate ); + +/** @brief Returns the minimum size of an EFI boot partition in bytes. + * + * This is determined as 300MiB, based on the FAT32 standard + * and EFI documentation (and not a little discussion in Calamares + * issues about what works, what is effective, and what is mandated + * by the standard and how all of those are different). + * + * This can be configured through the `partition.conf` file, + * key *efiSystemPartitionSize*, which will then apply to both + * automatic partitioning **and** the warning for manual partitioning. + * + * A minimum of 32MiB (which is bonkers-small) is enforced. + */ +size_t efiFilesystemMinimumSize(); + /** * @brief Is the given @p partition bootable in EFI? Depending on * the partition table layout, this may mean different flags. @@ -93,11 +118,13 @@ bool isEfiBootable( const Partition* candidate ); /** @brief translate @p fsName into a recognized name and type * * Makes several attempts to translate the string into a - * name that KPMCore will recognize. + * name that KPMCore will recognize. Returns the canonical + * filesystem name (e.g. asking for "EXT4" will return "ext4"). + * * The corresponding filesystem type is stored in @p fsType, and * its value is FileSystem::Unknown if @p fsName is not recognized. */ -QString findFS( QString fsName, FileSystem::Type* fsType ); +QString canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType ); } // namespace PartUtils diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index 5e785c9d1..0ce9ff4ed 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionActions.h" @@ -25,28 +16,27 @@ #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" -#include "utils/CalamaresUtilsSystem.h" -#include "utils/NamedEnum.h" -#include "utils/Units.h" - #include "GlobalStorage.h" #include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#include "utils/NamedEnum.h" +#include "utils/Units.h" #include #include #include +using namespace CalamaresUtils::Units; + namespace PartitionActions { -using CalamaresUtils::operator""_GiB; -using CalamaresUtils::operator""_MiB; qint64 -swapSuggestion( const qint64 availableSpaceB, Choices::SwapChoice swap ) +swapSuggestion( const qint64 availableSpaceB, Config::SwapChoice swap ) { - if ( ( swap != Choices::SmallSwap ) && ( swap != Choices::FullSwap ) ) + if ( ( swap != Config::SwapChoice::SmallSwap ) && ( swap != Config::SwapChoice::FullSwap ) ) { return 0; } @@ -57,7 +47,7 @@ swapSuggestion( const qint64 availableSpaceB, Choices::SwapChoice swap ) qint64 availableRamB = memory.first; qreal overestimationFactor = memory.second; - bool ensureSuspendToDisk = swap == Choices::FullSwap; + bool ensureSuspendToDisk = swap == Config::SwapChoice::FullSwap; // Ramp up quickly to 8GiB, then follow memory size if ( availableRamB <= 4_GiB ) @@ -81,15 +71,15 @@ swapSuggestion( const qint64 availableSpaceB, Choices::SwapChoice swap ) // Allow for a fudge factor - suggestedSwapSizeB *= overestimationFactor; + suggestedSwapSizeB = qRound64( suggestedSwapSizeB * overestimationFactor ); // don't use more than 10% of available space if ( !ensureSuspendToDisk ) { - suggestedSwapSizeB = qMin( suggestedSwapSizeB, qint64( 0.10 * availableSpaceB ) ); + suggestedSwapSizeB = qMin( suggestedSwapSizeB, availableSpaceB / 10 /* 10% is 0.1 */ ); } - cDebug() << "Suggested swap size:" << suggestedSwapSizeB / 1024. / 1024. / 1024. << "GiB"; + cDebug() << "Suggested swap size:" << CalamaresUtils::BytesToGiB( suggestedSwapSizeB ) << "GiB"; return suggestedSwapSizeB; } @@ -98,11 +88,6 @@ void doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions o ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QString defaultFsType = o.defaultFsType; - if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) - { - defaultFsType = "ext4"; - } bool isEfi = PartUtils::isEfiSystem(); @@ -111,29 +96,29 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO // empty and a EFI boot partition, while BIOS starts at // the 1MiB boundary (usually sector 2048). int empty_space_sizeB = isEfi ? 2_MiB : 1_MiB; - int uefisys_part_sizeB = 0_MiB; - - if ( isEfi ) - { - if ( gs->contains( "efiSystemPartitionSize" ) ) - { - CalamaresUtils::Partition::PartitionSize part_size - = CalamaresUtils::Partition::PartitionSize( gs->value( "efiSystemPartitionSize" ).toString() ); - uefisys_part_sizeB = part_size.toBytes( dev->capacity() ); - } - else - { - uefisys_part_sizeB = 300_MiB; - } - } // Since sectors count from 0, if the space is 2048 sectors in size, // the first free sector has number 2048 (and there are 2048 sectors // before that one, numbered 0..2047). qint64 firstFreeSector = CalamaresUtils::bytesToSectors( empty_space_sizeB, dev->logicalSize() ); + PartitionTable::TableType partType = PartitionTable::nameToTableType( o.defaultPartitionTableType ); + if ( partType == PartitionTable::unknownTableType ) + { + partType = isEfi ? PartitionTable::gpt : PartitionTable::msdos; + } + + // Looking up the defaultFsType (which should name a filesystem type) + // will log an error and set the type to Unknown if there's something wrong. + FileSystem::Type type = FileSystem::Unknown; + PartUtils::canonicalFilesystemName( o.defaultFsType, &type ); + core->partitionLayout().setDefaultFsType( type == FileSystem::Unknown ? FileSystem::Ext4 : type ); + + core->createPartitionTable( dev, partType ); + if ( isEfi ) { + size_t uefisys_part_sizeB = PartUtils::efiFilesystemMinimumSize(); qint64 efiSectorCount = CalamaresUtils::bytesToSectors( uefisys_part_sizeB, dev->logicalSize() ); Q_ASSERT( efiSectorCount > 0 ); @@ -141,25 +126,26 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO // at firstFreeSector, we need efiSectorCount sectors, numbered // firstFreeSector..firstFreeSector+efiSectorCount-1. qint64 lastSector = firstFreeSector + efiSectorCount - 1; - core->createPartitionTable( dev, PartitionTable::gpt ); Partition* efiPartition = KPMHelpers::createNewPartition( dev->partitionTable(), *dev, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, + QString(), firstFreeSector, lastSector, KPM_PARTITION_FLAG( None ) ); PartitionInfo::setFormat( efiPartition, true ); PartitionInfo::setMountPoint( efiPartition, o.efiPartitionMountPoint ); + if ( gs->contains( "efiSystemPartitionName" ) ) + { + efiPartition->setLabel( gs->value( "efiSystemPartitionName" ).toString() ); + } core->createPartition( dev, efiPartition, KPM_PARTITION_FLAG_ESP ); firstFreeSector = lastSector + 1; } - else - { - core->createPartitionTable( dev, PartitionTable::msdos ); - } - const bool mayCreateSwap = ( o.swap == Choices::SmallSwap ) || ( o.swap == Choices::FullSwap ); + const bool mayCreateSwap + = ( o.swap == Config::SwapChoice::SmallSwap ) || ( o.swap == Config::SwapChoice::FullSwap ); bool shouldCreateSwap = false; qint64 suggestedSwapSizeB = 0; @@ -193,6 +179,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO *dev, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, + QStringLiteral( "swap" ), lastSectorForRoot + 1, dev->totalLogical() - 1, KPM_PARTITION_FLAG( None ) ); @@ -203,12 +190,17 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO *dev, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, + QStringLiteral( "swap" ), lastSectorForRoot + 1, dev->totalLogical() - 1, o.luksPassphrase, KPM_PARTITION_FLAG( None ) ); } PartitionInfo::setFormat( swapPartition, true ); + if ( gs->contains( "swapPartitionName" ) ) + { + swapPartition->setLabel( gs->value( "swapPartitionName" ).toString() ); + } core->createPartition( dev, swapPartition ); } @@ -223,12 +215,6 @@ doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition cDebug() << "doReplacePartition for device" << partition->partitionPath(); - QString defaultFsType = o.defaultFsType; - if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) - { - defaultFsType = "ext4"; - } - PartitionRole newRoles( partition->roles() ); if ( partition->roles().has( PartitionRole::Extended ) ) { @@ -262,33 +248,4 @@ doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition core->dumpQueue(); } -namespace Choices -{ -static const NamedEnumTable< SwapChoice >& -nameTable() -{ - static const NamedEnumTable< SwapChoice > names { { QStringLiteral( "none" ), SwapChoice::NoSwap }, - { QStringLiteral( "small" ), SwapChoice::SmallSwap }, - { QStringLiteral( "suspend" ), SwapChoice::FullSwap }, - { QStringLiteral( "reuse" ), SwapChoice::ReuseSwap }, - { QStringLiteral( "file" ), SwapChoice::SwapFile } }; - - return names; -} - -SwapChoice -nameToChoice( QString name, bool& ok ) -{ - return nameTable().find( name, ok ); -} - -QString -choiceToName( SwapChoice c ) -{ - bool ok = false; - return nameTable().find( c, ok ); -} - -} // namespace Choices - } // namespace PartitionActions diff --git a/src/modules/partition/core/PartitionActions.h b/src/modules/partition/core/PartitionActions.h index ed7045822..efe8b2456 100644 --- a/src/modules/partition/core/PartitionActions.h +++ b/src/modules/partition/core/PartitionActions.h @@ -1,24 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONACTIONS_H #define PARTITIONACTIONS_H +#include "Config.h" + +#include #include class PartitionCoreModule; @@ -33,26 +27,15 @@ namespace PartitionActions */ namespace Choices { -/** @brief Ccchoice of swap (size and type) */ -enum SwapChoice -{ - NoSwap, // don't create any swap, don't use any - ReuseSwap, // don't create, but do use existing - SmallSwap, // up to 8GiB of swap - FullSwap, // ensureSuspendToDisk -- at least RAM size - SwapFile // use a file (if supported) -}; - -SwapChoice nameToChoice( QString name, bool& ok ); -QString choiceToName( SwapChoice ); - struct ReplacePartitionOptions { + QString defaultPartitionTableType; // e.g. "gpt" or "msdos" QString defaultFsType; // e.g. "ext4" or "btrfs" QString luksPassphrase; // optional - ReplacePartitionOptions( const QString& fs, const QString& luks ) - : defaultFsType( fs ) + ReplacePartitionOptions( const QString& pt, const QString& fs, const QString& luks ) + : defaultPartitionTableType( pt ) + , defaultFsType( fs ) , luksPassphrase( luks ) { } @@ -61,17 +44,18 @@ struct ReplacePartitionOptions struct AutoPartitionOptions : ReplacePartitionOptions { QString efiPartitionMountPoint; // optional, e.g. "/boot" - quint64 requiredSpaceB; // estimated required space for root partition - SwapChoice swap; + qint64 requiredSpaceB; // estimated required space for root partition + Config::SwapChoice swap; - AutoPartitionOptions( const QString& fs, + AutoPartitionOptions( const QString& pt, + const QString& fs, const QString& luks, const QString& efi, qint64 requiredBytes, - SwapChoice s ) - : ReplacePartitionOptions( fs, luks ) + Config::SwapChoice s ) + : ReplacePartitionOptions( pt, fs, luks ) , efiPartitionMountPoint( efi ) - , requiredSpaceB( requiredBytes > 0 ? static_cast< quint64 >( requiredBytes ) : 0 ) + , requiredSpaceB( requiredBytes > 0 ? requiredBytes : 0 ) , swap( s ) { } diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index aee1ab10f..f7d1e8278 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -1,23 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2018, Caio Carvalho - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Caio Carvalho + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/PartitionCoreModule.h" @@ -30,6 +21,8 @@ #include "core/PartUtils.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" +#include "jobs/AutoMountManagementJob.h" +#include "jobs/ChangeFilesystemLabelJob.h" #include "jobs/ClearMountsJob.h" #include "jobs/ClearTempMountsJob.h" #include "jobs/CreatePartitionJob.h" @@ -44,12 +37,13 @@ #include "jobs/ResizeVolumeGroupJob.h" #include "jobs/SetPartitionFlagsJob.h" -#ifdef DEBUG_PARTITION_LAME +#ifdef DEBUG_PARTITION_BAIL_OUT #include "JobExample.h" #endif #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" +#include "utils/Traits.h" #include "utils/Variant.h" // KPMcore @@ -66,7 +60,6 @@ // Qt #include #include -#include #include #include @@ -106,6 +99,89 @@ private: //- DeviceInfo --------------------------------------------- +// Some jobs have an updatePreview some don't +DECLARE_HAS_METHOD( updatePreview ) + +template < typename Job > +void +updatePreview( Job* job, const std::true_type& ) +{ + job->updatePreview(); +} + +template < typename Job > +void +updatePreview( Job*, const std::false_type& ) +{ +} + +template < typename Job > +void +updatePreview( Job* job ) +{ + updatePreview( job, has_updatePreview< Job > {} ); +} + +/** + * Owns the Device, PartitionModel and the jobs + */ +struct PartitionCoreModule::DeviceInfo +{ + DeviceInfo( Device* ); + ~DeviceInfo(); + QScopedPointer< Device > device; + QScopedPointer< PartitionModel > partitionModel; + const QScopedPointer< Device > immutableDevice; + + // To check if LVM VGs are deactivated + bool isAvailable; + + void forgetChanges(); + bool isDirty() const; + + const Calamares::JobList& jobs() const { return m_jobs; } + + /** @brief Take the jobs of the given type that apply to @p partition + * + * Returns a job pointer to the job that has just been removed. + */ + template < typename Job > + Calamares::job_ptr takeJob( Partition* partition ) + { + for ( auto it = m_jobs.begin(); it != m_jobs.end(); ) + { + Job* job = qobject_cast< Job* >( it->data() ); + if ( job && job->partition() == partition ) + { + Calamares::job_ptr p = *it; + it = m_jobs.erase( it ); + return p; + } + else + { + ++it; + } + } + + return Calamares::job_ptr( nullptr ); + } + + /** @brief Add a job of given type to the job list + */ + template < typename Job, typename... Args > + Calamares::Job* makeJob( Args... a ) + { + auto* job = new Job( device.get(), a... ); + updatePreview( job ); + m_jobs << Calamares::job_ptr( job ); + return job; + } + +private: + Calamares::JobList m_jobs; +}; + + PartitionCoreModule::DeviceInfo::DeviceInfo( Device* _device ) : device( _device ) , partitionModel( new PartitionModel ) @@ -120,7 +196,7 @@ PartitionCoreModule::DeviceInfo::~DeviceInfo() {} void PartitionCoreModule::DeviceInfo::forgetChanges() { - jobs.clear(); + m_jobs.clear(); for ( auto it = PartitionIterator::begin( device.data() ); it != PartitionIterator::end( device.data() ); ++it ) { PartitionInfo::reset( *it ); @@ -132,16 +208,18 @@ PartitionCoreModule::DeviceInfo::forgetChanges() bool PartitionCoreModule::DeviceInfo::isDirty() const { - if ( !jobs.isEmpty() ) + if ( !m_jobs.isEmpty() ) { return true; } for ( auto it = PartitionIterator::begin( device.data() ); it != PartitionIterator::end( device.data() ); ++it ) + { if ( PartitionInfo::isDirty( *it ) ) { return true; } + } return false; } @@ -176,20 +254,29 @@ PartitionCoreModule::doInit() DeviceList devices = PartUtils::getDevices( PartUtils::DeviceType::WritableOnly ); cDebug() << "LIST OF DETECTED DEVICES:"; - cDebug() << "node\tcapacity\tname\tprettyName"; + cDebug() << Logger::SubEntry << "node\tcapacity\tname\tprettyName"; for ( auto device : devices ) { - // Gives ownership of the Device* to the DeviceInfo object - auto deviceInfo = new DeviceInfo( device ); - m_deviceInfos << deviceInfo; - cDebug() << device->deviceNode() << device->capacity() << device->name() << device->prettyName(); + if ( device ) + { + // Gives ownership of the Device* to the DeviceInfo object + auto deviceInfo = new DeviceInfo( device ); + m_deviceInfos << deviceInfo; + cDebug() << Logger::SubEntry << device->deviceNode() << device->capacity() + << Logger::RedactedName( "DevName", device->name() ) + << Logger::RedactedName( "DevNamePretty", device->prettyName() ); + } + else + { + cDebug() << Logger::SubEntry << "(skipped null device)"; + } } cDebug() << Logger::SubEntry << devices.count() << "devices detected."; m_deviceModel->init( devices ); // The following PartUtils::runOsprober call in turn calls PartUtils::canBeResized, // which relies on a working DeviceModel. - m_osproberLines = PartUtils::runOsprober( this ); + m_osproberLines = PartUtils::runOsprober( this->deviceModel() ); // We perform a best effort of filling out filesystem UUIDs in m_osproberLines // because we will need them later on in PartitionModel if partition paths @@ -261,7 +348,7 @@ PartitionCoreModule::deviceModel() const return m_deviceModel; } -QAbstractItemModel* +BootLoaderModel* PartitionCoreModule::bootLoaderModel() const { return m_bootLoaderModel; @@ -293,36 +380,30 @@ PartitionCoreModule::immutableDeviceCopy( const Device* device ) void PartitionCoreModule::createPartitionTable( Device* device, PartitionTable::TableType type ) { - DeviceInfo* info = infoForDevice( device ); - if ( info ) + auto* deviceInfo = infoForDevice( device ); + if ( deviceInfo ) { // Creating a partition table wipes all the disk, so there is no need to // keep previous changes - info->forgetChanges(); + deviceInfo->forgetChanges(); OperationHelper helper( partitionModelForDevice( device ), this ); - CreatePartitionTableJob* job = new CreatePartitionTableJob( device, type ); - job->updatePreview(); - info->jobs << Calamares::job_ptr( job ); + deviceInfo->makeJob< CreatePartitionTableJob >( type ); } } void PartitionCoreModule::createPartition( Device* device, Partition* partition, PartitionTable::Flags flags ) { - auto deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); - CreatePartitionJob* job = new CreatePartitionJob( device, partition ); - job->updatePreview(); - - deviceInfo->jobs << Calamares::job_ptr( job ); + deviceInfo->makeJob< CreatePartitionJob >( partition ); if ( flags != KPM_PARTITION_FLAG( None ) ) { - SetPartFlagsJob* fJob = new SetPartFlagsJob( device, partition, flags ); - deviceInfo->jobs << Calamares::job_ptr( fJob ); + deviceInfo->makeJob< SetPartFlagsJob >( partition, flags ); PartitionInfo::setFlags( partition, flags ); } } @@ -336,49 +417,39 @@ PartitionCoreModule::createVolumeGroup( QString& vgName, QVector< const Partitio vgName.append( '_' ); } - CreateVolumeGroupJob* job = new CreateVolumeGroupJob( vgName, pvList, peSize ); - job->updatePreview(); - LvmDevice* device = new LvmDevice( vgName ); - for ( const Partition* p : pvList ) { device->physicalVolumes() << p; } DeviceInfo* deviceInfo = new DeviceInfo( device ); - deviceInfo->partitionModel->init( device, osproberEntries() ); - m_deviceModel->addDevice( device ); - m_deviceInfos << deviceInfo; - deviceInfo->jobs << Calamares::job_ptr( job ); + deviceInfo->makeJob< CreateVolumeGroupJob >( vgName, pvList, peSize ); refreshAfterModelChange(); } void PartitionCoreModule::resizeVolumeGroup( LvmDevice* device, QVector< const Partition* >& pvList ) { - DeviceInfo* deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); - - ResizeVolumeGroupJob* job = new ResizeVolumeGroupJob( device, pvList ); - - deviceInfo->jobs << Calamares::job_ptr( job ); - + deviceInfo->makeJob< ResizeVolumeGroupJob >( device, pvList ); refreshAfterModelChange(); } void PartitionCoreModule::deactivateVolumeGroup( LvmDevice* device ) { - DeviceInfo* deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); deviceInfo->isAvailable = false; + // TODO: this leaks DeactivateVolumeGroupJob* job = new DeactivateVolumeGroupJob( device ); // DeactivateVolumeGroupJob needs to be immediately called @@ -390,20 +461,16 @@ PartitionCoreModule::deactivateVolumeGroup( LvmDevice* device ) void PartitionCoreModule::removeVolumeGroup( LvmDevice* device ) { - DeviceInfo* deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); - - RemoveVolumeGroupJob* job = new RemoveVolumeGroupJob( device ); - - deviceInfo->jobs << Calamares::job_ptr( job ); - + deviceInfo->makeJob< RemoveVolumeGroupJob >( device ); refreshAfterModelChange(); } void PartitionCoreModule::deletePartition( Device* device, Partition* partition ) { - auto deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); @@ -426,29 +493,22 @@ PartitionCoreModule::deletePartition( Device* device, Partition* partition ) } } - Calamares::JobList& jobs = deviceInfo->jobs; if ( partition->state() == KPM_PARTITION_STATE( New ) ) { - // First remove matching SetPartFlagsJobs - for ( auto it = jobs.begin(); it != jobs.end(); ) + // Take all the SetPartFlagsJob from the list and delete them + do { - SetPartFlagsJob* job = qobject_cast< SetPartFlagsJob* >( it->data() ); - if ( job && job->partition() == partition ) + auto job_ptr = deviceInfo->takeJob< SetPartFlagsJob >( partition ); + if ( job_ptr.data() ) { - it = jobs.erase( it ); + continue; } - else - { - ++it; - } - } + } while ( false ); + // Find matching CreatePartitionJob - auto it = std::find_if( jobs.begin(), jobs.end(), [partition]( Calamares::job_ptr job ) { - CreatePartitionJob* createJob = qobject_cast< CreatePartitionJob* >( job.data() ); - return createJob && createJob->partition() == partition; - } ); - if ( it == jobs.end() ) + auto job_ptr = deviceInfo->takeJob< CreatePartitionJob >( partition ); + if ( !job_ptr.data() ) { cDebug() << "Failed to find a CreatePartitionJob matching the partition to remove"; return; @@ -461,7 +521,6 @@ PartitionCoreModule::deletePartition( Device* device, Partition* partition ) } device->partitionTable()->updateUnallocated( *device ); - jobs.erase( it ); // The partition is no longer referenced by either a job or the device // partition list, so we have to delete it delete partition; @@ -469,67 +528,101 @@ PartitionCoreModule::deletePartition( Device* device, Partition* partition ) else { // Remove any PartitionJob on this partition - for ( auto it = jobs.begin(); it != jobs.end(); ) + do { - PartitionJob* job = qobject_cast< PartitionJob* >( it->data() ); - if ( job && job->partition() == partition ) + auto job_ptr = deviceInfo->takeJob< PartitionJob >( partition ); + if ( job_ptr.data() ) { - it = jobs.erase( it ); + continue; } - else - { - ++it; - } - } - DeletePartitionJob* job = new DeletePartitionJob( device, partition ); - job->updatePreview(); - jobs << Calamares::job_ptr( job ); + } while ( false ); + + deviceInfo->makeJob< DeletePartitionJob >( partition ); } } void PartitionCoreModule::formatPartition( Device* device, Partition* partition ) { - auto deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); + deviceInfo->makeJob< FormatPartitionJob >( partition ); +} - FormatPartitionJob* job = new FormatPartitionJob( device, partition ); - deviceInfo->jobs << Calamares::job_ptr( job ); +void +PartitionCoreModule::setFilesystemLabel( Device* device, Partition* partition, const QString& newLabel ) +{ + auto deviceInfo = infoForDevice( device ); + Q_ASSERT( deviceInfo ); + + OperationHelper helper( partitionModelForDevice( device ), this ); + deviceInfo->makeJob< ChangeFilesystemLabelJob >( partition, newLabel ); } void PartitionCoreModule::resizePartition( Device* device, Partition* partition, qint64 first, qint64 last ) { - auto deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); - - ResizePartitionJob* job = new ResizePartitionJob( device, partition, first, last ); - job->updatePreview(); - deviceInfo->jobs << Calamares::job_ptr( job ); + deviceInfo->makeJob< ResizePartitionJob >( partition, first, last ); } void PartitionCoreModule::setPartitionFlags( Device* device, Partition* partition, PartitionTable::Flags flags ) { - auto deviceInfo = infoForDevice( device ); + auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper( partitionModelForDevice( device ), this ); - - SetPartFlagsJob* job = new SetPartFlagsJob( device, partition, flags ); - deviceInfo->jobs << Calamares::job_ptr( job ); + deviceInfo->makeJob< SetPartFlagsJob >( partition, flags ); PartitionInfo::setFlags( partition, flags ); } +STATICTEST QStringList +findEssentialLVs( const QList< PartitionCoreModule::DeviceInfo* >& infos ) +{ + QStringList doNotClose; + cDebug() << "Checking LVM use on" << infos.count() << "devices"; + for ( const auto* info : infos ) + { + if ( info->device->type() != Device::Type::LVM_Device ) + { + continue; + } + + for ( const auto& j : qAsConst( info->jobs() ) ) + { + FormatPartitionJob* format = dynamic_cast< FormatPartitionJob* >( j.data() ); + if ( format ) + { + // device->deviceNode() is /dev/ + // partition()->partitionPath() is /dev// + const auto* partition = format->partition(); + const QString partPath = partition->partitionPath(); + const QString devicePath = info->device->deviceNode() + '/'; + const bool isLvm = partition->roles().has( PartitionRole::Lvm_Lv ); + if ( isLvm && partPath.startsWith( devicePath ) ) + { + cDebug() << Logger::SubEntry << partPath + << "is an essential LV filesystem=" << partition->fileSystem().type(); + QString lvName = partPath.right( partPath.length() - devicePath.length() ); + doNotClose.append( info->device->name() + '-' + lvName ); + } + } + } + } + return doNotClose; +} + Calamares::JobList -PartitionCoreModule::jobs() const +PartitionCoreModule::jobs( const Config* config ) const { Calamares::JobList lst; QList< Device* > devices; #ifdef DEBUG_PARTITION_UNSAFE -#ifdef DEBUG_PARTITION_LAME +#ifdef DEBUG_PARTITION_BAIL_OUT cDebug() << "Unsafe partitioning is enabled."; cDebug() << Logger::SubEntry << "it has been lamed, and will fail."; lst << Calamares::job_ptr( new Calamares::FailJob( QStringLiteral( "Partition" ) ) ); @@ -539,22 +632,40 @@ PartitionCoreModule::jobs() const #endif #endif + // The automountControl job goes in the list twice: the first + // time it runs, it disables automount and remembers the old setting + // for automount; the second time it restores that old setting. + Calamares::job_ptr automountControl( new AutoMountManagementJob( true /* disable automount */ ) ); + lst << automountControl; lst << Calamares::job_ptr( new ClearTempMountsJob() ); - for ( auto info : m_deviceInfos ) +#ifdef DEBUG_PARTITION_SKIP + cWarning() << "Partitioning actions are skipped."; +#else + const QStringList doNotClose = findEssentialLVs( m_deviceInfos ); + + for ( const auto* info : m_deviceInfos ) { if ( info->isDirty() ) { - lst << Calamares::job_ptr( new ClearMountsJob( info->device.data() ) ); + auto* job = new ClearMountsJob( info->device.data() ); + job->setMapperExceptions( doNotClose ); + lst << Calamares::job_ptr( job ); } } +#endif - for ( auto info : m_deviceInfos ) + for ( const auto* info : m_deviceInfos ) { - lst << info->jobs; +#ifdef DEBUG_PARTITION_SKIP + cWarning() << Logger::SubEntry << "Skipping jobs for" << info->device.data()->deviceNode(); +#else + lst << info->jobs(); +#endif devices << info->device.data(); } - lst << Calamares::job_ptr( new FillGlobalStorageJob( devices, m_bootLoaderInstallPath ) ); + lst << Calamares::job_ptr( new FillGlobalStorageJob( config, devices, m_bootLoaderInstallPath ) ); + lst << automountControl; return lst; } @@ -580,9 +691,8 @@ PartitionCoreModule::lvmPVs() const bool PartitionCoreModule::hasVGwithThisName( const QString& name ) const { - auto condition = [name]( DeviceInfo* d ) { - return dynamic_cast< LvmDevice* >( d->device.data() ) && d->device.data()->name() == name; - }; + auto condition = [ name ]( DeviceInfo* d ) + { return dynamic_cast< LvmDevice* >( d->device.data() ) && d->device.data()->name() == name; }; return std::find_if( m_deviceInfos.begin(), m_deviceInfos.end(), condition ) != m_deviceInfos.end(); } @@ -590,7 +700,8 @@ PartitionCoreModule::hasVGwithThisName( const QString& name ) const bool PartitionCoreModule::isInVG( const Partition* partition ) const { - auto condition = [partition]( DeviceInfo* d ) { + auto condition = [ partition ]( DeviceInfo* d ) + { LvmDevice* vg = dynamic_cast< LvmDevice* >( d->device.data() ); return vg && vg->physicalVolumes().contains( partition ); }; @@ -604,10 +715,10 @@ PartitionCoreModule::dumpQueue() const cDebug() << "# Queue:"; for ( auto info : m_deviceInfos ) { - cDebug() << "## Device:" << info->device->name(); - for ( auto job : info->jobs ) + cDebug() << Logger::SubEntry << "## Device:" << info->device->deviceNode(); + for ( const auto& job : info->jobs() ) { - cDebug() << "-" << job->prettyName(); + cDebug() << Logger::SubEntry << "-" << job->metaObject()->className(); } } } @@ -623,7 +734,7 @@ void PartitionCoreModule::refreshPartition( Device* device, Partition* ) { // Keep it simple for now: reset the model. This can be improved to cause - // the model to emit dataChanged() for the affected row instead, avoiding + // the model to Q_EMIT dataChanged() for the affected row instead, avoiding // the loss of the current selection. auto model = partitionModelForDevice( device ); Q_ASSERT( model ); @@ -679,6 +790,8 @@ PartitionCoreModule::updateIsDirty() void PartitionCoreModule::scanForEfiSystemPartitions() { + const bool wasEmpty = m_efiSystemPartitions.isEmpty(); + m_efiSystemPartitions.clear(); QList< Device* > devices; @@ -695,6 +808,11 @@ PartitionCoreModule::scanForEfiSystemPartitions() { cWarning() << "system is EFI but no EFI system partitions found."; } + else if ( wasEmpty ) + { + // But it isn't empty anymore, so whatever problem has been solved + cDebug() << "system is EFI and new EFI system partition has been found."; + } m_efiSystemPartitions = efiSystemPartitions; } @@ -745,7 +863,7 @@ PartitionCoreModule::scanForLVMPVs() for ( DeviceInfo* d : m_deviceInfos ) { - for ( auto job : d->jobs ) + for ( const auto& job : d->jobs() ) { // Including new LVM PVs CreatePartitionJob* partJob = dynamic_cast< CreatePartitionJob* >( job.data() ); @@ -823,79 +941,12 @@ PartitionCoreModule::setBootLoaderInstallPath( const QString& path ) m_bootLoaderInstallPath = path; } -void -PartitionCoreModule::initLayout() +static void +applyDefaultLabel( Partition* p, bool ( *predicate )( const Partition* ), const QString& label ) { - m_partLayout = new PartitionLayout(); - - m_partLayout->addEntry( QString( "/" ), QString( "100%" ) ); -} - -void -PartitionCoreModule::initLayout( const QVariantList& config ) -{ - bool ok; - QString sizeString; - QString minSizeString; - QString maxSizeString; - - m_partLayout = new PartitionLayout(); - - for ( const auto& r : config ) + if ( p->label().isEmpty() && predicate( p ) ) { - QVariantMap pentry = r.toMap(); - - if ( !pentry.contains( "name" ) || !pentry.contains( "mountPoint" ) || !pentry.contains( "filesystem" ) - || !pentry.contains( "size" ) ) - { - cError() << "Partition layout entry #" << config.indexOf( r ) - << "lacks mandatory attributes, switching to default layout."; - delete ( m_partLayout ); - initLayout(); - break; - } - - if ( pentry.contains( "size" ) && CalamaresUtils::getString( pentry, "size" ).isEmpty() ) - { - sizeString.setNum( CalamaresUtils::getInteger( pentry, "size", 0 ) ); - } - else - { - sizeString = CalamaresUtils::getString( pentry, "size" ); - } - - if ( pentry.contains( "minSize" ) && CalamaresUtils::getString( pentry, "minSize" ).isEmpty() ) - { - minSizeString.setNum( CalamaresUtils::getInteger( pentry, "minSize", 0 ) ); - } - else - { - minSizeString = CalamaresUtils::getString( pentry, "minSize" ); - } - - if ( pentry.contains( "maxSize" ) && CalamaresUtils::getString( pentry, "maxSize" ).isEmpty() ) - { - maxSizeString.setNum( CalamaresUtils::getInteger( pentry, "maxSize", 0 ) ); - } - else - { - maxSizeString = CalamaresUtils::getString( pentry, "maxSize" ); - } - - if ( !m_partLayout->addEntry( CalamaresUtils::getString( pentry, "name" ), - CalamaresUtils::getString( pentry, "type" ), - CalamaresUtils::getString( pentry, "mountPoint" ), - CalamaresUtils::getString( pentry, "filesystem" ), - CalamaresUtils::getSubMap( pentry, "features", ok ), - sizeString, - minSizeString, - maxSizeString ) ) - { - cError() << "Partition layout entry #" << config.indexOf( r ) << "is invalid, switching to default layout."; - delete ( m_partLayout ); - initLayout(); - break; - } + p->setLabel( label ); } } @@ -908,27 +959,35 @@ PartitionCoreModule::layoutApply( Device* dev, const PartitionRole& role ) { bool isEfi = PartUtils::isEfiSystem(); - QList< Partition* > partList = m_partLayout->execute( dev, firstSector, lastSector, luksPassphrase, parent, role ); + QList< Partition* > partList + = m_partLayout.createPartitions( dev, firstSector, lastSector, luksPassphrase, parent, role ); // Partition::mountPoint() tells us where it is mounted **now**, while // PartitionInfo::mountPoint() says where it will be mounted in the target system. // .. the latter is more interesting. // - // If we have a separate /boot, mark that one as bootable, otherwise mark - // the root / as bootable. + // If we have a separate /boot, mark that one as bootable, + // otherwise mark the root / as bootable. // - // TODO: perhaps the partition that holds the bootloader? - const QString boot = QStringLiteral( "/boot" ); - const QString root = QStringLiteral( "/" ); - const auto is_boot - = [&]( Partition* p ) -> bool { return PartitionInfo::mountPoint( p ) == boot || p->mountPoint() == boot; }; - const auto is_root - = [&]( Partition* p ) -> bool { return PartitionInfo::mountPoint( p ) == root || p->mountPoint() == root; }; + // If the layout hasn't applied a label to the partition, + // apply a default label (to boot and root, at least). + const auto is_boot = []( const Partition* p ) -> bool + { + const QString boot = QStringLiteral( "/boot" ); + return PartitionInfo::mountPoint( p ) == boot || p->mountPoint() == boot; + }; + const auto is_root = []( const Partition* p ) -> bool + { + const QString root = QStringLiteral( "/" ); + return PartitionInfo::mountPoint( p ) == root || p->mountPoint() == root; + }; const bool separate_boot_partition = std::find_if( partList.constBegin(), partList.constEnd(), is_boot ) != partList.constEnd(); for ( Partition* part : partList ) { + applyDefaultLabel( part, is_root, QStringLiteral( "root" ) ); + applyDefaultLabel( part, is_boot, QStringLiteral( "boot" ) ); if ( ( separate_boot_partition && is_boot( part ) ) || ( !separate_boot_partition && is_root( part ) ) ) { createPartition( @@ -956,7 +1015,7 @@ PartitionCoreModule::revert() m_deviceInfos.clear(); doInit(); updateIsDirty(); - emit reverted(); + Q_EMIT reverted(); } @@ -970,9 +1029,9 @@ PartitionCoreModule::revertAllDevices() { ( *it )->isAvailable = true; - if ( !( *it )->jobs.empty() ) + if ( !( *it )->jobs().empty() ) { - CreateVolumeGroupJob* vgJob = dynamic_cast< CreateVolumeGroupJob* >( ( *it )->jobs[ 0 ].data() ); + CreateVolumeGroupJob* vgJob = dynamic_cast< CreateVolumeGroupJob* >( ( *it )->jobs().first().data() ); if ( vgJob ) { @@ -1030,7 +1089,7 @@ PartitionCoreModule::revertDevice( Device* dev, bool individualRevert ) { refreshAfterModelChange(); } - emit deviceReverted( newDev ); + Q_EMIT deviceReverted( newDev ); } @@ -1038,10 +1097,14 @@ void PartitionCoreModule::asyncRevertDevice( Device* dev, std::function< void() > callback ) { QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); - connect( watcher, &QFutureWatcher< void >::finished, this, [watcher, callback] { - callback(); - watcher->deleteLater(); - } ); + connect( watcher, + &QFutureWatcher< void >::finished, + this, + [ watcher, callback ] + { + callback(); + watcher->deleteLater(); + } ); QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev, true ); watcher->setFuture( future ); diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index f88544ae8..1ed46fdad 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONCOREMODULE_H @@ -24,6 +15,7 @@ #include "core/KPMHelpers.h" #include "core/PartitionLayout.h" #include "core/PartitionModel.h" +#include "jobs/PartitionJob.h" #include "Job.h" #include "partition/KPMManager.h" @@ -40,6 +32,7 @@ #include class BootLoaderModel; +class Config; class CreatePartitionJob; class Device; class DeviceModel; @@ -91,8 +84,10 @@ public: PartitionModel* partitionModelAfter; }; + struct DeviceInfo; + PartitionCoreModule( QObject* parent = nullptr ); - ~PartitionCoreModule(); + ~PartitionCoreModule() override; /** * @brief init performs a devices scan and initializes all KPMcore data @@ -129,7 +124,7 @@ public: * The single BootLoaderModel instance belongs to the PCM. * @return the BootLoaderModel. */ - QAbstractItemModel* bootLoaderModel() const; + BootLoaderModel* bootLoaderModel() const; void createPartitionTable( Device* device, PartitionTable::TableType type ); @@ -154,6 +149,8 @@ public: void formatPartition( Device* device, Partition* partition ); + void setFilesystemLabel( Device* device, Partition* partition, const QString& newLabel ); + void resizePartition( Device* device, Partition* partition, qint64 first, qint64 last ); void setPartitionFlags( Device* device, Partition* partition, PartitionTable::Flags flags ); @@ -163,8 +160,11 @@ public: /// @brief Set the path where the bootloader will be installed void setBootLoaderInstallPath( const QString& path ); - void initLayout(); - void initLayout( const QVariantList& config ); + /** @brief Get the partition layout that will be applied. + * + * Layouts are applied only for erase and replace operations. + */ + PartitionLayout& partitionLayout() { return m_partLayout; } void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); void layoutApply( Device* dev, @@ -179,7 +179,7 @@ public: * requested by the user. * @return a list of jobs. */ - Calamares::JobList jobs() const; + Calamares::JobList jobs( const Config* ) const; bool hasRootMountPoint() const; @@ -241,39 +241,8 @@ Q_SIGNALS: void deviceReverted( Device* device ); private: - CalamaresUtils::Partition::KPMManager m_kpmcore; - void refreshAfterModelChange(); - /** - * Owns the Device, PartitionModel and the jobs - */ - struct DeviceInfo - { - DeviceInfo( Device* ); - ~DeviceInfo(); - QScopedPointer< Device > device; - QScopedPointer< PartitionModel > partitionModel; - const QScopedPointer< Device > immutableDevice; - Calamares::JobList jobs; - - // To check if LVM VGs are deactivated - bool isAvailable; - - void forgetChanges(); - bool isDirty() const; - }; - QList< DeviceInfo* > m_deviceInfos; - QList< Partition* > m_efiSystemPartitions; - QVector< const Partition* > m_lvmPVs; - - DeviceModel* m_deviceModel; - BootLoaderModel* m_bootLoaderModel; - bool m_hasRootMountPoint = false; - bool m_isDirty = false; - QString m_bootLoaderInstallPath; - PartitionLayout* m_partLayout; - void doInit(); void updateHasRootMountPoint(); void updateIsDirty(); @@ -282,6 +251,19 @@ private: DeviceInfo* infoForDevice( const Device* ) const; + CalamaresUtils::Partition::KPMManager m_kpmcore; + + QList< DeviceInfo* > m_deviceInfos; + QList< Partition* > m_efiSystemPartitions; + QVector< const Partition* > m_lvmPVs; + + DeviceModel* m_deviceModel; + BootLoaderModel* m_bootLoaderModel; + bool m_hasRootMountPoint = false; + bool m_isDirty = false; + QString m_bootLoaderInstallPath; + PartitionLayout m_partLayout; + OsproberEntryList m_osproberLines; QMutex m_revertMutex; diff --git a/src/modules/partition/core/PartitionInfo.cpp b/src/modules/partition/core/PartitionInfo.cpp index fe38bf2d6..2b0b4fd7a 100644 --- a/src/modules/partition/core/PartitionInfo.cpp +++ b/src/modules/partition/core/PartitionInfo.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "core/PartitionInfo.h" @@ -34,7 +25,7 @@ static const char FORMAT_PROPERTY[] = "_calamares_format"; static const char FLAGS_PROPERTY[] = "_calamares_flags"; QString -mountPoint( Partition* partition ) +mountPoint( const Partition* partition ) { return partition->property( MOUNT_POINT_PROPERTY ).toString(); } @@ -46,7 +37,7 @@ setMountPoint( Partition* partition, const QString& value ) } bool -format( Partition* partition ) +format( const Partition* partition ) { return partition->property( FORMAT_PROPERTY ).toBool(); } @@ -61,7 +52,15 @@ PartitionTable::Flags flags( const Partition* partition ) { auto v = partition->property( FLAGS_PROPERTY ); - if ( v.type() == QVariant::Int ) + if ( !v.isValid() ) + { + return partition->activeFlags(); + } + // The underlying type of PartitionTable::Flags can be int or uint + // (see qflags.h) and so setting those flags can create a QVariant + // of those types; we don't just want to check QVariant::canConvert() + // here because that will also accept QByteArray and some other things. + if ( v.type() == QVariant::Int || v.type() == QVariant::UInt ) { return static_cast< PartitionTable::Flags >( v.toInt() ); } diff --git a/src/modules/partition/core/PartitionInfo.h b/src/modules/partition/core/PartitionInfo.h index 9f9cd2d1e..53064abe5 100644 --- a/src/modules/partition/core/PartitionInfo.h +++ b/src/modules/partition/core/PartitionInfo.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONINFO_H #define PARTITIONINFO_H @@ -42,10 +33,10 @@ class Partition; namespace PartitionInfo { -QString mountPoint( Partition* partition ); +QString mountPoint( const Partition* partition ); void setMountPoint( Partition* partition, const QString& value ); -bool format( Partition* partition ); +bool format( const Partition* partition ); void setFormat( Partition* partition, bool value ); PartitionTable::Flags flags( const Partition* partition ); diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 33d2a7679..765d9fffa 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2018-2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GlobalStorage.h" @@ -30,53 +21,69 @@ #include "core/PartitionActions.h" #include "core/PartitionInfo.h" +#include "utils/Variant.h" + #include #include #include -static FileSystem::Type -getDefaultFileSystemType() -{ - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - FileSystem::Type defaultFS = FileSystem::Ext4; - - if ( gs->contains( "defaultFileSystemType" ) ) - { - PartUtils::findFS( gs->value( "defaultFileSystemType" ).toString(), &defaultFS ); - if ( defaultFS == FileSystem::Unknown ) - { - defaultFS = FileSystem::Ext4; - } - } - - return defaultFS; -} - -PartitionLayout::PartitionLayout() -{ - m_defaultFsType = getDefaultFileSystemType(); -} - -PartitionLayout::PartitionLayout( PartitionLayout::PartitionEntry entry ) -{ - m_defaultFsType = getDefaultFileSystemType(); - m_partLayout.append( entry ); -} +PartitionLayout::PartitionLayout() {} PartitionLayout::PartitionLayout( const PartitionLayout& layout ) - : m_defaultFsType( layout.m_defaultFsType ) - , m_partLayout( layout.m_partLayout ) + : m_partLayout( layout.m_partLayout ) { } PartitionLayout::~PartitionLayout() {} +PartitionLayout::PartitionEntry::PartitionEntry() + : partAttributes( 0 ) +{ +} + +PartitionLayout::PartitionEntry::PartitionEntry( FileSystem::Type fs, + const QString& mountPoint, + const QString& size, + const QString& minSize, + const QString& maxSize ) + : partAttributes( 0 ) + , partMountPoint( mountPoint ) + , partFileSystem( fs ) + , partSize( size ) + , partMinSize( minSize ) + , partMaxSize( maxSize ) +{ +} + +PartitionLayout::PartitionEntry::PartitionEntry( const QString& label, + const QString& uuid, + const QString& type, + quint64 attributes, + const QString& mountPoint, + const QString& fs, + const QVariantMap& features, + const QString& size, + const QString& minSize, + const QString& maxSize ) + : partLabel( label ) + , partUUID( uuid ) + , partType( type ) + , partAttributes( attributes ) + , partMountPoint( mountPoint ) + , partFeatures( features ) + , partSize( size ) + , partMinSize( minSize ) + , partMaxSize( maxSize ) +{ + PartUtils::canonicalFilesystemName( fs, &partFileSystem ); +} + + bool -PartitionLayout::addEntry( PartitionLayout::PartitionEntry entry ) +PartitionLayout::addEntry( const PartitionEntry& entry ) { if ( !entry.isValid() ) { - cError() << "Partition size is invalid or has min size > max size"; return false; } @@ -85,179 +92,289 @@ PartitionLayout::addEntry( PartitionLayout::PartitionEntry entry ) return true; } -PartitionLayout::PartitionEntry::PartitionEntry( const QString& size, const QString& min, const QString& max ) - : partSize( size ) - , partMinSize( min ) - , partMaxSize( max ) +void +PartitionLayout::init( FileSystem::Type defaultFsType, const QVariantList& config ) { + bool ok = true; // bogus argument to getSubMap() + + m_partLayout.clear(); + + for ( const auto& r : config ) + { + QVariantMap pentry = r.toMap(); + + if ( !pentry.contains( "name" ) || !pentry.contains( "size" ) ) + { + cError() << "Partition layout entry #" << config.indexOf( r ) + << "lacks mandatory attributes, switching to default layout."; + m_partLayout.clear(); + break; + } + + if ( !addEntry( { CalamaresUtils::getString( pentry, "name" ), + CalamaresUtils::getString( pentry, "uuid" ), + CalamaresUtils::getString( pentry, "type" ), + CalamaresUtils::getUnsignedInteger( pentry, "attributes", 0 ), + CalamaresUtils::getString( pentry, "mountPoint" ), + CalamaresUtils::getString( pentry, "filesystem", "unformatted" ), + CalamaresUtils::getSubMap( pentry, "features", ok ), + CalamaresUtils::getString( pentry, "size", QStringLiteral( "0" ) ), + CalamaresUtils::getString( pentry, "minSize", QStringLiteral( "0" ) ), + CalamaresUtils::getString( pentry, "maxSize", QStringLiteral( "0" ) ) } ) ) + { + cError() << "Partition layout entry #" << config.indexOf( r ) << "is invalid, switching to default layout."; + m_partLayout.clear(); + break; + } + } + + if ( !m_partLayout.count() ) + { + // Unknown will be translated to defaultFsType at apply-time + addEntry( { FileSystem::Type::Unknown, QString( "/" ), QString( "100%" ) } ); + } + + setDefaultFsType( defaultFsType ); } -bool -PartitionLayout::addEntry( const QString& mountPoint, const QString& size, const QString& min, const QString& max ) +void +PartitionLayout::setDefaultFsType( FileSystem::Type defaultFsType ) { - PartitionLayout::PartitionEntry entry( size, min, max ); - - if ( !entry.isValid() ) + using FileSystem = FileSystem::Type; + QT_WARNING_PUSH + QT_WARNING_DISABLE_CLANG( "-Wswitch-enum" ) + switch ( defaultFsType ) { - cError() << "Partition size" << size << "is invalid or" << min << ">" << max; - return false; - } - if ( mountPoint.isEmpty() || !mountPoint.startsWith( QString( "/" ) ) ) - { - cError() << "Partition mount point" << mountPoint << "is invalid"; - return false; + case FileSystem::Unknown: + case FileSystem::Unformatted: + case FileSystem::Extended: + case FileSystem::LinuxSwap: + case FileSystem::Luks: + case FileSystem::Ocfs2: + case FileSystem::Lvm2_PV: + case FileSystem::Udf: + case FileSystem::Iso9660: +#ifdef WITH_KPMCORE4API + case FileSystem::Luks2: + case FileSystem::LinuxRaidMember: + case FileSystem::BitLocker: +#endif + // bad bad + cWarning() << "The selected default FS" << defaultFsType << "is not suitable." + << "Using ext4 instead."; + defaultFsType = FileSystem::Ext4; + break; + case FileSystem::Ext2: + case FileSystem::Ext3: + case FileSystem::Ext4: + case FileSystem::Fat32: + case FileSystem::Ntfs: + case FileSystem::Reiser4: + case FileSystem::ReiserFS: + case FileSystem::Xfs: + case FileSystem::Jfs: + case FileSystem::Btrfs: + case FileSystem::Exfat: + case FileSystem::F2fs: + // ok + break; + case FileSystem::Fat16: + case FileSystem::Hfs: + case FileSystem::HfsPlus: + case FileSystem::Ufs: + case FileSystem::Hpfs: + case FileSystem::Zfs: + case FileSystem::Nilfs2: +#ifdef WITH_KPMCORE4API + case FileSystem::Fat12: + case FileSystem::Apfs: + case FileSystem::Minix: +#endif + // weird + cWarning() << "The selected default FS" << defaultFsType << "is unusual, but not wrong."; + break; + default: + cWarning() << "The selected default FS" << defaultFsType << "is not known to Calamares." + << "Using ext4 instead."; + defaultFsType = FileSystem::Ext4; } + QT_WARNING_POP - entry.partMountPoint = mountPoint; - entry.partFileSystem = m_defaultFsType; - - m_partLayout.append( entry ); - - return true; + m_defaultFsType = defaultFsType; } -bool -PartitionLayout::addEntry( const QString& label, - const QString& type, - const QString& mountPoint, - const QString& fs, - const QVariantMap& features, - const QString& size, - const QString& min, - const QString& max ) -{ - PartitionLayout::PartitionEntry entry( size, min, max ); - - if ( !entry.isValid() ) - { - cError() << "Partition size" << size << "is invalid or" << min << ">" << max; - return false; - } - if ( mountPoint.isEmpty() || !mountPoint.startsWith( QString( "/" ) ) ) - { - cError() << "Partition mount point" << mountPoint << "is invalid"; - return false; - } - - entry.partLabel = label; - entry.partType = type; - entry.partMountPoint = mountPoint; - PartUtils::findFS( fs, &entry.partFileSystem ); - if ( entry.partFileSystem == FileSystem::Unknown ) - { - entry.partFileSystem = m_defaultFsType; - } - entry.partFeatures = features; - - m_partLayout.append( entry ); - - return true; -} QList< Partition* > -PartitionLayout::execute( Device* dev, - qint64 firstSector, - qint64 lastSector, - QString luksPassphrase, - PartitionNode* parent, - const PartitionRole& role ) +PartitionLayout::createPartitions( Device* dev, + qint64 firstSector, + qint64 lastSector, + QString luksPassphrase, + PartitionNode* parent, + const PartitionRole& role ) { + // Make sure the default FS is sensible; warn and use ext4 if not + setDefaultFsType( m_defaultFsType ); + QList< Partition* > partList; - qint64 minSize, maxSize, end; - qint64 totalSize = lastSector - firstSector + 1; - qint64 availableSize = totalSize; + // Map each partition entry to its requested size (0 when calculated later) + QMap< const PartitionLayout::PartitionEntry*, qint64 > partSectorsMap; + const qint64 totalSectors = lastSector - firstSector + 1; + qint64 currentSector, availableSectors = totalSectors; - // TODO: Refine partition sizes to make sure there is room for every partition - // Use a default (200-500M ?) minimum size for partition without minSize - - foreach ( const PartitionLayout::PartitionEntry& part, m_partLayout ) + // Let's check if we have enough space for each partitions, using the size + // propery or the min-size property if unit is in percentage. + for ( const auto& entry : qAsConst( m_partLayout ) ) { - Partition* currentPartition = nullptr; - - qint64 size = -1; - // Calculate partition size - if ( part.partSize.isValid() ) + if ( !entry.partSize.isValid() ) { - size = part.partSize.toSectors( totalSize, dev->logicalSize() ); - } - else - { - cWarning() << "Partition" << part.partMountPoint << "size (" << size << "sectors) is invalid, skipping..."; + cWarning() << "Partition" << entry.partMountPoint << "size is invalid, skipping..."; continue; } - if ( part.partMinSize.isValid() ) + // Calculate partition size: Rely on "possibly uninitialized use" + // warnings to ensure that all the cases are covered below. + // We need to ignore the percent-defined until later + qint64 sectors = 0; + if ( entry.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent ) { - minSize = part.partMinSize.toSectors( totalSize, dev->logicalSize() ); + sectors = entry.partSize.toSectors( totalSectors, dev->logicalSize() ); + } + else if ( entry.partMinSize.isValid() ) + { + sectors = entry.partMinSize.toSectors( totalSectors, dev->logicalSize() ); + } + partSectorsMap.insert( &entry, sectors ); + availableSectors -= sectors; + } + + // There is not enough space for all partitions, use the min-size property + // and see if we can do better afterward. + if ( availableSectors < 0 ) + { + availableSectors = totalSectors; + for ( const auto& entry : qAsConst( m_partLayout ) ) + { + qint64 sectors = partSectorsMap.value( &entry ); + if ( entry.partMinSize.isValid() ) + { + sectors = entry.partMinSize.toSectors( totalSectors, dev->logicalSize() ); + partSectorsMap.insert( &entry, sectors ); + } + availableSectors -= sectors; + } + } + + // Assign sectors for percentage-defined partitions. + for ( const auto& entry : qAsConst( m_partLayout ) ) + { + if ( entry.partSize.unit() == CalamaresUtils::Partition::SizeUnit::Percent ) + { + qint64 sectors + = entry.partSize.toSectors( availableSectors + partSectorsMap.value( &entry ), dev->logicalSize() ); + if ( entry.partMinSize.isValid() ) + { + sectors = std::max( sectors, entry.partMinSize.toSectors( totalSectors, dev->logicalSize() ) ); + } + if ( entry.partMaxSize.isValid() ) + { + sectors = std::min( sectors, entry.partMaxSize.toSectors( totalSectors, dev->logicalSize() ) ); + } + partSectorsMap.insert( &entry, sectors ); + } + } + + auto correctFS = [ d = m_defaultFsType ]( FileSystem::Type t ) { return t == FileSystem::Type::Unknown ? d : t; }; + + // Create the partitions. + currentSector = firstSector; + availableSectors = totalSectors; + for ( const auto& entry : qAsConst( m_partLayout ) ) + { + // Adjust partition size based on available space. + qint64 sectors = partSectorsMap.value( &entry ); + sectors = std::min( sectors, availableSectors ); + if ( sectors == 0 ) + { + continue; + } + + Partition* part = nullptr; + + // Encryption for zfs is handled in the zfs module + if ( luksPassphrase.isEmpty() || correctFS( entry.partFileSystem ) == FileSystem::Zfs ) + { + part = KPMHelpers::createNewPartition( parent, + *dev, + role, + correctFS( entry.partFileSystem ), + entry.partLabel, + currentSector, + currentSector + sectors - 1, + KPM_PARTITION_FLAG( None ) ); } else { - minSize = 0; + part = KPMHelpers::createNewEncryptedPartition( parent, + *dev, + role, + correctFS( entry.partFileSystem ), + entry.partLabel, + currentSector, + currentSector + sectors - 1, + luksPassphrase, + KPM_PARTITION_FLAG( None ) ); } - if ( part.partMaxSize.isValid() ) + // For zfs, we need to make the passphrase available to later modules + if ( correctFS( entry.partFileSystem ) == FileSystem::Zfs ) { - maxSize = part.partMaxSize.toSectors( totalSize, dev->logicalSize() ); - } - else - { - maxSize = availableSize; + Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); + QList< QVariant > zfsInfoList; + QVariantMap zfsInfo; + + // Save the information subsequent modules will need + zfsInfo[ "encrypted" ] = !luksPassphrase.isEmpty(); + zfsInfo[ "passphrase" ] = luksPassphrase; + zfsInfo[ "mountpoint" ] = entry.partMountPoint; + + // Add it to the list and insert it into global storage + zfsInfoList.append( zfsInfo ); + storage->insert( "zfsInfo", zfsInfoList ); } - // Make sure we never go under minSize once converted to sectors - if ( maxSize < minSize ) + PartitionInfo::setFormat( part, true ); + PartitionInfo::setMountPoint( part, entry.partMountPoint ); + if ( !entry.partLabel.isEmpty() ) { - cWarning() << "Partition" << part.partMountPoint << "max size (" << maxSize << "sectors) is < min size (" - << minSize << "sectors), using min size"; - maxSize = minSize; + part->setLabel( entry.partLabel ); + part->fileSystem().setLabel( entry.partLabel ); } - - // Adjust partition size based on user-defined boundaries and available space - if ( size < minSize ) + if ( !entry.partUUID.isEmpty() ) { - size = minSize; + part->setUUID( entry.partUUID ); } - if ( size > maxSize ) - { - size = maxSize; - } - if ( size > availableSize ) - { - size = availableSize; - } - end = firstSector + size - 1; - - if ( luksPassphrase.isEmpty() ) - { - currentPartition = KPMHelpers::createNewPartition( - parent, *dev, role, part.partFileSystem, firstSector, end, KPM_PARTITION_FLAG( None ) ); - } - else - { - currentPartition = KPMHelpers::createNewEncryptedPartition( - parent, *dev, role, part.partFileSystem, firstSector, end, luksPassphrase, KPM_PARTITION_FLAG( None ) ); - } - PartitionInfo::setFormat( currentPartition, true ); - PartitionInfo::setMountPoint( currentPartition, part.partMountPoint ); - if ( !part.partLabel.isEmpty() ) - { - currentPartition->setLabel( part.partLabel ); - currentPartition->fileSystem().setLabel( part.partLabel ); - } - if ( !part.partType.isEmpty() ) + if ( !entry.partType.isEmpty() ) { #if defined( WITH_KPMCORE42API ) - currentPartition->setType( part.partType ); + part->setType( entry.partType ); #else cWarning() << "Ignoring type; requires KPMcore >= 4.2.0."; #endif } - if ( !part.partFeatures.isEmpty() ) + if ( entry.partAttributes ) { #if defined( WITH_KPMCORE42API ) - for ( const auto& k : part.partFeatures.keys() ) + part->setAttributes( entry.partAttributes ); +#else + cWarning() << "Ignoring attributes; requires KPMcore >= 4.2.0."; +#endif + } + if ( !entry.partFeatures.isEmpty() ) + { +#if defined( WITH_KPMCORE42API ) + for ( const auto& k : entry.partFeatures.keys() ) { - currentPartition->fileSystem().addFeature( k, part.partFeatures.value( k ) ); + part->fileSystem().addFeature( k, entry.partFeatures.value( k ) ); } #else cWarning() << "Ignoring features; requires KPMcore >= 4.2.0."; @@ -265,9 +382,9 @@ PartitionLayout::execute( Device* dev, } // Some buggy (legacy) BIOSes test if the bootflag of at least one partition is set. // Otherwise they ignore the device in boot-order, so add it here. - partList.append( currentPartition ); - firstSector = end + 1; - availableSize -= size; + partList.append( part ); + currentSector += sectors; + availableSectors -= sectors; } return partList; diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index 5651ae995..c4c26d9f1 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018-2019, Collabora Ltd - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONLAYOUT_H @@ -41,7 +32,9 @@ public: struct PartitionEntry { QString partLabel; + QString partUUID; QString partType; + quint64 partAttributes = 0; QString partMountPoint; FileSystem::Type partFileSystem = FileSystem::Unknown; QVariantMap partFeatures; @@ -50,9 +43,30 @@ public: CalamaresUtils::Partition::PartitionSize partMaxSize; /// @brief All-zeroes PartitionEntry - PartitionEntry() {} - /// @brief Parse @p size, @p min and @p max to their respective member variables - PartitionEntry( const QString& size, const QString& min, const QString& max ); + PartitionEntry(); + /** @brief Parse @p mountPoint, @p size, @p minSize and @p maxSize to their respective member variables + * + * Sets a specific FS type (not parsed from string like the other + * constructor). + */ + PartitionEntry( FileSystem::Type fs, + const QString& mountPoint, + const QString& size, + const QString& minSize = QString(), + const QString& maxSize = QString() ); + /// @brief All-field PartitionEntry + PartitionEntry( const QString& label, + const QString& uuid, + const QString& type, + quint64 attributes, + const QString& mountPoint, + const QString& fs, + const QVariantMap& features, + const QString& size, + const QString& minSize = QString(), + const QString& maxSize = QString() ); + /// @brief Copy PartitionEntry + PartitionEntry( const PartitionEntry& e ) = default; bool isValid() const { @@ -66,38 +80,49 @@ public: }; PartitionLayout(); - PartitionLayout( PartitionEntry entry ); PartitionLayout( const PartitionLayout& layout ); ~PartitionLayout(); - bool addEntry( PartitionEntry entry ); - bool addEntry( const QString& mountPoint, - const QString& size, - const QString& min = QString(), - const QString& max = QString() ); - bool addEntry( const QString& label, - const QString& type, - const QString& mountPoint, - const QString& fs, - const QVariantMap& features, - const QString& size, - const QString& min = QString(), - const QString& max = QString() ); + /** @brief create the configuration from @p config + * + * @p config is a list of partition entries (in QVariant form, + * read from YAML). If no entries are given, then a single + * partition is created with type Unkown. + * + * Any partitions with FS type Unknown will get the default filesystem + * that is set at **apply** time (e.g. when createPartitions() is + * called as well. + * + * @see setDefaultFsType() + */ + void init( FileSystem::Type defaultFsType, const QVariantList& config ); + /** @brief add an entry as if it had been listed in the config + * + * The same comments about filesystem type apply. + */ + bool addEntry( const PartitionEntry& entry ); + + /** @brief set the default filesystem type + * + * Any partitions in the layout with type Unknown will get + * the default type when createPartitions() is called. + */ + void setDefaultFsType( FileSystem::Type defaultFsType ); /** * @brief Apply the current partition layout to the selected drive space. * @return A list of Partition objects. */ - QList< Partition* > execute( Device* dev, - qint64 firstSector, - qint64 lastSector, - QString luksPassphrase, - PartitionNode* parent, - const PartitionRole& role ); + QList< Partition* > createPartitions( Device* dev, + qint64 firstSector, + qint64 lastSector, + QString luksPassphrase, + PartitionNode* parent, + const PartitionRole& role ); private: - FileSystem::Type m_defaultFsType; QList< PartitionEntry > m_partLayout; + FileSystem::Type m_defaultFsType = FileSystem::Type::Unknown; }; #endif /* PARTITIONLAYOUT_H */ diff --git a/src/modules/partition/core/PartitionModel.cpp b/src/modules/partition/core/PartitionModel.cpp index d6f996c4f..19dbcd076 100644 --- a/src/modules/partition/core/PartitionModel.cpp +++ b/src/modules/partition/core/PartitionModel.cpp @@ -1,27 +1,19 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include "core/PartitionModel.h" +#include "PartitionModel.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" +#include "core/SizeUtils.h" #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" @@ -33,9 +25,6 @@ #include #include -// KF5 -#include - // Qt #include @@ -176,6 +165,10 @@ PartitionModel::data( const QModelIndex& index, int role ) const { return CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() ); } + if ( col == FileSystemLabelColumn ) + { + return partition->fileSystem().label(); + } if ( col == MountPointColumn ) { return PartitionInfo::mountPoint( partition ); @@ -183,7 +176,7 @@ PartitionModel::data( const QModelIndex& index, int role ) const if ( col == SizeColumn ) { qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); - return KFormat().formatByteSize( size ); + return formatByteSize( size ); } cDebug() << "Unknown column" << col; return QVariant(); @@ -215,7 +208,7 @@ PartitionModel::data( const QModelIndex& index, int role ) const QString prettyFileSystem = CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() ); qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); - QString prettySize = KFormat().formatByteSize( size ); + QString prettySize = formatByteSize( size ); return QVariant( name + " " + prettyFileSystem + " " + prettySize ); } case SizeRole: @@ -241,7 +234,7 @@ PartitionModel::data( const QModelIndex& index, int role ) const return partition->partitionPath(); case PartitionPtrRole: - return qVariantFromValue( (void*)partition ); + return QVariant::fromValue( (void*)partition ); // Osprober roles: case OsproberNameRole: @@ -305,6 +298,8 @@ PartitionModel::headerData( int section, Qt::Orientation, int role ) const return tr( "Name" ); case FileSystemColumn: return tr( "File System" ); + case FileSystemLabelColumn: + return tr( "File System Label" ); case MountPointColumn: return tr( "Mount Point" ); case SizeColumn: @@ -330,5 +325,5 @@ PartitionModel::partitionForIndex( const QModelIndex& index ) const void PartitionModel::update() { - emit dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); + Q_EMIT dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); } diff --git a/src/modules/partition/core/PartitionModel.h b/src/modules/partition/core/PartitionModel.h index 7066aa5a5..ba5e258a3 100644 --- a/src/modules/partition/core/PartitionModel.h +++ b/src/modules/partition/core/PartitionModel.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONMODEL_H #define PARTITIONMODEL_H @@ -50,7 +41,7 @@ public: /** * This helper class must be instantiated on the stack *before* making * changes to the device represented by this model. It will cause the model - * to emit modelAboutToBeReset() when instantiated and modelReset() when + * to Q_EMIT modelAboutToBeReset() when instantiated and modelReset() when * destructed. */ class ResetHelper @@ -88,6 +79,7 @@ public: { NameColumn, FileSystemColumn, + FileSystemLabelColumn, MountPointColumn, SizeColumn, ColumnCount // Must remain last diff --git a/src/modules/partition/core/SizeUtils.h b/src/modules/partition/core/SizeUtils.h new file mode 100644 index 000000000..155cbd923 --- /dev/null +++ b/src/modules/partition/core/SizeUtils.h @@ -0,0 +1,28 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef PARTITION_CORE_SIZEUTILS_H +#define PARTITION_CORE_SIZEUTILS_H + +#include + +/** @brief Helper function for printing sizes consistently. + * + * Most of Calamares uses a qint64 for partition sizes, so use that + * parameter type. However, the human-visible formatting doesn't need + * to bother with one-byte accuracy (and anyway, a double has at least 50 bits + * at which point we're printing giga (or gibi) bytes). + */ +static inline QString +formatByteSize( qint64 sizeValue ) +{ + return Capacity::formatByteSize( static_cast< double >( sizeValue ) ); +} + +#endif // PARTITION_CORE_SIZEUTILS_H diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp index 696628c37..4bfa6f8f4 100644 --- a/src/modules/partition/gui/BootInfoWidget.cpp +++ b/src/modules/partition/gui/BootInfoWidget.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ @@ -21,19 +12,20 @@ #include "core/PartUtils.h" #include "utils/CalamaresUtilsGui.h" +#include "utils/QtCompat.h" #include "utils/Retranslator.h" #include -#include #include +#include BootInfoWidget::BootInfoWidget( QWidget* parent ) : QWidget( parent ) , m_bootIcon( new QLabel ) , m_bootLabel( new QLabel ) { - m_bootIcon->setObjectName("bootInfoIcon"); - m_bootLabel->setObjectName("bootInfoLabel"); + m_bootIcon->setObjectName( "bootInfoIcon" ); + m_bootLabel->setObjectName( "bootInfoLabel" ); QHBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); @@ -46,23 +38,22 @@ BootInfoWidget::BootInfoWidget( QWidget* parent ) m_bootIcon->setMargin( 0 ); m_bootIcon->setFixedSize( iconSize ); - m_bootIcon->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::BootEnvironment, - CalamaresUtils::Original, - iconSize ) ); - + m_bootIcon->setPixmap( + CalamaresUtils::defaultPixmap( CalamaresUtils::BootEnvironment, CalamaresUtils::Original, iconSize ) ); + QFontMetrics fm = QFontMetrics( QFont() ); m_bootLabel->setMinimumWidth( fm.boundingRect( "BIOS" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); 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 ); m_bootIcon->setPalette( palette ); m_bootLabel->setPalette( palette ); - CALAMARES_RETRANSLATE( retranslateUi(); ) + CALAMARES_RETRANSLATE( retranslateUi(); ); } void @@ -100,7 +91,6 @@ BootInfoWidget::retranslateUi() "This is automatic, unless " "you choose manual partitioning, in which case you must " "set it up on your own." ); - } m_bootLabel->setToolTip( bootToolTip ); } diff --git a/src/modules/partition/gui/BootInfoWidget.h b/src/modules/partition/gui/BootInfoWidget.h index 257b3904a..6be3f6e7b 100644 --- a/src/modules/partition/gui/BootInfoWidget.h +++ b/src/modules/partition/gui/BootInfoWidget.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ @@ -38,4 +29,4 @@ private: QLabel* m_bootLabel; }; -#endif // BOOTINFOWIDGET_H +#endif // BOOTINFOWIDGET_H diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index a89dd1edb..781cef325 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -1,25 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ChoicePage.h" +#include "Config.h" + #include "core/BootLoaderModel.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" @@ -29,29 +22,26 @@ #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" +#include "gui/BootInfoWidget.h" +#include "gui/DeviceInfoWidget.h" +#include "gui/PartitionBarsView.h" +#include "gui/PartitionLabelsView.h" +#include "gui/PartitionSplitterWidget.h" +#include "gui/ReplaceWidget.h" +#include "gui/ScanningDialog.h" -#include "BootInfoWidget.h" -#include "DeviceInfoWidget.h" -#include "PartitionBarsView.h" -#include "PartitionLabelsView.h" -#include "PartitionSplitterWidget.h" -#include "PrettyRadioButton.h" -#include "ReplaceWidget.h" -#include "ScanningDialog.h" - +#include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" +#include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/Units.h" - -#include "Branding.h" -#include "utils/CalamaresUtilsGui.h" +#include "widgets/PrettyRadioButton.h" #include -#include #ifdef WITH_KPMCORE4API #include #endif @@ -60,44 +50,28 @@ #include #include #include +#include #include #include -#include #include -using PartitionActions::Choices::SwapChoice; -using CalamaresUtils::Partition::PartitionIterator; -using CalamaresUtils::Partition::isPartitionFreeSpace; +using Calamares::PrettyRadioButton; using CalamaresUtils::Partition::findPartitionByPath; - -/** @brief Given a set of swap choices, return a sensible value from it. - * - * "Sensible" here means: if there is one value, use it; otherwise, use - * NoSwap if there are no choices, or if NoSwap is one of the choices, in the set. - * If that's not possible, any value from the set. - */ -SwapChoice pickOne( const SwapChoiceSet& s ) -{ - if ( s.count() == 0 ) - return SwapChoice::NoSwap; - if ( s.count() == 1 ) - return *( s.begin() ); - if ( s.contains( SwapChoice::NoSwap ) ) - return SwapChoice::NoSwap; - // Here, count > 1 but NoSwap is not a member. - return *( s.begin() ); -} +using CalamaresUtils::Partition::isPartitionFreeSpace; +using CalamaresUtils::Partition::PartitionIterator; +using InstallChoice = Config::InstallChoice; +using SwapChoice = Config::SwapChoice; /** * @brief ChoicePage::ChoicePage is the default constructor. Called on startup as part of * the module loading code path. * @param parent the QWidget parent. */ -ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent ) +ChoicePage::ChoicePage( Config* config, QWidget* parent ) : QWidget( parent ) + , m_config( config ) , m_nextEnabled( false ) , m_core( nullptr ) - , m_choice( NoChoice ) , m_isEfi( false ) , m_grp( nullptr ) , m_alongsideButton( nullptr ) @@ -109,22 +83,13 @@ ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent ) , m_beforePartitionBarsView( nullptr ) , m_beforePartitionLabelsView( nullptr ) , m_bootloaderComboBox( nullptr ) - , m_lastSelectedDeviceIndex( -1 ) , m_enableEncryptionWidget( true ) - , m_availableSwapChoices( swapChoices ) - , m_eraseSwapChoice( pickOne( swapChoices ) ) - , m_allowManualPartitioning( true ) { setupUi( this ); auto gs = Calamares::JobQueue::instance()->globalStorage(); - m_defaultFsType = gs->value( "defaultFileSystemType" ).toString(); m_enableEncryptionWidget = gs->value( "enableLuksAutomatedPartitioning" ).toBool(); - m_allowManualPartitioning = gs->value( "allowManualPartitioning" ).toBool(); - - if ( FileSystem::typeForName( m_defaultFsType ) == FileSystem::Unknown ) - m_defaultFsType = "ext4"; // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); @@ -151,12 +116,7 @@ ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent ) CalamaresUtils::unmarginLayout( m_itemsLayout ); // Drive selector + preview - CALAMARES_RETRANSLATE( - retranslateUi( this ); - m_drivesLabel->setText( tr( "Select storage de&vice:" ) ); - m_previewBeforeLabel->setText( tr( "Current:" ) ); - m_previewAfterLabel->setText( tr( "After:" ) ); - ) + CALAMARES_RETRANSLATE_SLOT( &ChoicePage::retranslate ); m_previewBeforeFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_previewAfterFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); @@ -168,9 +128,43 @@ ChoicePage::ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent ) } -ChoicePage::~ChoicePage() -{} +ChoicePage::~ChoicePage() {} +void +ChoicePage::retranslate() +{ + retranslateUi( this ); + m_drivesLabel->setText( tr( "Select storage de&vice:" ) ); + m_previewBeforeLabel->setText( tr( "Current:" ) ); + m_previewAfterLabel->setText( tr( "After:" ) ); + + updateSwapChoicesTr(); + updateChoiceButtonsTr(); +} + + +/** @brief Sets the @p model for the given @p box and adjusts UI sizes to match. + * + * The model provides data for drawing the items in the model; the + * drawing itself is done by the delegate, which may end up drawing a + * different width in the popup than in the collapsed combo box. + * + * Make the box wide enough to accomodate the whole expanded delegate; + * this avoids cases where the popup would truncate data being drawn + * because the overall box is sized too narrow. + */ +void +setModelToComboBox( QComboBox* box, QAbstractItemModel* model ) +{ + box->setModel( model ); + if ( model->rowCount() > 0 ) + { + QStyleOptionViewItem options; + options.initFrom( box ); + auto delegateSize = box->itemDelegate()->sizeHint( options, model->index( 0, 0 ) ); + box->setMinimumWidth( delegateSize.width() ); + } +} void ChoicePage::init( PartitionCoreModule* core ) @@ -182,22 +176,20 @@ ChoicePage::init( PartitionCoreModule* core ) // We need to do this because a PCM revert invalidates the deviceModel. - connect( core, &PartitionCoreModule::reverted, - this, [=] - { - m_drivesCombo->setModel( core->deviceModel() ); - m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); - } ); - m_drivesCombo->setModel( core->deviceModel() ); + connect( core, + &PartitionCoreModule::reverted, + this, + [ = ] + { + setModelToComboBox( m_drivesCombo, core->deviceModel() ); + m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); + } ); + setModelToComboBox( m_drivesCombo, core->deviceModel() ); - connect( m_drivesCombo, - static_cast< void ( QComboBox::* )( int ) >( &QComboBox::currentIndexChanged ), - this, &ChoicePage::applyDeviceChoice ); + connect( m_drivesCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &ChoicePage::applyDeviceChoice ); - connect( m_encryptWidget, &EncryptWidget::stateChanged, - this, &ChoicePage::onEncryptWidgetStateChanged ); - connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, - this, &ChoicePage::onHomeCheckBoxStateChanged ); + connect( m_encryptWidget, &EncryptWidget::stateChanged, this, &ChoicePage::onEncryptWidgetStateChanged ); + connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, this, &ChoicePage::onHomeCheckBoxStateChanged ); ChoicePage::applyDeviceChoice(); } @@ -212,13 +204,21 @@ static inline QComboBox* createCombo( const QSet< SwapChoice >& s, SwapChoice dflt ) { QComboBox* box = new QComboBox; - for ( SwapChoice c : { SwapChoice::NoSwap, SwapChoice::SmallSwap, SwapChoice::FullSwap, SwapChoice::ReuseSwap, SwapChoice::SwapFile } ) + for ( SwapChoice c : { SwapChoice::NoSwap, + SwapChoice::SmallSwap, + SwapChoice::FullSwap, + SwapChoice::ReuseSwap, + SwapChoice::SwapFile } ) if ( s.contains( c ) ) + { box->addItem( QString(), c ); + } int dfltIndex = box->findData( dflt ); if ( dfltIndex >= 0 ) + { box->setCurrentIndex( dfltIndex ); + } return box; } @@ -250,93 +250,103 @@ ChoicePage::setupChoices() // 3) Manual // TBD: upgrade option? - QSize iconSize( CalamaresUtils::defaultIconSize().width() * 2, - CalamaresUtils::defaultIconSize().height() * 2 ); + QSize iconSize( CalamaresUtils::defaultIconSize().width() * 2, CalamaresUtils::defaultIconSize().height() * 2 ); m_grp = new QButtonGroup( this ); m_alongsideButton = new PrettyRadioButton; m_alongsideButton->setIconSize( iconSize ); - m_alongsideButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionAlongside, - CalamaresUtils::Original, - iconSize ) ); - m_grp->addButton( m_alongsideButton->buttonWidget(), Alongside ); + m_alongsideButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionAlongside, CalamaresUtils::Original, iconSize ) ); + m_alongsideButton->addToGroup( m_grp, InstallChoice::Alongside ); m_eraseButton = new PrettyRadioButton; m_eraseButton->setIconSize( iconSize ); - m_eraseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionEraseAuto, - CalamaresUtils::Original, - iconSize ) ); - m_grp->addButton( m_eraseButton->buttonWidget(), Erase ); + m_eraseButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionEraseAuto, CalamaresUtils::Original, iconSize ) ); + m_eraseButton->addToGroup( m_grp, InstallChoice::Erase ); m_replaceButton = new PrettyRadioButton; m_replaceButton->setIconSize( iconSize ); - m_replaceButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionReplaceOs, - CalamaresUtils::Original, - iconSize ) ); - m_grp->addButton( m_replaceButton->buttonWidget(), Replace ); + m_replaceButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionReplaceOs, CalamaresUtils::Original, iconSize ) ); + m_replaceButton->addToGroup( m_grp, InstallChoice::Replace ); // Fill up swap options - // .. TODO: only if enabled in the config - if ( m_availableSwapChoices.count() > 1 ) + if ( m_config->swapChoices().count() > 1 ) { - m_eraseSwapChoiceComboBox = createCombo( m_availableSwapChoices, m_eraseSwapChoice ); + m_eraseSwapChoiceComboBox = createCombo( m_config->swapChoices(), m_config->swapChoice() ); m_eraseButton->addOptionsComboBox( m_eraseSwapChoiceComboBox ); } + if ( m_config->eraseFsTypes().count() > 1 ) + { + m_eraseFsTypesChoiceComboBox = new QComboBox; + m_eraseFsTypesChoiceComboBox->addItems( m_config->eraseFsTypes() ); + connect( + m_eraseFsTypesChoiceComboBox, &QComboBox::currentTextChanged, m_config, &Config::setEraseFsTypeChoice ); + connect( m_config, &Config::eraseModeFilesystemChanged, this, &ChoicePage::onActionChanged ); + m_eraseButton->addOptionsComboBox( m_eraseFsTypesChoiceComboBox ); + } + m_itemsLayout->addWidget( m_alongsideButton ); m_itemsLayout->addWidget( m_replaceButton ); m_itemsLayout->addWidget( m_eraseButton ); m_somethingElseButton = new PrettyRadioButton; m_somethingElseButton->setIconSize( iconSize ); - m_somethingElseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionManual, - CalamaresUtils::Original, - iconSize ) ); + m_somethingElseButton->setIcon( + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionManual, CalamaresUtils::Original, iconSize ) ); m_itemsLayout->addWidget( m_somethingElseButton ); - m_grp->addButton( m_somethingElseButton->buttonWidget(), Manual ); + m_somethingElseButton->addToGroup( m_grp, InstallChoice::Manual ); m_itemsLayout->addStretch(); - connect( m_grp, QOverload::of( &QButtonGroup::buttonToggled ), - this, [ this ]( int id, bool checked ) - { - if ( checked ) // An action was picked. - { - m_choice = static_cast< InstallChoice >( id ); - updateNextEnabled(); +#if ( QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) ) + auto buttonSignal = QOverload< int, bool >::of( &QButtonGroup::buttonToggled ); +#else + auto buttonSignal = &QButtonGroup::idToggled; +#endif + connect( m_grp, + buttonSignal, + this, + [ this ]( int id, bool checked ) + { + if ( checked ) // An action was picked. + { + m_config->setInstallChoice( id ); + updateNextEnabled(); - emit actionChosen(); - } - else // An action was unpicked, either on its own or because of another selection. - { - if ( m_grp->checkedButton() == nullptr ) // If no other action is chosen, we must - { // set m_choice to NoChoice and reset previews. - m_choice = NoChoice; - updateNextEnabled(); + Q_EMIT actionChosen(); + } + else // An action was unpicked, either on its own or because of another selection. + { + if ( m_grp->checkedButton() == nullptr ) // If no other action is chosen, we must + { + // set m_choice to NoChoice and reset previews. + m_config->setInstallChoice( InstallChoice::NoChoice ); + updateNextEnabled(); - emit actionChosen(); - } - } - } ); + Q_EMIT actionChosen(); + } + } + } ); m_rightLayout->setStretchFactor( m_itemsLayout, 1 ); m_rightLayout->setStretchFactor( m_previewBeforeFrame, 0 ); m_rightLayout->setStretchFactor( m_previewAfterFrame, 0 ); - connect( this, &ChoicePage::actionChosen, - this, &ChoicePage::onActionChanged ); + connect( this, &ChoicePage::actionChosen, this, &ChoicePage::onActionChanged ); if ( m_eraseSwapChoiceComboBox ) - connect( m_eraseSwapChoiceComboBox, QOverload::of(&QComboBox::currentIndexChanged), - this, &ChoicePage::onEraseSwapChoiceChanged ); + { + connect( m_eraseSwapChoiceComboBox, + QOverload< int >::of( &QComboBox::currentIndexChanged ), + this, + &ChoicePage::onEraseSwapChoiceChanged ); + } - CALAMARES_RETRANSLATE( - m_somethingElseButton->setText( tr( "Manual partitioning
" - "You can create or resize partitions yourself." - " Having a GPT partition table and fat32 512Mb /boot partition " - "is a must for UEFI installs, either use an existing without formatting or create one." ) ); - updateSwapChoicesTr( m_eraseSwapChoiceComboBox ); - ) + updateSwapChoicesTr(); + updateChoiceButtonsTr(); } @@ -350,9 +360,8 @@ Device* ChoicePage::selectedDevice() { Device* currentDevice = nullptr; - currentDevice = m_core->deviceModel()->deviceForIndex( - m_core->deviceModel()->index( - m_drivesCombo->currentIndex() ) ); + currentDevice + = m_core->deviceModel()->deviceForIndex( m_core->deviceModel()->index( m_drivesCombo->currentIndex() ) ); return currentDevice; } @@ -367,6 +376,19 @@ ChoicePage::hideButtons() m_somethingElseButton->hide(); } +void +ChoicePage::checkInstallChoiceRadioButton( InstallChoice c ) +{ + QSignalBlocker b( m_grp ); + m_grp->setExclusive( false ); + // If c == InstallChoice::NoChoice none will match and all are deselected + m_eraseButton->setChecked( InstallChoice::Erase == c ); + m_replaceButton->setChecked( InstallChoice::Replace == c ); + m_alongsideButton->setChecked( InstallChoice::Alongside == c ); + m_somethingElseButton->setChecked( InstallChoice::Manual == c ); + m_grp->setExclusive( true ); +} + /** * @brief ChoicePage::applyDeviceChoice handler for the selected event of the device @@ -386,16 +408,15 @@ ChoicePage::applyDeviceChoice() if ( m_core->isDirty() ) { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertAllDevices(); - } ), - [ this ] - { - continueApplyDeviceChoice(); - }, - this ); + ScanningDialog::run( + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertAllDevices(); + } ), + [ this ] { continueApplyDeviceChoice(); }, + this ); } else { @@ -423,20 +444,39 @@ ChoicePage::continueApplyDeviceChoice() // Preview setup done. Now we show/hide choices as needed. setupActions(); - m_lastSelectedDeviceIndex = m_drivesCombo->currentIndex(); + cDebug() << "Previous device" << m_lastSelectedDeviceIndex << "new device" << m_drivesCombo->currentIndex(); + if ( m_lastSelectedDeviceIndex != m_drivesCombo->currentIndex() ) + { + m_lastSelectedDeviceIndex = m_drivesCombo->currentIndex(); + m_lastSelectedActionIndex = -1; + m_config->setInstallChoice( m_config->initialInstallChoice() ); + checkInstallChoiceRadioButton( m_config->installChoice() ); + } - emit actionChosen(); - emit deviceChosen(); + Q_EMIT actionChosen(); + Q_EMIT deviceChosen(); } - void ChoicePage::onActionChanged() { Device* currd = selectedDevice(); if ( currd ) { - applyActionChoice( currentChoice() ); + applyActionChoice( m_config->installChoice() ); + } + + // Whole disk encryption isn't implemented for zfs so disable the option for now + if ( m_eraseFsTypesChoiceComboBox != nullptr && m_enableEncryptionWidget ) + { + if ( m_eraseFsTypesChoiceComboBox->currentText() == "zfs" ) + { + m_encryptWidget->hide(); + } + else + { + m_encryptWidget->show(); + } } } @@ -445,140 +485,152 @@ ChoicePage::onEraseSwapChoiceChanged() { if ( m_eraseSwapChoiceComboBox ) { - m_eraseSwapChoice = static_cast( m_eraseSwapChoiceComboBox->currentData().toInt() ); + m_config->setSwapChoice( m_eraseSwapChoiceComboBox->currentData().toInt() ); onActionChanged(); } } void -ChoicePage::applyActionChoice( ChoicePage::InstallChoice choice ) +ChoicePage::applyActionChoice( InstallChoice choice ) { - m_beforePartitionBarsView->selectionModel()-> - disconnect( SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ) ); + cDebug() << "Prev" << m_lastSelectedActionIndex << "InstallChoice" << choice + << Config::installChoiceNames().find( choice ); + m_beforePartitionBarsView->selectionModel()->disconnect( SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ) ); m_beforePartitionBarsView->selectionModel()->clearSelection(); m_beforePartitionBarsView->selectionModel()->clearCurrentIndex(); switch ( choice ) { - case Erase: + case InstallChoice::Erase: + { + auto gs = Calamares::JobQueue::instance()->globalStorage(); + PartitionActions::Choices::AutoPartitionOptions options { gs->value( "defaultPartitionTableType" ).toString(), + m_config->eraseFsType(), + m_encryptWidget->passphrase(), + gs->value( "efiSystemPartition" ).toString(), + CalamaresUtils::GiBtoBytes( + gs->value( "requiredStorageGiB" ).toDouble() ), + m_config->swapChoice() }; + + if ( m_core->isDirty() ) { - auto gs = Calamares::JobQueue::instance()->globalStorage(); - - PartitionActions::Choices::AutoPartitionOptions options { - gs->value( "defaultFileSystemType" ).toString(), - m_encryptWidget->passphrase(), - gs->value( "efiSystemPartition" ).toString(), - CalamaresUtils::GiBtoBytes( gs->value( "requiredStorageGiB" ).toDouble() ), - m_eraseSwapChoice - }; - - if ( m_core->isDirty() ) - { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), + ScanningDialog::run( + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), [ = ] { PartitionActions::doAutopartition( m_core, selectedDevice(), options ); - emit deviceChosen(); + Q_EMIT deviceChosen(); }, this ); - } - else - { - PartitionActions::doAutopartition( m_core, selectedDevice(), options ); - emit deviceChosen(); - } } - break; - case Replace: + else + { + PartitionActions::doAutopartition( m_core, selectedDevice(), options ); + Q_EMIT deviceChosen(); + } + } + break; + case InstallChoice::Replace: if ( m_core->isDirty() ) { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), - []{}, - this ); + ScanningDialog::run( + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), + [] {}, + this ); } - updateNextEnabled(); - - connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), - this, SLOT( onPartitionToReplaceSelected( QModelIndex, QModelIndex ) ), + connect( m_beforePartitionBarsView->selectionModel(), + SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), + this, + SLOT( onPartitionToReplaceSelected( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; - case Alongside: + case InstallChoice::Alongside: if ( m_core->isDirty() ) { - ScanningDialog::run( QtConcurrent::run( [ = ] - { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), - [this] - { - // We need to reupdate after reverting because the splitter widget is - // not a true view. - updateActionChoicePreview( currentChoice() ); - updateNextEnabled(); - }, - this ); + ScanningDialog::run( + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), + [ this ] + { + // We need to reupdate after reverting because the splitter widget is + // not a true view. + updateActionChoicePreview( m_config->installChoice() ); + updateNextEnabled(); + }, + this ); } - updateNextEnabled(); - connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), - this, SLOT( doAlongsideSetupSplitter( QModelIndex, QModelIndex ) ), + connect( m_beforePartitionBarsView->selectionModel(), + SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), + this, + SLOT( doAlongsideSetupSplitter( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; - case NoChoice: - case Manual: + case InstallChoice::NoChoice: + case InstallChoice::Manual: break; } + updateNextEnabled(); updateActionChoicePreview( choice ); } void -ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, - const QModelIndex& previous ) +ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) + { return; + } if ( !m_afterPartitionSplitterWidget ) + { return; + } const PartitionModel* modl = qobject_cast< const PartitionModel* >( current.model() ); if ( !modl ) + { return; + } Partition* part = modl->partitionForIndex( current ); if ( !part ) { - cDebug() << Q_FUNC_INFO << "Partition not found for index" << current; + cDebug() << "Partition not found for index" << current; return; } - double requiredStorageGB = Calamares::JobQueue::instance() - ->globalStorage() - ->value( "requiredStorageGiB" ) - .toDouble(); + double requiredStorageGB + = Calamares::JobQueue::instance()->globalStorage()->value( "requiredStorageGiB" ).toDouble(); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( requiredStorageGB + 0.1 + 2.0 ); - m_afterPartitionSplitterWidget->setSplitPartition( - part->partitionPath(), - qRound64( part->used() * 1.1 ), - part->capacity() - requiredStorageB, - part->capacity() / 2 ); + m_afterPartitionSplitterWidget->setSplitPartition( part->partitionPath(), + qRound64( part->used() * 1.1 ), + part->capacity() - requiredStorageB, + part->capacity() / 2 ); if ( m_isEfi ) + { setupEfiSystemPartitionSelector(); + } cDebug() << "Partition selected for Alongside."; @@ -590,22 +642,19 @@ void ChoicePage::onEncryptWidgetStateChanged() { EncryptWidget::Encryption state = m_encryptWidget->state(); - if ( m_choice == Erase ) + if ( m_config->installChoice() == InstallChoice::Erase ) { - if ( state == EncryptWidget::Encryption::Confirmed || - state == EncryptWidget::Encryption::Disabled ) - applyActionChoice( m_choice ); - } - else if ( m_choice == Replace ) - { - if ( m_beforePartitionBarsView && - m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() && - ( state == EncryptWidget::Encryption::Confirmed || - state == EncryptWidget::Encryption::Disabled ) ) + if ( state == EncryptWidget::Encryption::Confirmed || state == EncryptWidget::Encryption::Disabled ) { - doReplaceSelectedPartition( m_beforePartitionBarsView-> - selectionModel()-> - currentIndex() ); + applyActionChoice( m_config->installChoice() ); + } + } + else if ( m_config->installChoice() == InstallChoice::Replace ) + { + if ( m_beforePartitionBarsView && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() + && ( state == EncryptWidget::Encryption::Confirmed || state == EncryptWidget::Encryption::Disabled ) ) + { + doReplaceSelectedPartition( m_beforePartitionBarsView->selectionModel()->currentIndex() ); } } updateNextEnabled(); @@ -615,12 +664,10 @@ ChoicePage::onEncryptWidgetStateChanged() void ChoicePage::onHomeCheckBoxStateChanged() { - if ( currentChoice() == Replace && - m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() ) + if ( m_config->installChoice() == InstallChoice::Replace + && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() ) { - doReplaceSelectedPartition( m_beforePartitionBarsView-> - selectionModel()-> - currentIndex() ); + doReplaceSelectedPartition( m_beforePartitionBarsView->selectionModel()->currentIndex() ); } } @@ -628,36 +675,35 @@ ChoicePage::onHomeCheckBoxStateChanged() void ChoicePage::onLeave() { - if ( m_choice == Alongside ) + if ( m_config->installChoice() == InstallChoice::Alongside ) + { doAlongsideApply(); + } - if ( m_isEfi && ( m_choice == Alongside || m_choice == Replace ) ) + if ( m_isEfi + && ( m_config->installChoice() == InstallChoice::Alongside + || m_config->installChoice() == InstallChoice::Replace ) ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 1 ) { PartitionInfo::setMountPoint( - efiSystemPartitions.first(), - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "efiSystemPartition" ).toString() ); + efiSystemPartitions.first(), + Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString() ); } else if ( efiSystemPartitions.count() > 1 && m_efiComboBox ) { PartitionInfo::setMountPoint( - efiSystemPartitions.at( m_efiComboBox->currentIndex() ), - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "efiSystemPartition" ).toString() ); + efiSystemPartitions.at( m_efiComboBox->currentIndex() ), + Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString() ); } else { - cError() << "cannot set up EFI system partition.\nESP count:" - << efiSystemPartitions.count() << "\nm_efiComboBox:" - << m_efiComboBox; + cError() << "cannot set up EFI system partition.\nESP count:" << efiSystemPartitions.count() + << "\nm_efiComboBox:" << m_efiComboBox; } } - else // installPath is then passed to the bootloader module for MBR setup + else // installPath is then passed to the bootloader module for MBR setup { if ( !m_isEfi ) { @@ -665,15 +711,21 @@ ChoicePage::onLeave() { auto d_p = selectedDevice(); if ( d_p ) + { m_core->setBootLoaderInstallPath( d_p->deviceNode() ); + } else + { cWarning() << "No device selected for bootloader."; + } } else { QVariant var = m_bootloaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) + { return; + } m_core->setBootLoaderInstallPath( var.toString() ); } } @@ -685,13 +737,14 @@ void ChoicePage::doAlongsideApply() { Q_ASSERT( m_afterPartitionSplitterWidget->splitPartitionSize() >= 0 ); - Q_ASSERT( m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ); + Q_ASSERT( m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ); QMutexLocker locker( &m_coreMutex ); - QString path = m_beforePartitionBarsView-> - selectionModel()-> - currentIndex().data( PartitionModel::PartitionPathRole ).toString(); + QString path = m_beforePartitionBarsView->selectionModel() + ->currentIndex() + .data( PartitionModel::PartitionPathRole ) + .toString(); DeviceModel* dm = m_core->deviceModel(); for ( int i = 0; i < dm->rowCount(); ++i ) @@ -702,15 +755,16 @@ ChoicePage::doAlongsideApply() { qint64 firstSector = candidate->firstSector(); qint64 oldLastSector = candidate->lastSector(); - qint64 newLastSector = firstSector + - m_afterPartitionSplitterWidget->splitPartitionSize() / - dev->logicalSize(); + qint64 newLastSector + = firstSector + m_afterPartitionSplitterWidget->splitPartitionSize() / dev->logicalSize(); m_core->resizePartition( dev, candidate, firstSector, newLastSector ); - m_core->layoutApply( dev, newLastSector + 2, oldLastSector, - m_encryptWidget->passphrase(), candidate->parent(), - candidate->roles() - ); + m_core->layoutApply( dev, + newLastSector + 2, + oldLastSector, + m_encryptWidget->passphrase(), + candidate->parent(), + candidate->roles() ); m_core->dumpQueue(); break; @@ -720,12 +774,13 @@ ChoicePage::doAlongsideApply() void -ChoicePage::onPartitionToReplaceSelected( const QModelIndex& current, - const QModelIndex& previous ) +ChoicePage::onPartitionToReplaceSelected( const QModelIndex& current, const QModelIndex& previous ) { Q_UNUSED( previous ) if ( !current.isValid() ) + { return; + } // Reset state on selection regardless of whether this will be used. m_reuseHomeCheckBox->setChecked( false ); @@ -738,119 +793,123 @@ void ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) { if ( !current.isValid() ) - return; - - QString* homePartitionPath = new QString(); - bool doReuseHomePartition = m_reuseHomeCheckBox->isChecked(); - - // NOTE: using by-ref captures because we need to write homePartitionPath and - // doReuseHomePartition *after* the device revert, for later use. - ScanningDialog::run( QtConcurrent::run( - [ this, current ]( QString* homePartitionPath, bool doReuseHomePartition ) { - QMutexLocker locker( &m_coreMutex ); + return; + } - if ( m_core->isDirty() ) - { - m_core->revertDevice( selectedDevice() ); - } + // This will be deleted by the second lambda, below. + QString* homePartitionPath = new QString(); - // if the partition is unallocated(free space), we don't replace it but create new one - // with the same first and last sector - Partition* selectedPartition = - static_cast< Partition* >( current.data( PartitionModel::PartitionPtrRole ) - .value< void* >() ); - if ( isPartitionFreeSpace( selectedPartition ) ) - { - //NOTE: if the selected partition is free space, we don't deal with - // a separate /home partition at all because there's no existing - // rootfs to read it from. - PartitionRole newRoles = PartitionRole( PartitionRole::Primary ); - PartitionNode* newParent = selectedDevice()->partitionTable(); - - if ( selectedPartition->parent() ) + ScanningDialog::run( + QtConcurrent::run( + [ this, current, homePartitionPath ]( bool doReuseHomePartition ) { - Partition* parent = dynamic_cast< Partition* >( selectedPartition->parent() ); - if ( parent && parent->roles().has( PartitionRole::Extended ) ) + QMutexLocker locker( &m_coreMutex ); + + if ( m_core->isDirty() ) { - newRoles = PartitionRole( PartitionRole::Logical ); - newParent = findPartitionByPath( { selectedDevice() }, parent->partitionPath() ); + m_core->revertDevice( selectedDevice() ); } - } - m_core->layoutApply( selectedDevice(), selectedPartition->firstSector(), - selectedPartition->lastSector(), - m_encryptWidget->passphrase(), newParent, newRoles - ); - } - else - { - // We can't use the PartitionPtrRole because we need to make changes to the - // main DeviceModel, not the immutable copy. - QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); - selectedPartition = findPartitionByPath( { selectedDevice() }, - partPath ); - if ( selectedPartition ) - { - // Find out is the selected partition has a rootfs. If yes, then make the - // m_reuseHomeCheckBox visible and set its text to something meaningful. - homePartitionPath->clear(); - for ( const OsproberEntry& osproberEntry : m_core->osproberEntries() ) - if ( osproberEntry.path == partPath ) - *homePartitionPath = osproberEntry.homePath; - if ( homePartitionPath->isEmpty() ) - doReuseHomePartition = false; - - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - - PartitionActions::doReplacePartition( - m_core, - selectedDevice(), - selectedPartition, - { - gs->value( "defaultFileSystemType" ).toString(), - m_encryptWidget->passphrase() - } ); - Partition* homePartition = findPartitionByPath( { selectedDevice() }, - *homePartitionPath ); - - if ( homePartition && doReuseHomePartition ) + // if the partition is unallocated(free space), we don't replace it but create new one + // with the same first and last sector + Partition* selectedPartition + = static_cast< Partition* >( current.data( PartitionModel::PartitionPtrRole ).value< void* >() ); + if ( isPartitionFreeSpace( selectedPartition ) ) { - PartitionInfo::setMountPoint( homePartition, "/home" ); - gs->insert( "reuseHome", true ); + //NOTE: if the selected partition is free space, we don't deal with + // a separate /home partition at all because there's no existing + // rootfs to read it from. + PartitionRole newRoles = PartitionRole( PartitionRole::Primary ); + PartitionNode* newParent = selectedDevice()->partitionTable(); + + if ( selectedPartition->parent() ) + { + Partition* parent = dynamic_cast< Partition* >( selectedPartition->parent() ); + if ( parent && parent->roles().has( PartitionRole::Extended ) ) + { + newRoles = PartitionRole( PartitionRole::Logical ); + newParent = findPartitionByPath( { selectedDevice() }, parent->partitionPath() ); + } + } + + m_core->layoutApply( selectedDevice(), + selectedPartition->firstSector(), + selectedPartition->lastSector(), + m_encryptWidget->passphrase(), + newParent, + newRoles ); } else { - gs->insert( "reuseHome", false ); + // We can't use the PartitionPtrRole because we need to make changes to the + // main DeviceModel, not the immutable copy. + QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); + selectedPartition = findPartitionByPath( { selectedDevice() }, partPath ); + if ( selectedPartition ) + { + // Find out is the selected partition has a rootfs. If yes, then make the + // m_reuseHomeCheckBox visible and set its text to something meaningful. + homePartitionPath->clear(); + for ( const OsproberEntry& osproberEntry : m_core->osproberEntries() ) + if ( osproberEntry.path == partPath ) + { + *homePartitionPath = osproberEntry.homePath; + } + if ( homePartitionPath->isEmpty() ) + { + doReuseHomePartition = false; + } + + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + + PartitionActions::doReplacePartition( m_core, + selectedDevice(), + selectedPartition, + { gs->value( "defaultPartitionType" ).toString(), + gs->value( "defaultFileSystemType" ).toString(), + m_encryptWidget->passphrase() } ); + Partition* homePartition = findPartitionByPath( { selectedDevice() }, *homePartitionPath ); + + if ( homePartition && doReuseHomePartition ) + { + PartitionInfo::setMountPoint( homePartition, "/home" ); + gs->insert( "reuseHome", true ); + } + else + { + gs->insert( "reuseHome", false ); + } + } } - } - } - }, homePartitionPath, doReuseHomePartition ), - [ = ] - { - m_reuseHomeCheckBox->setVisible( !homePartitionPath->isEmpty() ); - if ( !homePartitionPath->isEmpty() ) - m_reuseHomeCheckBox->setText( tr( "Reuse %1 as home partition for %2." ) - .arg( *homePartitionPath ) - .arg( *Calamares::Branding::ShortProductName ) ); - delete homePartitionPath; + }, + m_reuseHomeCheckBox->isChecked() ), + [ this, homePartitionPath ] + { + m_reuseHomeCheckBox->setVisible( !homePartitionPath->isEmpty() ); + if ( !homePartitionPath->isEmpty() ) + m_reuseHomeCheckBox->setText( tr( "Reuse %1 as home partition for %2." ) + .arg( *homePartitionPath ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); + delete homePartitionPath; - if ( m_isEfi ) - setupEfiSystemPartitionSelector(); + if ( m_isEfi ) + setupEfiSystemPartitionSelector(); - updateNextEnabled(); - if ( !m_bootloaderComboBox.isNull() && - m_bootloaderComboBox->currentIndex() < 0 ) - m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); - }, this ); + updateNextEnabled(); + if ( !m_bootloaderComboBox.isNull() && m_bootloaderComboBox->currentIndex() < 0 ) + m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); + }, + this ); } /** - * @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() @@ -866,17 +925,19 @@ ChoicePage::updateDeviceStatePreview() auto layout = m_previewBeforeFrame->layout(); if ( layout ) + { layout->deleteLater(); // Doesn't like nullptr + } layout = new QVBoxLayout; m_previewBeforeFrame->setLayout( layout ); CalamaresUtils::unmarginLayout( layout ); layout->setSpacing( 6 ); - PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> - value( "drawNestedPartitions" ).toBool() ? - PartitionBarsView::DrawNestedPartitions : - PartitionBarsView::NoNestedPartitions; + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; m_beforePartitionBarsView = new PartitionBarsView( m_previewBeforeFrame ); m_beforePartitionBarsView->setNestedPartitionsMode( mode ); m_beforePartitionLabelsView = new PartitionLabelsView( m_previewBeforeFrame ); @@ -894,16 +955,20 @@ ChoicePage::updateDeviceStatePreview() auto sm = m_beforePartitionLabelsView->selectionModel(); m_beforePartitionLabelsView->setSelectionModel( m_beforePartitionBarsView->selectionModel() ); if ( sm ) - sm->deleteLater(); - - switch ( m_choice ) { - case Replace: - case Alongside: + sm->deleteLater(); + } + + switch ( m_config->installChoice() ) + { + case InstallChoice::Replace: + case InstallChoice::Alongside: m_beforePartitionBarsView->setSelectionMode( QAbstractItemView::SingleSelection ); m_beforePartitionLabelsView->setSelectionMode( QAbstractItemView::SingleSelection ); break; - default: + case InstallChoice::NoChoice: + case InstallChoice::Erase: + case InstallChoice::Manual: m_beforePartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); m_beforePartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); } @@ -914,14 +979,14 @@ 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 -ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) +ChoicePage::updateActionChoicePreview( InstallChoice choice ) { Device* currentDevice = selectedDevice(); Q_ASSERT( currentDevice ); @@ -933,156 +998,174 @@ ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) auto oldlayout = m_previewAfterFrame->layout(); if ( oldlayout ) + { oldlayout->deleteLater(); + } QVBoxLayout* layout = new QVBoxLayout; m_previewAfterFrame->setLayout( layout ); CalamaresUtils::unmarginLayout( layout ); layout->setSpacing( 6 ); - PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> - value( "drawNestedPartitions" ).toBool() ? - PartitionBarsView::DrawNestedPartitions : - PartitionBarsView::NoNestedPartitions; + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; m_reuseHomeCheckBox->hide(); Calamares::JobQueue::instance()->globalStorage()->insert( "reuseHome", false ); switch ( choice ) { - case Alongside: + case InstallChoice::Alongside: + { + if ( m_enableEncryptionWidget ) { - if ( m_enableEncryptionWidget ) - m_encryptWidget->show(); - m_previewBeforeLabel->setText( tr( "Current:" ) ); - m_selectLabel->setText( tr( "Select a partition to shrink, " - "then drag the bottom bar to resize" ) ); - m_selectLabel->show(); + m_encryptWidget->show(); + } + m_previewBeforeLabel->setText( tr( "Current:" ) ); + m_selectLabel->setText( tr( "Select a partition to shrink, " + "then drag the bottom bar to resize" ) ); + m_selectLabel->show(); - m_afterPartitionSplitterWidget = new PartitionSplitterWidget( m_previewAfterFrame ); - m_afterPartitionSplitterWidget->init( selectedDevice(), mode == PartitionBarsView::DrawNestedPartitions ); - layout->addWidget( m_afterPartitionSplitterWidget ); + m_afterPartitionSplitterWidget = new PartitionSplitterWidget( m_previewAfterFrame ); + m_afterPartitionSplitterWidget->init( selectedDevice(), mode == PartitionBarsView::DrawNestedPartitions ); + layout->addWidget( m_afterPartitionSplitterWidget ); - QLabel* sizeLabel = new QLabel( m_previewAfterFrame ); - layout->addWidget( sizeLabel ); - sizeLabel->setWordWrap( true ); - connect( m_afterPartitionSplitterWidget, &PartitionSplitterWidget::partitionResized, this, - [ this, sizeLabel ]( const QString& path, qint64 size, qint64 sizeNext ) + QLabel* sizeLabel = new QLabel( m_previewAfterFrame ); + layout->addWidget( sizeLabel ); + sizeLabel->setWordWrap( true ); + connect( m_afterPartitionSplitterWidget, + &PartitionSplitterWidget::partitionResized, + this, + [ this, sizeLabel ]( const QString& path, qint64 size, qint64 sizeNext ) + { + Q_UNUSED( path ) + sizeLabel->setText( + tr( "%1 will be shrunk to %2MiB and a new " + "%3MiB partition will be created for %4." ) + .arg( m_beforePartitionBarsView->selectionModel()->currentIndex().data().toString() ) + .arg( CalamaresUtils::BytesToMiB( size ) ) + .arg( CalamaresUtils::BytesToMiB( sizeNext ) ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); + } ); + + m_previewAfterFrame->show(); + m_previewAfterLabel->show(); + + SelectionFilter filter = []( const QModelIndex& index ) + { + return PartUtils::canBeResized( + static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), + Logger::Once() ); + }; + m_beforePartitionBarsView->setSelectionFilter( filter ); + m_beforePartitionLabelsView->setSelectionFilter( filter ); + + break; + } + case InstallChoice::Erase: + case InstallChoice::Replace: + { + if ( m_enableEncryptionWidget ) + { + m_encryptWidget->show(); + } + m_previewBeforeLabel->setText( tr( "Current:" ) ); + m_afterPartitionBarsView = new PartitionBarsView( m_previewAfterFrame ); + m_afterPartitionBarsView->setNestedPartitionsMode( mode ); + m_afterPartitionLabelsView = new PartitionLabelsView( m_previewAfterFrame ); + m_afterPartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); + m_afterPartitionLabelsView->setCustomNewRootLabel( + Calamares::Branding::instance()->string( Calamares::Branding::BootloaderEntryName ) ); + + PartitionModel* model = m_core->partitionModelForDevice( selectedDevice() ); + + // The QObject parents tree is meaningful for memory management here, + // see qDeleteAll above. + m_afterPartitionBarsView->setModel( model ); + m_afterPartitionLabelsView->setModel( model ); + m_afterPartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); + m_afterPartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); + + layout->addWidget( m_afterPartitionBarsView ); + layout->addWidget( m_afterPartitionLabelsView ); + + if ( !m_isEfi ) + { + QWidget* eraseWidget = new QWidget; + + QHBoxLayout* eraseLayout = new QHBoxLayout; + eraseWidget->setLayout( eraseLayout ); + eraseLayout->setContentsMargins( 0, 0, 0, 0 ); + QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); + eraseLayout->addWidget( eraseBootloaderLabel ); + eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); + + m_bootloaderComboBox = createBootloaderComboBox( eraseWidget ); + connect( m_core->bootLoaderModel(), + &QAbstractItemModel::modelReset, + [ this ]() + { + if ( !m_bootloaderComboBox.isNull() ) + { + Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, + m_core->bootLoaderInstallPath() ); + } + } ); + connect( + m_core, + &PartitionCoreModule::deviceReverted, + this, + [ this ]( Device* dev ) { - Q_UNUSED( path ) - sizeLabel->setText( tr( "%1 will be shrunk to %2MiB and a new " - "%3MiB partition will be created for %4." ) - .arg( m_beforePartitionBarsView->selectionModel()->currentIndex().data().toString() ) - .arg( CalamaresUtils::BytesToMiB( size ) ) - .arg( CalamaresUtils::BytesToMiB( sizeNext ) ) - .arg( *Calamares::Branding::ShortProductName ) ); - } - ); + Q_UNUSED( dev ) + if ( !m_bootloaderComboBox.isNull() ) + { + if ( m_bootloaderComboBox->model() != m_core->bootLoaderModel() ) + { + m_bootloaderComboBox->setModel( m_core->bootLoaderModel() ); + } - m_previewAfterFrame->show(); - m_previewAfterLabel->show(); + m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); + } + }, + Qt::QueuedConnection ); + // ^ Must be Queued so it's sure to run when the widget is already visible. - SelectionFilter filter = [ this ]( const QModelIndex& index ) + eraseLayout->addWidget( m_bootloaderComboBox ); + eraseBootloaderLabel->setBuddy( m_bootloaderComboBox ); + eraseLayout->addStretch(); + + layout->addWidget( eraseWidget ); + } + + m_previewAfterFrame->show(); + m_previewAfterLabel->show(); + + if ( m_config->installChoice() == InstallChoice::Erase ) + { + m_selectLabel->hide(); + } + else + { + SelectionFilter filter = []( const QModelIndex& index ) { - return PartUtils::canBeResized( - static_cast< Partition* >( - index.data( PartitionModel::PartitionPtrRole ) - .value< void* >() ) ); + return PartUtils::canBeReplaced( + static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), + Logger::Once() ); }; m_beforePartitionBarsView->setSelectionFilter( filter ); m_beforePartitionLabelsView->setSelectionFilter( filter ); - break; + m_selectLabel->show(); + m_selectLabel->setText( tr( "Select a partition to install on" ) ); } - case Erase: - case Replace: - { - if ( m_enableEncryptionWidget ) - m_encryptWidget->show(); - m_previewBeforeLabel->setText( tr( "Current:" ) ); - m_afterPartitionBarsView = new PartitionBarsView( m_previewAfterFrame ); - m_afterPartitionBarsView->setNestedPartitionsMode( mode ); - m_afterPartitionLabelsView = new PartitionLabelsView( m_previewAfterFrame ); - m_afterPartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); - m_afterPartitionLabelsView->setCustomNewRootLabel( *Calamares::Branding::BootloaderEntryName ); - PartitionModel* model = m_core->partitionModelForDevice( selectedDevice() ); - - // The QObject parents tree is meaningful for memory management here, - // see qDeleteAll above. - m_afterPartitionBarsView->setModel( model ); - m_afterPartitionLabelsView->setModel( model ); - m_afterPartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); - m_afterPartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); - - layout->addWidget( m_afterPartitionBarsView ); - layout->addWidget( m_afterPartitionLabelsView ); - - if ( !m_isEfi ) - { - QWidget* eraseWidget = new QWidget; - - QHBoxLayout* eraseLayout = new QHBoxLayout; - eraseWidget->setLayout( eraseLayout ); - eraseLayout->setContentsMargins( 0, 0, 0, 0 ); - QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); - eraseLayout->addWidget( eraseBootloaderLabel ); - eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); - - m_bootloaderComboBox = createBootloaderComboBox( eraseWidget ); - connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, - [ this ]() - { - if ( !m_bootloaderComboBox.isNull() ) - Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, m_core->bootLoaderInstallPath() ); - } - ); - connect( m_core, &PartitionCoreModule::deviceReverted, this, - [ this ]( Device* dev ) - { - Q_UNUSED( dev ) - if ( !m_bootloaderComboBox.isNull() ) - { - if ( m_bootloaderComboBox->model() != m_core->bootLoaderModel() ) - m_bootloaderComboBox->setModel( m_core->bootLoaderModel() ); - - m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); - } - }, Qt::QueuedConnection ); - // ^ Must be Queued so it's sure to run when the widget is already visible. - - eraseLayout->addWidget( m_bootloaderComboBox ); - eraseBootloaderLabel->setBuddy( m_bootloaderComboBox ); - eraseLayout->addStretch(); - - layout->addWidget( eraseWidget ); - } - - m_previewAfterFrame->show(); - m_previewAfterLabel->show(); - - if ( m_choice == Erase ) - m_selectLabel->hide(); - else - { - SelectionFilter filter = [ this ]( const QModelIndex& index ) - { - return PartUtils::canBeReplaced( - static_cast< Partition* >( - index.data( PartitionModel::PartitionPtrRole ) - .value< void* >() ) ); - }; - m_beforePartitionBarsView->setSelectionFilter( filter ); - m_beforePartitionLabelsView->setSelectionFilter( filter ); - - m_selectLabel->show(); - m_selectLabel->setText( tr( "Select a partition to install on" ) ); - } - - break; - } - case NoChoice: - case Manual: + break; + } + case InstallChoice::NoChoice: + case InstallChoice::Manual: m_selectLabel->hide(); m_previewAfterFrame->hide(); m_previewBeforeLabel->setText( tr( "Current:" ) ); @@ -1091,7 +1174,9 @@ ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) break; } - if ( m_isEfi && ( m_choice == Alongside || m_choice == Replace ) ) + if ( m_isEfi + && ( m_config->installChoice() == InstallChoice::Alongside + || m_config->installChoice() == InstallChoice::Replace ) ) { QHBoxLayout* efiLayout = new QHBoxLayout; layout->addLayout( efiLayout ); @@ -1105,14 +1190,16 @@ ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice ) } // Also handle selection behavior on beforeFrame. - QAbstractItemView::SelectionMode previewSelectionMode; - switch ( m_choice ) + QAbstractItemView::SelectionMode previewSelectionMode = QAbstractItemView::NoSelection; + switch ( m_config->installChoice() ) { - case Replace: - case Alongside: + case InstallChoice::Replace: + case InstallChoice::Alongside: previewSelectionMode = QAbstractItemView::SingleSelection; break; - default: + case InstallChoice::NoChoice: + case InstallChoice::Erase: + case InstallChoice::Manual: previewSelectionMode = QAbstractItemView::NoSelection; } @@ -1129,22 +1216,20 @@ ChoicePage::setupEfiSystemPartitionSelector() // Only the already existing ones: QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); - if ( efiSystemPartitions.count() == 0 ) //should never happen + if ( efiSystemPartitions.count() == 0 ) //should never happen { - m_efiLabel->setText( - tr( "An EFI system partition cannot be found anywhere " - "on this system. Please go back and use manual " - "partitioning to set up %1." ) - .arg( *Calamares::Branding::ShortProductName ) ); + m_efiLabel->setText( tr( "An EFI system partition cannot be found anywhere " + "on this system. Please go back and use manual " + "partitioning to set up %1." ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); updateNextEnabled(); } - else if ( efiSystemPartitions.count() == 1 ) //probably most usual situation + else if ( efiSystemPartitions.count() == 1 ) //probably most usual situation { - m_efiLabel->setText( - tr( "The EFI system partition at %1 will be used for " - "starting %2." ) - .arg( efiSystemPartitions.first()->partitionPath() ) - .arg( *Calamares::Branding::ShortProductName ) ); + m_efiLabel->setText( tr( "The EFI system partition at %1 will be used for " + "starting %2." ) + .arg( efiSystemPartitions.first()->partitionPath() ) + .arg( Calamares::Branding::instance()->shortProductName() ) ); } else { @@ -1156,9 +1241,10 @@ ChoicePage::setupEfiSystemPartitionSelector() m_efiComboBox->addItem( efiPartition->partitionPath(), i ); // We pick an ESP on the currently selected device, if possible - if ( efiPartition->devicePath() == selectedDevice()->deviceNode() && - efiPartition->number() == 1 ) + if ( efiPartition->devicePath() == selectedDevice()->deviceNode() && efiPartition->number() == 1 ) + { m_efiComboBox->setCurrentIndex( i ); + } } } } @@ -1167,97 +1253,138 @@ ChoicePage::setupEfiSystemPartitionSelector() QComboBox* ChoicePage::createBootloaderComboBox( QWidget* parent ) { - QComboBox* bcb = new QComboBox( parent ); - bcb->setModel( m_core->bootLoaderModel() ); + QComboBox* comboForBootloader = new QComboBox( parent ); + comboForBootloader->setModel( m_core->bootLoaderModel() ); // When the chosen bootloader device changes, we update the choice in the PCM - connect( bcb, QOverload::of( &QComboBox::currentIndexChanged ), - this, [this]( int newIndex ) - { - QComboBox* bcb = qobject_cast< QComboBox* >( sender() ); - if ( bcb ) - { - QVariant var = bcb->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); - if ( !var.isValid() ) - return; - m_core->setBootLoaderInstallPath( var.toString() ); - } - } ); + connect( comboForBootloader, + QOverload< int >::of( &QComboBox::currentIndexChanged ), + this, + [ this ]( int newIndex ) + { + QComboBox* bootloaderCombo = qobject_cast< QComboBox* >( sender() ); + if ( bootloaderCombo ) + { + QVariant var = bootloaderCombo->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); + if ( !var.isValid() ) + { + return; + } + m_core->setBootLoaderInstallPath( var.toString() ); + } + } ); - return bcb; + return comboForBootloader; } static inline void -force_uncheck(QButtonGroup* grp, PrettyRadioButton* button) +force_uncheck( QButtonGroup* grp, PrettyRadioButton* button ) { button->hide(); grp->setExclusive( false ); - button->buttonWidget()->setChecked( false ); + button->setChecked( false ); grp->setExclusive( true ); } static inline QDebug& -operator <<( QDebug& s, PartitionIterator& it ) +operator<<( QDebug& s, PartitionIterator& it ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; } +QString +describePartitionTypes( const QStringList& types ) +{ + if ( types.empty() ) + { + return QCoreApplication::translate( + ChoicePage::staticMetaObject.className(), "any", "any partition-table type" ); + } + if ( types.size() == 1 ) + { + return types.first(); + } + if ( types.size() == 2 ) + { + return QCoreApplication::translate( + ChoicePage::staticMetaObject.className(), "%1 or %2", "partition-table types" ) + .arg( types.at( 0 ), types.at( 1 ) ); + } + // More than two, rather unlikely + return types.join( ", " ); +} + /** * @brief ChoicePage::setupActions happens every time a new Device* is selected in the * device picker. Sets up the text and visibility of the partitioning actions based * on the currently selected Device*, bootloader and os-prober output. - * @param currentDevice */ void ChoicePage::setupActions() { - Device* currentDevice = selectedDevice(); - OsproberEntryList osproberEntriesForCurrentDevice = - getOsproberEntriesForDevice( currentDevice ); + Logger::Once o; - cDebug() << "Setting up actions for" << currentDevice->deviceNode() - << "with" << osproberEntriesForCurrentDevice.count() << "entries."; + Device* currentDevice = selectedDevice(); + OsproberEntryList osproberEntriesForCurrentDevice = getOsproberEntriesForDevice( currentDevice ); + + cDebug() << o << "Setting up actions for" << currentDevice->deviceNode() << "with" + << osproberEntriesForCurrentDevice.count() << "entries."; if ( currentDevice->partitionTable() ) + { m_deviceInfoWidget->setPartitionTableType( currentDevice->partitionTable()->type() ); + } else + { m_deviceInfoWidget->setPartitionTableType( PartitionTable::unknownTableType ); + } - if ( m_allowManualPartitioning ) + if ( m_config->allowManualPartitioning() ) + { m_somethingElseButton->show(); + } else + { force_uncheck( m_grp, m_somethingElseButton ); + } bool atLeastOneCanBeResized = false; bool atLeastOneCanBeReplaced = false; bool atLeastOneIsMounted = false; // Suppress 'erase' if so bool isInactiveRAID = false; + bool matchTableType = false; #ifdef WITH_KPMCORE4API - if ( currentDevice->type() == Device::Type::SoftwareRAID_Device && - static_cast< SoftwareRAID* >(currentDevice)->status() == SoftwareRAID::Status::Inactive ) + if ( currentDevice->type() == Device::Type::SoftwareRAID_Device + && static_cast< SoftwareRAID* >( currentDevice )->status() == SoftwareRAID::Status::Inactive ) { cDebug() << Logger::SubEntry << "part of an inactive RAID device"; isInactiveRAID = true; } #endif - for ( auto it = PartitionIterator::begin( currentDevice ); - it != PartitionIterator::end( currentDevice ); ++it ) + PartitionTable::TableType tableType = PartitionTable::unknownTableType; + if ( currentDevice->partitionTable() ) { - if ( PartUtils::canBeResized( *it ) ) + tableType = currentDevice->partitionTable()->type(); + matchTableType = m_config->acceptPartitionTableType( tableType ); + } + + for ( auto it = PartitionIterator::begin( currentDevice ); it != PartitionIterator::end( currentDevice ); ++it ) + { + if ( PartUtils::canBeResized( *it, o ) ) { cDebug() << Logger::SubEntry << "contains resizable" << it; atLeastOneCanBeResized = true; } - if ( PartUtils::canBeReplaced( *it ) ) + if ( PartUtils::canBeReplaced( *it, o ) ) { cDebug() << Logger::SubEntry << "contains replaceable" << it; atLeastOneCanBeReplaced = true; } - if ( (*it)->isMounted() ) + if ( ( *it )->isMounted() ) { atLeastOneIsMounted = true; } @@ -1278,18 +1405,17 @@ ChoicePage::setupActions() m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); m_replaceButton->hide(); m_alongsideButton->hide(); m_grp->setExclusive( false ); - m_replaceButton->buttonWidget()->setChecked( false ); - m_alongsideButton->buttonWidget()->setChecked( false ); + m_replaceButton->setChecked( false ); + m_alongsideButton->setChecked( false ); m_grp->setExclusive( true ); } else if ( osproberEntriesForCurrentDevice.count() == 1 ) @@ -1304,11 +1430,11 @@ ChoicePage::setupActions() "What would you like to do?
" "You will be able to review and confirm your choices " "before any change is made to the storage device." ) - .arg( osName ) ); + .arg( osName ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " @@ -1317,8 +1443,7 @@ ChoicePage::setupActions() m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); } else { @@ -1331,7 +1456,7 @@ ChoicePage::setupActions() m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " @@ -1339,8 +1464,7 @@ ChoicePage::setupActions() m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); } } else @@ -1357,7 +1481,7 @@ ChoicePage::setupActions() m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " @@ -1365,12 +1489,11 @@ ChoicePage::setupActions() m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) ); - ) + .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); } #ifdef DEBUG_PARTITION_UNSAFE -#ifdef DEBUG_PARTITION_LAME +#ifdef DEBUG_PARTITION_BAIL_OUT // If things can't be broken, allow all the buttons atLeastOneCanBeReplaced = true; atLeastOneCanBeResized = true; @@ -1380,28 +1503,33 @@ ChoicePage::setupActions() #endif if ( atLeastOneCanBeReplaced ) + { m_replaceButton->show(); + } else { - cDebug() << "Replace button suppressed because none can be replaced."; + cDebug() << "No partitions available for replace-action."; force_uncheck( m_grp, m_replaceButton ); } if ( atLeastOneCanBeResized ) + { m_alongsideButton->show(); + } else { - cDebug() << "Alongside button suppressed because none can be resized."; + cDebug() << "No partitions available for resize-action."; force_uncheck( m_grp, m_alongsideButton ); } if ( !atLeastOneIsMounted && !isInactiveRAID ) + { m_eraseButton->show(); // None mounted + } else { - cDebug() << "Erase button suppressed" - << "mount?" << atLeastOneIsMounted - << "raid?" << isInactiveRAID; + cDebug() << "No partitions (" + << "any-mounted?" << atLeastOneIsMounted << "is-raid?" << isInactiveRAID << ") for erase-action."; force_uncheck( m_grp, m_eraseButton ); } @@ -1411,10 +1539,49 @@ ChoicePage::setupActions() if ( isEfi && !efiSystemPartitionFound ) { cWarning() << "System is EFI but there's no EFI system partition, " - "DISABLING alongside and replace features."; + "DISABLING alongside and replace features."; m_alongsideButton->hide(); m_replaceButton->hide(); } + + if ( tableType != PartitionTable::unknownTableType && !matchTableType ) + { + m_messageLabel->setText( tr( "This storage device already has an operating system on it, " + "but the partition table %1 is different from the " + "needed %2.
" ) + .arg( PartitionTable::tableTypeToName( tableType ) ) + .arg( describePartitionTypes( m_config->partitionTableTypes() ) ) ); + m_messageLabel->show(); + + cWarning() << "Partition table" << PartitionTable::tableTypeToName( tableType ) + << "does not match the requirement " << m_config->partitionTableTypes().join( ',' ) + << ", ENABLING erase feature and DISABLING alongside, replace and manual features."; + m_eraseButton->show(); + m_alongsideButton->hide(); + m_replaceButton->hide(); + m_somethingElseButton->hide(); + cDebug() << "Replace button suppressed because partition table type mismatch."; + force_uncheck( m_grp, m_replaceButton ); + } + + if ( m_somethingElseButton->isHidden() && m_alongsideButton->isHidden() && m_replaceButton->isHidden() + && m_eraseButton->isHidden() ) + { + if ( atLeastOneIsMounted ) + { + m_messageLabel->setText( tr( "This storage device has one of its partitions mounted." ) ); + } + else + { + m_messageLabel->setText( + tr( "This storage device is a part of an inactive RAID device." ) ); + } + + m_messageLabel->show(); + cWarning() << "No buttons available" + << "replaced?" << atLeastOneCanBeReplaced << "resized?" << atLeastOneCanBeResized + << "erased? (not-mounted and not-raid)" << !atLeastOneIsMounted << "and" << !isInactiveRAID; + } } @@ -1425,7 +1592,9 @@ ChoicePage::getOsproberEntriesForDevice( Device* device ) const for ( const OsproberEntry& entry : m_core->osproberEntries() ) { if ( entry.path.startsWith( device->deviceNode() ) ) + { eList.append( entry ); + } } return eList; } @@ -1438,94 +1607,136 @@ ChoicePage::isNextEnabled() const } -ChoicePage::InstallChoice -ChoicePage::currentChoice() const +bool +ChoicePage::calculateNextEnabled() const { - return m_choice; + bool enabled = false; + auto sm_p = m_beforePartitionBarsView ? m_beforePartitionBarsView->selectionModel() : nullptr; + + switch ( m_config->installChoice() ) + { + case InstallChoice::NoChoice: + cDebug() << "No partitioning choice"; + return false; + case InstallChoice::Replace: + case InstallChoice::Alongside: + if ( !( sm_p && sm_p->currentIndex().isValid() ) ) + { + cDebug() << "No partition selected"; + return false; + } + enabled = true; + break; + case InstallChoice::Erase: + case InstallChoice::Manual: + enabled = true; + } + + if ( !enabled ) + { + cDebug() << "No valid choice made"; + return false; + } + + + if ( m_isEfi + && ( m_config->installChoice() == InstallChoice::Alongside + || m_config->installChoice() == InstallChoice::Replace ) ) + { + if ( m_core->efiSystemPartitions().count() == 0 ) + { + cDebug() << "No EFI partition for alongside or replace"; + return false; + } + } + + if ( m_config->installChoice() != InstallChoice::Manual && m_encryptWidget->isVisible() ) + { + switch ( m_encryptWidget->state() ) + { + case EncryptWidget::Encryption::Unconfirmed: + cDebug() << "No passphrase provided"; + return false; + case EncryptWidget::Encryption::Disabled: + case EncryptWidget::Encryption::Confirmed: + // Checkbox not checked, **or** passphrases match + break; + } + } + + return true; } void ChoicePage::updateNextEnabled() { - bool enabled = false; + bool enabled = calculateNextEnabled(); - auto sm_p = m_beforePartitionBarsView ? m_beforePartitionBarsView->selectionModel() : nullptr; - - switch ( m_choice ) + if ( enabled != m_nextEnabled ) { - case NoChoice: - enabled = false; - break; - case Replace: - case Alongside: - enabled = sm_p && sm_p->currentIndex().isValid(); - break; - case Erase: - case Manual: - enabled = true; + m_nextEnabled = enabled; + Q_EMIT nextStatusChanged( enabled ); } - - if ( m_isEfi && - ( m_choice == Alongside || - m_choice == Replace ) ) - { - if ( m_core->efiSystemPartitions().count() == 0 ) - enabled = false; - } - - if ( m_choice != Manual && - m_encryptWidget->isVisible() && - m_encryptWidget->state() == EncryptWidget::Encryption::Unconfirmed ) - enabled = false; - - if ( enabled == m_nextEnabled ) - return; - - m_nextEnabled = enabled; - emit nextStatusChanged( enabled ); } void -ChoicePage::updateSwapChoicesTr(QComboBox* box) +ChoicePage::updateSwapChoicesTr() { - if ( !box ) + if ( !m_eraseSwapChoiceComboBox ) + { return; + } - static_assert(SwapChoice::NoSwap == 0, "Enum values out-of-sync"); - for ( int index = 0; index < box->count(); ++index ) + static_assert( SwapChoice::NoSwap == 0, "Enum values out-of-sync" ); + for ( int index = 0; index < m_eraseSwapChoiceComboBox->count(); ++index ) { bool ok = false; int value = 0; - switch ( value = box->itemData( index ).toInt( &ok ) ) + switch ( value = m_eraseSwapChoiceComboBox->itemData( index ).toInt( &ok ) ) { - // case 0: - case SwapChoice::NoSwap: - // toInt() returns 0 on failure, so check for ok - if ( ok ) // It was explicitly set to 0 - box->setItemText( index, tr( "No Swap" ) ); - else - cWarning() << "Box item" << index << box->itemText( index ) << "has non-integer role."; - break; - case SwapChoice::ReuseSwap: - box->setItemText( index, tr( "Reuse Swap" ) ); - break; - case SwapChoice::SmallSwap: - box->setItemText( index, tr( "Swap (no Hibernate)" ) ); - break; - case SwapChoice::FullSwap: - box->setItemText( index, tr( "Swap (with Hibernate)" ) ); - break; - case SwapChoice::SwapFile: - box->setItemText( index, tr( "Swap to file" ) ); - break; - default: - cWarning() << "Box item" << index << box->itemText( index ) << "has role" << value; + // case 0: + case SwapChoice::NoSwap: + // toInt() returns 0 on failure, so check for ok + if ( ok ) // It was explicitly set to 0 + { + m_eraseSwapChoiceComboBox->setItemText( index, tr( "No Swap" ) ); + } + else + { + cWarning() << "Box item" << index << m_eraseSwapChoiceComboBox->itemText( index ) + << "has non-integer role."; + } + break; + case SwapChoice::ReuseSwap: + m_eraseSwapChoiceComboBox->setItemText( index, tr( "Reuse Swap" ) ); + break; + case SwapChoice::SmallSwap: + m_eraseSwapChoiceComboBox->setItemText( index, tr( "Swap (no Hibernate)" ) ); + break; + case SwapChoice::FullSwap: + m_eraseSwapChoiceComboBox->setItemText( index, tr( "Swap (with Hibernate)" ) ); + break; + case SwapChoice::SwapFile: + m_eraseSwapChoiceComboBox->setItemText( index, tr( "Swap to file" ) ); + break; + default: + cWarning() << "Box item" << index << m_eraseSwapChoiceComboBox->itemText( index ) << "has role" << value; } } } +void +ChoicePage::updateChoiceButtonsTr() +{ + if ( m_somethingElseButton ) + { + m_somethingElseButton->setText( tr( "Manual partitioning
" + "You can create or resize partitions yourself." ) ); + } +} + int ChoicePage::lastSelectedDeviceIndex() { diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index baf575d49..12222ac63 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHOICEPAGE_H @@ -23,30 +14,35 @@ #include "ui_ChoicePage.h" -#include +#include "Config.h" #include "core/OsproberEntry.h" -#include "core/PartitionActions.h" #include #include #include +#include class QBoxLayout; class QComboBox; class QLabel; class QListView; +namespace Calamares +{ +class PrettyRadioButton; +} + +class Config; +class DeviceInfoWidget; class PartitionBarsView; class PartitionSplitterWidget; class PartitionLabelsView; class PartitionCoreModule; -class PrettyRadioButton; -class DeviceInfoWidget; class Device; -using SwapChoiceSet = QSet< PartitionActions::Choices::SwapChoice >; +using SwapChoiceSet = Config::SwapChoiceSet; /** * @brief The ChoicePage class is the first page of the partitioning interface. @@ -57,17 +53,8 @@ class ChoicePage : public QWidget, private Ui::ChoicePage { Q_OBJECT public: - enum InstallChoice - { - NoChoice, - Alongside, - Erase, - Replace, - Manual - }; - - explicit ChoicePage( const SwapChoiceSet& swapChoices, QWidget* parent = nullptr ); - virtual ~ChoicePage(); + explicit ChoicePage( Config* config, QWidget* parent = nullptr ); + ~ChoicePage() override; /** * @brief init runs when the PartitionViewStep and the PartitionCoreModule are @@ -83,13 +70,6 @@ public: */ bool isNextEnabled() const; - /** - * @brief currentChoice returns the enum Choice value corresponding to the - * currently selected partitioning mode (with a PrettyRadioButton). - * @return the enum Choice value. - */ - InstallChoice currentChoice() const; - /** * @brief onLeave runs when control passes from this page to another one. */ @@ -99,7 +79,7 @@ public: * @brief applyActionChoice reacts to a choice of partitioning mode. * @param choice the partitioning action choice. */ - void applyActionChoice( ChoicePage::InstallChoice choice ); + void applyActionChoice( Config::InstallChoice choice ); int lastSelectedDeviceIndex(); void setLastSelectedDeviceIndex( int index ); @@ -121,9 +101,13 @@ private slots: /// @brief Calls onActionChanged() as needed. void onEraseSwapChoiceChanged(); + void retranslate(); + private: + bool calculateNextEnabled() const; void updateNextEnabled(); void setupChoices(); + void checkInstallChoiceRadioButton( Config::InstallChoice choice ); ///< Sets the chosen button to "on" QComboBox* createBootloaderComboBox( QWidget* parentButton ); Device* selectedDevice(); @@ -133,31 +117,33 @@ private: void continueApplyDeviceChoice(); // .. called after scan void updateDeviceStatePreview(); - void updateActionChoicePreview( ChoicePage::InstallChoice choice ); + void updateActionChoicePreview( Config::InstallChoice choice ); void setupActions(); OsproberEntryList getOsproberEntriesForDevice( Device* device ) const; void doAlongsideApply(); void setupEfiSystemPartitionSelector(); // Translations support - void updateSwapChoicesTr( QComboBox* box ); + void updateSwapChoicesTr(); + void updateChoiceButtonsTr(); + Config* m_config; bool m_nextEnabled; PartitionCoreModule* m_core; QMutex m_previewsMutex; - InstallChoice m_choice; - bool m_isEfi; QComboBox* m_drivesCombo; QButtonGroup* m_grp; - PrettyRadioButton* m_alongsideButton; - PrettyRadioButton* m_eraseButton; - PrettyRadioButton* m_replaceButton; - PrettyRadioButton* m_somethingElseButton; - QComboBox* m_eraseSwapChoiceComboBox; // UI, see also m_eraseSwapChoice + Calamares::PrettyRadioButton* m_alongsideButton; + Calamares::PrettyRadioButton* m_eraseButton; + Calamares::PrettyRadioButton* m_replaceButton; + Calamares::PrettyRadioButton* m_somethingElseButton; + QComboBox* m_eraseSwapChoiceComboBox = nullptr; // UI, see also Config's swap choice + QComboBox* m_eraseFsTypesChoiceComboBox = nullptr; // UI, see also Config's erase-mode FS + DeviceInfoWidget* m_deviceInfoWidget; @@ -170,16 +156,12 @@ private: QPointer< QLabel > m_efiLabel; QPointer< QComboBox > m_efiComboBox; - int m_lastSelectedDeviceIndex; + int m_lastSelectedDeviceIndex = -1; + int m_lastSelectedActionIndex = -1; - QString m_defaultFsType; bool m_enableEncryptionWidget; - SwapChoiceSet m_availableSwapChoices; // What is available - PartitionActions::Choices::SwapChoice m_eraseSwapChoice; // what is selected - - bool m_allowManualPartitioning; QMutex m_coreMutex; }; -#endif // CHOICEPAGE_H +#endif // CHOICEPAGE_H diff --git a/src/modules/partition/gui/ChoicePage.ui b/src/modules/partition/gui/ChoicePage.ui index 0eca520b3..95b8d145a 100644 --- a/src/modules/partition/gui/ChoicePage.ui +++ b/src/modules/partition/gui/ChoicePage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + ChoicePage diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index a73441bc3..c5b17c69e 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -1,39 +1,31 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot - * Copyright 2018, Andrius Štikonas - * Copyright 2018, Caio Carvalho + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Andrius Štikonas + * SPDX-FileCopyrightText: 2018 Caio Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreatePartitionDialog.h" #include "ui_CreatePartitionDialog.h" #include "core/ColorUtils.h" -#include "core/PartitionInfo.h" -#include "core/PartUtils.h" #include "core/KPMHelpers.h" +#include "core/PartUtils.h" +#include "core/PartitionInfo.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" #include "GlobalStorage.h" #include "JobQueue.h" -#include "partition/PartitionQuery.h" +#include "Settings.h" #include "partition/FileSystem.h" +#include "partition/PartitionQuery.h" #include "utils/Logger.h" #include @@ -53,16 +45,16 @@ using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; -static QSet< FileSystem::Type > s_unmountableFS( -{ - FileSystem::Unformatted, - FileSystem::LinuxSwap, - FileSystem::Extended, - FileSystem::Unknown, - FileSystem::Lvm2_PV -} ); +static QSet< FileSystem::Type > s_unmountableFS( { FileSystem::Unformatted, + FileSystem::LinuxSwap, + FileSystem::Extended, + FileSystem::Unknown, + FileSystem::Lvm2_PV } ); -CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* parentPartition, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) +CreatePartitionDialog::CreatePartitionDialog( Device* device, + PartitionNode* parentPartition, + const QStringList& usedMountPoints, + QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_CreatePartitionDialog ) , m_partitionSizeController( new PartitionSizeController( this ) ) @@ -74,33 +66,35 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par m_ui->encryptWidget->setText( tr( "En&crypt" ) ); m_ui->encryptWidget->hide(); - if (m_device->type() != Device::Type::LVM_Device) { + if ( m_device->type() != Device::Type::LVM_Device ) + { m_ui->lvNameLabel->hide(); m_ui->lvNameLineEdit->hide(); } - if (m_device->type() == Device::Type::LVM_Device) { + if ( m_device->type() == Device::Type::LVM_Device ) + { /* LVM logical volume name can consist of: letters numbers _ . - + * It cannot start with underscore _ and must not be equal to . or .. or any entry in /dev/ * QLineEdit accepts QValidator::Intermediate, so we just disable . at the beginning */ - QRegularExpression re(QStringLiteral(R"(^(?!_|\.)[\w\-.+]+)")); - QRegularExpressionValidator *validator = new QRegularExpressionValidator(re, this); - m_ui->lvNameLineEdit->setValidator(validator); + QRegularExpression re( QStringLiteral( R"(^(?!_|\.)[\w\-.+]+)" ) ); + QRegularExpressionValidator* validator = new QRegularExpressionValidator( re, this ); + m_ui->lvNameLineEdit->setValidator( validator ); } - standardMountPoints( *(m_ui->mountPointComboBox), partition ? PartitionInfo::mountPoint( partition ) : QString() ); - - if ( device->partitionTable()->type() == PartitionTable::msdos || - device->partitionTable()->type() == PartitionTable::msdos_sectorbased ) + if ( device->partitionTable()->type() == PartitionTable::msdos + || device->partitionTable()->type() == PartitionTable::msdos_sectorbased ) + { initMbrPartitionTypeUi(); + } else + { initGptPartitionTypeUi(); + } // File system; the config value is translated (best-effort) to a type FileSystem::Type defaultFSType; - QString untranslatedFSName = PartUtils::findFS( - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "defaultFileSystemType" ).toString(), &defaultFSType ); + QString untranslatedFSName = PartUtils::canonicalFilesystemName( + Calamares::JobQueue::instance()->globalStorage()->value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; @@ -111,12 +105,15 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { - if ( fs->supportCreate() != FileSystem::cmdSupportNone && - fs->type() != FileSystem::Extended ) + // We need to ensure zfs is added to the list if the zfs module is enabled + if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) ) + || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) ) { fsNames << userVisibleFS( fs ); // This is put into the combobox if ( fs->type() == defaultFSType ) + { defaultFsIndex = fsCounter; + } fsCounter++; } } @@ -126,26 +123,64 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* par connect( m_ui->fsComboBox, SIGNAL( activated( int ) ), SLOT( updateMountPointUi() ) ); connect( m_ui->extendedRadioButton, SIGNAL( toggled( bool ) ), SLOT( updateMountPointUi() ) ); - connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &CreatePartitionDialog::checkMountPointSelection ); + connect( m_ui->mountPointComboBox, + &QComboBox::currentTextChanged, + this, + &CreatePartitionDialog::checkMountPointSelection ); // Select a default m_ui->fsComboBox->setCurrentIndex( defaultFsIndex ); updateMountPointUi(); - - setFlagList( *(m_ui->m_listFlags), static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int(0) ), partition ? PartitionInfo::flags( partition ) : PartitionTable::Flags() ); - - // Checks the initial selection. checkMountPointSelection(); } -CreatePartitionDialog::~CreatePartitionDialog() -{} +CreatePartitionDialog::CreatePartitionDialog( Device* device, + const FreeSpace& freeSpacePartition, + const QStringList& usedMountPoints, + QWidget* parentWidget ) + : CreatePartitionDialog( device, freeSpacePartition.p->parent(), usedMountPoints, parentWidget ) +{ + standardMountPoints( *( m_ui->mountPointComboBox ), QString() ); + setFlagList( *( m_ui->m_listFlags ), + static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int( 0 ) ), + PartitionTable::Flags() ); + initPartResizerWidget( freeSpacePartition.p ); +} + +CreatePartitionDialog::CreatePartitionDialog( Device* device, + const FreshPartition& existingNewPartition, + const QStringList& usedMountPoints, + QWidget* parentWidget ) + : CreatePartitionDialog( device, existingNewPartition.p->parent(), usedMountPoints, parentWidget ) +{ + standardMountPoints( *( m_ui->mountPointComboBox ), PartitionInfo::mountPoint( existingNewPartition.p ) ); + setFlagList( *( m_ui->m_listFlags ), + static_cast< PartitionTable::Flags >( ~PartitionTable::Flags::Int( 0 ) ), + PartitionInfo::flags( existingNewPartition.p ) ); + + const bool isExtended = existingNewPartition.p->roles().has( PartitionRole::Extended ); + if ( isExtended ) + { + cDebug() << "Editing extended partitions is not supported."; + return; + } + + initPartResizerWidget( existingNewPartition.p ); + + FileSystem::Type fsType = existingNewPartition.p->fileSystem().type(); + m_ui->fsComboBox->setCurrentText( FileSystem::nameForType( fsType ) ); + + setSelectedMountPoint( m_ui->mountPointComboBox, PartitionInfo::mountPoint( existingNewPartition.p ) ); + updateMountPointUi(); +} + +CreatePartitionDialog::~CreatePartitionDialog() {} PartitionTable::Flags CreatePartitionDialog::newFlags() const { - return flagsFromList( *(m_ui->m_listFlags) ); + return flagsFromList( *( m_ui->m_listFlags ) ); } void @@ -165,7 +200,9 @@ CreatePartitionDialog::initMbrPartitionTypeUi() } if ( fixedPartitionString.isEmpty() ) + { m_ui->fixedPartitionLabel->hide(); + } else { m_ui->fixedPartitionLabel->setText( fixedPartitionString ); @@ -184,48 +221,69 @@ CreatePartitionDialog::initGptPartitionTypeUi() } Partition* -CreatePartitionDialog::createPartition() +CreatePartitionDialog::getNewlyCreatedPartition() { if ( m_role.roles() == PartitionRole::None ) { - m_role = PartitionRole( - m_ui->extendedRadioButton->isChecked() - ? PartitionRole::Extended - : PartitionRole::Primary - ); + m_role = PartitionRole( m_ui->extendedRadioButton->isChecked() ? PartitionRole::Extended + : PartitionRole::Primary ); } qint64 first = m_partitionSizeController->firstSector(); qint64 last = m_partitionSizeController->lastSector(); FileSystem::Type fsType = m_role.has( PartitionRole::Extended ) - ? FileSystem::Extended - : FileSystem::typeForName( m_ui->fsComboBox->currentText() ); + ? FileSystem::Extended + : FileSystem::typeForName( m_ui->fsComboBox->currentText() ); + const QString fsLabel = m_ui->filesystemLabelEdit->text(); + // The newly-created partitions have no flags set (no **active** flags), + // because they're new. The desired flags can be retrieved from + // newFlags() and the consumer (see PartitionPage::onCreateClicked) + // does so, to set up the partition for create-and-then-set-flags. Partition* partition = nullptr; QString luksPassphrase = m_ui->encryptWidget->passphrase(); - if ( m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && - !luksPassphrase.isEmpty() ) + if ( m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && !luksPassphrase.isEmpty() + && fsType != FileSystem::Zfs ) { partition = KPMHelpers::createNewEncryptedPartition( - m_parent, - *m_device, - m_role, - fsType, first, last, luksPassphrase, newFlags() - ); + m_parent, *m_device, m_role, fsType, fsLabel, first, last, luksPassphrase, PartitionTable::Flags() ); } else { partition = KPMHelpers::createNewPartition( - m_parent, - *m_device, - m_role, - fsType, first, last, newFlags() - ); + m_parent, *m_device, m_role, fsType, fsLabel, first, last, PartitionTable::Flags() ); } - if (m_device->type() == Device::Type::LVM_Device) { - partition->setPartitionPath(m_device->deviceNode() + QStringLiteral("/") + m_ui->lvNameLineEdit->text().trimmed()); + // For zfs, we let the zfs module handle the encryption but we need to make the passphrase available to later modules + if ( fsType == FileSystem::Zfs ) + { + Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); + QList< QVariant > zfsInfoList; + QVariantMap zfsInfo; + + // If this is not the first encrypted zfs partition, get the old list first + if ( storage->contains( "zfsInfo" ) ) + { + zfsInfoList = storage->value( "zfsInfo" ).toList(); + storage->remove( "zfsInfo" ); + } + + // Save the information subsequent modules will need + zfsInfo[ "encrypted" ] + = m_ui->encryptWidget->state() == EncryptWidget::Encryption::Confirmed && !luksPassphrase.isEmpty(); + zfsInfo[ "passphrase" ] = luksPassphrase; + zfsInfo[ "mountpoint" ] = selectedMountPoint( m_ui->mountPointComboBox ); + + // Add it to the list and insert it into global storage + zfsInfoList.append( zfsInfo ); + storage->insert( "zfsInfo", zfsInfoList ); + } + + if ( m_device->type() == Device::Type::LVM_Device ) + { + partition->setPartitionPath( m_device->deviceNode() + QStringLiteral( "/" ) + + m_ui->lvNameLineEdit->text().trimmed() ); } PartitionInfo::setMountPoint( partition, selectedMountPoint( m_ui->mountPointComboBox ) ); @@ -244,9 +302,8 @@ CreatePartitionDialog::updateMountPointUi() FileSystem::Type type = FileSystem::typeForName( m_ui->fsComboBox->currentText() ); enabled = !s_unmountableFS.contains( type ); - if ( FileSystemFactory::map()[FileSystem::Type::Luks]->supportCreate() && - FS::luks::canEncryptType( type ) && - !m_role.has( PartitionRole::Extended ) ) + if ( FileSystemFactory::map()[ FileSystem::Type::Luks ]->supportCreate() && FS::luks::canEncryptType( type ) + && !m_role.has( PartitionRole::Extended ) ) { m_ui->encryptWidget->show(); m_ui->encryptWidget->reset(); @@ -260,62 +317,27 @@ CreatePartitionDialog::updateMountPointUi() m_ui->mountPointLabel->setEnabled( enabled ); m_ui->mountPointComboBox->setEnabled( enabled ); if ( !enabled ) + { m_ui->mountPointComboBox->setCurrentText( QString() ); + } } void CreatePartitionDialog::checkMountPointSelection() { - if ( m_usedMountPoints.contains( selectedMountPoint( m_ui->mountPointComboBox ) ) ) - { - m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); - } - else - { - m_ui->labelMountPoint->setText( QString() ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); - } + validateMountPoint( selectedMountPoint( m_ui->mountPointComboBox ), + m_usedMountPoints, + m_ui->mountPointExplanation, + m_ui->buttonBox->button( QDialogButtonBox::Ok ) ); } void CreatePartitionDialog::initPartResizerWidget( Partition* partition ) { QColor color = CalamaresUtils::Partition::isPartitionFreeSpace( partition ) - ? ColorUtils::colorForPartitionInFreeSpace( partition ) - : ColorUtils::colorForPartition( partition ); + ? ColorUtils::colorForPartitionInFreeSpace( partition ) + : ColorUtils::colorForPartition( partition ); m_partitionSizeController->init( m_device, partition, color ); m_partitionSizeController->setPartResizerWidget( m_ui->partResizerWidget ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); } - -void -CreatePartitionDialog::initFromFreeSpace( Partition* freeSpacePartition ) -{ - initPartResizerWidget( freeSpacePartition ); -} - -void -CreatePartitionDialog::initFromPartitionToCreate( Partition* partition ) -{ - Q_ASSERT( partition ); - - bool isExtended = partition->roles().has( PartitionRole::Extended ); - Q_ASSERT( !isExtended ); - if ( isExtended ) - { - cDebug() << "Editing extended partitions is not supported for now"; - return; - } - - initPartResizerWidget( partition ); - - // File System - FileSystem::Type fsType = partition->fileSystem().type(); - m_ui->fsComboBox->setCurrentText( FileSystem::nameForType( fsType ) ); - - // Mount point - setSelectedMountPoint( m_ui->mountPointComboBox, PartitionInfo::mountPoint( partition ) ); - - updateMountPointUi(); -} diff --git a/src/modules/partition/gui/CreatePartitionDialog.h b/src/modules/partition/gui/CreatePartitionDialog.h index 2f3cc14a5..38c65aaf6 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.h +++ b/src/modules/partition/gui/CreatePartitionDialog.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEPARTITIONDIALOG_H @@ -42,27 +33,48 @@ class Ui_CreatePartitionDialog; class CreatePartitionDialog : public QDialog { Q_OBJECT -public: - /** - * @brief Dialog for editing a new partition. + +private: + /** @brief Delegated constructor * - * For the (unlikely) case that a newly created partition is being re-edited, - * pass a pointer to that @p partition, otherwise pass nullptr. + * This does all the shared UI setup. */ - CreatePartitionDialog( Device* device, PartitionNode* parentPartition, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); - ~CreatePartitionDialog(); + CreatePartitionDialog( Device* device, + PartitionNode* parentPartition, + const QStringList& usedMountPoints, + QWidget* parentWidget ); - /** - * Must be called when user wants to create a partition in - * freeSpacePartition. - */ - void initFromFreeSpace( Partition* freeSpacePartition ); +public: + struct FreeSpace + { + Partition* p; + }; + struct FreshPartition + { + Partition* p; + }; - /** - * Must be called when user wants to edit a to-be-created partition. + /** @brief Dialog for editing a new partition based on free space. + * + * Creating from free space makes a wholly new partition with + * no flags set at all. */ - void initFromPartitionToCreate( Partition* partition ); - Partition* createPartition(); + CreatePartitionDialog( Device* device, + const FreeSpace& freeSpacePartition, + const QStringList& usedMountPoints, + QWidget* parentWidget = nullptr ); + /** @brief Dialog for editing a newly-created partition. + * + * A partition previously newly created (e.g. via this dialog + * and the constructor above) can be re-edited. + */ + CreatePartitionDialog( Device* device, + const FreshPartition& existingNewPartition, + const QStringList& usedMountPoints, + QWidget* parentWidget = nullptr ); + ~CreatePartitionDialog() override; + + Partition* getNewlyCreatedPartition(); PartitionTable::Flags newFlags() const; diff --git a/src/modules/partition/gui/CreatePartitionDialog.ui b/src/modules/partition/gui/CreatePartitionDialog.ui index ac355c880..0ee715fe0 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.ui +++ b/src/modules/partition/gui/CreatePartitionDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + CreatePartitionDialog @@ -64,7 +68,7 @@ - &Primary + Primar&y true @@ -126,10 +130,10 @@ - + - + Qt::Vertical @@ -145,17 +149,17 @@ - + LVM LV name - + - + &Mount Point: @@ -165,8 +169,14 @@ - + + + + 0 + 0 + + true @@ -175,21 +185,14 @@ - - - - - - - - + Flags: - + true @@ -202,7 +205,7 @@ - + Qt::Vertical @@ -215,6 +218,30 @@ + + + + Label for the filesystem + + + 16 + + + + + + + FS Label: + + + + + + + + + + diff --git a/src/modules/partition/gui/CreatePartitionTableDialog.ui b/src/modules/partition/gui/CreatePartitionTableDialog.ui index ca1255e41..4f9fe5917 100644 --- a/src/modules/partition/gui/CreatePartitionTableDialog.ui +++ b/src/modules/partition/gui/CreatePartitionTableDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + CreatePartitionTableDialog diff --git a/src/modules/partition/gui/CreateVolumeGroupDialog.cpp b/src/modules/partition/gui/CreateVolumeGroupDialog.cpp index a255e9902..d0eacb725 100644 --- a/src/modules/partition/gui/CreateVolumeGroupDialog.cpp +++ b/src/modules/partition/gui/CreateVolumeGroupDialog.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreateVolumeGroupDialog.h" diff --git a/src/modules/partition/gui/CreateVolumeGroupDialog.h b/src/modules/partition/gui/CreateVolumeGroupDialog.h index 02ca6410c..4712a9106 100644 --- a/src/modules/partition/gui/CreateVolumeGroupDialog.h +++ b/src/modules/partition/gui/CreateVolumeGroupDialog.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEVOLUMEGROUPDIALOG_H @@ -39,4 +30,4 @@ private: qint64& m_peSize; }; -#endif // CREATEVOLUMEGROUPDIALOG_H +#endif // CREATEVOLUMEGROUPDIALOG_H diff --git a/src/modules/partition/gui/DeviceInfoWidget.cpp b/src/modules/partition/gui/DeviceInfoWidget.cpp index ea318e85c..39d9413e1 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.cpp +++ b/src/modules/partition/gui/DeviceInfoWidget.cpp @@ -1,33 +1,24 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ - #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 "JobQueue.h" -#include "GlobalStorage.h" #include -#include #include +#include DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) : QWidget( parent ) @@ -39,8 +30,8 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); - m_ptLabel->setObjectName("deviceInfoLabel"); - m_ptIcon->setObjectName("deviceInfoIcon"); + m_ptLabel->setObjectName( "deviceInfoLabel" ); + m_ptIcon->setObjectName( "deviceInfoIcon" ); mainLayout->addWidget( m_ptIcon ); mainLayout->addWidget( m_ptLabel ); @@ -49,23 +40,21 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) m_ptIcon->setMargin( 0 ); m_ptIcon->setFixedSize( iconSize ); m_ptIcon->setPixmap( - CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, - CalamaresUtils::Original, - iconSize ) ); + CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionTable, CalamaresUtils::Original, iconSize ) ); QFontMetrics fm = QFontMetrics( QFont() ); m_ptLabel->setMinimumWidth( fm.boundingRect( "Amiga" ).width() + CalamaresUtils::defaultFontHeight() / 2 ); 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 ); m_ptIcon->setPalette( palette ); m_ptLabel->setPalette( palette ); - CALAMARES_RETRANSLATE_SLOT( &DeviceInfoWidget::retranslateUi ) + CALAMARES_RETRANSLATE_SLOT( &DeviceInfoWidget::retranslateUi ); } @@ -79,7 +68,8 @@ DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type ) void DeviceInfoWidget::retranslateUi() { - QString typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper(); + QString typeString; + QString toolTipString; // fix up if the name shouldn't be uppercase: switch ( m_tableType ) @@ -87,38 +77,34 @@ DeviceInfoWidget::retranslateUi() case PartitionTable::msdos: case PartitionTable::msdos_sectorbased: typeString = "MBR"; + toolTipString += tr( "

This partition table type is only advisable on older " + "systems which start from a BIOS boot " + "environment. GPT is recommended in most other cases.

" + "Warning: the MBR partition table " + "is an obsolete MS-DOS era standard.
" + "Only 4 primary partitions may be created, and of " + "those 4, one can be an extended partition, which " + "may in turn contain many logical partitions." ); + break; + case PartitionTable::gpt: + // TypeString is ok + toolTipString += tr( "

This is the recommended partition table type for modern " + "systems which start from an EFI boot " + "environment." ); break; case PartitionTable::loop: typeString = "loop"; - break; - case PartitionTable::mac: - typeString = "Mac"; - break; - case PartitionTable::amiga: - typeString = "Amiga"; - break; - case PartitionTable::sun: - typeString = "Sun"; - break; - case PartitionTable::unknownTableType: - typeString = " ? "; - } - - - QString toolTipString = tr( "This device has a %1 partition " - "table." ) - .arg( typeString ); - - switch ( m_tableType ) - { - case PartitionTable::loop: toolTipString = tr( "This is a loop " "device.

" "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." ); break; +#if defined( WITH_KPMCORE42API ) + case PartitionTable::none: +#endif case PartitionTable::unknownTableType: + typeString = " ? "; toolTipString = tr( "This installer cannot detect a partition table on the " "selected storage device.

" "The device either has no partition " @@ -128,32 +114,46 @@ DeviceInfoWidget::retranslateUi() "either automatically, or through the manual partitioning " "page." ); break; - case PartitionTable::gpt: - toolTipString += tr( "

This is the recommended partition table type for modern " - "systems which start from an EFI boot " - "environment." ); + // The next ones need to have the name adjusted, but the default tooltip is OK + case PartitionTable::mac: + typeString = "Mac"; break; - case PartitionTable::msdos: - case PartitionTable::msdos_sectorbased: - toolTipString += tr( "

This partition table type is only advisable on older " - "systems which start from a BIOS boot " - "environment. GPT is recommended in most other cases.

" - "Warning: the MBR partition table " - "is an obsolete MS-DOS era standard.
" - "Only 4 primary partitions may be created, and of " - "those 4, one can be an extended partition, which " - "may in turn contain many logical partitions." ); + case PartitionTable::amiga: + typeString = "Amiga"; + break; + case PartitionTable::sun: + typeString = "Sun"; + break; + // Peculiar tables, do nothing and use default type and tooltip strings + case PartitionTable::aix: + case PartitionTable::bsd: + case PartitionTable::dasd: + case PartitionTable::dvh: + case PartitionTable::pc98: + case PartitionTable::vmd: + break; + } + + if ( typeString.isEmpty() ) + { + typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper(); + } + if ( toolTipString.isEmpty() ) + { + toolTipString = tr( "This device has a %1 partition " + "table." ) + .arg( typeString ); } m_ptLabel->setText( typeString ); m_ptLabel->setToolTip( toolTipString ); m_ptIcon->setToolTip( tr( "The type of partition table on the " - "selected storage device.

" - "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.
" - "This installer will keep the current partition table " - "unless you explicitly choose otherwise.
" - "If unsure, on modern systems GPT is preferred." ) ); + "selected storage device.

" + "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.
" + "This installer will keep the current partition table " + "unless you explicitly choose otherwise.
" + "If unsure, on modern systems GPT is preferred." ) ); } diff --git a/src/modules/partition/gui/DeviceInfoWidget.h b/src/modules/partition/gui/DeviceInfoWidget.h index b1769c19d..a69251be1 100644 --- a/src/modules/partition/gui/DeviceInfoWidget.h +++ b/src/modules/partition/gui/DeviceInfoWidget.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ @@ -43,4 +34,4 @@ private: PartitionTable::TableType m_tableType; }; -#endif // DEVICEINFOWIDGET_H +#endif // DEVICEINFOWIDGET_H diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 37868c7ff..eeb548ba1 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -1,54 +1,54 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2008-2009 Volker Lanz + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Andrius Štikonas + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Flags handling originally from KDE Partition Manager, - * Copyright 2008-2009, Volker Lanz - * Copyright 2016, Andrius Štikonas + * Flags handling originally from KDE Partition Manager. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "EditExistingPartitionDialog.h" #include "ui_EditExistingPartitionDialog.h" #include "core/ColorUtils.h" +#include "core/KPMHelpers.h" +#include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" -#include "core/PartUtils.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" #include "GlobalStorage.h" #include "JobQueue.h" +#include "Settings.h" #include "partition/FileSystem.h" #include "utils/Logger.h" +#include "widgets/TranslationFix.h" #include #include #include +#include #include #include +#include +#include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; -EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) +EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, + Partition* partition, + const QStringList& usedMountPoints, + QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_EditExistingPartitionDialog ) , m_device( device ) @@ -57,51 +57,60 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); - standardMountPoints( *(m_ui->mountPointComboBox), PartitionInfo::mountPoint( partition ) ); + m_ui->encryptWidget->hide(); + standardMountPoints( *( m_ui->mountPointComboBox ), PartitionInfo::mountPoint( partition ) ); QColor color = ColorUtils::colorForPartition( m_partition ); m_partitionSizeController->init( m_device, m_partition, color ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); - connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, - this, &EditExistingPartitionDialog::checkMountPointSelection ); + connect( m_ui->mountPointComboBox, + &QComboBox::currentTextChanged, + this, + &EditExistingPartitionDialog::checkMountPointSelection ); + + // The filesystem label dialog is always enabled, because we may want to change + // the label on the current filesystem without formatting. + m_ui->fileSystemLabelEdit->setText( m_partition->fileSystem().label() ); replacePartResizerWidget(); - connect( m_ui->formatRadioButton, &QAbstractButton::toggled, + connect( m_ui->formatRadioButton, + &QAbstractButton::toggled, [ this ]( bool doFormat ) - { - replacePartResizerWidget(); + { + replacePartResizerWidget(); - m_ui->fileSystemLabel->setEnabled( doFormat ); - m_ui->fileSystemComboBox->setEnabled( doFormat ); + m_ui->fileSystemLabel->setEnabled( doFormat ); + m_ui->fileSystemComboBox->setEnabled( doFormat ); - if ( !doFormat ) - m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); + if ( !doFormat ) + { + m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); + } - updateMountPointPicker(); - } ); + updateMountPointPicker(); + } ); - connect( m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, - [ this ]( QString ) - { - updateMountPointPicker(); - } ); + connect( + m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, [ this ]( QString ) { updateMountPointPicker(); } ); // File system QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { - if ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) - fsNames << userVisibleFS( fs ); // For the combo box + // We need to ensure zfs is added to the list if the zfs module is enabled + if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) ) + || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) ) + { + fsNames << userVisibleFS( fs ); // For the combo box + } } m_ui->fileSystemComboBox->addItems( fsNames ); FileSystem::Type defaultFSType; - QString untranslatedFSName = PartUtils::findFS( - Calamares::JobQueue::instance()-> - globalStorage()-> - value( "defaultFileSystemType" ).toString(), &defaultFSType ); + QString untranslatedFSName = PartUtils::canonicalFilesystemName( + Calamares::JobQueue::instance()->globalStorage()->value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; @@ -109,77 +118,85 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit QString thisFSNameForUser = userVisibleFS( m_partition->fileSystem() ); if ( fsNames.contains( thisFSNameForUser ) ) + { m_ui->fileSystemComboBox->setCurrentText( thisFSNameForUser ); + } else + { m_ui->fileSystemComboBox->setCurrentText( FileSystem::nameForType( defaultFSType ) ); + } m_ui->fileSystemLabel->setEnabled( m_ui->formatRadioButton->isChecked() ); m_ui->fileSystemComboBox->setEnabled( m_ui->formatRadioButton->isChecked() ); - setFlagList( *(m_ui->m_listFlags), m_partition->availableFlags(), PartitionInfo::flags( m_partition ) ); + // Force a format if the existing device is a zfs device since reusing a zpool isn't currently supported + m_ui->formatRadioButton->setChecked( m_partition->fileSystem().type() == FileSystem::Type::Zfs ); + m_ui->formatRadioButton->setEnabled( !( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) ); + m_ui->keepRadioButton->setChecked( !( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) ); + m_ui->keepRadioButton->setEnabled( !( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) ); + + setFlagList( *( m_ui->m_listFlags ), m_partition->availableFlags(), PartitionInfo::flags( m_partition ) ); } - -EditExistingPartitionDialog::~EditExistingPartitionDialog() -{} - +EditExistingPartitionDialog::~EditExistingPartitionDialog() {} PartitionTable::Flags EditExistingPartitionDialog::newFlags() const { - return flagsFromList( *(m_ui->m_listFlags) ); + return flagsFromList( *( m_ui->m_listFlags ) ); } void EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) { - PartitionInfo::setMountPoint( m_partition, selectedMountPoint(m_ui->mountPointComboBox) ); + PartitionInfo::setMountPoint( m_partition, selectedMountPoint( m_ui->mountPointComboBox ) ); qint64 newFirstSector = m_partitionSizeController->firstSector(); - qint64 newLastSector = m_partitionSizeController->lastSector(); - bool partResizedMoved = newFirstSector != m_partition->firstSector() || - newLastSector != m_partition->lastSector(); + qint64 newLastSector = m_partitionSizeController->lastSector(); + bool partResizedMoved = newFirstSector != m_partition->firstSector() || newLastSector != m_partition->lastSector(); - cDebug() << "old boundaries:" << m_partition->firstSector() - << m_partition->lastSector() << m_partition->length(); - cDebug() << "new boundaries:" << newFirstSector << newLastSector; - cDebug() << "dirty status:" << m_partitionSizeController->isDirty(); + cDebug() << "old boundaries:" << m_partition->firstSector() << m_partition->lastSector() << m_partition->length(); + cDebug() << Logger::SubEntry << "new boundaries:" << newFirstSector << newLastSector; + cDebug() << Logger::SubEntry << "dirty status:" << m_partitionSizeController->isDirty(); FileSystem::Type fsType = FileSystem::Unknown; if ( m_ui->formatRadioButton->isChecked() ) { fsType = m_partition->roles().has( PartitionRole::Extended ) - ? FileSystem::Extended - : FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); + ? FileSystem::Extended + : FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); } + const QString fsLabel = m_ui->fileSystemLabelEdit->text(); + + const auto resultFlags = newFlags(); + const auto currentFlags = PartitionInfo::flags( m_partition ); if ( partResizedMoved ) { if ( m_ui->formatRadioButton->isChecked() ) { - Partition* newPartition = KPMHelpers::createNewPartition( - m_partition->parent(), - *m_device, - m_partition->roles(), - fsType, - newFirstSector, - newLastSector, - newFlags() ); + Partition* newPartition = KPMHelpers::createNewPartition( m_partition->parent(), + *m_device, + m_partition->roles(), + fsType, + fsLabel, + newFirstSector, + newLastSector, + resultFlags ); PartitionInfo::setMountPoint( newPartition, PartitionInfo::mountPoint( m_partition ) ); PartitionInfo::setFormat( newPartition, true ); core->deletePartition( m_device, m_partition ); core->createPartition( m_device, newPartition ); - core->setPartitionFlags( m_device, newPartition, newFlags() ); + core->setPartitionFlags( m_device, newPartition, resultFlags ); } else { - core->resizePartition( m_device, - m_partition, - newFirstSector, - newLastSector ); - if ( m_partition->activeFlags() != newFlags() ) - core->setPartitionFlags( m_device, m_partition, newFlags() ); + core->resizePartition( m_device, m_partition, newFirstSector, newLastSector ); + if ( currentFlags != resultFlags ) + { + core->setPartitionFlags( m_device, m_partition, resultFlags ); + } } } else @@ -191,32 +208,67 @@ EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) if ( m_partition->fileSystem().type() == fsType ) { core->formatPartition( m_device, m_partition ); - if ( m_partition->activeFlags() != newFlags() ) - core->setPartitionFlags( m_device, m_partition, newFlags() ); + if ( currentFlags != resultFlags ) + { + core->setPartitionFlags( m_device, m_partition, resultFlags ); + } + core->setFilesystemLabel( m_device, m_partition, fsLabel ); } - else // otherwise, we delete and recreate the partition with new fs type + else // otherwise, we delete and recreate the partition with new fs type { - Partition* newPartition = KPMHelpers::createNewPartition( - m_partition->parent(), - *m_device, - m_partition->roles(), - fsType, - m_partition->firstSector(), - m_partition->lastSector(), - newFlags() ); + Partition* newPartition = KPMHelpers::createNewPartition( m_partition->parent(), + *m_device, + m_partition->roles(), + fsType, + fsLabel, + m_partition->firstSector(), + m_partition->lastSector(), + resultFlags ); PartitionInfo::setMountPoint( newPartition, PartitionInfo::mountPoint( m_partition ) ); PartitionInfo::setFormat( newPartition, true ); core->deletePartition( m_device, m_partition ); core->createPartition( m_device, newPartition ); - core->setPartitionFlags( m_device, newPartition, newFlags() ); + core->setPartitionFlags( m_device, newPartition, resultFlags ); } } else { + if ( currentFlags != resultFlags ) + { + core->setPartitionFlags( m_device, m_partition, resultFlags ); + } + // In this case, we are not formatting the partition, but we are setting the + // label on the current filesystem, if any. We only create the job if the + // label actually changed. + if ( m_partition->fileSystem().type() != FileSystem::Type::Unformatted + && fsLabel != m_partition->fileSystem().label() ) + { + core->setFilesystemLabel( m_device, m_partition, fsLabel ); + } + core->refreshPartition( m_device, m_partition ); - if ( m_partition->activeFlags() != newFlags() ) - core->setPartitionFlags( m_device, m_partition, newFlags() ); + } + + // Update the existing luks partition + const QString passphrase = m_ui->encryptWidget->passphrase(); + if ( !passphrase.isEmpty() ) + { + int retCode = KPMHelpers::updateLuksDevice( m_partition, passphrase ); + if ( retCode != 0 ) + { + QString message = tr( "Passphrase for existing partition" ); + QString description = tr( "Partition %1 could not be decrypted " + "with the given passphrase." + "

" + "Edit the partition again and give the correct passphrase" + "or delete and create a new encrypted partition." ) + .arg( m_partition->partitionPath() ); + + QMessageBox mb( QMessageBox::Information, message, description, QMessageBox::Ok, this->parentWidget() ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); + } } } } @@ -240,7 +292,6 @@ EditExistingPartitionDialog::replacePartResizerWidget() m_partitionSizeController->setPartResizerWidget( widget, m_ui->formatRadioButton->isChecked() ); } - void EditExistingPartitionDialog::updateMountPointPicker() { @@ -255,11 +306,8 @@ EditExistingPartitionDialog::updateMountPointPicker() fsType = m_partition->fileSystem().type(); } bool canMount = true; - if ( fsType == FileSystem::Extended || - fsType == FileSystem::LinuxSwap || - fsType == FileSystem::Unformatted || - fsType == FileSystem::Unknown || - fsType == FileSystem::Lvm2_PV ) + if ( fsType == FileSystem::Extended || fsType == FileSystem::LinuxSwap || fsType == FileSystem::Unformatted + || fsType == FileSystem::Unknown || fsType == FileSystem::Lvm2_PV ) { canMount = false; } @@ -267,20 +315,50 @@ EditExistingPartitionDialog::updateMountPointPicker() m_ui->mountPointLabel->setEnabled( canMount ); m_ui->mountPointComboBox->setEnabled( canMount ); if ( !canMount ) + { setSelectedMountPoint( m_ui->mountPointComboBox, QString() ); + } + + toggleEncryptWidget(); } void EditExistingPartitionDialog::checkMountPointSelection() { - if ( m_usedMountPoints.contains( selectedMountPoint( m_ui->mountPointComboBox ) ) ) + if ( validateMountPoint( selectedMountPoint( m_ui->mountPointComboBox ), + m_usedMountPoints, + m_ui->mountPointExplanation, + m_ui->buttonBox->button( QDialogButtonBox::Ok ) ) ) { - m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); - } - else - { - m_ui->labelMountPoint->setText( QString() ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); + toggleEncryptWidget(); + } +} + +void +EditExistingPartitionDialog::toggleEncryptWidget() +{ + // Show/hide encryptWidget: + // check if partition is a previously luks formatted partition + // and not currently formatted + // and its mount point not a standard mount point except when it's /home + QString mp = selectedMountPoint( m_ui->mountPointComboBox ); + if ( !mp.isEmpty() && m_partition->fileSystem().type() == FileSystem::Luks && !m_ui->formatRadioButton->isChecked() + && ( !standardMountPoints().contains( mp ) || mp == "/home" ) ) + { + m_ui->encryptWidget->show(); + m_ui->encryptWidget->reset( false ); + } + // TODO: When formatting a partition user must be able to encrypt that partition + // Probably need to delete this partition and create a new one + // else if ( m_ui->formatRadioButton->isChecked() + // && !mp.isEmpty()) + // { + // m_ui->encryptWidget->show(); + // m_ui->encryptWidget->reset(); + // } + else + { + m_ui->encryptWidget->reset(); + m_ui->encryptWidget->hide(); } } diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h index e98563bc0..5d1e7fd65 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.h +++ b/src/modules/partition/gui/EditExistingPartitionDialog.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef EDITEXISTINGPARTITIONDIALOG_H @@ -41,8 +32,16 @@ class EditExistingPartitionDialog : public QDialog { Q_OBJECT public: - EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); - ~EditExistingPartitionDialog(); + struct FreeSpace + { + Partition* p; + }; + + EditExistingPartitionDialog( Device* device, + Partition* partition, + const QStringList& usedMountPoints, + QWidget* parentWidget = nullptr ); + ~EditExistingPartitionDialog() override; void applyChanges( PartitionCoreModule* module ); @@ -59,6 +58,7 @@ private: PartitionTable::Flags newFlags() const; void replacePartResizerWidget(); void updateMountPointPicker(); + void toggleEncryptWidget(); }; #endif /* EDITEXISTINGPARTITIONDIALOG_H */ diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.ui b/src/modules/partition/gui/EditExistingPartitionDialog.ui index c242e3bbc..ff9cc33c5 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.ui +++ b/src/modules/partition/gui/EditExistingPartitionDialog.ui @@ -1,13 +1,17 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + EditExistingPartitionDialog 0 0 - 450 - 579 + 570 + 689 @@ -47,7 +51,7 @@ - Content: + Con&tent: keepRadioButton @@ -93,7 +97,7 @@ - + &Mount Point: @@ -103,8 +107,14 @@ - + + + + 0 + 0 + + true @@ -143,14 +153,14 @@ - + Flags: - + true @@ -163,13 +173,49 @@ - - + + + + Label for the filesystem + + + 16 + + + + + + + FS Label: + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 13 + + + + @@ -191,6 +237,12 @@
kpmcore/gui/partresizerwidget.h
1 + + EncryptWidget + QWidget +
gui/EncryptWidget.h
+ 1 +
sizeSpinBox diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index 42a073db7..41272bc4b 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ @@ -22,9 +13,27 @@ #include "ui_EncryptWidget.h" +#include "Branding.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" +/** @brief Does this system support whole-disk encryption? + * + * Returns @c true if the system is likely to support encryption + * with sufficient performance to be usable. A machine that can't + * doe hardware-assisted AES is **probably** too slow, so we could + * warn the user that ticking the "encrypt system" box is a bad + * idea. + * + * Since we don't have an oracle that can answer that question, + * just pretend every system can do it. + */ +static inline bool +systemSupportsEncryptionAcceptably() +{ + return true; +} + EncryptWidget::EncryptWidget( QWidget* parent ) : QWidget( parent ) , m_ui( new Ui::EncryptWidget ) @@ -36,6 +45,18 @@ EncryptWidget::EncryptWidget( QWidget* parent ) m_ui->m_passphraseLineEdit->hide(); m_ui->m_confirmLineEdit->hide(); m_ui->m_iconLabel->hide(); + // TODO: this deserves better rendering, an icon or something, but that will + // depend on having a non-bogus implementation of systemSupportsEncryptionAcceptably + if ( systemSupportsEncryptionAcceptably() ) + { + m_ui->m_encryptionUnsupportedLabel->hide(); + } + else + { + // This is really ugly, but the character is unicode "unlocked" + m_ui->m_encryptionUnsupportedLabel->setText( QStringLiteral( "🔓" ) ); + m_ui->m_encryptionUnsupportedLabel->show(); + } connect( m_ui->m_encryptCheckBox, &QCheckBox::stateChanged, this, &EncryptWidget::onCheckBoxStateChanged ); connect( m_ui->m_passphraseLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); @@ -44,19 +65,22 @@ EncryptWidget::EncryptWidget( QWidget* parent ) setFixedHeight( m_ui->m_passphraseLineEdit->height() ); // Avoid jumping up and down updateState(); - CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate ) + CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate ); } void -EncryptWidget::reset() +EncryptWidget::reset( bool checkVisible ) { m_ui->m_passphraseLineEdit->clear(); m_ui->m_confirmLineEdit->clear(); m_ui->m_encryptCheckBox->setChecked( false ); -} + m_ui->m_encryptCheckBox->setVisible( checkVisible ); + m_ui->m_passphraseLineEdit->setVisible( !checkVisible ); + m_ui->m_confirmLineEdit->setVisible( !checkVisible ); +} EncryptWidget::Encryption EncryptWidget::state() const @@ -91,11 +115,41 @@ EncryptWidget::retranslate() } +///@brief Give @p label the @p pixmap from the standard-pixmaps +static void +applyPixmap( QLabel* label, CalamaresUtils::ImageType pixmap ) +{ + label->setFixedWidth( label->height() ); + label->setPixmap( CalamaresUtils::defaultPixmap( pixmap, CalamaresUtils::Original, label->size() ) ); +} + void EncryptWidget::updateState() { + if ( m_ui->m_passphraseLineEdit->isVisible() ) + { + QString p1 = m_ui->m_passphraseLineEdit->text(); + QString p2 = m_ui->m_confirmLineEdit->text(); + + if ( p1.isEmpty() && p2.isEmpty() ) + { + applyPixmap( m_ui->m_iconLabel, CalamaresUtils::StatusWarning ); + m_ui->m_iconLabel->setToolTip( tr( "Please enter the same passphrase in both boxes." ) ); + } + else if ( p1 == p2 ) + { + applyPixmap( m_ui->m_iconLabel, CalamaresUtils::StatusOk ); + m_ui->m_iconLabel->setToolTip( QString() ); + } + else + { + applyPixmap( m_ui->m_iconLabel, CalamaresUtils::StatusError ); + m_ui->m_iconLabel->setToolTip( tr( "Please enter the same passphrase in both boxes." ) ); + } + } + Encryption newState; - if ( m_ui->m_encryptCheckBox->isChecked() ) + if ( m_ui->m_encryptCheckBox->isChecked() || !m_ui->m_encryptCheckBox->isVisible() ) { if ( !m_ui->m_passphraseLineEdit->text().isEmpty() && m_ui->m_passphraseLineEdit->text() == m_ui->m_confirmLineEdit->text() ) @@ -115,18 +169,10 @@ EncryptWidget::updateState() if ( newState != m_state ) { m_state = newState; - emit stateChanged( m_state ); + Q_EMIT stateChanged( m_state ); } } -///@brief Give @p label the @p pixmap from the standard-pixmaps -static void -applyPixmap( QLabel* label, CalamaresUtils::ImageType pixmap ) -{ - label->setFixedWidth( label->height() ); - label->setPixmap( CalamaresUtils::defaultPixmap( pixmap, CalamaresUtils::Original, label->size() ) ); -} - void EncryptWidget::onPassphraseEdited() { @@ -135,24 +181,6 @@ EncryptWidget::onPassphraseEdited() m_ui->m_iconLabel->show(); } - QString p1 = m_ui->m_passphraseLineEdit->text(); - QString p2 = m_ui->m_confirmLineEdit->text(); - - m_ui->m_iconLabel->setToolTip( QString() ); - if ( p1.isEmpty() && p2.isEmpty() ) - { - m_ui->m_iconLabel->clear(); - } - else if ( p1 == p2 ) - { - applyPixmap( m_ui->m_iconLabel, CalamaresUtils::Yes ); - } - else - { - applyPixmap( m_ui->m_iconLabel, CalamaresUtils::No ); - m_ui->m_iconLabel->setToolTip( tr( "Please enter the same passphrase in both boxes." ) ); - } - updateState(); } diff --git a/src/modules/partition/gui/EncryptWidget.h b/src/modules/partition/gui/EncryptWidget.h index 79beb1fa7..704365817 100644 --- a/src/modules/partition/gui/EncryptWidget.h +++ b/src/modules/partition/gui/EncryptWidget.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ @@ -25,7 +16,7 @@ namespace Ui { - class EncryptWidget; +class EncryptWidget; } class EncryptWidget : public QWidget @@ -42,7 +33,7 @@ public: explicit EncryptWidget( QWidget* parent = nullptr ); - void reset(); + void reset( bool checkVisible = true ); Encryption state() const; void setText( const QString& text ); diff --git a/src/modules/partition/gui/EncryptWidget.ui b/src/modules/partition/gui/EncryptWidget.ui index 65af6999e..a629163d3 100644 --- a/src/modules/partition/gui/EncryptWidget.ui +++ b/src/modules/partition/gui/EncryptWidget.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2016 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + EncryptWidget @@ -33,6 +37,19 @@
+ + + + Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer. + + + 🔓 + + + Qt::AlignCenter + + + @@ -53,6 +70,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp index cd480aa55..8eeafcbf4 100644 --- a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp +++ b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp @@ -1,31 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ListPhysicalVolumeWidgetItem.h" -#include +#include "core/SizeUtils.h" ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ) - : QListWidgetItem(QString("%1 | %2").arg( partition->deviceNode(), Capacity::formatByteSize( partition->capacity() ))) - , m_partition(partition) + : QListWidgetItem( QString( "%1 | %2" ).arg( partition->deviceNode(), formatByteSize( partition->capacity() ) ) ) + , m_partition( partition ) { setToolTip( partition->deviceNode() ); - setSizeHint( QSize(0, 32) ); + setSizeHint( QSize( 0, 32 ) ); setCheckState( checked ? Qt::Checked : Qt::Unchecked ); } @@ -34,3 +25,5 @@ ListPhysicalVolumeWidgetItem::partition() const { return m_partition; } + +ListPhysicalVolumeWidgetItem::~ListPhysicalVolumeWidgetItem() {} diff --git a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h index 44ba8c3bf..5d7fdcb76 100644 --- a/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h +++ b/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef LISTPHYSICALVOLUMEWIDGETITEM_H @@ -27,6 +18,7 @@ class ListPhysicalVolumeWidgetItem : public QListWidgetItem { public: ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ); + ~ListPhysicalVolumeWidgetItem() override; const Partition* partition() const; @@ -34,4 +26,4 @@ private: const Partition* m_partition; }; -#endif // LISTPHYSICALVOLUMEWIDGETITEM_H +#endif // LISTPHYSICALVOLUMEWIDGETITEM_H diff --git a/src/modules/partition/gui/PartitionBarsView.cpp b/src/modules/partition/gui/PartitionBarsView.cpp index b7c21473c..305184b13 100644 --- a/src/modules/partition/gui/PartitionBarsView.cpp +++ b/src/modules/partition/gui/PartitionBarsView.cpp @@ -1,25 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "gui/PartitionBarsView.h" -#include "core/PartitionModel.h" #include "core/ColorUtils.h" +#include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" @@ -32,8 +23,9 @@ #include -static const int VIEW_HEIGHT = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts - int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts +static const int VIEW_HEIGHT + = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts + int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts static constexpr int CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); @@ -45,8 +37,8 @@ static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); // and the extended partition box (the "- 2" part). // At worst, on low DPI systems, this will mean in order: // 1px outer rect, 1 px gap, 1px selection rect, 1px gap, 1px extended partition rect. -static const int SELECTION_MARGIN = qMin( ( EXTENDED_PARTITION_MARGIN - 2 ) / 2, - ( EXTENDED_PARTITION_MARGIN - 2 ) - 2 ); +static const int SELECTION_MARGIN + = qMin( ( EXTENDED_PARTITION_MARGIN - 2 ) / 2, ( EXTENDED_PARTITION_MARGIN - 2 ) - 2 ); PartitionBarsView::PartitionBarsView( QWidget* parent ) @@ -55,25 +47,22 @@ PartitionBarsView::PartitionBarsView( QWidget* parent ) , canBeSelected( []( const QModelIndex& ) { return true; } ) , m_hoveredIndex( QModelIndex() ) { - this->setObjectName("partitionBarView"); + this->setObjectName( "partitionBarView" ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); // Debug - connect( this, &PartitionBarsView::clicked, - this, [=]( const QModelIndex& index ) - { - cDebug() << "Clicked row" << index.row(); - } ); + connect( this, + &PartitionBarsView::clicked, + this, + [ = ]( const QModelIndex& index ) { cDebug() << "Clicked row" << index.row(); } ); setMouseTracking( true ); } -PartitionBarsView::~PartitionBarsView() -{ -} +PartitionBarsView::~PartitionBarsView() {} void @@ -117,12 +106,9 @@ PartitionBarsView::paintEvent( QPaintEvent* event ) void PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, int width, const QModelIndex& index ) { - QColor color = index.isValid() ? - index.data( Qt::DecorationRole ).value< QColor >() : - ColorUtils::unknownDisklabelColor(); - bool isFreeSpace = index.isValid() ? - index.data( PartitionModel::IsFreeSpaceRole ).toBool() : - true; + QColor color + = index.isValid() ? index.data( Qt::DecorationRole ).value< QColor >() : ColorUtils::unknownDisklabelColor(); + bool isFreeSpace = index.isValid() ? index.data( PartitionModel::IsFreeSpaceRole ).toBool() : true; QRect rect = rect_; const int y = rect.y(); @@ -134,14 +120,17 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in rect.adjust( 0, 0, -1, -1 ); - if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection - m_hoveredIndex.isValid() && - index == m_hoveredIndex ) + if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection + m_hoveredIndex.isValid() && index == m_hoveredIndex ) { if ( canBeSelected( index ) ) + { painter->setBrush( color.lighter( 115 ) ); + } else + { painter->setBrush( color ); + } } else { @@ -156,7 +145,9 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in // Draw shade if ( !isFreeSpace ) + { rect.adjust( 2, 2, -2, -2 ); + } QLinearGradient gradient( 0, 0, 0, height / 2 ); @@ -169,11 +160,8 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in painter->setBrush( gradient ); painter->drawRoundedRect( rect, radius, radius ); - if ( selectionMode() != QAbstractItemView::NoSelection && - index.isValid() && - selectionModel() && - !selectionModel()->selectedIndexes().isEmpty() && - selectionModel()->selectedIndexes().first() == index ) + if ( selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() + && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index ) { painter->setPen( QPen( borderColor, 1 ) ); QColor highlightColor = QPalette().highlight().color(); @@ -183,22 +171,21 @@ PartitionBarsView::drawSection( QPainter* painter, const QRect& rect_, int x, in QRect selectionRect = rect; selectionRect.setX( x + 1 ); - selectionRect.setWidth( width - 3 ); //account for the previous rect.adjust + selectionRect.setWidth( width - 3 ); //account for the previous rect.adjust - if ( rect.x() > selectionRect.x() ) //hack for first item + if ( rect.x() > selectionRect.x() ) //hack for first item + { selectionRect.adjust( rect.x() - selectionRect.x(), 0, 0, 0 ); + } - if ( rect.right() < selectionRect.right() ) //hack for last item - selectionRect.adjust( 0, 0, - ( selectionRect.right() - rect.right() ), 0 ); + if ( rect.right() < selectionRect.right() ) //hack for last item + { + selectionRect.adjust( 0, 0, -( selectionRect.right() - rect.right() ), 0 ); + } - selectionRect.adjust( SELECTION_MARGIN, - SELECTION_MARGIN, - -SELECTION_MARGIN, - -SELECTION_MARGIN ); + selectionRect.adjust( SELECTION_MARGIN, SELECTION_MARGIN, -SELECTION_MARGIN, -SELECTION_MARGIN ); - painter->drawRoundedRect( selectionRect, - radius - 1, - radius - 1 ); + painter->drawRoundedRect( selectionRect, radius - 1, radius - 1 ); } painter->translate( -0.5, -0.5 ); @@ -210,7 +197,9 @@ PartitionBarsView::drawPartitions( QPainter* painter, const QRect& rect, const Q { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return; + } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); @@ -222,29 +211,29 @@ PartitionBarsView::drawPartitions( QPainter* painter, const QRect& rect, const Q const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } drawSection( painter, rect, x, width, item.index ); - if ( m_nestedPartitionsMode == DrawNestedPartitions && - modl->hasChildren( item.index ) ) + if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - width - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + width - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); drawPartitions( painter, subRect, item.index ); } x += width; } - if ( !items.count() && - !modl->device()->partitionTable() ) // No disklabel or unknown + if ( !items.count() && !modl->device()->partitionTable() ) // No disklabel or unknown { int width = rect.right() - rect.x() + 1; drawSection( painter, rect, rect.x(), width, QModelIndex() ); @@ -260,13 +249,13 @@ PartitionBarsView::indexAt( const QPoint& point ) const QModelIndex -PartitionBarsView::indexAt( const QPoint &point, - const QRect &rect, - const QModelIndex& parent ) const +PartitionBarsView::indexAt( const QPoint& point, const QRect& rect, const QModelIndex& parent ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QModelIndex(); + } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); @@ -278,23 +267,24 @@ PartitionBarsView::indexAt( const QPoint &point, const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } QRect thisItemRect( x, rect.y(), width, rect.height() ); if ( thisItemRect.contains( point ) ) { - if ( m_nestedPartitionsMode == DrawNestedPartitions && - modl->hasChildren( item.index ) ) + if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - width - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + width - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); if ( subRect.contains( point ) ) { @@ -302,7 +292,7 @@ PartitionBarsView::indexAt( const QPoint &point, } return item.index; } - else // contains but no children, we win + else // contains but no children, we win { return item.index; } @@ -322,13 +312,13 @@ PartitionBarsView::visualRect( const QModelIndex& index ) const QRect -PartitionBarsView::visualRect( const QModelIndex& index, - const QRect& rect, - const QModelIndex& parent ) const +PartitionBarsView::visualRect( const QModelIndex& index, const QRect& rect, const QModelIndex& parent ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QRect(); + } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); @@ -340,29 +330,34 @@ PartitionBarsView::visualRect( const QModelIndex& index, const auto& item = items[ row ]; int width; if ( row < items.count() - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } QRect thisItemRect( x, rect.y(), width, rect.height() ); if ( item.index == index ) - return thisItemRect; - - if ( m_nestedPartitionsMode == DrawNestedPartitions && - modl->hasChildren( item.index ) && - index.parent() == item.index ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - width - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + return thisItemRect; + } + + if ( m_nestedPartitionsMode == DrawNestedPartitions && modl->hasChildren( item.index ) + && index.parent() == item.index ) + { + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + width - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); QRect candidateVisualRect = visualRect( index, subRect, item.index ); if ( !candidateVisualRect.isNull() ) + { return candidateVisualRect; + } } x += width; @@ -405,16 +400,12 @@ void PartitionBarsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); - connect( selectionModel, &QItemSelectionModel::selectionChanged, - this, [=] - { - viewport()->repaint(); - } ); + connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [ = ] { viewport()->repaint(); } ); } void -PartitionBarsView::setSelectionFilter( std::function< bool ( const QModelIndex& ) > canBeSelected ) +PartitionBarsView::setSelectionFilter( std::function< bool( const QModelIndex& ) > canBeSelected ) { this->canBeSelected = canBeSelected; } @@ -456,7 +447,9 @@ PartitionBarsView::setSelection( const QRect& rect, QItemSelectionModel::Selecti QModelIndex eventIndex = indexAt( QPoint( x2, y2 ) ); if ( canBeSelected( eventIndex ) ) + { selectionModel()->select( eventIndex, flags ); + } viewport()->repaint(); } @@ -480,9 +473,13 @@ PartitionBarsView::mouseMoveEvent( QMouseEvent* event ) if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !canBeSelected( m_hoveredIndex ) ) + { QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); + } else + { QGuiApplication::restoreOverrideCursor(); + } viewport()->repaint(); } @@ -506,16 +503,20 @@ PartitionBarsView::mousePressEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); if ( canBeSelected( candidateIndex ) ) + { QAbstractItemView::mousePressEvent( event ); + } else + { event->accept(); + } } void PartitionBarsView::updateGeometries() { - updateGeometry(); //get a new rect() for redrawing all the labels + updateGeometry(); //get a new rect() for redrawing all the labels } @@ -529,11 +530,9 @@ PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const for ( int row = 0; row < count; ++row ) { QModelIndex index = model()->index( row, 0, parent ); - if ( m_nestedPartitionsMode == NoNestedPartitions && - model()->hasChildren( index ) ) + if ( m_nestedPartitionsMode == NoNestedPartitions && model()->hasChildren( index ) ) { - QPair< QVector< PartitionBarsView::Item >, qreal > childVect = - computeItemsVector( index ); + QPair< QVector< PartitionBarsView::Item >, qreal > childVect = computeItemsVector( index ); items += childVect.first; total += childVect.second; } @@ -552,8 +551,9 @@ PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const qreal adjustedTotal = total; for ( int row = 0; row < count; ++row ) { - if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, - { // force its width to 1%. + if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, + { + // force its width to 1%. adjustedTotal -= items[ row ].size; items[ row ].size = 0.01 * total; adjustedTotal += items[ row ].size; @@ -562,4 +562,3 @@ PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const return qMakePair( items, adjustedTotal ); } - diff --git a/src/modules/partition/gui/PartitionBarsView.h b/src/modules/partition/gui/PartitionBarsView.h index 0d5051b41..39c3bafe1 100644 --- a/src/modules/partition/gui/PartitionBarsView.h +++ b/src/modules/partition/gui/PartitionBarsView.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONPREVIEW_H #define PARTITIONPREVIEW_H @@ -43,7 +34,7 @@ public: }; explicit PartitionBarsView( QWidget* parent = nullptr ); - virtual ~PartitionBarsView() override; + ~PartitionBarsView() override; void setNestedPartitionsMode( NestedPartitionsMode mode ); diff --git a/src/modules/partition/gui/PartitionDialogHelpers.cpp b/src/modules/partition/gui/PartitionDialogHelpers.cpp index 112d12cea..1ba110338 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.cpp +++ b/src/modules/partition/gui/PartitionDialogHelpers.cpp @@ -1,86 +1,113 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionDialogHelpers.h" #include "core/PartUtils.h" +#include "gui/CreatePartitionDialog.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include +#include +#include #include +#include QStringList standardMountPoints() { - QStringList mountPoints{ "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" }; + QStringList mountPoints { "/", "/boot", "/home", "/opt", "/srv", "/usr", "/var" }; if ( PartUtils::isEfiSystem() ) + { mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); + } mountPoints.removeDuplicates(); mountPoints.sort(); return mountPoints; } void -standardMountPoints(QComboBox& combo) +standardMountPoints( QComboBox& combo ) { combo.clear(); - combo.addItem( QObject::tr( "(no mount point)" ) ); + combo.lineEdit()->setPlaceholderText( QObject::tr( "(no mount point)" ) ); combo.addItems( standardMountPoints() ); } void -standardMountPoints(QComboBox& combo, const QString& selected) +standardMountPoints( QComboBox& combo, const QString& selected ) { standardMountPoints( combo ); setSelectedMountPoint( combo, selected ); } QString -selectedMountPoint(QComboBox& combo) +selectedMountPoint( QComboBox& combo ) { - if ( combo.currentIndex() == 0 ) - return QString(); return combo.currentText(); } void -setSelectedMountPoint(QComboBox& combo, const QString& selected) +setSelectedMountPoint( QComboBox& combo, const QString& selected ) { if ( selected.isEmpty() ) - combo.setCurrentIndex( 0 ); // (no mount point) + { + combo.setCurrentIndex( -1 ); // (no mount point) + } else { for ( int i = 0; i < combo.count(); ++i ) + { if ( selected == combo.itemText( i ) ) { combo.setCurrentIndex( i ); return; } + } combo.addItem( selected ); - combo.setCurrentIndex( combo.count() - 1); + combo.setCurrentIndex( combo.count() - 1 ); } } +bool +validateMountPoint( const QString& mountPoint, const QStringList& inUse, QLabel* label, QPushButton* button ) +{ + QString msg; + bool ok = true; + + if ( inUse.contains( mountPoint ) ) + { + msg = CreatePartitionDialog::tr( "Mountpoint already in use. Please select another one." ); + ok = false; + } + else if ( !mountPoint.isEmpty() && !mountPoint.startsWith( '/' ) ) + { + msg = CreatePartitionDialog::tr( "Mountpoint must start with a /." ); + ok = false; + } + + if ( label ) + { + label->setText( msg ); + } + if ( button ) + { + button->setEnabled( ok ); + } + return ok; +} + PartitionTable::Flags flagsFromList( const QListWidget& list ) @@ -88,9 +115,12 @@ flagsFromList( const QListWidget& list ) PartitionTable::Flags flags; for ( int i = 0; i < list.count(); i++ ) + { if ( list.item( i )->checkState() == Qt::Checked ) - flags |= static_cast< PartitionTable::Flag >( - list.item( i )->data( Qt::UserRole ).toInt() ); + { + flags |= static_cast< PartitionTable::Flag >( list.item( i )->data( Qt::UserRole ).toInt() ); + } + } return flags; } @@ -108,9 +138,7 @@ setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable: list.addItem( item ); item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled ); item->setData( Qt::UserRole, f ); - item->setCheckState( ( checked & f ) ? - Qt::Checked : - Qt::Unchecked ); + item->setCheckState( ( checked & f ) ? Qt::Checked : Qt::Unchecked ); } f <<= 1; diff --git a/src/modules/partition/gui/PartitionDialogHelpers.h b/src/modules/partition/gui/PartitionDialogHelpers.h index 594142993..eea0998c4 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.h +++ b/src/modules/partition/gui/PartitionDialogHelpers.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITION_GUI_PARTITIONDIALOGHELPERS @@ -25,7 +16,9 @@ #include +class QPushButton; class QComboBox; +class QLabel; class QListWidget; /** @@ -54,10 +47,28 @@ void standardMountPoints( QComboBox&, const QString& selected ); * to blank, to allow easy detection of no-mount-selected. */ QString selectedMountPoint( QComboBox& combo ); -static inline QString selectedMountPoint(QComboBox* combo) { return selectedMountPoint(*combo); } +static inline QString +selectedMountPoint( QComboBox* combo ) +{ + return selectedMountPoint( *combo ); +} void setSelectedMountPoint( QComboBox& combo, const QString& selected ); -static inline void setSelectedMountPoint(QComboBox* combo, const QString& selected) { setSelectedMountPoint( *combo, selected); } +static inline void +setSelectedMountPoint( QComboBox* combo, const QString& selected ) +{ + setSelectedMountPoint( *combo, selected ); +} + +/** @brief Validate a @p mountPoint and adjust the UI + * + * If @p mountPoint is valid -- unused and starts with a /, for instance -- + * then the button is enabled, label is cleared, and returns @c true. + * + * If it is not valid, returns @c false and sets the UI + * to explain why. + */ +bool validateMountPoint( const QString& mountPoint, const QStringList& inUse, QLabel* label, QPushButton* button ); /** * Get the flags that have been checked in the list widget. diff --git a/src/modules/partition/gui/PartitionLabelsView.cpp b/src/modules/partition/gui/PartitionLabelsView.cpp index 270710e02..e3a50c576 100644 --- a/src/modules/partition/gui/PartitionLabelsView.cpp +++ b/src/modules/partition/gui/PartitionLabelsView.cpp @@ -1,26 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionLabelsView.h" -#include "core/PartitionModel.h" #include "core/ColorUtils.h" +#include "core/PartitionModel.h" +#include "core/SizeUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" @@ -29,18 +21,15 @@ #include #include -#include - // Qt #include #include #include -using CalamaresUtils::operator""_MiB; +using namespace CalamaresUtils::Units; static const int LAYOUT_MARGIN = 4; -static const int LABEL_PARTITION_SQUARE_MARGIN = - qMax( QFontMetrics( CalamaresUtils::defaultFont() ).ascent() - 2, 18 ); +static const int LABEL_PARTITION_SQUARE_MARGIN = qMax( QFontMetrics( CalamaresUtils::defaultFont() ).ascent() - 2, 18 ); static const int LABELS_MARGIN = LABEL_PARTITION_SQUARE_MARGIN; static const int CORNER_RADIUS = 2; @@ -49,7 +38,7 @@ static QStringList buildUnknownDisklabelTexts( Device* dev ) { QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ), - KFormat().formatByteSize( dev->totalLogical() * dev->logicalSize() ) }; + formatByteSize( dev->totalLogical() * dev->logicalSize() ) }; return texts; } @@ -63,14 +52,12 @@ PartitionLabelsView::PartitionLabelsView( QWidget* parent ) setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); - this->setObjectName("partitionLabel"); + this->setObjectName( "partitionLabel" ); setMouseTracking( true ); } -PartitionLabelsView::~PartitionLabelsView() -{ -} +PartitionLabelsView::~PartitionLabelsView() {} QSize @@ -80,7 +67,6 @@ PartitionLabelsView::minimumSizeHint() const } - QSize PartitionLabelsView::sizeHint() const { @@ -150,7 +136,9 @@ PartitionLabelsView::getIndexesToDraw( const QModelIndex& parent ) const QAbstractItemModel* modl = model(); if ( !modl ) + { return list; + } for ( int row = 0; row < modl->rowCount( parent ); ++row ) { @@ -160,15 +148,21 @@ PartitionLabelsView::getIndexesToDraw( const QModelIndex& parent ) const // To save vertical space, we choose to hide short instances of free space. // Arbitrary limit: 10MiB. const qint64 maxHiddenB = 10_MiB; - if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() && - index.data( PartitionModel::SizeRole ).toLongLong() < maxHiddenB ) + if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() + && index.data( PartitionModel::SizeRole ).toLongLong() < maxHiddenB ) + { continue; + } if ( !modl->hasChildren( index ) || !m_extendedPartitionHidden ) + { list.append( index ); + } if ( modl->hasChildren( index ) ) + { list.append( getIndexesToDraw( index ) ); + } } return list; } @@ -189,64 +183,74 @@ PartitionLabelsView::buildTexts( const QModelIndex& index ) const } else { - QString mountPoint = index.sibling( index.row(), - PartitionModel::MountPointColumn ) - .data().toString(); + QString mountPoint = index.sibling( index.row(), PartitionModel::MountPointColumn ).data().toString(); if ( mountPoint == "/" ) - firstLine = m_customNewRootLabel.isEmpty() ? - tr( "Root" ) : - m_customNewRootLabel; + { + firstLine = m_customNewRootLabel.isEmpty() ? tr( "Root" ) : m_customNewRootLabel; + } else if ( mountPoint == "/home" ) + { firstLine = tr( "Home" ); + } else if ( mountPoint == "/boot" ) + { firstLine = tr( "Boot" ); - else if ( mountPoint.contains( "/efi" ) && - index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Fat32 ) + } + else if ( mountPoint.contains( "/efi" ) + && index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Fat32 ) + { firstLine = tr( "EFI system" ); + } else if ( index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::LinuxSwap ) + { firstLine = tr( "Swap" ); + } else if ( !mountPoint.isEmpty() ) + { firstLine = tr( "New partition for %1" ).arg( mountPoint ); + } else + { firstLine = tr( "New partition" ); + } } } else if ( index.data( PartitionModel::OsproberNameRole ).toString().isEmpty() ) { firstLine = index.data().toString(); if ( firstLine.startsWith( "/dev/" ) ) - firstLine.remove( 0, 5 ); // "/dev/" + { + firstLine.remove( 0, 5 ); // "/dev/" + } } else + { firstLine = index.data( PartitionModel::OsproberNameRole ).toString(); + } - if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() || - index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Extended ) - secondLine = index.sibling( index.row(), - PartitionModel::SizeColumn ) - .data().toString(); + if ( index.data( PartitionModel::IsFreeSpaceRole ).toBool() + || index.data( PartitionModel::FileSystemTypeRole ).toInt() == FileSystem::Extended ) + { + secondLine = index.sibling( index.row(), PartitionModel::SizeColumn ).data().toString(); + } else //: size[number] filesystem[name] secondLine = tr( "%1 %2" ) - .arg( index.sibling( index.row(), - PartitionModel::SizeColumn ) - .data().toString() ) - .arg( index.sibling( index.row(), - PartitionModel::FileSystemColumn ) - .data().toString() ); + .arg( index.sibling( index.row(), PartitionModel::SizeColumn ).data().toString() ) + .arg( index.sibling( index.row(), PartitionModel::FileSystemColumn ).data().toString() ); return { firstLine, secondLine }; } void -PartitionLabelsView::drawLabels( QPainter* painter, - const QRect& rect, - const QModelIndex& parent ) +PartitionLabelsView::drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ) { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return; + } const QModelIndexList indexesToDraw = getIndexesToDraw( parent ); @@ -260,20 +264,19 @@ PartitionLabelsView::drawLabels( QPainter* painter, QColor labelColor = index.data( Qt::DecorationRole ).value< QColor >(); - if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow + if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } // Draw hover - if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection - m_hoveredIndex.isValid() && - index == m_hoveredIndex ) + if ( selectionMode() != QAbstractItemView::NoSelection && // no hover without selection + m_hoveredIndex.isValid() && index == m_hoveredIndex ) { painter->save(); QRect labelRect( QPoint( label_x, label_y ), labelSize ); - labelRect.adjust( 0, -LAYOUT_MARGIN, 0, -2*LAYOUT_MARGIN ); + labelRect.adjust( 0, -LAYOUT_MARGIN, 0, -2 * LAYOUT_MARGIN ); painter->translate( 0.5, 0.5 ); QRect hoverRect = labelRect.adjusted( 0, 0, -1, -1 ); painter->setBrush( QPalette().window().color().lighter( 102 ) ); @@ -285,19 +288,15 @@ PartitionLabelsView::drawLabels( QPainter* painter, } // Is this element the selected one? - bool sel = selectionMode() != QAbstractItemView::NoSelection && - index.isValid() && - selectionModel() && - !selectionModel()->selectedIndexes().isEmpty() && - selectionModel()->selectedIndexes().first() == index; + bool sel = selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() + && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index; drawLabel( painter, texts, labelColor, QPoint( label_x, label_y ), sel ); label_x += labelSize.width() + LABELS_MARGIN; } - if ( !modl->rowCount() && - !modl->device()->partitionTable() ) // No disklabel or unknown + if ( !modl->rowCount() && !modl->device()->partitionTable() ) // No disklabel or unknown { QStringList texts = buildUnknownDisklabelTexts( modl->device() ); QColor labelColor = ColorUtils::unknownDisklabelColor(); @@ -311,7 +310,9 @@ PartitionLabelsView::sizeForAllLabels( int maxLineWidth ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QSize(); + } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); @@ -337,15 +338,12 @@ PartitionLabelsView::sizeForAllLabels( int maxLineWidth ) const singleLabelHeight = qMax( singleLabelHeight, labelSize.height() ); } - if ( !modl->rowCount() && - !modl->device()->partitionTable() ) // Unknown or no disklabel + if ( !modl->rowCount() && !modl->device()->partitionTable() ) // Unknown or no disklabel { - singleLabelHeight = sizeForLabel( buildUnknownDisklabelTexts( modl->device() ) ) - .height(); + singleLabelHeight = sizeForLabel( buildUnknownDisklabelTexts( modl->device() ) ).height(); } - int totalHeight = numLines * singleLabelHeight + - ( numLines - 1 ) * singleLabelHeight / 4; //spacings + int totalHeight = numLines * singleLabelHeight + ( numLines - 1 ) * singleLabelHeight / 4; //spacings return QSize( maxLineWidth, totalHeight ); } @@ -363,7 +361,7 @@ PartitionLabelsView::sizeForLabel( const QStringList& text ) const vertOffset += textSize.height(); width = qMax( width, textSize.width() ); } - width += LABEL_PARTITION_SQUARE_MARGIN; //for the color square + width += LABEL_PARTITION_SQUARE_MARGIN; //for the color square return QSize( width, vertOffset ); } @@ -381,22 +379,21 @@ PartitionLabelsView::drawLabel( QPainter* painter, for ( const QString& textLine : text ) { QSize textSize = painter->fontMetrics().size( Qt::TextSingleLine, textLine ); - painter->drawText( pos.x()+LABEL_PARTITION_SQUARE_MARGIN, - pos.y() + vertOffset + textSize.height() / 2, - textLine ); + painter->drawText( + pos.x() + LABEL_PARTITION_SQUARE_MARGIN, pos.y() + vertOffset + textSize.height() / 2, textLine ); vertOffset += textSize.height(); painter->setPen( Qt::gray ); width = qMax( width, textSize.width() ); } - QRect partitionSquareRect( pos.x(), - pos.y() - 3, - LABEL_PARTITION_SQUARE_MARGIN - 5, - LABEL_PARTITION_SQUARE_MARGIN - 5 ); + QRect partitionSquareRect( + pos.x(), pos.y() - 3, LABEL_PARTITION_SQUARE_MARGIN - 5, LABEL_PARTITION_SQUARE_MARGIN - 5 ); drawPartitionSquare( painter, partitionSquareRect, color ); if ( selected ) + { drawSelectionSquare( painter, partitionSquareRect.adjusted( 2, 2, -2, -2 ), color ); + } painter->setPen( Qt::black ); } @@ -407,7 +404,9 @@ PartitionLabelsView::indexAt( const QPoint& point ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QModelIndex(); + } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); @@ -420,7 +419,7 @@ PartitionLabelsView::indexAt( const QPoint& point ) const QSize labelSize = sizeForLabel( texts ); - if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow + if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; @@ -428,7 +427,9 @@ PartitionLabelsView::indexAt( const QPoint& point ) const QRect labelRect( QPoint( label_x, label_y ), labelSize ); if ( labelRect.contains( point ) ) + { return index; + } label_x += labelSize.width() + LABELS_MARGIN; } @@ -442,7 +443,9 @@ PartitionLabelsView::visualRect( const QModelIndex& idx ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) + { return QRect(); + } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); @@ -455,14 +458,16 @@ PartitionLabelsView::visualRect( const QModelIndex& idx ) const QSize labelSize = sizeForLabel( texts ); - if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow + if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } if ( idx.isValid() && idx == index ) + { return QRect( QPoint( label_x, label_y ), labelSize ); + } label_x += labelSize.width() + LABELS_MARGIN; } @@ -514,11 +519,7 @@ void PartitionLabelsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); - connect( selectionModel, &QItemSelectionModel::selectionChanged, - this, [=] - { - viewport()->repaint(); - } ); + connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [ = ] { viewport()->repaint(); } ); } @@ -560,7 +561,9 @@ PartitionLabelsView::setSelection( const QRect& rect, QItemSelectionModel::Selec { QModelIndex eventIndex = indexAt( rect.topLeft() ); if ( m_canBeSelected( eventIndex ) ) + { selectionModel()->select( eventIndex, flags ); + } } @@ -582,9 +585,13 @@ PartitionLabelsView::mouseMoveEvent( QMouseEvent* event ) if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !m_canBeSelected( m_hoveredIndex ) ) + { QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); + } else + { QGuiApplication::restoreOverrideCursor(); + } viewport()->repaint(); } @@ -610,14 +617,18 @@ PartitionLabelsView::mousePressEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); if ( m_canBeSelected( candidateIndex ) ) + { QAbstractItemView::mousePressEvent( event ); + } else + { event->accept(); + } } void PartitionLabelsView::updateGeometries() { - updateGeometry(); //get a new rect() for redrawing all the labels + updateGeometry(); //get a new rect() for redrawing all the labels } diff --git a/src/modules/partition/gui/PartitionLabelsView.h b/src/modules/partition/gui/PartitionLabelsView.h index e461a8dd8..9b5a277ab 100644 --- a/src/modules/partition/gui/PartitionLabelsView.h +++ b/src/modules/partition/gui/PartitionLabelsView.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONLABELSVIEW_H @@ -37,7 +28,7 @@ class PartitionLabelsView : public QAbstractItemView Q_OBJECT public: explicit PartitionLabelsView( QWidget* parent = nullptr ); - virtual ~PartitionLabelsView() override; + ~PartitionLabelsView() override; QSize minimumSizeHint() const override; @@ -79,8 +70,7 @@ private: void drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ); QSize sizeForAllLabels( int maxLineWidth ) const; QSize sizeForLabel( const QStringList& text ) const; - void drawLabel( QPainter* painter, const QStringList& text, const QColor& color, - const QPoint& pos , bool selected ); + void drawLabel( QPainter* painter, const QStringList& text, const QColor& color, const QPoint& pos, bool selected ); QModelIndexList getIndexesToDraw( const QModelIndex& parent ) const; QStringList buildTexts( const QModelIndex& index ) const; @@ -91,4 +81,4 @@ private: QPersistentModelIndex m_hoveredIndex; }; -#endif // PARTITIONLABELSVIEW_H +#endif // PARTITIONLABELSVIEW_H diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index d2ad49c23..0b3cf2478 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -1,24 +1,15 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2018-2019, Adriaan de Groot - * Copyright 2018, Andrius Štikonas - * Copyright 2018, Caio Jordão Carvalho - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Andrius Štikonas + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionPage.h" @@ -26,27 +17,27 @@ // Local #include "core/BootLoaderModel.h" #include "core/DeviceModel.h" +#include "core/KPMHelpers.h" +#include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "core/PartitionModel.h" -#include "core/PartUtils.h" -#include "core/KPMHelpers.h" #include "gui/CreatePartitionDialog.h" #include "gui/CreateVolumeGroupDialog.h" #include "gui/EditExistingPartitionDialog.h" #include "gui/ResizeVolumeGroupDialog.h" #include "gui/ScanningDialog.h" -#include "ui_PartitionPage.h" #include "ui_CreatePartitionTableDialog.h" +#include "ui_PartitionPage.h" +#include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Retranslator.h" - -#include "Branding.h" +#include "widgets/TranslationFix.h" // KPMcore #include @@ -58,34 +49,34 @@ #include // Qt +#include +#include #include #include #include #include -#include -#include #include PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_PartitionPage ) , m_core( core ) - , m_lastSelectedBootLoaderIndex(-1) + , m_lastSelectedBootLoaderIndex( -1 ) , m_isEfi( false ) { m_isEfi = PartUtils::isEfiSystem(); m_ui->setupUi( this ); m_ui->partitionLabelsView->setVisible( - Calamares::JobQueue::instance()->globalStorage()-> - value( "alwaysShowPartitionLabels" ).toBool() ); + Calamares::JobQueue::instance()->globalStorage()->value( "alwaysShowPartitionLabels" ).toBool() ); m_ui->deviceComboBox->setModel( m_core->deviceModel() ); m_ui->bootLoaderComboBox->setModel( m_core->bootLoaderModel() ); - connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, this, &PartitionPage::restoreSelectedBootLoader ); - PartitionBarsView::NestedPartitionsMode mode = Calamares::JobQueue::instance()->globalStorage()-> - value( "drawNestedPartitions" ).toBool() ? - PartitionBarsView::DrawNestedPartitions : - PartitionBarsView::NoNestedPartitions; + connect( + m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, this, &PartitionPage::restoreSelectedBootLoader ); + PartitionBarsView::NestedPartitionsMode mode + = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() + ? PartitionBarsView::DrawNestedPartitions + : PartitionBarsView::NoNestedPartitions; m_ui->partitionBarsView->setNestedPartitionsMode( mode ); updateButtons(); updateBootLoaderInstallPath(); @@ -93,38 +84,49 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) updateFromCurrentDevice(); connect( m_ui->deviceComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateFromCurrentDevice ); - connect( m_ui->bootLoaderComboBox, QOverload::of(&QComboBox::activated), this, &PartitionPage::updateSelectedBootLoaderIndex ); - connect( m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateBootLoaderInstallPath ); + connect( m_ui->bootLoaderComboBox, + QOverload< int >::of( &QComboBox::activated ), + this, + &PartitionPage::updateSelectedBootLoaderIndex ); + connect( + m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateBootLoaderInstallPath ); connect( m_core, &PartitionCoreModule::isDirtyChanged, m_ui->revertButton, &QWidget::setEnabled ); - connect( m_ui->partitionTreeView, &QAbstractItemView::doubleClicked, this, &PartitionPage::onPartitionViewActivated ); + connect( + m_ui->partitionTreeView, &QAbstractItemView::doubleClicked, this, &PartitionPage::onPartitionViewActivated ); connect( m_ui->revertButton, &QAbstractButton::clicked, this, &PartitionPage::onRevertClicked ); connect( m_ui->newVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onNewVolumeGroupClicked ); - connect( m_ui->resizeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onResizeVolumeGroupClicked ); - connect( m_ui->deactivateVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onDeactivateVolumeGroupClicked ); - connect( m_ui->removeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onRemoveVolumeGroupClicked ); - connect( m_ui->newPartitionTableButton, &QAbstractButton::clicked, this, &PartitionPage::onNewPartitionTableClicked ); + connect( + m_ui->resizeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onResizeVolumeGroupClicked ); + connect( m_ui->deactivateVolumeGroupButton, + &QAbstractButton::clicked, + this, + &PartitionPage::onDeactivateVolumeGroupClicked ); + connect( + m_ui->removeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onRemoveVolumeGroupClicked ); + connect( + m_ui->newPartitionTableButton, &QAbstractButton::clicked, this, &PartitionPage::onNewPartitionTableClicked ); connect( m_ui->createButton, &QAbstractButton::clicked, this, &PartitionPage::onCreateClicked ); connect( m_ui->editButton, &QAbstractButton::clicked, this, &PartitionPage::onEditClicked ); connect( m_ui->deleteButton, &QAbstractButton::clicked, this, &PartitionPage::onDeleteClicked ); - if ( m_isEfi ) { + if ( m_isEfi ) + { m_ui->bootLoaderComboBox->hide(); m_ui->label_3->hide(); } - CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ) + CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ); } -PartitionPage::~PartitionPage() -{ -} +PartitionPage::~PartitionPage() {} void PartitionPage::updateButtons() { - bool create = false, createTable = false, edit = false, del = false, currentDeviceIsVG = false, isDeactivable = false; + bool allow_create = false, allow_create_table = false, allow_edit = false, allow_delete = false; + bool currentDeviceIsVG = false, isDeactivable = false; bool isRemovable = false, isVGdeactivated = false; QModelIndex index = m_ui->partitionTreeView->currentIndex(); @@ -134,12 +136,21 @@ PartitionPage::updateButtons() Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); - bool isFree = CalamaresUtils::Partition::isPartitionFreeSpace( partition ); - bool isExtended = partition->roles().has( PartitionRole::Extended ); + const bool isFree = CalamaresUtils::Partition::isPartitionFreeSpace( partition ); + const bool isExtended = partition->roles().has( PartitionRole::Extended ); - bool isInVG = m_core->isInVG( partition ); + // An extended partition can have a "free space" child; that one does + // not count as a real child. If there are more children, at least one + // is a real one and we should not allow the extended partition to be + // deleted. + const bool hasChildren = isExtended + && ( partition->children().length() > 1 + || ( partition->children().length() == 1 + && !CalamaresUtils::Partition::isPartitionFreeSpace( partition->children().at( 0 ) ) ) ); - create = isFree; + const bool isInVG = m_core->isInVG( partition ); + + allow_create = isFree; // Keep it simple for now: do not support editing extended partitions as // it does not work with our current edit implementation which is @@ -148,8 +159,8 @@ PartitionPage::updateButtons() // inside them, so an edit must be applied without altering the job // order. // TODO: See if LVM PVs can be edited in Calamares - edit = !isFree && !isExtended; - del = !isFree && !isInVG; + allow_edit = !isFree && !isExtended; + allow_delete = !isFree && !isInVG && !hasChildren; } if ( m_ui->deviceComboBox->currentIndex() >= 0 ) @@ -157,19 +168,23 @@ PartitionPage::updateButtons() Device* device = nullptr; QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( deviceIndex.isValid() ) + { device = m_core->deviceModel()->deviceForIndex( deviceIndex ); + } if ( !device ) + { cWarning() << "Device for updateButtons is nullptr"; + } else if ( device->type() != Device::Type::LVM_Device ) { - createTable = true; + allow_create_table = true; #ifdef WITH_KPMCORE4API - if ( device->type() == Device::Type::SoftwareRAID_Device && - static_cast< SoftwareRAID* >(device)->status() == SoftwareRAID::Status::Inactive ) + if ( device->type() == Device::Type::SoftwareRAID_Device + && static_cast< SoftwareRAID* >( device )->status() == SoftwareRAID::Status::Inactive ) { - createTable = false; - create = false; + allow_create_table = false; + allow_create = false; } #endif } @@ -177,7 +192,7 @@ PartitionPage::updateButtons() { currentDeviceIsVG = true; - LvmDevice* lvmDevice = dynamic_cast(m_core->deviceModel()->deviceForIndex( deviceIndex )); + LvmDevice* lvmDevice = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); isDeactivable = DeactivateVolumeGroupOperation::isDeactivatable( lvmDevice ); isRemovable = RemoveVolumeGroupOperation::isRemovable( lvmDevice ); @@ -185,14 +200,16 @@ PartitionPage::updateButtons() isVGdeactivated = m_core->isVGdeactivated( lvmDevice ); if ( isVGdeactivated ) + { m_ui->revertButton->setEnabled( true ); + } } } - m_ui->createButton->setEnabled( create ); - m_ui->editButton->setEnabled( edit ); - m_ui->deleteButton->setEnabled( del ); - m_ui->newPartitionTableButton->setEnabled( createTable ); + m_ui->createButton->setEnabled( allow_create ); + m_ui->editButton->setEnabled( allow_edit ); + m_ui->deleteButton->setEnabled( allow_delete ); + m_ui->newPartitionTableButton->setEnabled( allow_create_table ); m_ui->resizeVolumeGroupButton->setEnabled( currentDeviceIsVG && !isVGdeactivated ); m_ui->deactivateVolumeGroupButton->setEnabled( currentDeviceIsVG && isDeactivable && !isVGdeactivated ); m_ui->removeVolumeGroupButton->setEnabled( currentDeviceIsVG && isRemovable ); @@ -205,14 +222,18 @@ PartitionPage::onNewPartitionTableClicked() Q_ASSERT( index.isValid() ); Device* device = m_core->deviceModel()->deviceForIndex( index ); - QPointer dlg = new QDialog( this ); + QPointer< QDialog > dlg = new QDialog( this ); Ui_CreatePartitionTableDialog ui; ui.setupUi( dlg.data() ); QString areYouSure = tr( "Are you sure you want to create a new partition table on %1?" ).arg( device->name() ); if ( PartUtils::isEfiSystem() ) + { ui.gptRadioButton->setChecked( true ); + } else + { ui.mbrRadioButton->setChecked( true ); + } ui.areYouSureLabel->setText( areYouSure ); if ( dlg->exec() == QDialog::Accepted ) @@ -231,22 +252,30 @@ PartitionPage::checkCanCreate( Device* device ) { auto table = device->partitionTable(); - if ( table->type() == PartitionTable::msdos ||table->type() == PartitionTable::msdos_sectorbased ) + if ( table->type() == PartitionTable::msdos || table->type() == PartitionTable::msdos_sectorbased ) { cDebug() << "Checking MSDOS partition" << table->numPrimaries() << "primaries, max" << table->maxPrimaries(); if ( ( table->numPrimaries() >= table->maxPrimaries() ) && !table->hasExtended() ) { - QMessageBox::warning( this, tr( "Can not create new partition" ), + QMessageBox mb( + QMessageBox::Warning, + tr( "Can not create new partition" ), tr( "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." ).arg( device->name() ).arg( table->numPrimaries() ) - ); + "Please remove one primary partition and add an extended partition, instead." ) + .arg( device->name() ) + .arg( table->numPrimaries() ), + QMessageBox::Ok ); + Calamares::fixButtonLabels( &mb ); + mb.exec(); return false; } return true; } else + { return true; // GPT is fine + } } void @@ -260,13 +289,12 @@ PartitionPage::onNewVolumeGroupClicked() for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) + { availablePVs << p; + } - QPointer< CreateVolumeGroupDialog > dlg = new CreateVolumeGroupDialog( vgName, - selectedPVs, - availablePVs, - peSize, - this ); + QPointer< CreateVolumeGroupDialog > dlg + = new CreateVolumeGroupDialog( vgName, selectedPVs, availablePVs, peSize, this ); if ( dlg->exec() == QDialog::Accepted ) { @@ -282,7 +310,9 @@ PartitionPage::onNewVolumeGroupClicked() // Disable delete button if current partition was selected to be in VG // TODO: Should Calamares edit LVM PVs which are in VGs? if ( selectedPVs.contains( partition ) ) + { m_ui->deleteButton->setEnabled( false ); + } } QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); @@ -297,7 +327,7 @@ PartitionPage::onNewVolumeGroupClicked() // is needed to set the current index in deviceComboBox as the previous one int previousIndex = m_ui->deviceComboBox->findData( previousIndexDeviceData, Qt::ToolTipRole ); - m_ui->deviceComboBox->setCurrentIndex( ( previousIndex < 0 ) ? 0 : previousIndex ); + m_ui->deviceComboBox->setCurrentIndex( ( previousIndex < 0 ) ? 0 : previousIndex ); updateFromCurrentDevice(); } @@ -317,15 +347,16 @@ PartitionPage::onResizeVolumeGroupClicked() for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) + { availablePVs << p; + } - QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device, - availablePVs, - selectedPVs, - this ); + QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device, availablePVs, selectedPVs, this ); if ( dlg->exec() == QDialog::Accepted ) + { m_core->resizeVolumeGroup( device, selectedPVs ); + } delete dlg; } @@ -368,20 +399,18 @@ PartitionPage::onCreateClicked() Q_ASSERT( partition ); if ( !checkCanCreate( model->device() ) ) - return; - - CreatePartitionDialog dlg( - model->device(), - partition->parent(), - nullptr, - getCurrentUsedMountpoints(), - this ); - dlg.initFromFreeSpace( partition ); - if ( dlg.exec() == QDialog::Accepted ) { - Partition* newPart = dlg.createPartition(); - m_core->createPartition( model->device(), newPart, dlg.newFlags() ); + return; } + + QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( + model->device(), CreatePartitionDialog::FreeSpace { partition }, getCurrentUsedMountpoints(), this ); + if ( dlg->exec() == QDialog::Accepted ) + { + Partition* newPart = dlg->getNewlyCreatedPartition(); + m_core->createPartition( model->device(), newPart, dlg->newFlags() ); + } + delete dlg; } void @@ -395,10 +424,13 @@ PartitionPage::onEditClicked() Q_ASSERT( partition ); if ( CalamaresUtils::Partition::isPartitionNew( partition ) ) + { updatePartitionToCreate( model->device(), partition ); + } else + { editExistingPartition( model->device(), partition ); - + } } void @@ -419,18 +451,21 @@ void PartitionPage::onRevertClicked() { ScanningDialog::run( - QtConcurrent::run( [ this ] - { - QMutexLocker locker( &m_revertMutex ); + QtConcurrent::run( + [ this ] + { + QMutexLocker locker( &m_revertMutex ); - int oldIndex = m_ui->deviceComboBox->currentIndex(); - m_core->revertAllDevices(); - m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); - updateFromCurrentDevice(); - } ), - [ this ]{ + int oldIndex = m_ui->deviceComboBox->currentIndex(); + m_core->revertAllDevices(); + m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); + updateFromCurrentDevice(); + } ), + [ this ] + { m_lastSelectedBootLoaderIndex = -1; - if( m_ui->bootLoaderComboBox->currentIndex() < 0 ) { + if ( m_ui->bootLoaderComboBox->currentIndex() < 0 ) + { m_ui->bootLoaderComboBox->setCurrentIndex( 0 ); } }, @@ -442,7 +477,9 @@ PartitionPage::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) + { return; + } const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); @@ -455,9 +492,13 @@ PartitionPage::onPartitionViewActivated() // action from multiple UI elements in this page, so it does not feel worth // the price. if ( CalamaresUtils::Partition::isPartitionFreeSpace( partition ) ) + { m_ui->createButton->click(); + } else + { m_ui->editButton->click(); + } } void @@ -466,15 +507,11 @@ PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); - QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( device, - partition->parent(), - partition, - mountPoints, - this ); - dlg->initFromPartitionToCreate( partition ); + QPointer< CreatePartitionDialog > dlg + = new CreatePartitionDialog( device, CreatePartitionDialog::FreshPartition { partition }, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) { - Partition* newPartition = dlg->createPartition(); + Partition* newPartition = dlg->getNewlyCreatedPartition(); m_core->deletePartition( device, partition ); m_core->createPartition( device, newPartition, dlg->newFlags() ); } @@ -487,9 +524,12 @@ PartitionPage::editExistingPartition( Device* device, Partition* partition ) QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); - QPointer dlg = new EditExistingPartitionDialog( device, partition, mountPoints, this ); + QPointer< EditExistingPartitionDialog > dlg + = new EditExistingPartitionDialog( device, partition, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) + { dlg->applyChanges( m_core ); + } delete dlg; } @@ -497,11 +537,15 @@ void PartitionPage::updateBootLoaderInstallPath() { if ( m_isEfi || !m_ui->bootLoaderComboBox->isVisible() ) + { return; + } QVariant var = m_ui->bootLoaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) + { return; + } cDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); m_core->setBootLoaderInstallPath( var.toString() ); } @@ -516,7 +560,7 @@ PartitionPage::updateSelectedBootLoaderIndex() void PartitionPage::restoreSelectedBootLoader() { - Calamares::restoreSelectedBootLoader( *(m_ui->bootLoaderComboBox), m_core->bootLoaderInstallPath() ); + Calamares::restoreSelectedBootLoader( *( m_ui->bootLoaderComboBox ), m_core->bootLoaderInstallPath() ); } @@ -525,13 +569,17 @@ PartitionPage::updateFromCurrentDevice() { QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) + { return; + } Device* device = m_core->deviceModel()->deviceForIndex( index ); QAbstractItemModel* oldModel = m_ui->partitionTreeView->model(); if ( oldModel ) + { disconnect( oldModel, nullptr, this, nullptr ); + } PartitionModel* model = m_core->partitionModelForDevice( device ); m_ui->partitionBarsView->setModel( model ); @@ -540,10 +588,8 @@ PartitionPage::updateFromCurrentDevice() m_ui->partitionTreeView->expandAll(); // Make all views use the same selection model. - if ( m_ui->partitionBarsView->selectionModel() != - m_ui->partitionTreeView->selectionModel() || - m_ui->partitionBarsView->selectionModel() != - m_ui->partitionLabelsView->selectionModel() ) + if ( m_ui->partitionBarsView->selectionModel() != m_ui->partitionTreeView->selectionModel() + || m_ui->partitionBarsView->selectionModel() != m_ui->partitionLabelsView->selectionModel() ) { // Tree view QItemSelectionModel* selectionModel = m_ui->partitionTreeView->selectionModel(); @@ -559,14 +605,18 @@ PartitionPage::updateFromCurrentDevice() // This is necessary because even with the same selection model it might happen that // a !=0 column is selected in the tree view, which for some reason doesn't trigger a // timely repaint in the bars view. - connect( m_ui->partitionBarsView->selectionModel(), &QItemSelectionModel::currentChanged, - this, [=] - { - QModelIndex selectedIndex = m_ui->partitionBarsView->selectionModel()->currentIndex(); - selectedIndex = selectedIndex.sibling( selectedIndex.row(), 0 ); - m_ui->partitionBarsView->setCurrentIndex( selectedIndex ); - m_ui->partitionLabelsView->setCurrentIndex( selectedIndex ); - }, Qt::UniqueConnection ); + connect( + m_ui->partitionBarsView->selectionModel(), + &QItemSelectionModel::currentChanged, + this, + [ = ] + { + QModelIndex selectedIndex = m_ui->partitionBarsView->selectionModel()->currentIndex(); + selectedIndex = selectedIndex.sibling( selectedIndex.row(), 0 ); + m_ui->partitionBarsView->setCurrentIndex( selectedIndex ); + m_ui->partitionLabelsView->setCurrentIndex( selectedIndex ); + }, + Qt::UniqueConnection ); // Must be done here because we need to have a model set to define // individual column resize mode @@ -577,11 +627,9 @@ PartitionPage::updateFromCurrentDevice() updateButtons(); // Establish connection here because selection model is destroyed when // model changes - connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentChanged, - [ this ]( const QModelIndex&, const QModelIndex& ) - { - updateButtons(); - } ); + connect( m_ui->partitionTreeView->selectionModel(), + &QItemSelectionModel::currentChanged, + [ this ]( const QModelIndex&, const QModelIndex& ) { updateButtons(); } ); connect( model, &QAbstractItemModel::modelReset, this, &PartitionPage::onPartitionModelReset ); } @@ -597,7 +645,8 @@ void PartitionPage::updateBootLoaderIndex() { // set bootloader back to user selected index - if ( m_lastSelectedBootLoaderIndex >= 0 && m_ui->bootLoaderComboBox->count() ) { + if ( m_lastSelectedBootLoaderIndex >= 0 && m_ui->bootLoaderComboBox->count() ) + { m_ui->bootLoaderComboBox->setCurrentIndex( m_lastSelectedBootLoaderIndex ); } } @@ -605,10 +654,11 @@ PartitionPage::updateBootLoaderIndex() QStringList PartitionPage::getCurrentUsedMountpoints() { - QModelIndex index = m_core->deviceModel()->index( - m_ui->deviceComboBox->currentIndex(), 0 ); + QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) + { return QStringList(); + } Device* device = m_core->deviceModel()->deviceForIndex( index ); QStringList mountPoints; @@ -617,7 +667,9 @@ PartitionPage::getCurrentUsedMountpoints() { const QString& mountPoint = PartitionInfo::mountPoint( partition ); if ( !mountPoint.isEmpty() ) + { mountPoints << mountPoint; + } } return mountPoints; @@ -630,7 +682,7 @@ PartitionPage::selectedDeviceIndex() } void -PartitionPage::selectDeviceByIndex ( int index ) +PartitionPage::selectDeviceByIndex( int index ) { - m_ui->deviceComboBox->setCurrentIndex( index ); + m_ui->deviceComboBox->setCurrentIndex( index ); } diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index e8a96a4cf..462822346 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -1,35 +1,25 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018-2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONPAGE_H #define PARTITIONPAGE_H -#include -#include #include +#include +#include class PartitionCoreModule; class Ui_PartitionPage; class Device; -class DeviceModel; class Partition; /** @@ -43,7 +33,7 @@ class PartitionPage : public QWidget Q_OBJECT public: explicit PartitionPage( PartitionCoreModule* core, QWidget* parent = nullptr ); - ~PartitionPage(); + ~PartitionPage() override; void onRevertClicked(); @@ -90,8 +80,8 @@ private: QStringList getCurrentUsedMountpoints(); QMutex m_revertMutex; - int m_lastSelectedBootLoaderIndex; - bool m_isEfi; + int m_lastSelectedBootLoaderIndex; + bool m_isEfi; }; -#endif // PARTITIONPAGE_H +#endif // PARTITIONPAGE_H diff --git a/src/modules/partition/gui/PartitionPage.ui b/src/modules/partition/gui/PartitionPage.ui index c028eb513..556c2289d 100644 --- a/src/modules/partition/gui/PartitionPage.ui +++ b/src/modules/partition/gui/PartitionPage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + PartitionPage diff --git a/src/modules/partition/gui/PartitionSizeController.cpp b/src/modules/partition/gui/PartitionSizeController.cpp index 39879dab9..b7757c32d 100644 --- a/src/modules/partition/gui/PartitionSizeController.cpp +++ b/src/modules/partition/gui/PartitionSizeController.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "gui/PartitionSizeController.h" @@ -36,7 +27,8 @@ PartitionSizeController::PartitionSizeController( QObject* parent ) : QObject( parent ) -{} +{ +} void PartitionSizeController::init( Device* device, Partition* partition, const QColor& color ) @@ -58,7 +50,9 @@ PartitionSizeController::setPartResizerWidget( PartResizerWidget* widget, bool f Q_ASSERT( m_device ); if ( m_partResizerWidget ) + { disconnect( m_partResizerWidget, nullptr, this, nullptr ); + } m_dirty = false; m_currentSpinBoxValue = -1; @@ -108,7 +102,9 @@ void PartitionSizeController::setSpinBox( QSpinBox* spinBox ) { if ( m_spinBox ) + { disconnect( m_spinBox, nullptr, this, nullptr ); + } m_spinBox = spinBox; m_spinBox->setMaximum( std::numeric_limits< int >::max() ); connectWidgets(); @@ -118,7 +114,9 @@ void PartitionSizeController::connectWidgets() { if ( !m_spinBox || !m_partResizerWidget ) + { return; + } connect( m_spinBox, SIGNAL( editingFinished() ), SLOT( updatePartResizerWidget() ) ); connect( m_partResizerWidget, SIGNAL( firstSectorChanged( qint64 ) ), SLOT( updateSpinBox() ) ); @@ -132,9 +130,13 @@ void PartitionSizeController::updatePartResizerWidget() { if ( m_updating ) + { return; + } if ( m_spinBox->value() == m_currentSpinBoxValue ) + { return; + } m_updating = true; qint64 sectorSize = qint64( m_spinBox->value() ) * 1024 * 1024 / m_device->logicalSize(); @@ -148,8 +150,7 @@ PartitionSizeController::updatePartResizerWidget() } void -PartitionSizeController::doAlignAndUpdatePartResizerWidget( qint64 firstSector, - qint64 lastSector ) +PartitionSizeController::doAlignAndUpdatePartResizerWidget( qint64 firstSector, qint64 lastSector ) { if ( lastSector > m_partResizerWidget->maximumLastSector() ) { @@ -176,7 +177,9 @@ void PartitionSizeController::updateSpinBox() { if ( m_updating ) + { return; + } m_updating = true; doUpdateSpinBox(); m_updating = false; @@ -186,12 +189,16 @@ void PartitionSizeController::doUpdateSpinBox() { if ( !m_spinBox ) + { return; + } int mbSize = CalamaresUtils::BytesToMiB( m_partition->length() * m_device->logicalSize() ); m_spinBox->setValue( mbSize ); - if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it - m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value + if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it + m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value + { m_dirty = true; + } m_currentSpinBoxValue = mbSize; } diff --git a/src/modules/partition/gui/PartitionSizeController.h b/src/modules/partition/gui/PartitionSizeController.h index 7337968f5..69cf2ef21 100644 --- a/src/modules/partition/gui/PartitionSizeController.h +++ b/src/modules/partition/gui/PartitionSizeController.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONSIZECONTROLLER_H diff --git a/src/modules/partition/gui/PartitionSplitterWidget.cpp b/src/modules/partition/gui/PartitionSplitterWidget.cpp index bcc80b65a..e52afaa74 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.cpp +++ b/src/modules/partition/gui/PartitionSplitterWidget.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionSplitterWidget.h" @@ -31,14 +22,16 @@ #include #include -#include #include +#include +#include #include using CalamaresUtils::Partition::PartitionIterator; -static const int VIEW_HEIGHT = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts - int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts +static const int VIEW_HEIGHT + = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts + int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts static const int CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); @@ -64,35 +57,38 @@ PartitionSplitterWidget::init( Device* dev, bool drawNestedPartitions ) m_drawNestedPartitions = drawNestedPartitions; QVector< PartitionSplitterItem > allPartitionItems; PartitionSplitterItem* extendedPartitionItem = nullptr; - for ( auto it = PartitionIterator::begin( dev ); - it != PartitionIterator::end( dev ); ++it ) + for ( auto it = PartitionIterator::begin( dev ); it != PartitionIterator::end( dev ); ++it ) { - PartitionSplitterItem newItem = { - ( *it )->partitionPath(), - ColorUtils::colorForPartition( *it ), - CalamaresUtils::Partition::isPartitionFreeSpace( *it ), - ( *it )->capacity(), - PartitionSplitterItem::Normal, - {} - }; + PartitionSplitterItem newItem = { ( *it )->partitionPath(), + ColorUtils::colorForPartition( *it ), + CalamaresUtils::Partition::isPartitionFreeSpace( *it ), + ( *it )->capacity(), + PartitionSplitterItem::Normal, + {} }; // If we don't draw child partitions of a partitions as child partitions, we // need to flatten the items tree into an items list if ( drawNestedPartitions ) { if ( ( *it )->roles().has( PartitionRole::Logical ) && extendedPartitionItem ) + { extendedPartitionItem->children.append( newItem ); + } else { allPartitionItems.append( newItem ); if ( ( *it )->roles().has( PartitionRole::Extended ) ) + { extendedPartitionItem = &allPartitionItems.last(); + } } } else { if ( !( *it )->roles().has( PartitionRole::Extended ) ) + { allPartitionItems.append( newItem ); + } } } @@ -100,7 +96,7 @@ PartitionSplitterWidget::init( Device* dev, bool drawNestedPartitions ) } void -PartitionSplitterWidget::setupItems( const QVector& items ) +PartitionSplitterWidget::setupItems( const QVector< PartitionSplitterItem >& items ) { m_itemToResize = PartitionSplitterItem::null(); m_itemToResizeNext = PartitionSplitterItem::null(); @@ -110,20 +106,17 @@ PartitionSplitterWidget::setupItems( const QVector& items m_items = items; repaint(); for ( const PartitionSplitterItem& item : items ) + { cDebug() << "PSI added item" << item.itemPath << "size" << item.size; + } } void -PartitionSplitterWidget::setSplitPartition( const QString& path, - qint64 minSize, - qint64 maxSize, - qint64 preferredSize ) +PartitionSplitterWidget::setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize ) { - cDebug() << Q_FUNC_INFO << "path:" << path - << "\nminSize:" << minSize - << "\nmaxSize:" << maxSize - << "\nprfSize:" << preferredSize; + cDebug() << "path:" << path << Logger::Continuation << "minSize:" << minSize << Logger::Continuation + << "maxSize:" << maxSize << Logger::Continuation << "prfSize:" << preferredSize; if ( m_itemToResize && m_itemToResizeNext ) { @@ -132,9 +125,8 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, // We need to remove the itemToResizeNext from wherever it is for ( int i = 0; i < m_items.count(); ++i ) { - if ( m_items[ i ].itemPath == m_itemToResize.itemPath && - m_items[ i ].status == PartitionSplitterItem::Resizing && - i + 1 < m_items.count() ) + if ( m_items[ i ].itemPath == m_itemToResize.itemPath + && m_items[ i ].status == PartitionSplitterItem::Resizing && i + 1 < m_items.count() ) { m_items[ i ].size = m_items[ i ].size + m_itemToResizeNext.size; m_items[ i ].status = PartitionSplitterItem::Normal; @@ -146,11 +138,10 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, { for ( int j = 0; j < m_items[ i ].children.count(); ++j ) { - if ( m_items[ i ].children[ j ].itemPath == m_itemToResize.itemPath && - j + 1 < m_items[ i ].children.count() ) + if ( m_items[ i ].children[ j ].itemPath == m_itemToResize.itemPath + && j + 1 < m_items[ i ].children.count() ) { - m_items[ i ].children[ j ].size = - m_items[ i ].children[ j ].size + m_itemToResizeNext.size; + m_items[ i ].children[ j ].size = m_items[ i ].children[ j ].size + m_itemToResizeNext.size; m_items[ i ].children[ j ].status = PartitionSplitterItem::Normal; m_items[ i ].children.removeAt( j + 1 ); m_itemToResizeNext = PartitionSplitterItem::null(); @@ -158,7 +149,9 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, } } if ( m_itemToResizeNext.isNull() ) + { break; + } } } @@ -167,38 +160,42 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, } PartitionSplitterItem itemToResize = _findItem( m_items, - [ path ]( PartitionSplitterItem& item ) -> bool - { - if ( path == item.itemPath ) - { - item.status = PartitionSplitterItem::Resizing; - return true; - } - return false; - } ); + [ path ]( PartitionSplitterItem& item ) -> bool + { + if ( path == item.itemPath ) + { + item.status = PartitionSplitterItem::Resizing; + return true; + } + return false; + } ); if ( itemToResize.isNull() ) + { return; + } cDebug() << "itemToResize:" << itemToResize.itemPath; m_itemToResize = itemToResize; m_itemToResizePath = path; if ( preferredSize > maxSize ) + { preferredSize = maxSize; + } qint64 newSize = m_itemToResize.size - preferredSize; m_itemToResize.size = preferredSize; int opCount = _eachItem( m_items, - [ preferredSize ]( PartitionSplitterItem& item ) -> bool - { - if ( item.status == PartitionSplitterItem::Resizing ) - { - item.size = preferredSize; - return true; - } - return false; - } ); + [ preferredSize ]( PartitionSplitterItem& item ) -> bool + { + if ( item.status == PartitionSplitterItem::Resizing ) + { + item.size = preferredSize; + return true; + } + return false; + } ); cDebug() << "each splitter item opcount:" << opCount; m_itemMinSize = minSize; m_itemMaxSize = maxSize; @@ -208,14 +205,9 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, { if ( m_items[ i ].itemPath == itemToResize.itemPath ) { - m_items.insert( i+1, - { "", - QColor( "#c0392b" ), - false, - newSize, - PartitionSplitterItem::ResizingNext, - {} } ); - m_itemToResizeNext = m_items[ i+1 ]; + m_items.insert( i + 1, + { "", QColor( "#c0392b" ), false, newSize, PartitionSplitterItem::ResizingNext, {} } ); + m_itemToResizeNext = m_items[ i + 1 ]; break; } else if ( !m_items[ i ].children.isEmpty() ) @@ -224,29 +216,26 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, { if ( m_items[ i ].children[ j ].itemPath == itemToResize.itemPath ) { - m_items[ i ].children.insert( j+1, - { "", - QColor( "#c0392b" ), - false, - newSize, - PartitionSplitterItem::ResizingNext, - {} } ); - m_itemToResizeNext = m_items[ i ].children[ j+1 ]; + m_items[ i ].children.insert( + j + 1, { "", QColor( "#c0392b" ), false, newSize, PartitionSplitterItem::ResizingNext, {} } ); + m_itemToResizeNext = m_items[ i ].children[ j + 1 ]; break; } } if ( !m_itemToResizeNext.isNull() ) + { break; + } } } - emit partitionResized( m_itemToResize.itemPath, - m_itemToResize.size, - m_itemToResizeNext.size ); + Q_EMIT partitionResized( m_itemToResize.itemPath, m_itemToResize.size, m_itemToResizeNext.size ); cDebug() << "Items updated. Status:"; foreach ( const PartitionSplitterItem& item, m_items ) + { cDebug() << "item" << item.itemPath << "size" << item.size << "status:" << item.status; + } cDebug() << "m_itemToResize: " << !m_itemToResize.isNull() << m_itemToResize.itemPath; cDebug() << "m_itemToResizeNext:" << !m_itemToResizeNext.isNull() << m_itemToResizeNext.itemPath; @@ -259,7 +248,9 @@ qint64 PartitionSplitterWidget::splitPartitionSize() const { if ( !m_itemToResize ) + { return -1; + } return m_itemToResize.size; } @@ -268,7 +259,9 @@ qint64 PartitionSplitterWidget::newPartitionSize() const { if ( !m_itemToResizeNext ) + { return -1; + } return m_itemToResizeNext.size; } @@ -303,12 +296,12 @@ PartitionSplitterWidget::paintEvent( QPaintEvent* event ) void PartitionSplitterWidget::mousePressEvent( QMouseEvent* event ) { - if ( m_itemToResize && - m_itemToResizeNext && - event->button() == Qt::LeftButton ) + if ( m_itemToResize && m_itemToResizeNext && event->button() == Qt::LeftButton ) { if ( qAbs( event->x() - m_resizeHandleX ) < HANDLE_SNAP ) + { m_resizing = true; + } } } @@ -320,16 +313,16 @@ PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) { qint64 start = 0; QString itemPath = m_itemToResize.itemPath; - for ( auto it = m_items.constBegin(); - it != m_items.constEnd(); ++it ) + for ( auto it = m_items.constBegin(); it != m_items.constEnd(); ++it ) { if ( it->itemPath == itemPath ) + { break; + } else if ( !it->children.isEmpty() ) { bool done = false; - for ( auto jt = it->children.constBegin(); - jt != it->children.constEnd(); ++jt ) + for ( auto jt = it->children.constBegin(); jt != it->children.constEnd(); ++jt ) { if ( jt->itemPath == itemPath ) { @@ -339,10 +332,14 @@ PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) start += jt->size; } if ( done ) + { break; + } } else + { start += it->size; + } } qint64 total = 0; @@ -351,15 +348,13 @@ PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) total += it->size; } - int ew = rect().width(); //effective width + int ew = rect().width(); //effective width qreal bpp = total / static_cast< qreal >( ew ); //bytes per pixel qreal mx = event->x() * bpp - start; // make sure we are within resize range - mx = qBound( static_cast< qreal >( m_itemMinSize ), - mx, - static_cast< qreal >( m_itemMaxSize ) ); + mx = qBound( static_cast< qreal >( m_itemMinSize ), mx, static_cast< qreal >( m_itemMaxSize ) ); qint64 span = m_itemPrefSize; qreal percent = mx / span; @@ -369,34 +364,36 @@ PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) m_itemToResizeNext.size -= m_itemToResize.size - oldsize; _eachItem( m_items, [ this ]( PartitionSplitterItem& item ) -> bool - { - if ( item.status == PartitionSplitterItem::Resizing ) - { - item.size = m_itemToResize.size; - return true; - } - else if ( item.status == PartitionSplitterItem::ResizingNext ) - { - item.size = m_itemToResizeNext.size; - return true; - } - return false; - } ); + { + if ( item.status == PartitionSplitterItem::Resizing ) + { + item.size = m_itemToResize.size; + return true; + } + else if ( item.status == PartitionSplitterItem::ResizingNext ) + { + item.size = m_itemToResizeNext.size; + return true; + } + return false; + } ); repaint(); - emit partitionResized( itemPath, - m_itemToResize.size, - m_itemToResizeNext.size ); + Q_EMIT partitionResized( itemPath, m_itemToResize.size, m_itemToResizeNext.size ); } else { if ( m_itemToResize && m_itemToResizeNext ) { if ( qAbs( event->x() - m_resizeHandleX ) < HANDLE_SNAP ) + { setCursor( Qt::SplitHCursor ); + } else if ( cursor().shape() != Qt::ArrowCursor ) + { setCursor( Qt::ArrowCursor ); + } } } } @@ -412,7 +409,10 @@ PartitionSplitterWidget::mouseReleaseEvent( QMouseEvent* event ) void -PartitionSplitterWidget::drawSection( QPainter* painter, const QRect& rect_, int x, int width, +PartitionSplitterWidget::drawSection( QPainter* painter, + const QRect& rect_, + int x, + int width, const PartitionSplitterItem& item ) { QColor color = item.color; @@ -433,7 +433,9 @@ PartitionSplitterWidget::drawSection( QPainter* painter, const QRect& rect_, int // Draw shade if ( !isFreeSpace ) + { rect.adjust( 2, 2, -2, -2 ); + } QLinearGradient gradient( 0, 0, 0, rectHeight / 2 ); @@ -449,12 +451,12 @@ PartitionSplitterWidget::drawSection( QPainter* painter, const QRect& rect_, int } void -PartitionSplitterWidget::drawResizeHandle( QPainter* painter, - const QRect& rect_, - int x ) +PartitionSplitterWidget::drawResizeHandle( QPainter* painter, const QRect& rect_, int x ) { if ( !m_itemToResize ) + { return; + } painter->setPen( Qt::NoPen ); painter->setBrush( Qt::black ); @@ -462,21 +464,15 @@ PartitionSplitterWidget::drawResizeHandle( QPainter* painter, painter->setRenderHint( QPainter::Antialiasing, true ); - qreal h = VIEW_HEIGHT; // Put the arrow in the center regardless of inner box height + qreal h = VIEW_HEIGHT; // Put the arrow in the center regardless of inner box height int scaleFactor = qRound( height() / static_cast< qreal >( VIEW_HEIGHT ) ); - QList< QPair< qreal, qreal > > arrow_offsets = { - qMakePair( 0, h / 2 - 1 ), - qMakePair( 4, h / 2 - 1 ), - qMakePair( 4, h / 2 - 3 ), - qMakePair( 8, h / 2 ), - qMakePair( 4, h / 2 + 3 ), - qMakePair( 4, h / 2 + 1 ), - qMakePair( 0, h / 2 + 1 ) - }; + QList< QPair< qreal, qreal > > arrow_offsets + = { qMakePair( 0, h / 2 - 1 ), qMakePair( 4, h / 2 - 1 ), qMakePair( 4, h / 2 - 3 ), qMakePair( 8, h / 2 ), + qMakePair( 4, h / 2 + 3 ), qMakePair( 4, h / 2 + 1 ), qMakePair( 0, h / 2 + 1 ) }; for ( int i = 0; i < arrow_offsets.count(); ++i ) { arrow_offsets[ i ] = qMakePair( arrow_offsets[ i ].first * scaleFactor, - ( arrow_offsets[ i ].second - h/2 ) * scaleFactor + h/2 ); + ( arrow_offsets[ i ].second - h / 2 ) * scaleFactor + h / 2 ); } auto p1 = arrow_offsets[ 0 ]; @@ -484,7 +480,9 @@ PartitionSplitterWidget::drawResizeHandle( QPainter* painter, { auto arrow = QPainterPath( QPointF( x + -1 * p1.first, p1.second ) ); for ( auto p : arrow_offsets ) + { arrow.lineTo( x + -1 * p.first + 1, p.second ); + } painter->drawPath( arrow ); } @@ -492,13 +490,15 @@ PartitionSplitterWidget::drawResizeHandle( QPainter* painter, { auto arrow = QPainterPath( QPointF( x + p1.first, p1.second ) ); for ( auto p : arrow_offsets ) + { arrow.lineTo( x + p.first, p.second ); + } painter->drawPath( arrow ); } painter->setRenderHint( QPainter::Antialiasing, false ); painter->setPen( Qt::black ); - painter->drawLine( x, 0, x, int(h) - 1 ); + painter->drawLine( x, 0, x, int( h ) - 1 ); } @@ -520,32 +520,30 @@ PartitionSplitterWidget::drawPartitions( QPainter* painter, const PartitionSplitterItem& item = items[ row ]; qreal width; if ( row < count - 1 ) + { width = totalWidth * ( item.size / total ); + } else - // Make sure we fill the last pixel column + // Make sure we fill the last pixel column + { width = rect.right() - x + 1; + } - drawSection( painter, rect, x, int(width), item ); + drawSection( painter, rect, x, int( width ), item ); if ( !item.children.isEmpty() ) { - QRect subRect( - x + EXTENDED_PARTITION_MARGIN, - rect.y() + EXTENDED_PARTITION_MARGIN, - int(width) - 2 * EXTENDED_PARTITION_MARGIN, - rect.height() - 2 * EXTENDED_PARTITION_MARGIN - ); + QRect subRect( x + EXTENDED_PARTITION_MARGIN, + rect.y() + EXTENDED_PARTITION_MARGIN, + int( width ) - 2 * EXTENDED_PARTITION_MARGIN, + rect.height() - 2 * EXTENDED_PARTITION_MARGIN ); drawPartitions( painter, subRect, item.children ); } // If an item to resize and the following new item both exist, // and this is not the very first partition, // and the partition preceding this one is the item to resize... - if ( m_itemToResize && - m_itemToResizeNext && - row > 0 && - !items[ row - 1 ].isFreeSpace && - !items[ row - 1 ].itemPath.isEmpty() && - items[ row - 1 ].itemPath == m_itemToResize.itemPath ) + if ( m_itemToResize && m_itemToResizeNext && row > 0 && !items[ row - 1 ].isFreeSpace + && !items[ row - 1 ].itemPath.isEmpty() && items[ row - 1 ].itemPath == m_itemToResize.itemPath ) { m_resizeHandleX = x; drawResizeHandle( painter, rect, m_resizeHandleX ); @@ -558,16 +556,20 @@ PartitionSplitterWidget::drawPartitions( QPainter* painter, PartitionSplitterItem PartitionSplitterWidget::_findItem( QVector< PartitionSplitterItem >& items, - std::function< bool ( PartitionSplitterItem& ) > condition ) const + std::function< bool( PartitionSplitterItem& ) > condition ) const { - for ( auto it = items.begin(); it != items.end(); ++it) + for ( auto it = items.begin(); it != items.end(); ++it ) { if ( condition( *it ) ) + { return *it; + } PartitionSplitterItem candidate = _findItem( it->children, condition ); if ( !candidate.isNull() ) + { return candidate; + } } return PartitionSplitterItem::null(); } @@ -575,13 +577,15 @@ PartitionSplitterWidget::_findItem( QVector< PartitionSplitterItem >& items, int PartitionSplitterWidget::_eachItem( QVector< PartitionSplitterItem >& items, - std::function< bool ( PartitionSplitterItem& ) > operation ) const + std::function< bool( PartitionSplitterItem& ) > operation ) const { int opCount = 0; - for ( auto it = items.begin(); it != items.end(); ++it) + for ( auto it = items.begin(); it != items.end(); ++it ) { if ( operation( *it ) ) + { opCount++; + } opCount += _eachItem( it->children, operation ); } @@ -607,7 +611,7 @@ PartitionSplitterWidget::computeItemsVector( const QVector< PartitionSplitterIte PartitionSplitterItem thisItem = originalItems[ row ]; QPair< QVector< PartitionSplitterItem >, qreal > pair = computeItemsVector( thisItem.children ); thisItem.children = pair.first; - thisItem.size = qint64(pair.second); + thisItem.size = qint64( pair.second ); items += thisItem; total += thisItem.size; } @@ -618,10 +622,11 @@ PartitionSplitterWidget::computeItemsVector( const QVector< PartitionSplitterIte qreal adjustedTotal = total; for ( int row = 0; row < items.count(); ++row ) { - if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, - { // force its width to 1%. + if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything, + { + // force its width to 1%. adjustedTotal -= items[ row ].size; - items[ row ].size = qint64(0.01 * total); + items[ row ].size = qint64( 0.01 * total ); adjustedTotal += items[ row ].size; } } diff --git a/src/modules/partition/gui/PartitionSplitterWidget.h b/src/modules/partition/gui/PartitionSplitterWidget.h index ed4f0d112..474ea313e 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.h +++ b/src/modules/partition/gui/PartitionSplitterWidget.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONSPLITTERWIDGET_H @@ -57,10 +48,7 @@ public: void init( Device* dev, bool drawNestedPartitions ); - void setSplitPartition( const QString& path, - qint64 minSize, - qint64 maxSize, - qint64 preferredSize ); + void setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize ); qint64 splitPartitionSize() const; qint64 newPartitionSize() const; @@ -80,20 +68,15 @@ protected: private: void setupItems( const QVector< PartitionSplitterItem >& items ); - void drawPartitions( QPainter* painter, - const QRect& rect, - const QVector< PartitionSplitterItem >& itemList ); - void drawSection( QPainter* painter, const QRect& rect_, int x, int width, - const PartitionSplitterItem& item ); - void drawResizeHandle( QPainter* painter, - const QRect& rect_, - int x ); + void drawPartitions( QPainter* painter, const QRect& rect, const QVector< PartitionSplitterItem >& itemList ); + void drawSection( QPainter* painter, const QRect& rect_, int x, int width, const PartitionSplitterItem& item ); + void drawResizeHandle( QPainter* painter, const QRect& rect_, int x ); PartitionSplitterItem _findItem( QVector< PartitionSplitterItem >& items, - std::function< bool ( PartitionSplitterItem& ) > condition ) const; + std::function< bool( PartitionSplitterItem& ) > condition ) const; int _eachItem( QVector< PartitionSplitterItem >& items, - std::function< bool ( PartitionSplitterItem& ) > operation ) const; + std::function< bool( PartitionSplitterItem& ) > operation ) const; QPair< QVector< PartitionSplitterItem >, qreal > computeItemsVector( const QVector< PartitionSplitterItem >& originalItems ) const; @@ -114,4 +97,4 @@ private: bool m_drawNestedPartitions; }; -#endif // PARTITIONSPLITTERWIDGET_H +#endif // PARTITIONSPLITTERWIDGET_H diff --git a/src/modules/partition/gui/PartitionViewSelectionFilter.h b/src/modules/partition/gui/PartitionViewSelectionFilter.h index 75572a5bb..fc2f5bcb3 100644 --- a/src/modules/partition/gui/PartitionViewSelectionFilter.h +++ b/src/modules/partition/gui/PartitionViewSelectionFilter.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONVIEWSELECTIONFILTER_H @@ -25,4 +16,4 @@ typedef std::function< bool( const QModelIndex& ) > SelectionFilter; -#endif // PARTITIONVIEWSELECTIONFILTER_H +#endif // PARTITIONVIEWSELECTIONFILTER_H diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp deleted file mode 100644 index ed35fafa4..000000000 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ /dev/null @@ -1,722 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2014, Aurélien Gâteau - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2018-2019, 2020, Adriaan de Groot - * Copyright 2019, Collabora Ltd - * Copyright 2020, Anke Boersma . - */ - -#include "gui/PartitionViewStep.h" - -#include "core/DeviceModel.h" -#include "core/KPMHelpers.h" -#include "core/OsproberEntry.h" -#include "core/PartUtils.h" -#include "core/PartitionActions.h" -#include "core/PartitionCoreModule.h" -#include "core/PartitionModel.h" -#include "gui/ChoicePage.h" -#include "gui/PartitionBarsView.h" -#include "gui/PartitionLabelsView.h" -#include "gui/PartitionPage.h" - -#include "Branding.h" -#include "CalamaresVersion.h" -#include "GlobalStorage.h" -#include "Job.h" -#include "JobQueue.h" -#include "utils/CalamaresUtilsGui.h" -#include "utils/Logger.h" -#include "utils/NamedEnum.h" -#include "utils/Retranslator.h" -#include "utils/Variant.h" -#include "widgets/WaitingWidget.h" - - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -PartitionViewStep::PartitionViewStep( QObject* parent ) - : Calamares::ViewStep( parent ) - , m_core( nullptr ) - , m_widget( new QStackedWidget() ) - , m_choicePage( nullptr ) - , m_manualPartitionPage( nullptr ) - , m_requiredStorageGiB( 0.0 ) -{ - m_widget->setContentsMargins( 0, 0, 0, 0 ); - - m_waitingWidget = new WaitingWidget( QString() ); - m_widget->addWidget( m_waitingWidget ); - CALAMARES_RETRANSLATE( m_waitingWidget->setText( tr( "Gathering system information..." ) ); ) - - m_core = new PartitionCoreModule( this ); // Unusable before init is complete! - // We're not done loading, but we need the configuration map first. -} - - -void -PartitionViewStep::initPartitionCoreModule() -{ - Q_ASSERT( m_core ); - m_core->init(); -} - - -void -PartitionViewStep::continueLoading() -{ - Q_ASSERT( !m_choicePage ); - m_choicePage = new ChoicePage( m_swapChoices ); - m_choicePage->init( m_core ); - m_widget->addWidget( m_choicePage ); - - // Instantiate the manual partitioning page as needed. - // - Q_ASSERT( !m_manualPartitionPage ); - // m_manualPartitionPage = new PartitionPage( m_core ); - // m_widget->addWidget( m_manualPartitionPage ); - - m_widget->removeWidget( m_waitingWidget ); - m_waitingWidget->deleteLater(); - m_waitingWidget = nullptr; - - connect( m_core, &PartitionCoreModule::hasRootMountPointChanged, this, &PartitionViewStep::nextStatusChanged ); - connect( m_choicePage, &ChoicePage::nextStatusChanged, this, &PartitionViewStep::nextStatusChanged ); -} - - -PartitionViewStep::~PartitionViewStep() -{ - if ( m_choicePage && m_choicePage->parent() == nullptr ) - { - m_choicePage->deleteLater(); - } - if ( m_manualPartitionPage && m_manualPartitionPage->parent() == nullptr ) - { - m_manualPartitionPage->deleteLater(); - } -} - - -QString -PartitionViewStep::prettyName() const -{ - return tr( "Partitions" ); -} - - -QWidget* -PartitionViewStep::widget() -{ - return m_widget; -} - - -QWidget* -PartitionViewStep::createSummaryWidget() const -{ - QWidget* widget = new QWidget; - QVBoxLayout* mainLayout = new QVBoxLayout; - widget->setLayout( mainLayout ); - mainLayout->setMargin( 0 ); - - ChoicePage::InstallChoice choice = m_choicePage->currentChoice(); - - QFormLayout* formLayout = new QFormLayout( widget ); - const int MARGIN = CalamaresUtils::defaultFontHeight() / 2; - formLayout->setContentsMargins( MARGIN, 0, MARGIN, MARGIN ); - mainLayout->addLayout( formLayout ); - - QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); - if ( list.length() > 1 ) // There are changes on more than one disk - { - //NOTE: all of this should only happen when Manual partitioning is active. - // Any other choice should result in a list.length() == 1. - QLabel* modeLabel = new QLabel; - formLayout->addRow( modeLabel ); - QString modeText; - switch ( choice ) - { - case ChoicePage::Alongside: - modeText = tr( "Install %1 alongside another operating system." ) - .arg( *Calamares::Branding::ShortVersionedName ); - break; - case ChoicePage::Erase: - modeText - = tr( "Erase disk and install %1." ).arg( *Calamares::Branding::ShortVersionedName ); - break; - case ChoicePage::Replace: - modeText - = tr( "Replace a partition with %1." ).arg( *Calamares::Branding::ShortVersionedName ); - break; - case ChoicePage::NoChoice: - case ChoicePage::Manual: - modeText = tr( "Manual partitioning." ); - } - modeLabel->setText( modeText ); - } - for ( const auto& info : list ) - { - QLabel* diskInfoLabel = new QLabel; - if ( list.length() == 1 ) // this is the only disk preview - { - QString modeText; - switch ( choice ) - { - case ChoicePage::Alongside: - modeText = tr( "Install %1 alongside another operating system on disk " - "%2 (%3)." ) - .arg( *Calamares::Branding::ShortVersionedName ) - .arg( info.deviceNode ) - .arg( info.deviceName ); - break; - case ChoicePage::Erase: - modeText = tr( "Erase disk %2 (%3) and install %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) - .arg( info.deviceNode ) - .arg( info.deviceName ); - break; - case ChoicePage::Replace: - modeText = tr( "Replace a partition on disk %2 (%3) with %1." ) - .arg( *Calamares::Branding::ShortVersionedName ) - .arg( info.deviceNode ) - .arg( info.deviceName ); - break; - case ChoicePage::NoChoice: - case ChoicePage::Manual: - modeText = tr( "Manual partitioning on disk %1 (%2)." ) - .arg( info.deviceNode ) - .arg( info.deviceName ); - } - diskInfoLabel->setText( modeText ); - } - else // multiple disk previews! - { - diskInfoLabel->setText( - tr( "Disk %1 (%2)" ).arg( info.deviceNode ).arg( info.deviceName ) ); - } - formLayout->addRow( diskInfoLabel ); - - PartitionBarsView* preview; - PartitionLabelsView* previewLabels; - QVBoxLayout* field; - - PartitionBarsView::NestedPartitionsMode mode - = Calamares::JobQueue::instance()->globalStorage()->value( "drawNestedPartitions" ).toBool() - ? PartitionBarsView::DrawNestedPartitions - : PartitionBarsView::NoNestedPartitions; - preview = new PartitionBarsView; - preview->setNestedPartitionsMode( mode ); - previewLabels = new PartitionLabelsView; - previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); - preview->setModel( info.partitionModelBefore ); - previewLabels->setModel( info.partitionModelBefore ); - preview->setSelectionMode( QAbstractItemView::NoSelection ); - previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); - info.partitionModelBefore->setParent( widget ); - field = new QVBoxLayout; - CalamaresUtils::unmarginLayout( field ); - field->setSpacing( 6 ); - field->addWidget( preview ); - field->addWidget( previewLabels ); - formLayout->addRow( tr( "Current:" ), field ); - - preview = new PartitionBarsView; - preview->setNestedPartitionsMode( mode ); - previewLabels = new PartitionLabelsView; - previewLabels->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); - preview->setModel( info.partitionModelAfter ); - previewLabels->setModel( info.partitionModelAfter ); - preview->setSelectionMode( QAbstractItemView::NoSelection ); - previewLabels->setSelectionMode( QAbstractItemView::NoSelection ); - previewLabels->setCustomNewRootLabel( *Calamares::Branding::BootloaderEntryName ); - info.partitionModelAfter->setParent( widget ); - field = new QVBoxLayout; - CalamaresUtils::unmarginLayout( field ); - field->setSpacing( 6 ); - field->addWidget( preview ); - field->addWidget( previewLabels ); - formLayout->addRow( tr( "After:" ), field ); - } - QStringList jobsLines; - foreach ( const Calamares::job_ptr& job, jobs() ) - { - if ( !job->prettyDescription().isEmpty() ) - { - jobsLines.append( job->prettyDescription() ); - } - } - if ( !jobsLines.isEmpty() ) - { - QLabel* jobsLabel = new QLabel( widget ); - mainLayout->addWidget( jobsLabel ); - jobsLabel->setText( jobsLines.join( "
" ) ); - jobsLabel->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); - QPalette pal; - pal.setColor( QPalette::Background, pal.window().color().lighter( 108 ) ); - jobsLabel->setAutoFillBackground( true ); - jobsLabel->setPalette( pal ); - } - return widget; -} - - -void -PartitionViewStep::next() -{ - if ( m_choicePage == m_widget->currentWidget() ) - { - if ( m_choicePage->currentChoice() == ChoicePage::Manual ) - { - if ( !m_manualPartitionPage ) - { - m_manualPartitionPage = new PartitionPage( m_core ); - m_widget->addWidget( m_manualPartitionPage ); - } - - m_widget->setCurrentWidget( m_manualPartitionPage ); - m_manualPartitionPage->selectDeviceByIndex( m_choicePage->lastSelectedDeviceIndex() ); - if ( m_core->isDirty() ) - { - m_manualPartitionPage->onRevertClicked(); - } - } - cDebug() << "Choice applied: " << m_choicePage->currentChoice(); - } -} - - -void -PartitionViewStep::back() -{ - if ( m_widget->currentWidget() != m_choicePage ) - { - m_widget->setCurrentWidget( m_choicePage ); - m_choicePage->setLastSelectedDeviceIndex( m_manualPartitionPage->selectedDeviceIndex() ); - - if ( m_manualPartitionPage ) - { - m_manualPartitionPage->deleteLater(); - m_manualPartitionPage = nullptr; - } - } -} - - -bool -PartitionViewStep::isNextEnabled() const -{ - if ( m_choicePage && m_widget->currentWidget() == m_choicePage ) - { - return m_choicePage->isNextEnabled(); - } - - if ( m_manualPartitionPage && m_widget->currentWidget() == m_manualPartitionPage ) - { - return m_core->hasRootMountPoint(); - } - - return false; -} - - -bool -PartitionViewStep::isBackEnabled() const -{ - return true; -} - - -bool -PartitionViewStep::isAtBeginning() const -{ - if ( m_widget->currentWidget() != m_choicePage ) - { - return false; - } - return true; -} - - -bool -PartitionViewStep::isAtEnd() const -{ - if ( m_widget->currentWidget() == m_choicePage ) - { - if ( m_choicePage->currentChoice() == ChoicePage::Erase || m_choicePage->currentChoice() == ChoicePage::Replace - || m_choicePage->currentChoice() == ChoicePage::Alongside ) - { - return true; - } - return false; - } - return true; -} - - -void -PartitionViewStep::onActivate() -{ - // If there's no setting (e.g. from the welcome page) for required storage - // then use ours, if it was set. - auto* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; - if ( m_requiredStorageGiB >= 0.0 && gs && !gs->contains( "requiredStorageGiB" ) ) - { - gs->insert( "requiredStorageGiB", m_requiredStorageGiB ); - } - - // if we're coming back to PVS from the next VS - if ( m_widget->currentWidget() == m_choicePage && m_choicePage->currentChoice() == ChoicePage::Alongside ) - { - m_choicePage->applyActionChoice( ChoicePage::Alongside ); - // m_choicePage->reset(); - //FIXME: ReplaceWidget should be reset maybe? - } -} - - -void -PartitionViewStep::onLeave() -{ - if ( m_widget->currentWidget() == m_choicePage ) - { - m_choicePage->onLeave(); - return; - } - - if ( m_widget->currentWidget() == m_manualPartitionPage ) - { - if ( PartUtils::isEfiSystem() ) - { - QString espMountPoint - = Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); - Partition* esp = m_core->findPartitionByMountPoint( espMountPoint ); - - QString message; - QString description; - if ( !esp ) - { - message = tr( "No EFI system partition configured" ); - description = tr( "An EFI system partition is necessary to start %1." - "

" - "To configure an EFI system partition, go back and " - "select or create a FAT32 filesystem with the " - "esp flag enabled and mount point " - "%2.

" - "You can continue without setting up an EFI system " - "partition but your system may fail to start." ) - .arg( *Calamares::Branding::ShortProductName ) - .arg( espMountPoint ); - } - else if ( esp && !PartUtils::isEfiBootable( esp ) ) - { - message = tr( "EFI system partition flag not set" ); - description = tr( "An EFI system partition is necessary to start %1." - "

" - "A partition was configured with mount point " - "%2 but its esp " - "flag is not set.
" - "To set the flag, go back and edit the partition." - "

" - "You can continue without setting the flag but your " - "system may fail to start." ) - .arg( *Calamares::Branding::ShortProductName ) - .arg( espMountPoint ); - } - - if ( !message.isEmpty() ) - { - cWarning() << message; - QMessageBox::warning( m_manualPartitionPage, message, description ); - } - } - else - { - - cDebug() << "device: BIOS"; - // TODO: this *always* warns, which might be annoying, so it'd be - // best to find a way to detect that bios_grub partition. - - QString message = tr( "Option to use GPT on BIOS" ); - QString description = tr( "A GPT partition table is the best option for all " - "systems. This installer supports such a setup for " - "BIOS systems too." - "

" - "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 " - "bios_grub flag enabled.

" - "An unformatted 8 MB partition is necessary " - "to start %1 on a BIOS system with GPT." ) - .arg( *Calamares::Branding::ShortProductName ); - - QMessageBox::information( m_manualPartitionPage, message, description ); - } - - Partition* root_p = m_core->findPartitionByMountPoint( "/" ); - Partition* boot_p = m_core->findPartitionByMountPoint( "/boot" ); - - if ( root_p and boot_p ) - { - QString message; - QString description; - - // If the root partition is encrypted, and there's a separate boot - // partition which is not encrypted - if ( root_p->fileSystem().type() == FileSystem::Luks && boot_p->fileSystem().type() != FileSystem::Luks ) - { - message = tr( "Boot partition not encrypted" ); - description = tr( "A separate boot partition was set up together with " - "an encrypted root partition, but the boot partition " - "is not encrypted." - "

" - "There are security concerns with this kind of " - "setup, because important system files are kept " - "on an unencrypted partition.
" - "You may continue if you wish, but filesystem " - "unlocking will happen later during system startup." - "
To encrypt the boot partition, go back and " - "recreate it, selecting Encrypt " - "in the partition creation window." ); - - QMessageBox::warning( m_manualPartitionPage, message, description ); - } - } - } -} - - -void -PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) -{ - // Copy the efiSystemPartition setting to the global storage. It is needed not only in - // the EraseDiskPage, but also in the bootloader configuration modules (grub, bootloader). - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QString efiSP = CalamaresUtils::getString( configurationMap, "efiSystemPartition" ); - if ( efiSP.isEmpty() ) - { - efiSP = QStringLiteral( "/boot/efi" ); - } - gs->insert( "efiSystemPartition", efiSP ); - - // Set up firmwareType global storage entry. This is used, e.g. by the bootloader module. - QString firmwareType( PartUtils::isEfiSystem() ? QStringLiteral( "efi" ) : QStringLiteral( "bios" ) ); - cDebug() << "Setting firmwareType to" << firmwareType; - gs->insert( "firmwareType", firmwareType ); - - // Read and parse key efiSystemPartitionSize - if ( configurationMap.contains( "efiSystemPartitionSize" ) ) - { - gs->insert( "efiSystemPartitionSize", CalamaresUtils::getString( configurationMap, "efiSystemPartitionSize" ) ); - } - - // SWAP SETTINGS - // - // This is a bit convoluted because there's legacy settings to handle as well - // as the new-style list of choices, with mapping back-and-forth. - if ( configurationMap.contains( "userSwapChoices" ) - && ( configurationMap.contains( "ensureSuspendToDisk" ) || configurationMap.contains( "neverCreateSwap" ) ) ) - { - cError() << "Partition-module configuration mixes old- and new-style swap settings."; - } - - if ( configurationMap.contains( "ensureSuspendToDisk" ) ) - { - cWarning() << "Partition-module setting *ensureSuspendToDisk* is deprecated."; - } - bool ensureSuspendToDisk = CalamaresUtils::getBool( configurationMap, "ensureSuspendToDisk", true ); - - if ( configurationMap.contains( "neverCreateSwap" ) ) - { - cWarning() << "Partition-module setting *neverCreateSwap* is deprecated."; - } - bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false ); - - QSet< PartitionActions::Choices::SwapChoice > choices; // Available swap choices - if ( configurationMap.contains( "userSwapChoices" ) ) - { - // We've already warned about overlapping settings with the - // legacy *ensureSuspendToDisk* and *neverCreateSwap*. - QStringList l = configurationMap[ "userSwapChoices" ].toStringList(); - - for ( const auto& item : l ) - { - bool ok = false; - auto v = PartitionActions::Choices::nameToChoice( item, ok ); - if ( ok ) - { - choices.insert( v ); - } - } - - if ( choices.isEmpty() ) - { - cWarning() << "Partition-module configuration for *userSwapChoices* is empty:" << l; - choices.insert( PartitionActions::Choices::SwapChoice::FullSwap ); - } - - // suspend if it's one of the possible choices; suppress swap only if it's - // the **only** choice available. - ensureSuspendToDisk = choices.contains( PartitionActions::Choices::SwapChoice::FullSwap ); - neverCreateSwap = ( choices.count() == 1 ) && choices.contains( PartitionActions::Choices::SwapChoice::NoSwap ); - } - else - { - // Convert the legacy settings into a single setting for now. - if ( neverCreateSwap ) - { - choices.insert( PartitionActions::Choices::SwapChoice::NoSwap ); - } - else if ( ensureSuspendToDisk ) - { - choices.insert( PartitionActions::Choices::SwapChoice::FullSwap ); - } - else - { - choices.insert( PartitionActions::Choices::SwapChoice::SmallSwap ); - } - } - - // Not all are supported right now // FIXME - static const char unsupportedSetting[] = "Partition-module does not support *userSwapChoices* setting"; - -#define COMPLAIN_UNSUPPORTED( x ) \ - if ( choices.contains( x ) ) \ - { \ - cWarning() << unsupportedSetting << PartitionActions::Choices::choiceToName( x ); \ - choices.remove( x ); \ - } - - COMPLAIN_UNSUPPORTED( PartitionActions::Choices::SwapChoice::SwapFile ) - COMPLAIN_UNSUPPORTED( PartitionActions::Choices::SwapChoice::ReuseSwap ) -#undef COMPLAIN_UNSUPPORTED - - m_swapChoices = choices; - - // Settings that overlap with the Welcome module - m_requiredStorageGiB = CalamaresUtils::getDouble( configurationMap, "requiredStorage", -1.0 ); - - // These gs settings seem to be unused (in upstream Calamares) outside of - // the partition module itself. - gs->insert( "ensureSuspendToDisk", ensureSuspendToDisk ); - gs->insert( "neverCreateSwap", neverCreateSwap ); - - // OTHER SETTINGS - // - gs->insert( "drawNestedPartitions", CalamaresUtils::getBool( configurationMap, "drawNestedPartitions", false ) ); - gs->insert( "alwaysShowPartitionLabels", - CalamaresUtils::getBool( configurationMap, "alwaysShowPartitionLabels", true ) ); - gs->insert( "enableLuksAutomatedPartitioning", - CalamaresUtils::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) ); - gs->insert( "allowManualPartitioning", - CalamaresUtils::getBool( configurationMap, "allowManualPartitioning", true ) ); - - // The defaultFileSystemType setting needs a bit more processing, - // as we want to cover various cases (such as different cases) - QString fsName = CalamaresUtils::getString( configurationMap, "defaultFileSystemType" ); - FileSystem::Type fsType; - if ( fsName.isEmpty() ) - { - cWarning() << "Partition-module setting *defaultFileSystemType* is missing, will use ext4"; - } - QString fsRealName = PartUtils::findFS( fsName, &fsType ); - if ( fsRealName == fsName ) - { - cDebug() << "Partition-module setting *defaultFileSystemType*" << fsRealName; - } - else if ( fsType != FileSystem::Unknown ) - { - cWarning() << "Partition-module setting *defaultFileSystemType* changed" << fsRealName; - } - else - { - cWarning() << "Partition-module setting *defaultFileSystemType* is bad (" << fsName << ") using" << fsRealName - << "instead."; - } - gs->insert( "defaultFileSystemType", fsRealName ); - - - // Now that we have the config, we load the PartitionCoreModule in the background - // because it could take a while. Then when it's done, we can set up the widgets - // and remove the spinner. - m_future = new QFutureWatcher< void >(); - connect( m_future, &QFutureWatcher< void >::finished, this, [this] { - continueLoading(); - this->m_future->deleteLater(); - this->m_future = nullptr; - } ); - - QFuture< void > future = QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); - m_future->setFuture( future ); - - if ( configurationMap.contains( "partitionLayout" ) ) - { - m_core->initLayout( configurationMap.values( "partitionLayout" ).at( 0 ).toList() ); - } - else - { - m_core->initLayout(); - } -} - - -Calamares::JobList -PartitionViewStep::jobs() const -{ - return m_core->jobs(); -} - -Calamares::RequirementsList -PartitionViewStep::checkRequirements() -{ - if ( m_future ) - { - m_future->waitForFinished(); - } - - Calamares::RequirementsList l; - l.append( { - QLatin1String( "partitions" ), - [] { return tr( "has at least one disk device available." ); }, - [] { return tr( "There are no partitions to install on." ); }, - m_core->deviceModel()->rowCount() > 0, // satisfied -#ifdef DEBUG_PARTITION_UNSAFE - false // optional -#else - true // required -#endif - } ); - - return l; -} - - -CALAMARES_PLUGIN_FACTORY_DEFINITION( PartitionViewStepFactory, registerPlugin< PartitionViewStep >(); ) diff --git a/src/modules/partition/gui/PrettyRadioButton.h b/src/modules/partition/gui/PrettyRadioButton.h deleted file mode 100644 index c88c00728..000000000 --- a/src/modules/partition/gui/PrettyRadioButton.h +++ /dev/null @@ -1,67 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2014, Teo Mrnjavac - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#ifndef PRETTYRADIOBUTTON_H -#define PRETTYRADIOBUTTON_H - -#include - -class ClickableLabel; -class QComboBox; -class QGridLayout; -class QHBoxLayout; - -/** @brief A radio button with fancy label next to it. - * - * The radio button itself can be retrieved with buttonWidget(), - * and the whole behaves a lot like a label. Extra options can be - * added to the display (options are hidden when the button is - * not selected) with addOptionsComboBox(). - */ -class PrettyRadioButton : public QWidget -{ - Q_OBJECT -public: - explicit PrettyRadioButton( QWidget* parent = nullptr ); - virtual ~PrettyRadioButton() {} - - virtual void setText( const QString& text ); - - virtual void setIconSize( const QSize& size ); - - virtual void setIcon( const QIcon& icon ); - - virtual QSize iconSize() const; - - virtual QRadioButton* buttonWidget() const; - - /** @brief Add an options drop-down to this button. */ - void addOptionsComboBox( QComboBox* ); - -protected slots: - /// Options are hidden when the radio button is off - void toggleOptions( bool checked ); - -protected: - ClickableLabel* m_label; - QRadioButton* m_radio; - QGridLayout* m_mainLayout; - QHBoxLayout* m_optionsLayout; -}; - -#endif // PRETTYRADIOBUTTON_H diff --git a/src/modules/partition/gui/ReplaceWidget.cpp b/src/modules/partition/gui/ReplaceWidget.cpp index 728b33c36..76f9ff963 100644 --- a/src/modules/partition/gui/ReplaceWidget.cpp +++ b/src/modules/partition/gui/ReplaceWidget.cpp @@ -1,29 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2014, Aurélien Gâteau - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ReplaceWidget.h" #include "ui_ReplaceWidget.h" #include "core/DeviceModel.h" -#include "core/PartitionCoreModule.h" #include "core/PartitionActions.h" +#include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "Branding.h" @@ -41,9 +32,7 @@ using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; -ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, - QComboBox* devicesComboBox, - QWidget* parent ) +ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_ReplaceWidget ) , m_core( core ) @@ -57,20 +46,16 @@ ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, m_ui->bootStatusLabel->clear(); updateFromCurrentDevice( devicesComboBox ); - connect( devicesComboBox, &QComboBox::currentTextChanged, - this, [=]( const QString& /* text */ ) - { - updateFromCurrentDevice( devicesComboBox ); - } ); + connect( devicesComboBox, + &QComboBox::currentTextChanged, + this, + [ = ]( const QString& /* text */ ) { updateFromCurrentDevice( devicesComboBox ); } ); - CALAMARES_RETRANSLATE( - onPartitionSelected(); - ) + CALAMARES_RETRANSLATE( onPartitionSelected(); ); } -ReplaceWidget::~ReplaceWidget() -{} +ReplaceWidget::~ReplaceWidget() {} bool @@ -100,24 +85,25 @@ ReplaceWidget::applyChanges() { Device* dev = model->device(); - PartitionActions::doReplacePartition( - m_core, dev, partition, - { gs->value( "defaultFileSystemType" ).toString(), QString() } ); + PartitionActions::doReplacePartition( m_core, + dev, + partition, + { gs->value( "defaultPartitionTableType" ).toString(), + gs->value( "defaultFileSystemType" ).toString(), + QString() } ); if ( m_isEfi ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 1 ) { - PartitionInfo::setMountPoint( - efiSystemPartitions.first(), - gs->value( "efiSystemPartition" ).toString() ); + PartitionInfo::setMountPoint( efiSystemPartitions.first(), + gs->value( "efiSystemPartition" ).toString() ); } else if ( efiSystemPartitions.count() > 1 ) { - PartitionInfo::setMountPoint( - efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ), - gs->value( "efiSystemPartition" ).toString() ); + PartitionInfo::setMountPoint( efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ), + gs->value( "efiSystemPartition" ).toString() ); } } @@ -131,38 +117,37 @@ void ReplaceWidget::onPartitionSelected() { if ( Calamares::JobQueue::instance()->globalStorage()->value( "firmwareType" ) == "efi" ) + { m_isEfi = true; + } + const auto* branding = Calamares::Branding::instance(); if ( m_ui->partitionTreeView->currentIndex() == QModelIndex() ) { updateStatus( CalamaresUtils::PartitionPartition, tr( "Select where to install %1.
" "Warning: this will delete all files " "on the selected partition." ) - .arg( *Calamares::Branding::VersionedName ) ); + .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } bool ok = false; - double requiredSpaceB = Calamares::JobQueue::instance() - ->globalStorage() - ->value( "requiredStorageGiB" ) - .toDouble( &ok ) * 1024 * 1024 * 1024; + double requiredSpaceB + = Calamares::JobQueue::instance()->globalStorage()->value( "requiredStorageGiB" ).toDouble( &ok ) * 1024 * 1024 + * 1024; PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() ); if ( model && ok ) { - const QStringList osproberLines = Calamares::JobQueue::instance() - ->globalStorage() - ->value( "osproberLines" ).toStringList(); + const QStringList osproberLines + = Calamares::JobQueue::instance()->globalStorage()->value( "osproberLines" ).toStringList(); Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); - if ( !partition || - partition->state() != KPM_PARTITION_STATE(None) ) + if ( !partition || partition->state() != KPM_PARTITION_STATE( None ) ) { - updateStatus( CalamaresUtils::Fail, - tr( "The selected item does not appear to be a valid partition." ) ); + updateStatus( CalamaresUtils::Fail, tr( "The selected item does not appear to be a valid partition." ) ); setNextEnabled( false ); return; } @@ -172,7 +157,7 @@ ReplaceWidget::onPartitionSelected() updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on empty space. Please select an " "existing partition." ) - .arg( *Calamares::Branding::VersionedName ) ); + .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } @@ -182,7 +167,7 @@ ReplaceWidget::onPartitionSelected() updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on an extended partition. Please select an " "existing primary or logical partition." ) - .arg( *Calamares::Branding::VersionedName ) ); + .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } @@ -190,15 +175,14 @@ ReplaceWidget::onPartitionSelected() if ( partition->partitionPath().isEmpty() ) { updateStatus( CalamaresUtils::Fail, - tr( "%1 cannot be installed on this partition." ) - .arg( *Calamares::Branding::VersionedName ) ); + tr( "%1 cannot be installed on this partition." ).arg( branding->versionedName() ) ); setNextEnabled( false ); return; } QString fsNameForUser = userVisibleFS( partition->fileSystem() ); QString prettyName = tr( "Data partition (%1)" ).arg( fsNameForUser ); - for ( const QString& line : osproberLines ) + for ( const auto& line : osproberLines ) { QStringList lineColumns = line.split( ':' ); @@ -207,36 +191,39 @@ ReplaceWidget::onPartitionSelected() { QString osName; if ( !lineColumns.value( 1 ).simplified().isEmpty() ) + { osName = lineColumns.value( 1 ).simplified(); + } else if ( !lineColumns.value( 2 ).simplified().isEmpty() ) + { osName = lineColumns.value( 2 ).simplified(); + } if ( osName.isEmpty() ) { - prettyName = tr( "Unknown system partition (%1)" ) - .arg( fsNameForUser ); + prettyName = tr( "Unknown system partition (%1)" ).arg( fsNameForUser ); } else { - prettyName = tr ( "%1 system partition (%2)" ) - .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) - .arg( fsNameForUser ); + prettyName = tr( "%1 system partition (%2)" ) + .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) + .arg( fsNameForUser ); } break; } } - if ( partition->capacity() < requiredSpaceB ) + // The loss of precision is ok; we're not going to fall over from a single byte + if ( static_cast< double >( partition->capacity() ) < requiredSpaceB ) { updateStatus( CalamaresUtils::Fail, tr( "%4

" "The partition %1 is too small for %2. Please select a partition " "with capacity at least %3 GiB." ) - .arg( partition->partitionPath() ) - .arg( *Calamares::Branding::VersionedName ) - .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), - 0, 'f', 1 ) - .arg( prettyName ) ); + .arg( partition->partitionPath() ) + .arg( branding->versionedName() ) + .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), 0, 'f', 1 ) + .arg( prettyName ) ); setNextEnabled( false ); return; } @@ -256,8 +243,8 @@ ReplaceWidget::onPartitionSelected() "An EFI system partition cannot be found anywhere " "on this system. Please go back and use manual " "partitioning to set up %1." ) - .arg( *Calamares::Branding::ShortProductName ) - .arg( prettyName ) ); + .arg( branding->shortProductName() ) + .arg( prettyName ) ); setNextEnabled( false ); } else if ( efiSystemPartitions.count() == 1 ) @@ -266,15 +253,14 @@ ReplaceWidget::onPartitionSelected() tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " - "%2 will be lost.") - .arg( *Calamares::Branding::VersionedName ) - .arg( partition->partitionPath() ) - .arg( prettyName ) ); + "%2 will be lost." ) + .arg( branding->versionedName() ) + .arg( partition->partitionPath() ) + .arg( prettyName ) ); m_ui->bootStatusLabel->show(); - m_ui->bootStatusLabel->setText( - tr( "The EFI system partition at %1 will be used for starting %2." ) - .arg( efiSystemPartitions.first()->partitionPath() ) - .arg( *Calamares::Branding::ShortProductName ) ); + m_ui->bootStatusLabel->setText( tr( "The EFI system partition at %1 will be used for starting %2." ) + .arg( efiSystemPartitions.first()->partitionPath() ) + .arg( branding->shortProductName() ) ); setNextEnabled( true ); } else @@ -283,10 +269,10 @@ ReplaceWidget::onPartitionSelected() tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " - "%2 will be lost.") - .arg( *Calamares::Branding::VersionedName ) - .arg( partition->partitionPath() ) - .arg( prettyName ) ); + "%2 will be lost." ) + .arg( branding->versionedName() ) + .arg( partition->partitionPath() ) + .arg( prettyName ) ); m_ui->bootStatusLabel->show(); m_ui->bootStatusLabel->setText( tr( "EFI system partition:" ) ); m_ui->bootComboBox->show(); @@ -294,9 +280,10 @@ ReplaceWidget::onPartitionSelected() { Partition* efiPartition = efiSystemPartitions.at( i ); m_ui->bootComboBox->addItem( efiPartition->partitionPath(), i ); - if ( efiPartition->devicePath() == partition->devicePath() && - efiPartition->number() == 1 ) + if ( efiPartition->devicePath() == partition->devicePath() && efiPartition->number() == 1 ) + { m_ui->bootComboBox->setCurrentIndex( i ); + } } setNextEnabled( true ); } @@ -307,10 +294,10 @@ ReplaceWidget::onPartitionSelected() tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " - "%2 will be lost.") - .arg( *Calamares::Branding::VersionedName ) - .arg( partition->partitionPath() ) - .arg( prettyName ) ); + "%2 will be lost." ) + .arg( branding->versionedName() ) + .arg( partition->partitionPath() ) + .arg( prettyName ) ); setNextEnabled( true ); } } @@ -321,10 +308,12 @@ void ReplaceWidget::setNextEnabled( bool enabled ) { if ( enabled == m_nextEnabled ) + { return; + } m_nextEnabled = enabled; - emit nextStatusChanged( enabled ); + Q_EMIT nextStatusChanged( enabled ); } @@ -332,27 +321,29 @@ void ReplaceWidget::updateStatus( CalamaresUtils::ImageType imageType, const QString& text ) { int iconSize = CalamaresUtils::defaultFontHeight() * 6; - m_ui->selectedIconLabel->setPixmap( CalamaresUtils::defaultPixmap( imageType, - CalamaresUtils::Original, - QSize( iconSize, iconSize ) ) ); + m_ui->selectedIconLabel->setPixmap( + CalamaresUtils::defaultPixmap( imageType, CalamaresUtils::Original, QSize( iconSize, iconSize ) ) ); m_ui->selectedIconLabel->setFixedHeight( iconSize ); m_ui->selectedStatusLabel->setText( text ); } - void ReplaceWidget::updateFromCurrentDevice( QComboBox* devicesComboBox ) { QModelIndex index = m_core->deviceModel()->index( devicesComboBox->currentIndex(), 0 ); if ( !index.isValid() ) + { return; + } Device* device = m_core->deviceModel()->deviceForIndex( index ); QAbstractItemModel* oldModel = m_ui->partitionTreeView->model(); if ( oldModel ) + { disconnect( oldModel, nullptr, this, nullptr ); + } PartitionModel* model = m_core->partitionModelForDevice( device ); m_ui->partitionTreeView->setModel( model ); @@ -367,8 +358,10 @@ ReplaceWidget::updateFromCurrentDevice( QComboBox* devicesComboBox ) //updateButtons(); // Establish connection here because selection model is destroyed when // model changes - connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentRowChanged, - this, &ReplaceWidget::onPartitionViewActivated ); + connect( m_ui->partitionTreeView->selectionModel(), + &QItemSelectionModel::currentRowChanged, + this, + &ReplaceWidget::onPartitionViewActivated ); connect( model, &QAbstractItemModel::modelReset, this, &ReplaceWidget::onPartitionModelReset ); } @@ -379,7 +372,9 @@ ReplaceWidget::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) + { return; + } const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); diff --git a/src/modules/partition/gui/ReplaceWidget.h b/src/modules/partition/gui/ReplaceWidget.h index c09c604b1..fbd19b429 100644 --- a/src/modules/partition/gui/ReplaceWidget.h +++ b/src/modules/partition/gui/ReplaceWidget.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef REPLACEWIDGET_H @@ -23,8 +14,8 @@ #include "utils/CalamaresUtilsGui.h" -#include #include +#include class Ui_ReplaceWidget; class QComboBox; @@ -35,10 +26,8 @@ class ReplaceWidget : public QWidget { Q_OBJECT public: - explicit ReplaceWidget( PartitionCoreModule* core, - QComboBox* devicesComboBox, - QWidget* parent = nullptr ); - virtual ~ReplaceWidget(); + explicit ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent = nullptr ); + virtual ~ReplaceWidget() override; bool isNextEnabled() const; @@ -69,4 +58,4 @@ private: void onPartitionModelReset(); }; -#endif // REPLACEWIDGET_H +#endif // REPLACEWIDGET_H diff --git a/src/modules/partition/gui/ReplaceWidget.ui b/src/modules/partition/gui/ReplaceWidget.ui index 3f8f604b4..14f520f49 100644 --- a/src/modules/partition/gui/ReplaceWidget.ui +++ b/src/modules/partition/gui/ReplaceWidget.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + ReplaceWidget diff --git a/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp b/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp index 2de999360..d0103954d 100644 --- a/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp +++ b/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizeVolumeGroupDialog.h" @@ -29,7 +20,7 @@ #include #include -ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice *device, +ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice* device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ) @@ -39,12 +30,17 @@ ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice *device, setWindowTitle( tr( "Resize Volume Group" ) ); for ( int i = 0; i < pvList()->count(); i++ ) - pvList()->item(i)->setCheckState( Qt::Checked ); + { + pvList()->item( i )->setCheckState( Qt::Checked ); + } for ( const Partition* p : availablePVs ) + { pvList()->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); + } - peSize()->setValue( static_cast( device->peSize() / Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB) ) ); + peSize()->setValue( + static_cast< int >( device->peSize() / Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) ) ); vgName()->setEnabled( false ); peSize()->setEnabled( false ); diff --git a/src/modules/partition/gui/ResizeVolumeGroupDialog.h b/src/modules/partition/gui/ResizeVolumeGroupDialog.h index bc088de4d..7b8ecf6d6 100644 --- a/src/modules/partition/gui/ResizeVolumeGroupDialog.h +++ b/src/modules/partition/gui/ResizeVolumeGroupDialog.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEVOLUMEGROUPDIALOG_H @@ -30,7 +21,7 @@ class ResizeVolumeGroupDialog : public VolumeGroupBaseDialog public: using PartitionVector = QVector< const Partition* >; - ResizeVolumeGroupDialog( LvmDevice *device, + ResizeVolumeGroupDialog( LvmDevice* device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ); @@ -41,4 +32,4 @@ private: PartitionVector& m_selectedPVs; }; -#endif // RESIZEVOLUMEGROUPDIALOG_H +#endif // RESIZEVOLUMEGROUPDIALOG_H diff --git a/src/modules/partition/gui/ScanningDialog.cpp b/src/modules/partition/gui/ScanningDialog.cpp index 85479fbb3..56133e21f 100644 --- a/src/modules/partition/gui/ScanningDialog.cpp +++ b/src/modules/partition/gui/ScanningDialog.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ScanningDialog.h" @@ -22,14 +13,12 @@ #include "3rdparty/waitingspinnerwidget.h" #include -#include #include +#include #include -ScanningDialog::ScanningDialog( const QString& text, - const QString& windowTitle, - QWidget* parent ) +ScanningDialog::ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent ) : QDialog( parent ) { setModal( true ); @@ -42,8 +31,7 @@ ScanningDialog::ScanningDialog( const QString& text, dialogLayout->addWidget( spinner ); spinner->start(); - QLabel* rescanningLabel = new QLabel( text, - this ); + QLabel* rescanningLabel = new QLabel( text, this ); dialogLayout->addWidget( rescanningLabel ); } @@ -55,40 +43,34 @@ ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent ) { - ScanningDialog* theDialog = - new ScanningDialog( text, - windowTitle, - parent ); + ScanningDialog* theDialog = new ScanningDialog( text, windowTitle, parent ); theDialog->show(); QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); - connect( watcher, &QFutureWatcher< void >::finished, - theDialog, [ watcher, theDialog, callback ] - { - watcher->deleteLater(); - theDialog->hide(); - theDialog->deleteLater(); - callback(); - } ); + connect( watcher, + &QFutureWatcher< void >::finished, + theDialog, + [ watcher, theDialog, callback ] + { + watcher->deleteLater(); + theDialog->hide(); + theDialog->deleteLater(); + callback(); + } ); watcher->setFuture( future ); } void -ScanningDialog::run( const QFuture< void >& future, - const std::function< void() >& callback, - QWidget* parent ) +ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent ) { - ScanningDialog::run( future, - tr( "Scanning storage devices..." ), - tr( "Partitioning" ), - callback, - parent ); + ScanningDialog::run( future, tr( "Scanning storage devices..." ), tr( "Partitioning" ), callback, parent ); } -void ScanningDialog::setVisible(bool visible) +void +ScanningDialog::setVisible( bool visible ) { QDialog::setVisible( visible ); - emit visibilityChanged(); + Q_EMIT visibilityChanged(); } diff --git a/src/modules/partition/gui/ScanningDialog.h b/src/modules/partition/gui/ScanningDialog.h index 4f5254590..757b94eb6 100644 --- a/src/modules/partition/gui/ScanningDialog.h +++ b/src/modules/partition/gui/ScanningDialog.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SCANNINGDIALOG_H @@ -28,19 +19,19 @@ class ScanningDialog : public QDialog { Q_OBJECT public: - explicit ScanningDialog( const QString& text, - const QString& windowTitle, - QWidget* parent = nullptr ); + explicit ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent = nullptr ); - static void run( const QFuture< void >& future, - const QString& text, - const QString& windowTitle, - const std::function< void() >& callback = []{}, - QWidget* parent = nullptr ); + static void run( + const QFuture< void >& future, + const QString& text, + const QString& windowTitle, + const std::function< void() >& callback = [] {}, + QWidget* parent = nullptr ); - static void run( const QFuture< void >& future, - const std::function< void() >& callback = []{}, - QWidget* parent = nullptr ); + static void run( + const QFuture< void >& future, + const std::function< void() >& callback = [] {}, + QWidget* parent = nullptr ); public slots: void setVisible( bool visible ) override; @@ -49,4 +40,4 @@ signals: void visibilityChanged(); }; -#endif // SCANNINGDIALOG_H +#endif // SCANNINGDIALOG_H diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp index 8078253b3..818a60483 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp @@ -1,28 +1,18 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "VolumeGroupBaseDialog.h" #include "ui_VolumeGroupBaseDialog.h" +#include "core/SizeUtils.h" #include "gui/ListPhysicalVolumeWidgetItem.h" -#include - #include #include #include @@ -30,46 +20,50 @@ #include #include -VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName, - QVector< const Partition* > pvList, - QWidget *parent ) - : QDialog(parent) - , ui(new Ui::VolumeGroupBaseDialog) - , m_vgNameValue(vgName) - , m_totalSizeValue(0) - , m_usedSizeValue(0) +VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent ) + : QDialog( parent ) + , ui( new Ui::VolumeGroupBaseDialog ) + , m_vgNameValue( vgName ) + , m_totalSizeValue( 0 ) + , m_usedSizeValue( 0 ) { - ui->setupUi(this); + ui->setupUi( this ); for ( const Partition* p : pvList ) + { ui->pvList->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); + } - ui->vgType->addItems( QStringList() << "LVM" << "RAID" ); - ui->vgType->setCurrentIndex(0); + ui->vgType->addItems( QStringList() << "LVM" + << "RAID" ); + ui->vgType->setCurrentIndex( 0 ); - QRegularExpression re(R"(^(?!_|\.)[\w\-.+]+)"); + QRegularExpression re( R"(^(?!_|\.)[\w\-.+]+)" ); ui->vgName->setValidator( new QRegularExpressionValidator( re, this ) ); ui->vgName->setText( m_vgNameValue ); updateOkButton(); updateTotalSize(); - connect( ui->pvList, &QListWidget::itemChanged, this, - [&](QListWidgetItem*) { - updateTotalSize(); - updateOkButton(); - } ); + connect( ui->pvList, + &QListWidget::itemChanged, + this, + [ & ]( QListWidgetItem* ) + { + updateTotalSize(); + updateOkButton(); + } ); - connect( ui->peSize, qOverload(&QSpinBox::valueChanged), this, - [&](int) { - updateTotalSectors(); - updateOkButton(); - }); + connect( ui->peSize, + qOverload< int >( &QSpinBox::valueChanged ), + this, + [ & ]( int ) + { + updateTotalSectors(); + updateOkButton(); + } ); - connect( ui->vgName, &QLineEdit::textChanged, this, - [&](const QString&) { - updateOkButton(); - }); + connect( ui->vgName, &QLineEdit::textChanged, this, [ & ]( const QString& ) { updateOkButton(); } ); } VolumeGroupBaseDialog::~VolumeGroupBaseDialog() @@ -82,11 +76,14 @@ VolumeGroupBaseDialog::checkedItems() const { QVector< const Partition* > items; - for ( int i = 0; i < ui->pvList->count(); i++) { - ListPhysicalVolumeWidgetItem* item = dynamic_cast< ListPhysicalVolumeWidgetItem* >( ui->pvList->item(i) ); + for ( int i = 0; i < ui->pvList->count(); i++ ) + { + ListPhysicalVolumeWidgetItem* item = dynamic_cast< ListPhysicalVolumeWidgetItem* >( ui->pvList->item( i ) ); if ( item && item->checkState() == Qt::Checked ) + { items << item->partition(); + } } return items; @@ -101,10 +98,8 @@ VolumeGroupBaseDialog::isSizeValid() const void VolumeGroupBaseDialog::updateOkButton() { - okButton()->setEnabled(isSizeValid() && - !checkedItems().empty() && - !ui->vgName->text().isEmpty() && - ui->peSize->value() > 0); + okButton()->setEnabled( isSizeValid() && !checkedItems().empty() && !ui->vgName->text().isEmpty() + && ui->peSize->value() > 0 ); } void @@ -112,7 +107,7 @@ VolumeGroupBaseDialog::setUsedSizeValue( qint64 usedSize ) { m_usedSizeValue = usedSize; - ui->usedSize->setText( Capacity::formatByteSize(m_usedSizeValue) ); + ui->usedSize->setText( formatByteSize( m_usedSizeValue ) ); } void @@ -126,10 +121,14 @@ VolumeGroupBaseDialog::updateTotalSize() { m_totalSizeValue = 0; - for ( const Partition *p : checkedItems()) - m_totalSizeValue += p->capacity() - p->capacity() % (ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB)); + for ( const Partition* p : checkedItems() ) + { + m_totalSizeValue += p->capacity() + - p->capacity() + % ( ui->peSize->value() * Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) ); + } - ui->totalSize->setText(Capacity::formatByteSize(m_totalSizeValue)); + ui->totalSize->setText( formatByteSize( m_totalSizeValue ) ); updateTotalSectors(); } @@ -139,10 +138,12 @@ VolumeGroupBaseDialog::updateTotalSectors() { qint64 totalSectors = 0; - qint64 extentSize = ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB); + qint64 extentSize = ui->peSize->value() * Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ); if ( extentSize > 0 ) + { totalSectors = m_totalSizeValue / extentSize; + } ui->totalSectors->setText( QString::number( totalSectors ) ); } diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.h b/src/modules/partition/gui/VolumeGroupBaseDialog.h index e6011ce62..94ed0b98b 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.h +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef VOLUMEGROUPBASEDIALOG_H @@ -23,7 +14,8 @@ #include -namespace Ui { +namespace Ui +{ class VolumeGroupBaseDialog; } @@ -37,10 +29,8 @@ class VolumeGroupBaseDialog : public QDialog Q_OBJECT public: - explicit VolumeGroupBaseDialog( QString& vgName, - QVector< const Partition* > pvList, - QWidget* parent = nullptr ); - ~VolumeGroupBaseDialog(); + explicit VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent = nullptr ); + ~VolumeGroupBaseDialog() override; protected: virtual void updateOkButton(); @@ -78,4 +68,4 @@ private: qint64 m_usedSizeValue; }; -#endif // VOLUMEGROUPBASEDIALOG_H +#endif // VOLUMEGROUPBASEDIALOG_H diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.ui b/src/modules/partition/gui/VolumeGroupBaseDialog.ui index 0640eca00..f1bb6b251 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.ui +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2018 Caio <caiojcarvalho@gmail.com> +SPDX-License-Identifier: GPL-3.0-or-later + VolumeGroupBaseDialog diff --git a/src/modules/partition/jobs/AutoMountManagementJob.cpp b/src/modules/partition/jobs/AutoMountManagementJob.cpp new file mode 100644 index 000000000..71d3f32ff --- /dev/null +++ b/src/modules/partition/jobs/AutoMountManagementJob.cpp @@ -0,0 +1,40 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "AutoMountManagementJob.h" + +#include "utils/Logger.h" + +AutoMountManagementJob::AutoMountManagementJob( bool disable ) + : m_disable( disable ) +{ +} + +QString +AutoMountManagementJob::prettyName() const +{ + return tr( "Manage auto-mount settings" ); +} + +Calamares::JobResult +AutoMountManagementJob::exec() +{ + if ( m_stored ) + { + cDebug() << "Restore automount settings"; + CalamaresUtils::Partition::automountRestore( m_stored ); + m_stored.reset(); + } + else + { + cDebug() << "Set automount to" << ( m_disable ? "disable" : "enable" ); + m_stored = CalamaresUtils::Partition::automountDisable( m_disable ); + } + return Calamares::JobResult::ok(); +} diff --git a/src/modules/partition/jobs/AutoMountManagementJob.h b/src/modules/partition/jobs/AutoMountManagementJob.h new file mode 100644 index 000000000..e1dcf16dc --- /dev/null +++ b/src/modules/partition/jobs/AutoMountManagementJob.h @@ -0,0 +1,42 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef PARTITION_AUTOMOUNTMANAGEMENTJOB_H +#define PARTITION_AUTOMOUNTMANAGEMENTJOB_H + +#include "Job.h" + +#include "partition/AutoMount.h" + +/** + * This job sets automounting to a specific value, and when run a + * second time, **re**sets to the original value. See the documentation + * for CalamaresUtils::Partition::automountDisable() for details. + * Use @c true to **disable** automounting. + * + * Effectively: queue the **same** job twice; the first time it runs + * it will set the automount behavior, and the second time it + * restores the original. + * + */ +class AutoMountManagementJob : public Calamares::Job +{ + Q_OBJECT +public: + AutoMountManagementJob( bool disable = true ); + + QString prettyName() const override; + Calamares::JobResult exec() override; + +private: + bool m_disable; + decltype( CalamaresUtils::Partition::automountDisable( true ) ) m_stored; +}; + +#endif /* PARTITION_AUTOMOUNTMANAGEMENTJOB_H */ diff --git a/src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp b/src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp new file mode 100644 index 000000000..9541c000a --- /dev/null +++ b/src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp @@ -0,0 +1,71 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2016, Lisa Vitolo + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "ChangeFilesystemLabelJob.h" + +#include "utils/Logger.h" + +#include +#include +#include +#include +#include +#include + +ChangeFilesystemLabelJob::ChangeFilesystemLabelJob( Device* device, Partition* partition, const QString& newLabel ) + : PartitionJob( partition ) + , m_device( device ) + , m_label( newLabel ) +{ +} + + +QString +ChangeFilesystemLabelJob::prettyName() const +{ + return tr( "Set filesystem label on %1." ).arg( partition()->partitionPath() ); +} + + +QString +ChangeFilesystemLabelJob::prettyDescription() const +{ + return tr( "Set filesystem label %1 to partition " + "%2." ) + .arg( m_label ) + .arg( partition()->partitionPath() ); +} + + +QString +ChangeFilesystemLabelJob::prettyStatusMessage() const +{ + return prettyDescription(); +} + + +Calamares::JobResult +ChangeFilesystemLabelJob::exec() +{ + if ( m_label == partition()->fileSystem().label() ) + { + return Calamares::JobResult::ok(); + } + + Report report( nullptr ); + SetFileSystemLabelOperation op( *partition(), m_label ); + op.setStatus( Operation::StatusRunning ); + + if ( op.execute( report ) ) + { + return Calamares::JobResult::ok(); + } + return Calamares::JobResult::error( + tr( "The installer failed to update partition table on disk '%1'." ).arg( m_device->name() ), report.toText() ); +} diff --git a/src/modules/partition/jobs/ChangeFilesystemLabelJob.h b/src/modules/partition/jobs/ChangeFilesystemLabelJob.h new file mode 100644 index 000000000..ac3960538 --- /dev/null +++ b/src/modules/partition/jobs/ChangeFilesystemLabelJob.h @@ -0,0 +1,40 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2016, Lisa Vitolo + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef CHANGEFILESYSTEMLABELJOB_H +#define CHANGEFILESYSTEMLABELJOB_H + +#include "PartitionJob.h" + +#include + +class Device; +class Partition; + +/** + * This job changes the flags on an existing partition. + */ +class ChangeFilesystemLabelJob : public PartitionJob +{ + Q_OBJECT +public: + ChangeFilesystemLabelJob( Device* device, Partition* partition, const QString& newLabel ); + QString prettyName() const override; + QString prettyDescription() const override; + QString prettyStatusMessage() const override; + Calamares::JobResult exec() override; + + Device* device() const; + +private: + Device* m_device; + QString m_label; +}; + +#endif // CHANGEFILESYSTEMLABELJOB_H diff --git a/src/modules/partition/jobs/ClearMountsJob.cpp b/src/modules/partition/jobs/ClearMountsJob.cpp index 16d8d0d90..3d7b9d0de 100644 --- a/src/modules/partition/jobs/ClearMountsJob.cpp +++ b/src/modules/partition/jobs/ClearMountsJob.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot - * Copyright 2019, Kevin Kofler + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Kevin Kofler + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClearMountsJob.h" @@ -25,40 +16,33 @@ #include "partition/PartitionIterator.h" #include "partition/Sync.h" #include "utils/Logger.h" +#include "utils/String.h" // KPMcore #include #include #include +#include #include #include #include using CalamaresUtils::Partition::PartitionIterator; -ClearMountsJob::ClearMountsJob( Device* device ) - : Calamares::Job() - , m_device( device ) -{ -} - -QString -ClearMountsJob::prettyName() const -{ - return tr( "Clear mounts for partitioning operations on %1" ).arg( m_device->deviceNode() ); -} - - -QString -ClearMountsJob::prettyStatusMessage() const -{ - return tr( "Clearing mounts for partitioning operations on %1." ).arg( m_device->deviceNode() ); -} - - -QStringList +/** @brief Returns list of partitions on a given @p deviceName + * + * The @p deviceName is a (whole-block) device, like "sda", and the partitions + * returned are then "sdaX". The whole-block device itself is ignored, if + * present. Partitions are returned with their full /dev/ path (e.g. /dev/sda1). + * + * The format for /etc/partitions is, e.g. + * major minor #blocks name + * 8 0 33554422 sda + * 8 1 33554400 sda1 + */ +STATICTEST QStringList getPartitionsForDevice( const QString& deviceName ) { QStringList partitions; @@ -66,18 +50,18 @@ getPartitionsForDevice( const QString& deviceName ) QFile dev_partitions( "/proc/partitions" ); if ( dev_partitions.open( QFile::ReadOnly ) ) { - cDebug() << "Reading from" << dev_partitions.fileName(); + cDebug() << "Reading from" << dev_partitions.fileName() << "looking for" << deviceName; QTextStream in( &dev_partitions ); (void)in.readLine(); // That's the header line, skip it while ( !in.atEnd() ) { // The fourth column (index from 0, so index 3) is the name of the device; // keep it if it is followed by something. - QStringList columns = in.readLine().split( ' ', QString::SkipEmptyParts ); + QStringList columns = in.readLine().split( ' ', SplitSkipEmptyParts ); if ( ( columns.count() >= 4 ) && ( columns[ 3 ].startsWith( deviceName ) ) && ( columns[ 3 ] != deviceName ) ) { - partitions.append( columns[ 3 ] ); + partitions.append( QStringLiteral( "/dev/" ) + columns[ 3 ] ); } } } @@ -89,23 +73,16 @@ getPartitionsForDevice( const QString& deviceName ) return partitions; } -Calamares::JobResult -ClearMountsJob::exec() +STATICTEST QStringList +getSwapsForDevice( const QString& deviceName ) { - CalamaresUtils::Partition::Syncer s; - - QString deviceName = m_device->deviceNode().split( '/' ).last(); - - QStringList goodNews; QProcess process; - QStringList partitionsList = getPartitionsForDevice( deviceName ); - // Build a list of partitions of type 82 (Linux swap / Solaris). // We then need to clear them just in case they contain something resumable from a // previous suspend-to-disk. QStringList swapPartitions; - process.start( "sfdisk", { "-d", m_device->deviceNode() } ); + process.start( "sfdisk", { "-d", deviceName } ); process.waitForFinished(); // Sample output: // % sudo sfdisk -d /dev/sda @@ -124,40 +101,79 @@ ClearMountsJob::exec() *it = ( *it ).simplified().split( ' ' ).first(); } - const QStringList cryptoDevices = getCryptoDevices(); - for ( const QString& mapperPath : cryptoDevices ) + return swapPartitions; +} + +static inline bool +isControl( const QString& baseName ) +{ + return baseName == "control"; +} + +static inline bool +isFedoraSpecial( const QString& baseName ) +{ + // Fedora live images use /dev/mapper/live-* internally. We must not + // unmount those devices, because they are used by the live image and + // because we need /dev/mapper/live-base in the unpackfs module. + return baseName.startsWith( "live-" ); +} + +/** @brief Returns a list of unneeded crypto devices + * + * These are the crypto devices to unmount and close; some are "needed" + * for system operation: on Fedora, the live- mappers are special. + * Some other devices are special, too, so those do not end up in + * the list. + */ +STATICTEST QStringList +getCryptoDevices( const QStringList& mapperExceptions ) +{ + QDir mapperDir( "/dev/mapper" ); + const QFileInfoList fiList = mapperDir.entryInfoList( QDir::Files ); + QStringList list; + for ( const QFileInfo& fi : fiList ) { - tryUmount( mapperPath ); - QString news = tryCryptoClose( mapperPath ); - if ( !news.isEmpty() ) + QString baseName = fi.baseName(); + if ( isControl( baseName ) || isFedoraSpecial( baseName ) || mapperExceptions.contains( baseName ) ) { - goodNews.append( news ); + continue; } + list.append( fi.absoluteFilePath() ); } + return list; +} + +STATICTEST QStringList +getLVMVolumes() +{ + QProcess process; // First we umount all LVM logical volumes we can find process.start( "lvscan", { "-a" } ); process.waitForFinished(); if ( process.exitCode() == 0 ) //means LVM2 tools are installed { - const QStringList lvscanLines = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' ); - for ( const QString& lvscanLine : lvscanLines ) - { - QString lvPath = lvscanLine.simplified().split( ' ' ).value( 1 ); //second column - lvPath = lvPath.replace( '\'', "" ); - - QString news = tryUmount( lvPath ); - if ( !news.isEmpty() ) - { - goodNews.append( news ); - } - } + QStringList lvscanLines = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' ); + // Get the second column (`value(1)`) sinec that is the device name, + // remove quoting. + std::transform( lvscanLines.begin(), + lvscanLines.end(), + lvscanLines.begin(), + []( const QString& lvscanLine ) + { return lvscanLine.simplified().split( ' ' ).value( 1 ).replace( '\'', "" ); } ); + return lvscanLines; } else { cWarning() << "this system does not seem to have LVM2 tools."; } - + return QStringList(); +} +STATICTEST QStringList +getPVGroups( const QString& deviceName ) +{ + QProcess process; // Then we go looking for volume groups that use this device for physical volumes process.start( "pvdisplay", { "-C", "--noheadings" } ); process.waitForFinished(); @@ -180,88 +196,95 @@ ClearMountsJob::exec() vgSet.insert( vgName ); } - - foreach ( const QString& vgName, vgSet ) - { - process.start( "vgchange", { "-an", vgName } ); - process.waitForFinished(); - if ( process.exitCode() == 0 ) - { - goodNews.append( QString( "Successfully disabled volume group %1." ).arg( vgName ) ); - } - } +// toList() was deprecated, but old-old versions don't support QStringList construction like this +#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) + return vgSet.toList(); +#else + return QStringList { vgSet.cbegin(), vgSet.cend() }; +#endif } } else { cWarning() << "this system does not seem to have LVM2 tools."; } + return QStringList(); +} - const QStringList cryptoDevices2 = getCryptoDevices(); - for ( const QString& mapperPath : cryptoDevices2 ) +/* + * The tryX() free functions, below, return an empty QString on + * failure, or a non-empty QString on success. The string is + * meant **only** for debugging and is not displayed to the user, + * which is why no translation is applied. + * + * The MessageAndPath class stores a C-style pointer to a character + * array -- from QT_TRANSLATE_NOOP() -- and a path to substitute into it. + * + * When the tryX() functions return an "empty string", it is an + * empty MessageAndPath which acts like an empty string (in particular, + * isEmpty() is true). + */ + +class MessageAndPath +{ +public: + ///@brief An unsuccessful attempt at something + MessageAndPath() {} + ///@brief A success at doing @p thing to @p path + MessageAndPath( const char* thing, const QString& path ) + : m_message( thing ) + , m_path( path ) { - tryUmount( mapperPath ); - QString news = tryCryptoClose( mapperPath ); - if ( !news.isEmpty() ) - { - goodNews.append( news ); - } } - for ( const QString& p : partitionsList ) - { - QString partPath = QString( "/dev/%1" ).arg( p ); + bool isEmpty() const { return !m_message; } - QString news = tryUmount( partPath ); - if ( !news.isEmpty() ) - { - goodNews.append( news ); - } + explicit operator QString() const + { + return isEmpty() ? QString() : QCoreApplication::translate( "ClearMountsJob", m_message ).arg( m_path ); } - foreach ( QString p, swapPartitions ) +private: + const char* m_message = nullptr; + QString m_path; +}; + +STATICTEST inline QDebug& +operator<<( QDebug& s, const MessageAndPath& m ) +{ + if ( m.isEmpty() ) { - QString news = tryClearSwap( p ); - if ( !news.isEmpty() ) - { - goodNews.append( news ); - } + return s; } - - Calamares::JobResult ok = Calamares::JobResult::ok(); - ok.setMessage( tr( "Cleared all mounts for %1" ).arg( m_device->deviceNode() ) ); - ok.setDetails( goodNews.join( "\n" ) ); - - cDebug() << "ClearMountsJob finished. Here's what was done:\n" << goodNews.join( "\n" ); - - return ok; + return s << QString( m ); } -QString -ClearMountsJob::tryUmount( const QString& partPath ) +///@brief Returns a debug-string if @p partPath could be unmounted +STATICTEST MessageAndPath +tryUmount( const QString& partPath ) { QProcess process; process.start( "umount", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { - return QString( "Successfully unmounted %1." ).arg( partPath ); + return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully unmounted %1." ), partPath }; } process.start( "swapoff", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { - return QString( "Successfully disabled swap %1." ).arg( partPath ); + return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully disabled swap %1." ), partPath }; } - return QString(); + return {}; } - -QString -ClearMountsJob::tryClearSwap( const QString& partPath ) +///@brief Returns a debug-string if @p partPath was swap and could be cleared +STATICTEST MessageAndPath +tryClearSwap( const QString& partPath ) { QProcess process; process.start( "blkid", { "-s", "UUID", "-o", "value", partPath } ); @@ -269,53 +292,110 @@ ClearMountsJob::tryClearSwap( const QString& partPath ) QString swapPartUuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).simplified(); if ( process.exitCode() != 0 || swapPartUuid.isEmpty() ) { - return QString(); + return {}; } process.start( "mkswap", { "-U", swapPartUuid, partPath } ); process.waitForFinished(); if ( process.exitCode() != 0 ) { - return QString(); + return {}; } - return QString( "Successfully cleared swap %1." ).arg( partPath ); + return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully cleared swap %1." ), partPath }; } - -QString -ClearMountsJob::tryCryptoClose( const QString& mapperPath ) +///@brief Returns a debug-string if @p mapperPath could be closed +STATICTEST MessageAndPath +tryCryptoClose( const QString& mapperPath ) { + /* ignored */ tryUmount( mapperPath ); + QProcess process; process.start( "cryptsetup", { "close", mapperPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { - return QString( "Successfully closed mapper device %1." ).arg( mapperPath ); + return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully closed mapper device %1." ), mapperPath }; } - return QString(); + return {}; } - -QStringList -ClearMountsJob::getCryptoDevices() const +STATICTEST MessageAndPath +tryVGDisable( const QString& vgName ) { - QDir mapperDir( "/dev/mapper" ); - const QFileInfoList fiList = mapperDir.entryInfoList( QDir::Files ); - QStringList list; - QProcess process; - for ( const QFileInfo& fi : fiList ) - { - QString baseName = fi.baseName(); - // Fedora live images use /dev/mapper/live-* internally. We must not - // unmount those devices, because they are used by the live image and - // because we need /dev/mapper/live-base in the unpackfs module. - if ( baseName == "control" || baseName.startsWith( "live-" ) ) - { - continue; - } - list.append( fi.absoluteFilePath() ); - } - return list; + QProcess vgProcess; + vgProcess.start( "vgchange", { "-an", vgName } ); + vgProcess.waitForFinished(); + return ( vgProcess.exitCode() == 0 ) + ? MessageAndPath { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully disabled volume group %1." ), vgName } + : MessageAndPath {}; +} + +///@brief Apply @p f to all the @p paths, appending successes to @p news +template < typename F > +void +apply( const QStringList& paths, F f, QList< MessageAndPath >& news ) +{ + for ( const QString& p : qAsConst( paths ) ) + { + auto n = f( p ); + if ( !n.isEmpty() ) + { + news.append( n ); + } + } +} + +STATICTEST QStringList +stringify( const QList< MessageAndPath >& news ) +{ + QStringList l; + for ( const auto& m : qAsConst( news ) ) + { + l << QString( m ); + } + return l; +} + +ClearMountsJob::ClearMountsJob( Device* device ) + : Calamares::Job() + , m_deviceNode( device->deviceNode() ) +{ +} + +QString +ClearMountsJob::prettyName() const +{ + return tr( "Clear mounts for partitioning operations on %1" ).arg( m_deviceNode ); +} + +QString +ClearMountsJob::prettyStatusMessage() const +{ + return tr( "Clearing mounts for partitioning operations on %1." ).arg( m_deviceNode ); +} + +Calamares::JobResult +ClearMountsJob::exec() +{ + const QString deviceName = m_deviceNode.split( '/' ).last(); + CalamaresUtils::Partition::Syncer s; + QList< MessageAndPath > goodNews; + + apply( getCryptoDevices( m_mapperExceptions ), tryCryptoClose, goodNews ); + apply( getLVMVolumes(), tryUmount, goodNews ); + apply( getPVGroups( deviceName ), tryVGDisable, goodNews ); + + apply( getCryptoDevices( m_mapperExceptions ), tryCryptoClose, goodNews ); + apply( getPartitionsForDevice( deviceName ), tryUmount, goodNews ); + apply( getSwapsForDevice( m_deviceNode ), tryClearSwap, goodNews ); + + Calamares::JobResult ok = Calamares::JobResult::ok(); + ok.setMessage( tr( "Cleared all mounts for %1" ).arg( m_deviceNode ) ); + ok.setDetails( stringify( goodNews ).join( "\n" ) ); + cDebug() << "ClearMountsJob finished. Here's what was done:" << Logger::DebugListT< MessageAndPath >( goodNews ); + + return ok; } diff --git a/src/modules/partition/jobs/ClearMountsJob.h b/src/modules/partition/jobs/ClearMountsJob.h index 2accc652d..fb3aca1e4 100644 --- a/src/modules/partition/jobs/ClearMountsJob.h +++ b/src/modules/partition/jobs/ClearMountsJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CLEARMOUNTSJOB_H @@ -26,22 +17,43 @@ class Device; /** * This job tries to free all mounts for the given device, so partitioning * operations can proceed. + * + * - partitions on the device are unmounted + * - swap on the device is disabled and cleared + * - physical volumes for LVM on the device are disabled + * + * In addition, regardless of device: + * - almost all(*) /dev/mapper entries (crypto / LUKS, also LVM) are closed + * - all logical volumes for LVM are unmounted + * Exceptions to "all /dev/mapper" may be configured through + * the setMapperExceptions() method. Pass in names of mapper + * files that should not be closed (e.g. "myvg-mylv"). + * + * (*) Some exceptions always exist: /dev/mapper/control is never + * closed. /dev/mapper/live-* is never closed. + * */ class ClearMountsJob : public Calamares::Job { Q_OBJECT public: + /** @brief Creates a job freeing mounts on @p device + * + * No ownership is transferred; the @p device is used only to access + * the device node (name). + */ explicit ClearMountsJob( Device* device ); + QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; + ///@brief Sets the list of exceptions (names) when closing /dev/mapper + void setMapperExceptions( const QStringList& names ) { m_mapperExceptions = names; } + private: - QString tryUmount( const QString& partPath ); - QString tryClearSwap( const QString& partPath ); - QString tryCryptoClose( const QString& mapperPath ); - QStringList getCryptoDevices() const; - Device* m_device; + const QString m_deviceNode; + QStringList m_mapperExceptions; }; #endif // CLEARMOUNTSJOB_H diff --git a/src/modules/partition/jobs/ClearTempMountsJob.cpp b/src/modules/partition/jobs/ClearTempMountsJob.cpp index ba6f2df2d..6219de004 100644 --- a/src/modules/partition/jobs/ClearTempMountsJob.cpp +++ b/src/modules/partition/jobs/ClearTempMountsJob.cpp @@ -1,34 +1,25 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClearTempMountsJob.h" +#include "partition/Mount.h" #include "utils/Logger.h" +#include "utils/String.h" -#include - -// KPMcore #include #include #include #include +#include ClearTempMountsJob::ClearTempMountsJob() : Calamares::Job() @@ -53,48 +44,25 @@ ClearTempMountsJob::prettyStatusMessage() const Calamares::JobResult ClearTempMountsJob::exec() { + Logger::Once o; // Fetch a list of current mounts to Calamares temporary directories. - QList< QPair< QString, QString > > lst; - QFile mtab( "/etc/mtab" ); - if ( !mtab.open( QFile::ReadOnly | QFile::Text ) ) - { - return Calamares::JobResult::error( tr( "Cannot get list of temporary mounts." ) ); - } + using MtabInfo = CalamaresUtils::Partition::MtabInfo; + auto targetMounts = MtabInfo::fromMtabFilteredByPrefix( QStringLiteral( "/tmp/calamares-" ) ); - cDebug() << "Opened mtab. Lines:"; - QTextStream in( &mtab ); - QString lineIn = in.readLine(); - while ( !lineIn.isNull() ) + if ( targetMounts.isEmpty() ) { - QStringList line = lineIn.split( ' ', QString::SkipEmptyParts ); - cDebug() << line.join( ' ' ); - QString device = line.at( 0 ); - QString mountPoint = line.at( 1 ); - if ( mountPoint.startsWith( "/tmp/calamares-" ) ) - { - cDebug() << "INSERTING pair (device, mountPoint)" << device << mountPoint; - lst.append( qMakePair( device, mountPoint ) ); - } - lineIn = in.readLine(); + return Calamares::JobResult::ok(); } - - std::sort( - lst.begin(), lst.end(), []( const QPair< QString, QString >& a, const QPair< QString, QString >& b ) -> bool { - return a.first > b.first; - } ); + std::sort( targetMounts.begin(), targetMounts.end(), MtabInfo::mountPointOrder ); QStringList goodNews; - QProcess process; - - foreach ( auto line, lst ) + for ( const auto& m : qAsConst( targetMounts ) ) { - QString partPath = line.second; - cDebug() << "Will try to umount path" << partPath; - process.start( "umount", { "-lv", partPath } ); - process.waitForFinished(); - if ( process.exitCode() == 0 ) + cDebug() << o << "Will try to umount path" << m.mountPoint; + if ( CalamaresUtils::Partition::unmount( m.mountPoint, { "-lv" } ) == 0 ) { - goodNews.append( QString( "Successfully unmounted %1." ).arg( partPath ) ); + // Returns the program's exit code, so 0 is success + goodNews.append( QString( "Successfully unmounted %1." ).arg( m.mountPoint ) ); } } @@ -102,7 +70,7 @@ ClearTempMountsJob::exec() ok.setMessage( tr( "Cleared all temporary mounts." ) ); ok.setDetails( goodNews.join( "\n" ) ); - cDebug() << "ClearTempMountsJob finished. Here's what was done:\n" << goodNews.join( "\n" ); + cDebug() << o << "ClearTempMountsJob finished. Here's what was done:\n" << Logger::DebugList( goodNews ); return ok; } diff --git a/src/modules/partition/jobs/ClearTempMountsJob.h b/src/modules/partition/jobs/ClearTempMountsJob.h index 433cfd8ad..0726975c7 100644 --- a/src/modules/partition/jobs/ClearTempMountsJob.h +++ b/src/modules/partition/jobs/ClearTempMountsJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CLEARTEMPMOUNTSJOB_H diff --git a/src/modules/partition/jobs/CreatePartitionJob.cpp b/src/modules/partition/jobs/CreatePartitionJob.cpp index fd322a94e..fe7c6f350 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionJob.cpp @@ -1,26 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreatePartitionJob.h" +#include "core/KPMHelpers.h" +#include "core/PartitionInfo.h" + #include "partition/FileSystem.h" +#include "partition/PartitionQuery.h" +#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Units.h" @@ -32,18 +28,177 @@ #include #include +#include +#include + using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; +/** @brief Create + * + * Uses sfdisk to remove @p partition. This should only be used in cases + * where using kpmcore to remove the partition would not be appropriate + * + */ +static Calamares::JobResult +createZfs( Partition* partition, Device* device ) +{ + auto r = CalamaresUtils::System::instance()->runCommand( + { "sh", + "-c", + "echo start=" + QString::number( partition->firstSector() ) + " size=" + + QString::number( partition->length() ) + " | sfdisk --append --force " + partition->devicePath() }, + std::chrono::seconds( 5 ) ); + if ( r.getExitCode() != 0 ) + { + return Calamares::JobResult::error( + QCoreApplication::translate( CreatePartitionJob::staticMetaObject.className(), + "Failed to create partition" ), + QCoreApplication::translate( CreatePartitionJob::staticMetaObject.className(), + "Failed to create zfs partition with output: " + + r.getOutput().toLocal8Bit() ) ); + } + + // Now we need to do some things that would normally be done by kpmcore + + // First we get the device node from the output and set it as the partition path + QString deviceNode; + { + QRegularExpression re( QStringLiteral( "Created a new partition (\\d+)" ) ); + QRegularExpressionMatch rem = re.match( r.getOutput() ); + + if ( rem.hasMatch() ) + { + if ( partition->devicePath().back().isDigit() ) + { + deviceNode = partition->devicePath() + QLatin1Char( 'p' ) + rem.captured( 1 ); + } + else + { + deviceNode = partition->devicePath() + rem.captured( 1 ); + } + } + partition->setPartitionPath( deviceNode ); + } + // If it is a gpt device, set the partition UUID + if ( device->partitionTable()->type() == PartitionTable::gpt && partition->uuid().isEmpty() ) + { + r = CalamaresUtils::System::instance()->runCommand( + { "sfdisk", "--list", "--output", "Device,UUID", partition->devicePath() }, std::chrono::seconds( 5 ) ); + if ( r.getExitCode() == 0 ) + { + QRegularExpression re( deviceNode + QStringLiteral( " +(.+)" ) ); + QRegularExpressionMatch rem = re.match( r.getOutput() ); + + if ( rem.hasMatch() ) + { + partition->setUUID( rem.captured( 1 ) ); + } + } + } + + return Calamares::JobResult::ok(); +} + + CreatePartitionJob::CreatePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } + +static QString +prettyGptType( const Partition* partition ) +{ +#ifdef WITH_KPMCORE42API + static const QMap< QString, QString > gptTypePrettyStrings = { + { "44479540-f297-41b2-9af7-d131d5f0458a", "Linux Root Partition (x86)" }, + { "4f68bce3-e8cd-4db1-96e7-fbcaf984b709", "Linux Root Partition (x86-64)" }, + { "69dad710-2ce4-4e3c-b16c-21a1d49abed3", "Linux Root Partition (32-bit ARM)" }, + { "b921b045-1df0-41c3-af44-4c6f280d3fae", "Linux Root Partition (64-bit ARM)" }, + { "993d8d3d-f80e-4225-855a-9daf8ed7ea97", "Linux Root Partition (Itanium/IA-64)" }, + { "d13c5d3b-b5d1-422a-b29f-9454fdc89d76", "Linux Root Verity Partition (x86)" }, + { "2c7357ed-ebd2-46d9-aec1-23d437ec2bf5", "Linux Root Verity Partition (x86-64)" }, + { "7386cdf2-203c-47a9-a498-f2ecce45a2d6", "Linux Root Verity Partition (32-bit ARM)" }, + { "df3300ce-d69f-4c92-978c-9bfb0f38d820", "Linux Root Verity Partition (64-bit ARM/AArch64)" }, + { "86ed10d5-b607-45bb-8957-d350f23d0571", "Linux Root Verity Partition (Itanium/IA-64)" }, + { "75250d76-8cc6-458e-bd66-bd47cc81a812", "Linux /usr Partition (x86)" }, + { "8484680c-9521-48c6-9c11-b0720656f69e", "Linux /usr Partition (x86-64)" }, + { "7d0359a3-02b3-4f0a-865c-654403e70625", "Linux /usr Partition (32-bit ARM)" }, + { "b0e01050-ee5f-4390-949a-9101b17104e9", "Linux /usr Partition (64-bit ARM/AArch64)" }, + { "4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea", "Linux /usr Partition (Itanium/IA-64)" }, + { "8f461b0d-14ee-4e81-9aa9-049b6fb97abd", "Linux /usr Verity Partition (x86)" }, + { "77ff5f63-e7b6-4633-acf4-1565b864c0e6", "Linux /usr Verity Partition (x86-64)" }, + { "c215d751-7bcd-4649-be90-6627490a4c05", "Linux /usr Verity Partition (32-bit ARM)" }, + { "6e11a4e7-fbca-4ded-b9e9-e1a512bb664e", "Linux /usr Verity Partition (64-bit ARM/AArch64)" }, + { "6a491e03-3be7-4545-8e38-83320e0ea880", "Linux /usr Verity Partition (Itanium/IA-64)" }, + { "933ac7e1-2eb4-4f13-b844-0e14e2aef915", "Linux Home Partition" }, + { "3b8f8425-20e0-4f3b-907f-1a25a76f98e8", "Linux Server Data Partition" }, + { "4d21b016-b534-45c2-a9fb-5c16e091fd2d", "Linux Variable Data Partition" }, + { "7ec6f557-3bc5-4aca-b293-16ef5df639d1", "Linux Temporary Data Partition" }, + { "0657fd6d-a4ab-43c4-84e5-0933c84b4f4f", "Linux Swap" }, + { "c12a7328-f81f-11d2-ba4b-00a0c93ec93b", "EFI System Partition" }, + { "bc13c2ff-59e6-4262-a352-b275fd6f7172", "Extended Boot Loader Partition" }, + { "0fc63daf-8483-4772-8e79-3d69d8477de4", "Other Data Partitions" }, + { "ebd0a0a2-b9e5-4433-87c0-68b6b72699c7", "Microsoft basic data" }, + }; + + auto type = partition->type(); + return gptTypePrettyStrings.value( type.toLower(), type ); +#else + return QString(); +#endif +} + +static QString +prettyGptEntries( const Partition* partition ) +{ + if ( !partition ) + { + return QString(); + } + + QStringList list; + + if ( !partition->label().isEmpty() ) + { + list += partition->label(); + } + + QString type = prettyGptType( partition ); + if ( !type.isEmpty() ) + { + list += type; + } + + return list.join( QStringLiteral( ", " ) ); +} + QString CreatePartitionJob::prettyName() const { + const PartitionTable* table = CalamaresUtils::Partition::getPartitionTable( m_partition ); + if ( table && table->type() == PartitionTable::TableType::gpt ) + { + QString entries = prettyGptEntries( m_partition ); + if ( !entries.isEmpty() ) + { + return tr( "Create new %1MiB partition on %3 (%2) with entries %4." ) + .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) + .arg( m_device->name() ) + .arg( m_device->deviceNode() ) + .arg( entries ); + } + else + { + return tr( "Create new %1MiB partition on %3 (%2)." ) + .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) + .arg( m_device->name() ) + .arg( m_device->deviceNode() ); + } + } + return tr( "Create new %2MiB partition on %4 (%3) with file system %1." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) @@ -55,6 +210,28 @@ CreatePartitionJob::prettyName() const QString CreatePartitionJob::prettyDescription() const { + const PartitionTable* table = CalamaresUtils::Partition::getPartitionTable( m_partition ); + if ( table && table->type() == PartitionTable::TableType::gpt ) + { + QString entries = prettyGptEntries( m_partition ); + if ( !entries.isEmpty() ) + { + return tr( "Create new %1MiB partition on %3 (%2) with entries " + "%4." ) + .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) + .arg( m_device->name() ) + .arg( m_device->deviceNode() ) + .arg( entries ); + } + else + { + return tr( "Create new %1MiB partition on %3 (%2)." ) + .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) + .arg( m_device->name() ) + .arg( m_device->deviceNode() ); + } + } + return tr( "Create new %2MiB partition on %4 " "(%3) with file system %1." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) @@ -67,6 +244,22 @@ CreatePartitionJob::prettyDescription() const QString CreatePartitionJob::prettyStatusMessage() const { + const PartitionTable* table = CalamaresUtils::Partition::getPartitionTable( m_partition ); + if ( table && table->type() == PartitionTable::TableType::gpt ) + { + QString type = prettyGptType( m_partition ); + if ( type.isEmpty() ) + { + type = m_partition->label(); + } + if ( type.isEmpty() ) + { + type = userVisibleFS( m_partition->fileSystem() ); + } + + return tr( "Creating new %1 partition on %2." ).arg( type ).arg( m_device->deviceNode() ); + } + return tr( "Creating new %1 partition on %2." ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( m_device->deviceNode() ); @@ -75,17 +268,16 @@ CreatePartitionJob::prettyStatusMessage() const Calamares::JobResult CreatePartitionJob::exec() { - Report report( nullptr ); - NewOperation op( *m_device, m_partition ); - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ); - if ( op.execute( report ) ) + // kpmcore doesn't currently handle this case properly so for now, we manually create the partion + // The zfs module can later deal with creating a zpool in the partition + if ( m_partition->fileSystem().type() == FileSystem::Type::Zfs ) { - return Calamares::JobResult::ok(); + return createZfs( m_partition, m_device ); } - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + NewOperation( *m_device, m_partition ), + tr( "The installer failed to create partition on disk '%1'." ).arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/CreatePartitionJob.h b/src/modules/partition/jobs/CreatePartitionJob.h index f315e24fb..3d6199804 100644 --- a/src/modules/partition/jobs/CreatePartitionJob.h +++ b/src/modules/partition/jobs/CreatePartitionJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEPARTITIONJOB_H diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.cpp b/src/modules/partition/jobs/CreatePartitionTableJob.cpp index 79675c324..3b9415d1a 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.cpp +++ b/src/modules/partition/jobs/CreatePartitionTableJob.cpp @@ -1,29 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreatePartitionTableJob.h" #include "partition/PartitionIterator.h" +#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" -// KPMcore +#include "core/KPMHelpers.h" + #include #include #include @@ -69,54 +62,30 @@ CreatePartitionTableJob::prettyStatusMessage() const } -static inline QDebug& -operator<<( QDebug&& s, PartitionIterator& it ) -{ - s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); - return s; -} - - Calamares::JobResult CreatePartitionTableJob::exec() { - Report report( nullptr ); - QString message = tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ); PartitionTable* table = m_device->partitionTable(); - cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted yet:"; if ( Logger::logLevelEnabled( Logger::LOGDEBUG ) ) { + cDebug() << "Creating new partition table of type" << table->typeName() << ", uncommitted partitions:"; for ( auto it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it ) { - cDebug() << it; + cDebug() << Logger::SubEntry << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); } - QProcess lsblk; - lsblk.setProgram( "lsblk" ); - lsblk.setProcessChannelMode( QProcess::MergedChannels ); - lsblk.start(); - lsblk.waitForFinished(); - cDebug() << "lsblk:\n" << lsblk.readAllStandardOutput(); + auto lsblkResult = CalamaresUtils::System::runCommand( { "lsblk" }, std::chrono::seconds( 30 ) ); + cDebug() << Logger::SubEntry << "lsblk output:\n" << Logger::NoQuote << lsblkResult.getOutput(); - QProcess mount; - mount.setProgram( "mount" ); // Debug output only, not mounting something - mount.setProcessChannelMode( QProcess::MergedChannels ); - mount.start(); - mount.waitForFinished(); - cDebug() << "mount:\n" << mount.readAllStandardOutput(); + auto mountResult = CalamaresUtils::System::runCommand( { "mount" }, std::chrono::seconds( 30 ) ); + cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mountResult.getOutput(); } - CreatePartitionTableOperation op( *m_device, table ); - op.setStatus( Operation::StatusRunning ); - - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + CreatePartitionTableOperation( *m_device, table ), + tr( "The installer failed to create a partition table on %1." ).arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/CreatePartitionTableJob.h b/src/modules/partition/jobs/CreatePartitionTableJob.h index e0ed6f918..ee1ba0a38 100644 --- a/src/modules/partition/jobs/CreatePartitionTableJob.h +++ b/src/modules/partition/jobs/CreatePartitionTableJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEPARTITIONTABLEJOB_H diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp index 28a08f5ad..683913b7f 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.cpp @@ -1,30 +1,25 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CreateVolumeGroupJob.h" -// KPMcore +#include "core/KPMHelpers.h" + #include #include #include #include -CreateVolumeGroupJob::CreateVolumeGroupJob( QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ) +CreateVolumeGroupJob::CreateVolumeGroupJob( Device*, + QString& vgName, + QVector< const Partition* > pvList, + const qint32 peSize ) : m_vgName( vgName ) , m_pvList( pvList ) , m_peSize( peSize ) @@ -52,19 +47,8 @@ CreateVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult CreateVolumeGroupJob::exec() { - Report report( nullptr ); - - CreateVolumeGroupOperation op( m_vgName, m_pvList, m_peSize ); - - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to create a volume group named '%1'." ).arg( m_vgName ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( CreateVolumeGroupOperation( m_vgName, m_pvList, m_peSize ), + tr( "The installer failed to create a volume group named '%1'." ).arg( m_vgName ) ); } void diff --git a/src/modules/partition/jobs/CreateVolumeGroupJob.h b/src/modules/partition/jobs/CreateVolumeGroupJob.h index 9ed5e24e2..987c937c6 100644 --- a/src/modules/partition/jobs/CreateVolumeGroupJob.h +++ b/src/modules/partition/jobs/CreateVolumeGroupJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEVOLUMEGROUPJOB_H @@ -24,13 +15,14 @@ #include +class Device; class Partition; class CreateVolumeGroupJob : public Calamares::Job { Q_OBJECT public: - CreateVolumeGroupJob( QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ); + CreateVolumeGroupJob( Device*, QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ); QString prettyName() const override; QString prettyDescription() const override; diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp index 77df64e3d..65920a84e 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp @@ -1,23 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DeactivateVolumeGroupJob.h" +#include "core/KPMHelpers.h" + #include #include #include @@ -48,18 +41,12 @@ DeactivateVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult DeactivateVolumeGroupJob::exec() { - Report report( nullptr ); - DeactivateVolumeGroupOperation op( *m_device ); - - op.setStatus( Operation::OperationStatus::StatusRunning ); - - QString message = tr( "The installer failed to deactivate a volume group named %1." ).arg( m_device->name() ); - if ( op.execute( report ) ) + auto r = KPMHelpers::execute( + op, tr( "The installer failed to deactivate a volume group named %1." ).arg( m_device->name() ) ); + if ( r ) { op.preview(); - return Calamares::JobResult::ok(); } - - return Calamares::JobResult::error( message, report.toText() ); + return r; } diff --git a/src/modules/partition/jobs/DeactivateVolumeGroupJob.h b/src/modules/partition/jobs/DeactivateVolumeGroupJob.h index 7b1c9c473..a6bdd4ddb 100644 --- a/src/modules/partition/jobs/DeactivateVolumeGroupJob.h +++ b/src/modules/partition/jobs/DeactivateVolumeGroupJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DEACTIVATEVOLUMEGROUPJOB_H diff --git a/src/modules/partition/jobs/DeletePartitionJob.cpp b/src/modules/partition/jobs/DeletePartitionJob.cpp index 9b2d4f37d..d61bb955e 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.cpp +++ b/src/modules/partition/jobs/DeletePartitionJob.cpp @@ -1,26 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "DeletePartitionJob.h" -// KPMcore +#include "core/KPMHelpers.h" + +#include "utils/CalamaresUtilsSystem.h" + #include #include #include @@ -28,6 +22,45 @@ #include #include +#include + +/** @brief Determine if the given partition is of type Zfs + * + * Returns true if @p partition is of type Zfs + * + */ +static bool +isZfs( Partition* partition ) +{ + return partition->fileSystem().type() == FileSystem::Type::Zfs; +} + +/** @brief Remove the given partition manually + * + * Uses sfdisk to remove @p partition. This should only be used in cases + * where using kpmcore to remove the partition would not be appropriate + * + */ +static Calamares::JobResult +removePartition( Partition* partition ) +{ + auto r = CalamaresUtils::System::instance()->runCommand( + { "sfdisk", "--delete", "--force", partition->devicePath(), QString::number( partition->number() ) }, + std::chrono::seconds( 5 ) ); + if ( r.getExitCode() != 0 || r.getOutput().contains( "failed" ) ) + { + return Calamares::JobResult::error( + QCoreApplication::translate( DeletePartitionJob::staticMetaObject.className(), "Deletion Failed" ), + QCoreApplication::translate( DeletePartitionJob::staticMetaObject.className(), + "Failed to delete the partition with output: " ) + + r.getOutput() ); + } + else + { + return Calamares::JobResult::ok(); + } +} + DeletePartitionJob::DeletePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) @@ -58,17 +91,15 @@ DeletePartitionJob::prettyStatusMessage() const Calamares::JobResult DeletePartitionJob::exec() { - Report report( nullptr ); - DeleteOperation op( *m_device, m_partition ); - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ); - if ( op.execute( report ) ) + // The current implementation of remove() for zfs in kpmcore trys to destroy the zpool by label + // This isn't what we want here so we delete the partition instead. + if ( isZfs( m_partition ) ) { - return Calamares::JobResult::ok(); + return removePartition( m_partition ); } - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( DeleteOperation( *m_device, m_partition ), + tr( "The installer failed to delete partition %1." ).arg( m_partition->devicePath() ) ); } void diff --git a/src/modules/partition/jobs/DeletePartitionJob.h b/src/modules/partition/jobs/DeletePartitionJob.h index f68a4ea8f..6d5ff1377 100644 --- a/src/modules/partition/jobs/DeletePartitionJob.h +++ b/src/modules/partition/jobs/DeletePartitionJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef DELETEPARTITIONJOB_H diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index ac65b5ff6..5be353113 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019-2020, Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FillGlobalStorageJob.h" @@ -27,6 +18,7 @@ #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" +#include "partition/Global.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" @@ -91,9 +83,16 @@ mapForPartition( Partition* partition, const QString& uuid ) { QVariantMap map; map[ "device" ] = partition->partitionPath(); + map[ "partlabel" ] = partition->label(); + map[ "partuuid" ] = partition->uuid(); map[ "mountPoint" ] = PartitionInfo::mountPoint( partition ); map[ "fsName" ] = userVisibleFS( partition->fileSystem() ); map[ "fs" ] = untranslatedFS( partition->fileSystem() ); +#ifdef WITH_KPMCORE42API + map[ "parttype" ] = partition->type(); + map[ "partattrs" ] = partition->attributes(); + map[ "features" ] = partition->fileSystem().features(); +#endif if ( partition->fileSystem().type() == FileSystem::Luks && dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ) { @@ -105,12 +104,19 @@ mapForPartition( Partition* partition, const QString& uuid ) // Debugging for inside the loop in createPartitionList(), // so indent a bit Logger::CDebug deb; - using TR = Logger::DebugRow< const char* const, const QString& >; + using TR = Logger::DebugRow< const char* const, const QString >; + // clang-format off deb << Logger::SubEntry << "mapping for" << partition->partitionPath() << partition->deviceNode() - << TR( "mtpoint:", PartitionInfo::mountPoint( partition ) ) << TR( "fs:", map[ "fs" ].toString() ) - << TR( "fsName", map[ "fsName" ].toString() ) << TR( "uuid", uuid ) + << TR( "partlabel", map[ "partlabel" ].toString() ) + << TR( "partition-uuid (partuuid)", Logger::RedactedName( "PartUUID", map[ "partuuid" ].toString() ) ) + << TR( "parttype", map[ "parttype" ].toString() ) + << TR( "partattrs", map[ "partattrs" ].toString() ) + << TR( "mountPoint:", PartitionInfo::mountPoint( partition ) ) + << TR( "fs:", map[ "fs" ].toString() ) + << TR( "fsName", map[ "fsName" ].toString() ) + << TR( "filesystem-uuid (uuid)", Logger::RedactedName( "FSUUID", uuid ) ) << TR( "claimed", map[ "claimed" ].toString() ); - + // clang-format on if ( partition->roles().has( PartitionRole::Luks ) ) { const FileSystem& fsRef = partition->fileSystem(); @@ -127,7 +133,34 @@ mapForPartition( Partition* partition, const QString& uuid ) return map; } -FillGlobalStorageJob::FillGlobalStorageJob( QList< Device* > devices, const QString& bootLoaderPath ) +static QString +prettyFileSystemFeatures( const QVariantMap& features ) +{ + QStringList list; + for ( const auto& key : features.keys() ) + { + const auto& value = features.value( key ); + if ( value.type() == QVariant::Bool ) + { + if ( value.toBool() ) + { + list += key; + } + else + { + list += QString( "not " ) + key; + } + } + else + { + list += key + QString( "=" ) + value.toString(); + } + } + + return list.join( QStringLiteral( ", " ) ); +} + +FillGlobalStorageJob::FillGlobalStorageJob( const Config*, QList< Device* > devices, const QString& bootLoaderPath ) : m_devices( devices ) , m_bootLoaderPath( bootLoaderPath ) { @@ -154,7 +187,8 @@ FillGlobalStorageJob::prettyDescription() const QString path = partitionMap.value( "device" ).toString(); QString mountPoint = partitionMap.value( "mountPoint" ).toString(); QString fsType = partitionMap.value( "fs" ).toString(); - if ( mountPoint.isEmpty() || fsType.isEmpty() ) + QString features = prettyFileSystemFeatures( partitionMap.value( "features" ).toMap() ); + if ( mountPoint.isEmpty() || fsType.isEmpty() || fsType == QString( "unformatted" ) ) { continue; } @@ -162,34 +196,82 @@ FillGlobalStorageJob::prettyDescription() const { if ( mountPoint == "/" ) { - lines.append( tr( "Install %1 on new %2 system partition." ) - .arg( *Calamares::Branding::ShortProductName ) - .arg( fsType ) ); + if ( !features.isEmpty() ) + { + lines.append( tr( "Install %1 on new %2 system partition " + "with features %3" ) + .arg( Calamares::Branding::instance()->shortProductName() ) + .arg( fsType ) + .arg( features ) ); + } + else + { + lines.append( tr( "Install %1 on new %2 system partition." ) + .arg( Calamares::Branding::instance()->shortProductName() ) + .arg( fsType ) ); + } } else { - lines.append( tr( "Set up new %2 partition with mount point " - "%1." ) - .arg( mountPoint ) - .arg( fsType ) ); + if ( !features.isEmpty() ) + { + lines.append( tr( "Set up new %2 partition with mount point " + "%1 and features %3." ) + .arg( mountPoint ) + .arg( fsType ) + .arg( features ) ); + } + else + { + lines.append( tr( "Set up new %2 partition with mount point " + "%1%3." ) + .arg( mountPoint ) + .arg( fsType ) + .arg( features ) ); + } } } else { if ( mountPoint == "/" ) { - lines.append( tr( "Install %2 on %3 system partition %1." ) - .arg( path ) - .arg( *Calamares::Branding::ShortProductName ) - .arg( fsType ) ); + if ( !features.isEmpty() ) + { + lines.append( tr( "Install %2 on %3 system partition %1" + " with features %4." ) + .arg( path ) + .arg( Calamares::Branding::instance()->shortProductName() ) + .arg( fsType ) + .arg( features ) ); + } + else + { + lines.append( tr( "Install %2 on %3 system partition %1." ) + .arg( path ) + .arg( Calamares::Branding::instance()->shortProductName() ) + .arg( fsType ) ); + } } else { - lines.append( tr( "Set up %3 partition %1 with mount point " - "%2." ) - .arg( path ) - .arg( mountPoint ) - .arg( fsType ) ); + if ( !features.isEmpty() ) + { + lines.append( tr( "Set up %3 partition %1 with mount point " + "%2 and features %4." ) + .arg( path ) + .arg( mountPoint ) + .arg( fsType ) + .arg( features ) ); + } + else + { + lines.append( tr( "Set up %3 partition %1 with mount point " + "%2%4." ) + .arg( path ) + .arg( mountPoint ) + .arg( fsType ) + .arg( QString() ) ); + } } } } @@ -216,35 +298,29 @@ FillGlobalStorageJob::prettyStatusMessage() const * .. mark as "1" if it's on the system, somewhere * .. mark as "2" if it's one of the claimed / in-use FSses * - * Stores a GS key called "filesystems_use" with this mapping. + * Stores a GS key called "filesystem_use" with this mapping. + * @see CalamaresUtils::Partition::useFilesystemGS() */ static void storeFSUse( Calamares::GlobalStorage* storage, const QVariantList& partitions ) { - QMap< QString, int > fsUses; - for ( const auto& p : partitions ) + if ( storage ) { - const auto pmap = p.toMap(); - - QString fs = pmap.value( "fs" ).toString(); - int thisUse = pmap.value( "claimed" ).toBool() ? 2 : 1; - - if ( fs.isEmpty() ) + CalamaresUtils::Partition::clearFilesystemGS( storage ); + for ( const auto& p : partitions ) { - continue; + const auto pmap = p.toMap(); + + QString fs = pmap.value( "fs" ).toString(); + + if ( fs.isEmpty() ) + { + continue; + } + + CalamaresUtils::Partition::useFilesystemGS( storage, fs, true ); } - - int newUse = qMax( fsUses.value( fs ), thisUse ); // value() is 0 if not present - fsUses.insert( fs, newUse ); } - - QVariantMap fsUsesVariant; - for ( auto it = fsUses.cbegin(); it != fsUses.cend(); ++it ) - { - fsUsesVariant.insert( it.key(), it.value() ); - } - - storage->insert( "filesystems_use", fsUsesVariant ); } Calamares::JobResult diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.h b/src/modules/partition/jobs/FillGlobalStorageJob.h index e3850da37..039fb18d8 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.h +++ b/src/modules/partition/jobs/FillGlobalStorageJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FILLGLOBALSTORAGEJOB_H @@ -25,6 +16,7 @@ #include #include +class Config; class Device; class Partition; @@ -39,7 +31,8 @@ class FillGlobalStorageJob : public Calamares::Job { Q_OBJECT public: - FillGlobalStorageJob( QList< Device* > devices, const QString& bootLoaderPath ); + FillGlobalStorageJob( const Config* config, QList< Device* > devices, const QString& bootLoaderPath ); + QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp index 45e851baf..599e29769 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.cpp +++ b/src/modules/partition/jobs/FormatPartitionJob.cpp @@ -1,26 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015-2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "FormatPartitionJob.h" +#include "core/KPMHelpers.h" + #include "partition/FileSystem.h" +#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include @@ -64,27 +58,31 @@ FormatPartitionJob::prettyDescription() const QString FormatPartitionJob::prettyStatusMessage() const { + QString partitionLabel = m_partition->label().isEmpty() + ? m_partition->partitionPath() + : tr( "%1 (%2)", "partition label %1 (device path %2)" ) + .arg( m_partition->label(), m_partition->partitionPath() ); return tr( "Formatting partition %1 with " "file system %2." ) - .arg( m_partition->partitionPath() ) - .arg( userVisibleFS( m_partition->fileSystem() ) ); + .arg( partitionLabel, userVisibleFS( m_partition->fileSystem() ) ); } Calamares::JobResult FormatPartitionJob::exec() { - Report report( nullptr ); // Root of the report tree, no parent - CreateFileSystemOperation op( *m_device, *m_partition, m_partition->fileSystem().type() ); - op.setStatus( Operation::StatusRunning ); - - QString message = tr( "The installer failed to format partition %1 on disk '%2'." ) - .arg( m_partition->partitionPath(), m_device->name() ); - - if ( op.execute( report ) ) + const auto fsType = m_partition->fileSystem().type(); + auto r = KPMHelpers::execute( CreateFileSystemOperation( *m_device, *m_partition, fsType ), + tr( "The installer failed to format partition %1 on disk '%2'." ) + .arg( m_partition->partitionPath(), m_device->name() ) ); + if ( fsType == FileSystem::Xfs && r.succeeded() ) { - return Calamares::JobResult::ok(); + // We are going to try to set modern timestamps for the filesystem, + // (ignoring whether this succeeds). Requires a sufficiently-new + // xfs_admin and xfs_repair and might be made obsolete by newer + // kpmcore releases. + CalamaresUtils::System::runCommand( { "xfs_admin", "-O", "bigtime=1", m_partition->partitionPath() }, + std::chrono::seconds( 60 ) ); } - - return Calamares::JobResult::error( message, report.toText() ); + return r; } diff --git a/src/modules/partition/jobs/FormatPartitionJob.h b/src/modules/partition/jobs/FormatPartitionJob.h index 2031efc78..38b2ee1a9 100644 --- a/src/modules/partition/jobs/FormatPartitionJob.h +++ b/src/modules/partition/jobs/FormatPartitionJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef FORMATPARTITIONJOB_H diff --git a/src/modules/partition/jobs/PartitionJob.cpp b/src/modules/partition/jobs/PartitionJob.cpp index 6b8dc9034..ca9b00944 100644 --- a/src/modules/partition/jobs/PartitionJob.cpp +++ b/src/modules/partition/jobs/PartitionJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionJob.h" @@ -34,5 +25,5 @@ PartitionJob::iprogress( int percent ) { percent = 100; } - emit progress( qreal( percent / 100.0 ) ); + Q_EMIT progress( qreal( percent / 100.0 ) ); } diff --git a/src/modules/partition/jobs/PartitionJob.h b/src/modules/partition/jobs/PartitionJob.h index eef6aaa4c..5222cf4d3 100644 --- a/src/modules/partition/jobs/PartitionJob.h +++ b/src/modules/partition/jobs/PartitionJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONJOB_H diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp index ed8353e72..227351064 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp @@ -1,28 +1,21 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "RemoveVolumeGroupJob.h" +#include "core/KPMHelpers.h" + #include #include #include -RemoveVolumeGroupJob::RemoveVolumeGroupJob( LvmDevice* device ) +RemoveVolumeGroupJob::RemoveVolumeGroupJob( Device*, LvmDevice* device ) : m_device( device ) { } @@ -48,17 +41,7 @@ RemoveVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult RemoveVolumeGroupJob::exec() { - Report report( nullptr ); - - RemoveVolumeGroupOperation op( *m_device ); - - op.setStatus( Operation::OperationStatus::StatusRunning ); - - QString message = tr( "The installer failed to remove a volume group named '%1'." ).arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + RemoveVolumeGroupOperation( *m_device ), + tr( "The installer failed to remove a volume group named '%1'." ).arg( m_device->name() ) ); } diff --git a/src/modules/partition/jobs/RemoveVolumeGroupJob.h b/src/modules/partition/jobs/RemoveVolumeGroupJob.h index 0a52a837e..8582e3635 100644 --- a/src/modules/partition/jobs/RemoveVolumeGroupJob.h +++ b/src/modules/partition/jobs/RemoveVolumeGroupJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef REMOVEVOLUMEGROUPJOB_H @@ -22,13 +13,14 @@ #include "Job.h" #include "partition/KPMManager.h" +class Device; class LvmDevice; class RemoveVolumeGroupJob : public Calamares::Job { Q_OBJECT public: - RemoveVolumeGroupJob( LvmDevice* device ); + RemoveVolumeGroupJob( Device*, LvmDevice* device ); QString prettyName() const override; QString prettyDescription() const override; diff --git a/src/modules/partition/jobs/ResizePartitionJob.cpp b/src/modules/partition/jobs/ResizePartitionJob.cpp index 9ebd4ce7e..fe1ceca4c 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.cpp +++ b/src/modules/partition/jobs/ResizePartitionJob.cpp @@ -1,28 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Andrius Štikonas + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Andrius Štikonas + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizePartitionJob.h" +#include "core/KPMHelpers.h" + #include "utils/Units.h" -// KPMcore #include #include #include @@ -75,23 +67,16 @@ ResizePartitionJob::prettyStatusMessage() const Calamares::JobResult ResizePartitionJob::exec() { - Report report( nullptr ); // Restore partition sectors that were modified for preview m_partition->setFirstSector( m_oldFirstSector ); m_partition->setLastSector( m_oldLastSector ); + ResizeOperation op( *m_device, *m_partition, m_newFirstSector, m_newLastSector ); - op.setStatus( Operation::StatusRunning ); connect( &op, &Operation::progress, this, &ResizePartitionJob::iprogress ); - - QString errorMessage = tr( "The installer failed to resize partition %1 on disk '%2'." ) - .arg( m_partition->partitionPath() ) - .arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( errorMessage, report.toText() ); + return KPMHelpers::execute( op, + tr( "The installer failed to resize partition %1 on disk '%2'." ) + .arg( m_partition->partitionPath() ) + .arg( m_device->name() ) ); } void diff --git a/src/modules/partition/jobs/ResizePartitionJob.h b/src/modules/partition/jobs/ResizePartitionJob.h index f8413f214..9e24b2d04 100644 --- a/src/modules/partition/jobs/ResizePartitionJob.h +++ b/src/modules/partition/jobs/ResizePartitionJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEPARTITIONJOB_H diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp index b44fd017b..f7a21d80d 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp @@ -1,30 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResizeVolumeGroupJob.h" -// KPMcore +#include "core/KPMHelpers.h" + #include #include #include #include -ResizeVolumeGroupJob::ResizeVolumeGroupJob( LvmDevice* device, QVector< const Partition* >& partitionList ) +ResizeVolumeGroupJob::ResizeVolumeGroupJob( Device*, LvmDevice* device, QVector< const Partition* >& partitionList ) : m_device( device ) , m_partitionList( partitionList ) { @@ -60,19 +52,9 @@ ResizeVolumeGroupJob::prettyStatusMessage() const Calamares::JobResult ResizeVolumeGroupJob::exec() { - Report report( nullptr ); - - ResizeVolumeGroupOperation op( *m_device, m_partitionList ); - - op.setStatus( Operation::OperationStatus::StatusRunning ); - - QString message = tr( "The installer failed to resize a volume group named '%1'." ).arg( m_device->name() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( message, report.toText() ); + return KPMHelpers::execute( + ResizeVolumeGroupOperation( *m_device, m_partitionList ), + tr( "The installer failed to resize a volume group named '%1'." ).arg( m_device->name() ) ); } QString diff --git a/src/modules/partition/jobs/ResizeVolumeGroupJob.h b/src/modules/partition/jobs/ResizeVolumeGroupJob.h index 808c39d32..bb3e09d75 100644 --- a/src/modules/partition/jobs/ResizeVolumeGroupJob.h +++ b/src/modules/partition/jobs/ResizeVolumeGroupJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Caio Jordão Carvalho + * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef RESIZEVOLUMEGROUPJOB_H @@ -24,6 +15,7 @@ #include +class Device; class LvmDevice; class Partition; @@ -31,7 +23,7 @@ class ResizeVolumeGroupJob : public Calamares::Job { Q_OBJECT public: - ResizeVolumeGroupJob( LvmDevice* device, QVector< const Partition* >& partitionList ); + ResizeVolumeGroupJob( Device*, LvmDevice* device, QVector< const Partition* >& partitionList ); QString prettyName() const override; QString prettyDescription() const override; diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp index 3c9403b50..507773288 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.cpp +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.cpp @@ -1,27 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2008 2010, Volker Lanz + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Based on the SetPartFlagsJob class from KDE Partition Manager, - * Copyright 2008, 2010, Volker Lanz + * Based on the SetPartFlagsJob class from KDE Partition Manager * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetPartitionFlagsJob.h" +#include "core/KPMHelpers.h" + #include "partition/FileSystem.h" #include "utils/Logger.h" #include "utils/Units.h" @@ -153,20 +146,12 @@ SetPartFlagsJob::prettyStatusMessage() const Calamares::JobResult SetPartFlagsJob::exec() { - cDebug() << "Setting flags on" << m_device->deviceNode() << "partition" << partition()->deviceNode() << "to" - << m_flags; + QStringList flagsList = PartitionTable::flagNames( m_flags ); + cDebug() << "Setting flags on" << m_device->deviceNode() << "partition" << partition()->deviceNode() + << Logger::DebugList( flagsList ); - Report report( nullptr ); SetPartFlagsOperation op( *m_device, *partition(), m_flags ); - op.setStatus( Operation::StatusRunning ); connect( &op, &Operation::progress, this, &SetPartFlagsJob::iprogress ); - - QString errorMessage - = tr( "The installer failed to set flags on partition %1." ).arg( m_partition->partitionPath() ); - if ( op.execute( report ) ) - { - return Calamares::JobResult::ok(); - } - - return Calamares::JobResult::error( errorMessage, report.toText() ); + return KPMHelpers::execute( + op, tr( "The installer failed to set flags on partition %1." ).arg( m_partition->partitionPath() ) ); } diff --git a/src/modules/partition/jobs/SetPartitionFlagsJob.h b/src/modules/partition/jobs/SetPartitionFlagsJob.h index 41b01ecde..eb6d9586c 100644 --- a/src/modules/partition/jobs/SetPartitionFlagsJob.h +++ b/src/modules/partition/jobs/SetPartitionFlagsJob.h @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Based on the SetPartFlagsJob class from KDE Partition Manager, - * Copyright 2008, 2010, Volker Lanz + * SPDX-FileCopyrightText: 2008 2010, Volker Lanz * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETPARTITIONFLAGSJOB_H diff --git a/src/modules/partition/partition.conf b/src/modules/partition/partition.conf index 241e4ea05..d1c5ba255 100644 --- a/src/modules/partition/partition.conf +++ b/src/modules/partition/partition.conf @@ -1,12 +1,28 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # This setting specifies the mount point of the EFI system partition. Some # distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS, # etc.) use just /boot. +# +# Defaults to "/boot/efi", may be empty (but weird effects ensue) efiSystemPartition: "/boot/efi" # This optional setting specifies the size of the EFI system partition. # If nothing is specified, the default size of 300MiB will be used. +# +# This size applies both to automatic partitioning and the checks +# during manual partitioning. A minimum of 32MiB is enforced, +# 300MiB is the default, M is treated as MiB, and if you really want +# one-million (10^6) bytes, use MB. +# # efiSystemPartitionSize: 300M +# This optional setting specifies the name of the EFI system partition (see +# PARTLABEL; gpt only; requires KPMCore >= 4.2.0). +# If nothing is specified, the partition name is left unset. +# efiSystemPartitionName: EFI + # In autogenerated partitioning, allow the user to select a swap size? # If there is exactly one choice, no UI is presented, and the user # cannot make a choice -- this setting is used. If there is more than @@ -28,12 +44,21 @@ efiSystemPartition: "/boot/efi" # In both cases, a fudge factor (usually 10% extra) is applied so that there # is some space for administrative overhead (e.g. 8 GiB swap will allocate # 8.8GiB on disk in the end). +# +# If *file* is enabled here, make sure to have the *fstab* module +# as well (later in the exec phase) so that the swap file is +# actually created. userSwapChoices: - none # Create no swap, use no swap - - reuse # Re-use existing swap, but don't create any (unsupported right now) - small # Up to 4GB - suspend # At least main memory size - - file # To swap file instead of partition (unsupported right now) + # - reuse # Re-use existing swap, but don't create any (unsupported right now) + - file # To swap file instead of partition + +# This optional setting specifies the name of the swap partition (see +# PARTLABEL; gpt only; requires KPMCore >= 4.2.0). +# If nothing is specified, the partition name is left unset. +# swapPartitionName: swap # LEGACY SETTINGS (these will generate a warning) # ensureSuspendToDisk: true @@ -45,6 +70,64 @@ drawNestedPartitions: false # Show/hide partition labels on manual partitioning page. alwaysShowPartitionLabels: true +# Allow manual partitioning. +# +# When set to false, this option hides the "Manual partitioning" button, +# limiting the user's choice to "Erase", "Replace" or "Alongside". +# This can be useful when using a custom partition layout we don't want +# the user to modify. +# +# If nothing is specified, manual partitioning is enabled. +#allowManualPartitioning: true + +# Initial selection on the Choice page +# +# There are four radio buttons (in principle: erase, replace, alongside, manual), +# and you can pick which of them, if any, is initially selected. For most +# installers, "none" is the right choice: it makes the user pick something specific, +# rather than accidentally being able to click past an important choice (in particular, +# "erase" is a dangerous choice). +# +# The default is "none" +# +initialPartitioningChoice: none +# +# Similarly, some of the installation choices may offer a choice of swap; +# the available choices depend on *userSwapChoices*, above, and this +# setting can be used to pick a specific one. +# +# The default is "none" (no swap) if that is one of the enabled options, otherwise +# one of the items from the options. +initialSwapChoice: none + +# Default partition table type, used when a "erase" disk is made. +# +# When erasing a disk, a new partition table is created on disk. +# In other cases, e.g. Replace and Alongside, as well as when using +# manual partitioning, this partition table exists already on disk +# and it is left unmodified. +# +# Suggested values: gpt, msdos +# If nothing is specified, Calamares defaults to "gpt" if system is +# efi or "msdos". +# +# Names are case-sensitive and defined by KPMCore. +# defaultPartitionTableType: msdos + +# Requirement for partition table type +# +# Restrict the installation on disks that match the type of partition +# tables that are specified. +# +# Possible values: msdos, gpt. Names are case-sensitive and defined by KPMCore. +# +# If nothing is specified, Calamares defaults to both "msdos" and "gpt". +# +# requiredPartitionTableType: gpt +# requiredPartitionTableType: +# - msdos +# - gpt + # Default filesystem type, used when a "new" partition is made. # # When replacing a partition, the existing filesystem inside the @@ -61,6 +144,20 @@ alwaysShowPartitionLabels: true # Names are case-sensitive and defined by KPMCore. defaultFileSystemType: "ext4" +# Selectable filesystem type, used when "erase" is done. +# +# When erasing the disk, the *defaultFileSystemType* is used (see +# above), but it is also possible to give users a choice: +# list suitable filesystems here. A drop-down is provided +# to pick which is the filesystems will be used. +# +# The value *defaultFileSystemType* is added to this list (with a warning) +# if not present; the default pick is the *defaultFileSystemType*. +# +# If not specified at all, uses *defaultFileSystemType* without a +# warning (this matches traditional no-choice-available behavior best). +# availableFileSystemTypes: ["ext4","f2fs"] + # Show/hide LUKS related functionality in automated partitioning modes. # Disable this if you choose not to deploy early unlocking support in GRUB2 # and/or your distribution's initramfs solution. @@ -74,25 +171,25 @@ defaultFileSystemType: "ext4" # may arise as a consequence of setting this option to false. # It is strongly recommended that system integrators put in the work to support # LUKS unlocking support in GRUB2 and initramfs/dracut/mkinitcpio/etc. -# Support is offered to system integrators that wish to do so, through the -# Calamares bug tracker, as well as in #calamares on Freenode. # For more information on setting up GRUB2 for Calamares with LUKS, see # https://github.com/calamares/calamares/wiki/Deploy-LUKS # # If nothing is specified, LUKS is enabled in automated modes. #enableLuksAutomatedPartitioning: true -# Allow manual partitioning. +# Partition layout. # -# When set to false, this option hides the "Manual partitioning" button, -# limiting the user's choice to "Erase", "Replace" or "Alongside". -# This can be useful when using a custom partition layout we don't want -# the user to modify. +# This optional setting specifies a custom partition layout. # -# If nothing is specified, manual partitioning is enabled. -#allowManualPartitioning: true - -# To apply a custom partition layout, it has to be defined this way : +# If nothing is specified, the default partition layout is a single partition +# for root that uses 100% of the space and uses the filesystem defined by +# defaultFileSystemType. +# +# Note: the EFI system partition is prepend automatically to the layout if +# needed; the swap partition is appended to the layout if enabled (small of +# suspend). +# +# Otherwise, the partition layout is defined as follow: # # partitionLayout: # - name: "rootfs" @@ -102,8 +199,9 @@ defaultFileSystemType: "ext4" # size: 20% # minSize: 500M # maxSize: 10G +# attributes: 0xffff000000000003 # - name: "home" -# type = "933ac7e1-2eb4-4f13-b844-0e14e2aef915" +# type: "933ac7e1-2eb4-4f13-b844-0e14e2aef915" # filesystem: "ext4" # mountPoint: "/home" # size: 3G @@ -123,9 +221,16 @@ defaultFileSystemType: "ext4" # - name: filesystem label # and # partition name (gpt only; since KPMCore 4.2.0) +# - uuid: partition uuid (optional parameter; gpt only; requires KPMCore >= 4.2.0) # - type: partition type (optional parameter; gpt only; requires KPMCore >= 4.2.0) -# - filesystem: filesystem type -# - mountPoint: partition mount point +# - attributes: partition attributes (optional parameter; gpt only; requires KPMCore >= 4.2.0) +# - filesystem: filesystem type (optional parameter) +# - if not set at all, treat as "unformatted" +# - if "unformatted", no filesystem will be created +# - if "unknown" (or an unknown FS name, like "elephant") then the +# default filesystem type, or the user's choice, will be applied instead +# of "unknown" (e.g. the user might pick ext4, or xfs). +# - mountPoint: partition mount point (optional parameter; not mounted if unset) # - size: partition size in bytes (append 'K', 'M' or 'G' for KiB, MiB or GiB) # or # % of the available drive space if a '%' is appended to the value diff --git a/src/modules/partition/partition.schema.yaml b/src/modules/partition/partition.schema.yaml new file mode 100644 index 000000000..6c65e8ae7 --- /dev/null +++ b/src/modules/partition/partition.schema.yaml @@ -0,0 +1,32 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/partition +additionalProperties: false +type: object +properties: + efiSystemPartition: { type: string } # Mount point + efiSystemPartitionSize: { type: string } + efiSystemPartitionName: { type: string } + + userSwapChoices: { type: array, items: { type: string, enum: [ none, reuse, small, suspend, file ] } } + # ensureSuspendToDisk: { type: boolean, default: true } # Legacy + # neverCreateSwap: { type: boolean, default: false } # Legacy + + drawNestedPartitions: { type: boolean, default: false } + alwaysShowPartitionLabels: { type: boolean, default: true } + + defaultFileSystemType: { type: string } + availableFileSystemTypes: { type: array, items: { type: string } } + + enableLuksAutomatedPartitioning: { type: boolean, default: false } + allowManualPartitioning: { type: boolean, default: true } + partitionLayout: { type: array } # TODO: specify items + initialPartitioningChoice: { type: string, enum: [ none, erase, replace, alongside, manual ] } + initialSwapChoice: { type: string, enum: [ none, small, suspend, reuse, file ] } + + requiredStorage: { type: number } +required: + - efiSystemPartition + - userSwapChoices diff --git a/src/modules/partition/tests/AutoMountTests.cpp b/src/modules/partition/tests/AutoMountTests.cpp new file mode 100644 index 000000000..103fe6f82 --- /dev/null +++ b/src/modules/partition/tests/AutoMountTests.cpp @@ -0,0 +1,88 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "jobs/AutoMountManagementJob.h" + +#include "JobQueue.h" +#include "utils/Logger.h" + +#include +#include + +class AutoMountJobTests : public QObject +{ + Q_OBJECT +public: + AutoMountJobTests(); + +private Q_SLOTS: + void testRunThrice(); + void testRunQueue(); +}; + +AutoMountJobTests::AutoMountJobTests() {} + +/* This doesn't really test anything, since automount management + * is supposed to be opaque: the job always returns true. What + * is interesting is the debug output, where the job informs + * about the pointer it holds. + * + * That should output 0, then non-zero, then 0 again. + * + */ +void +AutoMountJobTests::testRunThrice() +{ + Logger::setupLogLevel( Logger::LOGVERBOSE ); + + auto original = CalamaresUtils::Partition::automountDisable( true ); + cDebug() << "Got automount info" << Logger::Pointer( original ); + + AutoMountManagementJob j( false ); + QVERIFY( j.exec() ); + QVERIFY( j.exec() ); + QVERIFY( j.exec() ); + + CalamaresUtils::Partition::automountRestore( original ); +} + +void +AutoMountJobTests::testRunQueue() +{ + Calamares::JobQueue q; + Calamares::job_ptr jp( new AutoMountManagementJob( false ) ); + QSignalSpy progress( &q, &Calamares::JobQueue::progress ); + QSignalSpy finish( &q, &Calamares::JobQueue::finished ); + QSignalSpy fail( &q, &Calamares::JobQueue::failed ); + + Logger::setupLogLevel( Logger::LOGVERBOSE ); + cDebug() << "Got automount job" << jp; + + QVERIFY( !q.isRunning() ); + q.enqueue( 2, { jp, jp } ); + QVERIFY( !q.isRunning() ); + + QEventLoop loop; + QTimer::singleShot( std::chrono::milliseconds( 100 ), [ &q ]() { q.start(); } ); + QTimer::singleShot( std::chrono::milliseconds( 5000 ), [ &loop ]() { loop.quit(); } ); + connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); + loop.exec(); + + QCOMPARE( fail.count(), 0 ); + QCOMPARE( finish.count(), 1 ); + // 5 progress: 0% and 100% for each *job* and then 100% overall + QCOMPARE( progress.count(), 5 ); +} + + +QTEST_GUILESS_MAIN( AutoMountJobTests ) + +#include "utils/moc-warnings.h" + +#include "AutoMountTests.moc" diff --git a/src/modules/partition/tests/CMakeLists.txt b/src/modules/partition/tests/CMakeLists.txt index 0bd559fd1..da017d96f 100644 --- a/src/modules/partition/tests/CMakeLists.txt +++ b/src/modules/partition/tests/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 COMPONENTS Gui REQUIRED ) set( PartitionModule_SOURCE_DIR .. ) @@ -10,7 +15,7 @@ include_directories( ) calamares_add_test( - partitionjobtests + partitionjobtest SOURCES PartitionJobTests.cpp ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp @@ -26,7 +31,7 @@ calamares_add_test( ) calamares_add_test( - clearmountsjobtests + partitionclearmountsjobtest SOURCES ${PartitionModule_SOURCE_DIR}/jobs/ClearMountsJob.cpp ClearMountsJobTests.cpp @@ -35,3 +40,36 @@ calamares_add_test( DEFINITIONS ${_partition_defs} ) + +calamares_add_test( + partitioncreatelayoutstest + SOURCES + CreateLayoutsTests.cpp + ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp + ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp + ${PartitionModule_SOURCE_DIR}/core/PartitionLayout.cpp + ${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp + ${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp + LIBRARIES + kpmcore + Calamares::calamaresui + DEFINITIONS ${_partition_defs} +) + +calamares_add_test( + partitionautomounttest + SOURCES + ${PartitionModule_SOURCE_DIR}/jobs/AutoMountManagementJob.cpp + AutoMountTests.cpp + DEFINITIONS ${_partition_defs} +) + +calamares_add_test( + partitiondevicestest + SOURCES + DevicesTests.cpp + ${PartitionModule_SOURCE_DIR}/core/DeviceList.cpp + LIBRARIES + kpmcore + DEFINITIONS ${_partition_defs} +) diff --git a/src/modules/partition/tests/ClearMountsJobTests.cpp b/src/modules/partition/tests/ClearMountsJobTests.cpp index 1f01c4638..17565e756 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.cpp +++ b/src/modules/partition/tests/ClearMountsJobTests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ClearMountsJobTests.h" @@ -26,23 +17,33 @@ QTEST_GUILESS_MAIN( ClearMountsJobTests ) /* Not exactly public API */ -QStringList -getPartitionsForDevice( const QString& deviceName ); +QStringList getPartitionsForDevice( const QString& deviceName ); +/* At one point, the partitions-list was read from /proc/partitions by + * running awk and grep, as below. Check that the current implementation + * matches that crufty one. + * + * Update 2021-11-02: the newer implementation prepends /dev/ to the + * names of the partitions, for simplicity elsewhere, so that needs + * to be added in to the awk(1) program, too. + */ QStringList -getPartitionsForDevice_other(const QString& deviceName) +getPartitionsForDevice_other( const QString& deviceName ) { QProcess process; process.setProgram( "sh" ); - process.setArguments( { - "-c", - QString( "echo $(awk '{print $4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' -e '/[1-9]/!d' | grep %1)" ) - .arg( deviceName ) - } ); + process.setArguments( { "-c", + QString( "echo $(awk '{print \"/dev/\"$4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' " + "-e '/[1-9]/!d' | grep %1)" ) + .arg( deviceName ) } ); process.start(); process.waitForFinished(); - const QString partitions = process.readAllStandardOutput(); + const QString partitions = process.readAllStandardOutput().trimmed(); + if ( partitions.isEmpty() ) + { + return QStringList(); + } const QStringList partitionsList = partitions.simplified().split( ' ' ); return partitionsList; @@ -51,10 +52,11 @@ getPartitionsForDevice_other(const QString& deviceName) ClearMountsJobTests::ClearMountsJobTests() { - Logger::setupLogLevel(6); + Logger::setupLogLevel( Logger::LOGDEBUG ); } -void ClearMountsJobTests::testFindPartitions() +void +ClearMountsJobTests::testFindPartitions() { QStringList partitions = getPartitionsForDevice( "sda" ); QStringList other_part = getPartitionsForDevice_other( "sda" ); diff --git a/src/modules/partition/tests/ClearMountsJobTests.h b/src/modules/partition/tests/ClearMountsJobTests.h index 0cc2b5c78..4b13fdc3d 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.h +++ b/src/modules/partition/tests/ClearMountsJobTests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CLEARMOUNTSJOBTESTS_H diff --git a/src/modules/partition/tests/CreateLayoutsTests.cpp b/src/modules/partition/tests/CreateLayoutsTests.cpp new file mode 100644 index 000000000..68b839e08 --- /dev/null +++ b/src/modules/partition/tests/CreateLayoutsTests.cpp @@ -0,0 +1,160 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Corentin Noël + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "CreateLayoutsTests.h" + +#include "core/PartitionLayout.h" + +#include "JobQueue.h" +#include "partition/KPMManager.h" +#include "utils/Logger.h" + +#include + +#include + +using namespace CalamaresUtils::Units; + +class PartitionTable; +class SmartStatus; + +QTEST_GUILESS_MAIN( CreateLayoutsTests ) + +static CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; +static Calamares::JobQueue* jobqueue = nullptr; + +#define LOGICAL_SIZE 512 + +CreateLayoutsTests::CreateLayoutsTests() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); +} + +void +CreateLayoutsTests::init() +{ + jobqueue = new Calamares::JobQueue( nullptr ); + kpmcore = new CalamaresUtils::Partition::KPMManager(); +} + +void +CreateLayoutsTests::cleanup() +{ + delete kpmcore; + delete jobqueue; +} + +void +CreateLayoutsTests::testFixedSizePartition() +{ + PartitionLayout layout = PartitionLayout(); + TestDevice dev( QString( "test" ), LOGICAL_SIZE, 5_GiB / LOGICAL_SIZE ); + PartitionRole role( PartitionRole::Role::Any ); + QList< Partition* > partitions; + + if ( !layout.addEntry( { FileSystem::Type::Ext4, QString( "/" ), QString( "5MiB" ) } ) ) + { + QFAIL( qPrintable( "Unable to create / partition" ) ); + } + + partitions + = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); + + QCOMPARE( partitions.count(), 1 ); + + QCOMPARE( partitions[ 0 ]->length(), 5_MiB / LOGICAL_SIZE ); +} + +void +CreateLayoutsTests::testPercentSizePartition() +{ + PartitionLayout layout = PartitionLayout(); + TestDevice dev( QString( "test" ), LOGICAL_SIZE, 5_GiB / LOGICAL_SIZE ); + PartitionRole role( PartitionRole::Role::Any ); + QList< Partition* > partitions; + + if ( !layout.addEntry( { FileSystem::Type::Ext4, QString( "/" ), QString( "50%" ) } ) ) + { + QFAIL( qPrintable( "Unable to create / partition" ) ); + } + + partitions + = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); + + QCOMPARE( partitions.count(), 1 ); + + QCOMPARE( partitions[ 0 ]->length(), ( 5_GiB / 2 ) / LOGICAL_SIZE ); +} + +void +CreateLayoutsTests::testMixedSizePartition() +{ + PartitionLayout layout = PartitionLayout(); + TestDevice dev( QString( "test" ), LOGICAL_SIZE, 5_GiB / LOGICAL_SIZE ); + PartitionRole role( PartitionRole::Role::Any ); + QList< Partition* > partitions; + + if ( !layout.addEntry( { FileSystem::Type::Ext4, QString( "/" ), QString( "5MiB" ) } ) ) + { + QFAIL( qPrintable( "Unable to create / partition" ) ); + } + + if ( !layout.addEntry( { FileSystem::Type::Ext4, QString( "/home" ), QString( "50%" ) } ) ) + { + QFAIL( qPrintable( "Unable to create /home partition" ) ); + } + + if ( !layout.addEntry( { FileSystem::Type::Ext4, QString( "/bkup" ), QString( "50%" ) } ) ) + { + QFAIL( qPrintable( "Unable to create /bkup partition" ) ); + } + + partitions + = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); + + QCOMPARE( partitions.count(), 3 ); + + QCOMPARE( partitions[ 0 ]->length(), 5_MiB / LOGICAL_SIZE ); + QCOMPARE( partitions[ 1 ]->length(), ( ( 5_GiB - 5_MiB ) / 2 ) / LOGICAL_SIZE ); + QCOMPARE( partitions[ 2 ]->length(), ( ( 5_GiB - 5_MiB ) / 2 ) / LOGICAL_SIZE ); +} + +#ifdef WITH_KPMCORE4API +// TODO: Get a clean way to instantiate a test Device from KPMCore +class DevicePrivate +{ +public: + QString m_Name; + QString m_DeviceNode; + qint64 m_LogicalSectorSize; + qint64 m_TotalLogical; + PartitionTable* m_PartitionTable; + QString m_IconName; + std::shared_ptr< SmartStatus > m_SmartStatus; + Device::Type m_Type; +}; + +TestDevice::TestDevice( const QString& name, const qint64 logicalSectorSize, const qint64 totalLogicalSectors ) + : Device( std::make_shared< DevicePrivate >(), + name, + QString( "node" ), + logicalSectorSize, + totalLogicalSectors, + QString(), + Device::Type::Unknown_Device ) +{ +} +#else +TestDevice::TestDevice( const QString& name, const qint64 logicalSectorSize, const qint64 totalLogicalSectors ) + : Device( name, QString( "node" ), logicalSectorSize, totalLogicalSectors, QString(), Device::Type::Unknown_Device ) +{ +} +#endif + +TestDevice::~TestDevice() {} diff --git a/src/modules/partition/tests/CreateLayoutsTests.h b/src/modules/partition/tests/CreateLayoutsTests.h new file mode 100644 index 000000000..5953b06a7 --- /dev/null +++ b/src/modules/partition/tests/CreateLayoutsTests.h @@ -0,0 +1,39 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Corentin Noël + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef CLEARMOUNTSJOBTESTS_H +#define CLEARMOUNTSJOBTESTS_H + +#include "partition/KPMHelper.h" + +#include + +class CreateLayoutsTests : public QObject +{ + Q_OBJECT +public: + CreateLayoutsTests(); + ~CreateLayoutsTests() override = default; + +private Q_SLOTS: + void testFixedSizePartition(); + void testPercentSizePartition(); + void testMixedSizePartition(); + void init(); + void cleanup(); +}; + +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/DevicesTests.cpp b/src/modules/partition/tests/DevicesTests.cpp new file mode 100644 index 000000000..c63d7476d --- /dev/null +++ b/src/modules/partition/tests/DevicesTests.cpp @@ -0,0 +1,90 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "core/DeviceList.h" + +#include "partition/KPMManager.h" +#include "utils/Logger.h" + +#include +#include + +#include +#include + +#include + +#include + +class DevicesTests : public QObject +{ + Q_OBJECT + +public: + DevicesTests(); + +private Q_SLOTS: + void testKPMScanDevices(); + void testPartUtilScanDevices(); + +private: + std::unique_ptr< CalamaresUtils::Partition::KPMManager > m_d; + bool m_isRoot = false; +}; + +DevicesTests::DevicesTests() + : m_d( std::make_unique< CalamaresUtils::Partition::KPMManager >() ) + , m_isRoot( geteuid() == 0 ) +{ +} + +void +DevicesTests::testKPMScanDevices() +{ + Logger::setupLogLevel( Logger::LOGVERBOSE ); + + cDebug() << "Getting devices via KPMCore"; + CoreBackend* backend = CoreBackendManager::self()->backend(); + QVERIFY( backend ); +#if defined( WITH_KPMCORE4API ) + auto flags = ScanFlag( ~0 ); +#else + auto flags = true; +#endif + auto devices = backend->scanDevices( flags ); // These flags try to get "all" + cDebug() << Logger::SubEntry << "Done getting devices."; + + if ( !m_isRoot ) + { + QEXPECT_FAIL( "", "Test invalid when not root", Continue ); + } + QVERIFY( devices.count() > 0 ); +} + +void +DevicesTests::testPartUtilScanDevices() +{ + Logger::setupLogLevel( Logger::LOGVERBOSE ); + + cDebug() << "Getting devices via PartUtils"; + auto devices = PartUtils::getDevices(); + cDebug() << Logger::SubEntry << "Done getting devices."; + + if ( !m_isRoot ) + { + QEXPECT_FAIL( "", "Test invalid when not root", Continue ); + } + QVERIFY( devices.count() > 0 ); +} + +QTEST_GUILESS_MAIN( DevicesTests ) + +#include "utils/moc-warnings.h" + +#include "DevicesTests.moc" diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index de6f0d7bb..4dddf4377 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -1,21 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau - * Copyright 2018, Philip Müller - * Copyright 2017, 2019 Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2017, 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PartitionJobTests.h" @@ -25,14 +15,12 @@ #include "jobs/CreatePartitionTableJob.h" #include "jobs/ResizePartitionJob.h" +#include "partition/KPMHelper.h" #include "partition/KPMManager.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Units.h" -#include -#include - #include #include #include @@ -40,8 +28,7 @@ QTEST_GUILESS_MAIN( PartitionJobTests ) using namespace Calamares; -using CalamaresUtils::operator""_MiB; -using CalamaresUtils::Partition::isPartitionFreeSpace; +using namespace CalamaresUtils::Units; class PartitionMounter { @@ -116,7 +103,7 @@ static Partition* firstFreePartition( PartitionNode* parent ) { for ( auto child : parent->children() ) - if ( isPartitionFreeSpace( child ) ) + if ( CalamaresUtils::Partition::isPartitionFreeSpace( child ) ) { return child; } @@ -166,7 +153,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() @@ -224,7 +211,7 @@ PartitionJobTests::queuePartitionTableCreation( PartitionTable::TableType type ) { auto job = new CreatePartitionTableJob( m_device.data(), type ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); } CreatePartitionJob* @@ -276,7 +263,7 @@ PartitionJobTests::testCreatePartition() Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); @@ -284,7 +271,7 @@ PartitionJobTests::testCreatePartition() Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); @@ -292,7 +279,7 @@ PartitionJobTests::testCreatePartition() Partition* partition3 = job->partition(); QVERIFY( partition3 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); @@ -317,14 +304,14 @@ PartitionJobTests::testCreatePartitionExtended() Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10_MiB ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); Partition* extendedPartition = job->partition(); freePartition = firstFreePartition( extendedPartition ); @@ -333,7 +320,7 @@ PartitionJobTests::testCreatePartitionExtended() Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); @@ -390,12 +377,13 @@ PartitionJobTests::testResizePartition() *m_device, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, + QStringLiteral( "testp" ), oldFirst, oldLast, KPM_PARTITION_FLAG( None ) ); CreatePartitionJob* job = new CreatePartitionJob( m_device.data(), partition ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); } @@ -419,7 +407,7 @@ PartitionJobTests::testResizePartition() // Resize ResizePartitionJob* job = new ResizePartitionJob( m_device.data(), partition, newFirst, newLast ); job->updatePreview(); - m_queue.enqueue( job_ptr( job ) ); + m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); QCOMPARE( partition->firstSector(), newFirst ); diff --git a/src/modules/partition/tests/PartitionJobTests.h b/src/modules/partition/tests/PartitionJobTests.h index 4ce064ec7..9e4455ddc 100644 --- a/src/modules/partition/tests/PartitionJobTests.h +++ b/src/modules/partition/tests/PartitionJobTests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Aurélien Gâteau + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTITIONJOBTESTS_H @@ -21,12 +12,7 @@ #include "JobQueue.h" -// CalaPM -#include -#include -#include -#include -#include +#include "partition/KPMHelper.h" // Qt #include @@ -36,7 +22,7 @@ class QueueRunner : public QObject { public: QueueRunner( Calamares::JobQueue* queue ); - virtual ~QueueRunner() override; + ~QueueRunner() override; /** * Synchronously runs the queue. Returns true on success diff --git a/src/modules/plasmalnf/CMakeLists.txt b/src/modules/plasmalnf/CMakeLists.txt index 93c88b291..8ae205aed 100644 --- a/src/modules/plasmalnf/CMakeLists.txt +++ b/src/modules/plasmalnf/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) # Requires a sufficiently recent Plasma framework, but also @@ -5,16 +10,18 @@ find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE) set( lnf_ver 5.41 ) find_package( KF5Config ${lnf_ver} ) -find_package( KF5Plasma ${lnf_ver} ) -find_package( KF5Package ${lnf_ver} ) set_package_properties( KF5Config PROPERTIES PURPOSE "For finding default Plasma Look-and-Feel" ) + +find_package( KF5Plasma ${lnf_ver} ) set_package_properties( KF5Plasma PROPERTIES PURPOSE "For Plasma Look-and-Feel selection" ) + +find_package( KF5Package ${lnf_ver} ) set_package_properties( KF5Package PROPERTIES PURPOSE "For Plasma Look-and-Feel selection" @@ -27,16 +34,16 @@ if ( KF5Plasma_FOUND AND KF5Package_FOUND ) COMPILE_DEFINITIONS ${option_defs} SOURCES + Config.cpp PlasmaLnfViewStep.cpp PlasmaLnfPage.cpp PlasmaLnfJob.cpp - ThemeWidget.cpp + ThemeInfo.cpp RESOURCES page_plasmalnf.qrc UI page_plasmalnf.ui LINK_PRIVATE_LIBRARIES - calamaresui KF5::Package KF5::Plasma SHARED_LIB diff --git a/src/modules/plasmalnf/Config.cpp b/src/modules/plasmalnf/Config.cpp new file mode 100644 index 000000000..e022109b4 --- /dev/null +++ b/src/modules/plasmalnf/Config.cpp @@ -0,0 +1,164 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "PlasmaLnfJob.h" +#include "ThemeInfo.h" + +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +#ifdef WITH_KCONFIG +#include +#include +#endif + +#include + +static QString +currentPlasmaTheme() +{ +#ifdef WITH_KCONFIG + KConfigGroup cg( KSharedConfig::openConfig( QStringLiteral( "kdeglobals" ) ), "KDE" ); + return cg.readEntry( "LookAndFeelPackage", QString() ); +#else + cWarning() << "No KConfig support, cannot determine Plasma theme."; + return QString(); +#endif +} + +Config::Config( QObject* parent ) + : QObject( parent ) + , m_themeModel( new ThemesModel( this ) ) +{ + auto* filter = new QSortFilterProxyModel( m_themeModel ); + filter->setFilterRole( ThemesModel::ShownRole ); + filter->setFilterFixedString( QStringLiteral( "true" ) ); + filter->setSourceModel( m_themeModel ); + filter->setSortRole( ThemesModel::LabelRole ); + filter->sort( 0 ); + + m_filteredModel = filter; +} + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_lnfPath = CalamaresUtils::getString( configurationMap, "lnftool" ); + + if ( m_lnfPath.isEmpty() ) + { + cWarning() << "no lnftool given for plasmalnf module."; + } + + m_liveUser = CalamaresUtils::getString( configurationMap, "liveuser" ); + + QString preselect = CalamaresUtils::getString( configurationMap, "preselect" ); + if ( preselect == QStringLiteral( "*" ) ) + { + preselect = currentPlasmaTheme(); + } + m_preselectThemeId = preselect; + + if ( configurationMap.contains( "themes" ) && configurationMap.value( "themes" ).type() == QVariant::List ) + { + QMap< QString, QString > listedThemes; + auto themeList = configurationMap.value( "themes" ).toList(); + // Create the ThemInfo objects for the listed themes; information + // about the themes from Plasma (e.g. human-readable name and description) + // are filled in by update_names() in PlasmaLnfPage. + for ( const auto& i : themeList ) + if ( i.type() == QVariant::Map ) + { + auto iv = i.toMap(); + listedThemes.insert( iv.value( "theme" ).toString(), iv.value( "image" ).toString() ); + } + else if ( i.type() == QVariant::String ) + { + listedThemes.insert( i.toString(), QString() ); + } + + if ( listedThemes.count() == 1 ) + { + cWarning() << "only one theme enabled in plasmalnf"; + } + m_themeModel->setThemeImage( listedThemes ); + + bool showAll = CalamaresUtils::getBool( configurationMap, "showAll", false ); + if ( !listedThemes.isEmpty() && !showAll ) + { + m_themeModel->showOnlyThemes( listedThemes ); + } + } + + m_themeModel->select( m_preselectThemeId ); +} + +Calamares::JobList +Config::createJobs() const +{ + Calamares::JobList l; + + cDebug() << "Creating Plasma LNF jobs .."; + if ( !theme().isEmpty() ) + { + if ( !lnfToolPath().isEmpty() ) + { + l.append( Calamares::job_ptr( new PlasmaLnfJob( lnfToolPath(), theme() ) ) ); + } + else + { + cWarning() << "no lnftool given for plasmalnf module."; + } + } + return l; +} + + +void +Config::setTheme( const QString& id ) +{ + if ( m_themeId == id ) + { + return; + } + + m_themeId = id; + if ( lnfToolPath().isEmpty() ) + { + cWarning() << "no lnftool given for plasmalnf module."; + } + else + { + QStringList command; + if ( !m_liveUser.isEmpty() ) + { + command << "sudo" + << "-E" + << "-H" + << "-u" << m_liveUser; + } + command << lnfToolPath() << "--resetLayout" + << "--apply" << id; + auto r = CalamaresUtils::System::instance()->runCommand( command, std::chrono::seconds( 10 ) ); + + if ( r.getExitCode() ) + { + cWarning() << "Failed (" << r.getExitCode() << ')'; + } + else + { + cDebug() << "Plasma look-and-feel applied" << id; + } + } + m_themeModel->select( id ); + emit themeChanged( id ); +} diff --git a/src/modules/plasmalnf/Config.h b/src/modules/plasmalnf/Config.h new file mode 100644 index 000000000..aafdf6418 --- /dev/null +++ b/src/modules/plasmalnf/Config.h @@ -0,0 +1,77 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef PLASMALNF_CONFIG_H +#define PLASMALNF_CONFIG_H + +#include "Job.h" + +#include "ThemeInfo.h" + +#include + +class Config : public QObject +{ + Q_OBJECT + + Q_PROPERTY( QString preselectedTheme READ preselectedTheme CONSTANT ) + Q_PROPERTY( QString theme READ theme WRITE setTheme NOTIFY themeChanged ) + Q_PROPERTY( QAbstractItemModel* themeModel READ themeModel CONSTANT ) + +public: + Config( QObject* parent = nullptr ); + virtual ~Config() override = default; // QObject cleans up the model pointer + + void setConfigurationMap( const QVariantMap& ); + Calamares::JobList createJobs() const; + + /** @brief Full path to the lookandfeeltool (if it exists) + * + * This can be configured, or defaults to `lookandfeeltool` to find + * it in $PATH. + */ + QString lnfToolPath() const { return m_lnfPath; } + /** @brief For OEM mode, the name of the (current) live user + * + */ + QString liveUser() const { return m_liveUser; } + + /** @brief The id (in reverse-DNS notation) of the current theme. + */ + QString theme() const { return m_themeId; } + + /** @brief The theme we start with + * + * This can be configured, or is taken from the live environment + * if the environment is (also) KDE Plasma. + */ + QString preselectedTheme() const { return m_preselectThemeId; } + + /** @brief The (list) model of available themes. + */ + QAbstractItemModel* themeModel() const { return m_filteredModel; } + +public slots: + void setTheme( const QString& id ); + +signals: + void themeChanged( const QString& id ); + +private: + QString m_lnfPath; // Path to the lnf tool + QString m_liveUser; // Name of the live user (for OEM mode) + + QString m_preselectThemeId; + QString m_themeId; // Id of selected theme + + QAbstractItemModel* m_filteredModel = nullptr; + ThemesModel* m_themeModel = nullptr; +}; + +#endif diff --git a/src/modules/plasmalnf/PlasmaLnfJob.cpp b/src/modules/plasmalnf/PlasmaLnfJob.cpp index d5db8ae4c..3b550d50a 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.cpp +++ b/src/modules/plasmalnf/PlasmaLnfJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PlasmaLnfJob.h" @@ -23,17 +14,18 @@ #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#ifdef WITH_KCONFIG +#include +#include +#endif + PlasmaLnfJob::PlasmaLnfJob( const QString& lnfPath, const QString& id ) : m_lnfPath( lnfPath ) , m_id( id ) { } - -PlasmaLnfJob::~PlasmaLnfJob() -{ -} - +PlasmaLnfJob::~PlasmaLnfJob() {} QString PlasmaLnfJob::prettyName() const @@ -41,38 +33,40 @@ PlasmaLnfJob::prettyName() const return tr( "Plasma Look-and-Feel Job" ); } -QString -PlasmaLnfJob::prettyDescription() const -{ - return prettyName(); -} - -QString PlasmaLnfJob::prettyStatusMessage() const -{ - return prettyName(); -} - - Calamares::JobResult PlasmaLnfJob::exec() { - cDebug() << "Plasma Look-and-Feel Job"; + auto* system = CalamaresUtils::System::instance(); + auto* gs = Calamares::JobQueue::instance()->globalStorage(); - auto system = CalamaresUtils::System::instance(); - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - - QStringList command( - { - "sudo", "-E", "-H", "-u", gs->value( "username" ).toString(), - m_lnfPath, "-platform", "minimal", "--resetLayout", "--apply", m_id - } ); + QStringList command( { "sudo", + "-E", + "-H", + "-u", + gs->value( "username" ).toString(), + m_lnfPath, + "-platform", + "minimal", + "--resetLayout", + "--apply", + m_id } ); int r = system->targetEnvCall( command ); if ( r ) - return Calamares::JobResult::error( - tr( "Could not select KDE Plasma Look-and-Feel package" ), - tr( "Could not select KDE Plasma Look-and-Feel package" ) ); + { + return Calamares::JobResult::error( tr( "Could not select KDE Plasma Look-and-Feel package" ), + tr( "Could not select KDE Plasma Look-and-Feel package" ) ); + } + +#ifdef WITH_KCONFIG + // This is a workaround for lookandfeeltool **not** writing + // the LookAndFeelPackage key in kdeglobals; this happens + // with the lnftool and Plasma 5.20 (possibly other combinations + // as well). + QString targetConfig = system->targetPath( "/home/" + gs->value( "username" ).toString() + "/.config/kdeglobals" ); + KConfigGroup cg( KSharedConfig::openConfig( targetConfig ), "KDE" ); + cg.writeEntry( "LookAndFeelPackage", m_id ); +#endif return Calamares::JobResult::ok(); } - diff --git a/src/modules/plasmalnf/PlasmaLnfJob.h b/src/modules/plasmalnf/PlasmaLnfJob.h index ef9ee1257..4eaf81014 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.h +++ b/src/modules/plasmalnf/PlasmaLnfJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNFJOB_H @@ -30,11 +21,9 @@ class PlasmaLnfJob : public Calamares::Job public: explicit PlasmaLnfJob( const QString& lnfPath, const QString& id ); - virtual ~PlasmaLnfJob() override; + ~PlasmaLnfJob() override; QString prettyName() const override; - QString prettyDescription() const override; - QString prettyStatusMessage() const override; Calamares::JobResult exec() override; @@ -43,4 +32,4 @@ private: QString m_id; }; -#endif // PLASMALNFJOB_H +#endif // PLASMALNFJOB_H diff --git a/src/modules/plasmalnf/PlasmaLnfPage.cpp b/src/modules/plasmalnf/PlasmaLnfPage.cpp index 7e2ef8aa6..7a5f2bab4 100644 --- a/src/modules/plasmalnf/PlasmaLnfPage.cpp +++ b/src/modules/plasmalnf/PlasmaLnfPage.cpp @@ -1,205 +1,113 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PlasmaLnfPage.h" +#include "Config.h" #include "ui_page_plasmalnf.h" +#include "Settings.h" #include "utils/Logger.h" #include "utils/Retranslator.h" -#include "Settings.h" -#include +#include +#include +#include -#include -#include - -ThemeInfo::ThemeInfo( const KPluginMetaData& data ) - : id( data.pluginId() ) - , name( data.name() ) - , description( data.description() ) - , widget( nullptr ) +class ThemeDelegate : public QStyledItemDelegate { +public: + using QStyledItemDelegate::QStyledItemDelegate; + + void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override; + // The size of the item is constant + QSize sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const override; +}; + +QSize +ThemeDelegate::sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const +{ + QSize image( ThemesModel::imageSize() ); + return { 3 * image.width(), image.height() }; } -static ThemeInfoList plasma_themes() +void +ThemeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { - ThemeInfoList packages; + auto label = index.data( ThemesModel::LabelRole ).toString(); + auto description = index.data( ThemesModel::DescriptionRole ).toString(); + auto selected = index.data( ThemesModel::SelectedRole ).toBool() ? QStyle::State_On : QStyle::State_Off; + auto image_v = index.data( ThemesModel::ImageRole ); + QPixmap image = image_v.canConvert< QPixmap >() ? qvariant_cast< QPixmap >( image_v ) : QPixmap(); - QList pkgs = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" ); + // The delegate paints three "columns", each of which takes 1/3 + // of the space: label, description and screenshot. + QRect labelRect( option.rect ); + labelRect.setWidth( labelRect.width() / 3 ); - for ( const KPluginMetaData& data : pkgs ) - { - if ( data.isValid() && !data.isHidden() && !data.name().isEmpty() ) - { - packages << ThemeInfo{ data }; - } - } + QStyleOptionButton rbOption; + rbOption.state |= QStyle::State_Enabled | selected; + rbOption.rect = labelRect; + rbOption.text = label; + option.widget->style()->drawControl( QStyle::CE_RadioButton, &rbOption, painter, option.widget ); - return packages; + labelRect.moveLeft( labelRect.width() ); + option.widget->style()->drawItemText( + painter, labelRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextWordWrap, option.palette, false, description ); + + labelRect.moveLeft( 2 * labelRect.width() ); + option.widget->style()->drawItemPixmap( painter, labelRect, Qt::AlignHCenter | Qt::AlignVCenter, image ); } -PlasmaLnfPage::PlasmaLnfPage( QWidget* parent ) +PlasmaLnfPage::PlasmaLnfPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::PlasmaLnfPage ) - , m_showAll( false ) - , m_buttonGroup( nullptr ) + , m_config( config ) { ui->setupUi( this ); - CALAMARES_RETRANSLATE( - { + CALAMARES_RETRANSLATE( { ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) - ui->generalExplanation->setText( tr( - "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.") ); + ui->generalExplanation->setText( tr( "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." ) ); else - ui->generalExplanation->setText( tr( - "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.") ); - updateThemeNames(); - fillUi(); - } - ) -} - -void -PlasmaLnfPage::setLnfPath( const QString& path ) -{ - m_lnfPath = path; -} - -void -PlasmaLnfPage::setEnabledThemes(const ThemeInfoList& themes, bool showAll ) -{ - m_enabledThemes = themes; - - if ( showAll ) - { - auto plasmaThemes = plasma_themes(); - for ( auto& installed_theme : plasmaThemes ) - if ( !m_enabledThemes.findById( installed_theme.id ) ) - m_enabledThemes.append( installed_theme ); - } - - updateThemeNames(); - winnowThemes(); - fillUi(); -} - -void -PlasmaLnfPage::setEnabledThemesAll() -{ - // Don't need to set showAll=true, because we're already passing in - // the complete list of installed themes. - setEnabledThemes( plasma_themes(), false ); -} - -void -PlasmaLnfPage::setPreselect( const QString& id ) -{ - m_preselect = id; - if ( !m_enabledThemes.isEmpty() ) - fillUi(); -} - -void PlasmaLnfPage::updateThemeNames() -{ - auto plasmaThemes = plasma_themes(); - for ( auto& enabled_theme : m_enabledThemes ) - { - ThemeInfo* t = plasmaThemes.findById( enabled_theme.id ); - if ( t != nullptr ) - { - enabled_theme.name = t->name; - enabled_theme.description = t->description; - } - } -} - -void PlasmaLnfPage::winnowThemes() -{ - auto plasmaThemes = plasma_themes(); - bool winnowed = true; - int winnow_index = 0; - while ( winnowed ) - { - winnowed = false; - winnow_index = 0; - - for ( auto& enabled_theme : m_enabledThemes ) - { - ThemeInfo* t = plasmaThemes.findById( enabled_theme.id ); - if ( t == nullptr ) - { - cDebug() << "Removing" << enabled_theme.id; - winnowed = true; - break; - } - ++winnow_index; - } - - if ( winnowed ) - { - m_enabledThemes.removeAt( winnow_index ); - } - } -} - -void PlasmaLnfPage::fillUi() -{ - if ( m_enabledThemes.isEmpty() ) - { - return; - } - - if ( !m_buttonGroup ) - { - m_buttonGroup = new QButtonGroup( this ); - m_buttonGroup->setExclusive( true ); - } - - int c = 1; // After the general explanation - for ( auto& theme : m_enabledThemes ) - { - if ( !theme.widget ) - { - ThemeWidget* w = new ThemeWidget( theme ); - m_buttonGroup->addButton( w->button() ); - ui->verticalLayout->insertWidget( c, w ); - connect( w, &ThemeWidget::themeSelected, this, &PlasmaLnfPage::plasmaThemeSelected); - theme.widget = w; - } - else - { - theme.widget->updateThemeName( theme ); - } - if ( theme.id == m_preselect ) - { - const QSignalBlocker b( theme.widget->button() ); - theme.widget->button()->setChecked( true ); - } - ++c; - } + ui->generalExplanation->setText( tr( "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." ) ); + } ); + + auto* view = new QListView( this ); + view->setModel( m_config->themeModel() ); + view->setItemDelegate( new ThemeDelegate( view ) ); + view->setUniformItemSizes( true ); + view->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + ui->verticalLayout->addWidget( view ); + + connect( view->selectionModel(), + &QItemSelectionModel::selectionChanged, + [ this ]( const QItemSelection& selected, const QItemSelection& ) + { + auto i = selected.indexes(); + if ( !i.isEmpty() ) + { + auto row = i.first().row(); + auto* model = m_config->themeModel(); + auto id = model->data( model->index( row, 0 ), ThemesModel::KeyRole ).toString(); + if ( !id.isEmpty() ) + { + m_config->setTheme( id ); + } + } + } ); } diff --git a/src/modules/plasmalnf/PlasmaLnfPage.h b/src/modules/plasmalnf/PlasmaLnfPage.h index 5a4c68b4e..0616b1a48 100644 --- a/src/modules/plasmalnf/PlasmaLnfPage.h +++ b/src/modules/plasmalnf/PlasmaLnfPage.h @@ -1,38 +1,24 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNFPAGE_H #define PLASMALNFPAGE_H -#include -#include -#include -#include #include -#include "ThemeInfo.h" -#include "ThemeWidget.h" - namespace Ui { class PlasmaLnfPage; } +class Config; + /** @brief Page for selecting a Plasma Look-and-Feel theme. * * You must call setEnabledThemes -- either overload -- once @@ -43,40 +29,11 @@ class PlasmaLnfPage : public QWidget { Q_OBJECT public: - explicit PlasmaLnfPage( QWidget* parent = nullptr ); - - void setLnfPath( const QString& path ); - /** @brief enable only the listed themes. - * - * Shows the listed @p themes with full information (e.g. screenshot). - * If @p showAll is true, then also show all installed themes - * not explicitly listed (without a screenshot). - */ - void setEnabledThemes( const ThemeInfoList& themes, bool showAll ); - /** @brief enable all installed plasma themes. */ - void setEnabledThemesAll(); - /** @brief set which theme is to be preselected. */ - void setPreselect( const QString& id ); - -signals: - void plasmaThemeSelected( const QString& id ); + explicit PlasmaLnfPage( Config* config, QWidget* parent = nullptr ); private: - /** @brief Intersect the list of enabled themes with the installed ones. */ - void winnowThemes(); - /** @brief Get the translated names for all enabled themes. */ - void updateThemeNames(); - /** @brief show enabled themes in the UI. */ - void fillUi(); - Ui::PlasmaLnfPage* ui; - QString m_lnfPath; - QString m_preselect; - bool m_showAll; // If true, don't winnow according to enabledThemes - ThemeInfoList m_enabledThemes; - - QButtonGroup *m_buttonGroup; - QList< ThemeWidget* > m_widgets; + Config* m_config; }; -#endif //PLASMALNFPAGE_H +#endif //PLASMALNFPAGE_H diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.cpp b/src/modules/plasmalnf/PlasmaLnfViewStep.cpp index ec5258c64..fd38bfab3 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.cpp +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.cpp @@ -1,56 +1,29 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PlasmaLnfViewStep.h" -#include "PlasmaLnfJob.h" +#include "Config.h" #include "PlasmaLnfPage.h" #include "ThemeInfo.h" #include "utils/Logger.h" #include "utils/Variant.h" -#include #include -#ifdef WITH_KCONFIG -#include -#include -#endif - -CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin(); ) - -static QString -currentPlasmaTheme() -{ -#ifdef WITH_KCONFIG - KConfigGroup cg( KSharedConfig::openConfig( QStringLiteral( "kdeglobals" ) ), "KDE" ); - return cg.readEntry( "LookAndFeelPackage", QString() ); -#else - cWarning() << "No KConfig support, cannot determine Plasma theme."; - return QString(); -#endif -} +CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin< PlasmaLnfViewStep >(); ) PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_widget( new PlasmaLnfPage ) + , m_config( new Config( this ) ) + , m_widget( new PlasmaLnfPage( m_config ) ) { - connect( m_widget, &PlasmaLnfPage::plasmaThemeSelected, this, &PlasmaLnfViewStep::themeSelected ); emit nextStatusChanged( false ); } @@ -58,7 +31,9 @@ PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent ) PlasmaLnfViewStep::~PlasmaLnfViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } } @@ -104,7 +79,8 @@ PlasmaLnfViewStep::isAtEnd() const } -void PlasmaLnfViewStep::onLeave() +void +PlasmaLnfViewStep::onLeave() { } @@ -112,93 +88,12 @@ void PlasmaLnfViewStep::onLeave() Calamares::JobList PlasmaLnfViewStep::jobs() const { - Calamares::JobList l; - - cDebug() << "Creating Plasma LNF jobs .."; - if ( !m_themeId.isEmpty() ) - { - if ( !m_lnfPath.isEmpty() ) - l.append( Calamares::job_ptr( new PlasmaLnfJob( m_lnfPath, m_themeId ) ) ); - else - cWarning() << "no lnftool given for plasmalnf module."; - } - return l; + return m_config->createJobs(); } void PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - m_lnfPath = CalamaresUtils::getString( configurationMap, "lnftool" ); - m_widget->setLnfPath( m_lnfPath ); - - if ( m_lnfPath.isEmpty() ) - cWarning() << "no lnftool given for plasmalnf module."; - - m_liveUser = CalamaresUtils::getString( configurationMap, "liveuser" ); - - QString preselect = CalamaresUtils::getString( configurationMap, "preselect" ); - if ( preselect == QStringLiteral( "*" ) ) - preselect = currentPlasmaTheme(); - if ( !preselect.isEmpty() ) - m_widget->setPreselect( preselect ); - - bool showAll = CalamaresUtils::getBool( configurationMap, "showAll", false ); - - if ( configurationMap.contains( "themes" ) && - configurationMap.value( "themes" ).type() == QVariant::List ) - { - ThemeInfoList listedThemes; - auto themeList = configurationMap.value( "themes" ).toList(); - // Create the ThemInfo objects for the listed themes; information - // about the themes from Plasma (e.g. human-readable name and description) - // are filled in by update_names() in PlasmaLnfPage. - for ( const auto& i : themeList ) - if ( i.type() == QVariant::Map ) - { - auto iv = i.toMap(); - listedThemes.append( ThemeInfo( iv.value( "theme" ).toString(), iv.value( "image" ).toString() ) ); - } - else if ( i.type() == QVariant::String ) - listedThemes.append( ThemeInfo( i.toString() ) ); - - if ( listedThemes.length() == 1 ) - cWarning() << "only one theme enabled in plasmalnf"; - m_widget->setEnabledThemes( listedThemes, showAll ); - } - else - m_widget->setEnabledThemesAll(); // All of them -} - -void -PlasmaLnfViewStep::themeSelected( const QString& id ) -{ - m_themeId = id; - if ( m_lnfPath.isEmpty() ) - { - cWarning() << "no lnftool given for plasmalnf module."; - return; - } - - QProcess lnftool; - if ( !m_liveUser.isEmpty() ) - lnftool.start( "sudo", {"-E", "-H", "-u", m_liveUser, m_lnfPath, "--resetLayout", "--apply", id} ); - else - lnftool.start( m_lnfPath, {"--resetLayout", "--apply", id} ); - - if ( !lnftool.waitForStarted( 1000 ) ) - { - cWarning() << "could not start look-and-feel" << m_lnfPath; - return; - } - if ( !lnftool.waitForFinished() ) - { - cWarning() << m_lnfPath << "timed out."; - return; - } - - if ( ( lnftool.exitCode() == 0 ) && ( lnftool.exitStatus() == QProcess::NormalExit ) ) - cDebug() << "Plasma look-and-feel applied" << id; - else - cWarning() << "could not apply look-and-feel" << id; + m_config->setConfigurationMap( configurationMap ); } diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.h b/src/modules/plasmalnf/PlasmaLnfViewStep.h index 0bf76934c..48f03cdad 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.h +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.h @@ -1,32 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNFVIEWSTEP_H #define PLASMALNFVIEWSTEP_H +#include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include "DllMacro.h" - -#include -#include -#include +class Config; class PlasmaLnfPage; class PLUGINDLLEXPORT PlasmaLnfViewStep : public Calamares::ViewStep @@ -35,7 +23,7 @@ class PLUGINDLLEXPORT PlasmaLnfViewStep : public Calamares::ViewStep public: explicit PlasmaLnfViewStep( QObject* parent = nullptr ); - virtual ~PlasmaLnfViewStep() override; + ~PlasmaLnfViewStep() override; QString prettyName() const override; @@ -53,16 +41,11 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; -public slots: - void themeSelected( const QString& id ); - private: + Config* m_config; PlasmaLnfPage* m_widget; - QString m_lnfPath; // Path to the lnf tool - QString m_themeId; // Id of selected theme - QString m_liveUser; // Name of the live user (for OEM mode) }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PlasmaLnfViewStepFactory ) -#endif // PLASMALNFVIEWSTEP_H +#endif // PLASMALNFVIEWSTEP_H diff --git a/src/modules/plasmalnf/ThemeInfo.cpp b/src/modules/plasmalnf/ThemeInfo.cpp new file mode 100644 index 000000000..8e7aa13b9 --- /dev/null +++ b/src/modules/plasmalnf/ThemeInfo.cpp @@ -0,0 +1,319 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ +#include "ThemeInfo.h" + +#include "Branding.h" +#include "utils/CalamaresUtilsGui.h" +#include "utils/Logger.h" + +#include +#include + +#include +#include +#include + +/** @brief describes a single plasma LnF theme. + * + * A theme description has an id, which is really the name of the desktop + * file (e.g. org.kde.breeze.desktop), a name which is human-readable and + * translated, and an optional image Page, which points to a local screenshot + * of that theme. + */ +struct ThemeInfo +{ + QString id; + QString name; + QString description; + QString imagePath; + mutable QPixmap pixmap; + bool show = true; + bool selected = false; + + ThemeInfo() {} + + explicit ThemeInfo( const QString& _id ) + : id( _id ) + { + } + + explicit ThemeInfo( const QString& _id, const QString& image ) + : id( _id ) + , imagePath( image ) + { + } + + explicit ThemeInfo( const KPluginMetaData& ); + + bool isValid() const { return !id.isEmpty(); } + + /// @brief Fill in the pixmap member based on imagePath + QPixmap loadImage() const; +}; + +class ThemeInfoList : public QList< ThemeInfo > +{ +public: + std::pair< int, const ThemeInfo* > indexById( const QString& id ) const + { + int index = 0; + for ( const ThemeInfo& i : *this ) + { + if ( i.id == id ) + { + return { index, &i }; + } + } + return { -1, nullptr }; + } + + std::pair< int, ThemeInfo* > indexById( const QString& id ) + { + // Call the const version and then munge the types + auto [ i, p ] = const_cast< const ThemeInfoList* >( this )->indexById( id ); + return { i, const_cast< ThemeInfo* >( p ) }; + } + + + /** @brief Looks for a given @p id in the list of themes, returns nullptr if not found. */ + ThemeInfo* findById( const QString& id ) + { + auto [ i, p ] = indexById( id ); + return p; + } + + /** @brief Looks for a given @p id in the list of themes, returns nullptr if not found. */ + const ThemeInfo* findById( const QString& id ) const + { + auto [ i, p ] = indexById( id ); + return p; + } + + /** @brief Checks if a given @p id is in the list of themes. */ + bool contains( const QString& id ) const { return findById( id ) != nullptr; } +}; + +ThemesModel::ThemesModel( QObject* parent ) + : QAbstractListModel( parent ) + , m_themes( new ThemeInfoList ) +{ + auto packages = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" ); + m_themes->reserve( packages.length() ); + + for ( const auto& p : packages ) + { + m_themes->append( ThemeInfo { p } ); + } +} + +int +ThemesModel::rowCount( const QModelIndex& ) const +{ + return m_themes->count(); +} + +QVariant +ThemesModel::data( const QModelIndex& index, int role ) const +{ + if ( !index.isValid() ) + { + return QVariant(); + } + if ( index.row() < 0 || index.row() >= m_themes->count() ) + { + return QVariant(); + } + + const auto& item = m_themes->at( index.row() ); + switch ( role ) + { + case LabelRole: + return item.name; + case KeyRole: + return item.id; + case ShownRole: + return item.show; + case SelectedRole: + return item.selected; + case DescriptionRole: + return item.description; + case ImageRole: + return item.loadImage(); + default: + return QVariant(); + } + __builtin_unreachable(); +} + +QHash< int, QByteArray > +ThemesModel::roleNames() const +{ + return { { LabelRole, "label" }, + { KeyRole, "key" }, + { SelectedRole, "selected" }, + { ShownRole, "show" }, + { ImageRole, "image" } }; +} + +void +ThemesModel::setThemeImage( const QString& id, const QString& imagePath ) +{ + auto [ i, theme ] = m_themes->indexById( id ); + if ( theme ) + { + theme->imagePath = imagePath; + emit dataChanged( index( i, 0 ), index( i, 0 ), { ImageRole } ); + } +} + +void +ThemesModel::setThemeImage( const QMap< QString, QString >& images ) +{ + if ( m_themes->isEmpty() ) + { + return; + } + + // Don't emit signals from each call, aggregate to one call (below this block) + { + QSignalBlocker b( this ); + for ( auto k = images.constKeyValueBegin(); k != images.constKeyValueEnd(); ++k ) + { + setThemeImage( ( *k ).first, ( *k ).second ); + } + } + emit dataChanged( index( 0, 0 ), index( m_themes->count() - 1 ), { ImageRole } ); +} + +void +ThemesModel::showTheme( const QString& id, bool show ) +{ + auto [ i, theme ] = m_themes->indexById( id ); + if ( theme ) + { + theme->show = show; + emit dataChanged( index( i, 0 ), index( i, 0 ), { ShownRole } ); + } +} + +void +ThemesModel::showOnlyThemes( const QMap< QString, QString >& onlyThese ) +{ + if ( m_themes->isEmpty() ) + { + return; + } + + // No signal blocker block needed here because we're not calling showTheme() + // QSignalBlocker b( this ); + for ( auto& t : *m_themes ) + { + t.show = onlyThese.contains( t.id ); + } + emit dataChanged( index( 0, 0 ), index( m_themes->count() - 1 ), { ShownRole } ); +} + +QSize +ThemesModel::imageSize() +{ + return { qMax( 12 * CalamaresUtils::defaultFontHeight(), 120 ), + qMax( 8 * CalamaresUtils::defaultFontHeight(), 80 ) }; +} + +void +ThemesModel::select( const QString& themeId ) +{ + int i = 0; + for ( auto& t : *m_themes ) + { + if ( t.selected && t.id != themeId ) + { + t.selected = false; + emit dataChanged( index( i, 0 ), index( i, 0 ), { SelectedRole } ); + } + if ( !t.selected && t.id == themeId ) + { + t.selected = true; + emit dataChanged( index( i, 0 ), index( i, 0 ), { SelectedRole } ); + } + ++i; + } +} + + +/** + * Massage the given @p path to the most-likely + * path that actually contains a screenshot. For + * empty image paths, returns the QRC path for an + * empty screenshot. Returns blank if the path + * doesn't exist anywhere in the search paths. + */ +static QString +munge_imagepath( const QString& path ) +{ + if ( path.isEmpty() ) + { + return ":/view-preview.png"; + } + + if ( path.startsWith( '/' ) ) + { + return path; + } + + if ( QFileInfo::exists( path ) ) + { + return path; + } + + QFileInfo fi( QDir( Calamares::Branding::instance()->componentDirectory() ), path ); + if ( fi.exists() ) + { + return fi.absoluteFilePath(); + } + + return QString(); +} + +ThemeInfo::ThemeInfo( const KPluginMetaData& data ) + : id( data.pluginId() ) + , name( data.name() ) + , description( data.description() ) +{ +} + +QPixmap +ThemeInfo::loadImage() const +{ + if ( pixmap.isNull() ) + { + + const QSize image_size( ThemesModel::imageSize() ); + + const QString path = munge_imagepath( imagePath ); + cDebug() << "Loading initial image for" << id << imagePath << "->" << path; + QPixmap image( path ); + if ( image.isNull() ) + { + // Not found or not specified, so convert the name into some (horrible, likely) + // color instead. + image = QPixmap( image_size ); + auto hash_color = qHash( imagePath.isEmpty() ? id : imagePath ); + cDebug() << Logger::SubEntry << "Theme image" << imagePath << "not found, hash" << hash_color; + image.fill( QColor( QRgb( hash_color ) ) ); + } + else + { + cDebug() << Logger::SubEntry << "Theme image" << image.size(); + } + + pixmap = image.scaled( image_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + } + return pixmap; +} diff --git a/src/modules/plasmalnf/ThemeInfo.h b/src/modules/plasmalnf/ThemeInfo.h index 982064073..c859bcd2d 100644 --- a/src/modules/plasmalnf/ThemeInfo.h +++ b/src/modules/plasmalnf/ThemeInfo.h @@ -1,97 +1,75 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PLASMALNF_THEMEINFO_H #define PLASMALNF_THEMEINFO_H +#include #include #include -class KPluginMetaData; -class ThemeWidget; +class ThemeInfoList; -/** @brief describes a single plasma LnF theme. - * - * A theme description has an id, which is really the name of the desktop - * file (e.g. org.kde.breeze.desktop), a name which is human-readable and - * translated, and an optional image Page, which points to a local screenshot - * of that theme. - */ -struct ThemeInfo +class ThemesModel : public QAbstractListModel { - QString id; - QString name; - QString description; - QString imagePath; - ThemeWidget* widget; + Q_OBJECT - ThemeInfo() - : widget( nullptr ) - {} - - explicit ThemeInfo( const QString& _id ) - : id( _id ) - , widget( nullptr ) - { - } - - explicit ThemeInfo( const QString& _id, const QString& image ) - : id( _id ) - , imagePath( image ) - , widget( nullptr ) - {} - - // Defined in PlasmaLnfPage.cpp - explicit ThemeInfo( const KPluginMetaData& ); - - bool isValid() const { return !id.isEmpty(); } -} ; - -class ThemeInfoList : public QList< ThemeInfo > -{ public: - /** @brief Looks for a given @p id in the list of themes, returns nullptr if not found. */ - ThemeInfo* findById( const QString& id ) + enum { - for ( ThemeInfo& i : *this ) - { - if ( i.id == id ) - return &i; - } - return nullptr; - } + LabelRole = Qt::DisplayRole, + KeyRole = Qt::UserRole, + ShownRole, // Should theme be displayed + SelectedRole, // Is theme selected + DescriptionRole, + ImageRole + }; - /** @brief Looks for a given @p id in the list of themes, returns nullptr if not found. */ - const ThemeInfo* findById( const QString& id ) const - { - for ( const ThemeInfo& i : *this ) - { - if ( i.id == id ) - return &i; - } - return nullptr; - } + explicit ThemesModel( QObject* parent ); + + int rowCount( const QModelIndex& = QModelIndex() ) const override; + QVariant data( const QModelIndex& index, int role ) const override; + + QHash< int, QByteArray > roleNames() const override; + + /// @brief Set the screenshot to go with the given @p id + void setThemeImage( const QString& id, const QString& imagePath ); + + /// @brief Call setThemeImage( key, value ) for all keys in @p images + void setThemeImage( const QMap< QString, QString >& images ); + + /// @brief Set whether to show the given theme @p id (or not) + void showTheme( const QString& id, bool show = true ); + + /// @brief Shows the keys in the @p onlyThese map, and hides the rest + void showOnlyThemes( const QMap< QString, QString >& onlyThese ); + + /** @brief Mark the @p themeId as current / selected + * + * One theme can be selected at a time; this will emit data + * changed signals for any (one) theme already selected, and + * the newly-selected theme. If @p themeId does not name any + * theme, none are selected. + */ + void select( const QString& themeId ); + + /** @brief The size of theme Images + * + * The size is dependent on the font size used by Calamares, + * and is constant within one run of Calamares, but may change + * if the font settings do between runs. + */ + static QSize imageSize(); + +private: + ThemeInfoList* m_themes; +}; - /** @brief Checks if a given @p id is in the list of themes. */ - bool contains( const QString& id ) const - { - return findById( id ) != nullptr; - } -} ; #endif diff --git a/src/modules/plasmalnf/ThemeWidget.cpp b/src/modules/plasmalnf/ThemeWidget.cpp deleted file mode 100644 index 92a88197f..000000000 --- a/src/modules/plasmalnf/ThemeWidget.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2017-2018, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#include "ThemeWidget.h" - -#include "ThemeInfo.h" - -#include "utils/CalamaresUtilsGui.h" -#include "utils/Logger.h" -#include "Branding.h" - -#include -#include -#include -#include -#include -#include - -/** - * Massage the given @p path to the most-likely - * path that actually contains a screenshot. For - * empty image paths, returns the QRC path for an - * empty screenshot. Returns blank if the path - * doesn't exist anywhere in the search paths. - */ -static QString _munge_imagepath( const QString& path ) -{ - if ( path.isEmpty() ) - return ":/view-preview.png"; - - if ( path.startsWith( '/' ) ) - return path; - - if ( QFileInfo::exists( path ) ) - return path; - - QFileInfo fi( QDir( Calamares::Branding::instance()->componentDirectory() ), path ); - if ( fi.exists() ) - return fi.absoluteFilePath(); - - return QString(); -} - -ThemeWidget::ThemeWidget(const ThemeInfo& info, QWidget* parent) - : QWidget( parent ) - , m_id( info.id ) - , m_check( new QRadioButton( info.name.isEmpty() ? info.id : info.name, parent ) ) - , m_description( new QLabel( info.description, parent ) ) -{ - const QSize image_size{ - qMax(12 * CalamaresUtils::defaultFontHeight(), 120), - qMax(8 * CalamaresUtils::defaultFontHeight(), 80) }; - - QHBoxLayout* layout = new QHBoxLayout( this ); - this->setLayout( layout ); - - layout->addWidget( m_check, 1 ); - - QPixmap image( _munge_imagepath( info.imagePath ) ); - if ( image.isNull() ) - { - // Not found or not specified, so convert the name into some (horrible, likely) - // color instead. - image = QPixmap( image_size ); - auto hash_color = qHash( info.imagePath.isEmpty() ? info.id : info.imagePath ); - cDebug() << "Theme image" << info.imagePath << "not found, hash" << hash_color; - image.fill( QColor( QRgb( hash_color ) ) ); - } - - image = image.scaled( image_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); - - QLabel* image_label = new QLabel( this ); - image_label->setPixmap( image ); - image_label->setMinimumSize( image_size ); - image_label->setMaximumSize( image_size ); - image_label->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); - layout->addWidget( image_label, 1 ); - layout->addWidget( m_description, 3 ); - - connect( m_check, &QRadioButton::toggled, this, &ThemeWidget::clicked ); -} - -void -ThemeWidget::clicked( bool checked ) -{ - if ( checked ) - emit themeSelected( m_id ); -} - -QAbstractButton* -ThemeWidget::button() const -{ - return m_check; -} - -void ThemeWidget::updateThemeName(const ThemeInfo& info) -{ - m_check->setText( info.name ); - m_description->setText( info.description ); -} diff --git a/src/modules/plasmalnf/ThemeWidget.h b/src/modules/plasmalnf/ThemeWidget.h deleted file mode 100644 index 83294cc77..000000000 --- a/src/modules/plasmalnf/ThemeWidget.h +++ /dev/null @@ -1,53 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2017, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#ifndef PLASMALNF_THEMEWIDGET_H -#define PLASMALNF_THEMEWIDGET_H - -#include - -class QAbstractButton; -class QLabel; -class QRadioButton; - -struct ThemeInfo; - -class ThemeWidget : public QWidget -{ - Q_OBJECT -public: - explicit ThemeWidget( const ThemeInfo& info, QWidget* parent = nullptr ); - - QAbstractButton* button() const; - - void updateThemeName( const ThemeInfo& info ); - -signals: - void themeSelected( const QString& id ); - -public slots: - void clicked( bool ); - -private: - QString m_id; - QRadioButton* m_check; - QLabel* m_description; -} ; - -#endif - diff --git a/src/modules/plasmalnf/page_plasmalnf.ui b/src/modules/plasmalnf/page_plasmalnf.ui index 7b3c8c96f..b079013d6 100644 --- a/src/modules/plasmalnf/page_plasmalnf.ui +++ b/src/modules/plasmalnf/page_plasmalnf.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + PlasmaLnfPage @@ -24,19 +28,6 @@
- - - - Qt::Vertical - - - - 20 - 40 - - - -
diff --git a/src/modules/plasmalnf/plasmalnf.conf b/src/modules/plasmalnf/plasmalnf.conf index a954c685a..105f247ef 100644 --- a/src/modules/plasmalnf/plasmalnf.conf +++ b/src/modules/plasmalnf/plasmalnf.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # The Plasma Look-and-Feel module allows selecting a Plasma # Look-and-Feel in the live- or host-system and switches the # host Plasma session immediately to the chosen LnF; it @@ -21,10 +24,18 @@ lnftool: "/usr/bin/lookandfeeltool" # # liveuser: "live" +# If *showAll* is true, then all installed themes are shown in the +# UI for selection, even if they are not listed in *themes* (below). +# This allows selection of all themes even while not all of them are +# listed in *themes* -- which is useful to show screenshots for those +# you do have a screenshot for. If *themes* is empty or missing, +# the value of *showAll* is treated as `true`. +showAll: false + # You can limit the list of Plasma look-and-feel themes by listing ids # here. If this key is not present, all of the installed themes are listed. # If the key is present, only installed themes that are **also** included -# in the list are shown (could be none!). See the *showAll* key, below, +# in the list are shown (could be none!). See the *showAll* key, above, # to change that. # # Themes may be listed by id, (e.g. fluffy-bunny, below) or as a theme @@ -55,13 +66,6 @@ themes: image: "breeze-dark.png" - org.kde.fluffy-bunny.desktop -# If *showAll* is true, then all installed themes are shown in the -# UI for selection, even if they are not listed in *themes*. This -# allows selection of all themes even while not all of them are -# listed in *themes* -- which is useful to show screenshots for those -# you do have a screenshot for. -showAll: false - # You can pre-select one of the themes; it is not applied # immediately, but its radio-button is switched on to indicate # that that is the theme (that is most likely) currently in use. diff --git a/src/modules/plasmalnf/view-preview.png.license b/src/modules/plasmalnf/view-preview.png.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/plasmalnf/view-preview.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/plasmalnf/view-preview.svg.license b/src/modules/plasmalnf/view-preview.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/plasmalnf/view-preview.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/plymouthcfg/main.py b/src/modules/plymouthcfg/main.py index e224f5df0..5e66fce67 100644 --- a/src/modules/plymouthcfg/main.py +++ b/src/modules/plymouthcfg/main.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2016, Artoo -# Copyright 2017, Alf Gaida -# Copyright 2018, Gabriel Craciunescu -# Copyright 2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2016 Artoo +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2018 Gabriel Craciunescu +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares @@ -36,6 +27,16 @@ def pretty_name(): return _("Configure Plymouth theme") +def detect_plymouth(): + """ + Checks existence (runnability) of plymouth in the target system. + + @return True if plymouth exists in the target, False otherwise + """ + # Used to only check existence of path /usr/bin/plymouth in target + return target_env_call(["sh", "-c", "which plymouth"]) == 0 + + class PlymouthController: def __init__(self): @@ -51,14 +52,8 @@ class PlymouthController: plymouth_theme + '|', "-i", "/etc/plymouth/plymouthd.conf"]) - def detect(self): - isPlymouth = target_env_call(["sh", "-c", "which plymouth"]) - debug("which plymouth exit code: {!s}".format(isPlymouth)) - - return isPlymouth - def run(self): - if self.detect() == 0: + if detect_plymouth(): if (("plymouth_theme" in libcalamares.job.configuration) and (libcalamares.job.configuration["plymouth_theme"] is not None)): self.setTheme() diff --git a/src/modules/plymouthcfg/module.desc b/src/modules/plymouthcfg/module.desc index f2d2d4743..660aa71b2 100644 --- a/src/modules/plymouthcfg/module.desc +++ b/src/modules/plymouthcfg/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "plymouthcfg" diff --git a/src/modules/plymouthcfg/plymouthcfg.conf b/src/modules/plymouthcfg/plymouthcfg.conf index 47c54f5ff..ebe51d1ed 100644 --- a/src/modules/plymouthcfg/plymouthcfg.conf +++ b/src/modules/plymouthcfg/plymouthcfg.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Plymouth Configuration Module # # This module can be used to setup the default plymouth theme to diff --git a/src/modules/plymouthcfg/plymouthcfg.schema.yaml b/src/modules/plymouthcfg/plymouthcfg.schema.yaml new file mode 100644 index 000000000..27925ec02 --- /dev/null +++ b/src/modules/plymouthcfg/plymouthcfg.schema.yaml @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/plymouthcfg +additionalProperties: false +type: object +properties: + plymouth_theme: { type: string } diff --git a/src/modules/preservefiles/CMakeLists.txt b/src/modules/preservefiles/CMakeLists.txt index f6cd98008..5df637321 100644 --- a/src/modules/preservefiles/CMakeLists.txt +++ b/src/modules/preservefiles/CMakeLists.txt @@ -1,14 +1,22 @@ -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) - +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( preservefiles TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - permissions.cpp + Item.cpp PreserveFiles.cpp - LINK_PRIVATE_LIBRARIES - calamares # REQUIRES mount # To set the rootMountPoint SHARED_LIB EMERGENCY ) + +calamares_add_test( + preservefilestest + SOURCES + Item.cpp + Tests.cpp +) diff --git a/src/modules/preservefiles/Item.cpp b/src/modules/preservefiles/Item.cpp new file mode 100644 index 000000000..2ae929e67 --- /dev/null +++ b/src/modules/preservefiles/Item.cpp @@ -0,0 +1,159 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2018, 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "Item.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Units.h" +#include "utils/Variant.h" + +#include + +using namespace CalamaresUtils::Units; + +static bool +copy_file( const QString& source, const QString& dest ) +{ + QFile sourcef( source ); + if ( !sourcef.open( QFile::ReadOnly ) ) + { + cWarning() << "Could not read" << source; + return false; + } + + QFile destf( dest ); + if ( !destf.open( QFile::WriteOnly ) ) + { + sourcef.close(); + cWarning() << "Could not open" << destf.fileName() << "for writing; could not copy" << source; + return false; + } + + QByteArray b; + do + { + b = sourcef.read( 1_MiB ); + destf.write( b ); + } while ( b.count() > 0 ); + + sourcef.close(); + destf.close(); + + return true; +} + +Item +Item::fromVariant( const QVariant& v, const CalamaresUtils::Permissions& defaultPermissions ) +{ + if ( v.type() == QVariant::String ) + { + QString filename = v.toString(); + if ( !filename.isEmpty() ) + { + return { filename, filename, defaultPermissions, ItemType::Path, false }; + } + else + { + cWarning() << "Empty filename for preservefiles, item" << v; + return {}; + } + } + else if ( v.type() == QVariant::Map ) + { + const auto map = v.toMap(); + + CalamaresUtils::Permissions perm( defaultPermissions ); + ItemType t = ItemType::None; + bool optional = CalamaresUtils::getBool( map, "optional", false ); + + { + QString perm_string = map[ "perm" ].toString(); + if ( !perm_string.isEmpty() ) + { + perm = CalamaresUtils::Permissions( perm_string ); + } + } + + { + QString from = map[ "from" ].toString(); + t = ( from == "log" ) ? ItemType::Log : ( from == "config" ) ? ItemType::Config : ItemType::None; + + if ( t == ItemType::None && !map[ "src" ].toString().isEmpty() ) + { + t = ItemType::Path; + } + } + + QString dest = map[ "dest" ].toString(); + if ( dest.isEmpty() ) + { + cWarning() << "Empty dest for preservefiles, item" << v; + return {}; + } + + switch ( t ) + { + case ItemType::Config: + return { QString(), dest, perm, t, optional }; + case ItemType::Log: + return { QString(), dest, perm, t, optional }; + case ItemType::Path: + return { map[ "src" ].toString(), dest, perm, t, optional }; + case ItemType::None: + cWarning() << "Invalid type for preservefiles, item" << v; + return {}; + } + } + cWarning() << "Invalid type for preservefiles, item" << v; + return {}; +} + + +bool +Item::exec( const std::function< QString( QString ) >& replacements ) const +{ + QString expanded_dest = replacements( dest ); + QString full_dest = CalamaresUtils::System::instance()->targetPath( expanded_dest ); + + bool success = false; + switch ( m_type ) + { + case ItemType::None: + cWarning() << "Invalid item for preservefiles skipped."; + return false; + case ItemType::Config: + if ( !( success = Calamares::JobQueue::instance()->globalStorage()->saveJson( full_dest ) ) ) + { + cWarning() << "Could not write a JSON dump of global storage to" << full_dest; + } + break; + case ItemType::Log: + if ( !( success = copy_file( Logger::logFile(), full_dest ) ) ) + { + cWarning() << "Could not preserve log file to" << full_dest; + } + break; + case ItemType::Path: + if ( !( success = copy_file( source, full_dest ) ) ) + { + cWarning() << "Could not preserve" << source << "to" << full_dest; + } + break; + } + if ( !success ) + { + CalamaresUtils::System::instance()->removeTargetFile( expanded_dest ); + return false; + } + else + { + return perm.apply( full_dest ); + } +} diff --git a/src/modules/preservefiles/Item.h b/src/modules/preservefiles/Item.h new file mode 100644 index 000000000..896b9471f --- /dev/null +++ b/src/modules/preservefiles/Item.h @@ -0,0 +1,76 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2018, 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ +#ifndef PRESERVEFILES_ITEM_H +#define PRESERVEFILES_ITEM_H + +#include "utils/Permissions.h" + +#include +#include + +#include + +enum class ItemType +{ + None, + Path, + Log, + Config +}; + +/** @brief Represents one item to copy + * + * All item types need a destination (to place the data), this is + * intepreted within the target system. All items need a permission, + * which is applied to the data once written. + * + * The source may be a path, but not all types need a source. + */ +class Item +{ + QString source; + QString dest; + CalamaresUtils::Permissions perm; + ItemType m_type = ItemType::None; + bool m_optional = false; + +public: + Item( const QString& src, const QString& d, CalamaresUtils::Permissions p, ItemType t, bool optional ) + : source( src ) + , dest( d ) + , perm( std::move( p ) ) + , m_type( t ) + , m_optional( optional ) + { + } + + Item() + : m_type( ItemType::None ) + { + } + + operator bool() const { return m_type != ItemType::None; } + ItemType type() const { return m_type; } + bool isOptional() const { return m_optional; } + + bool exec( const std::function< QString( QString ) >& replacements ) const; + + + /** @brief Create an Item -- or one of its subclasses -- from @p v + * + * Depending on the structure and contents of @p v, a pointer + * to an Item is returned. If @p v cannot be interpreted meaningfully, + * then a nullptr is returned. + * + * When the entry contains a *perm* key, use that permission, otherwise + * apply @p defaultPermissions to the item. + */ + static Item fromVariant( const QVariant& v, const CalamaresUtils::Permissions& defaultPermissions ); +}; + + +#endif diff --git a/src/modules/preservefiles/PreserveFiles.cpp b/src/modules/preservefiles/PreserveFiles.cpp index 175f8e4f8..f904ded8c 100644 --- a/src/modules/preservefiles/PreserveFiles.cpp +++ b/src/modules/preservefiles/PreserveFiles.cpp @@ -1,29 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "PreserveFiles.h" -#include "permissions.h" +#include "Item.h" #include "CalamaresVersion.h" -#include "JobQueue.h" #include "GlobalStorage.h" - +#include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/CommandList.h" #include "utils/Logger.h" @@ -31,40 +19,23 @@ #include -using CalamaresUtils::operator""_MiB; +using namespace CalamaresUtils::Units; -QString targetPrefix() -{ - if ( CalamaresUtils::System::instance()->doChroot() ) - { - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - if ( gs && gs->contains( "rootMountPoint" ) ) - { - QString r = gs->value( "rootMountPoint" ).toString(); - if ( !r.isEmpty() ) - return r; - else - cDebug() << "RootMountPoint is empty"; - } - else - { - cDebug() << "No rootMountPoint defined, preserving files to '/'"; - } - } - - return QLatin1String( "/" ); -} - -QString atReplacements( QString s ) +QString +atReplacements( QString s ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString root( "/" ); QString user; if ( gs && gs->contains( "rootMountPoint" ) ) + { root = gs->value( "rootMountPoint" ).toString(); + } if ( gs && gs->contains( "username" ) ) + { user = gs->value( "username" ).toString(); + } return s.replace( "@@ROOT@@", root ).replace( "@@USER@@", user ); } @@ -74,9 +45,7 @@ PreserveFiles::PreserveFiles( QObject* parent ) { } -PreserveFiles::~PreserveFiles() -{ -} +PreserveFiles::~PreserveFiles() {} QString PreserveFiles::prettyName() const @@ -84,99 +53,40 @@ PreserveFiles::prettyName() const return tr( "Saving files for later ..." ); } -static bool -copy_file( const QString& source, const QString& dest ) +Calamares::JobResult +PreserveFiles::exec() { - QFile sourcef( source ); - if ( !sourcef.open( QFile::ReadOnly ) ) + if ( m_items.empty() ) { - cWarning() << "Could not read" << source; - return false; - } - - QFile destf( dest ); - if ( !destf.open( QFile::WriteOnly ) ) - { - sourcef.close(); - cWarning() << "Could not open" << destf.fileName() << "for writing; could not copy" << source; - return false; - } - - QByteArray b; - do - { - b = sourcef.read( 1_MiB ); - destf.write( b ); - } - while ( b.count() > 0 ); - - sourcef.close(); - destf.close(); - - return true; -} - -Calamares::JobResult PreserveFiles::exec() -{ - if ( m_items.isEmpty() ) return Calamares::JobResult::error( tr( "No files configured to save for later." ) ); - - QString prefix = targetPrefix(); - if ( !prefix.endsWith( '/' ) ) - prefix.append( '/' ); + } int count = 0; - for ( const auto& it : m_items ) + for ( const auto& it : qAsConst( m_items ) ) { - QString source = it.source; - QString bare_dest = atReplacements( it.dest ); - QString dest = prefix + bare_dest; - - if ( it.type == ItemType::Log ) - source = Logger::logFile(); - if ( it.type == ItemType::Config ) + if ( !it ) { - if ( Calamares::JobQueue::instance()->globalStorage()->save( dest ) ) - cWarning() << "Could not write config for" << dest; - else - ++count; + // Invalid entries are nullptr, ignore them but count as a success + // because they shouldn't block the installation. There are + // warnings in the log showing what the configuration problem is. + ++count; + continue; } - else if ( source.isEmpty() ) - cWarning() << "Skipping unnamed source file for" << dest; - else + // Try to preserve the file. If it's marked as optional, count it + // as a success regardless. + if ( it.exec( atReplacements ) || it.isOptional() ) { - if ( copy_file( source, dest ) ) - { - if ( it.perm.isValid() ) - { - auto s_p = CalamaresUtils::System::instance(); - - int r; - - r = s_p->targetEnvCall( QStringList{ "chown", it.perm.username(), bare_dest } ); - if ( r ) - cWarning() << "Could not chown target" << bare_dest; - - r = s_p->targetEnvCall( QStringList{ "chgrp", it.perm.group(), bare_dest } ); - if ( r ) - cWarning() << "Could not chgrp target" << bare_dest; - - r = s_p->targetEnvCall( QStringList{ "chmod", it.perm.octal(), bare_dest } ); - if ( r ) - cWarning() << "Could not chmod target" << bare_dest; - } - - ++count; - } + ++count; } } - return count == m_items.count() ? - Calamares::JobResult::ok() : - Calamares::JobResult::error( tr( "Not all of the configured files could be preserved." ) ); + return count == m_items.size() + ? Calamares::JobResult::ok() + : Calamares::JobResult::error( tr( "Not all of the configured files could be preserved." ) ); } -void PreserveFiles::setConfigurationMap(const QVariantMap& configurationMap) +void +PreserveFiles::setConfigurationMap( const QVariantMap& configurationMap ) { auto files = configurationMap[ "files" ]; if ( !files.isValid() ) @@ -193,52 +103,15 @@ void PreserveFiles::setConfigurationMap(const QVariantMap& configurationMap) QString defaultPermissions = configurationMap[ "perm" ].toString(); if ( defaultPermissions.isEmpty() ) - defaultPermissions = QStringLiteral( "root:root:0400" ); - - QVariantList l = files.toList(); - unsigned int c = 0; - for ( const auto& li : l ) { - if ( li.type() == QVariant::String ) - { - QString filename = li.toString(); - if ( !filename.isEmpty() ) - m_items.append( Item{ filename, filename, Permissions( defaultPermissions ), ItemType::Path } ); - else - cDebug() << "Empty filename for preservefiles, item" << c; - } - else if ( li.type() == QVariant::Map ) - { - const auto map = li.toMap(); - QString dest = map[ "dest" ].toString(); - QString from = map[ "from" ].toString(); - ItemType t = - ( from == "log" ) ? ItemType::Log : - ( from == "config" ) ? ItemType::Config : - ItemType::None; - QString perm = map[ "perm" ].toString(); - if ( perm.isEmpty() ) - perm = defaultPermissions; + defaultPermissions = QStringLiteral( "root:root:0400" ); + } + CalamaresUtils::Permissions perm( defaultPermissions ); - if ( dest.isEmpty() ) - { - cDebug() << "Empty dest for preservefiles, item" << c; - } - else if ( t == ItemType::None ) - { - cDebug() << "Invalid type for preservefiles, item" << c; - } - else - { - m_items.append( Item{ QString(), dest, Permissions( perm ), t } ); - } - } - else - cDebug() << "Invalid type for preservefiles, item" << c; - - ++c; + for ( const auto& li : files.toList() ) + { + m_items.push_back( Item::fromVariant( li, perm ) ); } } -CALAMARES_PLUGIN_FACTORY_DEFINITION( PreserveFilesFactory, registerPlugin(); ) - +CALAMARES_PLUGIN_FACTORY_DEFINITION( PreserveFilesFactory, registerPlugin< PreserveFiles >(); ) diff --git a/src/modules/preservefiles/PreserveFiles.h b/src/modules/preservefiles/PreserveFiles.h index 587ac9bab..dfd2804e3 100644 --- a/src/modules/preservefiles/PreserveFiles.h +++ b/src/modules/preservefiles/PreserveFiles.h @@ -1,60 +1,28 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PRESERVEFILES_H #define PRESERVEFILES_H -#include -#include -#include - #include "CppJob.h" #include "DllMacro.h" - #include "utils/PluginFactory.h" -#include "permissions.h" +class Item; class PLUGINDLLEXPORT PreserveFiles : public Calamares::CppJob { Q_OBJECT - enum class ItemType - { - None, - Path, - Log, - Config - } ; - - struct Item - { - QString source; - QString dest; - Permissions perm; - ItemType type; - } ; - using ItemList = QList< Item >; public: explicit PreserveFiles( QObject* parent = nullptr ); - virtual ~PreserveFiles() override; + ~PreserveFiles() override; QString prettyName() const override; @@ -68,4 +36,4 @@ private: CALAMARES_PLUGIN_FACTORY_DECLARATION( PreserveFilesFactory ) -#endif // PRESERVEFILES_H +#endif // PRESERVEFILES_H diff --git a/src/modules/preservefiles/Tests.cpp b/src/modules/preservefiles/Tests.cpp new file mode 100644 index 000000000..57cefcf9d --- /dev/null +++ b/src/modules/preservefiles/Tests.cpp @@ -0,0 +1,93 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Item.h" + +#include "Settings.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/NamedEnum.h" +#include "utils/Yaml.h" + +#include + +class PreserveFilesTests : public QObject +{ + Q_OBJECT +public: + PreserveFilesTests(); + ~PreserveFilesTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testItems_data(); + void testItems(); +}; + +PreserveFilesTests::PreserveFilesTests() {} + +void +PreserveFilesTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "PreserveFiles test started."; + + // Ensure we have a system object, expect it to be a "bogus" one + CalamaresUtils::System* system = CalamaresUtils::System::instance(); + QVERIFY( system ); + cDebug() << Logger::SubEntry << "System @" << Logger::Pointer( system ); + + const auto* settings = Calamares::Settings::instance(); + if ( !settings ) + { + (void)new Calamares::Settings( true ); + } +} + +void +PreserveFilesTests::testItems_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< bool >( "ok" ); + QTest::addColumn< int >( "type_i" ); + + QTest::newRow( "log " ) << QString( "1a-log.conf" ) << true << smash( ItemType::Log ); + QTest::newRow( "config " ) << QString( "1b-config.conf" ) << true << smash( ItemType::Config ); + QTest::newRow( "src " ) << QString( "1c-src.conf" ) << true << smash( ItemType::Path ); + QTest::newRow( "filename" ) << QString( "1d-filename.conf" ) << true << smash( ItemType::Path ); + QTest::newRow( "empty " ) << QString( "1e-empty.conf" ) << false << smash( ItemType::None ); + QTest::newRow( "bad " ) << QString( "1f-bad.conf" ) << false << smash( ItemType::None ); +} + +void +PreserveFilesTests::testItems() +{ + QFETCH( QString, filename ); + QFETCH( bool, ok ); + QFETCH( int, type_i ); + + QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool config_file_ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &config_file_ok ); + QVERIFY( config_file_ok ); + + CalamaresUtils::Permissions perm( QStringLiteral( "adridg:adridg:0750" ) ); + auto i = Item::fromVariant( map[ "item" ], perm ); + QCOMPARE( bool( i ), ok ); + QCOMPARE( smash( i.type() ), type_i ); +} + +QTEST_GUILESS_MAIN( PreserveFilesTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/preservefiles/permissions.cpp b/src/modules/preservefiles/permissions.cpp deleted file mode 100644 index a3f8ac136..000000000 --- a/src/modules/preservefiles/permissions.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright (C) 2018 Scott Harvey - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#include -#include -#include "permissions.h" - -Permissions::Permissions() : - m_username(), - m_group(), - m_valid(false), - m_value(0) -{ -} - - -Permissions::Permissions(QString p) : Permissions() -{ - parsePermissions(p); -} - -void Permissions::parsePermissions(const QString& p) { - - QStringList segments = p.split(":"); - - if (segments.length() != 3) { - m_valid = false; - return; - } - - if (segments[0].isEmpty() || segments[1].isEmpty()) { - m_valid = false; - return; - } - - bool ok; - int octal = segments[2].toInt(&ok, 8); - if (!ok || octal == 0) { - m_valid = false; - return; - } else { - m_value = octal; - } - - // We have exactly three segments and the third is valid octal, - // so we can declare the string valid and set the user and group names - m_valid = true; - m_username = segments[0]; - m_group = segments[1]; - - return; - -} - - - - - - diff --git a/src/modules/preservefiles/permissions.h b/src/modules/preservefiles/permissions.h deleted file mode 100644 index 4cb70a2c2..000000000 --- a/src/modules/preservefiles/permissions.h +++ /dev/null @@ -1,62 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright (C) 2018 Scott Harvey - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#ifndef PERMISSIONS_H -#define PERMISSIONS_H - -#include - -/** - * @brief The Permissions class takes a QString @p in the form of - * ::, checks it for validity, and makes the three - * components available indivdually. - */ -class Permissions -{ - -public: - - /** @brief Constructor - * - * Splits the string @p at the colon (":") into separate elements for - * , , and (permissions), where is returned as - * an **octal** integer. - */ - Permissions(QString p); - - /** @brief Default constructor of an invalid Permissions. */ - Permissions(); - - bool isValid() const { return m_valid; } - QString username() const { return m_username; } - QString group() const { return m_group; } - int value() const { return m_value; } - QString octal() const { return QString::number( m_value, 8 ); } - -private: - void parsePermissions(QString const &p); - - QString m_username; - QString m_group; - bool m_valid; - int m_value; - -}; - -#endif // PERMISSIONS_H diff --git a/src/modules/preservefiles/preservefiles.conf b/src/modules/preservefiles/preservefiles.conf index 671a308cc..4fb393b2e 100644 --- a/src/modules/preservefiles/preservefiles.conf +++ b/src/modules/preservefiles/preservefiles.conf @@ -1,46 +1,64 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the preserve-files job # # The *files* key contains a list of files to preserve. Each element of # the list should have one of these forms: # # - an absolute path (probably within the host system). This will be preserved -# as the same path within the target system (chroot). If, globally, dontChroot -# is true, then these items are ignored (since the destination is the same -# as the source). +# as the same path within the target system (chroot). If, globally, +# *dontChroot* is true, then these items will be ignored (since the +# destination is the same as the source). # - a map with a *dest* key. The *dest* value is a path interpreted in the -# target system (if dontChroot is true, in the host system). Relative paths -# are not recommended. There are three possible other keys in the map: +# target system (if the global *dontChroot* is true, then the host is the +# target as well). Relative paths are not recommended. There are two +# ways to select the source data for the file: # - *from*, which must have one of the values, below; it is used to # preserve files whose pathname is known to Calamares internally. # - *src*, to refer to a path interpreted in the host system. Relative # paths are not recommended, and are interpreted relative to where # Calamares is being run. +# Exactly one of the two source keys (either *from* or *src*) must be set. +# +# Special values for the key *from* are: +# - *log*, for the complete log file (up to the moment the preservefiles +# module is run), +# - *config*, for a JSON dump of the contents of global storage. +# Note that this may contain sensitive information, and should be +# given restrictive permissions. +# +# A map with a *dest* key can have these additional fields: # - *perm*, is a colon-separated tuple of :: # where is in octal (e.g. 4777 for wide-open, 0400 for read-only # by owner). If set, the file's ownership and permissions are set to # those values within the target system; if not set, no permissions # are changed. -# Only one of the two source keys (either *from* or *src*) may be set. +# - *optional*, is a boolean; if this is set to `true` then failure to +# preserve the file will **not** be counted as a failure of the +# module, and installation will proceed. Set this for files that might +# not exist in the host system (e.g. nvidia configuration files that +# are created in some boot scenarios and not in others). # -# The target filename is modified as follows: -# - `@@ROOT@@` is replaced by the path to the target root (may be /) +# The target path (*dest*) is modified as follows: +# - `@@ROOT@@` is replaced by the path to the target root (may be /). +# There is never any reason to use this, since the *dest* is already +# interpreted in the target system. # - `@@USER@@` is replaced by the username entered by on the user # page (may be empty, for instance if no user page is enabled) # -# Special values for the key *from* are: -# - *log*, for the complete log file (up to the moment the preservefiles -# module is run), -# - *config*, for the Calamares configuration file -# - *globals*, for a JSON dump of the contents of global storage ---- +# +# files: - - /etc/oem-information - from: log - dest: /root/install.log - perm: root:wheel:644 + dest: /var/log/Calamares.log + perm: root:wheel:600 - from: config - dest: /root/install.cfg - perm: root:wheel:400 + dest: /var/log/Calamares-install.json + perm: root:wheel:600 +# - src: /var/log/nvidia.conf +# dest: /var/log/Calamares-nvidia.conf +# optional: true # The *perm* key contains a default value to apply to all files listed # above that do not have a *perm* key of their own. If not set, diff --git a/src/modules/preservefiles/preservefiles.schema.yaml b/src/modules/preservefiles/preservefiles.schema.yaml new file mode 100644 index 000000000..65067ea97 --- /dev/null +++ b/src/modules/preservefiles/preservefiles.schema.yaml @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/preservefiles +additionalProperties: false +type: object +properties: + # TODO: it's a particularly-formatted string + perm: { type: string } + files: + type: array + items: + # There are three entries here because: string, or an entry with + # a src (but no from) or an entry with from (but no src). + anyOf: + - type: string + - type: object + properties: + dest: { type: string } + src: { type: string } + # TODO: it's a particularly-formatted string + perm: { type: string } + optional: { type: boolean } + required: [ dest ] + additionalProperties: false + - type: object + properties: + dest: { type: string } + from: { type: string, enum: [config, log] } + # TODO: it's a particularly-formatted string + perm: { type: string } + optional: { type: boolean } + required: [ dest ] + additionalProperties: false + +required: [ files ] diff --git a/src/modules/preservefiles/tests/1a-log.conf b/src/modules/preservefiles/tests/1a-log.conf new file mode 100644 index 000000000..d589d4dfb --- /dev/null +++ b/src/modules/preservefiles/tests/1a-log.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +item: + from: log + dest: /var/log/Calamares.log + perm: root:wheel:601 diff --git a/src/modules/preservefiles/tests/1b-config.conf b/src/modules/preservefiles/tests/1b-config.conf new file mode 100644 index 000000000..409dc89d9 --- /dev/null +++ b/src/modules/preservefiles/tests/1b-config.conf @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +item: + from: config + dest: /var/log/Calamares-install.json + perm: root:wheel:600 diff --git a/src/modules/preservefiles/tests/1c-src.conf b/src/modules/preservefiles/tests/1c-src.conf new file mode 100644 index 000000000..130ddd06f --- /dev/null +++ b/src/modules/preservefiles/tests/1c-src.conf @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +item: + src: /root/.cache/calamares/session.log + dest: /var/log/Calamares.log + perm: root:wheel:600 diff --git a/src/modules/preservefiles/tests/1d-filename.conf b/src/modules/preservefiles/tests/1d-filename.conf new file mode 100644 index 000000000..130ddd06f --- /dev/null +++ b/src/modules/preservefiles/tests/1d-filename.conf @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +item: + src: /root/.cache/calamares/session.log + dest: /var/log/Calamares.log + perm: root:wheel:600 diff --git a/src/modules/preservefiles/tests/1e-empty.conf b/src/modules/preservefiles/tests/1e-empty.conf new file mode 100644 index 000000000..183d4e456 --- /dev/null +++ b/src/modules/preservefiles/tests/1e-empty.conf @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +item: [] diff --git a/src/modules/preservefiles/tests/1f-bad.conf b/src/modules/preservefiles/tests/1f-bad.conf new file mode 100644 index 000000000..b2c008955 --- /dev/null +++ b/src/modules/preservefiles/tests/1f-bad.conf @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +item: + bop: 1 diff --git a/src/modules/rawfs/main.py b/src/modules/rawfs/main.py index af8a8198c..a72ffe19d 100644 --- a/src/modules/rawfs/main.py +++ b/src/modules/rawfs/main.py @@ -1,22 +1,13 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2019, Collabora Ltd +# SPDX-FileCopyrightText: 2019 Collabora Ltd +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares import os @@ -96,6 +87,8 @@ class RawFSItem: count = 0 libcalamares.utils.debug("Copying {} to {}".format(self.source, self.destination)) + if libcalamares.job.configuration.get("bogus", False): + return srcsize, srcblksize = get_device_size(self.source) destsize, destblksize = get_device_size(self.destination) @@ -151,7 +144,7 @@ def update_global_storage(item, gs): for partition in gs: if partition["device"] == item.destination: ret = subprocess.run(["blkid", "-s", "UUID", "-o", "value", item.destination], - capture_output=True, text=True) + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) if ret.returncode == 0: libcalamares.utils.debug("Setting {} UUID to {}".format(item.destination, ret.stdout.rstrip())) @@ -171,6 +164,7 @@ def run(): return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("rawfs")) + libcalamares.utils.debug("Copying {!s} raw partitions.".format(len(partitions))) for partition in partitions: if partition["mountPoint"]: for src in libcalamares.job.configuration["targets"]: diff --git a/src/modules/rawfs/module.desc b/src/modules/rawfs/module.desc index aaf65c183..0c4f21f92 100644 --- a/src/modules/rawfs/module.desc +++ b/src/modules/rawfs/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Module metadata file for block-copy jobmodule # Syntax is YAML 1.2 --- diff --git a/src/modules/rawfs/rawfs.conf b/src/modules/rawfs/rawfs.conf index 10e654a7d..bbc36906b 100644 --- a/src/modules/rawfs/rawfs.conf +++ b/src/modules/rawfs/rawfs.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the rawfs module: raw filesystem copy to a block device --- @@ -22,3 +25,8 @@ targets: resize: true - mountPoint: /data source: /dev/mmcblk0p3 + +# To support testing, set the *bogus* key to true. No actual work is done, but the +# module's logic is exercised. + +# bogus: false diff --git a/src/modules/rawfs/tests/1.global b/src/modules/rawfs/tests/1.global new file mode 100644 index 000000000..089557d99 --- /dev/null +++ b/src/modules/rawfs/tests/1.global @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ +partitions: + - mountPoint: / + device: /dev/sda1 + fs: ext4 + - mountPoint: /home + device: /dev/sda2 + fs: ext4 diff --git a/src/modules/rawfs/tests/1.job b/src/modules/rawfs/tests/1.job new file mode 100644 index 000000000..c87a4a70c --- /dev/null +++ b/src/modules/rawfs/tests/1.job @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Testing configuration for rawfs +# +--- + +targets: + - mountPoint: / + source: / + - mountPoint: /home + source: /images/home.img + resize: true + - mountPoint: /data + source: /dev/mmcblk0p3 + +bogus: true diff --git a/src/modules/rawfs/tests/CMakeTests.txt b/src/modules/rawfs/tests/CMakeTests.txt new file mode 100644 index 000000000..ed4c37485 --- /dev/null +++ b/src/modules/rawfs/tests/CMakeTests.txt @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# +# Special cases for rawfs tests +# +# - On FreeBSD, /proc/mounts doesn't exist (/proc is only about processes, +# and is rarely used). Expect the test to fail. + +if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + set_tests_properties(load-rawfs-1 PROPERTIES WILL_FAIL TRUE) +endif() diff --git a/src/modules/removeuser/CMakeLists.txt b/src/modules/removeuser/CMakeLists.txt index 55798feac..7663b3472 100644 --- a/src/modules/removeuser/CMakeLists.txt +++ b/src/modules/removeuser/CMakeLists.txt @@ -1,9 +1,12 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( removeuser TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES RemoveUserJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) diff --git a/src/modules/removeuser/RemoveUserJob.cpp b/src/modules/removeuser/RemoveUserJob.cpp index 0488d19a4..9475b9bea 100644 --- a/src/modules/removeuser/RemoveUserJob.cpp +++ b/src/modules/removeuser/RemoveUserJob.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Teo Mrnjavac - * Copyright 2017. Alf Gaida - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Alf Gaida + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "RemoveUserJob.h" diff --git a/src/modules/removeuser/RemoveUserJob.h b/src/modules/removeuser/RemoveUserJob.h index d13e834f0..c8a4df15d 100644 --- a/src/modules/removeuser/RemoveUserJob.h +++ b/src/modules/removeuser/RemoveUserJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef REMOVEUSERJOB_H @@ -32,7 +23,7 @@ class PLUGINDLLEXPORT RemoveUserJob : public Calamares::CppJob public: explicit RemoveUserJob( QObject* parent = nullptr ); - virtual ~RemoveUserJob() override; + ~RemoveUserJob() override; QString prettyName() const override; diff --git a/src/modules/removeuser/removeuser.conf b/src/modules/removeuser/removeuser.conf index d266e6952..cc086e723 100644 --- a/src/modules/removeuser/removeuser.conf +++ b/src/modules/removeuser/removeuser.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Removes a single user (with userdel) from the system. # This is typically used in OEM setups or if the live user # spills into the target system. diff --git a/src/modules/removeuser/removeuser.schema.yaml b/src/modules/removeuser/removeuser.schema.yaml new file mode 100644 index 000000000..c28271716 --- /dev/null +++ b/src/modules/removeuser/removeuser.schema.yaml @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/removeuser +additionalProperties: false +type: object +properties: + username: { type: string } +required: [ username ] diff --git a/src/modules/services-openrc/main.py b/src/modules/services-openrc/main.py index 23591fb84..cb1ae8020 100644 --- a/src/modules/services-openrc/main.py +++ b/src/modules/services-openrc/main.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2016, Artoo -# Copyright 2017, Philip Müller -# Copyright 2018, Artoo -# Copyright 2018-2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2016 Artoo +# SPDX-FileCopyrightText: 2017 Philip Müller +# SPDX-FileCopyrightText: 2018 Artoo +# SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares diff --git a/src/modules/services-openrc/module.desc b/src/modules/services-openrc/module.desc index 4b0b51614..c60872bc1 100644 --- a/src/modules/services-openrc/module.desc +++ b/src/modules/services-openrc/module.desc @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-openrc" diff --git a/src/modules/services-openrc/services-openrc.conf b/src/modules/services-openrc/services-openrc.conf index b8255b21a..6042b5305 100644 --- a/src/modules/services-openrc/services-openrc.conf +++ b/src/modules/services-openrc/services-openrc.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # openrc services module to modify service runlevels via rc-update in the chroot # # Services can be added (to any runlevel, or multiple runlevels) or deleted. diff --git a/src/modules/services-systemd/main.py b/src/modules/services-systemd/main.py index cd13d9ce9..6501aa44c 100644 --- a/src/modules/services-systemd/main.py +++ b/src/modules/services-systemd/main.py @@ -1,25 +1,16 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Philip Müller -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Alf Gaida -# Copyright 2018-2019, Adriaan de Groot +# SPDX-FileCopyrightText: 2014 Philip Müller +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import libcalamares @@ -72,6 +63,8 @@ def systemctl(targets, command, suffix): description = _("Cannot enable systemd service {name!s}.") elif command == "enable" and suffix == ".target": description = _("Cannot enable systemd target {name!s}.") + elif command == "enable" and suffix == ".timer": + description = _("Cannot enable systemd timer {name!s}.") elif command == "disable" and suffix == ".service": description = _("Cannot enable systemd service {name!s}.") elif command == "disable" and suffix == ".target": @@ -106,6 +99,10 @@ def run(): if r is not None: return r + r = systemctl(cfg.get("timers", []), "enable", ".timer") + if r is not None: + return r + r = systemctl(cfg.get("disable", []), "disable", ".service") if r is not None: return r diff --git a/src/modules/services-systemd/module.desc b/src/modules/services-systemd/module.desc index 4a72b658b..e016c6dcb 100644 --- a/src/modules/services-systemd/module.desc +++ b/src/modules/services-systemd/module.desc @@ -1,6 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-systemd" interface: "python" -requires: [] script: "main.py" diff --git a/src/modules/services-systemd/services-systemd.conf b/src/modules/services-systemd/services-systemd.conf index 4d34df7d0..de5c4f053 100644 --- a/src/modules/services-systemd/services-systemd.conf +++ b/src/modules/services-systemd/services-systemd.conf @@ -1,23 +1,26 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Systemd services manipulation. # -# This module can enable services and targets for systemd -# (if packaging doesn't already do that). It can calso -# disable services (but not targets). +# This module can enable services, timers and targets for systemd +# (if packaging doesn't already do that). It can also +# disable services and targets as well as mask units. # -# First, services are enabled; then targets; then services -# are disabled -- this order of operations is fixed. +# The order of operations is fixed. Enable services, enable targets, +# enable timers, disable services, disable targets and finally apply masks. --- -# There are three configuration keys for this module: -# *services*, *targets* and *disable*. The value of each -# key is a list of entries. Each entry has two keys: +# There are several configuration keys for this module: +# *services*, *targets*, *timers*, *disable*, *disable-targets* and *mask*. +# The value of each key is a list of entries. Each entry has two keys: # - *name* is the (string) name of the service or target that is being -# changed. Use quotes. Don't include ".target" or ".service" -# in the name. +# changed. Use quotes. Don't include unit suffix in the name. For +# example, it should be "NetworkManager", not "NetworkManager.service" # - *mandatory* is a boolean option, which states whether the change # must be done successfully. If systemd reports an error while changing # a mandatory entry, the installation will fail. When mandatory is false, -# errors for that entry (service or target) are ignored. If mandatory +# errors for that systemd unit are ignored. If mandatory # is not specified, the default is false. # # An entry may also be given as a single string, which is then @@ -43,6 +46,11 @@ # - name: "graphical" # mandatory: true # +# # Enables .timer +# timers: +# - name: "fstrim" +# mandatory: false +# # # Disables .service # disable: # - name: "pacman-init" @@ -63,9 +71,10 @@ # - mandatory: true # By default, no changes are made. -#services: [] -#targets: [] -#disable: [] +services: [] +targets: [] +timers: [] +disable: [] disable-targets: [] mask: [] diff --git a/src/modules/services-systemd/services-systemd.schema.yaml b/src/modules/services-systemd/services-systemd.schema.yaml new file mode 100644 index 000000000..35d34cda8 --- /dev/null +++ b/src/modules/services-systemd/services-systemd.schema.yaml @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/services-systemd +definitions: + service: + $id: '#definitions/service' + type: object + description: a name and a flag for services, targets, and others + additionalProperties: false + properties: + name: { type: string } + mandatory: { type: boolean, default: false } + required: [ name ] + +additionalProperties: false +type: object +properties: + services: { type: array, items: { $ref: '#definitions/service' } } + targets: { type: array, items: { $ref: '#definitions/service' } } + timers: { type: array, items: { $ref: '#definitions/service' } } + disable: { type: array, items: { $ref: '#definitions/service' } } + disable-targets: { type: array, items: { $ref: '#definitions/service' } } + mask: { type: array, items: { $ref: '#definitions/service' } } diff --git a/src/modules/shellprocess/CMakeLists.txt b/src/modules/shellprocess/CMakeLists.txt index ec1cf0bcf..ac6630c6d 100644 --- a/src/modules/shellprocess/CMakeLists.txt +++ b/src/modules/shellprocess/CMakeLists.txt @@ -1,10 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( shellprocess TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ShellProcessJob.cpp - LINK_PRIVATE_LIBRARIES - calamares SHARED_LIB ) @@ -13,5 +16,5 @@ calamares_add_test( SOURCES Tests.cpp LIBRARIES - yamlcpp + yamlcpp::yamlcpp ) diff --git a/src/modules/shellprocess/ShellProcessJob.cpp b/src/modules/shellprocess/ShellProcessJob.cpp index d0507a732..0f9a150d2 100644 --- a/src/modules/shellprocess/ShellProcessJob.cpp +++ b/src/modules/shellprocess/ShellProcessJob.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ShellProcessJob.h" @@ -27,7 +18,6 @@ #include "utils/Variant.h" #include -#include #include ShellProcessJob::ShellProcessJob( QObject* parent ) @@ -43,6 +33,10 @@ ShellProcessJob::~ShellProcessJob() {} QString ShellProcessJob::prettyName() const { + if ( m_name ) + { + return m_name->get(); + } return tr( "Shell Processes Job" ); } @@ -65,10 +59,10 @@ void ShellProcessJob::setConfigurationMap( const QVariantMap& configurationMap ) { bool dontChroot = CalamaresUtils::getBool( configurationMap, "dontChroot", false ); - qint64 timeout = CalamaresUtils::getInteger( configurationMap, "timeout", 10 ); + qint64 timeout = CalamaresUtils::getInteger( configurationMap, "timeout", 30 ); if ( timeout < 1 ) { - timeout = 10; + timeout = 30; } if ( configurationMap.contains( "script" ) ) @@ -84,6 +78,16 @@ ShellProcessJob::setConfigurationMap( const QVariantMap& configurationMap ) { cWarning() << "No script given for ShellProcessJob" << moduleInstanceKey(); } + + bool labels_ok = false; + auto labels = CalamaresUtils::getSubMap( configurationMap, "i18n", labels_ok ); + if ( labels_ok ) + { + if ( labels.contains( "name" ) ) + { + m_name = std::make_unique< CalamaresUtils::Locale::TranslatedString >( labels, "name" ); + } + } } CALAMARES_PLUGIN_FACTORY_DEFINITION( ShellProcessJobFactory, registerPlugin< ShellProcessJob >(); ) diff --git a/src/modules/shellprocess/ShellProcessJob.h b/src/modules/shellprocess/ShellProcessJob.h index 708a43087..a931d1e1a 100644 --- a/src/modules/shellprocess/ShellProcessJob.h +++ b/src/modules/shellprocess/ShellProcessJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SHELLPROCESSJOB_H @@ -22,6 +13,7 @@ #include "CppJob.h" #include "DllMacro.h" +#include "locale/TranslatableConfiguration.h" #include "utils/CommandList.h" #include "utils/PluginFactory.h" @@ -36,7 +28,7 @@ class PLUGINDLLEXPORT ShellProcessJob : public Calamares::CppJob public: explicit ShellProcessJob( QObject* parent = nullptr ); - virtual ~ShellProcessJob() override; + ~ShellProcessJob() override; QString prettyName() const override; @@ -46,6 +38,7 @@ public: private: std::unique_ptr< CalamaresUtils::CommandList > m_commands; + std::unique_ptr< CalamaresUtils::Locale::TranslatedString > m_name; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ShellProcessJobFactory ) diff --git a/src/modules/shellprocess/Tests.cpp b/src/modules/shellprocess/Tests.cpp index caf9800c9..c1489c1ab 100644 --- a/src/modules/shellprocess/Tests.cpp +++ b/src/modules/shellprocess/Tests.cpp @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Tests.h" @@ -51,16 +42,11 @@ ShellProcessTests::testProcessListSampleConfig() { YAML::Node doc; - QStringList dirs { "src/modules/shellprocess", "." }; - for ( const auto& dir : dirs ) - { - QString filename = dir + "/shellprocess.conf"; - if ( QFileInfo::exists( filename ) ) - { - doc = YAML::LoadFile( filename.toStdString() ); - break; - } - } + QString filename = QStringLiteral( "shellprocess.conf" ); + QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); + + QVERIFY( fi.exists() ); + doc = YAML::LoadFile( fi.fileName().toStdString() ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); diff --git a/src/modules/shellprocess/Tests.h b/src/modules/shellprocess/Tests.h index 5b4ebebbb..cabeaada2 100644 --- a/src/modules/shellprocess/Tests.h +++ b/src/modules/shellprocess/Tests.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TESTS_H diff --git a/src/modules/shellprocess/shellprocess.conf b/src/modules/shellprocess/shellprocess.conf index 4734aaadd..07947f38f 100644 --- a/src/modules/shellprocess/shellprocess.conf +++ b/src/modules/shellprocess/shellprocess.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the shell process job. # # Executes a list of commands found under the key *script*. @@ -12,7 +15,16 @@ # # The (global) timeout for the command list can be set with # the *timeout* key. The value is a time in seconds, default -# is 10 seconds if not set. +# is 30 seconds if not set. The timeout **must** be tuned, either +# globally or per-command (see below in the description of *script*), +# to the load or expected running-time of the command. +# +# - Setting a timeout of 30 for a `touch` command is probably exessive +# - Setting a timeout of 1 for a `touch` command might be low, +# on a slow disk where touch needs to be loaded from CDROM +# - Setting a timeout of 30 for a 1GB download is definitely low +# - Setting a timeout of 3600 for a 1GB download is going to leave +# the user in uncertainty for a loooong time. # # If a command starts with "-" (a single minus sign), then the # return value of the command following the - is ignored; otherwise, @@ -21,16 +33,58 @@ # # The value of *script* may be: # - a single string; this is one command that is executed. -# - a list of strings; these are executed one at a time, by +# - a single object (this is not useful). +# - a list of items; these are executed one at a time, by # separate shells (/bin/sh -c is invoked for each command). -# - an object, specifying a key *command* and (optionally) -# a key *timeout* to set the timeout for this specific -# command differently from the global setting. +# Each list item may be: +# - a single string; this is one command that is executed. +# - a single object, specifying a key *command* and (optionally) +# a key *timeout* to set the timeout for this specific +# command differently from the global setting. +# +# Using a single object is not useful because the same effect can +# be obtained with a single string and a global timeout, but when +# there are multiple commands to execute, one of them might have +# a different timeout than the others. +# +# To change the description of the job, set the *name* entries in *i18n*. --- +# Set to true to run in host, rather than target system dontChroot: false -timeout: 10 +# Tune this for the commands you're actually running +# timeout: 10 + +# Script may be a single string (because false returns an error exit +# code, this will trigger a failure in the installation): +# +# script: "/usr/bin/false" + +# Script may be a list of strings (because false returns an error exit +# code, **but** the command starts with a "-", the error exit is +# ignored and installation continues): +# +# script: +# - "-/usr/bin/false" +# - "/bin/ls" +# - "/usr/bin/true" + +# Script may be a list of items (if the touch command fails, it is +# ignored; the slowloris command has a different timeout from the +# other commands in the list): script: - "-touch @@ROOT@@/tmp/thingy" - - "/usr/bin/false" + - "/usr/bin/true" - command: "/usr/local/bin/slowloris" timeout: 3600 + +# You can change the description of the job (as it is displayed in the +# progress bar during installation) by defining an *i18n* key, which +# has a *name* field and optionally, translations as *name[lang]*. +# +# Without a translation here, the default name from the source code +# is used, "Shell Processes Job". +# +# i18n: +# name: "Shell process" +# name[nl]: "Schelpenpad" +# name[en_GB]: "Just a moment" diff --git a/src/modules/shellprocess/shellprocess.schema.yaml b/src/modules/shellprocess/shellprocess.schema.yaml new file mode 100644 index 000000000..af56707b7 --- /dev/null +++ b/src/modules/shellprocess/shellprocess.schema.yaml @@ -0,0 +1,57 @@ +# SPDX-FileCopyrightText: benne-dee +# SPDX-License-Identifier: GPL-3.0-or-later + +$schema: http://json-schema.org/draft-07/schema# +$id: https://calamares.io/schemas/shellprocess +definitions: + command: + $id: '#definitions/command' + type: string + description: This is one command that is executed. If a command starts with '-' + (a single minus sign), then the return value of the command following the - + is ignored; otherwise, a failing command will abort the installation. + commandObj: + $id: '#definitions/commandObj' + type: object + properties: + command: + $ref: '#definitions/command' + timeout: + type: number + description: the (optional) timeout for this specific command (differently + from the global setting) + required: + - command +type: object +description: Configuration for the shell process job. +properties: + dontChroot: + type: boolean + description: If the top-level key *dontChroot* is true, then the commands are + executed in the context of the live system, otherwise in the context of the + target system. + timeout: + type: number + description: The (global) timeout for the command list in seconds. If unset, defaults + to 30 seconds. + script: + anyOf: + - $ref: '#definitions/command' + - $ref: '#definitions/commandObj' + - type: array + description: these commands are executed one at a time, by separate shells (/bin/sh + -c is invoked for each command). + items: + anyOf: + - $ref: '#definitions/command' + - $ref: '#definitions/commandObj' + i18n: + type: object + description: To change description of the job (as it is displayed in the progress + bar during installation) use *name* field and optionally, translations as *name[lang]*. + Without a translation, the default name from the source code is used, "Shell Processes Job". + properties: + name: + type: string + required: + - name diff --git a/src/modules/summary/CMakeLists.txt b/src/modules/summary/CMakeLists.txt index ce71357cd..e3c1a381c 100644 --- a/src/modules/summary/CMakeLists.txt +++ b/src/modules/summary/CMakeLists.txt @@ -1,13 +1,17 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( summary TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - SummaryViewStep.cpp + Config.cpp SummaryPage.cpp + SummaryViewStep.cpp UI - LINK_PRIVATE_LIBRARIES - calamaresui SHARED_LIB NO_CONFIG ) diff --git a/src/modules/summary/Config.cpp b/src/modules/summary/Config.cpp new file mode 100644 index 000000000..6eddfa3f7 --- /dev/null +++ b/src/modules/summary/Config.cpp @@ -0,0 +1,151 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020, Camilo Higuita + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "Branding.h" +#include "Settings.h" +#include "ViewManager.h" +#include "utils/CalamaresUtilsGui.h" +#include "utils/Logger.h" +#include "utils/Retranslator.h" +#include "viewpages/ExecutionViewStep.h" + +SummaryModel::SummaryModel( QObject* parent ) + : QAbstractListModel( parent ) +{ +} + +QHash< int, QByteArray > +SummaryModel::roleNames() const +{ + // Not including WidgetRole here because that wouldn't make sense + // in a QML context which is where the roleNames are important. + return { { TitleRole, "title" }, { MessageRole, "message" } }; +} + +QVariant +SummaryModel::data( const QModelIndex& index, int role ) const +{ + if ( !index.isValid() ) + { + return QVariant(); + } + auto& item = m_summary.at( index.row() ); + switch ( role ) + { + case TitleRole: + return item.title; + case MessageRole: + return item.message; + case WidgetRole: + return item.widget ? QVariant::fromValue( item.widget ) : QVariant(); + default: + return QVariant(); + } +} + +int +SummaryModel::rowCount( const QModelIndex& ) const +{ + return m_summary.count(); +} + +void +SummaryModel::setSummaryList( const Calamares::ViewStepList& steps, bool withWidgets ) +{ + beginResetModel(); + m_summary.clear(); + + for ( Calamares::ViewStep* step : steps ) + { + QString text = step->prettyStatus(); + QWidget* widget = withWidgets ? step->createSummaryWidget() : nullptr; + + if ( text.isEmpty() && !widget ) + { + continue; + } + + m_summary << StepSummary { step->prettyName(), text, widget }; + } + endResetModel(); +} + +Config::Config( QObject* parent ) + : QObject( parent ) + , m_summary( new SummaryModel( this ) ) + +{ + CALAMARES_RETRANSLATE_SLOT( &Config::retranslate ); + retranslate(); +} + +void +Config::retranslate() +{ + m_title = tr( "Summary" ); + + if ( Calamares::Settings::instance()->isSetupMode() ) + { + m_message = tr( "This is an overview of what will happen once you start " + "the setup procedure." ); + } + else + { + m_message = tr( "This is an overview of what will happen once you start " + "the install procedure." ); + } + Q_EMIT titleChanged( m_title ); + Q_EMIT messageChanged( m_message ); +} + +Calamares::ViewStepList +Config::stepsForSummary( const Calamares::ViewStep* upToHere ) +{ + Calamares::ViewStepList steps; + for ( Calamares::ViewStep* step : Calamares::ViewManager::instance()->viewSteps() ) + { + // *Assume* that if there's an exec step in the sequence, + // we don't need a summary for steps before it. This works in + // practice if there's a summary step before each exec -- + // and in practice, there's only one of each. + if ( qobject_cast< Calamares::ExecutionViewStep* >( step ) ) + { + steps.clear(); + continue; + } + + // Having reached the parent view-step of the Config object, + // we know we're providing a summary of steps up until this + // view step, so we now have steps since the previous exec, up + // to this summary. + if ( upToHere == step ) + { + break; + } + + steps.append( step ); + } + return steps; +} + + +void +Config::collectSummaries( const Calamares::ViewStep* upToHere, Widgets withWidgets ) +{ + m_summary->setSummaryList( stepsForSummary( upToHere ), withWidgets == Widgets::Enabled ); +} + +void +Config::clearSummaries() +{ + m_summary->setSummaryList( {}, false ); +} diff --git a/src/modules/summary/Config.h b/src/modules/summary/Config.h new file mode 100644 index 000000000..f0732f448 --- /dev/null +++ b/src/modules/summary/Config.h @@ -0,0 +1,113 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020, Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef SUMMARY_CONFIG_H +#define SUMMARY_CONFIG_H + +#include "viewpages/ViewStep.h" + +#include +#include +#include + +class Config; + +/** @brief Data for one step + * + * A step generally has a text description, but **may** have a + * QWidget. There is no ownership of the QWidget, that is assumed + * to be handed off to some owning parent-widget. + */ +struct StepSummary +{ + QString title; + QString message; + QWidget* widget = nullptr; +}; + +class SummaryModel : public QAbstractListModel +{ + Q_OBJECT + friend class Config; + +public: + enum Roles : int + { + TitleRole = Qt::DisplayRole, // Name of the step + MessageRole = Qt::UserRole, // String saying what it will do + WidgetRole, // Pointer to widget + }; + + explicit SummaryModel( QObject* parent = nullptr ); + int rowCount( const QModelIndex& = QModelIndex() ) const override; + QVariant data( const QModelIndex& index, int role ) const override; + +protected: + QHash< int, QByteArray > roleNames() const override; + +private: + /** @brief Sets the model data from @p steps + * + * Replaces the list of summaries with summaries given by + * the jobs and ViewSteps objects in @p steps. If @p withWidgets + * is @c true, then also queries for widget summaries alongside + * the text summaries for each step. + */ + void setSummaryList( const Calamares::ViewStepList& steps, bool withWidgets = false ); + + QVector< StepSummary > m_summary; +}; + +class Config : public QObject +{ + Q_OBJECT + + ///@brief Name of this summary (generally, "Summary") + Q_PROPERTY( QString title READ title NOTIFY titleChanged ) + ///@brief Description of what the summary means + Q_PROPERTY( QString message READ message NOTIFY messageChanged ) + + Q_PROPERTY( QAbstractListModel* summaryModel READ summaryModel CONSTANT FINAL ) + +public: + explicit Config( QObject* parent = nullptr ); + + ///@brief Include widgets in the model? + enum class Widgets + { + Disabled, + Enabled + }; + + static Calamares::ViewStepList stepsForSummary( const Calamares::ViewStep* upToHere ); + + ///@brief Called later, to load the model once all viewsteps are there + void collectSummaries( const Calamares::ViewStep* upToHere, Widgets withWidgets ); + ///@brief Clear the model of steps (to avoid dangling widgets) + void clearSummaries(); + + QAbstractListModel* summaryModel() const { return m_summary; } + + QString title() const { return m_title; } + QString message() const { return m_message; } + +private: + void retranslate(); + + SummaryModel* m_summary; + + QString m_title; + QString m_message; + +Q_SIGNALS: + void titleChanged( QString title ); + void messageChanged( QString message ); +}; +#endif diff --git a/src/modules/summary/SummaryPage.cpp b/src/modules/summary/SummaryPage.cpp index 7114f27ee..e156d473e 100644 --- a/src/modules/summary/SummaryPage.cpp +++ b/src/modules/summary/SummaryPage.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SummaryPage.h" @@ -28,6 +19,7 @@ #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" +#include "utils/QtCompat.h" #include "utils/Retranslator.h" #include "viewpages/ExecutionViewStep.h" @@ -35,31 +27,22 @@ #include #include -static const int SECTION_SPACING = 12; - -SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent ) +SummaryPage::SummaryPage( Config* config, QWidget* parent ) : QWidget() - , m_thisViewStep( thisViewStep ) , m_contentWidget( nullptr ) , m_scrollArea( new QScrollArea( this ) ) { Q_UNUSED( parent ) - this->setObjectName("summaryStep"); + this->setObjectName( "summaryStep" ); - Q_ASSERT( m_thisViewStep ); QVBoxLayout* layout = new QVBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); QLabel* headerLabel = new QLabel( this ); - CALAMARES_RETRANSLATE( - if ( Calamares::Settings::instance()->isSetupMode() ) - headerLabel->setText( tr( "This is an overview of what will happen once you start " - "the setup procedure." ) ); - else - headerLabel->setText( tr( "This is an overview of what will happen once you start " - "the install procedure." ) ); - ) + headerLabel->setObjectName( "summaryTitle" ); + headerLabel->setText( config->message() ); + connect( config, &Config::messageChanged, headerLabel, &QLabel::setText ); layout->addWidget( headerLabel ); layout->addWidget( m_scrollArea ); m_scrollArea->setWidgetResizable( true ); @@ -73,120 +56,122 @@ SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent ) } -// Adds a widget for those ViewSteps that want a summary; -// see SummaryPage documentation and also ViewStep docs. -void -SummaryPage::onActivate() -{ - createContentWidget(); - - bool first = true; - const Calamares::ViewStepList steps = - stepsForSummary( Calamares::ViewManager::instance()->viewSteps() ); - - for ( Calamares::ViewStep* step : steps ) - { - QString text = step->prettyStatus(); - QWidget* widget = step->createSummaryWidget(); - - if ( text.isEmpty() && !widget ) - continue; - - if ( first ) - first = false; - else - m_layout->addSpacing( SECTION_SPACING ); - - m_layout->addWidget( createTitleLabel( step->prettyName() ) ); - QHBoxLayout* itemBodyLayout = new QHBoxLayout; - m_layout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); - m_layout->addLayout( itemBodyLayout ); - itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); - QVBoxLayout* itemBodyCoreLayout = new QVBoxLayout; - itemBodyLayout->addLayout( itemBodyCoreLayout ); - CalamaresUtils::unmarginLayout( itemBodyLayout ); - if ( !text.isEmpty() ) - itemBodyCoreLayout->addWidget( createBodyLabel( text ) ); - if ( widget ) - itemBodyCoreLayout->addWidget( widget ); - itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); - } - m_layout->addStretch(); - - m_scrollArea->setWidget( m_contentWidget ); - - auto summarySize = m_contentWidget->sizeHint(); - if ( summarySize.height() > m_scrollArea->size().height() ) - { - auto enlarge = 2 + summarySize.height() - m_scrollArea->size().height(); - auto widgetSize = this->size(); - widgetSize.setHeight( widgetSize.height() + enlarge ); - - cDebug() << "Summary widget is larger than viewport, enlarge by" << enlarge << "to" << widgetSize; - - emit m_thisViewStep->enlarge( QSize( 0, enlarge ) ); // Only expand height - } -} - -Calamares::ViewStepList -SummaryPage::stepsForSummary( const Calamares::ViewStepList& allSteps ) const -{ - Calamares::ViewStepList steps; - for ( Calamares::ViewStep* step : allSteps ) - { - // We start from the beginning of the complete steps list. If we encounter any - // ExecutionViewStep, it means there was an execution phase in the past, and any - // jobs from before that phase were already executed, so we can safely clear the - // list of steps to summarize and start collecting from scratch. - if ( qobject_cast< Calamares::ExecutionViewStep* >( step ) ) - { - steps.clear(); - continue; - } - - // If we reach the parent step of this page, we're done collecting the list of - // steps to summarize. - if ( m_thisViewStep == step ) - break; - - steps.append( step ); - } - - return steps; -} - - -void -SummaryPage::createContentWidget() -{ - delete m_contentWidget; - m_contentWidget = new QWidget; - m_layout = new QVBoxLayout( m_contentWidget ); - CalamaresUtils::unmarginLayout( m_layout ); -} - -QLabel* -SummaryPage::createTitleLabel( const QString& text ) const +static QLabel* +createTitleLabel( const QString& text, const QFont& titleFont ) { QLabel* label = new QLabel( text ); - QFont fnt = font(); - fnt.setWeight( QFont::Light ); - fnt.setPointSize( CalamaresUtils::defaultFontSize() * 2 ); - label->setFont( fnt ); + label->setObjectName( "summaryItemTitle" ); + label->setFont( titleFont ); label->setContentsMargins( 0, 0, 0, 0 ); return label; } -QLabel* -SummaryPage::createBodyLabel( const QString& text ) const +static QLabel* +createBodyLabel( const QString& text, const QPalette& bodyPalette ) { QLabel* label = new QLabel; + label->setObjectName( "summaryItemBody" ); label->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); - QPalette pal( palette() ); - pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) ); label->setAutoFillBackground( true ); - label->setPalette( pal ); + label->setPalette( bodyPalette ); label->setText( text ); return label; } + +static QWidget* +createStepWidget( const QString& description, QWidget* innerWidget, const QPalette& palette ) +{ + QWidget* w = new QWidget(); + QHBoxLayout* itemBodyLayout = new QHBoxLayout; + w->setLayout( itemBodyLayout ); + + // Indent the inner box by a bit + itemBodyLayout->addSpacing( CalamaresUtils::defaultFontHeight() * 2 ); + QVBoxLayout* itemBodyCoreLayout = new QVBoxLayout; + itemBodyLayout->addLayout( itemBodyCoreLayout ); + CalamaresUtils::unmarginLayout( itemBodyLayout ); + + itemBodyCoreLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); + if ( innerWidget ) + { + itemBodyCoreLayout->addWidget( innerWidget ); + } + else + { + itemBodyCoreLayout->addWidget( createBodyLabel( description, palette ) ); + } + + return w; +} + +static void +ensureSize( QWidget* parent, QScrollArea* container, Calamares::ViewStep* viewstep ) +{ + auto summarySize = container->widget()->sizeHint(); + if ( summarySize.height() > container->size().height() ) + { + auto enlarge = 2 + summarySize.height() - container->size().height(); + auto widgetSize = parent->size(); + widgetSize.setHeight( widgetSize.height() + enlarge ); + + cDebug() << "Summary widget is larger than viewport, enlarge by" << enlarge << "to" << widgetSize; + + emit viewstep->ensureSize( widgetSize ); // Only expand height + } +} + +// Adds a widget for those ViewSteps that want a summary; +// see SummaryPage documentation and also ViewStep docs. +void +SummaryPage::buildWidgets( Config* config, SummaryViewStep* viewstep ) +{ + const int SECTION_SPACING = 12; + + delete m_contentWidget; // It might have been created previously + m_contentWidget = new QWidget; + m_layout = new QVBoxLayout( m_contentWidget ); + CalamaresUtils::unmarginLayout( m_layout ); + + QFont titleFont = font(); + titleFont.setWeight( QFont::Light ); + titleFont.setPointSize( CalamaresUtils::defaultFontSize() * 2 ); + + QPalette bodyPalette( palette() ); + bodyPalette.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); + + const auto* model = config->summaryModel(); + const auto rowCount = model->rowCount(); + + for ( int row = 0; row < rowCount; row++ ) + { + const auto rowIndex = model->index( row ); + QString title = model->data( rowIndex, SummaryModel::TitleRole ).toString(); + QString text = model->data( rowIndex, SummaryModel::MessageRole ).toString(); + QWidget* widget = model->data( rowIndex, SummaryModel::WidgetRole ).value< QWidget* >(); + + if ( text.isEmpty() && !widget ) + { + continue; + } + + if ( row > 0 ) + { + m_layout->addSpacing( SECTION_SPACING ); + } + + m_layout->addWidget( createTitleLabel( title, titleFont ) ); + m_layout->addWidget( createStepWidget( text, widget, bodyPalette ) ); + } + m_layout->addStretch(); + + m_scrollArea->setWidget( m_contentWidget ); + ensureSize( this, m_scrollArea, viewstep ); +} + +void +SummaryPage::cleanup() +{ + delete m_contentWidget; + m_contentWidget = nullptr; +} diff --git a/src/modules/summary/SummaryPage.h b/src/modules/summary/SummaryPage.h index b9a98f2a1..9976020f7 100644 --- a/src/modules/summary/SummaryPage.h +++ b/src/modules/summary/SummaryPage.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SUMMARYPAGE_H @@ -23,10 +14,13 @@ #include +class Config; +class SummaryViewStep; + class QLabel; class QScrollArea; class QVBoxLayout; -class SummaryViewStep; + /** @brief Provide a summary view with to-be-done action descriptions. * @@ -51,23 +45,17 @@ class SummaryPage : public QWidget { Q_OBJECT public: - explicit SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent = nullptr ); + explicit SummaryPage( Config* config, QWidget* parent = nullptr ); - void onActivate(); - void createContentWidget(); + /// @brief Create contents showing all of the summary + void buildWidgets( Config* config, SummaryViewStep* viewstep ); + /// @brief Clean up the widgets + void cleanup(); private: - Calamares::ViewStepList stepsForSummary( const Calamares::ViewStepList& allSteps ) const; - - const SummaryViewStep* m_thisViewStep; - QVBoxLayout* m_layout = nullptr; QWidget* m_contentWidget = nullptr; - - QLabel* createTitleLabel( const QString& text ) const; - QLabel* createBodyLabel( const QString& text ) const; - - QScrollArea* m_scrollArea; + QScrollArea* m_scrollArea = nullptr; }; -#endif // SUMMARYPAGE_H +#endif // SUMMARYPAGE_H diff --git a/src/modules/summary/SummaryViewStep.cpp b/src/modules/summary/SummaryViewStep.cpp index 6835b2b05..9d63d0d37 100644 --- a/src/modules/summary/SummaryViewStep.cpp +++ b/src/modules/summary/SummaryViewStep.cpp @@ -1,30 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SummaryViewStep.h" #include "SummaryPage.h" -CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryViewStepFactory, registerPlugin< SummaryViewStep >(); ) SummaryViewStep::SummaryViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_widget( new SummaryPage( this ) ) + , m_config( new Config( this ) ) + , m_widget( new SummaryPage( m_config ) ) { emit nextStatusChanged( true ); } @@ -33,14 +25,17 @@ SummaryViewStep::SummaryViewStep( QObject* parent ) SummaryViewStep::~SummaryViewStep() { if ( m_widget && m_widget->parent() == nullptr ) + { m_widget->deleteLater(); + } + delete m_config; } QString SummaryViewStep::prettyName() const { - return tr( "Summary" ); + return m_config->title(); } @@ -79,23 +74,24 @@ SummaryViewStep::isAtEnd() const } -QList< Calamares::job_ptr > +Calamares::JobList SummaryViewStep::jobs() const { - return QList< Calamares::job_ptr >(); + return {}; } void SummaryViewStep::onActivate() { - m_widget->onActivate(); + m_config->collectSummaries( this, Config::Widgets::Enabled ); + m_widget->buildWidgets( m_config, this ); } void SummaryViewStep::onLeave() { - m_widget->createContentWidget(); + m_config->clearSummaries(); + m_widget->cleanup(); } - diff --git a/src/modules/summary/SummaryViewStep.h b/src/modules/summary/SummaryViewStep.h index 5b2f49b8e..e2ee0566e 100644 --- a/src/modules/summary/SummaryViewStep.h +++ b/src/modules/summary/SummaryViewStep.h @@ -1,30 +1,20 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SUMMARYPAGEPLUGIN_H #define SUMMARYPAGEPLUGIN_H -#include - -#include "utils/PluginFactory.h" -#include "viewpages/ViewStep.h" +#include "Config.h" #include "DllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/ViewStep.h" class SummaryPage; @@ -34,7 +24,7 @@ class PLUGINDLLEXPORT SummaryViewStep : public Calamares::ViewStep public: explicit SummaryViewStep( QObject* parent = nullptr ); - virtual ~SummaryViewStep() override; + ~SummaryViewStep() override; QString prettyName() const override; @@ -46,15 +36,16 @@ public: bool isAtBeginning() const override; bool isAtEnd() const override; - QList< Calamares::job_ptr > jobs() const override; + Calamares::JobList jobs() const override; void onActivate() override; void onLeave() override; private: - SummaryPage* m_widget; + Config* m_config = nullptr; + SummaryPage* m_widget = nullptr; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryViewStepFactory ) -#endif // SUMMARYPAGEPLUGIN_H +#endif // SUMMARYPAGEPLUGIN_H diff --git a/src/modules/summaryq/CMakeLists.txt b/src/modules/summaryq/CMakeLists.txt new file mode 100644 index 000000000..8aac1bc2f --- /dev/null +++ b/src/modules/summaryq/CMakeLists.txt @@ -0,0 +1,26 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2021 Anke Boersma +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "summaryq (QML is not supported in this build)" ) + return() +endif() + +set( _summary ${CMAKE_CURRENT_SOURCE_DIR}/../summary ) +include_directories( ${_summary} ) + +calamares_add_plugin( summaryq + TYPE viewmodule + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + SummaryQmlViewStep.cpp + ${_summary}/Config.cpp + UI + RESOURCES + summaryq.qrc + LINK_PRIVATE_LIBRARIES + calamaresui + SHARED_LIB +) diff --git a/src/modules/summaryq/SummaryQmlViewStep.cpp b/src/modules/summaryq/SummaryQmlViewStep.cpp new file mode 100644 index 000000000..a5acdfddd --- /dev/null +++ b/src/modules/summaryq/SummaryQmlViewStep.cpp @@ -0,0 +1,73 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2020, Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "SummaryQmlViewStep.h" + +CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryQmlViewStepFactory, registerPlugin< SummaryQmlViewStep >(); ) + +SummaryQmlViewStep::SummaryQmlViewStep( QObject* parent ) + : Calamares::QmlViewStep( parent ) + , m_config( new Config( this ) ) +{ + emit nextStatusChanged( true ); +} + + +SummaryQmlViewStep::~SummaryQmlViewStep() {} + +QString +SummaryQmlViewStep::prettyName() const +{ + return m_config->title(); +} + + +bool +SummaryQmlViewStep::isNextEnabled() const +{ + return true; +} + + +bool +SummaryQmlViewStep::isBackEnabled() const +{ + return true; +} + + +bool +SummaryQmlViewStep::isAtBeginning() const +{ + return true; +} + + +bool +SummaryQmlViewStep::isAtEnd() const +{ + return true; +} + + +Calamares::JobList +SummaryQmlViewStep::jobs() const +{ + return {}; +} + + +void +SummaryQmlViewStep::onActivate() +{ + // Collect the steps before this one: those need to have their + // summary (text or widget) displayed. + m_config->collectSummaries( this, Config::Widgets::Disabled ); +} diff --git a/src/modules/summaryq/SummaryQmlViewStep.h b/src/modules/summaryq/SummaryQmlViewStep.h new file mode 100644 index 000000000..8668d0afe --- /dev/null +++ b/src/modules/summaryq/SummaryQmlViewStep.h @@ -0,0 +1,49 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2020, Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef SUMMARYQMLVIEWSTEP_H +#define SUMMARYQMLVIEWSTEP_H + +#include "Config.h" + +#include "DllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/QmlViewStep.h" + +class PLUGINDLLEXPORT SummaryQmlViewStep : public Calamares::QmlViewStep +{ + Q_OBJECT + +public: + explicit SummaryQmlViewStep( QObject* parent = nullptr ); + virtual ~SummaryQmlViewStep() override; + + QString prettyName() const override; + + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + Calamares::JobList jobs() const override; + + void onActivate() override; + + QObject* getConfig() override { return m_config; } + +private: + Config* m_config; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryQmlViewStepFactory ) + +#endif // SUMMARYQMLVIEWSTEP_H diff --git a/src/modules/summaryq/img/keyboard.svg b/src/modules/summaryq/img/keyboard.svg new file mode 100644 index 000000000..6227b788b --- /dev/null +++ b/src/modules/summaryq/img/keyboard.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/summaryq/img/keyboard.svg.license b/src/modules/summaryq/img/keyboard.svg.license new file mode 100644 index 000000000..e59dc6f9c --- /dev/null +++ b/src/modules/summaryq/img/keyboard.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2021 KDE Visual Design Group +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/summaryq/img/lokalize.svg b/src/modules/summaryq/img/lokalize.svg new file mode 100644 index 000000000..83a7c9dcf --- /dev/null +++ b/src/modules/summaryq/img/lokalize.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/summaryq/img/lokalize.svg.license b/src/modules/summaryq/img/lokalize.svg.license new file mode 100644 index 000000000..e59dc6f9c --- /dev/null +++ b/src/modules/summaryq/img/lokalize.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2021 KDE Visual Design Group +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/summaryq/summaryq.qml b/src/modules/summaryq/summaryq.qml new file mode 100644 index 000000000..626a42c40 --- /dev/null +++ b/src/modules/summaryq/summaryq.qml @@ -0,0 +1,112 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.15 +import QtQuick.Controls 2.13 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.3 + +Kirigami.ScrollablePage { + width: 860 //parent.width //860 + height: 640 //parent.height //640 + + Kirigami.Theme.backgroundColor: "#EFF0F1" + Kirigami.Theme.textColor: "#1F1F1F" + + header: Kirigami.Heading { + Layout.fillWidth: true + height: 100 + horizontalAlignment: Qt.AlignHCenter + color: Kirigami.Theme.textColor + font.weight: Font.Medium + font.pointSize: 12 + text: config.message + + } + + RowLayout { + width: parent.width + + Component { + id: _delegate + + Rectangle { + id: rect + border.color: "#BDC3C7" + width: parent.width - 80 + implicitHeight: message.implicitHeight + title.implicitHeight + 20 + anchors.horizontalCenter: parent.horizontalCenter + + Item { + width: parent.width - 80 + implicitHeight: message.implicitHeight + title.implicitHeight + 20 + + Kirigami.FormLayout { + + GridLayout { + anchors { + //left: parent.left + top: parent.top + right: parent.right + } + rowSpacing: Kirigami.Units.largeSpacing + columnSpacing: Kirigami.Units.largeSpacing + columns: width > Kirigami.Units.gridUnit * 20 ? 4 : 2 + + Image { + id: image + Layout.maximumHeight: Kirigami.Units.iconSizes.huge + Layout.preferredWidth: height + Layout.alignment: Qt.AlignTop + fillMode: Image.PreserveAspectFit + source: index === 0 ? "img/lokalize.svg" + : ( index === 1 ? "img/keyboard.svg" + : ( index === 2 ? "qrc:/data/images/partition-manual.svg" + : "qrc:/data/images/partition-partition.svg" ) ) + } + ColumnLayout { + + Label { + id: title + Layout.fillWidth: true + wrapMode: Text.WordWrap + text: model.title + font.weight: Font.Medium + font.pointSize: 16 + } + Rectangle { + height: 2 + width: 200 + border.color: "#BDC3C7" + } + Label { + id: message + Layout.fillWidth: true + text: model.message + } + } + } + } + } + } + } + } + + ListView { + anchors.fill: parent + spacing: 20 + model: config.summaryModel + delegate: _delegate + } +} diff --git a/src/modules/summaryq/summaryq.qrc b/src/modules/summaryq/summaryq.qrc new file mode 100644 index 000000000..62bfe7899 --- /dev/null +++ b/src/modules/summaryq/summaryq.qrc @@ -0,0 +1,7 @@ + + + summaryq.qml + img/keyboard.svg + img/lokalize.svg + + diff --git a/src/modules/testmodule.py b/src/modules/testmodule.py deleted file mode 100755 index 633d57d9f..000000000 --- a/src/modules/testmodule.py +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# === This file is part of Calamares - === -# -# Copyright 2014, Teo Mrnjavac -# Copyright 2017, Adriaan de Groot -# -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . -""" -Testing tool to run a single Python module; optionally a global configuration -and module configuration can be read from YAML files. -""" -argumentepilog = """ -moduledir may be a module name (e.g. "welcome") or a full path to the - module (e.g. "src/modules/welcome"). In the former case, an attempt - is made to find the module in several sensible places. -globalstorage_yaml may be given as a full path to a YAML file containing - the global configuration, or as "" or "-" which will leave the - global storage empty. -configuration_yaml may be given as a full path to a YAML file with the - module configuration, as "" or "-" to leave the configuration - empty, or as "+" to load the standard configuration from the - module-directory (e.g. welcome.conf if the welcome module is given). - -The simplest invocation to test a module, with its default configuration, is -to call this program as follows (for, e.g., the welcome module): - - testmodule.py welcome - +""" - -import argparse -import os -import sys - -import yaml - -calamaresimporterror = ("Can not import libcalamares. Ensure the PYTHONPATH " - "environment variable includes the dir where libcalamares.so is " - "installed.") -try: - import libcalamares -except ImportError: - print(calamaresimporterror) - print() - libcalamares = None - - -class Job: - """ - - :param working_path: - :param doc: - :param cfg_doc: - """ - - def __init__(self, working_path, doc, cfg_doc): - self.module_name = doc["name"] - self.pretty_name = "Testing job " + doc["name"] - self.working_path = working_path - self.configuration = cfg_doc - - def setprogress(self, progress): - """ - - :param progress: - """ - print("Job set progress to {}%.".format(progress * 100)) - - -def test_module(moduledir, globalconfigfilename, moduleconfigfilename, lang): - print("Testing module in: " + moduledir) - - confpath = os.path.join(moduledir, "module.desc") - with open(confpath) as f: - doc = yaml.load(f) - - if doc["type"] != "job" or doc["interface"] != "python": - print("Only Python jobs can be tested.") - return 1 - - # Parameter None creates a new, empty GlobalStorage - libcalamares.globalstorage = libcalamares.GlobalStorage(None) - libcalamares.globalstorage.insert("testing", True) - if lang: - libcalamares.globalstorage.insert("locale", lang) - libcalamares.globalstorage.insert("localeConf", {"LANG": lang}) - - # if a file for simulating globalStorage contents is provided, load it - if globalconfigfilename: - with open(globalconfigfilename) as f: - gs_doc = yaml.load(f) - for key, value in gs_doc.items(): - libcalamares.globalstorage.insert(key, value) - print("Global configuration '" + globalconfigfilename + "' loaded.") - else: - print("No global configuration loaded.") - - cfg_doc = dict() - if moduleconfigfilename: - with open(moduleconfigfilename) as f: - cfg_doc = yaml.load(f) - print("Local configuration '" + moduleconfigfilename + "' loaded.") - else: - print("No module configuration loaded.") - - libcalamares.job = Job(moduledir, doc, cfg_doc) - - scriptpath = os.path.abspath(moduledir) - sys.path.append(scriptpath) - import main # Assumed to import main from module itself - - print("Output from module:") - print(main.run()) - - return 0 - - -def munge_filename(filename, module=None): - """ - Maps files "" (empty) and "-" (just a dash) to None, - to simplify processing elsewhere. - """ - if not filename or filename == "-": - return None - if filename == "+" and module is not None: - d, name = os.path.split(module) - if d and not name: - # Ended in a / - d, name = os.path.split(module) - if name: - return os.path.join(module, name + ".conf") - - return filename - - -def find_module(modulename): - if "/" in modulename: - return modulename - else: - for prefix in ("src/modules", "build/src/modules", "../src/modules"): - mp = os.path.join( prefix, modulename ) - if os.path.exists( mp ): - return mp - # Not found? Bail out elsewhere - return modulename - -def main(): - parser = argparse.ArgumentParser(description=globals()["__doc__"], epilog=argumentepilog, formatter_class=argparse.RawDescriptionHelpFormatter) - parser.add_argument("moduledir", - help="Dir containing the Python module.") - parser.add_argument("globalstorage_yaml", nargs="?", - help="A yaml file to initialize GlobalStorage.") - parser.add_argument("configuration_yaml", nargs="?", - help="A yaml file to initialize the Job.") - parser.add_argument("--lang", "-l", nargs="?", default=None, - help="Set translation language.") - args = parser.parse_args() - - # If we get here, it wasn't a --help invocation, so complain - # if libcalamares wasn't found. - if not libcalamares: - parser.error(calamaresimporterror) - - moduledir = find_module(args.moduledir) - return test_module(moduledir, - munge_filename(args.globalstorage_yaml), - munge_filename(args.configuration_yaml, moduledir), - args.lang) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/src/modules/testpythonrun.sh b/src/modules/testpythonrun.sh deleted file mode 100644 index be2b7800b..000000000 --- a/src/modules/testpythonrun.sh +++ /dev/null @@ -1,55 +0,0 @@ -#! /bin/sh - -### Command-line validation -# -# -SRCDIR=$( dirname "$0" ) -test -d "$SRCDIR" || { echo "! Can't find source directory." ; exit 1 ; } - -MODULE="$1" -test -n "$MODULE" || { echo "! Usage: $0 " ; exit 1 ; } - -### Run-time validation -# -# .. switch SRCDIR to the module that has been found -BINDIR="$SRCDIR" # Keep original SRCDIR -SRCDIR="$SRCDIR/$MODULE" -XSRCDIR="src/modules/$MODULE" # In builddir -TESTDIR="$SRCDIR/tests" - -test -x "$BINDIR/testmodule.py" || { echo "! No support script $BINDIR/testmodule.py" ; exit 1 ; } -test -d "$SRCDIR" || { echo "! Source $SRCDIR is not a directory." ; exit 1 ; } -test -f "$TESTDIR/1.global" || { echo "! Source $SRCDIR has no tests." ; exit 1 ; } - -test -f "libcalamares.so" || { echo "! Run the tests from the build-directory." ; exit 1 ; } -test -d "$XSRCDIR" || { echo "! No module directory $XSRCDIR in build-dir." ; exit 1 ; } - -### Python setup -# -# -export PYTHONPATH=".:$PYTHONPATH" -PYTHON=$( which python3 2> /dev/null ) -if test -z "$PYTHON" ; then - PYTHON=$( which python 2> /dev/null ) -fi -test -x "$PYTHON" || { echo "! No suitable Python executable found." ; exit 1 ; } - -### Test-execution -# -# -C=0 -while true ; do - # Might use shell arithmetic, but need other shebang then - C=$( expr "$C" + 1 ) - - G_CFG="$TESTDIR/$C.global" - J_CFG="$TESTDIR/$C.job" - - test -f "$G_CFG" || break - if test -f "$J_CFG" ; then - $PYTHON "$BINDIR/testmodule.py" "$XSRCDIR" "$G_CFG" "$J_CFG" - else - $PYTHON "$BINDIR/testmodule.py" "$XSRCDIR" "$G_CFG" - fi -done - diff --git a/src/modules/tracking/CMakeLists.txt b/src/modules/tracking/CMakeLists.txt index 24e020af4..a878961b0 100644 --- a/src/modules/tracking/CMakeLists.txt +++ b/src/modules/tracking/CMakeLists.txt @@ -1,7 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# calamares_add_plugin( tracking TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES + Config.cpp TrackingJobs.cpp TrackingPage.cpp TrackingViewStep.cpp @@ -9,8 +15,12 @@ calamares_add_plugin( tracking page_trackingstep.ui RESOURCES page_trackingstep.qrc - LINK_PRIVATE_LIBRARIES - calamaresui SHARED_LIB ) +calamares_add_test( + trackingtest + SOURCES + Tests.cpp + Config.cpp +) diff --git a/src/modules/tracking/Config.cpp b/src/modules/tracking/Config.cpp new file mode 100644 index 000000000..0d9778c6a --- /dev/null +++ b/src/modules/tracking/Config.cpp @@ -0,0 +1,253 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "TrackingType.h" + +#include "utils/Logger.h" +#include "utils/Variant.h" + +#include + +const NamedEnumTable< TrackingType >& +trackingNames() +{ + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< TrackingType > names { + { QStringLiteral( "none" ), TrackingType::NoTracking }, + { QStringLiteral( "install" ), TrackingType::InstallTracking }, + { QStringLiteral( "machine" ), TrackingType::MachineTracking }, + { QStringLiteral( "user" ), TrackingType::UserTracking } + }; + // clang-format on + // *INDENT-ON* + + return names; +} + +TrackingStyleConfig::TrackingStyleConfig( QObject* parent ) + : QObject( parent ) +{ +} + +TrackingStyleConfig::~TrackingStyleConfig() {} + +void +TrackingStyleConfig::setTracking( bool enabled ) +{ + setTracking( enabled ? EnabledByUser : DisabledByUser ); +} + +void +TrackingStyleConfig::setTracking( TrackingStyleConfig::TrackingState state ) +{ + if ( m_state != TrackingState::DisabledByConfig ) + { + m_state = state; + } + emit trackingChanged(); +} + +void +TrackingStyleConfig::validate( QString& s, std::function< bool( const QString& ) >&& pred ) +{ + if ( !pred( s ) ) + { + if ( m_state != DisabledByConfig ) + { + cError() << "Configuration string" << s << "is not valid; disabling this tracking type."; + m_state = DisabledByConfig; + emit trackingChanged(); + } + s = QString(); + } +} + +void +TrackingStyleConfig::validateUrl( QString& urlString ) +{ + if ( !QUrl( urlString ).isValid() ) + { + if ( m_state != DisabledByConfig ) + { + cError() << "URL" << urlString << "is not valid; disabling tracking type" << objectName(); + m_state = DisabledByConfig; + emit trackingChanged(); + } + urlString = QString(); + } +} + + +void +TrackingStyleConfig::setConfigurationMap( const QVariantMap& config ) +{ + m_state = CalamaresUtils::getBool( config, "enabled", false ) ? DisabledByUser : DisabledByConfig; + m_policy = CalamaresUtils::getString( config, "policy" ); + validateUrl( m_policy ); + emit policyChanged( m_policy ); + emit trackingChanged(); +} + +InstallTrackingConfig::InstallTrackingConfig( QObject* parent ) + : TrackingStyleConfig( parent ) +{ + setObjectName( "InstallTrackingConfig" ); +} + +InstallTrackingConfig::~InstallTrackingConfig() {} + +void +InstallTrackingConfig::setConfigurationMap( const QVariantMap& configurationMap ) +{ + TrackingStyleConfig::setConfigurationMap( configurationMap ); + + m_installTrackingUrl = CalamaresUtils::getString( configurationMap, "url" ); + validateUrl( m_installTrackingUrl ); +} + +MachineTrackingConfig::MachineTrackingConfig( QObject* parent ) + : TrackingStyleConfig( parent ) +{ + setObjectName( "MachineTrackingConfig" ); +} + +MachineTrackingConfig::~MachineTrackingConfig() {} + +/** @brief Is @p s a valid machine-tracking style. */ +static bool +isValidMachineTrackingStyle( const QString& s ) +{ + static QStringList knownStyles { "updatemanager" }; + return knownStyles.contains( s ); +} + +void +MachineTrackingConfig::setConfigurationMap( const QVariantMap& configurationMap ) +{ + TrackingStyleConfig::setConfigurationMap( configurationMap ); + + m_machineTrackingStyle = CalamaresUtils::getString( configurationMap, "style" ); + validate( m_machineTrackingStyle, isValidMachineTrackingStyle ); +} + + +UserTrackingConfig::UserTrackingConfig( QObject* parent ) + : TrackingStyleConfig( parent ) +{ + setObjectName( "UserTrackingConfig" ); +} + +UserTrackingConfig::~UserTrackingConfig() {} + +static bool +isValidUserTrackingStyle( const QString& s ) +{ + static QStringList knownStyles { "kuserfeedback" }; + return knownStyles.contains( s ); +} + +void +UserTrackingConfig::setConfigurationMap( const QVariantMap& configurationMap ) +{ + TrackingStyleConfig::setConfigurationMap( configurationMap ); + + m_userTrackingStyle = CalamaresUtils::getString( configurationMap, "style" ); + validate( m_userTrackingStyle, isValidUserTrackingStyle ); + + m_userTrackingAreas = CalamaresUtils::getStringList( configurationMap, "areas" ); +} + + +Config::Config( QObject* parent ) + : QObject( parent ) + , m_installTracking( new InstallTrackingConfig( this ) ) + , m_machineTracking( new MachineTrackingConfig( this ) ) + , m_userTracking( new UserTrackingConfig( this ) ) +{ +} + +static void +enableLevelsBelow( Config* config, TrackingType level ) +{ + switch ( level ) + { + case TrackingType::UserTracking: + config->userTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser ); + [[fallthrough]]; + case TrackingType::MachineTracking: + config->machineTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser ); + [[fallthrough]]; + case TrackingType::InstallTracking: + config->installTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser ); + break; + case TrackingType::NoTracking: + config->noTracking( true ); + break; + } +} + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_generalPolicy = CalamaresUtils::getString( configurationMap, "policy" ); + + if ( !QUrl( m_generalPolicy ).isValid() ) + { + m_generalPolicy = QString(); + } + emit generalPolicyChanged( m_generalPolicy ); + + bool success = false; + auto subconfig = CalamaresUtils::getSubMap( configurationMap, "install", success ); + if ( success ) + { + m_installTracking->setConfigurationMap( subconfig ); + } + + subconfig = CalamaresUtils::getSubMap( configurationMap, "machine", success ); + if ( success ) + { + m_machineTracking->setConfigurationMap( subconfig ); + } + + subconfig = CalamaresUtils::getSubMap( configurationMap, "user", success ); + if ( success ) + { + m_userTracking->setConfigurationMap( subconfig ); + } + + auto level = trackingNames().find( CalamaresUtils::getString( configurationMap, "default" ), success ); + if ( !success ) + { + cWarning() << "Default tracking level unknown:" << CalamaresUtils::getString( configurationMap, "default" ); + level = TrackingType::NoTracking; + } + enableLevelsBelow( this, level ); +} + +QString +Config::generalPolicy() const +{ + return m_generalPolicy; +} + +void +Config::noTracking( bool switchOffAllTracking ) +{ + if ( !switchOffAllTracking ) + { + return; + } + m_installTracking->setTracking( TrackingStyleConfig::TrackingState::DisabledByUser ); + m_machineTracking->setTracking( TrackingStyleConfig::TrackingState::DisabledByUser ); + m_userTracking->setTracking( TrackingStyleConfig::TrackingState::DisabledByUser ); +} diff --git a/src/modules/tracking/Config.h b/src/modules/tracking/Config.h new file mode 100644 index 000000000..c91d430f5 --- /dev/null +++ b/src/modules/tracking/Config.h @@ -0,0 +1,186 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef TRACKING_CONFIG_H +#define TRACKING_CONFIG_H + +#include +#include +#include + +/** @brief Base class for configuring a specific kind of tracking. + * + * All tracking types have a policy URL, which is used to explain what + * kind of tracking is involved, what data is sent, etc. The content + * of that URL is the responsibility of the distro. + * + * A tracking type is disabled by default: if it isn't specifically + * enabled (for configuration) in the config file, it will always be disabled. + * If it is enabled (for configuration) in the config file, it still + * defaults to disabled, but the user can choose to enable it. + */ +class TrackingStyleConfig : public QObject +{ + Q_OBJECT + + Q_PROPERTY( TrackingState trackingStatus READ tracking WRITE setTracking NOTIFY trackingChanged FINAL ) + Q_PROPERTY( bool isEnabled READ isEnabled NOTIFY trackingChanged FINAL ) + Q_PROPERTY( bool isConfigurable READ isConfigurable NOTIFY trackingChanged FINAL ) + Q_PROPERTY( QString policy READ policy NOTIFY policyChanged FINAL ) + +public: + TrackingStyleConfig( QObject* parent ); + ~TrackingStyleConfig() override; + + void setConfigurationMap( const QVariantMap& ); + + enum TrackingState + { + DisabledByConfig, + DisabledByUser, + EnabledByUser + }; + Q_ENUM( TrackingState ) + +public Q_SLOTS: + TrackingState tracking() const { return m_state; } + /// @brief Has the user specifically enabled this kind of tracking? + bool isEnabled() const { return m_state == EnabledByUser; } + /// @brief Is this tracking enabled for configuration? + bool isConfigurable() const { return m_state != DisabledByConfig; } + /** @brief Sets the tracking state + * + * Unless the tracking is enabled for configuration, it always + * remains disabled. + */ + void setTracking( TrackingState ); + /** @brief Sets the tracking state + * + * Use @c true for @c EnabledByUser, @c false for DisabledByUser, + * but keep in mind that if the tracking is not enabled for + * configuration, it will always remain disabled. + */ + void setTracking( bool ); + + /// @brief URL for the policy explaining this tracking + QString policy() const { return m_policy; } + +signals: + void trackingChanged(); + void policyChanged( QString ); + +protected: + /// @brief Validates the @p urlString, disables tracking if invalid + void validateUrl( QString& urlString ); + /// @brief Validates the @p string, disables tracking if invalid + void validate( QString& s, std::function< bool( const QString& s ) >&& pred ); + +private: + TrackingState m_state = DisabledByConfig; + QString m_policy; // URL +}; + +/** @brief Install tracking pings a URL at the end of installation + * + * Install tracking will do a single GET on the given URL at + * the end of installation. The information included in the GET + * request depends on the URL configuration, see also the tracking + * jobs. + */ +class InstallTrackingConfig : public TrackingStyleConfig +{ +public: + InstallTrackingConfig( QObject* parent ); + ~InstallTrackingConfig() override; + void setConfigurationMap( const QVariantMap& configurationMap ); + + QString installTrackingUrl() { return m_installTrackingUrl; } + +private: + QString m_installTrackingUrl; +}; + +/** @brief Machine tracking reports from the installed system + * + * When machine tracking is on, the installed system will report + * back ("call home") at some point. This can mean Debian pop-con, + * or updatemanager maching tracking, or something else. The kind + * of configuration depends on the style of tracking that is enabled. + */ +class MachineTrackingConfig : public TrackingStyleConfig +{ +public: + MachineTrackingConfig( QObject* parent ); + ~MachineTrackingConfig() override; + void setConfigurationMap( const QVariantMap& configurationMap ); + + QString machineTrackingStyle() { return m_machineTrackingStyle; } + +private: + QString m_machineTrackingStyle; +}; + +/** @brief User tracking reports user actions + * + * When user tracking is on, it is enabled for the user configured + * in Calamares -- not for users created afterwards in the target + * system, unless the target system defaults to tracking them. + * The kind of user tracking depends on the target system and + * environment; KDE user tracking is one example, which can be + * configured in a fine-grained way and defaults to off. + */ +class UserTrackingConfig : public TrackingStyleConfig +{ +public: + UserTrackingConfig( QObject* parent ); + ~UserTrackingConfig() override; + void setConfigurationMap( const QVariantMap& configurationMap ); + + QString userTrackingStyle() { return m_userTrackingStyle; } + QStringList userTrackingAreas() const { return m_userTrackingAreas; } + +private: + QString m_userTrackingStyle; + QStringList m_userTrackingAreas; // fine-grained areas +}; + +class Config : public QObject +{ + Q_OBJECT + Q_PROPERTY( QString generalPolicy READ generalPolicy NOTIFY generalPolicyChanged FINAL ) + Q_PROPERTY( TrackingStyleConfig* installTracking READ installTracking FINAL ) + Q_PROPERTY( TrackingStyleConfig* machineTracking READ machineTracking FINAL ) + Q_PROPERTY( TrackingStyleConfig* userTracking READ userTracking FINAL ) + +public: + Config( QObject* parent = nullptr ); + void setConfigurationMap( const QVariantMap& ); + +public Q_SLOTS: + QString generalPolicy() const; + + InstallTrackingConfig* installTracking() const { return m_installTracking; } + MachineTrackingConfig* machineTracking() const { return m_machineTracking; } + UserTrackingConfig* userTracking() const { return m_userTracking; } + + /// @brief Call with @c true to turn off all the trackings + void noTracking( bool ); + +signals: + void generalPolicyChanged( QString ); + +private: + QString m_generalPolicy; + + InstallTrackingConfig* m_installTracking; + MachineTrackingConfig* m_machineTracking; + UserTrackingConfig* m_userTracking; +}; + +#endif diff --git a/src/modules/tracking/Tests.cpp b/src/modules/tracking/Tests.cpp new file mode 100644 index 000000000..c3fe90ad1 --- /dev/null +++ b/src/modules/tracking/Tests.cpp @@ -0,0 +1,59 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "Config.h" + +#include "utils/Logger.h" + +#include +#include + +class TrackingTests : public QObject +{ + Q_OBJECT +public: + TrackingTests(); + ~TrackingTests() override; + +private Q_SLOTS: + void initTestCase(); + void testEmptyConfig(); +}; + +TrackingTests::TrackingTests() + : QObject() +{ +} + +TrackingTests::~TrackingTests() {} + +void +TrackingTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "Tracking test started."; +} + +void +TrackingTests::testEmptyConfig() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + + Config* c = new Config; + QVERIFY( c->generalPolicy().isEmpty() ); + QVERIFY( c->installTracking() ); // not-nullptr + + cDebug() << "Install" << Logger::Pointer( c->installTracking() ); + + delete c; // also deletes the owned tracking-configs +} + + +QTEST_GUILESS_MAIN( TrackingTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/tracking/TrackingJobs.cpp b/src/modules/tracking/TrackingJobs.cpp index f101c8e6c..7430bd57b 100644 --- a/src/modules/tracking/TrackingJobs.cpp +++ b/src/modules/tracking/TrackingJobs.cpp @@ -1,57 +1,110 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TrackingJobs.h" +#include "Config.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" #include "network/Manager.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" -#include -#include +#include + +#include #include + +// Namespace keeps all the actual jobs anonymous, the +// public API is the addJob() functions below the namespace. +namespace +{ + +/** @brief Install-tracking job (gets a URL) + * + * The install-tracking job (there is only one kind) does a GET + * on a configured URL with some additional information about + * the machine (if configured into the URL). + * + * No persistent tracking is done. + */ +class TrackingInstallJob : public Calamares::Job +{ +public: + TrackingInstallJob( const QString& url ); + ~TrackingInstallJob() override; + + QString prettyName() const override; + QString prettyStatusMessage() const override; + Calamares::JobResult exec() override; + +private: + const QString m_url; +}; + +/** @brief Tracking machines, update-manager style + * + * The machine has a machine-id, and this is sed(1)'ed into the + * update-manager configuration, to report the machine-id back + * to distro servers. + */ +class TrackingMachineUpdateManagerJob : public Calamares::Job +{ +public: + ~TrackingMachineUpdateManagerJob() override; + + QString prettyName() const override; + QString prettyStatusMessage() const override; + Calamares::JobResult exec() override; +}; + +/** @brief Turn on KUserFeedback in target system + * + * This writes suitable files for turning on KUserFeedback for the + * normal user configured in Calamares. The feedback can be reconfigured + * by the user through Plasma's user-feedback dialog. + */ +class TrackingKUserFeedbackJob : public Calamares::Job +{ +public: + TrackingKUserFeedbackJob( const QString& username, const QStringList& areas ); + ~TrackingKUserFeedbackJob() override; + + QString prettyName() const override; + QString prettyStatusMessage() const override; + Calamares::JobResult exec() override; + +private: + QString m_username; + QStringList m_areas; +}; + TrackingInstallJob::TrackingInstallJob( const QString& url ) : m_url( url ) { } -TrackingInstallJob::~TrackingInstallJob() -{ -} +TrackingInstallJob::~TrackingInstallJob() {} QString TrackingInstallJob::prettyName() const { - return tr( "Installation feedback" ); -} - -QString -TrackingInstallJob::prettyDescription() const -{ - return prettyName(); + return QCoreApplication::translate( "TrackingInstallJob", "Installation feedback" ); } QString TrackingInstallJob::prettyStatusMessage() const { - return tr( "Sending installation feedback." ); + return QCoreApplication::translate( "TrackingInstallJob", "Sending installation feedback." ); } Calamares::JobResult @@ -68,44 +121,39 @@ TrackingInstallJob::exec() if ( result.status == RequestStatus::Timeout ) { cWarning() << "install-tracking request timed out."; - return Calamares::JobResult::error( tr( "Internal error in install-tracking." ), - tr( "HTTP request timed out." ) ); + return Calamares::JobResult::error( + QCoreApplication::translate( "TrackingInstallJob", "Internal error in install-tracking." ), + QCoreApplication::translate( "TrackingInstallJob", "HTTP request timed out." ) ); } return Calamares::JobResult::ok(); } +TrackingMachineUpdateManagerJob::~TrackingMachineUpdateManagerJob() {} + QString -TrackingMachineNeonJob::prettyName() const +TrackingMachineUpdateManagerJob::prettyName() const { - return tr( "Machine feedback" ); + return QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Machine feedback" ); } QString -TrackingMachineNeonJob::prettyDescription() const +TrackingMachineUpdateManagerJob::prettyStatusMessage() const { - return prettyName(); -} - -QString -TrackingMachineNeonJob::prettyStatusMessage() const -{ - return tr( "Configuring machine feedback." ); + return QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Configuring machine feedback." ); } Calamares::JobResult -TrackingMachineNeonJob::exec() +TrackingMachineUpdateManagerJob::exec() { static const auto script = QStringLiteral( - R"x( -MACHINE_ID=`cat /etc/machine-id` -sed -i "s,URI =.*,URI = http://releases.neon.kde.org/meta-release/${MACHINE_ID}," /etc/update-manager/meta-release -sed -i "s,URI_LTS =.*,URI_LTS = http://releases.neon.kde.org/meta-release-lts/${MACHINE_ID}," /etc/update-manager/meta-release -true -)x" ); - int r = CalamaresUtils::System::instance()->targetEnvCall( "/bin/sh", + "sed -i '/^URI/s,${MACHINE_ID},'`cat /etc/machine-id`',' /etc/update-manager/meta-release || true" ); + + auto res = CalamaresUtils::System::instance()->runCommand( CalamaresUtils::System::RunLocation::RunInTarget, + QStringList { QStringLiteral( "/bin/sh" ) }, QString(), // Working dir - script, + script, // standard input std::chrono::seconds( 1 ) ); + int r = res.first; if ( r == 0 ) { @@ -114,13 +162,141 @@ true else if ( r > 0 ) { return Calamares::JobResult::error( - tr( "Error in machine feedback configuration." ), - tr( "Could not configure machine feedback correctly, script error %1." ).arg( r ) ); + QCoreApplication::translate( "TrackingMachineUpdateManagerJob", + "Error in machine feedback configuration." ), + QCoreApplication::translate( "TrackingMachineUpdateManagerJob", + "Could not configure machine feedback correctly, script error %1." ) + .arg( r ) ); } else { return Calamares::JobResult::error( - tr( "Error in machine feedback configuration." ), - tr( "Could not configure machine feedback correctly, Calamares error %1." ).arg( r ) ); + QCoreApplication::translate( "TrackingMachineUpdateManagerJob", + "Error in machine feedback configuration." ), + QCoreApplication::translate( "TrackingMachineUpdateManagerJob", + "Could not configure machine feedback correctly, Calamares error %1." ) + .arg( r ) ); + } +} + +TrackingKUserFeedbackJob::TrackingKUserFeedbackJob( const QString& username, const QStringList& areas ) + : m_username( username ) + , m_areas( areas ) +{ +} + +TrackingKUserFeedbackJob::~TrackingKUserFeedbackJob() {} + +QString +TrackingKUserFeedbackJob::prettyName() const +{ + return QCoreApplication::translate( "TrackingKUserFeedbackJob", "KDE user feedback" ); +} + +QString +TrackingKUserFeedbackJob::prettyStatusMessage() const +{ + return QCoreApplication::translate( "TrackingKUserFeedbackJob", "Configuring KDE user feedback." ); +} + +Calamares::JobResult +TrackingKUserFeedbackJob::exec() +{ + // This is the contents of a config file to turn on some kind + // of KUserFeedback tracking; the level (16) is chosen for minimal + // but not zero tracking. + static const char config[] = R"x([Global] +FeedbackLevel=16 +)x"; + + for ( const QString& area : m_areas ) + { + QString path = QStringLiteral( "/home/%1/.config/%2" ).arg( m_username, area ); + cDebug() << "Configuring KUserFeedback" << path; + + int r = CalamaresUtils::System::instance()->createTargetFile( path, config ); + if ( r > 0 ) + { + return Calamares::JobResult::error( + QCoreApplication::translate( "TrackingKUserFeedbackJob", "Error in KDE user feedback configuration." ), + QCoreApplication::translate( "TrackingKUserFeedbackJob", + "Could not configure KDE user feedback correctly, script error %1." ) + .arg( r ) ); + } + else if ( r < 0 ) + { + return Calamares::JobResult::error( + QCoreApplication::translate( "TrackingKUserFeedbackJob", "Error in KDE user feedback configuration." ), + QCoreApplication::translate( "TrackingKUserFeedbackJob", + "Could not configure KDE user feedback correctly, Calamares error %1." ) + .arg( r ) ); + } + } + + return Calamares::JobResult::ok(); +} + +} // namespace + +void +addJob( Calamares::JobList& list, InstallTrackingConfig* config ) +{ + if ( config->isEnabled() ) + { + const auto* s = CalamaresUtils::System::instance(); + QHash< QString, QString > map { std::initializer_list< std::pair< QString, QString > > { + { QStringLiteral( "CPU" ), s->getCpuDescription() }, + { QStringLiteral( "MEMORY" ), QString::number( s->getTotalMemoryB().first ) }, + { QStringLiteral( "DISK" ), QString::number( s->getTotalDiskB() ) } } }; + QString installUrl = KMacroExpander::expandMacros( config->installTrackingUrl(), map ); + + cDebug() << Logger::SubEntry << "install-tracking URL" << installUrl; + + list.append( Calamares::job_ptr( new TrackingInstallJob( installUrl ) ) ); + } +} + +void +addJob( Calamares::JobList& list, MachineTrackingConfig* config ) +{ + if ( config->isEnabled() ) + { + const auto style = config->machineTrackingStyle(); + if ( style == "updatemanager" ) + { + list.append( Calamares::job_ptr( new TrackingMachineUpdateManagerJob() ) ); + } + else + { + cWarning() << "Unsupported machine tracking style" << style; + } + } +} + + +void +addJob( Calamares::JobList& list, UserTrackingConfig* config ) +{ + if ( config->isEnabled() ) + { + const auto* gs = Calamares::JobQueue::instance()->globalStorage(); + static const auto key = QStringLiteral( "username" ); + QString username = ( gs && gs->contains( key ) ) ? gs->value( key ).toString() : QString(); + + if ( username.isEmpty() ) + { + cWarning() << "No username is set in GlobalStorage, skipping user-tracking."; + return; + } + + const auto style = config->userTrackingStyle(); + if ( style == "kuserfeedback" ) + { + list.append( Calamares::job_ptr( new TrackingKUserFeedbackJob( username, config->userTrackingAreas() ) ) ); + } + else + { + cWarning() << "Unsupported user tracking style" << style; + } } } diff --git a/src/modules/tracking/TrackingJobs.h b/src/modules/tracking/TrackingJobs.h index 813355591..4a6e90c31 100644 --- a/src/modules/tracking/TrackingJobs.h +++ b/src/modules/tracking/TrackingJobs.h @@ -1,53 +1,37 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#ifndef TRACKINGJOBS -#define TRACKINGJOBS +#ifndef TRACKING_TRACKINGJOBS_H +#define TRACKING_TRACKINGJOBS_H #include "Job.h" -class QSemaphore; +class InstallTrackingConfig; +class MachineTrackingConfig; +class UserTrackingConfig; -class TrackingInstallJob : public Calamares::Job -{ - Q_OBJECT -public: - TrackingInstallJob( const QString& url ); - ~TrackingInstallJob() override; - - QString prettyName() const override; - QString prettyDescription() const override; - QString prettyStatusMessage() const override; - Calamares::JobResult exec() override; - -private: - const QString m_url; -}; - -class TrackingMachineNeonJob : public Calamares::Job -{ - Q_OBJECT -public: - QString prettyName() const override; - QString prettyDescription() const override; - QString prettyStatusMessage() const override; - Calamares::JobResult exec() override; -}; +/** @section Tracking Jobs + * + * The tracking jobs do the actual work of configuring tracking on the + * target machine. Tracking jobs may have *styles*, variations depending + * on the distro or environment of the target system. At the root of + * each family of tracking jobs (installation, machine, user) there is + * free function `addJob()` that takes the configuration + * information from the relevant Config sub-object and optionally + * adds the right job (subclass!) to the list of jobs. + * + * There are no job-classes defined here because you need to be using the + * `addJob()` interface instead. + */ +void addJob( Calamares::JobList& list, InstallTrackingConfig* config ); +void addJob( Calamares::JobList& list, MachineTrackingConfig* config ); +void addJob( Calamares::JobList& list, UserTrackingConfig* config ); #endif diff --git a/src/modules/tracking/TrackingPage.cpp b/src/modules/tracking/TrackingPage.cpp index 82ee6b01d..a5fb3ccc6 100644 --- a/src/modules/tracking/TrackingPage.cpp +++ b/src/modules/tracking/TrackingPage.cpp @@ -1,23 +1,15 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TrackingPage.h" +#include "Config.h" #include "ui_page_trackingstep.h" #include "Branding.h" @@ -28,179 +20,137 @@ #include "utils/Logger.h" #include "utils/Retranslator.h" -#include #include #include -TrackingPage::TrackingPage( QWidget* parent ) +TrackingPage::TrackingPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::TrackingPage ) { - using StringEntry = Calamares::Branding::StringEntry; - ui->setupUi( this ); - CALAMARES_RETRANSLATE( - ui->retranslateUi( this ); ui->generalExplanation->setText( - tr( "Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with " - "the last two options below), get continuous information about preferred applications. To see what " - "will be sent, please click the help icon next to each area." ) - .arg( *StringEntry::ShortProductName ) ); - ui->installExplanation->setText( - tr( "By selecting this you will send information about your installation and hardware. This information " - "will only be sent once after the installation finishes." ) ); - ui->machineExplanation->setText( tr( "By selecting this you will periodically send information about " - "your installation, hardware and applications, to %1." ) - .arg( *StringEntry::ShortProductName ) ); - ui->userExplanation->setText( tr( "By selecting this you will regularly send information about your " - "installation, hardware, applications and usage patterns, to %1." ) - .arg( *StringEntry::ShortProductName ) ); ) + CALAMARES_RETRANSLATE_SLOT( &TrackingPage::retranslate ); - QButtonGroup* group = new QButtonGroup( this ); - group->setExclusive( true ); - group->addButton( ui->noneRadio ); - group->addButton( ui->installRadio ); - group->addButton( ui->machineRadio ); - group->addButton( ui->userRadio ); - ui->noneRadio->setChecked( true ); + ui->noneCheckBox->setChecked( true ); + ui->noneCheckBox->setEnabled( false ); + connect( ui->noneCheckBox, &QCheckBox::stateChanged, this, &TrackingPage::buttonNoneChecked ); + + // Each "panel" of configuration has the same kind of setup, + // where the xButton and xCheckBox is connected to the xTracking + // configuration object; that takes macro-trickery, unfortunately. +#define trackingSetup( x ) \ + do \ + { \ + connect( ui->x##CheckBox, &QCheckBox::stateChanged, this, &TrackingPage::buttonChecked ); \ + connect( ui->x##CheckBox, \ + &QCheckBox::stateChanged, \ + config->x##Tracking(), \ + QOverload< bool >::of( &TrackingStyleConfig::setTracking ) ); \ + connect( config->x##Tracking(), \ + &TrackingStyleConfig::trackingChanged, \ + this, \ + [ this, config ]() \ + { this->trackerChanged( config->x##Tracking(), this->ui->x##Group, this->ui->x##CheckBox ); } ); \ + connect( ui->x##PolicyButton, \ + &QAbstractButton::clicked, \ + config, \ + [ config ] \ + { \ + QString url( config->x##Tracking()->policy() ); \ + if ( !url.isEmpty() ) \ + { \ + QDesktopServices::openUrl( url ); \ + } \ + } ); \ + } while ( false ) + + trackingSetup( install ); + trackingSetup( machine ); + trackingSetup( user ); + +#undef trackingSetup + + connect( config, + &Config::generalPolicyChanged, + [ this ]( const QString& url ) { this->ui->generalPolicyLabel->setVisible( !url.isEmpty() ); } ); + connect( ui->generalPolicyLabel, + &QLabel::linkActivated, + [ config ] + { + QString url( config->generalPolicy() ); + if ( !url.isEmpty() ) + { + QDesktopServices::openUrl( url ); + } + } ); + + retranslate(); } void -TrackingPage::enableTrackingOption( TrackingType t, bool enabled ) +TrackingPage::retranslate() { - QWidget* group = nullptr; - - switch ( t ) - { - case TrackingType::InstallTracking: - group = ui->installGroup; - break; - case TrackingType::MachineTracking: - group = ui->machineGroup; - break; - case TrackingType::UserTracking: - group = ui->userGroup; - break; - } - - if ( group != nullptr ) - { - if ( enabled ) - { - group->show(); - } - else - { - group->hide(); - } - } - else - { - cWarning() << "unknown tracking option" << int( t ); - } + QString product = Calamares::Branding::instance()->shortProductName(); + ui->retranslateUi( this ); + ui->generalExplanation->setText( + tr( "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." ) + .arg( product ) ); + ui->installExplanation->setText( + tr( "By selecting this you will send information about your installation and hardware. This information " + "will only be sent once after the installation finishes." ) ); + ui->machineExplanation->setText( + tr( "By selecting this you will periodically send information about your machine installation, " + "hardware and applications, to %1." ) + .arg( product ) ); + ui->userExplanation->setText( + tr( "By selecting this you will regularly send information about your " + "user installation, hardware, applications and application usage patterns, to %1." ) + .arg( product ) ); } bool -TrackingPage::getTrackingOption( TrackingType t ) +TrackingPage::anyOtherChecked() const { - bool enabled = false; + return ui->installCheckBox->isChecked() || ui->machineCheckBox->isChecked() || ui->userCheckBox->isChecked(); +} - // A tracking type is enabled if it is checked, or - // any higher level is checked. -#define ch( x ) ui->x->isChecked() - switch ( t ) + +void +TrackingPage::buttonNoneChecked( int state ) +{ + if ( state ) { - case TrackingType::InstallTracking: - enabled = ch( installRadio ) || ch( machineRadio ) || ch( userRadio ); - break; - case TrackingType::MachineTracking: - enabled = ch( machineRadio ) || ch( userRadio ); - break; - case TrackingType::UserTracking: - enabled = ch( userRadio ); - break; + cDebug() << "Unchecking all other buttons because 'None' was checked"; + ui->installCheckBox->setChecked( false ); + ui->machineCheckBox->setChecked( false ); + ui->userCheckBox->setChecked( false ); + ui->noneCheckBox->setEnabled( false ); } -#undef ch - return enabled; } void -TrackingPage::setTrackingPolicy( TrackingType t, QString url ) +TrackingPage::buttonChecked( int state ) { - QToolButton* button = nullptr; - switch ( t ) + if ( state ) { - case TrackingType::InstallTracking: - button = ui->installPolicyButton; - break; - case TrackingType::MachineTracking: - button = ui->machinePolicyButton; - break; - case TrackingType::UserTracking: - button = ui->userPolicyButton; - break; + // Can't have none checked, if another one is + ui->noneCheckBox->setEnabled( true ); + ui->noneCheckBox->setChecked( false ); } - - if ( button != nullptr ) - if ( url.isEmpty() ) + else + { + if ( !anyOtherChecked() ) { - button->hide(); + ui->noneCheckBox->setChecked( true ); + ui->noneCheckBox->setEnabled( false ); } - else - { - connect( button, &QToolButton::clicked, [url] { QDesktopServices::openUrl( url ); } ); - cDebug() << "Tracking policy" << int( t ) << "set to" << url; - } - else - { - cWarning() << "unknown tracking option" << int( t ); } } void -TrackingPage::setGeneralPolicy( QString url ) +TrackingPage::trackerChanged( TrackingStyleConfig* config, QWidget* panel, QCheckBox* check ) { - if ( url.isEmpty() ) - { - ui->generalPolicyLabel->hide(); - } - else - { - ui->generalPolicyLabel->show(); - ui->generalPolicyLabel->setTextInteractionFlags( Qt::TextBrowserInteraction ); - ui->generalPolicyLabel->show(); - connect( ui->generalPolicyLabel, &QLabel::linkActivated, [url] { QDesktopServices::openUrl( url ); } ); - } -} - -void -TrackingPage::setTrackingLevel( const QString& l ) -{ - QString level = l.toLower(); - QRadioButton* button = nullptr; - - if ( level.isEmpty() || level == "none" ) - { - button = ui->noneRadio; - } - else if ( level == "install" ) - { - button = ui->installRadio; - } - else if ( level == "machine" ) - { - button = ui->machineRadio; - } - else if ( level == "user" ) - { - button = ui->userRadio; - } - - if ( button != nullptr ) - { - button->setChecked( true ); - } - else - { - cWarning() << "unknown default tracking level" << l; - } + panel->setVisible( config->isConfigurable() ); + check->setChecked( config->isEnabled() ); } diff --git a/src/modules/tracking/TrackingPage.h b/src/modules/tracking/TrackingPage.h index 560115b92..eb843b755 100644 --- a/src/modules/tracking/TrackingPage.h +++ b/src/modules/tracking/TrackingPage.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKINGPAGE_H @@ -21,6 +12,7 @@ #include "TrackingType.h" +#include #include #include @@ -29,35 +21,48 @@ namespace Ui class TrackingPage; } +class Config; +class TrackingStyleConfig; + class TrackingPage : public QWidget { Q_OBJECT public: - explicit TrackingPage( QWidget* parent = nullptr ); + explicit TrackingPage( Config* config, QWidget* parent = nullptr ); - /** - * Enables or disables the tracking-option block for the given - * tracking option @p t, and sets the initial state of the - * checkbox to the @p user default. + /** @brief is any of the enable-tracking buttons checked? * - * Call this in ascending order of tracking type. + * Returns true if any one or more of install, machine or user + * tracking is enabled. */ - void enableTrackingOption( TrackingType t, bool enabled ); - /** - * Returns whether tracking type @p is selected by the user - * (i.e. is the radio button for that level, or for a higher - * tracking level, enabled). - */ - bool getTrackingOption( TrackingType t ); + bool anyOtherChecked() const; - /* URL for given level @p t */ - void setTrackingPolicy( TrackingType t, QString url ); - /* URL for the global link */ - void setGeneralPolicy( QString url ); - /* Select one of the four levels by name */ - void setTrackingLevel( const QString& level ); +public Q_SLOTS: + void retranslate(); + + /** @brief When the *no tracking* checkbox is changed + * + * @p state will be non-zero when the box is checked; this + * **unchecks** all the other boxes. + */ + void buttonNoneChecked( int state ); + + /** @brief Some other checkbox changed + * + * This may check the *none* button if all the others are + * now unchecked. + */ + void buttonChecked( int state ); private: + /** @brief Apply the tracking configuration to the UI + * + * If the config cannot be changed (disabled in config) then + * hide the UI parts on the @p panel; otherwise show it + * and set @p check state to whether the user has enabled it. + */ + void trackerChanged( TrackingStyleConfig* subconfig, QWidget* panel, QCheckBox* check ); + Ui::TrackingPage* ui; }; diff --git a/src/modules/tracking/TrackingType.h b/src/modules/tracking/TrackingType.h index 02dbd934e..81af34688 100644 --- a/src/modules/tracking/TrackingType.h +++ b/src/modules/tracking/TrackingType.h @@ -1,29 +1,26 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKINGTYPE_H #define TRACKINGTYPE_H +#include "utils/NamedEnum.h" + enum class TrackingType { - InstallTracking, - MachineTracking, - UserTracking + NoTracking, // Do not enable tracking at all + InstallTracking, // Track that *this* install has happened + MachineTracking, // Track the machine, ongoing + UserTracking // Track the user, ongoing }; +// Implemented in Config.cpp +const NamedEnumTable< TrackingType >& trackingNames(); + #endif //TRACKINGTYPE_H diff --git a/src/modules/tracking/TrackingViewStep.cpp b/src/modules/tracking/TrackingViewStep.cpp index a51864ea9..7955846c3 100644 --- a/src/modules/tracking/TrackingViewStep.cpp +++ b/src/modules/tracking/TrackingViewStep.cpp @@ -1,23 +1,15 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "TrackingViewStep.h" +#include "Config.h" #include "TrackingJobs.h" #include "TrackingPage.h" @@ -33,17 +25,10 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( TrackingViewStepFactory, registerPlugin< TrackingViewStep >(); ) -/** @brief Is @p s a valid machine-tracking style. */ -static bool -isValidStyle( const QString& s ) -{ - static QStringList knownStyles { "neon" }; - return knownStyles.contains( s ); -} - TrackingViewStep::TrackingViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_widget( new TrackingPage ) + , m_config( new Config( this ) ) + , m_widget( new TrackingPage( m_config ) ) { emit nextStatusChanged( false ); } @@ -103,89 +88,28 @@ TrackingViewStep::isAtEnd() const void TrackingViewStep::onLeave() { - m_installTracking.userEnabled = m_widget->getTrackingOption( TrackingType::InstallTracking ); - m_machineTracking.userEnabled = m_widget->getTrackingOption( TrackingType::MachineTracking ); - m_userTracking.userEnabled = m_widget->getTrackingOption( TrackingType::UserTracking ); - cDebug() << "Install tracking:" << m_installTracking.enabled(); - cDebug() << "Machine tracking:" << m_machineTracking.enabled(); - cDebug() << " User tracking:" << m_userTracking.enabled(); + cDebug() << "Install tracking:" << m_config->installTracking()->isEnabled(); + cDebug() << Logger::SubEntry << "Machine tracking:" << m_config->machineTracking()->isEnabled(); + cDebug() << Logger::SubEntry << " User tracking:" << m_config->userTracking()->isEnabled(); } Calamares::JobList TrackingViewStep::jobs() const { - Calamares::JobList l; - cDebug() << "Creating tracking jobs .."; - if ( m_installTracking.enabled() && !m_installTrackingUrl.isEmpty() ) - { - QString installUrl = m_installTrackingUrl; - const auto s = CalamaresUtils::System::instance(); - QString memory, disk; - memory.setNum( s->getTotalMemoryB().first ); - disk.setNum( s->getTotalDiskB() ); - - installUrl.replace( "$CPU", s->getCpuDescription() ).replace( "$MEMORY", memory ).replace( "$DISK", disk ); - - cDebug() << Logger::SubEntry << "install-tracking URL" << installUrl; - - l.append( Calamares::job_ptr( new TrackingInstallJob( installUrl ) ) ); - } - - if ( m_machineTracking.enabled() && !m_machineTrackingStyle.isEmpty() ) - { - Q_ASSERT( isValidStyle( m_machineTrackingStyle ) ); - if ( m_machineTrackingStyle == "neon" ) - { - l.append( Calamares::job_ptr( new TrackingMachineNeonJob() ) ); - } - } + Calamares::JobList l; + addJob( l, m_config->installTracking() ); + addJob( l, m_config->machineTracking() ); + addJob( l, m_config->userTracking() ); + cDebug() << Logger::SubEntry << l.count() << "jobs queued."; return l; } -QVariantMap -TrackingViewStep::setTrackingOption( const QVariantMap& configurationMap, const QString& key, TrackingType t ) -{ - bool settingEnabled = false; - - bool success = false; - auto config = CalamaresUtils::getSubMap( configurationMap, key, success ); - - if ( success ) - { - settingEnabled = CalamaresUtils::getBool( config, "enabled", false ); - } - - TrackingEnabled& trackingConfiguration = tracking( t ); - trackingConfiguration.settingEnabled = settingEnabled; - trackingConfiguration.userEnabled = false; - - m_widget->enableTrackingOption( t, settingEnabled ); - m_widget->setTrackingPolicy( t, CalamaresUtils::getString( config, "policy" ) ); - - return config; -} - void TrackingViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - QVariantMap config; - - config = setTrackingOption( configurationMap, "install", TrackingType::InstallTracking ); - m_installTrackingUrl = CalamaresUtils::getString( config, "url" ); - - config = setTrackingOption( configurationMap, "machine", TrackingType::MachineTracking ); - auto s = CalamaresUtils::getString( config, "style" ); - if ( isValidStyle( s ) ) - { - m_machineTrackingStyle = s; - } - - setTrackingOption( configurationMap, "user", TrackingType::UserTracking ); - - m_widget->setGeneralPolicy( CalamaresUtils::getString( configurationMap, "policy" ) ); - m_widget->setTrackingLevel( CalamaresUtils::getString( configurationMap, "default" ) ); + m_config->setConfigurationMap( configurationMap ); } diff --git a/src/modules/tracking/TrackingViewStep.h b/src/modules/tracking/TrackingViewStep.h index bb40d292a..0601dde57 100644 --- a/src/modules/tracking/TrackingViewStep.h +++ b/src/modules/tracking/TrackingViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef TRACKINGVIEWSTEP_H @@ -29,6 +20,7 @@ #include #include +class Config; class TrackingPage; class PLUGINDLLEXPORT TrackingViewStep : public Calamares::ViewStep @@ -37,7 +29,7 @@ class PLUGINDLLEXPORT TrackingViewStep : public Calamares::ViewStep public: explicit TrackingViewStep( QObject* parent = nullptr ); - virtual ~TrackingViewStep() override; + ~TrackingViewStep() override; QString prettyName() const override; @@ -56,42 +48,8 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: - QVariantMap setTrackingOption( const QVariantMap& configurationMap, const QString& key, TrackingType t ); - + Config* m_config; TrackingPage* m_widget; - QString m_installTrackingUrl; - QString m_machineTrackingStyle; - - struct TrackingEnabled - { - bool settingEnabled; // Enabled in config file - bool userEnabled; // User checked "yes" - - TrackingEnabled() - : settingEnabled( false ) - , userEnabled( false ) - { - } - - bool enabled() const { return settingEnabled && userEnabled; } - }; - TrackingEnabled m_installTracking, m_machineTracking, m_userTracking; - - inline TrackingEnabled& tracking( TrackingType t ) - { - if ( t == TrackingType::UserTracking ) - { - return m_userTracking; - } - else if ( t == TrackingType::MachineTracking ) - { - return m_machineTracking; - } - else - { - return m_installTracking; - } - } }; CALAMARES_PLUGIN_FACTORY_DECLARATION( TrackingViewStepFactory ) diff --git a/src/modules/tracking/level-install.svg.license b/src/modules/tracking/level-install.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/tracking/level-install.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/level-machine.svg.license b/src/modules/tracking/level-machine.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/tracking/level-machine.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/level-none.svg.license b/src/modules/tracking/level-none.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/tracking/level-none.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/level-user.svg.license b/src/modules/tracking/level-user.svg.license new file mode 100644 index 000000000..ef0e9d7cd --- /dev/null +++ b/src/modules/tracking/level-user.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Uri Herrera and others +SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/modules/tracking/page_trackingstep.ui b/src/modules/tracking/page_trackingstep.ui index ae2ed11b8..f66f159f7 100644 --- a/src/modules/tracking/page_trackingstep.ui +++ b/src/modules/tracking/page_trackingstep.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + TrackingPage @@ -32,7 +36,7 @@ margin-left: 2em; - + @@ -69,7 +73,7 @@ margin-left: 2em; - <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + <html><head/><body><p>Click here to send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> true @@ -83,7 +87,7 @@ margin-left: 2em; - + @@ -145,7 +149,7 @@ margin-left: 2em; - + @@ -207,7 +211,7 @@ margin-left: 2em; - + @@ -279,6 +283,9 @@ margin-left: 2em; false + + Qt::TextBrowserInteraction + diff --git a/src/modules/tracking/tracking.conf b/src/modules/tracking/tracking.conf index 46ba7fed6..6f726226d 100644 --- a/src/modules/tracking/tracking.conf +++ b/src/modules/tracking/tracking.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Settings for various kinds of tracking that Distributions can # enable. Distributions looking at tracking should be aware of # the privacy (and hence communications) impact of that tracking, @@ -28,14 +31,16 @@ # policy applies. # # Each area has a key *enabled*. If the area is enabled, it is shown to -# the user. This defaults to off, which means no tracking would be +# the user. This defaults to false, which means no tracking would be # configured or enabled by Calamares. # # Each area has a key *policy*, which is a Url to be opened when # the user clicks on the corresponding Help button for an explanation # of the details of that particular kind of tracking. If no policy -# is set, the help button is hidden. The example policy links -# go to Calamares' generic user manual. +# is set, that tracking style is disabled. The example policy links +# go to Calamares' generic user manual (which is a terrible idea +# for distro's: you have GDPR obligations under most of these tracking +# styles, so do your homework). # # Each area may have other configuration keys, depending on the # area and how it needs to be configured. @@ -48,13 +53,14 @@ --- # This is the global policy; it is displayed as a link on the page. # If blank or commented out, no link is displayed on the tracking -# page. It is recommended to either provide policy URLs for each -# area, *or* one general link, and not to mix them. +# page. You **must** provide policy links per-area as well. policy: "https://github.com/calamares/calamares/wiki/Use-Guide#installation-tracking" -# This is the default level to enable for tracking. If commented out, +# This is the default area to enable for tracking. If commented out, # empty, or otherwise invalid, "none" is used, so no tracking by default. -default: user +# Setting an area here also checks the areas before it (install, machine, +# then user) by default -- subject to those areas being enabled at all. +# default: user # The install area has one specific configuration key: # url: this URL (remember to include the protocol, and prefer https) @@ -72,17 +78,28 @@ default: user install: enabled: false policy: "https://github.com/calamares/calamares/wiki/Use-Guide#installation-tracking" - # url: "https://example.com/install.php?c=$CPU&m=$MEMORY" + url: "https://example.com/install.php?c=$CPU&m=$MEMORY" # The machine area has one specific configuration key: # style: This string specifies what kind of tracking configuration -# needs to be done. There is currently only one valid -# style, "neon", which edits two files in the installed -# system to enable system-tracking. +# needs to be done. See below for valid styles. +# +# Available styles: +# - *updatemanager* replaces the literal string "${MACHINE_ID}" with the contents of +# /etc/machine-id, in lines starting with "URI" in the file /etc/update-manager/meta-release machine: enabled: false - style: neon + style: updatemanager + policy: "https://github.com/calamares/calamares/wiki/Use-Guide#machine-tracking" -# The user area is not yet implemented, and has no specific configuration. +# The user area has one specific configuration key: +# style: This string specifies what kind of tracking configuration +# needs to be done. See below for valid styles. +# +# Available styles: +# - *kuserfeedback* sets up KUserFeedback tracking (applicable to the KDE +# Plasma Desktop) for each KUserFeedback area listed in *areas*. user: enabled: false + style: kuserfeedback + areas: [ PlasmaUserFeedback ] diff --git a/src/modules/umount/CMakeLists.txt b/src/modules/umount/CMakeLists.txt new file mode 100644 index 000000000..d72847007 --- /dev/null +++ b/src/modules/umount/CMakeLists.txt @@ -0,0 +1,19 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2021 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +calamares_add_plugin( umount + TYPE job + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + UmountJob.cpp + SHARED_LIB + EMERGENCY +) + +calamares_add_test( + umounttest + SOURCES + Tests.cpp +) diff --git a/src/modules/umount/Tests.cpp b/src/modules/umount/Tests.cpp new file mode 100644 index 000000000..dc0198619 --- /dev/null +++ b/src/modules/umount/Tests.cpp @@ -0,0 +1,52 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "UmountJob.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" + +#include +#include +#include + +// Internals of UmountJob.cpp + +// Actual tests +class UmountTests : public QObject +{ + Q_OBJECT +public: + UmountTests() {} + ~UmountTests() override {} + +private Q_SLOTS: + void initTestCase(); + void testTrue(); +}; + +void +UmountTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); +} + +void +UmountTests::testTrue() +{ + QVERIFY( true ); +} + +QTEST_GUILESS_MAIN( UmountTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/umount/UmountJob.cpp b/src/modules/umount/UmountJob.cpp new file mode 100644 index 000000000..99777d2d0 --- /dev/null +++ b/src/modules/umount/UmountJob.cpp @@ -0,0 +1,160 @@ +/* === This file is part of Calamares - === + * + * Tags from the Python version of this module: + * SPDX-FileCopyrightText: 2014 Aurélien Gâteau + * SPDX-FileCopyrightText: 2016 Anke Boersma + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * Tags for the C++ version of this module: + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "UmountJob.h" + +#include "partition/Mount.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" + +#include +#include +#include + +UmountJob::UmountJob( QObject* parent ) + : Calamares::CppJob( parent ) +{ +} + +UmountJob::~UmountJob() {} + +QString +UmountJob::prettyName() const +{ + return tr( "Unmount file systems." ); +} + +static Calamares::JobResult +unmountTargetMounts( const QString& rootMountPoint ) +{ + QDir targetMount( rootMountPoint ); + if ( !targetMount.exists() ) + { + return Calamares::JobResult::internalError( + QCoreApplication::translate( UmountJob::staticMetaObject.className(), "Could not unmount target system." ), + QCoreApplication::translate( UmountJob::staticMetaObject.className(), + "The target system is not mounted at '%1'." ) + .arg( rootMountPoint ), + Calamares::JobResult::GenericError ); + } + QString targetMountPath = targetMount.absolutePath(); + if ( !targetMountPath.endsWith( '/' ) ) + { + targetMountPath.append( '/' ); + } + + using MtabInfo = CalamaresUtils::Partition::MtabInfo; + auto targetMounts = MtabInfo::fromMtabFilteredByPrefix( targetMountPath ); + std::sort( targetMounts.begin(), targetMounts.end(), MtabInfo::mountPointOrder ); + + cDebug() << "Read" << targetMounts.count() << "entries from" << targetMountPath; + for ( const auto& m : qAsConst( targetMounts ) ) + { + // Returns the program's exit code, so 0 is success and non-0 + // (truthy) is a failure. + if ( CalamaresUtils::Partition::unmount( m.mountPoint, { "-lv" } ) ) + { + return Calamares::JobResult::error( + QCoreApplication::translate( UmountJob::staticMetaObject.className(), + "Could not unmount target system." ), + QCoreApplication::translate( UmountJob::staticMetaObject.className(), + "The device '%1' is mounted in the target system. It is mounted at '%2'. " + "The device could not be unmounted." ) + .arg( m.device, m.mountPoint ) ); + } + } + return Calamares::JobResult::ok(); +} + +static Calamares::JobResult +exportZFSPools( const QString& rootMountPoint ) +{ + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + QStringList poolNames; + { + // The pools are dictionaries / VariantMaps + auto zfs_pool_list = gs->value( "zfsPoolInfo" ).toList(); + for ( const auto& v : zfs_pool_list ) + { + auto m = v.toMap(); + QString poolName = m.value( "poolName" ).toString(); + if ( !poolName.isEmpty() ) + { + poolNames.append( poolName ); + } + } + poolNames.sort(); + } + + for ( const auto& poolName : poolNames ) + { + auto result = CalamaresUtils::System::runCommand( { "zpool", "export", poolName }, std::chrono::seconds( 30 ) ); + if ( result.getExitCode() ) + { + cWarning() << "Failed to export pool" << result.getOutput(); + } + } + // Exporting ZFS pools does not cause the install to fail + return Calamares::JobResult::ok(); +} + + +Calamares::JobResult +UmountJob::exec() +{ + const auto* sys = CalamaresUtils::System::instance(); + if ( !sys ) + { + return Calamares::JobResult::internalError( + "UMount", tr( "No target system available." ), Calamares::JobResult::InvalidConfiguration ); + } + + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + if ( !gs || gs->value( "rootMountPoint" ).toString().isEmpty() ) + { + return Calamares::JobResult::internalError( + "UMount", tr( "No rootMountPoint is set." ), Calamares::JobResult::InvalidConfiguration ); + } + + // Do the unmounting of target-system filesystems + { + auto r = unmountTargetMounts( gs->value( "rootMountPoint" ).toString() ); + if ( !r ) + { + return r; + } + } + // For ZFS systems, export the pools + { + auto r = exportZFSPools( gs->value( "rootMountPoint" ).toString() ); + if ( !r ) + { + return r; + } + } + + return Calamares::JobResult::ok(); +} + +void +UmountJob::setConfigurationMap( const QVariantMap& map ) +{ +} + +CALAMARES_PLUGIN_FACTORY_DEFINITION( UmountJobFactory, registerPlugin< UmountJob >(); ) diff --git a/src/modules/umount/UmountJob.h b/src/modules/umount/UmountJob.h new file mode 100644 index 000000000..6ca5428bc --- /dev/null +++ b/src/modules/umount/UmountJob.h @@ -0,0 +1,41 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef UMOUNTJOB_H +#define UMOUNTJOB_H + +#include "CppJob.h" +#include "DllMacro.h" +#include "utils/PluginFactory.h" + +#include +#include +#include + +/** @brief Write 'random' data: machine id, entropy, UUIDs + * + */ +class PLUGINDLLEXPORT UmountJob : public Calamares::CppJob +{ + Q_OBJECT + +public: + explicit UmountJob( QObject* parent = nullptr ); + ~UmountJob() override; + + QString prettyName() const override; + + Calamares::JobResult exec() override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( UmountJobFactory ) + +#endif // UMOUNTJOB_H diff --git a/src/modules/umount/main.py b/src/modules/umount/main.py deleted file mode 100644 index a337c481a..000000000 --- a/src/modules/umount/main.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# === This file is part of Calamares - === -# -# Copyright 2014, Aurélien Gâteau -# Copyright 2016, Anke Boersma -# Copyright 2018, Adriaan de Groot -# -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . - -import os -import subprocess -import shutil - -import libcalamares -from libcalamares.utils import gettext_path, gettext_languages - -import gettext -_translation = gettext.translation("calamares-python", - localedir=gettext_path(), - languages=gettext_languages(), - fallback=True) -_ = _translation.gettext -_n = _translation.ngettext - - -def pretty_name(): - return _( "Unmount file systems." ) - - -def list_mounts(root_mount_point): - """ List mount points. - - :param root_mount_point: - :return: - """ - lst = [] - - for line in open("/etc/mtab").readlines(): - device, mount_point, _ = line.split(" ", 2) - - if mount_point.startswith(root_mount_point): - lst.append((device, mount_point)) - - return lst - - -def run(): - """ Unmounts given mountpoints in decreasing order. - - :return: - """ - root_mount_point = libcalamares.globalstorage.value("rootMountPoint") - - if(libcalamares.job.configuration and - "srcLog" in libcalamares.job.configuration and - "destLog" in libcalamares.job.configuration): - log_source = libcalamares.job.configuration["srcLog"] - log_destination = libcalamares.job.configuration["destLog"] - # Relocate log_destination into target system - log_destination = '{!s}/{!s}'.format(root_mount_point, log_destination) - # Make sure source is a string - log_source = '{!s}'.format(log_source) - - # copy installation log before umount - if os.path.exists(log_source): - try: - shutil.copy2(log_source, log_destination) - except Exception as e: - libcalamares.utils.warning("Could not preserve file {!s}, " - "error {!s}".format(log_source, e)) - - if not root_mount_point: - return ("No mount point for root partition in globalstorage", - "globalstorage does not contain a \"rootMountPoint\" key, " - "doing nothing") - - if not os.path.exists(root_mount_point): - return ("Bad mount point for root partition in globalstorage", - "globalstorage[\"rootMountPoint\"] is \"{}\", which does not " - "exist, doing nothing".format(root_mount_point)) - - lst = list_mounts(root_mount_point) - # Sort the list by mount point in decreasing order. This way we can be sure - # we unmount deeper dirs first. - lst.sort(key=lambda x: x[1], reverse=True) - - for device, mount_point in lst: - subprocess.check_call(["umount", "-lv", mount_point]) - - os.rmdir(root_mount_point) - - return None diff --git a/src/modules/umount/module.desc b/src/modules/umount/module.desc deleted file mode 100644 index a1ead1228..000000000 --- a/src/modules/umount/module.desc +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: "job" -name: "umount" -interface: "python" -script: "main.py" diff --git a/src/modules/umount/umount.conf b/src/modules/umount/umount.conf index 22a2e7441..9fb922740 100644 --- a/src/modules/umount/umount.conf +++ b/src/modules/umount/umount.conf @@ -1,42 +1,14 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# ### Umount Module # # This module represents the last part of the installation, the unmounting -# of partitions used for the install. It is also the last place where it -# is possible to copy files to the target system, thus the best place to -# copy an installation log. +# of partitions used for the install. After this, there is no regular way +# to modify the target system anymore. # -# This module has two configuration keys: -# srcLog location in the live system where the log is -# destLog location in the target system to copy the log -# -# You can either use the default source path (which is -# `/root/.cache/calamares/session.log` ) to copy the regular log, -# or if you want to use the full output of `sudo calamares -d` you will need -# to redirect standard output, for instance in a launcher script or -# in the desktop file. -# -# Example launcher script: -# -# ``` -# #!/bin/sh -# sudo /usr/bin/calamares -d > installation.log -# ``` -# -# Example desktop line: -# -# ``` -# Exec=sudo /usr/bin/calamares -d > installation.log -# ``` -# -# If no source and destination are set, no copy is attempted. If the -# copy fails for some reason, a warning is printed but the installation -# does not fail. --- -# example when using the normal Calamares log: -srcLog: "/root/.cache/calamares/session.log" -destLog: "/var/log/Calamares.log" - -# example when using a log created by `sudo calamares -d`: -#srcLog: "/home/live/installation.log" -#destLog: "/var/log/installation.log" +# Setting emergency to true will make it so this module is still run +# when a prior module fails +emergency: false diff --git a/src/modules/umount/umount.schema.yaml b/src/modules/umount/umount.schema.yaml new file mode 100644 index 000000000..37771e5f6 --- /dev/null +++ b/src/modules/umount/umount.schema.yaml @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/umount +additionalProperties: false +type: object +properties: + emergency: { type: boolean } diff --git a/src/modules/unpackfs/main.py b/src/modules/unpackfs/main.py index ace289092..033073881 100644 --- a/src/modules/unpackfs/main.py +++ b/src/modules/unpackfs/main.py @@ -1,28 +1,19 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# === This file is part of Calamares - === +# === This file is part of Calamares - === # -# Copyright 2014, Teo Mrnjavac -# Copyright 2014, Daniel Hillenbrand -# Copyright 2014, Philip Müller -# Copyright 2017, Alf Gaida -# Copyright 2019, Kevin Kofler -# Copyright 2020, Adriaan de Groot -# Copyright 2020, Gabriel Craciunescu +# SPDX-FileCopyrightText: 2014 Teo Mrnjavac +# SPDX-FileCopyrightText: 2014 Daniel Hillenbrand +# SPDX-FileCopyrightText: 2014 Philip Müller +# SPDX-FileCopyrightText: 2017 Alf Gaida +# SPDX-FileCopyrightText: 2019 Kevin Kofler +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-FileCopyrightText: 2020 Gabriel Craciunescu +# SPDX-License-Identifier: GPL-3.0-or-later # -# Calamares is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Calamares is Free Software: see the License-Identifier above. # -# Calamares is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Calamares. If not, see . import os import re @@ -31,13 +22,12 @@ import subprocess import sys import tempfile -from libcalamares import * -from libcalamares.utils import mount +import libcalamares import gettext _ = gettext.translation("calamares-python", - localedir=utils.gettext_path(), - languages=utils.gettext_languages(), + localedir=libcalamares.utils.gettext_path(), + languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): @@ -57,8 +47,8 @@ class UnpackEntry: :param sourcefs: :param destination: """ - __slots__ = ['source', 'sourcefs', 'destination', 'copied', 'total', 'exclude', 'excludeFile', - 'mountPoint'] + __slots__ = ('source', 'sourcefs', 'destination', 'copied', 'total', 'exclude', 'excludeFile', + 'mountPoint', 'weight') def __init__(self, source, sourcefs, destination): """ @@ -80,6 +70,7 @@ class UnpackEntry: self.copied = 0 self.total = 0 self.mountPoint = None + self.weight = 1 def is_file(self): return self.sourcefs == "file" @@ -88,24 +79,24 @@ class UnpackEntry: """ Counts the number of files this entry has. """ - fslist = "" + # Need a name we can use like a global + class counter(object): + count = 0 + def cb_count(s): + counter.count += 1 if self.sourcefs == "squashfs": - fslist = subprocess.check_output( - ["unsquashfs", "-l", self.source] - ) + libcalamares.utils.host_env_process_output(["unsquashfs", "-l", self.source], cb_count) elif self.sourcefs == "ext4": - fslist = subprocess.check_output( - ["find", self.mountPoint, "-type", "f"] - ) + libcalamares.utils.host_env_process_output(["find", self.mountPoint, "-type", "f"], cb_count) elif self.is_file(): # Hasn't been mounted, copy directly; find handles both # files and directories. - fslist = subprocess.check_output(["find", self.source, "-type", "f"]) + libcalamares.utils.host_env_process_output(["find", self.source, "-type", "f"], cb_count) - self.total = len(fslist.splitlines()) + self.total = counter.count return self.total def do_mount(self, base): @@ -131,13 +122,14 @@ class UnpackEntry: return if os.path.isdir(self.source): - r = mount(self.source, imgmountdir, "", "--bind") + r = libcalamares.utils.mount(self.source, imgmountdir, "", "--bind") elif os.path.isfile(self.source): - r = mount(self.source, imgmountdir, self.sourcefs, "loop") + r = libcalamares.utils.mount(self.source, imgmountdir, self.sourcefs, "loop") else: # self.source is a device - r = mount(self.source, imgmountdir, self.sourcefs, "") + r = libcalamares.utils.mount(self.source, imgmountdir, self.sourcefs, "") if r != 0: + libcalamares.utils.debug("Failed to mount '{}' (fs={}) (target={})".format(self.source, self.sourcefs, imgmountdir)) raise subprocess.CalledProcessError(r, "mount") @@ -149,7 +141,7 @@ def global_excludes(): List excludes for rsync. """ lst = [] - extra_mounts = globalstorage.value("extraMounts") + extra_mounts = libcalamares.globalstorage.value("extraMounts") if extra_mounts is None: extra_mounts = [] @@ -171,12 +163,9 @@ def file_copy(source, entry, progress_cb): :param progress_cb: A callback function for progress reporting. Takes a number and a total-number. """ - dest = entry.destination + import time - # Environment used for executing rsync properly - # Setting locale to C (fix issue with tr_TR locale) - at_env = os.environ - at_env["LC_ALL"] = "C" + dest = entry.destination # `source` *must* end with '/' otherwise a directory named after the source # will be created in `dest`: ie if `source` is "/foo/bar" and `dest` is @@ -187,7 +176,7 @@ def file_copy(source, entry, progress_cb): num_files_total_local = 0 num_files_copied = 0 # Gets updated through rsync output - args = ['rsync', '-aHAXr'] + args = ['rsync', '-aHAXr', '--filter=-x trusted.overlay.*'] args.extend(global_excludes()) if entry.excludeFile: args.extend(["--exclude-from=" + entry.excludeFile]) @@ -195,18 +184,20 @@ def file_copy(source, entry, progress_cb): for f in entry.exclude: args.extend(["--exclude", f]) args.extend(['--progress', source, dest]) - process = subprocess.Popen( - args, env=at_env, - stdout=subprocess.PIPE, close_fds=ON_POSIX - ) - # last_num_files_copied trails num_files_copied, and whenever at least 100 more - # files have been copied, progress is reported and last_num_files_copied is updated. - last_num_files_copied = 0 - file_count_chunk = entry.total / 100 - if file_count_chunk < 100: - file_count_chunk = 100 - for line in iter(process.stdout.readline, b''): + # last_num_files_copied trails num_files_copied, and whenever at least 107 more + # files (file_count_chunk) have been copied, progress is reported and + # last_num_files_copied is updated. The chunk size isn't "tidy" + # so that all the digits of the progress-reported number change. + # + file_count_chunk = 107 + + class counter(object): + last_num_files_copied = 0 + last_timestamp_reported = time.time() + last_total_reported = 0 + + def output_cb(line): # rsync outputs progress in parentheses. Each line will have an # xfer and a chk item (either ir-chk or to-chk) as follows: # @@ -220,7 +211,7 @@ def file_copy(source, entry, progress_cb): # If you're copying directory with some links in it, the xfer# # might not be a reliable counter (for one increase of xfer, many # files may be created). - m = re.findall(r'xfr#(\d+), ..-chk=(\d+)/(\d+)', line.decode()) + m = re.findall(r'xfr#(\d+), ..-chk=(\d+)/(\d+)', line) if m: # we've got a percentage update @@ -229,13 +220,19 @@ def file_copy(source, entry, progress_cb): # adjusting the offset so that progressbar can be continuesly drawn num_files_copied = num_files_total_local - num_files_remaining - # Update about once every 1% of this entry - if num_files_copied - last_num_files_copied >= file_count_chunk: - last_num_files_copied = num_files_copied + now = time.time() + if (num_files_copied - counter.last_num_files_copied >= file_count_chunk) or (now - counter.last_timestamp_reported > 0.5): + counter.last_num_files_copied = num_files_copied + counter.last_timestamp_reported = now + counter.last_total_reported = num_files_total_local progress_cb(num_files_copied, num_files_total_local) - process.wait() - progress_cb(num_files_copied, num_files_total_local) # Push towards 100% + try: + returncode = libcalamares.utils.host_env_process_output(args, output_cb) + except subprocess.CalledProcessError as e: + returncode = e.returncode + + progress_cb(counter.last_num_files_copied, counter.last_total_reported) # Push towards 100% # Mark this entry as really done entry.copied = entry.total @@ -252,9 +249,9 @@ def file_copy(source, entry, progress_cb): # have to do. See also: # https://bugzilla.redhat.com/show_bug.cgi?id=868755#c50 # for the same issue in Anaconda, which uses a similar workaround. - if process.returncode != 0 and process.returncode != 23: - utils.warning("rsync failed with error code {}.".format(process.returncode)) - return _("rsync failed with error code {}.").format(process.returncode) + if returncode != 0 and returncode != 23: + libcalamares.utils.warning("rsync failed with error code {}.".format(returncode)) + return _("rsync failed with error code {}.").format(returncode) return None @@ -269,6 +266,7 @@ class UnpackOperation: def __init__(self, entries): self.entries = entries self.entry_for_source = dict((x.source, x) for x in self.entries) + self.total_weight = sum([e.weight for e in entries]) def report_progress(self): """ @@ -276,31 +274,30 @@ class UnpackOperation: """ progress = float(0) - done = 0 # Done and total apply to the entry now-unpacking - total = 0 - complete = 0 # This many are already finished + current_total = 0 + current_done = 0 # Files count in the current entry + complete_count = 0 + complete_weight = 0 # This much weight already finished for entry in self.entries: if entry.total == 0: # Total 0 hasn't counted yet continue if entry.total == entry.copied: - complete += 1 + complete_weight += entry.weight + complete_count += 1 else: # There is at most *one* entry in-progress - total = entry.total - done = entry.copied + current_total = entry.total + current_done = entry.copied + complete_weight += entry.weight * ( 1.0 * current_done ) / current_total break - if total > 0: - # Pretend that each entry represents an equal amount of work; - # the complete ones count as 100% of their own fraction - # (and have *not* been counted in total or done), while - # total/done represents the fraction of the current fraction. - progress = ( ( 1.0 * complete ) / len(self.entries) ) + ( ( 1.0 / len(self.entries) ) * ( 1.0 * done / total ) ) + if current_total > 0: + progress = ( 1.0 * complete_weight ) / self.total_weight global status - status = _("Unpacking image {}/{}, file {}/{}").format((complete+1),len(self.entries),done, total) - job.setprogress(progress) + status = _("Unpacking image {}/{}, file {}/{}").format((complete_count+1), len(self.entries), current_done, current_total) + libcalamares.job.setprogress(progress) def run(self): """ @@ -315,7 +312,7 @@ class UnpackOperation: complete = 0 for entry in self.entries: status = _("Starting to unpack {}").format(entry.source) - job.setprogress( ( 1.0 * complete ) / len(self.entries) ) + libcalamares.job.setprogress( ( 1.0 * complete ) / len(self.entries) ) entry.do_mount(source_mount_path) entry.do_count() # Fill in the entry.total @@ -388,23 +385,59 @@ def get_supported_filesystems(): return ["file"] + get_supported_filesystems_kernel() +def repair_root_permissions(root_mount_point): + """ + If the / of the system gets permission 777, change it down + to 755. Any other permission is left alone. This + works around standard behavior from squashfs where + permissions are (easily, accidentally) set to 777. + """ + existing_root_mode = os.stat(root_mount_point).st_mode & 0o777 + if existing_root_mode == 0o777: + try: + os.chmod(root_mount_point, 0o755) # Want / to be rwxr-xr-x + except OSError as e: + libcalamares.utils.warning("Could not set / to safe permissions: {}".format(e)) + # But ignore it + + +def extract_weight(entry): + """ + Given @p entry, a dict representing a single entry in + the *unpack* list, returns its weight (1, or whatever is + set if it is sensible). + """ + w = entry.get("weight", None) + if w: + try: + wi = int(w) + return wi if wi > 0 else 1 + except ValueError: + libcalamares.utils.warning("*weight* setting {!r} is not valid.".format(w)) + except TypeError: + libcalamares.utils.warning("*weight* setting {!r} must be number.".format(w)) + return 1 + + def run(): """ Unsquash filesystem. """ - root_mount_point = globalstorage.value("rootMountPoint") + root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if not root_mount_point: - utils.warning("No mount point for root partition") + libcalamares.utils.warning("No mount point for root partition") return (_("No mount point for root partition"), - _("globalstorage does not contain a \"rootMountPoint\" key, " - "doing nothing")) - + _("globalstorage does not contain a \"rootMountPoint\" key.")) if not os.path.exists(root_mount_point): - utils.warning("Bad root mount point \"{}\"".format(root_mount_point)) + libcalamares.utils.warning("Bad root mount point \"{}\"".format(root_mount_point)) return (_("Bad mount point for root partition"), - _("rootMountPoint is \"{}\", which does not " - "exist, doing nothing").format(root_mount_point)) + _("rootMountPoint is \"{}\", which does not exist.".format(root_mount_point))) + + if libcalamares.job.configuration.get("unpack", None) is None: + libcalamares.utils.warning("No *unpack* key in job configuration.") + return (_("Bad unpackfs configuration"), + _("There is no configuration information.")) supported_filesystems = get_supported_filesystems() @@ -412,41 +445,42 @@ def run(): # - unsupported filesystems # - non-existent sources # - missing tools for specific FS - for entry in job.configuration["unpack"]: + for entry in libcalamares.job.configuration["unpack"]: source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] if sourcefs not in supported_filesystems: - utils.warning("The filesystem for \"{}\" ({}) is not supported by your current kernel".format(source, sourcefs)) - utils.warning(" ... modprobe {} may solve the problem".format(sourcefs)) - return (_("Bad unsquash configuration"), + libcalamares.utils.warning("The filesystem for \"{}\" ({}) is not supported by your current kernel".format(source, sourcefs)) + libcalamares.utils.warning(" ... modprobe {} may solve the problem".format(sourcefs)) + return (_("Bad unpackfs configuration"), _("The filesystem for \"{}\" ({}) is not supported by your current kernel").format(source, sourcefs)) if not os.path.exists(source): - utils.warning("The source filesystem \"{}\" does not exist".format(source)) - return (_("Bad unsquash configuration"), + libcalamares.utils.warning("The source filesystem \"{}\" does not exist".format(source)) + return (_("Bad unpackfs configuration"), _("The source filesystem \"{}\" does not exist").format(source)) if sourcefs == "squashfs": if shutil.which("unsquashfs") is None: - utils.warning("Failed to find unsquashfs") + libcalamares.utils.warning("Failed to find unsquashfs") - return (_("Failed to unpack image \"{}\"").format(self.source), - _("Failed to find unsquashfs, make sure you have the squashfs-tools package installed")) + return (_("Bad unpackfs configuration"), + _("Failed to find unsquashfs, make sure you have the squashfs-tools package installed.") + + " " + _("Failed to unpack image \"{}\"").format(source)) unpack = list() is_first = True - for entry in job.configuration["unpack"]: + for entry in libcalamares.job.configuration["unpack"]: source = os.path.abspath(entry["source"]) sourcefs = entry["sourcefs"] destination = os.path.abspath(root_mount_point + entry["destination"]) if not os.path.isdir(destination) and sourcefs != "file": - utils.warning(("The destination \"{}\" in the target system is not a directory").format(destination)) + libcalamares.utils.warning(("The destination \"{}\" in the target system is not a directory").format(destination)) if is_first: - return (_("Bad unsquash configuration"), + return (_("Bad unpackfs configuration"), _("The destination \"{}\" in the target system is not a directory").format(destination)) else: - utils.debug(".. assuming that the previous targets will create that directory.") + libcalamares.utils.debug(".. assuming that the previous targets will create that directory.") unpack.append(UnpackEntry(source, sourcefs, destination)) # Optional settings @@ -454,9 +488,13 @@ def run(): unpack[-1].exclude = entry["exclude"] if entry.get("excludeFile", None): unpack[-1].excludeFile = entry["excludeFile"] + unpack[-1].weight = extract_weight(entry) is_first = False - unpackop = UnpackOperation(unpack) - - return unpackop.run() + repair_root_permissions(root_mount_point) + try: + unpackop = UnpackOperation(unpack) + return unpackop.run() + finally: + repair_root_permissions(root_mount_point) diff --git a/src/modules/unpackfs/module.desc b/src/modules/unpackfs/module.desc index 4b3086e44..2723c3c46 100644 --- a/src/modules/unpackfs/module.desc +++ b/src/modules/unpackfs/module.desc @@ -1,8 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # Syntax is YAML 1.2 --- type: "job" name: "unpackfs" interface: "python" script: "main.py" -requiredModules: - - mount +requiredModules: [ mount ] +weight: 12 diff --git a/src/modules/unpackfs/runtests.sh b/src/modules/unpackfs/runtests.sh index be175e0cd..2269b078a 100644 --- a/src/modules/unpackfs/runtests.sh +++ b/src/modules/unpackfs/runtests.sh @@ -1,4 +1,12 @@ #! /bin/sh +# +# SPDX-FileCopyrightText: 2019 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +# Test preparation for unpackfs; since there's a bunch +# of fiddly bits than need to be present for the tests, +# do that in a script rather than entirely in CTest. +# SRCDIR=$( dirname "$0" ) # For test 3 diff --git a/src/modules/unpackfs/tests/1.global b/src/modules/unpackfs/tests/1.global index 02ae840cb..7dedc1527 100644 --- a/src/modules/unpackfs/tests/1.global +++ b/src/modules/unpackfs/tests/1.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- bogus: true diff --git a/src/modules/unpackfs/tests/2.global b/src/modules/unpackfs/tests/2.global index f496ade61..d1e61caf3 100644 --- a/src/modules/unpackfs/tests/2.global +++ b/src/modules/unpackfs/tests/2.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ diff --git a/src/modules/unpackfs/tests/3.global b/src/modules/unpackfs/tests/3.global index 2e6b37ab5..1c25cbe20 100644 --- a/src/modules/unpackfs/tests/3.global +++ b/src/modules/unpackfs/tests/3.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/3.job b/src/modules/unpackfs/tests/3.job index 429f65b3c..82d353108 100644 --- a/src/modules/unpackfs/tests/3.job +++ b/src/modules/unpackfs/tests/3.job @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: [] diff --git a/src/modules/unpackfs/tests/4.global b/src/modules/unpackfs/tests/4.global index 2e6b37ab5..1c25cbe20 100644 --- a/src/modules/unpackfs/tests/4.global +++ b/src/modules/unpackfs/tests/4.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/4.job b/src/modules/unpackfs/tests/4.job index ab76dcbeb..8bc7de5ba 100644 --- a/src/modules/unpackfs/tests/4.job +++ b/src/modules/unpackfs/tests/4.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/5.global b/src/modules/unpackfs/tests/5.global index 2e6b37ab5..1c25cbe20 100644 --- a/src/modules/unpackfs/tests/5.global +++ b/src/modules/unpackfs/tests/5.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/5.job b/src/modules/unpackfs/tests/5.job index 2f8d732d0..268ee7ce3 100644 --- a/src/modules/unpackfs/tests/5.job +++ b/src/modules/unpackfs/tests/5.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: ./fakesource diff --git a/src/modules/unpackfs/tests/6.global b/src/modules/unpackfs/tests/6.global index 2e6b37ab5..1c25cbe20 100644 --- a/src/modules/unpackfs/tests/6.global +++ b/src/modules/unpackfs/tests/6.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/6.job b/src/modules/unpackfs/tests/6.job index c1110a106..1ec0840ca 100644 --- a/src/modules/unpackfs/tests/6.job +++ b/src/modules/unpackfs/tests/6.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/7.global b/src/modules/unpackfs/tests/7.global index 2e6b37ab5..1c25cbe20 100644 --- a/src/modules/unpackfs/tests/7.global +++ b/src/modules/unpackfs/tests/7.global @@ -1,2 +1,4 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/7.job b/src/modules/unpackfs/tests/7.job index a31068e5d..ffd898f1b 100644 --- a/src/modules/unpackfs/tests/7.job +++ b/src/modules/unpackfs/tests/7.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/8.global b/src/modules/unpackfs/tests/8.global index 0cb33ce55..15c308545 100644 --- a/src/modules/unpackfs/tests/8.global +++ b/src/modules/unpackfs/tests/8.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ localeConf: diff --git a/src/modules/unpackfs/tests/8.job b/src/modules/unpackfs/tests/8.job index a31068e5d..ffd898f1b 100644 --- a/src/modules/unpackfs/tests/8.job +++ b/src/modules/unpackfs/tests/8.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . diff --git a/src/modules/unpackfs/tests/9.global b/src/modules/unpackfs/tests/9.global index 82ca8f6f6..e7a2cd989 100644 --- a/src/modules/unpackfs/tests/9.global +++ b/src/modules/unpackfs/tests/9.global @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # This test uses a small destination FS, to make rsync fail --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ diff --git a/src/modules/unpackfs/tests/9.job b/src/modules/unpackfs/tests/9.job index 7eabd497c..b89633471 100644 --- a/src/modules/unpackfs/tests/9.job +++ b/src/modules/unpackfs/tests/9.job @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # This test uses a small destination FS, to make rsync fail --- unpack: diff --git a/src/modules/unpackfs/unpackfs.conf b/src/modules/unpackfs/unpackfs.conf index 454e82e66..d12110b60 100644 --- a/src/modules/unpackfs/unpackfs.conf +++ b/src/modules/unpackfs/unpackfs.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Unsquash / unpack a filesystem. Multiple sources are supported, and # they may be squashed or plain filesystems. # @@ -29,6 +32,12 @@ # - *excludeFile* is a single file that is passed to rsync as an # --exclude-file argument. This should be a full pathname # inside the **host** filesystem. +# - *weight* is useful when the entries take wildly different +# times to unpack (e.g. with a squashfs, and one single file) +# and the total weight of this module should be distributed +# differently between the entries. (This is only relevant when +# there is more than one entry; by default all the entries +# have the same weight, 1) # # EXAMPLES # @@ -82,8 +91,10 @@ unpack: - source: ../CHANGES sourcefs: file destination: "/tmp/changes.txt" + weight: 1 # Single file - source: src/qml/calamares/slideshow sourcefs: file destination: "/tmp/slideshow/" exclude: [ "*.qmlc", "qmldir" ] + weight: 5 # Lots of files # excludeFile: /etc/calamares/modules/unpackfs/exclude-list.txt diff --git a/src/modules/unpackfs/unpackfs.schema.yaml b/src/modules/unpackfs/unpackfs.schema.yaml new file mode 100644 index 000000000..0d96fe9cb --- /dev/null +++ b/src/modules/unpackfs/unpackfs.schema.yaml @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/unpackfs +additionalProperties: false +type: object +properties: + unpack: + type: array + items: + type: object + additionalProperties: false + properties: + source: { type: string } + sourcefs: { type: string } + 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 1d969a93b..8203ecf08 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -1,3 +1,8 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core DBus Network ) find_package( Crypt REQUIRED ) @@ -16,44 +21,97 @@ if( LibPWQuality_FOUND ) add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) endif() +find_package( ICU COMPONENTS uc i18n ) +set_package_properties( + ICU PROPERTIES + PURPOSE "Transliteration support for full name to username conversion" +) + +if( ICU_FOUND ) + list( APPEND USER_EXTRA_LIB ICU::uc ICU::i18n ) + include_directories( ${ICU_INCLUDE_DIRS} ) + add_definitions( -DHAVE_ICU ) +endif() + include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) +set( _users_src + # Jobs + CreateUserJob.cpp + MiscJobs.cpp + SetPasswordJob.cpp + SetHostNameJob.cpp + # Configuration + CheckPWQuality.cpp + Config.cpp +) + +calamares_add_library( + users_internal + EXPORT_MACRO PLUGINDLLEXPORT_PRO + TARGET_TYPE STATIC + NO_INSTALL + NO_VERSION + SOURCES + ${_users_src} + LINK_LIBRARIES + Qt5::DBus + ${CRYPT_LIBRARIES} +) + calamares_add_plugin( users TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - CreateUserJob.cpp - SetPasswordJob.cpp UsersViewStep.cpp UsersPage.cpp - SetHostNameJob.cpp - CheckPWQuality.cpp UI page_usersetup.ui RESOURCES users.qrc LINK_PRIVATE_LIBRARIES - calamaresui + users_internal ${CRYPT_LIBRARIES} ${USER_EXTRA_LIB} - Qt5::DBus SHARED_LIB ) calamares_add_test( userspasswordtest SOURCES - PasswordTests.cpp + TestPasswordJob.cpp SetPasswordJob.cpp LIBRARIES ${CRYPT_LIBRARIES} ) +calamares_add_test( + usersgroupstest + SOURCES + TestGroupInformation.cpp + ${_users_src} # Build again with test-visibility + LIBRARIES + Qt5::DBus # HostName job can use DBus to systemd + ${CRYPT_LIBRARIES} # SetPassword job uses crypt() + ${USER_EXTRA_LIB} +) + +calamares_add_test( + usershostnametest + SOURCES + TestSetHostNameJob.cpp + SetHostNameJob.cpp + LIBRARIES + Qt5::DBus # HostName job can use DBus to systemd +) + calamares_add_test( userstest SOURCES Tests.cpp - SetHostNameJob.cpp + ${_users_src} # Build again with test-visibility LIBRARIES - Qt5::DBus + Qt5::DBus # HostName job can use DBus to systemd + ${CRYPT_LIBRARIES} # SetPassword job uses crypt() + ${USER_EXTRA_LIB} ) diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index 39c1f79de..fc692d246 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -1,19 +1,14 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Contains strings from libpwquality under the terms of the + * GPL-3.0-or-later (libpwquality is BSD-3-clause or GPL-2.0-or-later, + * so we pick GPL-3.0-or-later). * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Calamares is Free Software: see the License-Identifier above. * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "CheckPWQuality.h" @@ -22,7 +17,6 @@ #include #include -#include #ifdef HAVE_LIBPWQUALITY #include @@ -55,7 +49,7 @@ DEFINE_CHECK_FUNC( minLength ) { cDebug() << Logger::SubEntry << "minLength set to" << minLength; checks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is too short" ); }, - [minLength]( const QString& s ) { return s.length() >= minLength; }, + [ minLength ]( const QString& s ) { return s.length() >= minLength; }, PasswordCheck::Weight( 10 ) ) ); } } @@ -71,7 +65,7 @@ DEFINE_CHECK_FUNC( maxLength ) { cDebug() << Logger::SubEntry << "maxLength set to" << maxLength; checks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is too long" ); }, - [maxLength]( const QString& s ) { return s.length() <= maxLength; }, + [ maxLength ]( const QString& s ) { return s.length() <= maxLength; }, PasswordCheck::Weight( 10 ) ) ); } } @@ -110,7 +104,6 @@ public: PWSettingsHolder() : m_settings( pwquality_default_settings() ) - , m_auxerror( nullptr ) { } @@ -119,27 +112,73 @@ public: /// Sets an option via the configuration string @p v, = style. int set( const QString& v ) { return pwquality_set_option( m_settings, v.toUtf8().constData() ); } - /// Checks the given password @p pwd against the current configuration + /** @brief Checks the given password @p pwd against the current configuration + * + * Resets m_errorString and m_errorCount and then sets them appropriately + * so that explanation() can be called afterwards. Sets m_rv as well. + */ + int check( const QString& pwd ) { void* auxerror = nullptr; - int r = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror ); - m_rv = r; - return r; + m_rv = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror ); + + // Positive return values could be ignored; some negative ones + // place extra information in auxerror, which is a void* and + // which needs interpretation to long- or string-values. + m_errorCount = 0; + m_errorString = QString(); + + switch ( m_rv ) + { + case PWQ_ERROR_CRACKLIB_CHECK: + if ( auxerror ) + { + /* Here the string comes from cracklib, don't free? */ + m_errorString = mungeString( auxerror ); + } + break; + case PWQ_ERROR_MEM_ALLOC: + case PWQ_ERROR_UNKNOWN_SETTING: + case PWQ_ERROR_INTEGER: + case PWQ_ERROR_NON_INT_SETTING: + case PWQ_ERROR_NON_STR_SETTING: + if ( auxerror ) + { + m_errorString = mungeString( auxerror ); + free( auxerror ); + } + break; + case PWQ_ERROR_MIN_DIGITS: + case PWQ_ERROR_MIN_UPPERS: + case PWQ_ERROR_MIN_LOWERS: + case PWQ_ERROR_MIN_OTHERS: + case PWQ_ERROR_MIN_LENGTH: + case PWQ_ERROR_MIN_CLASSES: + case PWQ_ERROR_MAX_CONSECUTIVE: + case PWQ_ERROR_MAX_CLASS_REPEAT: + case PWQ_ERROR_MAX_SEQUENCE: + if ( auxerror ) + { + m_errorCount = mungeLong( auxerror ); + } + break; + default: + break; + } + + return m_rv; } - bool hasExplanation() const { return m_rv < 0; } - - /* This is roughly the same as the function pwquality_strerror, + /** @brief Explain the results of the last call to check() + * + * This is roughly the same as the function pwquality_strerror, * only with QStrings instead, and using the Qt translation scheme. * It is used under the terms of the GNU GPL v3 or later, as * allowed by the libpwquality license (LICENSES/GPLv2+-libpwquality) */ QString explanation() { - void* auxerror = m_auxerror; - m_auxerror = nullptr; - if ( m_rv >= arbitrary_minimum_strength ) { return QString(); @@ -152,12 +191,10 @@ public: switch ( m_rv ) { case PWQ_ERROR_MEM_ALLOC: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" ) + .arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Memory allocation error" ); case PWQ_ERROR_SAME_PASSWORD: @@ -176,73 +213,75 @@ public: case PWQ_ERROR_BAD_WORDS: return QCoreApplication::translate( "PWQ", "The password contains forbidden words in some form" ); case PWQ_ERROR_MIN_DIGITS: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 digits" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n digits", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few digits" ); case PWQ_ERROR_MIN_UPPERS: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 uppercase letters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n uppercase letters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few uppercase letters" ); case PWQ_ERROR_MIN_LOWERS: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 lowercase letters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n lowercase letters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few lowercase letters" ); case PWQ_ERROR_MIN_OTHERS: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", - "The password contains less than %1 non-alphanumeric characters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n non-alphanumeric characters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few non-alphanumeric characters" ); case PWQ_ERROR_MIN_LENGTH: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", "The password is shorter than %1 characters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password is shorter than %n characters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password is too short" ); case PWQ_ERROR_ROTATED: - return QCoreApplication::translate( "PWQ", "The password is just rotated old one" ); + return QCoreApplication::translate( "PWQ", "The password is a rotated version of the previous one" ); case PWQ_ERROR_MIN_CLASSES: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 character classes" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n character classes", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password does not contain enough character classes" ); case PWQ_ERROR_MAX_CONSECUTIVE: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", - "The password contains more than %1 same characters consecutively" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains more than %n same characters consecutively", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too many same characters consecutively" ); case PWQ_ERROR_MAX_CLASS_REPEAT: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password contains more than %1 characters of the same class consecutively" ) - .arg( mungeLong( auxerror ) ); + "PWQ", + "The password contains more than %n characters of the same class consecutively", + nullptr, + m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too many characters of the same class consecutively" ); case PWQ_ERROR_MAX_SEQUENCE: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password contains monotonic sequence longer than %1 characters" ) - .arg( mungeLong( auxerror ) ); + "PWQ", + "The password contains monotonic sequence longer than %n characters", + nullptr, + m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too long of a monotonic character sequence" ); @@ -254,46 +293,34 @@ public: return QCoreApplication::translate( "PWQ", "Password generation failed - required entropy too low for settings" ); case PWQ_ERROR_CRACKLIB_CHECK: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - /* Here the string comes from cracklib, don't free? */ return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" ) - .arg( mungeString( auxerror ) ); + .arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "The password fails the dictionary check" ); case PWQ_ERROR_UNKNOWN_SETTING: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Unknown setting" ); case PWQ_ERROR_INTEGER: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Bad integer value" ); case PWQ_ERROR_NON_INT_SETTING: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Setting is not of integer type" ); case PWQ_ERROR_NON_STR_SETTING: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Setting is not of string type" ); case PWQ_ERROR_CFGFILE_OPEN: @@ -308,9 +335,11 @@ public: } private: - pwquality_settings_t* m_settings; - int m_rv; - void* m_auxerror; + QString m_errorString; ///< Textual error from last call to check() + int m_errorCount = 0; ///< Count (used in %n) error from last call to check() + int m_rv = 0; ///< Return value from libpwquality + + pwquality_settings_t* m_settings = nullptr; }; DEFINE_CHECK_FUNC( libpwquality ) @@ -349,12 +378,14 @@ DEFINE_CHECK_FUNC( libpwquality ) /* Something actually added? */ if ( requirement_count ) { - checks.push_back( PasswordCheck( [settings]() { return settings->explanation(); }, - [settings]( const QString& s ) { + checks.push_back( PasswordCheck( [ settings ]() { return settings->explanation(); }, + [ settings ]( const QString& s ) + { int r = settings->check( s ); if ( r < 0 ) { - cWarning() << "libpwquality error" << r; + cWarning() << "libpwquality error" << r + << pwquality_strerror( nullptr, 256, r, nullptr ); } else if ( r < settings->arbitrary_minimum_strength ) { diff --git a/src/modules/users/CheckPWQuality.h b/src/modules/users/CheckPWQuality.h index 1aeb34ba8..6d7fb56df 100644 --- a/src/modules/users/CheckPWQuality.h +++ b/src/modules/users/CheckPWQuality.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHECKPWQUALITY_H diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp new file mode 100644 index 000000000..c75e8a6e7 --- /dev/null +++ b/src/modules/users/Config.cpp @@ -0,0 +1,1038 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "CreateUserJob.h" +#include "MiscJobs.h" +#include "SetHostNameJob.h" +#include "SetPasswordJob.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/Logger.h" +#include "utils/String.h" +#include "utils/Variant.h" + +#include + +#include +#include +#include +#include +#include + +#ifdef HAVE_ICU +#include +#include + +//Needed for ICU to apply some transliteration ruleset. +//Still needs to be adjusted to fit the needs of the most of users +static const char TRANSLITERATOR_ID[] = "Russian-Latin/BGN;" + "Greek-Latin/UNGEGN;" + "Any-Latin;" + "Latin-ASCII"; +#endif + +#include + +static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); +static constexpr const int USERNAME_MAX_LENGTH = 31; + +static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); +static constexpr const int HOSTNAME_MIN_LENGTH = 2; +static constexpr const int HOSTNAME_MAX_LENGTH = 63; + +static void +updateGSAutoLogin( bool doAutoLogin, const QString& login ) +{ + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( !gs ) + { + cWarning() << "No Global Storage available"; + return; + } + + if ( doAutoLogin && !login.isEmpty() ) + { + gs->insert( "autoLoginUser", login ); + } + else + { + gs->remove( "autoLoginUser" ); + } + + if ( login.isEmpty() ) + { + gs->remove( "username" ); + } + else + { + gs->insert( "username", login ); + } +} + +static const QStringList& +alwaysForbiddenLoginNames() +{ + static QStringList s { QStringLiteral( "root" ), QStringLiteral( "nobody" ) }; + return s; +} + +static const QStringList& +alwaysForbiddenHostNames() +{ + static QStringList s { QStringLiteral( "localhost" ) }; + return s; +} + +const NamedEnumTable< HostNameAction >& +hostnameActionNames() +{ + // *INDENT-OFF* + // clang-format off + static const NamedEnumTable< HostNameAction > names { + { QStringLiteral( "none" ), HostNameAction::None }, + { QStringLiteral( "etcfile" ), HostNameAction::EtcHostname }, + { QStringLiteral( "etc" ), HostNameAction::EtcHostname }, + { QStringLiteral( "hostnamed" ), HostNameAction::SystemdHostname }, + { QStringLiteral( "transient" ), HostNameAction::Transient }, + }; + // clang-format on + // *INDENT-ON* + + return names; +} + +Config::Config( QObject* parent ) + : Calamares::ModuleSystem::Config( parent ) + , m_forbiddenHostNames( alwaysForbiddenHostNames() ) + , m_forbiddenLoginNames( alwaysForbiddenLoginNames() ) +{ + emit readyChanged( m_isReady ); // false + + // Gang together all the changes of status to one readyChanged() signal + connect( this, &Config::hostnameStatusChanged, this, &Config::checkReady ); + connect( this, &Config::loginNameStatusChanged, this, &Config::checkReady ); + connect( this, &Config::fullNameChanged, this, &Config::checkReady ); + connect( this, &Config::userPasswordStatusChanged, this, &Config::checkReady ); + connect( this, &Config::rootPasswordStatusChanged, this, &Config::checkReady ); + connect( this, &Config::reuseUserPasswordForRootChanged, this, &Config::checkReady ); + connect( this, &Config::requireStrongPasswordsChanged, this, &Config::checkReady ); +} + +Config::~Config() {} + +void +Config::setUserShell( const QString& shell ) +{ + if ( !shell.isEmpty() && !shell.startsWith( '/' ) ) + { + cWarning() << "User shell" << shell << "is not an absolute path."; + return; + } + if ( shell != m_userShell ) + { + m_userShell = shell; + emit userShellChanged( shell ); + // The shell is put into GS as well. + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs ) + { + gs->insert( "userShell", shell ); + } + } +} + +static inline void +insertInGlobalStorage( const QString& key, const QString& group ) +{ + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( !gs || group.isEmpty() ) + { + return; + } + gs->insert( key, group ); +} + +void +Config::setAutoLoginGroup( const QString& group ) +{ + if ( group != m_autoLoginGroup ) + { + m_autoLoginGroup = group; + insertInGlobalStorage( QStringLiteral( "autoLoginGroup" ), group ); + emit autoLoginGroupChanged( group ); + } +} + +QStringList +Config::groupsForThisUser() const +{ + QStringList l; + l.reserve( defaultGroups().size() + 1 ); + + for ( const auto& g : defaultGroups() ) + { + l << g.name(); + } + if ( doAutoLogin() && !autoLoginGroup().isEmpty() ) + { + l << autoLoginGroup(); + } + + return l; +} + +void +Config::setSudoersGroup( const QString& group ) +{ + if ( group != m_sudoersGroup ) + { + m_sudoersGroup = group; + insertInGlobalStorage( QStringLiteral( "sudoersGroup" ), group ); + emit sudoersGroupChanged( group ); + } +} + + +void +Config::setLoginName( const QString& login ) +{ + CONFIG_PREVENT_EDITING( QString, "loginName" ); + if ( login != m_loginName ) + { + m_customLoginName = !login.isEmpty(); + m_loginName = login; + updateGSAutoLogin( doAutoLogin(), login ); + emit loginNameChanged( login ); + emit loginNameStatusChanged( loginNameStatus() ); + } +} + +const QStringList& +Config::forbiddenLoginNames() const +{ + return m_forbiddenLoginNames; +} + +QString +Config::loginNameStatus() const +{ + // An empty login is "ok", even if it isn't really + if ( m_loginName.isEmpty() ) + { + return QString(); + } + + if ( m_loginName.length() > USERNAME_MAX_LENGTH ) + { + return tr( "Your username is too long." ); + } + + QRegExp validateFirstLetter( "^[a-z_]" ); + if ( validateFirstLetter.indexIn( m_loginName ) != 0 ) + { + return tr( "Your username must start with a lowercase letter or underscore." ); + } + if ( !USERNAME_RX.exactMatch( m_loginName ) ) + { + return tr( "Only lowercase letters, numbers, underscore and hyphen are allowed." ); + } + + // Although we've made the list lower-case, and the RE above forces lower-case, still pass the flag + if ( forbiddenLoginNames().contains( m_loginName, Qt::CaseInsensitive ) ) + { + return tr( "'%1' is not allowed as username." ).arg( m_loginName ); + } + + return QString(); +} + +void +Config::setHostName( const QString& host ) +{ + if ( hostnameAction() != HostNameAction::EtcHostname && hostnameAction() != HostNameAction::SystemdHostname ) + { + cDebug() << "Ignoring hostname" << host << "No hostname will be set."; + return; + } + if ( host != m_hostname ) + { + m_customHostName = !host.isEmpty(); + m_hostname = host; + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( host.isEmpty() ) + { + gs->remove( "hostname" ); + } + else + { + gs->insert( "hostname", host ); + } + emit hostnameChanged( host ); + emit hostnameStatusChanged( hostnameStatus() ); + } +} + +const QStringList& +Config::forbiddenHostNames() const +{ + return m_forbiddenHostNames; +} + +QString +Config::hostnameStatus() const +{ + // An empty hostname is "ok", even if it isn't really + if ( m_hostname.isEmpty() ) + { + return QString(); + } + + if ( m_hostname.length() < HOSTNAME_MIN_LENGTH ) + { + return tr( "Your hostname is too short." ); + } + if ( m_hostname.length() > HOSTNAME_MAX_LENGTH ) + { + return tr( "Your hostname is too long." ); + } + + // "LocalHost" is just as forbidden as "localhost" + if ( forbiddenHostNames().contains( m_hostname, Qt::CaseInsensitive ) ) + { + return tr( "'%1' is not allowed as hostname." ).arg( m_hostname ); + } + + if ( !HOSTNAME_RX.exactMatch( m_hostname ) ) + { + return tr( "Only letters, numbers, underscore and hyphen are allowed." ); + } + + return QString(); +} + +static QString +cleanupForHostname( const QString& s ) +{ + QRegExp dmirx( "[^a-zA-Z0-9]", Qt::CaseInsensitive ); + return s.toLower().replace( dmirx, " " ).remove( ' ' ); +} + +/** @brief Guess the machine's name + * + * If there is DMI data, use that; otherwise, just call the machine "-pc". + * Reads the DMI data just once. + */ +static QString +guessProductName() +{ + static bool tried = false; + static QString dmiProduct; + + if ( !tried ) + { + QFile dmiFile( QStringLiteral( "/sys/devices/virtual/dmi/id/product_name" ) ); + + if ( dmiFile.exists() && dmiFile.open( QIODevice::ReadOnly ) ) + { + dmiProduct = cleanupForHostname( QString::fromLocal8Bit( dmiFile.readAll().simplified().data() ) ); + } + if ( dmiProduct.isEmpty() ) + { + dmiProduct = QStringLiteral( "pc" ); + } + tried = true; + } + return dmiProduct; +} +#ifdef HAVE_ICU +static QString +transliterate( const QString& input ) +{ + static auto ue = UErrorCode::U_ZERO_ERROR; + static auto transliterator = std::unique_ptr< icu::Transliterator >( + icu::Transliterator::createInstance( TRANSLITERATOR_ID, UTRANS_FORWARD, ue ) ); + + if ( ue != UErrorCode::U_ZERO_ERROR ) + { + cWarning() << "Can't create transliterator"; + + //it'll be checked later for non-ASCII characters + return input; + } + + icu::UnicodeString transliterable( input.utf16() ); + transliterator->transliterate( transliterable ); + return QString::fromUtf16( transliterable.getTerminatedBuffer() ); +} +#else +static QString +transliterate( const QString& input ) +{ + return input; +} +#endif + +static QString +makeLoginNameSuggestion( const QStringList& parts ) +{ + if ( parts.isEmpty() || parts.first().isEmpty() ) + { + return QString(); + } + + QString usernameSuggestion = parts.first(); + for ( int i = 1; i < parts.length(); ++i ) + { + if ( !parts.value( i ).isEmpty() ) + { + usernameSuggestion.append( parts.value( i ).at( 0 ) ); + } + } + + return USERNAME_RX.indexIn( usernameSuggestion ) != -1 ? usernameSuggestion : QString(); +} + +/** @brief Return an invalid string for use in a hostname, if @p s is empty + * + * Maps empty to "^" (which is invalid in a hostname), everything else + * returns @p s itself. + */ +static QString +invalidEmpty( const QString& s ) +{ + return s.isEmpty() ? QStringLiteral( "^" ) : s; +} + +STATICTEST QString +makeHostnameSuggestion( const QString& templateString, const QStringList& fullNameParts, const QString& loginName ) +{ + QHash< QString, QString > replace; + // User data + replace.insert( QStringLiteral( "first" ), + invalidEmpty( fullNameParts.isEmpty() ? QString() : cleanupForHostname( fullNameParts.first() ) ) ); + replace.insert( QStringLiteral( "name" ), invalidEmpty( cleanupForHostname( fullNameParts.join( QString() ) ) ) ); + replace.insert( QStringLiteral( "login" ), invalidEmpty( cleanupForHostname( loginName ) ) ); + // Hardware data + replace.insert( QStringLiteral( "product" ), guessProductName() ); + replace.insert( QStringLiteral( "product2" ), cleanupForHostname( QSysInfo::prettyProductName() ) ); + replace.insert( QStringLiteral( "cpu" ), cleanupForHostname( QSysInfo::currentCpuArchitecture() ) ); + // Hostname data + replace.insert( QStringLiteral( "host" ), invalidEmpty( cleanupForHostname( QSysInfo::machineHostName() ) ) ); + + QString hostnameSuggestion = KMacroExpander::expandMacros( templateString, replace, '$' ); + + // RegExp for valid hostnames; if the suggestion produces a valid name, return it + static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); + return HOSTNAME_RX.indexIn( hostnameSuggestion ) != -1 ? hostnameSuggestion : QString(); +} + +void +Config::setFullName( const QString& name ) +{ + CONFIG_PREVENT_EDITING( QString, "fullName" ); + + if ( name.isEmpty() && !m_fullName.isEmpty() ) + { + if ( !m_customHostName ) + { + setHostName( name ); + } + if ( !m_customLoginName ) + { + setLoginName( name ); + } + m_fullName = name; + emit fullNameChanged( name ); + } + + if ( name != m_fullName ) + { + m_fullName = name; + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( name.isEmpty() ) + { + gs->remove( "fullname" ); + } + else + { + gs->insert( "fullname", name ); + } + emit fullNameChanged( name ); + + // Build login and hostname, if needed + static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); + + const QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) ) + .replace( QRegExp( "[-']" ), "" ) + .replace( rx, " " ) + .toLower() + .simplified(); + + + QStringList cleanParts = cleanName.split( ' ' ); + + if ( !m_customLoginName ) + { + const QString login = makeLoginNameSuggestion( cleanParts ); + if ( !login.isEmpty() && login != m_loginName ) + { + setLoginName( login ); + // It's **still** not custom, though setLoginName() sets that + m_customLoginName = false; + } + } + if ( !m_customHostName ) + { + const QString hostname = makeHostnameSuggestion( m_hostnameTemplate, cleanParts, loginName() ); + if ( !hostname.isEmpty() && hostname != m_hostname ) + { + setHostName( hostname ); + // Still not custom + m_customHostName = false; + } + } + } +} + +void +Config::setAutoLogin( bool b ) +{ + if ( b != m_doAutoLogin ) + { + m_doAutoLogin = b; + updateGSAutoLogin( b, loginName() ); + emit autoLoginChanged( b ); + } +} + +void +Config::setReuseUserPasswordForRoot( bool reuse ) +{ + if ( reuse != m_reuseUserPasswordForRoot ) + { + m_reuseUserPasswordForRoot = reuse; + emit reuseUserPasswordForRootChanged( reuse ); + { + auto rp = rootPasswordStatus(); + emit rootPasswordStatusChanged( rp.first, rp.second ); + } + } +} + +void +Config::setRequireStrongPasswords( bool strong ) +{ + if ( strong != m_requireStrongPasswords ) + { + m_requireStrongPasswords = strong; + emit requireStrongPasswordsChanged( strong ); + { + auto rp = rootPasswordStatus(); + emit rootPasswordStatusChanged( rp.first, rp.second ); + } + { + auto up = userPasswordStatus(); + emit userPasswordStatusChanged( up.first, up.second ); + } + } +} + +void +Config::setUserPassword( const QString& s ) +{ + if ( s != m_userPassword ) + { + m_userPassword = s; + const auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + emit userPasswordStatusChanged( p.first, p.second ); + emit userPasswordChanged( s ); + } +} + +void +Config::setUserPasswordSecondary( const QString& s ) +{ + if ( s != m_userPasswordSecondary ) + { + m_userPasswordSecondary = s; + const auto p = passwordStatus( m_userPassword, m_userPasswordSecondary ); + emit userPasswordStatusChanged( p.first, p.second ); + emit userPasswordSecondaryChanged( s ); + } +} + +/** @brief Checks two copies of the password for validity + * + * Given two copies of the password -- generally the password and + * the secondary fields -- checks them for validity and returns + * a pair of . + * + */ +Config::PasswordStatus +Config::passwordStatus( const QString& pw1, const QString& pw2 ) const +{ + if ( pw1 != pw2 ) + { + return qMakePair( PasswordValidity::Invalid, tr( "Your passwords do not match!" ) ); + } + + bool failureIsFatal = requireStrongPasswords(); + for ( const auto& pc : m_passwordChecks ) + { + QString message = pc.filter( pw1 ); + + if ( !message.isEmpty() ) + { + return qMakePair( failureIsFatal ? PasswordValidity::Invalid : PasswordValidity::Weak, message ); + } + } + + return qMakePair( PasswordValidity::Valid, tr( "OK!" ) ); +} + + +Config::PasswordStatus +Config::userPasswordStatus() const +{ + return passwordStatus( m_userPassword, m_userPasswordSecondary ); +} + +int +Config::userPasswordValidity() const +{ + auto p = userPasswordStatus(); + return p.first; +} + +QString +Config::userPasswordMessage() const +{ + auto p = userPasswordStatus(); + return p.second; +} + + +void +Config::setRootPassword( const QString& s ) +{ + if ( writeRootPassword() && s != m_rootPassword ) + { + m_rootPassword = s; + const auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + emit rootPasswordStatusChanged( p.first, p.second ); + emit rootPasswordChanged( s ); + } +} + +void +Config::setRootPasswordSecondary( const QString& s ) +{ + if ( writeRootPassword() && s != m_rootPasswordSecondary ) + { + m_rootPasswordSecondary = s; + const auto p = passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + emit rootPasswordStatusChanged( p.first, p.second ); + emit rootPasswordSecondaryChanged( s ); + } +} + +QString +Config::rootPassword() const +{ + if ( writeRootPassword() ) + { + if ( reuseUserPasswordForRoot() ) + { + return userPassword(); + } + return m_rootPassword; + } + return QString(); +} + +QString +Config::rootPasswordSecondary() const +{ + if ( writeRootPassword() ) + { + if ( reuseUserPasswordForRoot() ) + { + return userPasswordSecondary(); + } + return m_rootPasswordSecondary; + } + return QString(); +} + +Config::PasswordStatus +Config::rootPasswordStatus() const +{ + if ( writeRootPassword() && !reuseUserPasswordForRoot() ) + { + return passwordStatus( m_rootPassword, m_rootPasswordSecondary ); + } + else + { + return userPasswordStatus(); + } +} + +int +Config::rootPasswordValidity() const +{ + auto p = rootPasswordStatus(); + return p.first; +} + +QString +Config::rootPasswordMessage() const +{ + auto p = rootPasswordStatus(); + return p.second; +} + +bool +Config::isReady() const +{ + bool readyFullName = !fullName().isEmpty(); // Needs some text + bool readyHostname = hostnameStatus().isEmpty(); // .. no warning message + bool readyUsername = !loginName().isEmpty() && loginNameStatus().isEmpty(); // .. no warning message + bool readyUserPassword = userPasswordValidity() != Config::PasswordValidity::Invalid; + bool readyRootPassword = rootPasswordValidity() != Config::PasswordValidity::Invalid; + return readyFullName && readyHostname && readyUsername && readyUserPassword && readyRootPassword; +} + +/** @brief Update ready status and emit signal + * + * This is a "concentrator" private slot for all the status-changed + * signals, so that readyChanged() is emitted only when needed. + */ +void +Config::checkReady() +{ + bool b = isReady(); + if ( b != m_isReady ) + { + m_isReady = b; + emit readyChanged( b ); + } +} + + +STATICTEST void +setConfigurationDefaultGroups( const QVariantMap& map, QList< GroupDescription >& defaultGroups ) +{ + defaultGroups.clear(); + + const QString key( "defaultGroups" ); + auto groupsFromConfig = map.value( key ).toList(); + if ( groupsFromConfig.isEmpty() ) + { + if ( map.contains( key ) && map.value( key ).isValid() && map.value( key ).canConvert( QVariant::List ) ) + { + // Explicitly set, but empty: this is valid, but unusual. + cDebug() << key << "has explicit empty value."; + } + else + { + // By default give the user a handful of "traditional" groups, if + // none are specified at all. These are system (GID < 1000) groups. + cWarning() << "Using fallback groups. Please check *defaultGroups* value in users.conf"; + for ( const auto& s : { "lp", "video", "network", "storage", "wheel", "audio" } ) + { + defaultGroups.append( + GroupDescription( s, GroupDescription::CreateIfNeeded {}, GroupDescription::SystemGroup {} ) ); + } + } + } + else + { + for ( const auto& v : groupsFromConfig ) + { + if ( v.type() == QVariant::String ) + { + defaultGroups.append( GroupDescription( v.toString() ) ); + } + else if ( v.type() == QVariant::Map ) + { + const auto innermap = v.toMap(); + QString name = CalamaresUtils::getString( innermap, "name" ); + if ( !name.isEmpty() ) + { + defaultGroups.append( GroupDescription( name, + CalamaresUtils::getBool( innermap, "must_exist", false ), + CalamaresUtils::getBool( innermap, "system", false ) ) ); + } + else + { + cWarning() << "Ignoring *defaultGroups* entry without a name" << v; + } + } + else + { + cWarning() << "Unknown *defaultGroups* entry" << v; + } + } + } +} + +STATICTEST HostNameAction +getHostNameAction( const QVariantMap& configurationMap ) +{ + HostNameAction setHostName = HostNameAction::EtcHostname; + QString hostnameActionString = CalamaresUtils::getString( configurationMap, "location" ); + if ( !hostnameActionString.isEmpty() ) + { + bool ok = false; + setHostName = hostnameActionNames().find( hostnameActionString, ok ); + if ( !ok ) + { + setHostName = HostNameAction::EtcHostname; // Rather than none + } + } + + return setHostName; +} + +/** @brief Process entries in the passwordRequirements config entry + * + * Called once for each item in the config entry, which should + * be a key-value pair. What makes sense as a value depends on + * the key. Supported keys are documented in users.conf. + * + * @return if the check was added, returns @c true + */ +STATICTEST bool +addPasswordCheck( const QString& key, const QVariant& value, PasswordCheckList& passwordChecks ) +{ + if ( key == "minLength" ) + { + add_check_minLength( passwordChecks, value ); + } + else if ( key == "maxLength" ) + { + add_check_maxLength( passwordChecks, value ); + } + else if ( key == "nonempty" ) + { + if ( value.toBool() ) + { + passwordChecks.push_back( + PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is empty" ); }, + []( const QString& s ) { return !s.isEmpty(); }, + PasswordCheck::Weight( 1 ) ) ); + } + else + { + cDebug() << "nonempty check is mentioned but set to false"; + return false; + } + } +#ifdef CHECK_PWQUALITY + else if ( key == "libpwquality" ) + { + add_check_libpwquality( passwordChecks, value ); + } +#endif // CHECK_PWQUALITY + else + { + cWarning() << "Unknown password-check key" << key; + return false; + } + return true; +} + +/** @brief Returns a value of either key from the map + * + * Takes a function (e.g. getBool, or getString) and two keys, + * returning the value in the map of the one that is there (or @p defaultArg) + */ +template < typename T, typename U > +T +either( T ( *f )( const QVariantMap&, const QString&, U ), + const QVariantMap& configurationMap, + const QString& oldKey, + const QString& newKey, + U defaultArg ) +{ + if ( configurationMap.contains( oldKey ) ) + { + return f( configurationMap, oldKey, defaultArg ); + } + else + { + return f( configurationMap, newKey, defaultArg ); + } +} + +// TODO:3.3: Remove +static void +copyLegacy( const QVariantMap& source, const QString& sourceKey, QVariantMap& target, const QString& targetKey ) +{ + if ( source.contains( sourceKey ) ) + { + if ( target.contains( targetKey ) ) + { + cWarning() << "Legacy *users* key" << sourceKey << "ignored."; + } + else + { + const QVariant legacyValue = source.value( sourceKey ); + cWarning() << "Legacy *users* key" << sourceKey << "overrides hostname-settings."; + target.insert( targetKey, legacyValue ); + } + } +} + +/** @brief Tidy up a list of names + * + * Remove duplicates, apply lowercase, sort. + */ +static void +tidy( QStringList& l ) +{ + std::for_each( l.begin(), l.end(), []( QString& s ) { s = s.toLower(); } ); + l.sort(); + l.removeDuplicates(); +} + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + // Handle *user* key and subkeys and legacy settings + { + bool ok = false; // Ignored + QVariantMap userSettings = CalamaresUtils::getSubMap( configurationMap, "user", ok ); + + // TODO:3.3: Remove calls to copyLegacy + copyLegacy( configurationMap, "userShell", userSettings, "shell" ); + + QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all + if ( userSettings.contains( "shell" ) ) + { + shell = CalamaresUtils::getString( userSettings, "shell" ); + } + // Now it might be explicitly set to empty, which is ok + setUserShell( shell ); + + m_forbiddenLoginNames = CalamaresUtils::getStringList( userSettings, "forbidden_names" ); + m_forbiddenLoginNames << alwaysForbiddenLoginNames(); + tidy( m_forbiddenLoginNames ); + } + + setAutoLoginGroup( either< QString, const QString& >( + CalamaresUtils::getString, configurationMap, "autologinGroup", "autoLoginGroup", QString() ) ); + setSudoersGroup( CalamaresUtils::getString( configurationMap, "sudoersGroup" ) ); + m_sudoStyle = CalamaresUtils::getBool( configurationMap, "sudoersConfigureWithGroup", false ) + ? SudoStyle::UserAndGroup + : SudoStyle::UserOnly; + + // Handle *hostname* key and subkeys and legacy settings + { + bool ok = false; // Ignored + QVariantMap hostnameSettings = CalamaresUtils::getSubMap( configurationMap, "hostname", ok ); + + // TODO:3.3: Remove calls to copyLegacy + copyLegacy( configurationMap, "setHostname", hostnameSettings, "location" ); + copyLegacy( configurationMap, "writeHostsFile", hostnameSettings, "writeHostsFile" ); + m_hostnameAction = getHostNameAction( hostnameSettings ); + m_writeEtcHosts = CalamaresUtils::getBool( hostnameSettings, "writeHostsFile", true ); + m_hostnameTemplate + = CalamaresUtils::getString( hostnameSettings, "template", QStringLiteral( "${first}-${product}" ) ); + + m_forbiddenHostNames = CalamaresUtils::getStringList( hostnameSettings, "forbidden_names" ); + m_forbiddenHostNames << alwaysForbiddenHostNames(); + tidy( m_forbiddenHostNames ); + } + + setConfigurationDefaultGroups( configurationMap, m_defaultGroups ); + + // Renaming of Autologin -> AutoLogin in 4ffa79d4cf also affected + // configuration keys, which was not intended. Accept both. + m_doAutoLogin = either( CalamaresUtils::getBool, + configurationMap, + QStringLiteral( "doAutologin" ), + QStringLiteral( "doAutoLogin" ), + false ); + + m_writeRootPassword = CalamaresUtils::getBool( configurationMap, "setRootPassword", true ); + Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", m_writeRootPassword ); + + m_reuseUserPasswordForRoot = CalamaresUtils::getBool( configurationMap, "doReusePassword", false ); + + m_permitWeakPasswords = CalamaresUtils::getBool( configurationMap, "allowWeakPasswords", false ); + m_requireStrongPasswords + = !m_permitWeakPasswords || !CalamaresUtils::getBool( configurationMap, "allowWeakPasswordsDefault", false ); + + // If the value doesn't exist, or isn't a map, this gives an empty map -- no problem + auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() ); + for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i ) + { + addPasswordCheck( i.key(), i.value(), m_passwordChecks ); + } + std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); + + updateGSAutoLogin( doAutoLogin(), loginName() ); + checkReady(); + + ApplyPresets( *this, configurationMap ) << "fullName" + << "loginName"; +} + +void +Config::finalizeGlobalStorage() const +{ + updateGSAutoLogin( doAutoLogin(), loginName() ); + + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( writeRootPassword() ) + { + gs->insert( "reuseRootPassword", reuseUserPasswordForRoot() ); + } + gs->insert( "password", CalamaresUtils::obscure( userPassword() ) ); +} + +Calamares::JobList +Config::createJobs() const +{ + Calamares::JobList jobs; + + if ( !isReady() ) + { + return jobs; + } + + Calamares::Job* j; + + if ( !m_sudoersGroup.isEmpty() ) + { + j = new SetupSudoJob( m_sudoersGroup, m_sudoStyle ); + jobs.append( Calamares::job_ptr( j ) ); + } + + j = new SetupGroupsJob( this ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new CreateUserJob( this ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new SetPasswordJob( loginName(), userPassword() ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new SetPasswordJob( "root", rootPassword() ); + jobs.append( Calamares::job_ptr( j ) ); + + j = new SetHostNameJob( this ); + jobs.append( Calamares::job_ptr( j ) ); + + return jobs; +} diff --git a/src/modules/users/Config.h b/src/modules/users/Config.h new file mode 100644 index 000000000..599fcd6bd --- /dev/null +++ b/src/modules/users/Config.h @@ -0,0 +1,356 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef USERS_CONFIG_H +#define USERS_CONFIG_H + +#include "CheckPWQuality.h" + +#include "Job.h" +#include "modulesystem/Config.h" +#include "utils/NamedEnum.h" + +#include +#include +#include + +enum class HostNameAction +{ + None, + EtcHostname, // Write to /etc/hostname directly + SystemdHostname, // Set via hostnamed(1) + Transient, // Force target system transient, remove /etc/hostname +}; + +const NamedEnumTable< HostNameAction >& hostnameActionNames(); + +/** @brief Settings for a single group + * + * The list of defaultgroups from the configuration can be + * set up in a fine-grained way, with both user- and system- + * level groups; this class stores a configuration for each. + */ +class GroupDescription +{ +public: + // TODO: still too-weakly typed, add a macro to define strongly-typed bools + class MustExist : public std::true_type + { + }; + class CreateIfNeeded : public std::false_type + { + }; + class SystemGroup : public std::true_type + { + }; + class UserGroup : public std::false_type + { + }; + + ///@brief An invalid, empty group + GroupDescription() {} + + ///@brief A group with full details + GroupDescription( const QString& name, bool mustExistAlready = CreateIfNeeded {}, bool isSystem = UserGroup {} ) + : m_name( name ) + , m_isValid( !name.isEmpty() ) + , m_mustAlreadyExist( mustExistAlready ) + , m_isSystem( isSystem ) + { + } + + bool isValid() const { return m_isValid; } + bool isSystemGroup() const { return m_isSystem; } + bool mustAlreadyExist() const { return m_mustAlreadyExist; } + QString name() const { return m_name; } + + ///@brief Equality of groups depends only on name and kind + bool operator==( const GroupDescription& rhs ) const + { + return rhs.name() == name() && rhs.isSystemGroup() == isSystemGroup(); + } + +private: + QString m_name; + bool m_isValid = false; + bool m_mustAlreadyExist = false; + bool m_isSystem = false; +}; + + +class PLUGINDLLEXPORT Config : public Calamares::ModuleSystem::Config +{ + Q_OBJECT + + Q_PROPERTY( QString userShell READ userShell WRITE setUserShell NOTIFY userShellChanged ) + + Q_PROPERTY( QString autoLoginGroup READ autoLoginGroup WRITE setAutoLoginGroup NOTIFY autoLoginGroupChanged ) + Q_PROPERTY( QString sudoersGroup READ sudoersGroup WRITE setSudoersGroup NOTIFY sudoersGroupChanged ) + + Q_PROPERTY( bool doAutoLogin READ doAutoLogin WRITE setAutoLogin NOTIFY autoLoginChanged ) + + Q_PROPERTY( QString fullName READ fullName WRITE setFullName NOTIFY fullNameChanged ) + Q_PROPERTY( QString loginName READ loginName WRITE setLoginName NOTIFY loginNameChanged ) + Q_PROPERTY( QString loginNameStatus READ loginNameStatus NOTIFY loginNameStatusChanged ) + + Q_PROPERTY( QString hostname READ hostname WRITE setHostName NOTIFY hostnameChanged ) + Q_PROPERTY( QString hostnameStatus READ hostnameStatus NOTIFY hostnameStatusChanged ) + Q_PROPERTY( HostNameAction hostnameAction READ hostnameAction CONSTANT ) + + Q_PROPERTY( QString userPassword READ userPassword WRITE setUserPassword NOTIFY userPasswordChanged ) + Q_PROPERTY( QString userPasswordSecondary READ userPasswordSecondary WRITE setUserPasswordSecondary NOTIFY + userPasswordSecondaryChanged ) + Q_PROPERTY( int userPasswordValidity READ userPasswordValidity NOTIFY userPasswordStatusChanged STORED false ) + Q_PROPERTY( QString userPasswordMessage READ userPasswordMessage NOTIFY userPasswordStatusChanged STORED false ) + + Q_PROPERTY( QString rootPassword READ rootPassword WRITE setRootPassword NOTIFY rootPasswordChanged ) + Q_PROPERTY( QString rootPasswordSecondary READ rootPasswordSecondary WRITE setRootPasswordSecondary NOTIFY + rootPasswordSecondaryChanged ) + Q_PROPERTY( int rootPasswordValidity READ rootPasswordValidity NOTIFY rootPasswordStatusChanged STORED false ) + Q_PROPERTY( QString rootPasswordMessage READ rootPasswordMessage NOTIFY rootPasswordStatusChanged STORED false ) + + Q_PROPERTY( bool writeRootPassword READ writeRootPassword CONSTANT ) + Q_PROPERTY( bool reuseUserPasswordForRoot READ reuseUserPasswordForRoot WRITE setReuseUserPasswordForRoot NOTIFY + reuseUserPasswordForRootChanged ) + + Q_PROPERTY( bool permitWeakPasswords READ permitWeakPasswords CONSTANT ) + Q_PROPERTY( bool requireStrongPasswords READ requireStrongPasswords WRITE setRequireStrongPasswords NOTIFY + requireStrongPasswordsChanged ) + + Q_PROPERTY( bool ready READ isReady NOTIFY readyChanged STORED false ) + +public: + /** @brief Validity (status) of a password + * + * Valid passwords are: + * - primary and secondary are equal **and** + * - all the password-strength checks pass + * Weak passwords: + * - primary and secondary are equal **and** + * - not all the checks pass **and** + * - permitWeakPasswords is @c true **and** + * - requireStrongPasswords is @c false + * Invalid passwords (all other cases): + * - the primary and secondary values are not equal **or** + * - not all the checks pass and weak passwords are not permitted + */ + enum PasswordValidity + { + Valid = 0, + Weak = 1, + Invalid = 2 + }; + + /** @brief Full password status + * + * A password's status is in two parts: + * - a validity (valid, weak or invalid) + * - a message describing that validity + * The message is empty when the password is valid, but + * weak and invalid passwords have an explanatory message. + */ + using PasswordStatus = QPair< PasswordValidity, QString >; + + Config( QObject* parent = nullptr ); + ~Config() override; + + void setConfigurationMap( const QVariantMap& ) override; + + /** @brief Fill Global Storage with some settings + * + * This should be called when moving on from the view step, + * and copies some things to GS that otherwise would not. + */ + void finalizeGlobalStorage() const; + + /** @brief Jobs for creating user, setting passwords + * + * If the Config object isn't ready yet, returns an empty list. + */ + Calamares::JobList createJobs() const; + + /** @brief Full path to the user's shell executable + * + * Typically this will be /bin/bash, but it can be set from + * the config file with the *userShell* setting. + */ + QString userShell() const { return m_userShell; } + + /// The group of which auto-login users must be a member + QString autoLoginGroup() const { return m_autoLoginGroup; } + + enum class SudoStyle + { + UserOnly, + UserAndGroup + }; + /// The group of which users who can "sudo" must be a member + QString sudoersGroup() const { return m_sudoersGroup; } + SudoStyle sudoStyle() const { return m_sudoStyle; } + + /// The full (GECOS) name of the user + QString fullName() const { return m_fullName; } + /// The login name of the user + QString loginName() const { return m_loginName; } + /// Status message about login -- empty for "ok" + QString loginNameStatus() const; + + /// The host name (name for the system) + QString hostname() const + { + return ( ( hostnameAction() == HostNameAction::EtcHostname ) + || ( hostnameAction() == HostNameAction::SystemdHostname ) ) + ? m_hostname + : QString(); + } + /// Status message about hostname -- empty for "ok" + QString hostnameStatus() const; + /// How to write the hostname + HostNameAction hostnameAction() const { return m_hostnameAction; } + /// Write /etc/hosts ? + bool writeEtcHosts() const { return m_writeEtcHosts; } + + /// Should the user be automatically logged-in? + bool doAutoLogin() const { return m_doAutoLogin; } + /// Should the root password be written (if false, no password is set and the root account is disabled for login) + bool writeRootPassword() const { return m_writeRootPassword; } + /// Should the user's password be used for root, too? (if root is written at all) + bool reuseUserPasswordForRoot() const { return m_reuseUserPasswordForRoot; } + /// Show UI to change the "require strong password" setting? + bool permitWeakPasswords() const { return m_permitWeakPasswords; } + /// Current setting for "require strong password"? + bool requireStrongPasswords() const { return m_requireStrongPasswords; } + + const QList< GroupDescription >& defaultGroups() const { return m_defaultGroups; } + /** @brief the names of all the groups for the current user + * + * Takes into account defaultGroups and autoLogin behavior. + */ + QStringList groupsForThisUser() const; + + // The user enters a password (and again in a separate UI element) + QString userPassword() const { return m_userPassword; } + QString userPasswordSecondary() const { return m_userPasswordSecondary; } + int userPasswordValidity() const; + QString userPasswordMessage() const; + PasswordStatus userPasswordStatus() const; + + // The root password **may** be entered in the UI, or may be suppressed + // entirely when writeRootPassword is off, or may be equal to + // the user password when reuseUserPasswordForRoot is on. + QString rootPassword() const; + QString rootPasswordSecondary() const; + int rootPasswordValidity() const; + QString rootPasswordMessage() const; + PasswordStatus rootPasswordStatus() const; + + bool isReady() const; + + const QStringList& forbiddenLoginNames() const; + const QStringList& forbiddenHostNames() const; + +public Q_SLOTS: + /** @brief Sets the user's shell if possible + * + * If the path is empty, that's ok: no shell will be explicitly set, + * so the user will get whatever shell is set to default in the target. + * + * The given non-empty @p path must be an absolute path (for use inside + * the target system!); if it is not, the shell is not changed. + */ + void setUserShell( const QString& path ); + + /// Sets the autoLogin group; empty is ignored + void setAutoLoginGroup( const QString& group ); + /// Sets the sudoer group; empty is ignored + void setSudoersGroup( const QString& group ); + + /// Sets the full name, may guess a loginName + void setFullName( const QString& name ); + /// Sets the login name (flags it as "custom") + void setLoginName( const QString& login ); + + /// Sets the host name (flags it as "custom") + void setHostName( const QString& host ); + + /// Sets the autoLogin flag + void setAutoLogin( bool b ); + + /// Set to true to use the user password, unchanged, for root too + void setReuseUserPasswordForRoot( bool reuse ); + /// Change setting for "require strong password" + void setRequireStrongPasswords( bool strong ); + + void setUserPassword( const QString& ); + void setUserPasswordSecondary( const QString& ); + void setRootPassword( const QString& ); + void setRootPasswordSecondary( const QString& ); + +signals: + void userShellChanged( const QString& ); + void autoLoginGroupChanged( const QString& ); + void sudoersGroupChanged( const QString& ); + void fullNameChanged( const QString& ); + void loginNameChanged( const QString& ); + void loginNameStatusChanged( const QString& ); + void hostnameChanged( const QString& ); + void hostnameStatusChanged( const QString& ); + void autoLoginChanged( bool ); + void reuseUserPasswordForRootChanged( bool ); + void requireStrongPasswordsChanged( bool ); + void userPasswordChanged( const QString& ); + void userPasswordSecondaryChanged( const QString& ); + void userPasswordStatusChanged( int, const QString& ); + void rootPasswordChanged( const QString& ); + void rootPasswordSecondaryChanged( const QString& ); + void rootPasswordStatusChanged( int, const QString& ); + void readyChanged( bool ) const; + +private: + PasswordStatus passwordStatus( const QString&, const QString& ) const; + void checkReady(); + + QList< GroupDescription > m_defaultGroups; + QString m_userShell; + QString m_autoLoginGroup; + QString m_sudoersGroup; + SudoStyle m_sudoStyle = SudoStyle::UserOnly; + QString m_fullName; + QString m_loginName; + QString m_hostname; + + QString m_userPassword; + QString m_userPasswordSecondary; // enter again to be sure + QString m_rootPassword; + QString m_rootPasswordSecondary; + + bool m_doAutoLogin = false; + + bool m_writeRootPassword = true; + bool m_reuseUserPasswordForRoot = false; + + bool m_permitWeakPasswords = false; + bool m_requireStrongPasswords = true; + + bool m_customLoginName = false; + bool m_customHostName = false; + + bool m_isReady = false; ///< Used to reduce readyChanged signals + + HostNameAction m_hostnameAction = HostNameAction::EtcHostname; + bool m_writeEtcHosts = false; + QString m_hostnameTemplate; + + QStringList m_forbiddenHostNames; + QStringList m_forbiddenLoginNames; + + PasswordCheckList m_passwordChecks; +}; + +#endif diff --git a/src/modules/users/CreateUserJob.cpp b/src/modules/users/CreateUserJob.cpp index 2e4e7429e..b7b0f2f4b 100644 --- a/src/modules/users/CreateUserJob.cpp +++ b/src/modules/users/CreateUserJob.cpp @@ -1,46 +1,30 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2016, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . + * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later */ #include "CreateUserJob.h" +#include "Config.h" + #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#include "utils/Permissions.h" #include #include #include #include -#include #include -CreateUserJob::CreateUserJob( const QString& userName, - const QString& fullName, - bool autologin, - const QStringList& defaultGroups ) +CreateUserJob::CreateUserJob( const Config* config ) : Calamares::Job() - , m_userName( userName ) - , m_fullName( fullName ) - , m_autologin( autologin ) - , m_defaultGroups( defaultGroups ) + , m_config( config ) { } @@ -48,98 +32,106 @@ CreateUserJob::CreateUserJob( const QString& userName, QString CreateUserJob::prettyName() const { - return tr( "Create user %1" ).arg( m_userName ); + return tr( "Create user %1" ).arg( m_config->loginName() ); } QString CreateUserJob::prettyDescription() const { - return tr( "Create user %1." ).arg( m_userName ); + return tr( "Create user %1." ).arg( m_config->loginName() ); } QString CreateUserJob::prettyStatusMessage() const { - return tr( "Creating user %1." ).arg( m_userName ); + return m_status.isEmpty() ? tr( "Creating user %1" ).arg( m_config->loginName() ) : m_status; +} + +static Calamares::JobResult +createUser( const QString& loginName, const QString& fullName, const QString& shell ) +{ + QStringList useraddCommand; +#ifdef __FreeBSD__ + useraddCommand << "pw" + << "useradd" + << "-n" << loginName << "-m" + << "-c" << fullName; + if ( !shell.isEmpty() ) + { + useraddCommand << "-s" << shell; + } +#else + useraddCommand << "useradd" + << "-m" + << "-U"; + if ( !shell.isEmpty() ) + { + useraddCommand << "-s" << shell; + } + useraddCommand << "-c" << fullName; + useraddCommand << loginName; +#endif + + auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( useraddCommand ); + if ( commandResult.getExitCode() ) + { + cError() << "useradd failed" << commandResult.getExitCode(); + return commandResult.explainProcess( useraddCommand, std::chrono::seconds( 10 ) /* bogus timeout */ ); + } + return Calamares::JobResult::ok(); +} + +static Calamares::JobResult +setUserGroups( const QString& loginName, const QStringList& groups ) +{ + QStringList setgroupsCommand; +#ifdef __FreeBSD__ + setgroupsCommand << "pw" + << "usermod" + << "-n" << loginName << "-G" << groups.join( ',' ); +#else + setgroupsCommand << "usermod" + << "-aG" << groups.join( ',' ) << loginName; +#endif + + auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( setgroupsCommand ); + if ( commandResult.getExitCode() ) + { + cError() << "usermod failed" << commandResult.getExitCode(); + return commandResult.explainProcess( setgroupsCommand, std::chrono::seconds( 10 ) /* bogus timeout */ ); + } + return Calamares::JobResult::ok(); } Calamares::JobResult CreateUserJob::exec() { - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QDir destDir( gs->value( "rootMountPoint" ).toString() ); + QDir destDir; + bool reuseHome = false; - if ( gs->contains( "sudoersGroup" ) && !gs->value( "sudoersGroup" ).toString().isEmpty() ) { - cDebug() << "[CREATEUSER]: preparing sudoers"; - - QFileInfo sudoersFi( destDir.absoluteFilePath( "etc/sudoers.d/10-installer" ) ); - - if ( !sudoersFi.absoluteDir().exists() ) - { - return Calamares::JobResult::error( tr( "Sudoers dir is not writable." ) ); - } - - QFile sudoersFile( sudoersFi.absoluteFilePath() ); - if ( !sudoersFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) - { - return Calamares::JobResult::error( tr( "Cannot create sudoers file for writing." ) ); - } - - QString sudoersGroup = gs->value( "sudoersGroup" ).toString(); - - QTextStream sudoersOut( &sudoersFile ); - sudoersOut << QString( "%%1 ALL=(ALL) ALL\n" ).arg( sudoersGroup ); - - if ( QProcess::execute( "chmod", { "440", sudoersFi.absoluteFilePath() } ) ) - return Calamares::JobResult::error( tr( "Cannot chmod sudoers file." ) ); + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + destDir = QDir( gs->value( "rootMountPoint" ).toString() ); + reuseHome = gs->value( "reuseHome" ).toBool(); } - cDebug() << "[CREATEUSER]: preparing groups"; - - QFileInfo groupsFi( destDir.absoluteFilePath( "etc/group" ) ); - QFile groupsFile( groupsFi.absoluteFilePath() ); - if ( !groupsFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) + // If we're looking to reuse the contents of an existing /home. + // This GS setting comes from the **partitioning** module. + if ( reuseHome ) { - return Calamares::JobResult::error( tr( "Cannot open groups file for reading." ) ); - } - QString groupsData = QString::fromLocal8Bit( groupsFile.readAll() ); - QStringList groupsLines = groupsData.split( '\n' ); - for ( QStringList::iterator it = groupsLines.begin(); it != groupsLines.end(); ++it ) - { - int indexOfFirstToDrop = it->indexOf( ':' ); - it->truncate( indexOfFirstToDrop ); - } - - foreach ( const QString& group, m_defaultGroups ) - if ( !groupsLines.contains( group ) ) - CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", group } ); - - QString defaultGroups = m_defaultGroups.join( ',' ); - if ( m_autologin ) - { - QString autologinGroup; - if ( gs->contains( "autologinGroup" ) && !gs->value( "autologinGroup" ).toString().isEmpty() ) - { - autologinGroup = gs->value( "autologinGroup" ).toString(); - CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", autologinGroup } ); - defaultGroups.append( QString( ",%1" ).arg( autologinGroup ) ); - } - } - - // If we're looking to reuse the contents of an existing /home - if ( gs->value( "reuseHome" ).toBool() ) - { - QString shellFriendlyHome = "/home/" + m_userName; + m_status = tr( "Preserving home directory" ); + emit progress( 0.2 ); + QString shellFriendlyHome = "/home/" + m_config->loginName(); QDir existingHome( destDir.absolutePath() + shellFriendlyHome ); if ( existingHome.exists() ) { QString backupDirName = "dotfiles_backup_" + QDateTime::currentDateTime().toString( "yyyy-MM-dd_HH-mm-ss" ); existingHome.mkdir( backupDirName ); + // We need the extra `sh -c` here to ensure that we can expand the shell globs CalamaresUtils::System::instance()->targetEnvCall( { "sh", "-c", "mv -f " + shellFriendlyHome + "/.* " + shellFriendlyHome + "/" + backupDirName } ); } @@ -147,33 +139,27 @@ CreateUserJob::exec() cDebug() << "[CREATEUSER]: creating user"; - QStringList useradd { "useradd", "-m", "-U" }; - QString shell = gs->value( "userShell" ).toString(); - if ( !shell.isEmpty() ) + m_status = tr( "Creating user %1" ).arg( m_config->loginName() ); + emit progress( 0.5 ); + auto useraddResult = createUser( m_config->loginName(), m_config->fullName(), m_config->userShell() ); + if ( !useraddResult ) { - useradd << "-s" << shell; - } - useradd << "-c" << m_fullName; - useradd << m_userName; - - auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( useradd ); - if ( commandResult.getExitCode() ) - { - cError() << "useradd failed" << commandResult.getExitCode(); - return commandResult.explainProcess( useradd, std::chrono::seconds( 10 ) /* bogus timeout */ ); + return useraddResult; } - commandResult - = CalamaresUtils::System::instance()->targetEnvCommand( { "usermod", "-aG", defaultGroups, m_userName } ); - if ( commandResult.getExitCode() ) + m_status = tr( "Configuring user %1" ).arg( m_config->loginName() ); + emit progress( 0.8 ); + auto usergroupsResult = setUserGroups( m_config->loginName(), m_config->groupsForThisUser() ); + if ( !usergroupsResult ) { - cError() << "usermod failed" << commandResult.getExitCode(); - return commandResult.explainProcess( "usermod", std::chrono::seconds( 10 ) /* bogus timeout */ ); + return usergroupsResult; } - QString userGroup = QString( "%1:%2" ).arg( m_userName ).arg( m_userName ); - QString homeDir = QString( "/home/%1" ).arg( m_userName ); - commandResult = CalamaresUtils::System::instance()->targetEnvCommand( { "chown", "-R", userGroup, homeDir } ); + m_status = tr( "Setting file permissions" ); + emit progress( 0.9 ); + QString userGroup = QString( "%1:%2" ).arg( m_config->loginName() ).arg( m_config->loginName() ); + QString homeDir = QString( "/home/%1" ).arg( m_config->loginName() ); + auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( { "chown", "-R", userGroup, homeDir } ); if ( commandResult.getExitCode() ) { cError() << "chown failed" << commandResult.getExitCode(); diff --git a/src/modules/users/CreateUserJob.h b/src/modules/users/CreateUserJob.h index f2239307e..28a48c886 100644 --- a/src/modules/users/CreateUserJob.h +++ b/src/modules/users/CreateUserJob.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CREATEUSERJOB_H @@ -21,23 +12,21 @@ #include "Job.h" -#include +class Config; class CreateUserJob : public Calamares::Job { Q_OBJECT public: - CreateUserJob( const QString& userName, const QString& fullName, bool autologin, const QStringList& defaultGroups ); + CreateUserJob( const Config* config ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: - QString m_userName; - QString m_fullName; - bool m_autologin; - QStringList m_defaultGroups; + const Config* m_config; + QString m_status; }; #endif /* CREATEUSERJOB_H */ diff --git a/src/modules/users/MiscJobs.cpp b/src/modules/users/MiscJobs.cpp new file mode 100644 index 000000000..fec546d96 --- /dev/null +++ b/src/modules/users/MiscJobs.cpp @@ -0,0 +1,211 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "MiscJobs.h" + +#include "Config.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Permissions.h" + +#include +#include +#include + +SetupSudoJob::SetupSudoJob( const QString& group, Config::SudoStyle style ) + : m_sudoGroup( group ) + , m_sudoStyle( style ) +{ +} + +QString +SetupSudoJob::prettyName() const +{ + return tr( "Configure
sudo
users." ); +} + +static QString +designatorForStyle( Config::SudoStyle style ) +{ + switch ( style ) + { + case Config::SudoStyle::UserOnly: + return QStringLiteral( "(ALL)" ); + case Config::SudoStyle::UserAndGroup: + return QStringLiteral( "(ALL:ALL)" ); + } + __builtin_unreachable(); +} + +Calamares::JobResult +SetupSudoJob::exec() +{ + if ( m_sudoGroup.isEmpty() ) + { + cDebug() << "Skipping sudo 10-installer because the sudoGroup is empty."; + return Calamares::JobResult::ok(); + } + + // One % for the sudo format, keep it outside of the string to avoid accidental replacement + QString sudoersLine + = QChar( '%' ) + QString( "%1 ALL=%2 ALL\n" ).arg( m_sudoGroup, designatorForStyle( m_sudoStyle ) ); + auto fileResult + = CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/sudoers.d/10-installer" ), + sudoersLine.toUtf8().constData(), + CalamaresUtils::System::WriteMode::Overwrite ); + + if ( fileResult ) + { + if ( !CalamaresUtils::Permissions::apply( fileResult.path(), 0440 ) ) + { + return Calamares::JobResult::error( tr( "Cannot chmod sudoers file." ) ); + } + } + else + { + return Calamares::JobResult::error( tr( "Cannot create sudoers file for writing." ) ); + } + + return Calamares::JobResult::ok(); +} + +STATICTEST QStringList +groupsInTargetSystem() +{ + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( !gs ) + { + return QStringList(); + } + QDir targetRoot( gs->value( "rootMountPoint" ).toString() ); + + QFileInfo groupsFi( targetRoot.absoluteFilePath( "etc/group" ) ); + QFile groupsFile( groupsFi.absoluteFilePath() ); + if ( !groupsFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + return QStringList(); + } + QString groupsData = QString::fromLocal8Bit( groupsFile.readAll() ); + QStringList groupsLines = groupsData.split( '\n' ); + QStringList::iterator it = groupsLines.begin(); + while ( it != groupsLines.end() ) + { + if ( it->startsWith( '#' ) ) + { + it = groupsLines.erase( it ); + continue; + } + int indexOfFirstToDrop = it->indexOf( ':' ); + if ( indexOfFirstToDrop < 1 ) + { + it = groupsLines.erase( it ); + continue; + } + it->truncate( indexOfFirstToDrop ); + ++it; + } + return groupsLines; +} + +/** @brief Create groups in target system as needed + * + * Given a list of groups that already exist, @p availableGroups, + * go through the @p wantedGroups and create each of them. Groups that + * fail, or which should have already been there, are added to + * @p missingGroups by name. + */ +static bool +ensureGroupsExistInTarget( const QList< GroupDescription >& wantedGroups, + const QStringList& availableGroups, + QStringList& missingGroups ) +{ + int failureCount = 0; + + for ( const auto& group : wantedGroups ) + { + if ( group.isValid() && !availableGroups.contains( group.name() ) ) + { + if ( group.mustAlreadyExist() ) + { + // Should have been there already: don't create it + missingGroups.append( group.name() ); + continue; + } + + QStringList cmd; +#ifdef __FreeBSD__ + if ( group.isSystemGroup() ) + { + cWarning() << "Ignoring must-be-a-system group for" << group.name() << "on FreeBSD"; + } + cmd = QStringList { "pw", "groupadd", "-n", group.name() }; +#else + cmd << QStringLiteral( "groupadd" ); + if ( group.isSystemGroup() ) + { + cmd << "--system"; + } + cmd << group.name(); +#endif + if ( CalamaresUtils::System::instance()->targetEnvCall( cmd ) ) + { + failureCount++; + missingGroups.append( group.name() + QChar( '*' ) ); + } + } + } + if ( !missingGroups.isEmpty() ) + { + cWarning() << "Missing groups in target system (* for groupadd failure):" << Logger::DebugList( missingGroups ); + } + return failureCount == 0; +} + +SetupGroupsJob::SetupGroupsJob( const Config* config ) + : m_config( config ) +{ +} + +QString +SetupGroupsJob::prettyName() const +{ + return tr( "Preparing groups." ); +} + +Calamares::JobResult +SetupGroupsJob::exec() +{ + const auto& defaultGroups = m_config->defaultGroups(); + QStringList availableGroups = groupsInTargetSystem(); + QStringList missingGroups; + + if ( !ensureGroupsExistInTarget( defaultGroups, availableGroups, missingGroups ) ) + { + return Calamares::JobResult::error( tr( "Could not create groups in target system" ) ); + } + if ( !missingGroups.isEmpty() ) + { + return Calamares::JobResult::error( + tr( "Could not create groups in target system" ), + tr( "These groups are missing in the target system: %1" ).arg( missingGroups.join( ',' ) ) ); + } + + if ( m_config->doAutoLogin() && !m_config->autoLoginGroup().isEmpty() ) + { + const QString autoLoginGroup = m_config->autoLoginGroup(); + (void)ensureGroupsExistInTarget( + QList< GroupDescription >() << GroupDescription( autoLoginGroup ), availableGroups, missingGroups ); + } + + return Calamares::JobResult::ok(); +} diff --git a/src/modules/users/MiscJobs.h b/src/modules/users/MiscJobs.h new file mode 100644 index 000000000..57272aa95 --- /dev/null +++ b/src/modules/users/MiscJobs.h @@ -0,0 +1,50 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +/**@file Various small jobs + * + * This file collects miscellaneous jobs that need to be run to prepare + * the system for the user-creation job. + */ + +#ifndef USERS_MISCJOBS_H +#define USERS_MISCJOBS_H + +#include "Config.h" + +#include "Job.h" + +class SetupSudoJob : public Calamares::Job +{ + Q_OBJECT +public: + SetupSudoJob( const QString& group, Config::SudoStyle style ); + QString prettyName() const override; + Calamares::JobResult exec() override; + +public: + QString m_sudoGroup; + Config::SudoStyle m_sudoStyle; +}; + +class SetupGroupsJob : public Calamares::Job +{ + Q_OBJECT + +public: + SetupGroupsJob( const Config* config ); + QString prettyName() const override; + Calamares::JobResult exec() override; + +public: + const Config* m_config; +}; + +#endif diff --git a/src/modules/users/PasswordTests.cpp b/src/modules/users/PasswordTests.cpp deleted file mode 100644 index 0c1b4bffc..000000000 --- a/src/modules/users/PasswordTests.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2017, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#include "SetPasswordJob.h" - -#include "PasswordTests.h" - -#include - -QTEST_GUILESS_MAIN( PasswordTests ) - -PasswordTests::PasswordTests() {} - -PasswordTests::~PasswordTests() {} - -void -PasswordTests::initTestCase() -{ -} - -void -PasswordTests::testSalt() -{ - QString s = SetPasswordJob::make_salt( 8 ); - QCOMPARE( s.length(), 4 + 8 ); // 8 salt chars, plus $6$, plus trailing $ - QVERIFY( s.startsWith( "$6$" ) ); - QVERIFY( s.endsWith( '$' ) ); - qDebug() << "Obtained salt" << s; - - s = SetPasswordJob::make_salt( 11 ); - QCOMPARE( s.length(), 4 + 11 ); - QVERIFY( s.startsWith( "$6$" ) ); - QVERIFY( s.endsWith( '$' ) ); - qDebug() << "Obtained salt" << s; -} diff --git a/src/modules/users/PasswordTests.h b/src/modules/users/PasswordTests.h deleted file mode 100644 index 3b4b5d201..000000000 --- a/src/modules/users/PasswordTests.h +++ /dev/null @@ -1,36 +0,0 @@ -/* === This file is part of Calamares - === - * - * Copyright 2017, Adriaan de Groot - * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . - */ - -#ifndef PASSWORDTESTS_H -#define PASSWORDTESTS_H - -#include - -class PasswordTests : public QObject -{ - Q_OBJECT -public: - PasswordTests(); - ~PasswordTests() override; - -private Q_SLOTS: - void initTestCase(); - void testSalt(); -}; - -#endif diff --git a/src/modules/users/SetHostNameJob.cpp b/src/modules/users/SetHostNameJob.cpp index 555fcdc7d..452f6a962 100644 --- a/src/modules/users/SetHostNameJob.cpp +++ b/src/modules/users/SetHostNameJob.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Rohan Garg - * Copyright 2015, Teo Mrnjavac - * Copyright 2018, 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Rohan Garg + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetHostNameJob.h" @@ -25,39 +16,38 @@ #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#include +#include +#include #include #include -#include -#include -#include using WriteMode = CalamaresUtils::System::WriteMode; -SetHostNameJob::SetHostNameJob( const QString& hostname, Actions a ) +SetHostNameJob::SetHostNameJob( const Config* c ) : Calamares::Job() - , m_hostname( hostname ) - , m_actions( a ) + , m_config( c ) { } QString SetHostNameJob::prettyName() const { - return tr( "Set hostname %1" ).arg( m_hostname ); + return tr( "Set hostname %1" ).arg( m_config->hostname() ); } QString SetHostNameJob::prettyDescription() const { - return tr( "Set hostname %1." ).arg( m_hostname ); + return tr( "Set hostname %1." ).arg( m_config->hostname() ); } QString SetHostNameJob::prettyStatusMessage() const { - return tr( "Setting hostname %1." ).arg( m_hostname ); + return tr( "Setting hostname %1." ).arg( m_config->hostname() ); } STATICTEST bool @@ -71,16 +61,19 @@ STATICTEST bool writeFileEtcHosts( const QString& hostname ) { // The actual hostname gets substituted in at %1 - static const char etc_hosts[] = R"(# Host addresses + const QString standard_hosts = QStringLiteral( R"(# Standard host addresses 127.0.0.1 localhost -127.0.1.1 %1 ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters -)"; +)" ); + const QString this_host = QStringLiteral( R"(# This host address +127.0.1.1 %1 +)" ); + const QString etc_hosts = standard_hosts + ( hostname.isEmpty() ? QString() : this_host.arg( hostname ) ); return CalamaresUtils::System::instance()->createTargetFile( - QStringLiteral( "/etc/hosts" ), QString( etc_hosts ).arg( hostname ).toUtf8(), WriteMode::Overwrite ); + QStringLiteral( "/etc/hosts" ), etc_hosts.toUtf8(), WriteMode::Overwrite ); } STATICTEST bool @@ -138,29 +131,35 @@ SetHostNameJob::exec() return Calamares::JobResult::error( tr( "Internal Error" ) ); } - if ( m_actions & Action::EtcHostname ) + switch ( m_config->hostnameAction() ) { - if ( !setFileHostname( m_hostname ) ) + case HostNameAction::None: + break; + case HostNameAction::EtcHostname: + if ( !setFileHostname( m_config->hostname() ) ) { cError() << "Can't write to hostname file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } + break; + case HostNameAction::SystemdHostname: + // Does its own logging + setSystemdHostname( m_config->hostname() ); + break; + case HostNameAction::Transient: + CalamaresUtils::System::instance()->removeTargetFile( QStringLiteral( "/etc/hostname" ) ); + break; } - if ( m_actions & Action::WriteEtcHosts ) + if ( m_config->writeEtcHosts() ) { - if ( !writeFileEtcHosts( m_hostname ) ) + if ( !writeFileEtcHosts( m_config->hostname() ) ) { cError() << "Can't write to hosts file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } } - if ( m_actions & Action::SystemdHostname ) - { - // Does its own logging - setSystemdHostname( m_hostname ); - } return Calamares::JobResult::ok(); } diff --git a/src/modules/users/SetHostNameJob.h b/src/modules/users/SetHostNameJob.h index e3867b9d0..b32b1d7bb 100644 --- a/src/modules/users/SetHostNameJob.h +++ b/src/modules/users/SetHostNameJob.h @@ -1,53 +1,33 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Rohan Garg - * Copyright 2015, Teo Mrnjavac - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Rohan Garg + * SPDX-FileCopyrightText: 2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETHOSTNAMEJOB_CPP_H #define SETHOSTNAMEJOB_CPP_H +#include "Config.h" + #include "Job.h" class SetHostNameJob : public Calamares::Job { Q_OBJECT public: - enum Action - { - None = 0x0, - EtcHostname = 0x1, // Write to /etc/hostname directly - SystemdHostname = 0x2, // Set via hostnamed(1) - WriteEtcHosts = 0x4 // Write /etc/hosts (127.0.1.1 is this host) - }; - Q_DECLARE_FLAGS( Actions, Action ) - - - SetHostNameJob( const QString& hostname, Actions a ); + SetHostNameJob( const Config* c ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: - const QString m_hostname; - const Actions m_actions; + const Config* m_config; }; -Q_DECLARE_OPERATORS_FOR_FLAGS( SetHostNameJob::Actions ) - #endif // SETHOSTNAMEJOB_CPP_H diff --git a/src/modules/users/SetPasswordJob.cpp b/src/modules/users/SetPasswordJob.cpp index 3199a0a76..dd2fdc244 100644 --- a/src/modules/users/SetPasswordJob.cpp +++ b/src/modules/users/SetPasswordJob.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "SetPasswordJob.h" diff --git a/src/modules/users/SetPasswordJob.h b/src/modules/users/SetPasswordJob.h index cf5b2f585..aa75a86e1 100644 --- a/src/modules/users/SetPasswordJob.h +++ b/src/modules/users/SetPasswordJob.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef SETPASSWORDJOB_H diff --git a/src/modules/users/TestGroupInformation.cpp b/src/modules/users/TestGroupInformation.cpp new file mode 100644 index 000000000..31ca032c7 --- /dev/null +++ b/src/modules/users/TestGroupInformation.cpp @@ -0,0 +1,179 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" +#include "CreateUserJob.h" +#include "MiscJobs.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/Logger.h" +#include "utils/Yaml.h" + +#include +#include + +// Implementation details +extern QStringList groupsInTargetSystem(); // CreateUserJob + +class GroupTests : public QObject +{ + Q_OBJECT +public: + GroupTests(); + ~GroupTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testReadGroup(); + void testCreateGroup(); + + void testSudoGroup(); + void testJobCreation(); +}; + +GroupTests::GroupTests() {} + +void +GroupTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "Users test started."; + if ( !Calamares::JobQueue::instance() ) + { + (void)new Calamares::JobQueue(); + } + Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" ); +} + +void +GroupTests::testReadGroup() +{ + // Get the groups in the host system + QStringList groups = groupsInTargetSystem(); + QVERIFY( groups.count() > 2 ); +#ifdef __FreeBSD__ + QVERIFY( groups.contains( QStringLiteral( "wheel" ) ) ); +#else + QVERIFY( groups.contains( QStringLiteral( "root" ) ) ); +#endif + QVERIFY( groups.contains( QStringLiteral( "tty" ) ) ); + // openSUSE doesn't have "sys", KaOS doesn't have "nogroup" + QVERIFY( groups.contains( QStringLiteral( "sys" ) ) || groups.contains( QStringLiteral( "nogroup" ) ) ); + + for ( const QString& s : groups ) + { + QVERIFY( !s.isEmpty() ); + QVERIFY( !s.contains( '#' ) ); + } +} + +void +GroupTests::testCreateGroup() +{ + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/tests/5-issue-1523.conf" ).arg( BUILD_AS_TEST ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + QVERIFY( map.count() > 0 ); // Just that it loaded, one key *defaultGroups* + + Config c; + c.setConfigurationMap( map ); + + QCOMPARE( c.defaultGroups().count(), 4 ); + QVERIFY( c.defaultGroups().contains( QStringLiteral( "adm" ) ) ); + QVERIFY( c.defaultGroups().contains( QStringLiteral( "bar" ) ) ); + + Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" ); + + SetupGroupsJob j( &c ); + QVERIFY( !j.exec() ); // running as regular user this should fail +} + +void +GroupTests::testSudoGroup() +{ + // Test programmatic changes + { + Config c; + QSignalSpy spy( &c, &Config::sudoersGroupChanged ); + QCOMPARE( c.sudoersGroup(), QString() ); + c.setSudoersGroup( QStringLiteral( "wheel" ) ); + QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) ); + QCOMPARE( spy.count(), 1 ); // Changed to wheel + // Do it again, no change + c.setSudoersGroup( QStringLiteral( "wheel" ) ); + QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) ); + QCOMPARE( spy.count(), 1 ); + c.setSudoersGroup( QStringLiteral( "roue" ) ); + QCOMPARE( c.sudoersGroup(), QStringLiteral( "roue" ) ); + QCOMPARE( spy.count(), 2 ); + } + + + // Test config loading + { + Config c; + QSignalSpy spy( &c, &Config::sudoersGroupChanged ); + QCOMPARE( c.sudoersGroup(), QString() ); + + QVariantMap m; + c.setConfigurationMap( m ); + QCOMPARE( c.sudoersGroup(), QString() ); + QCOMPARE( spy.count(), 0 ); // Unchanged + + const auto key = QStringLiteral( "sudoersGroup" ); + const auto v0 = QStringLiteral( "wheel" ); + const auto v1 = QStringLiteral( "roue" ); + m.insert( key, v0 ); + c.setConfigurationMap( m ); + QCOMPARE( c.sudoersGroup(), v0 ); + QCOMPARE( spy.count(), 1 ); + } +} + +/** @brief Are all the expected jobs (and no others) created? + * + * - A sudo job is created only when the sudoers group is set; + * - Groups job + * - User job + * - Password job + * - Root password job + * - Hostname job are always created. + */ +void +GroupTests::testJobCreation() +{ + const int expectedJobs = 5; + Config c; + QVERIFY( !c.isReady() ); + + // Needs some setup + c.setFullName( QStringLiteral( "Goodluck Jonathan" ) ); + c.setLoginName( QStringLiteral( "goodj" ) ); + QVERIFY( c.isReady() ); + + QCOMPARE( c.sudoersGroup(), QString() ); + QCOMPARE( c.createJobs().count(), expectedJobs ); + + c.setSudoersGroup( QStringLiteral( "wheel" ) ); + QCOMPARE( c.sudoersGroup(), QString( "wheel" ) ); + QCOMPARE( c.createJobs().count(), expectedJobs + 1 ); +} + + +QTEST_GUILESS_MAIN( GroupTests ) + +#include "utils/moc-warnings.h" + +#include "TestGroupInformation.moc" diff --git a/src/modules/users/TestPasswordJob.cpp b/src/modules/users/TestPasswordJob.cpp new file mode 100644 index 000000000..1409e37b6 --- /dev/null +++ b/src/modules/users/TestPasswordJob.cpp @@ -0,0 +1,55 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "SetPasswordJob.h" + +#include + +class PasswordTests : public QObject +{ + Q_OBJECT +public: + PasswordTests(); + ~PasswordTests() override; + +private Q_SLOTS: + void initTestCase(); + void testSalt(); +}; + +PasswordTests::PasswordTests() {} + +PasswordTests::~PasswordTests() {} + +void +PasswordTests::initTestCase() +{ +} + +void +PasswordTests::testSalt() +{ + QString s = SetPasswordJob::make_salt( 8 ); + QCOMPARE( s.length(), 4 + 8 ); // 8 salt chars, plus $6$, plus trailing $ + QVERIFY( s.startsWith( "$6$" ) ); + QVERIFY( s.endsWith( '$' ) ); + qDebug() << "Obtained salt" << s; + + s = SetPasswordJob::make_salt( 11 ); + QCOMPARE( s.length(), 4 + 11 ); + QVERIFY( s.startsWith( "$6$" ) ); + QVERIFY( s.endsWith( '$' ) ); + qDebug() << "Obtained salt" << s; +} + +QTEST_GUILESS_MAIN( PasswordTests ) + +#include "utils/moc-warnings.h" + +#include "TestPasswordJob.moc" diff --git a/src/modules/users/TestSetHostNameJob.cpp b/src/modules/users/TestSetHostNameJob.cpp new file mode 100644 index 000000000..d1a556824 --- /dev/null +++ b/src/modules/users/TestSetHostNameJob.cpp @@ -0,0 +1,163 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "SetHostNameJob.h" + +// Implementation details +extern bool setFileHostname( const QString& ); +extern bool writeFileEtcHosts( const QString& ); +extern bool setSystemdHostname( const QString& ); + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Yaml.h" + +#include +#include + +#include + +class UsersTests : public QObject +{ + Q_OBJECT +public: + UsersTests(); + ~UsersTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testEtcHostname(); + void testEtcHosts(); + void testHostnamed(); + + void cleanup(); + +private: + QTemporaryDir m_dir; + QString m_originalHostName; +}; + +UsersTests::UsersTests() + : m_dir( QStringLiteral( "/tmp/calamares-usertest" ) ) +{ +} + +void +UsersTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "Users test started."; + cDebug() << "Test dir" << m_dir.path(); + + // Ensure we have a system object, expect it to be a "bogus" one + CalamaresUtils::System* system = CalamaresUtils::System::instance(); + QVERIFY( system ); + QVERIFY( system->doChroot() ); + + // Ensure we have a system-wide GlobalStorage with /tmp as root + if ( !Calamares::JobQueue::instance() ) + { + cDebug() << "Creating new JobQueue"; + (void)new Calamares::JobQueue(); + } + Calamares::GlobalStorage* gs + = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; + QVERIFY( gs ); + gs->insert( "rootMountPoint", m_dir.path() ); + + if ( m_originalHostName.isEmpty() ) + { + QFile hostname( QStringLiteral( "/etc/hostname" ) ); + if ( hostname.exists() && hostname.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + m_originalHostName = hostname.readAll().trimmed(); + } + } +} + +void +UsersTests::testEtcHostname() +{ + cDebug() << "Test dir" << m_dir.path(); + + QVERIFY( QFile::exists( m_dir.path() ) ); + QVERIFY( !QFile::exists( m_dir.filePath( "etc" ) ) ); + + const QString testHostname = QStringLiteral( "tubophone.calamares.io" ); + // Doesn't create intermediate directories + QVERIFY( !setFileHostname( testHostname ) ); + + QVERIFY( CalamaresUtils::System::instance()->createTargetDirs( "/etc" ) ); + QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); + + // Does write the file + QVERIFY( setFileHostname( testHostname ) ); + QVERIFY( QFile::exists( m_dir.filePath( "etc/hostname" ) ) ); + + // 22 for the test string, above, and 1 for the newline + QCOMPARE( QFileInfo( m_dir.filePath( "etc/hostname" ) ).size(), testHostname.length() + 1 ); +} + +void +UsersTests::testEtcHosts() +{ + // Assume previous tests did their work + QVERIFY( QFile::exists( m_dir.path() ) ); + QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); + + const QString testHostname = QStringLiteral( "tubophone.calamares.io" ); + QVERIFY( writeFileEtcHosts( testHostname ) ); + QVERIFY( QFile::exists( m_dir.filePath( "etc/hosts" ) ) ); + // The skeleton contains %1 which has the hostname substituted in, so we lose two, + // and the rest of the blabla is 145 (the "standard" part) and 34 (the "for this host" part) + QCOMPARE( QFileInfo( m_dir.filePath( "etc/hosts" ) ).size(), 145 + 34 + testHostname.length() - 2 ); +} + +void +UsersTests::testHostnamed() +{ + // Since the service might not be running (e.g. non-systemd systems, + // FreeBSD, docker, ..) we're not going to fail a test here. + // There's also the permissions problem to think of. But if we're + // root, assume it will succeed. + if ( geteuid() != 0 ) + { + QEXPECT_FAIL( "", "Hostname changes are access-controlled", Continue ); + } + QVERIFY( setSystemdHostname( QStringLiteral( "tubophone.calamares.io" ) ) ); + if ( !m_originalHostName.isEmpty() ) + { + // If the previous test succeeded (to change the hostname to something bogus) + // then this one should, also; or, if the previous one failed, then this + // changes to whatever-the-hostname-is, and systemd dbus seems to call that + // a success, as well (since nothing changes). So no failure-expectation here. + // QEXPECT_FAIL( "", "Hostname changes are access-controlled (restore)", Continue ); + QVERIFY( setSystemdHostname( m_originalHostName ) ); + } +} + + +void +UsersTests::cleanup() +{ + if ( QTest::currentTestFailed() ) + { + m_dir.setAutoRemove( false ); + } +} + + +QTEST_GUILESS_MAIN( UsersTests ) + +#include "utils/moc-warnings.h" + +#include "TestSetHostNameJob.moc" diff --git a/src/modules/users/Tests.cpp b/src/modules/users/Tests.cpp index 196fd9d68..b7835251f 100644 --- a/src/modules/users/Tests.cpp +++ b/src/modules/users/Tests.cpp @@ -1,144 +1,522 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ -#include "SetHostNameJob.h" +#include "Config.h" -// Implementation details -extern bool setFileHostname( const QString& ); -extern bool writeFileEtcHosts( const QString& ); -extern bool setSystemdHostname( const QString& ); - -#include "GlobalStorage.h" #include "JobQueue.h" -#include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Yaml.h" -#include #include -class UsersTests : public QObject +// Implementation details +extern void setConfigurationDefaultGroups( const QVariantMap& map, QList< GroupDescription >& defaultGroups ); +extern HostNameAction getHostNameAction( const QVariantMap& configurationMap ); +extern bool addPasswordCheck( const QString& key, const QVariant& value, PasswordCheckList& passwordChecks ); +extern QString +makeHostnameSuggestion( const QString& templateString, const QStringList& fullNameParts, const QString& loginName ); + +/** @brief Test Config object methods and internals + * + */ +class UserTests : public QObject { Q_OBJECT public: - UsersTests(); - virtual ~UsersTests() {} + UserTests(); + ~UserTests() override {} private Q_SLOTS: void initTestCase(); - void testEtcHostname(); - void testEtcHosts(); - void testHostnamed(); + // Derpy test for getting and setting regular values + void testGetSet(); - void cleanup(); + void testDefaultGroups(); + void testDefaultGroupsYAML_data(); + void testDefaultGroupsYAML(); -private: - QTemporaryDir m_dir; + void testHostActions_data(); + void testHostActions(); + void testHostActions2(); + void testHostSuggestions_data(); + void testHostSuggestions(); + + void testPasswordChecks(); + void testUserPassword(); + + void testAutoLogin_data(); + void testAutoLogin(); + + void testUserYAML_data(); + void testUserYAML(); }; -UsersTests::UsersTests() - : m_dir( QStringLiteral( "/tmp/calamares-usertest" ) ) -{ -} +UserTests::UserTests() {} void -UsersTests::initTestCase() +UserTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Users test started."; - cDebug() << "Test dir" << m_dir.path(); - // Ensure we have a system object, expect it to be a "bogus" one - CalamaresUtils::System* system = CalamaresUtils::System::instance(); - QVERIFY( system ); - QVERIFY( system->doChroot() ); - - // Ensure we have a system-wide GlobalStorage with /tmp as root if ( !Calamares::JobQueue::instance() ) { - cDebug() << "Creating new JobQueue"; (void)new Calamares::JobQueue(); } - Calamares::GlobalStorage* gs - = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; - QVERIFY( gs ); - gs->insert( "rootMountPoint", m_dir.path() ); } void -UsersTests::testEtcHostname() +UserTests::testGetSet() { - cDebug() << "Test dir" << m_dir.path(); + Config c; - QVERIFY( QFile::exists( m_dir.path() ) ); - QVERIFY( !QFile::exists( m_dir.filePath( "etc" ) ) ); - - // Doesn't create intermediate directories - QVERIFY( !setFileHostname( QStringLiteral( "tubophone.calamares.io" ) ) ); - - QVERIFY( CalamaresUtils::System::instance()->createTargetDirs( "/etc" ) ); - QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); - - // Does write the file - QVERIFY( setFileHostname( QStringLiteral( "tubophone.calamares.io" ) ) ); - QVERIFY( QFile::exists( m_dir.filePath( "etc/hostname" ) ) ); - - // 22 for the test string, above, and 1 for the newline - QCOMPARE( QFileInfo( m_dir.filePath( "etc/hostname" ) ).size(), 22 + 1 ); -} - -void -UsersTests::testEtcHosts() -{ - // Assume previous tests did their work - QVERIFY( QFile::exists( m_dir.path() ) ); - QVERIFY( QFile::exists( m_dir.filePath( "etc" ) ) ); - - QVERIFY( writeFileEtcHosts( QStringLiteral( "tubophone.calamares.io" ) ) ); - QVERIFY( QFile::exists( m_dir.filePath( "etc/hosts" ) ) ); - // The skeleton contains %1 which has the hostname substituted in, so we lose two, - // and the rest of the blabla is 150 (according to Python) - QCOMPARE( QFileInfo( m_dir.filePath( "etc/hosts" ) ).size(), 150 + 22 - 2 ); -} - -void -UsersTests::testHostnamed() -{ - // Since the service might not be running (e.g. non-systemd systems, - // FreeBSD, docker, ..) we're not going to fail a test here. - // There's also the permissions problem to think of. - QEXPECT_FAIL( "", "Hostname changes are access-controlled", Continue ); - QVERIFY( setSystemdHostname( "tubophone.calamares.io" ) ); -} - - -void -UsersTests::cleanup() -{ - if ( QTest::currentTestFailed() ) { - m_dir.setAutoRemove( false ); + const QString sh( "/bin/sh" ); + QCOMPARE( c.userShell(), QString() ); + c.setUserShell( sh ); + QCOMPARE( c.userShell(), sh ); + c.setUserShell( sh + sh ); + QCOMPARE( c.userShell(), sh + sh ); + + const QString badsh( "bash" ); // Not absolute, that's bad + c.setUserShell( badsh ); // .. so unchanged + QCOMPARE( c.userShell(), sh + sh ); // what was set previously + + // Explicit set to empty is ok + c.setUserShell( QString() ); + QCOMPARE( c.userShell(), QString() ); + } + { + const QString al( "autolg" ); + QCOMPARE( c.autoLoginGroup(), QString() ); + c.setAutoLoginGroup( al ); + QCOMPARE( c.autoLoginGroup(), al ); + QVERIFY( !c.doAutoLogin() ); + c.setAutoLogin( true ); + QVERIFY( c.doAutoLogin() ); + QCOMPARE( c.autoLoginGroup(), al ); + } + { + const QString su( "sudogrp" ); + QCOMPARE( c.sudoersGroup(), QString() ); + c.setSudoersGroup( su ); + QCOMPARE( c.sudoersGroup(), su ); + } + { + const QString ful( "Jan-Jaap Karel Kees" ); + const QString lg( "jjkk" ); + QCOMPARE( c.fullName(), QString() ); + QCOMPARE( c.loginName(), QString() ); + QVERIFY( c.loginNameStatus().isEmpty() ); // empty login name is ok + c.setLoginName( lg ); + c.setFullName( ful ); + QVERIFY( c.loginNameStatus().isEmpty() ); // now it's still ok + QCOMPARE( c.loginName(), lg ); + QCOMPARE( c.fullName(), ful ); + } + // Test forbidden login names + { + QVERIFY( c.forbiddenLoginNames().contains( QStringLiteral( "root" ) ) ); + QVERIFY( c.loginNameStatus().isEmpty() ); // it's ok now + c.setLoginName( "root" ); + QVERIFY( !c.loginNameStatus().isEmpty() ); // can't be root } } -QTEST_GUILESS_MAIN( UsersTests ) +void +UserTests::testDefaultGroups() +{ + { + QList< GroupDescription > groups; + QVariantMap hweelGroup; + QVERIFY( groups.isEmpty() ); + hweelGroup.insert( "defaultGroups", QStringList { "hweel" } ); + setConfigurationDefaultGroups( hweelGroup, groups ); + QCOMPARE( groups.count(), 1 ); + QVERIFY( groups.contains( GroupDescription( "hweel" ) ) ); + } + + { + QStringList desired { "wheel", "root", "operator" }; + QList< GroupDescription > groups; + QVariantMap threeGroup; + QVERIFY( groups.isEmpty() ); + threeGroup.insert( "defaultGroups", desired ); + setConfigurationDefaultGroups( threeGroup, groups ); + QCOMPARE( groups.count(), 3 ); + QVERIFY( !groups.contains( GroupDescription( "hweel" ) ) ); + for ( const auto& s : desired ) + { + QVERIFY( groups.contains( GroupDescription( s ) ) ); + } + } + + { + QList< GroupDescription > groups; + QVariantMap explicitEmpty; + QVERIFY( groups.isEmpty() ); + explicitEmpty.insert( "defaultGroups", QStringList() ); + setConfigurationDefaultGroups( explicitEmpty, groups ); + QCOMPARE( groups.count(), 0 ); + } + + { + QList< GroupDescription > groups; + QVariantMap missing; + QVERIFY( groups.isEmpty() ); + setConfigurationDefaultGroups( missing, groups ); + QCOMPARE( groups.count(), 6 ); // because of fallback! + QVERIFY( groups.contains( GroupDescription( "lp", false, GroupDescription::SystemGroup {} ) ) ); + } + + { + QList< GroupDescription > groups; + QVariantMap typeMismatch; + QVERIFY( groups.isEmpty() ); + typeMismatch.insert( "defaultGroups", 1 ); + setConfigurationDefaultGroups( typeMismatch, groups ); + QCOMPARE( groups.count(), 6 ); // because of fallback! + QVERIFY( groups.contains( GroupDescription( "lp", false, GroupDescription::SystemGroup {} ) ) ); + } +} + +void +UserTests::testDefaultGroupsYAML_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< int >( "count" ); + QTest::addColumn< QString >( "group" ); + + QTest::newRow( "users.conf" ) << "users.conf" << 7 << "video"; + QTest::newRow( "dashed list" ) << "tests/4-audio.conf" << 4 << "audio"; + QTest::newRow( "blocked list" ) << "tests/3-wing.conf" << 3 << "wing"; + QTest::newRow( "issue 1523" ) << "tests/5-issue-1523.conf" << 4 << "foobar"; +} + +void +UserTests::testDefaultGroupsYAML() +{ + if ( !Calamares::JobQueue::instance() ) + { + (void)new Calamares::JobQueue(); + } + + QFETCH( QString, filename ); + QFETCH( int, count ); + QFETCH( QString, group ); + + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + QVERIFY( map.count() > 0 ); + + Config c; + c.setConfigurationMap( map ); + + QCOMPARE( c.defaultGroups().count(), count ); + QVERIFY( c.defaultGroups().contains( group ) ); +} + + +void +UserTests::testHostActions_data() +{ + QTest::addColumn< bool >( "set" ); + QTest::addColumn< QString >( "string" ); + QTest::addColumn< int >( "result" ); + + QTest::newRow( "unset " ) << false << QString() << int( HostNameAction::EtcHostname ); + QTest::newRow( "empty " ) << true << QString() << int( HostNameAction::EtcHostname ); + QTest::newRow( "bad " ) << true << QString( "derp" ) << int( HostNameAction::EtcHostname ); + QTest::newRow( "none " ) << true << QString( "none" ) << int( HostNameAction::None ); + QTest::newRow( "systemd" ) << true << QString( "Hostnamed" ) << int( HostNameAction::SystemdHostname ); + QTest::newRow( "etc(1) " ) << true << QString( "etcfile" ) << int( HostNameAction::EtcHostname ); + QTest::newRow( "etc(2) " ) << true << QString( "etc" ) << int( HostNameAction::EtcHostname ); + QTest::newRow( "etc-bad" ) + << true << QString( "etchost" ) + << int( HostNameAction::EtcHostname ); // This isn't a valid name, but defaults to EtcHostname + QTest::newRow( "ci-sysd" ) << true << QString( "hOsTnaMed" ) + << int( HostNameAction::SystemdHostname ); // Case-insensitive + QTest::newRow( "trbs " ) << true << QString( "transient" ) << int( HostNameAction::Transient ); + QTest::newRow( "ci-trns" ) << true << QString( "trANSient" ) << int( HostNameAction::Transient ); +} + +void +UserTests::testHostActions() +{ + QFETCH( bool, set ); + QFETCH( QString, string ); + QFETCH( int, result ); + + QVariantMap m; + if ( set ) + { + m.insert( "location", string ); + } + // action is independent of writeHostsFile + QCOMPARE( getHostNameAction( m ), HostNameAction( result ) ); + m.insert( "writeHostsFile", false ); + QCOMPARE( getHostNameAction( m ), HostNameAction( result ) ); + m.insert( "writeHostsFile", true ); + QCOMPARE( getHostNameAction( m ), HostNameAction( result ) ); +} + +void +UserTests::testHostActions2() +{ + Config c; + QVariantMap legacy; + + // Test defaults + c.setConfigurationMap( legacy ); + QCOMPARE( c.hostnameAction(), HostNameAction::EtcHostname ); + QCOMPARE( c.writeEtcHosts(), true ); + + legacy.insert( "writeHostsFile", false ); + legacy.insert( "setHostname", "Hostnamed" ); + c.setConfigurationMap( legacy ); + QCOMPARE( c.hostnameAction(), HostNameAction::SystemdHostname ); + QCOMPARE( c.writeEtcHosts(), false ); +} + + +void +UserTests::testHostSuggestions_data() +{ + QTest::addColumn< QString >( "templateString" ); + QTest::addColumn< QString >( "result" ); + + QTest::newRow( "unset " ) << QString() << QString(); + QTest::newRow( "const " ) << QStringLiteral( "derp" ) << QStringLiteral( "derp" ); + QTest::newRow( "escaped" ) << QStringLiteral( "$$" ) << QString(); // Because invalid + QTest::newRow( "default" ) << QStringLiteral( "${first}-pc" ) + << QStringLiteral( "chuck-pc" ); // Avoid ${product} because it's DMI-based + QTest::newRow( "full " ) << QStringLiteral( "${name}" ) << QStringLiteral( "chuckyeager" ); + QTest::newRow( "login+ " ) << QStringLiteral( "${login}-${first}" ) << QStringLiteral( "bill-chuck" ); + // This is a bit dodgy: assumes CPU architecture of the testing host + QTest::newRow( " cpu " ) << QStringLiteral( "${cpu}X" ) + << QStringLiteral( "x8664X" ); // Assume we don't test on non-amd64 + // These have X X in the template to indicate that they are bogus. Mostly we want + // to see what the template engine does for these. + QTest::newRow( "@prod " ) << QStringLiteral( "X${product}X" ) << QString(); + QTest::newRow( "@prod2 " ) << QStringLiteral( "X${product2}X" ) << QString(); + QTest::newRow( "@host " ) << QStringLiteral( "X${host}X" ) << QString(); +} + +void +UserTests::testHostSuggestions() +{ + const QStringList fullName { "Chuck", "Yeager" }; + const QString login { "bill" }; + + QFETCH( QString, templateString ); + QFETCH( QString, result ); + + if ( templateString.startsWith( 'X' ) && templateString.endsWith( 'X' ) ) + { + QEXPECT_FAIL( "", "Test is too host-specific", Continue ); + cWarning() << Logger::SubEntry << "Next test" << templateString << "->" + << makeHostnameSuggestion( templateString, fullName, login ); + } + QCOMPARE( makeHostnameSuggestion( templateString, fullName, login ), result ); +} + + +void +UserTests::testPasswordChecks() +{ + { + PasswordCheckList l; + QCOMPARE( l.length(), 0 ); + QVERIFY( !addPasswordCheck( "nonempty", QVariant( false ), l ) ); // a silly setting + QCOMPARE( l.length(), 0 ); + QVERIFY( addPasswordCheck( "nonempty", QVariant( true ), l ) ); + QCOMPARE( l.length(), 1 ); + } +} + +void +UserTests::testUserPassword() +{ + if ( !Calamares::JobQueue::instance() ) + { + (void)new Calamares::JobQueue( nullptr ); + } + + { + Config c; + + QVERIFY( c.userPassword().isEmpty() ); + QVERIFY( c.userPasswordSecondary().isEmpty() ); + // There are no validity checks, so no check for nonempty + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + + c.setUserPassword( "bogus" ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Invalid ); + QCOMPARE( c.userPassword(), "bogus" ); + c.setUserPasswordSecondary( "bogus" ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + } + + { + Config c; + + QVariantMap m; + m.insert( "allowWeakPasswords", true ); + m.insert( "allowWeakPasswordsDefault", true ); + m.insert( "defaultGroups", QStringList { "wheel" } ); + + QVariantMap pwreq; + pwreq.insert( "nonempty", true ); + pwreq.insert( "minLength", 6 ); + m.insert( "passwordRequirements", pwreq ); + + c.setConfigurationMap( m ); + + QVERIFY( c.userPassword().isEmpty() ); + QVERIFY( c.userPasswordSecondary().isEmpty() ); + // There is now a nonempty check, but weak passwords are ok + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); + + c.setUserPassword( "bogus" ); + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); + c.setUserPasswordSecondary( "bogus" ); + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Weak ) ); + + QVERIFY( !c.requireStrongPasswords() ); + c.setRequireStrongPasswords( true ); + QVERIFY( c.requireStrongPasswords() ); + // Now changed requirements make the password invalid + QCOMPARE( c.userPassword(), "bogus" ); + QCOMPARE( c.userPasswordValidity(), int( Config::PasswordValidity::Invalid ) ); + } + + { + Config c; + QVERIFY( c.userPassword().isEmpty() ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + + QSignalSpy spy_pwChanged( &c, &Config::userPasswordChanged ); + QSignalSpy spy_pwSecondaryChanged( &c, &Config::userPasswordSecondaryChanged ); + QSignalSpy spy_pwStatusChanged( &c, &Config::userPasswordStatusChanged ); + + c.setUserPassword( "bogus" ); + c.setUserPassword( "bogus" ); + QCOMPARE( spy_pwChanged.count(), 1 ); + QCOMPARE( spy_pwStatusChanged.count(), 1 ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Invalid ); + c.setUserPassword( "sugob" ); + c.setUserPasswordSecondary( "sugob" ); + QCOMPARE( spy_pwChanged.count(), 2 ); + QCOMPARE( spy_pwSecondaryChanged.count(), 1 ); + QCOMPARE( spy_pwStatusChanged.count(), 3 ); + QCOMPARE( c.userPasswordValidity(), Config::PasswordValidity::Valid ); + } +} + +void +UserTests::testAutoLogin_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< bool >( "autoLoginIsSet" ); + QTest::addColumn< QString >( "autoLoginGroupName" ); + + QTest::newRow( "old, old" ) << "tests/6a-issue-1672.conf" << true << "derp"; + QTest::newRow( "old, new" ) << "tests/6b-issue-1672.conf" << true << "derp"; + QTest::newRow( "new, old" ) << "tests/6c-issue-1672.conf" << true << "derp"; + QTest::newRow( "new, new" ) << "tests/6d-issue-1672.conf" << true << "derp"; + QTest::newRow( "default" ) << "tests/6e-issue-1672.conf" << false << QString(); +} + +void +UserTests::testAutoLogin() +{ + QFETCH( QString, filename ); + QFETCH( bool, autoLoginIsSet ); + QFETCH( QString, autoLoginGroupName ); + + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + QVERIFY( map.count() > 0 ); + + Config c; + c.setConfigurationMap( map ); + + QCOMPARE( c.doAutoLogin(), autoLoginIsSet ); + QCOMPARE( c.autoLoginGroup(), autoLoginGroupName ); +} + +void +UserTests::testUserYAML_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< QString >( "shell" ); + + QTest::newRow( "old, unset " ) << "tests/7ao-shell.conf" + << "/bin/bash"; + QTest::newRow( "old, empty " ) << "tests/7bo-shell.conf" + << ""; + QTest::newRow( "old, relative" ) << "tests/7co-shell.conf" + << "/bin/ls"; // Setting is ignored + QTest::newRow( "old, invalid " ) << "tests/7do-shell.conf" + << ""; + QTest::newRow( "old, absolute" ) << "tests/7eo-shell.conf" + << "/usr/bin/dash"; + + QTest::newRow( "new, unset " ) << "tests/7an-shell.conf" + << "/bin/bash"; + QTest::newRow( "new, empty " ) << "tests/7bn-shell.conf" + << ""; + QTest::newRow( "new, relative" ) << "tests/7cn-shell.conf" + << "/bin/ls"; // Setting is ignored + QTest::newRow( "new, invalid " ) << "tests/7dn-shell.conf" + << ""; + QTest::newRow( "new, absolute" ) << "tests/7en-shell.conf" + << "/usr/bin/dash"; +} + +void +UserTests::testUserYAML() +{ + Config c; + c.setUserShell( QStringLiteral( "/bin/ls" ) ); + + QFETCH( QString, filename ); + QFETCH( QString, shell ); + + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + QVERIFY( map.count() > 0 ); + + QCOMPARE( c.userShell(), QStringLiteral( "/bin/ls" ) ); + c.setConfigurationMap( map ); + QCOMPARE( c.userShell(), shell ); +} + + +QTEST_GUILESS_MAIN( UserTests ) #include "utils/moc-warnings.h" diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index a18d3a82d..7936e9fc0 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -1,40 +1,27 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2019, Collabora Ltd - * Copyright 2020, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-FileCopyrightText: 2020 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "UsersPage.h" +#include "Config.h" #include "ui_page_usersetup.h" -#include "CreateUserJob.h" -#include "SetHostNameJob.h" -#include "SetPasswordJob.h" - #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" - #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" @@ -44,95 +31,149 @@ #include #include #include -#include -#include -static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); -static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); -static constexpr const int USERNAME_MAX_LENGTH = 31; -static constexpr const int HOSTNAME_MIN_LENGTH = 2; -static constexpr const int HOSTNAME_MAX_LENGTH = 63; - -/** @brief How bad is the error for labelError() ? */ -enum class Badness -{ - Fatal, - Warning -}; - -/** Add an error message and pixmap to a label. */ +/** @brief Add an error message and pixmap to a label. */ static inline void -labelError( QLabel* pix, QLabel* label, const QString& message, Badness bad = Badness::Fatal ) +labelError( QLabel* pix, QLabel* label, CalamaresUtils::ImageType icon, const QString& message ) { label->setText( message ); - pix->setPixmap( CalamaresUtils::defaultPixmap( ( bad == Badness::Fatal ) ? CalamaresUtils::StatusError - : CalamaresUtils::StatusWarning, - CalamaresUtils::Original, - label->size() ) ); + pix->setPixmap( CalamaresUtils::defaultPixmap( icon, CalamaresUtils::Original, label->size() ) ); } -/** Clear error, indicate OK on a label. */ +/** @brief Clear error, set happy pixmap on a label to indicate "ok". */ static inline void labelOk( QLabel* pix, QLabel* label ) { label->clear(); - pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, label->size() ) ); + pix->setPixmap( + CalamaresUtils::defaultPixmap( CalamaresUtils::StatusOk, CalamaresUtils::Original, label->size() ) ); } -UsersPage::UsersPage( QWidget* parent ) +/** @brief Sets error or ok on a label depending on @p status and @p value + * + * - An **empty** @p value gets no message and no icon. + * - A non-empty @p value, with an **empty** @p status gets an "ok". + * - A non-empty @p value with a non-empty @p status gets an error indicator. + */ +static inline void +labelStatus( QLabel* pix, QLabel* label, const QString& value, const QString& status ) +{ + if ( status.isEmpty() ) + { + if ( value.isEmpty() ) + { + // This is different from labelOK() because no checkmark is shown + label->clear(); + pix->clear(); + } + else + { + labelOk( pix, label ); + } + } + else + { + labelError( pix, label, CalamaresUtils::ImageType::StatusError, status ); + } +} + +UsersPage::UsersPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_UserSetup ) - , m_readyFullName( false ) - , m_readyUsername( false ) - , m_readyHostname( false ) - , m_readyPassword( false ) - , m_readyRootPassword( false ) - , m_writeRootPassword( true ) + , m_config( config ) { ui->setupUi( this ); // Connect signals and slots - connect( ui->textBoxFullName, &QLineEdit::textEdited, this, &UsersPage::onFullNameTextEdited ); - connect( ui->textBoxUsername, &QLineEdit::textEdited, this, &UsersPage::onUsernameTextEdited ); - connect( ui->textBoxHostname, &QLineEdit::textEdited, this, &UsersPage::onHostnameTextEdited ); - connect( ui->textBoxUserPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged ); - connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged ); - connect( ui->textBoxRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged ); - connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged ); - connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int ) { - onPasswordTextChanged( ui->textBoxUserPassword->text() ); - onRootPasswordTextChanged( ui->textBoxRootPassword->text() ); - checkReady( isReady() ); - } ); - connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, [this]( int checked ) { - /* When "reuse" is checked, hide the fields for explicitly - * entering the root password. However, if we're going to - * disable the root password anyway, hide them all regardless of - * the checkbox -- so when writeRoot is false, checked needs - * to be true, to hide them all. - */ - if ( !m_writeRootPassword ) - { - checked = true; - } - ui->labelChooseRootPassword->setVisible( !checked ); - ui->labelRootPassword->setVisible( !checked ); - ui->labelRootPasswordError->setVisible( !checked ); - ui->textBoxRootPassword->setVisible( !checked ); - ui->textBoxVerifiedRootPassword->setVisible( !checked ); - checkReady( isReady() ); - } ); + ui->textBoxUserPassword->setText( config->userPassword() ); + connect( ui->textBoxUserPassword, &QLineEdit::textChanged, config, &Config::setUserPassword ); + connect( config, &Config::userPasswordChanged, ui->textBoxUserPassword, &QLineEdit::setText ); + ui->textBoxUserVerifiedPassword->setText( config->userPasswordSecondary() ); + connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged, config, &Config::setUserPasswordSecondary ); + connect( config, &Config::userPasswordSecondaryChanged, ui->textBoxUserVerifiedPassword, &QLineEdit::setText ); + connect( config, &Config::userPasswordStatusChanged, this, &UsersPage::reportUserPasswordStatus ); - m_customUsername = false; - m_customHostname = false; + ui->textBoxRootPassword->setText( config->rootPassword() ); + connect( ui->textBoxRootPassword, &QLineEdit::textChanged, config, &Config::setRootPassword ); + connect( config, &Config::rootPasswordChanged, ui->textBoxRootPassword, &QLineEdit::setText ); + ui->textBoxVerifiedRootPassword->setText( config->rootPasswordSecondary() ); + connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged, config, &Config::setRootPasswordSecondary ); + connect( config, &Config::rootPasswordSecondaryChanged, ui->textBoxVerifiedRootPassword, &QLineEdit::setText ); + connect( config, &Config::rootPasswordStatusChanged, this, &UsersPage::reportRootPasswordStatus ); - setWriteRootPassword( true ); - ui->checkBoxReusePassword->setChecked( true ); - ui->checkBoxValidatePassword->setChecked( true ); + ui->textBoxFullName->setText( config->fullName() ); + connect( ui->textBoxFullName, &QLineEdit::textEdited, config, &Config::setFullName ); + connect( config, &Config::fullNameChanged, this, &UsersPage::onFullNameTextEdited ); - setPasswordCheckboxVisible( false ); + // If the hostname is going to be written out, then show the field + if ( ( m_config->hostnameAction() == HostNameAction::EtcHostname ) + || ( m_config->hostnameAction() == HostNameAction::SystemdHostname ) ) + { + ui->textBoxHostname->setText( config->hostname() ); + connect( ui->textBoxHostname, &QLineEdit::textEdited, config, &Config::setHostName ); + connect( config, + &Config::hostnameChanged, + [ this ]( const QString& name ) + { + if ( !ui->textBoxHostname->hasFocus() ) + { + ui->textBoxHostname->setText( name ); + } + } ); + connect( config, &Config::hostnameStatusChanged, this, &UsersPage::reportHostNameStatus ); + } + else + { + // Need to hide the hostname parts individually because there's no widget-group + ui->hostnameLabel->hide(); + ui->labelHostname->hide(); + ui->textBoxHostname->hide(); + ui->labelHostnameError->hide(); + } + + ui->textBoxLoginName->setText( config->loginName() ); + connect( ui->textBoxLoginName, &QLineEdit::textEdited, config, &Config::setLoginName ); + connect( config, &Config::loginNameChanged, ui->textBoxLoginName, &QLineEdit::setText ); + connect( config, &Config::loginNameStatusChanged, this, &UsersPage::reportLoginNameStatus ); + + ui->checkBoxDoAutoLogin->setChecked( m_config->doAutoLogin() ); + connect( ui->checkBoxDoAutoLogin, + &QCheckBox::stateChanged, + this, + [ this ]( int checked ) { m_config->setAutoLogin( checked != Qt::Unchecked ); } ); + connect( config, &Config::autoLoginChanged, ui->checkBoxDoAutoLogin, &QCheckBox::setChecked ); + + ui->checkBoxReusePassword->setVisible( m_config->writeRootPassword() ); + ui->checkBoxReusePassword->setChecked( m_config->reuseUserPasswordForRoot() ); + if ( m_config->writeRootPassword() ) + { + connect( config, &Config::reuseUserPasswordForRootChanged, ui->checkBoxReusePassword, &QCheckBox::setChecked ); + connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, &UsersPage::onReuseUserPasswordChanged ); + } + + ui->checkBoxRequireStrongPassword->setVisible( m_config->permitWeakPasswords() ); + ui->checkBoxRequireStrongPassword->setChecked( m_config->requireStrongPasswords() ); + if ( m_config->permitWeakPasswords() ) + { + connect( ui->checkBoxRequireStrongPassword, + &QCheckBox::stateChanged, + this, + [ this ]( int checked ) { m_config->setRequireStrongPasswords( checked != Qt::Unchecked ); } ); + connect( + config, &Config::requireStrongPasswordsChanged, ui->checkBoxRequireStrongPassword, &QCheckBox::setChecked ); + } CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate ); + + onReuseUserPasswordChanged( m_config->reuseUserPasswordForRoot() ); + onFullNameTextEdited( m_config->fullName() ); + reportLoginNameStatus( m_config->loginNameStatus() ); + reportHostNameStatus( m_config->hostnameStatus() ); + + ui->textBoxLoginName->setEnabled( m_config->isEditable( "loginName" ) ); + ui->textBoxFullName->setEnabled( m_config->isEditable( "fullName" ) ); + + retranslate(); } UsersPage::~UsersPage() @@ -146,101 +187,21 @@ UsersPage::retranslate() ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) { - ui->textBoxUsername->setToolTip( tr( "If more than one person will " - "use this computer, you can create multiple " - "accounts after setup." ) ); + ui->textBoxLoginName->setToolTip( tr( "If more than one person will " + "use this computer, you can create multiple " + "accounts after setup." ) ); } else { - ui->textBoxUsername->setToolTip( tr( "If more than one person will " - "use this computer, you can create multiple " - "accounts after installation." ) ); - } - // Re-do password checks (with output messages) as well. - // .. the password-checking methods get their values from the text boxes, - // not from their parameters. - onPasswordTextChanged( QString() ); - onRootPasswordTextChanged( QString() ); -} - - -bool -UsersPage::isReady() -{ - bool readyFields = m_readyFullName && m_readyHostname && m_readyPassword && m_readyUsername; - if ( !m_writeRootPassword || ui->checkBoxReusePassword->isChecked() ) - { - return readyFields; + ui->textBoxLoginName->setToolTip( tr( "If more than one person will " + "use this computer, you can create multiple " + "accounts after installation." ) ); } - return readyFields && m_readyRootPassword; -} - -QString -UsersPage::getHostname() const -{ - return ui->textBoxHostname->text(); -} - -QString -UsersPage::getRootPassword() const -{ - if ( m_writeRootPassword ) - { - if ( ui->checkBoxReusePassword->isChecked() ) - { - return ui->textBoxUserPassword->text(); - } - else - { - return ui->textBoxRootPassword->text(); - } - } - else - { - return QString(); - } -} - -QPair< QString, QString > -UsersPage::getUserPassword() const -{ - return QPair< QString, QString >( ui->textBoxUsername->text(), ui->textBoxUserPassword->text() ); -} - -QList< Calamares::job_ptr > -UsersPage::createJobs( const QStringList& defaultGroupsList ) -{ - QList< Calamares::job_ptr > list; - if ( !isReady() ) - { - return list; - } - - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - - Calamares::Job* j; - j = new CreateUserJob( ui->textBoxUsername->text(), - ui->textBoxFullName->text().isEmpty() ? ui->textBoxUsername->text() - : ui->textBoxFullName->text(), - ui->checkBoxAutoLogin->isChecked(), - defaultGroupsList ); - list.append( Calamares::job_ptr( j ) ); - - if ( m_writeRootPassword ) - { - gs->insert( "reuseRootPassword", ui->checkBoxReusePassword->isChecked() ); - } - gs->insert( "hostname", ui->textBoxHostname->text() ); - if ( ui->checkBoxAutoLogin->isChecked() ) - { - gs->insert( "autologinUser", ui->textBoxUsername->text() ); - } - - gs->insert( "username", ui->textBoxUsername->text() ); - gs->insert( "password", CalamaresUtils::obscure( ui->textBoxUserPassword->text() ) ); - - return list; + const auto up = m_config->userPasswordStatus(); + reportUserPasswordStatus( up.first, up.second ); + const auto rp = m_config->rootPasswordStatus(); + reportRootPasswordStatus( rp.first, rp.second ); } @@ -248,349 +209,81 @@ void UsersPage::onActivate() { ui->textBoxFullName->setFocus(); - onPasswordTextChanged( QString() ); - onRootPasswordTextChanged( QString() ); + const auto up = m_config->userPasswordStatus(); + reportUserPasswordStatus( up.first, up.second ); + const auto rp = m_config->rootPasswordStatus(); + reportRootPasswordStatus( rp.first, rp.second ); } void -UsersPage::setWriteRootPassword( bool write ) +UsersPage::onFullNameTextEdited( const QString& fullName ) { - m_writeRootPassword = write; - ui->checkBoxReusePassword->setVisible( write ); -} - - -void -UsersPage::onFullNameTextEdited( const QString& textRef ) -{ - if ( textRef.isEmpty() ) - { - ui->labelFullNameError->clear(); - ui->labelFullName->clear(); - if ( !m_customUsername ) - { - ui->textBoxUsername->clear(); - } - if ( !m_customHostname ) - { - ui->textBoxHostname->clear(); - } - m_readyFullName = false; - } - else - { - ui->labelFullName->setPixmap( - CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, ui->labelFullName->size() ) ); - m_readyFullName = true; - fillSuggestions(); - } - checkReady( isReady() ); -} - -/** @brief Guess the machine's name - * - * If there is DMI data, use that; otherwise, just call the machine "-pc". - * Reads the DMI data just once. - */ -static QString -guessProductName() -{ - static bool tried = false; - static QString dmiProduct; - - if ( !tried ) - { - // yes validateHostnameText() but these files can be a mess - QRegExp dmirx( "[^a-zA-Z0-9]", Qt::CaseInsensitive ); - QFile dmiFile( QStringLiteral( "/sys/devices/virtual/dmi/id/product_name" ) ); - - if ( dmiFile.exists() && dmiFile.open( QIODevice::ReadOnly ) ) - { - dmiProduct = QString::fromLocal8Bit( dmiFile.readAll().simplified().data() ) - .toLower() - .replace( dmirx, " " ) - .remove( ' ' ); - } - if ( dmiProduct.isEmpty() ) - { - dmiProduct = QStringLiteral( "-pc" ); - } - tried = true; - } - return dmiProduct; + labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString() ); } void -UsersPage::fillSuggestions() +UsersPage::reportLoginNameStatus( const QString& status ) { - QString fullName = ui->textBoxFullName->text(); - QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); - QString cleanName = CalamaresUtils::removeDiacritics( fullName ).toLower().replace( rx, " " ).simplified(); - QStringList cleanParts = cleanName.split( ' ' ); - - if ( !m_customUsername ) - { - if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() ) - { - QString usernameSuggestion = cleanParts.first(); - for ( int i = 1; i < cleanParts.length(); ++i ) - { - if ( !cleanParts.value( i ).isEmpty() ) - { - usernameSuggestion.append( cleanParts.value( i ).at( 0 ) ); - } - } - if ( USERNAME_RX.indexIn( usernameSuggestion ) != -1 ) - { - ui->textBoxUsername->setText( usernameSuggestion ); - validateUsernameText( usernameSuggestion ); - m_customUsername = false; - } - } - } - - if ( !m_customHostname ) - { - if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() ) - { - QString hostnameSuggestion; - QString productName = guessProductName(); - hostnameSuggestion = QString( "%1-%2" ).arg( cleanParts.first() ).arg( productName ); - if ( HOSTNAME_RX.indexIn( hostnameSuggestion ) != -1 ) - { - ui->textBoxHostname->setText( hostnameSuggestion ); - validateHostnameText( hostnameSuggestion ); - m_customHostname = false; - } - } - } + labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status ); } - void -UsersPage::onUsernameTextEdited( const QString& textRef ) +UsersPage::reportHostNameStatus( const QString& status ) { - m_customUsername = true; - validateUsernameText( textRef ); + labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostname(), status ); } - -void -UsersPage::validateUsernameText( const QString& textRef ) +static inline void +passwordStatus( QLabel* iconLabel, QLabel* messageLabel, int validity, const QString& message ) { - QString text( textRef ); - QRegExpValidator val_whole( USERNAME_RX ); - QRegExpValidator val_start( QRegExp( "[a-z_].*" ) ); // anchors are implicit in QRegExpValidator - int pos = -1; - - if ( text.isEmpty() ) + switch ( validity ) { - ui->labelUsernameError->clear(); - ui->labelUsername->clear(); - m_readyUsername = false; - } - else if ( text.length() > USERNAME_MAX_LENGTH ) - { - labelError( ui->labelUsername, ui->labelUsernameError, tr( "Your username is too long." ) ); - m_readyUsername = false; - } - else if ( val_start.validate( text, pos ) == QValidator::Invalid ) - { - labelError( ui->labelUsername, - ui->labelUsernameError, - tr( "Your username must start with a lowercase letter or underscore." ) ); - m_readyUsername = false; - } - else if ( val_whole.validate( text, pos ) == QValidator::Invalid ) - { - labelError( ui->labelUsername, - ui->labelUsernameError, - tr( "Only lowercase letters, numbers, underscore and hyphen are allowed." ) ); - m_readyUsername = false; - } - else - { - labelOk( ui->labelUsername, ui->labelUsernameError ); - m_readyUsername = true; - } - - emit checkReady( isReady() ); -} - - -void -UsersPage::onHostnameTextEdited( const QString& textRef ) -{ - m_customHostname = true; - validateHostnameText( textRef ); -} - - -void -UsersPage::validateHostnameText( const QString& textRef ) -{ - QString text = textRef; - QRegExpValidator val( HOSTNAME_RX ); - int pos = -1; - - if ( text.isEmpty() ) - { - ui->labelHostnameError->clear(); - ui->labelHostname->clear(); - m_readyHostname = false; - } - else if ( text.length() < HOSTNAME_MIN_LENGTH ) - { - labelError( ui->labelHostname, ui->labelHostnameError, tr( "Your hostname is too short." ) ); - m_readyHostname = false; - } - else if ( text.length() > HOSTNAME_MAX_LENGTH ) - { - labelError( ui->labelHostname, ui->labelHostnameError, tr( "Your hostname is too long." ) ); - m_readyHostname = false; - } - else if ( val.validate( text, pos ) == QValidator::Invalid ) - { - labelError( ui->labelHostname, - ui->labelHostnameError, - tr( "Only letters, numbers, underscore and hyphen are allowed." ) ); - m_readyHostname = false; - } - else - { - labelOk( ui->labelHostname, ui->labelHostnameError ); - m_readyHostname = true; - } - - emit checkReady( isReady() ); -} - -bool -UsersPage::checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message ) -{ - if ( pw1 != pw2 ) - { - labelError( badge, message, tr( "Your passwords do not match!" ) ); - return false; - } - else - { - bool failureIsFatal = ui->checkBoxValidatePassword->isChecked(); - bool failureFound = false; - - if ( m_passwordChecksChanged ) - { - std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); - m_passwordChecksChanged = false; - } - - for ( auto pc : m_passwordChecks ) - { - QString s = pc.filter( pw1 ); - - if ( !s.isEmpty() ) - { - labelError( badge, message, s, failureIsFatal ? Badness::Fatal : Badness::Warning ); - failureFound = true; - if ( failureIsFatal ) - { - return false; - } - } - } - - if ( !failureFound ) - { - labelOk( badge, message ); - } - - // Here, if failureFound is true then we've found **warnings**, - // which is ok to continue but the user should know. - return true; + case Config::PasswordValidity::Valid: + labelOk( iconLabel, messageLabel ); + break; + case Config::PasswordValidity::Weak: + labelError( iconLabel, messageLabel, CalamaresUtils::StatusWarning, message ); + break; + case Config::PasswordValidity::Invalid: + default: + labelError( iconLabel, messageLabel, CalamaresUtils::StatusError, message ); + break; } } void -UsersPage::onPasswordTextChanged( const QString& ) +UsersPage::reportRootPasswordStatus( int validity, const QString& message ) { - m_readyPassword = checkPasswordAcceptance( ui->textBoxUserPassword->text(), - ui->textBoxUserVerifiedPassword->text(), - ui->labelUserPassword, - ui->labelUserPasswordError ); - - emit checkReady( isReady() ); + passwordStatus( ui->labelRootPassword, ui->labelRootPasswordError, validity, message ); } void -UsersPage::onRootPasswordTextChanged( const QString& ) +UsersPage::reportUserPasswordStatus( int validity, const QString& message ) { - m_readyRootPassword = checkPasswordAcceptance( ui->textBoxRootPassword->text(), - ui->textBoxVerifiedRootPassword->text(), - ui->labelRootPassword, - ui->labelRootPasswordError ); - emit checkReady( isReady() ); + passwordStatus( ui->labelUserPassword, ui->labelUserPasswordError, validity, message ); } void -UsersPage::setPasswordCheckboxVisible( bool visible ) +UsersPage::onReuseUserPasswordChanged( const int checked ) { - ui->checkBoxValidatePassword->setVisible( visible ); -} - -void -UsersPage::setValidatePasswordDefault( bool checked ) -{ - ui->checkBoxValidatePassword->setChecked( checked ); - emit checkReady( isReady() ); -} - -void -UsersPage::setAutologinDefault( bool checked ) -{ - ui->checkBoxAutoLogin->setChecked( checked ); - emit checkReady( isReady() ); -} - -void -UsersPage::setReusePasswordDefault( bool checked ) -{ - ui->checkBoxReusePassword->setChecked( checked ); - emit checkReady( isReady() ); -} - -void -UsersPage::addPasswordCheck( const QString& key, const QVariant& value ) -{ - m_passwordChecksChanged = true; - - if ( key == "minLength" ) - { - add_check_minLength( m_passwordChecks, value ); - } - else if ( key == "maxLength" ) - { - add_check_maxLength( m_passwordChecks, value ); - } - else if ( key == "nonempty" ) - { - if ( value.toBool() ) - { - m_passwordChecks.push_back( - PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is empty" ); }, - []( const QString& s ) { return !s.isEmpty(); }, - PasswordCheck::Weight( 1 ) ) ); - } - } -#ifdef CHECK_PWQUALITY - else if ( key == "libpwquality" ) - { - add_check_libpwquality( m_passwordChecks, value ); - } -#endif // CHECK_PWQUALITY - else - { - cWarning() << "Unknown password-check key" << key; - } + // Pass the change on to config + m_config->setReuseUserPasswordForRoot( checked != Qt::Unchecked ); + /* When "reuse" is checked, hide the fields for explicitly + * entering the root password. However, if we're going to + * disable the root password anyway, hide them all regardless of + * the checkbox -- so when writeRoot is false, visible needs + * to be false, to hide them all. + * + * In principle this is only connected when writeRootPassword is @c true, + * but it is **always** called at least once in the constructor + * to set up initial visibility. + */ + const bool visible = m_config->writeRootPassword() ? !checked : false; + ui->labelChooseRootPassword->setVisible( visible ); + ui->labelRootPassword->setVisible( visible ); + ui->labelRootPasswordError->setVisible( visible ); + ui->textBoxRootPassword->setVisible( visible ); + ui->textBoxVerifiedRootPassword->setVisible( visible ); } diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 3382e9335..ed537540c 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -1,34 +1,25 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2007 Free Software Foundation, Inc. + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * * Portions from the Manjaro Installation Framework * by Roland Singer * Copyright (C) 2007 Free Software Foundation, Inc. * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef USERSPAGE_H #define USERSPAGE_H -#include "CheckPWQuality.h" -#include "Job.h" - #include +class Config; + class QLabel; namespace Ui @@ -40,74 +31,24 @@ class UsersPage : public QWidget { Q_OBJECT public: - explicit UsersPage( QWidget* parent = nullptr ); - virtual ~UsersPage(); - - bool isReady(); - - Calamares::JobList createJobs( const QStringList& defaultGroupsList ); + explicit UsersPage( Config* config, QWidget* parent = nullptr ); + ~UsersPage() override; void onActivate(); - void setWriteRootPassword( bool show ); - void setPasswordCheckboxVisible( bool visible ); - void setValidatePasswordDefault( bool checked ); - void setAutologinDefault( bool checked ); - void setReusePasswordDefault( bool checked ); - - /** @brief Process entries in the passwordRequirements config entry - * - * Called once for each item in the config entry, which should - * be a key-value pair. What makes sense as a value depends on - * the key. Supported keys are documented in users.conf. - */ - void addPasswordCheck( const QString& key, const QVariant& value ); - - ///@brief Hostname as entered / auto-filled - QString getHostname() const; - ///@brief Root password, depends on settings, may be empty - QString getRootPassword() const; - ///@brief User name and password - QPair< QString, QString > getUserPassword() const; - protected slots: void onFullNameTextEdited( const QString& ); - void fillSuggestions(); - void onUsernameTextEdited( const QString& ); - void validateUsernameText( const QString& ); - void onHostnameTextEdited( const QString& ); - void validateHostnameText( const QString& ); - void onPasswordTextChanged( const QString& ); - void onRootPasswordTextChanged( const QString& ); - -signals: - void checkReady( bool ); + void reportLoginNameStatus( const QString& ); + void reportHostNameStatus( const QString& ); + void onReuseUserPasswordChanged( const int ); + void reportUserPasswordStatus( int, const QString& ); + void reportRootPasswordStatus( int, const QString& ); private: - /** @brief Is the password acceptable? - * - * Checks the two copies of the password and places error messages in the - * given QLabels. Returns true (and clears the error messages) if the - * password is acceptable. - */ - bool checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message ); - void retranslate(); Ui::Page_UserSetup* ui; - - PasswordCheckList m_passwordChecks; - bool m_passwordChecksChanged = false; - - bool m_readyFullName; - bool m_readyUsername; - bool m_customUsername; - bool m_readyHostname; - bool m_customHostname; - bool m_readyPassword; - bool m_readyRootPassword; - - bool m_writeRootPassword; + Config* m_config; }; #endif // USERSPAGE_H diff --git a/src/modules/users/UsersViewStep.cpp b/src/modules/users/UsersViewStep.cpp index fe633b1c2..683673459 100644 --- a/src/modules/users/UsersViewStep.cpp +++ b/src/modules/users/UsersViewStep.cpp @@ -1,63 +1,35 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017-2018, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "UsersViewStep.h" -#include "SetHostNameJob.h" -#include "SetPasswordJob.h" +#include "Config.h" #include "UsersPage.h" +#include "GlobalStorage.h" +#include "JobQueue.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Variant.h" -#include "GlobalStorage.h" -#include "JobQueue.h" - CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersViewStepFactory, registerPlugin< UsersViewStep >(); ) -static const NamedEnumTable< SetHostNameJob::Action >& -hostnameActions() -{ - using Action = SetHostNameJob::Action; - - // *INDENT-OFF* - // clang-format off - static const NamedEnumTable< Action > names { - { QStringLiteral( "none" ), Action::None }, - { QStringLiteral( "etcfile" ), Action::EtcHostname }, - { QStringLiteral( "hostnamed" ), Action::SystemdHostname } - }; - // clang-format on - // *INDENT-ON* - - return names; -} - UsersViewStep::UsersViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_widget( new UsersPage() ) - , m_actions( SetHostNameJob::Action::None ) + , m_widget( nullptr ) + , m_config( new Config( this ) ) { - emit nextStatusChanged( true ); - connect( m_widget, &UsersPage::checkReady, this, &UsersViewStep::nextStatusChanged ); + connect( m_config, &Config::readyChanged, this, &UsersViewStep::nextStatusChanged ); + + emit nextStatusChanged( m_config->isReady() ); } @@ -80,6 +52,10 @@ UsersViewStep::prettyName() const QWidget* UsersViewStep::widget() { + if ( !m_widget ) + { + m_widget = new UsersPage( m_config ); + } return m_widget; } @@ -87,7 +63,7 @@ UsersViewStep::widget() bool UsersViewStep::isNextEnabled() const { - return m_widget->isReady(); + return m_config->isReady(); } @@ -112,114 +88,32 @@ UsersViewStep::isAtEnd() const } -QList< Calamares::job_ptr > +Calamares::JobList UsersViewStep::jobs() const { - return m_jobs; + return m_config->createJobs(); } void UsersViewStep::onActivate() { - m_widget->onActivate(); + if ( m_widget ) + { + m_widget->onActivate(); + } } void UsersViewStep::onLeave() { - m_jobs.clear(); - m_jobs.append( m_widget->createJobs( m_defaultGroups ) ); - - Calamares::Job* j; - - auto userPW = m_widget->getUserPassword(); - j = new SetPasswordJob( userPW.first, userPW.second ); - m_jobs.append( Calamares::job_ptr( j ) ); - - j = new SetPasswordJob( "root", m_widget->getRootPassword() ); - m_jobs.append( Calamares::job_ptr( j ) ); - - j = new SetHostNameJob( m_widget->getHostname(), m_actions ); - m_jobs.append( Calamares::job_ptr( j ) ); + m_config->finalizeGlobalStorage(); } void UsersViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - using CalamaresUtils::getBool; - - if ( configurationMap.contains( "defaultGroups" ) - && configurationMap.value( "defaultGroups" ).type() == QVariant::List ) - { - m_defaultGroups = configurationMap.value( "defaultGroups" ).toStringList(); - } - else - { - cWarning() << "Using fallback groups. Please check defaultGroups in users.conf"; - m_defaultGroups = QStringList { "lp", "video", "network", "storage", "wheel", "audio" }; - } - - if ( configurationMap.contains( "autologinGroup" ) - && configurationMap.value( "autologinGroup" ).type() == QVariant::String ) - { - Calamares::JobQueue::instance()->globalStorage()->insert( - "autologinGroup", configurationMap.value( "autologinGroup" ).toString() ); - } - - if ( configurationMap.contains( "sudoersGroup" ) - && configurationMap.value( "sudoersGroup" ).type() == QVariant::String ) - { - Calamares::JobQueue::instance()->globalStorage()->insert( "sudoersGroup", - configurationMap.value( "sudoersGroup" ).toString() ); - } - - bool setRootPassword = getBool( configurationMap, "setRootPassword", true ); - Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", setRootPassword ); - - m_widget->setWriteRootPassword( setRootPassword ); - m_widget->setAutologinDefault( getBool( configurationMap, "doAutologin", false ) ); - m_widget->setReusePasswordDefault( getBool( configurationMap, "doReusePassword", false ) ); - - if ( configurationMap.contains( "passwordRequirements" ) - && configurationMap.value( "passwordRequirements" ).type() == QVariant::Map ) - { - auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() ); - - for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i ) - { - m_widget->addPasswordCheck( i.key(), i.value() ); - } - } - - m_widget->setPasswordCheckboxVisible( getBool( configurationMap, "allowWeakPasswords", false ) ); - m_widget->setValidatePasswordDefault( !getBool( configurationMap, "allowWeakPasswordsDefault", false ) ); - - QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all - if ( configurationMap.contains( "userShell" ) ) - { - shell = CalamaresUtils::getString( configurationMap, "userShell" ); - } - // Now it might be explicitly set to empty, which is ok - - Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell ); - - using Action = SetHostNameJob::Action; - - QString hostnameActionString = CalamaresUtils::getString( configurationMap, "setHostname" ); - if ( hostnameActionString.isEmpty() ) - { - hostnameActionString = QStringLiteral( "EtcFile" ); - } - bool ok = false; - auto hostnameAction = hostnameActions().find( hostnameActionString, ok ); - if ( !ok ) - { - hostnameAction = Action::EtcHostname; - } - - Action hostsfileAction = getBool( configurationMap, "writeHostsFile", true ) ? Action::WriteEtcHosts : Action::None; - m_actions = hostsfileAction | hostnameAction; + m_config->setConfigurationMap( configurationMap ); } diff --git a/src/modules/users/UsersViewStep.h b/src/modules/users/UsersViewStep.h index 03cc83819..8d5abe48f 100644 --- a/src/modules/users/UsersViewStep.h +++ b/src/modules/users/UsersViewStep.h @@ -1,27 +1,16 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef USERSPAGEPLUGIN_H #define USERSPAGEPLUGIN_H -#include "SetHostNameJob.h" - #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" @@ -29,6 +18,7 @@ #include #include +class Config; class UsersPage; class PLUGINDLLEXPORT UsersViewStep : public Calamares::ViewStep @@ -37,7 +27,7 @@ class PLUGINDLLEXPORT UsersViewStep : public Calamares::ViewStep public: explicit UsersViewStep( QObject* parent = nullptr ); - virtual ~UsersViewStep() override; + ~UsersViewStep() override; QString prettyName() const override; @@ -49,7 +39,7 @@ public: bool isAtBeginning() const override; bool isAtEnd() const override; - QList< Calamares::job_ptr > jobs() const override; + Calamares::JobList jobs() const override; void onActivate() override; void onLeave() override; @@ -58,10 +48,7 @@ public: private: UsersPage* m_widget; - QList< Calamares::job_ptr > m_jobs; - - QStringList m_defaultGroups; - SetHostNameJob::Actions m_actions; + Config* m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersViewStepFactory ) diff --git a/src/modules/users/images/invalid.png.license b/src/modules/users/images/invalid.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/users/images/invalid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/users/images/valid.png.license b/src/modules/users/images/valid.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/users/images/valid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/users/page_usersetup.ui b/src/modules/users/page_usersetup.ui index b778647d8..daad98174 100644 --- a/src/modules/users/page_usersetup.ui +++ b/src/modules/users/page_usersetup.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + Page_UserSetup @@ -38,7 +42,7 @@
- + @@ -125,9 +129,9 @@ - + - + 0 @@ -214,7 +218,7 @@ - + What is the name of this computer? @@ -224,7 +228,7 @@ - + @@ -300,7 +304,7 @@ - + Qt::Vertical @@ -326,7 +330,7 @@
- + @@ -446,7 +450,7 @@ - + When this box is checked, password-strength checking is done and you will not be able to use a weak password. @@ -456,7 +460,7 @@ - + Log in automatically without asking for the password. @@ -496,7 +500,7 @@ - + diff --git a/src/modules/users/tests/3-wing.conf b/src/modules/users/tests/3-wing.conf new file mode 100644 index 000000000..4fc760fa8 --- /dev/null +++ b/src/modules/users/tests/3-wing.conf @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +defaultGroups: [ wing, wheel, users ] diff --git a/src/modules/users/tests/4-audio.conf b/src/modules/users/tests/4-audio.conf new file mode 100644 index 000000000..1280bc207 --- /dev/null +++ b/src/modules/users/tests/4-audio.conf @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +defaultGroups: + - users + - lp + - wheel + - audio diff --git a/src/modules/users/tests/5-issue-1523.conf b/src/modules/users/tests/5-issue-1523.conf new file mode 100644 index 000000000..a0c5e49ba --- /dev/null +++ b/src/modules/users/tests/5-issue-1523.conf @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +defaultGroups: + - adm + - name: foo + must_exist: false + system: true + - name: bar + must_exist: true + - name: foobar + must_exist: false + system: false diff --git a/src/modules/users/tests/6a-issue-1672.conf b/src/modules/users/tests/6a-issue-1672.conf new file mode 100644 index 000000000..b8ba24266 --- /dev/null +++ b/src/modules/users/tests/6a-issue-1672.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +autologinGroup: derp +doAutologin: true + diff --git a/src/modules/users/tests/6b-issue-1672.conf b/src/modules/users/tests/6b-issue-1672.conf new file mode 100644 index 000000000..a54e71e01 --- /dev/null +++ b/src/modules/users/tests/6b-issue-1672.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +autologinGroup: derp +doAutoLogin: true + diff --git a/src/modules/users/tests/6c-issue-1672.conf b/src/modules/users/tests/6c-issue-1672.conf new file mode 100644 index 000000000..5d12bd71e --- /dev/null +++ b/src/modules/users/tests/6c-issue-1672.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +autoLoginGroup: derp +doAutologin: true + diff --git a/src/modules/users/tests/6d-issue-1672.conf b/src/modules/users/tests/6d-issue-1672.conf new file mode 100644 index 000000000..80976bf64 --- /dev/null +++ b/src/modules/users/tests/6d-issue-1672.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +autoLoginGroup: derp +doAutoLogin: true + diff --git a/src/modules/users/tests/6e-issue-1672.conf b/src/modules/users/tests/6e-issue-1672.conf new file mode 100644 index 000000000..df299b480 --- /dev/null +++ b/src/modules/users/tests/6e-issue-1672.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +doautologin: true +autologingroup: wheel + diff --git a/src/modules/users/tests/7an-shell.conf b/src/modules/users/tests/7an-shell.conf new file mode 100644 index 000000000..772ea5236 --- /dev/null +++ b/src/modules/users/tests/7an-shell.conf @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Unset (bogus needed to keep it valid YAML) +user: + # shell: /usr/bin/dash + bogus: true diff --git a/src/modules/users/tests/7ao-shell.conf b/src/modules/users/tests/7ao-shell.conf new file mode 100644 index 000000000..e2b49dc79 --- /dev/null +++ b/src/modules/users/tests/7ao-shell.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Unset (bogus needed to keep it valid YAML) +# userShell: /usr/bin/dash +bogus: true diff --git a/src/modules/users/tests/7bn-shell.conf b/src/modules/users/tests/7bn-shell.conf new file mode 100644 index 000000000..7e568eefd --- /dev/null +++ b/src/modules/users/tests/7bn-shell.conf @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly empty +user: + shell: "" + diff --git a/src/modules/users/tests/7bo-shell.conf b/src/modules/users/tests/7bo-shell.conf new file mode 100644 index 000000000..1ecaf192b --- /dev/null +++ b/src/modules/users/tests/7bo-shell.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly empty +userShell: "" + diff --git a/src/modules/users/tests/7cn-shell.conf b/src/modules/users/tests/7cn-shell.conf new file mode 100644 index 000000000..a13e44933 --- /dev/null +++ b/src/modules/users/tests/7cn-shell.conf @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Non-absolute path is ignored +user: + shell: dash + diff --git a/src/modules/users/tests/7co-shell.conf b/src/modules/users/tests/7co-shell.conf new file mode 100644 index 000000000..b3e2d58d4 --- /dev/null +++ b/src/modules/users/tests/7co-shell.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Non-absolute path is ignored +userShell: dash + diff --git a/src/modules/users/tests/7dn-shell.conf b/src/modules/users/tests/7dn-shell.conf new file mode 100644 index 000000000..ddca7f40c --- /dev/null +++ b/src/modules/users/tests/7dn-shell.conf @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Invalid setting (should be string), won't pass validation +user: + shell: [1] + diff --git a/src/modules/users/tests/7do-shell.conf b/src/modules/users/tests/7do-shell.conf new file mode 100644 index 000000000..18871495c --- /dev/null +++ b/src/modules/users/tests/7do-shell.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Invalid setting (should be string), won't pass validation +userShell: [1] + diff --git a/src/modules/users/tests/7en-shell.conf b/src/modules/users/tests/7en-shell.conf new file mode 100644 index 000000000..d0a28a7e4 --- /dev/null +++ b/src/modules/users/tests/7en-shell.conf @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly set with full path +user: + shell: /usr/bin/dash + diff --git a/src/modules/users/tests/7eo-shell.conf b/src/modules/users/tests/7eo-shell.conf new file mode 100644 index 000000000..e8fbbf756 --- /dev/null +++ b/src/modules/users/tests/7eo-shell.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly set with full path +userShell: /usr/bin/dash + diff --git a/src/modules/users/tests/7fb-shell.conf b/src/modules/users/tests/7fb-shell.conf new file mode 100644 index 000000000..cd660e897 --- /dev/null +++ b/src/modules/users/tests/7fb-shell.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly set with full path +user: + shell: /usr/bin/new + bogus: true + +userShell: /usr/bin/old diff --git a/src/modules/users/tests/7fn-shell.conf b/src/modules/users/tests/7fn-shell.conf new file mode 100644 index 000000000..13dca6da4 --- /dev/null +++ b/src/modules/users/tests/7fn-shell.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly set with full path +user: + shell: /usr/bin/new + bogus: true + +# userShell: /usr/bin/old diff --git a/src/modules/users/tests/7fo-shell.conf b/src/modules/users/tests/7fo-shell.conf new file mode 100644 index 000000000..c15db233d --- /dev/null +++ b/src/modules/users/tests/7fo-shell.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +--- +# Explicitly set with full path +user: + # shell: /usr/bin/new + bogus: true + +userShell: /usr/bin/old diff --git a/src/modules/users/users.conf b/src/modules/users/users.conf index 174a60142..779d1afdf 100644 --- a/src/modules/users/users.conf +++ b/src/modules/users/users.conf @@ -1,25 +1,44 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the one-user-system user module. # -# Besides these settings, the user module also places the following -# keys into the globalconfig area, based on user input in the view step. +# Besides these settings, the users module also places the following +# keys into the Global Storage area, based on user input in the view step. # # - hostname # - username # - password (obscured) # - autologinUser (if enabled, set to username) # -# These globalconfig keys are set when the jobs for this module -# are created. +# These Global Storage keys are set when the configuration for this module +# is read and when they are modified in the UI. --- # Used as default groups for the created user. # Adjust to your Distribution defaults. +# +# Each entry in the *defaultGroups* list is either: +# - a string, naming a group; this is a **non**-system group +# which does not need to exist in the target system; if it +# does not exist, it will be created. +# - an entry with subkeys *name*, *must_exist* and *system*; +# if the group *must_exist* and does not, an error is thrown +# and the installation fails. +# +# The group is created if it does not exist, and it is +# created as a system group (GID < 1000) or user group +# (GID >= 1000) depending on the value of *system*. defaultGroups: - - users + - name: users + must_exist: true + system: true - lp - video - network - storage - - wheel + - name: wheel + must_exist: false + system: true - audio # Some Distributions require a 'autologin' group for the user. @@ -44,6 +63,10 @@ doAutologin: true # the setting will be duplicated in the `/etc/sudoers.d/10-installer` file, # potentially confusing users. sudoersGroup: wheel +# If set to `false` (the default), writes a sudoers file with `(ALL)` +# so that the command can be run as any user. If set to `true`, writes +# `(ALL:ALL)` so that any user and any group can be chosen. +sudoersConfigureWithGroup: false # Setting this to false, causes the root account to be disabled. # When disabled, hides the "Use the same password for administrator" @@ -117,25 +140,93 @@ allowWeakPasswords: false # to be unchecked. allowWeakPasswordsDefault: false -# Shell to be used for the regular user of the target system. -# There are three possible kinds of settings: -# - unset (i.e. commented out, the default), act as if set to /bin/bash -# - empty (explicit), don't pass shell information to useradd at all -# and rely on a correct configuration file in /etc/default/useradd -# - set, non-empty, use that path as shell. No validation is done -# that the shell actually exists or is executable. -# userShell: /bin/bash +# User settings +# +# The user can enter a username, but there are some other +# hidden settings for the user which are configurable in Calamares. +# +# Key *user* has the following sub-keys: +# +# - *shell* Shell to be used for the regular user of the target system. +# There are three possible kinds of settings: +# - unset (i.e. commented out, the default), act as if set to /bin/bash +# - empty (explicit), don't pass shell information to useradd at all +# and rely on a correct configuration file in /etc/default/useradd +# - set, non-empty, use that path as shell. No validation is done +# that the shell actually exists or is executable. +# - *forbidden_names* Login names that may not be used. This list always +# contains "root" and "nobody", but may be extended to list other special +# names for a given distro (eg. "video", or "mysql" might not be a valid +# end-user login name). +user: + shell: /bin/bash + forbidden_names: [ root ] +# TODO:3.3: Remove this setting +# +# This is the legacy setting for user.shell +userShell: /bin/bash -# Hostname setting +# Hostname settings # # The user can enter a hostname; this is configured into the system -# in some way; pick one of: +# in some way. There are settings for how a hostname is guessed (as +# a default / suggestion) and where (or how) the hostname is set in +# the target system. +# +# Key *hostname* has the following sub-keys: +# +# - *location* How the hostname is set in the target system: # - *None*, to not set the hostname at all # - *EtcFile*, to write to `/etc/hostname` directly +# - *Etc*, identical to above # - *Hostnamed*, to use systemd hostnamed(1) over DBus -# The default is *EtcFile*. +# - *Transient*, to remove `/etc/hostname` from the target +# The default is *EtcFile*. Setting this to *None* or *Transient* will +# hide the hostname field. +# - *writeHostsFile* Should /etc/hosts be written with a hostname for +# this machine (also adds localhost and some ipv6 standard entries). +# Defaults to *true*. +# - *template* Is a simple template for making a suggestion for the +# hostname, based on user data. The default is "${first}-${product}". +# This is used only if the hostname field is shown. KMacroExpander is +# used; write `${key}` where `key` is one of the following: +# - *first* User's first name (whatever is first in the User Name field, +# which is first-in-order but not necessarily a "first name" as in +# "given name" or "name by which you call someone"; beware of western bias) +# - *name* All the text in the User Name field. +# - *login* The login name (which may be suggested based on User Name) +# - *product* The hardware product, based on DMI data +# - *product2* The product as described by Qt +# - *cpu* CPU name +# - *host* Current hostname (which may be a transient hostname) +# Literal text in the template is preserved. Calamares tries to map +# `${key}` values to something that will fit in a hostname, but does not +# apply the same to literal text in the template. Do not use invalid +# characters in the literal text, or no suggeston will be done. +# - *forbidden_names* lists hostnames that may not be used. This list +# always contains "localhost", but may list others that are unsuitable +# or broken in special ways. +hostname: + location: EtcFile + writeHostsFile: true + template: "derp-${cpu}" + forbidden_names: [ localhost ] + +# TODO:3.3: Remove this setting +# +# This is a legacy setting for hostname.location; if it is set +# at all, and there is no setting for hostname.location, it is used. setHostname: EtcFile -# Should /etc/hosts be written with a hostname for this machine -# (also adds localhost and some ipv6 standard entries). +# TODO:3.3: Remove this setting +# +# This is a legacy setting for hostname.writeHostsFile writeHostsFile: true + +presets: + fullName: + # value: "OEM User" + editable: true + loginName: + # value: "oem" + editable: true diff --git a/src/modules/users/users.schema.yaml b/src/modules/users/users.schema.yaml new file mode 100644 index 000000000..025f8a3d2 --- /dev/null +++ b/src/modules/users/users.schema.yaml @@ -0,0 +1,76 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/users +additionalProperties: false +type: object +properties: + # User shell, should be path to /bin/sh or so + userShell: { type: string } + user: + additionalProperties: false + type: object + properties: + shell: { type: string } # Overrides userShell + forbidden_names: { type: array, items: { type: string } } + # Group settings + defaultGroups: + type: array + items: + oneOf: + - type: string + - type: object + properties: + name: { type: string } + must_exist: { type: boolean, default: false } + system: { type: boolean, default: false } + additionalProperties: false + required: [ name ] + autologinGroup: { type: string } + sudoersGroup: { type: string } + sudoersConfigureWithGroup: { type: boolean, default: false } + # Skip login (depends on displaymanager support) + doAutologin: { type: boolean, default: true } + # Root password separate from user password? + setRootPassword: { type: boolean, default: true } + doReusePassword: { type: boolean, default: true } + # Passwords that don't pass a quality test + allowWeakPasswords: { type: boolean, default: false } + allowWeakPasswordsDefault: { type: boolean, default: false } + passwordRequirements: + additionalProperties: false + type: object + properties: + nonempty: { type: boolean, default: true } + minLength: { type: number } + maxLength: { type: number } + libpwquality: { type: array, items: { type: string } } # Don't know what libpwquality supports + hostname: + additionalProperties: false + type: object + properties: + location: { type: string, enum: [ None, EtcFile, Hostnamed, Transient ] } + writeHostsFile: { type: boolean, default: true } + template: { type: string, default: "${first}-${product}" } + forbidden_names: { type: array, items: { type: string } } + # Legacy Hostname setting + setHostname: { type: string, enum: [ None, EtcFile, Hostnamed ] } + writeHostsFile: { type: boolean, default: true } + + # Presets + # + # TODO: lift up somewhere, since this will return in many modules; + # the type for each field (fullName, loginName) is a + # preset-description (value, editable). + presets: + type: object + additionalProperties: false + properties: + fullName: { type: object } + loginName: { type: object } + +required: + - defaultGroups + - autologinGroup + - sudoersGroup diff --git a/src/modules/usersq/CMakeLists.txt b/src/modules/usersq/CMakeLists.txt new file mode 100644 index 000000000..8465b0246 --- /dev/null +++ b/src/modules/usersq/CMakeLists.txt @@ -0,0 +1,57 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +if( NOT WITH_QML ) + calamares_skip_module( "usersq (QML is not supported in this build)" ) + return() +endif() + +find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core DBus Network ) +find_package( Crypt REQUIRED ) + +# Add optional libraries here +set( USER_EXTRA_LIB ) + +include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../users ) + +find_package( LibPWQuality ) +set_package_properties( + LibPWQuality PROPERTIES + PURPOSE "Extra checks of password quality" +) + +if( LibPWQuality_FOUND ) + list( APPEND USER_EXTRA_LIB ${LibPWQuality_LIBRARIES} ) + include_directories( ${LibPWQuality_INCLUDE_DIRS} ) + add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) +endif() + +#needed for ${_users}/Config.cpp +find_package( ICU COMPONENTS uc i18n ) +set_package_properties( + ICU PROPERTIES + PURPOSE "Transliteration support for full name to username conversion" +) + +if( ICU_FOUND ) + list( APPEND USER_EXTRA_LIB ICU::uc ICU::i18n ) + include_directories( ${ICU_INCLUDE_DIRS} ) + add_definitions( -DHAVE_ICU ) +endif() + +calamares_add_plugin( usersq + TYPE viewmodule + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + UsersQmlViewStep.cpp + RESOURCES + usersq.qrc + LINK_PRIVATE_LIBRARIES + users_internal + ${CRYPT_LIBRARIES} + ${USER_EXTRA_LIB} + Qt5::DBus + SHARED_LIB +) diff --git a/src/modules/usersq/UsersQmlViewStep.cpp b/src/modules/usersq/UsersQmlViewStep.cpp new file mode 100644 index 000000000..cc35c0b0f --- /dev/null +++ b/src/modules/usersq/UsersQmlViewStep.cpp @@ -0,0 +1,79 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "UsersQmlViewStep.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "utils/Logger.h" +#include "utils/NamedEnum.h" +#include "utils/Variant.h" + +CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersQmlViewStepFactory, registerPlugin< UsersQmlViewStep >(); ) + +UsersQmlViewStep::UsersQmlViewStep( QObject* parent ) + : Calamares::QmlViewStep( parent ) + , m_config( new Config( this ) ) +{ + connect( m_config, &Config::readyChanged, this, &UsersQmlViewStep::nextStatusChanged ); + + emit nextStatusChanged( true ); +} + +QString +UsersQmlViewStep::prettyName() const +{ + return tr( "Users" ); +} + +bool +UsersQmlViewStep::isNextEnabled() const +{ + return m_config->isReady(); +} + +bool +UsersQmlViewStep::isBackEnabled() const +{ + return true; +} + +bool +UsersQmlViewStep::isAtBeginning() const +{ + return true; +} + +bool +UsersQmlViewStep::isAtEnd() const +{ + return true; +} + +Calamares::JobList +UsersQmlViewStep::jobs() const +{ + return m_config->createJobs(); +} + +void +UsersQmlViewStep::onLeave() +{ + m_config->finalizeGlobalStorage(); +} + +void +UsersQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ + m_config->setConfigurationMap( configurationMap ); + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last +} diff --git a/src/modules/usersq/UsersQmlViewStep.h b/src/modules/usersq/UsersQmlViewStep.h new file mode 100644 index 000000000..e98df9d03 --- /dev/null +++ b/src/modules/usersq/UsersQmlViewStep.h @@ -0,0 +1,54 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Camilo Higuita + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef USERSQMLVIEWSTEP_H +#define USERSQMLVIEWSTEP_H + +// Config from users module +#include "Config.h" + +#include "DllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/QmlViewStep.h" + +#include +#include + +class PLUGINDLLEXPORT UsersQmlViewStep : public Calamares::QmlViewStep +{ + Q_OBJECT + +public: + explicit UsersQmlViewStep( QObject* parent = nullptr ); + + QString prettyName() const override; + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + Calamares::JobList jobs() const override; + + void onLeave() override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + + QObject* getConfig() override { return m_config; } + +private: + Config* m_config; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersQmlViewStepFactory ) + +#endif // USERSQMLVIEWSTEP_H diff --git a/src/modules/usersq/usersq.conf b/src/modules/usersq/usersq.conf new file mode 100644 index 000000000..19a30bd02 --- /dev/null +++ b/src/modules/usersq/usersq.conf @@ -0,0 +1,45 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# For documentation see Users Module users.conf +# +--- +# Used as default groups for the created user. +# Adjust to your Distribution defaults. +defaultGroups: + - users + - lp + - video + - network + - storage + - wheel + - audio + - lpadmin + +autologinGroup: autologin + +doAutologin: true + +sudoersGroup: wheel + +setRootPassword: true + +doReusePassword: true + +passwordRequirements: + nonempty: true + minLength: -1 # Password at least this many characters + maxLength: -1 # Password at most this many characters + libpwquality: + - minlen=0 + - minclass=0 + +allowWeakPasswords: false + +allowWeakPasswordsDefault: false + +userShell: /bin/bash + +setHostname: EtcFile + +writeHostsFile: true diff --git a/src/modules/usersq/usersq.qml b/src/modules/usersq/usersq.qml new file mode 100644 index 000000000..febdb5be5 --- /dev/null +++ b/src/modules/usersq/usersq.qml @@ -0,0 +1,426 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.15 +import QtQuick.Controls 2.10 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.3 + +Kirigami.ScrollablePage { + // You can hard-code a color here, or bind to a Kirigami theme color, + // or use a color from Calamares branding, or .. + readonly property color unfilledFieldColor: "#FBFBFB" //Kirigami.Theme.backgroundColor + readonly property color positiveFieldColor: "#F0FFF0" //Kirigami.Theme.positiveBackgroundColor + readonly property color negativeFieldColor: "#EBCED1" //Kirigami.Theme.negativeBackgroundColor + readonly property color unfilledFieldOutlineColor: "#F1F1F1" + readonly property color positiveFieldOutlineColor: "#DCFFDC" + readonly property color negativeFieldOutlineColor: "#BE5F68" + readonly property color headerTextColor: "#1F1F1F" + readonly property color commentsColor: "#6D6D6D" + + width: parent.width + height: parent.height + + header: Kirigami.Heading { + Layout.fillWidth: true + height: 50 + horizontalAlignment: Qt.AlignHCenter + color: headerTextColor + font.weight: Font.Medium + font.pointSize: 12 + text: qsTr("Pick your user name and credentials to login and perform admin tasks") + } + + ColumnLayout { + id: _formLayout + spacing: Kirigami.Units.smallSpacing + + Column { + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + width: parent.width + text: qsTr("What is your name?") + } + + TextField { + id: _userNameField + width: parent.width + enabled: config.isEditable("fullName") + placeholderText: qsTr("Your Full Name") + text: config.fullName + onTextChanged: config.setFullName(text) + + palette.base: _userNameField.text.length + ? positiveFieldColor : unfilledFieldColor + palette.highlight : _userNameField.text.length + ? positiveFieldOutlineColor : unfilledFieldOutlineColor + } + } + + Column { + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + width: parent.width + text: qsTr("What name do you want to use to log in?") + } + + TextField { + id: _userLoginField + width: parent.width + enabled: config.isEditable("loginName") + placeholderText: qsTr("Login Name") + text: config.loginName + validator: RegularExpressionValidator { regularExpression: /[a-z_][a-z0-9_-]*[$]?$/ } + + onTextChanged: acceptableInput + ? ( _userLoginField.text === "root" + ? forbiddenMessage.visible=true + : ( config.setLoginName(text), + userMessage.visible = false,forbiddenMessage.visible=false ) ) + : ( userMessage.visible = true,console.log("Invalid") ) + + palette.base: _userLoginField.text.length + ? ( acceptableInput + ? ( _userLoginField.text === "root" + ? negativeFieldColor + : positiveFieldColor ) + : negativeFieldColor ) + : unfilledFieldColor + palette.highlight : _userLoginField.text.length + ? ( acceptableInput + ? ( _userLoginField.text === "root" + ? negativeFieldOutlineColor + : positiveFieldOutlineColor ) + : negativeFieldOutlineColor ) + : unfilledFieldOutlineColor + } + + Label { + width: parent.width + text: qsTr("If more than one person will use this computer, you can create multiple accounts after installation.") + font.weight: Font.Thin + font.pointSize: 8 + color: commentsColor + } + } + + Kirigami.InlineMessage { + id: userMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: Kirigami.MessageType.Error + text: qsTr("Only lowercase letters, numbers, underscore and hyphen are allowed.") + } + + Kirigami.InlineMessage { + id: forbiddenMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: Kirigami.MessageType.Error + text: qsTr("root is not allowed as username.") + } + + Column { + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + width: parent.width + text: qsTr("What is the name of this computer?") + } + + TextField { + id: _hostName + width: parent.width + placeholderText: qsTr("Computer Name") + text: config.hostname + validator: RegularExpressionValidator { regularExpression: /[a-zA-Z0-9][-a-zA-Z0-9_]+/ } + + onTextChanged: acceptableInput + ? ( _hostName.text === "localhost" + ? forbiddenHost.visible=true + : ( config.setHostName(text), + hostMessage.visible = false,forbiddenHost.visible = false ) ) + : hostMessage.visible = true + + palette.base: _hostName.text.length + ? ( acceptableInput + ? ( _hostName.text === "localhost" + ? negativeFieldColor : positiveFieldColor ) + : negativeFieldColor) + : unfilledFieldColor + palette.highlight : _hostName.text.length + ? ( acceptableInput + ? ( _hostName.text === "localhost" + ? negativeFieldOutlineColor : positiveFieldOutlineColor ) + : negativeFieldOutlineColor) + : unfilledFieldOutlineColor + } + + Label { + width: parent.width + text: qsTr("This name will be used if you make the computer visible to others on a network.") + font.weight: Font.Thin + font.pointSize: 8 + color: commentsColor + } + } + + Kirigami.InlineMessage { + id: hostMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: Kirigami.MessageType.Error + text: qsTr("Only letters, numbers, underscore and hyphen are allowed, minimal of two characters.") + } + + Kirigami.InlineMessage { + id: forbiddenHost + Layout.fillWidth: true + showCloseButton: true + visible: false + type: Kirigami.MessageType.Error + text: qsTr("localhost is not allowed as hostname.") + } + + Column { + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + width: parent.width + text: qsTr("Choose a password to keep your account safe.") + } + + Row { + width: parent.width + spacing: 20 + + TextField { + id: _passwordField + width: parent.width / 2 - 10 + placeholderText: qsTr("Password") + text: config.userPassword + onTextChanged: config.setUserPassword(text) + + palette.base: _passwordField.text.length + ? positiveFieldColor : unfilledFieldColor + palette.highlight : _passwordField.text.length + ? positiveFieldOutlineColor : unfilledFieldOutlineColor + + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + } + + TextField { + id: _verificationPasswordField + width: parent.width / 2 - 10 + placeholderText: qsTr("Repeat Password") + text: config.userPasswordSecondary + + onTextChanged: _passwordField.text === _verificationPasswordField.text + ? ( config.setUserPasswordSecondary(text), + passMessage.visible = false, + validityMessage.visible = true ) + : ( passMessage.visible = true, + validityMessage.visible = false ) + + palette.base: _verificationPasswordField.text.length + ? ( _passwordField.text === _verificationPasswordField.text + ? positiveFieldColor : negativeFieldColor ) + : unfilledFieldColor + palette.highlight : _verificationPasswordField.text.length + ? ( _passwordField.text === _verificationPasswordField.text + ? positiveFieldOutlineColor : negativeFieldOutlineColor ) + : unfilledFieldOutlineColor + + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + } + } + + Label { + width: parent.width + text: qsTr("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.") + font.weight: Font.Thin + font.pointSize: 8 + wrapMode: Text.WordWrap + color: commentsColor + } + } + + Kirigami.InlineMessage { + id: passMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: Kirigami.MessageType.Error + text: config.userPasswordMessage + } + + Kirigami.InlineMessage { + id: validityMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: config.userPasswordValidity + ? ( config.requireStrongPasswords + ? Kirigami.MessageType.Error : Kirigami.MessageType.Warning ) + : Kirigami.MessageType.Positive + text: config.userPasswordMessage + } + + CheckBox { + id: root + visible: config.writeRootPassword + text: qsTr("Reuse user password as root password") + checked: config.reuseUserPasswordForRoot + onCheckedChanged: config.setReuseUserPasswordForRoot(checked) + } + + Label { + visible: root.checked + width: parent.width + text: qsTr("Use the same password for the administrator account.") + font.weight: Font.Thin + font.pointSize: 8 + color: commentsColor + } + + Column { + visible: ! root.checked + Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing + + Label { + width: parent.width + text: qsTr("Choose a root password to keep your account safe.") + } + + Row { + width: parent.width + spacing: 20 + + TextField { + id: _rootPasswordField + width: parent.width / 2 -10 + placeholderText: qsTr("Root Password") + text: config.rootPassword + + onTextChanged: config.setRootPassword(text) + + palette.base: _rootPasswordField.text.length + ? positiveFieldColor : unfilledFieldColor + palette.highlight : _rootPasswordField.text.length + ? positiveFieldOutlineColor : unfilledFieldOutlineColor + + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + } + + TextField { + id: _verificationRootPasswordField + width: parent.width / 2 -10 + placeholderText: qsTr("Repeat Root Password") + text: config.rootPasswordSecondary + + onTextChanged: _rootPasswordField.text === _verificationRootPasswordField.text + ? ( config.setRootPasswordSecondary(text), + rootPassMessage.visible = false,rootValidityMessage.visible = true ) + : ( rootPassMessage.visible = true,rootValidityMessage.visible = false ) + + palette.base: _verificationRootPasswordField.text.length + ? ( _rootPasswordField.text === _verificationRootPasswordField.text + ? positiveFieldColor : negativeFieldColor) + : unfilledFieldColor + palette.highlight : _verificationRootPasswordField.text.length + ? ( _rootPasswordField.text === _verificationRootPasswordField.text + ? positiveFieldOutlineColor : negativeFieldOutlineColor) + : unfilledFieldOutlineColor + + echoMode: TextInput.Password + passwordMaskDelay: 300 + inputMethodHints: Qt.ImhNoAutoUppercase + } + } + + Label { + visible: ! root.checked + width: parent.width + text: qsTr("Enter the same password twice, so that it can be checked for typing errors.") + font.weight: Font.Thin + font.pointSize: 8 + color: commentsColor + } + } + + Kirigami.InlineMessage { + id: rootPassMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: Kirigami.MessageType.Error + text: config.rootPasswordMessage + } + + Kirigami.InlineMessage { + id: rootValidityMessage + Layout.fillWidth: true + showCloseButton: true + visible: false + type: config.rootPasswordValidity + ? ( config.requireStrongPasswords + ? Kirigami.MessageType.Error : Kirigami.MessageType.Warning ) + : Kirigami.MessageType.Positive + text: config.rootPasswordMessage + } + + CheckBox { + Layout.alignment: Qt.AlignCenter + text: qsTr("Log in automatically without asking for the password") + checked: config.doAutoLogin + onCheckedChanged: config.setAutoLogin(checked) + } + + CheckBox { + visible: config.permitWeakPasswords + Layout.alignment: Qt.AlignCenter + text: qsTr("Validate passwords quality") + checked: config.requireStrongPasswords + onCheckedChanged: config.setRequireStrongPasswords(checked), + rootPassMessage.visible = false + } + + Label { + visible: config.permitWeakPasswords + width: parent.width + Layout.alignment: Qt.AlignCenter + text: qsTr("When this box is checked, password-strength checking is done and you will not be able to use a weak password.") + font.weight: Font.Thin + font.pointSize: 8 + color: commentsColor + } + } +} diff --git a/src/modules/usersq/usersq.qrc b/src/modules/usersq/usersq.qrc new file mode 100644 index 000000000..8c1c4f986 --- /dev/null +++ b/src/modules/usersq/usersq.qrc @@ -0,0 +1,5 @@ + + + usersq.qml + + diff --git a/src/modules/webview/CMakeLists.txt b/src/modules/webview/CMakeLists.txt index 48c707783..54e1d18b0 100644 --- a/src/modules/webview/CMakeLists.txt +++ b/src/modules/webview/CMakeLists.txt @@ -1,5 +1,9 @@ -set( CALA_WEBVIEW_INCLUDE_DIRECTORIES ${PROJECT_BINARY_DIR}/src/libcalamaresui ) -set( CALA_WEBVIEW_LINK_LIBRARIES calamaresui ) +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +set( CALA_WEBVIEW_LINK_LIBRARIES "" ) option( WEBVIEW_FORCE_WEBKIT "Always build webview with WebKit instead of WebEngine regardless of Qt version." OFF) @@ -41,8 +45,6 @@ else() endif() if ( NOT _reason ) - include_directories( ${CALA_WEBVIEW_INCLUDE_DIRECTORIES} ) - configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/WebViewConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/WebViewConfig.h ) diff --git a/src/modules/webview/WebViewConfig.h.in b/src/modules/webview/WebViewConfig.h.in index 6611e44c0..ddc07b31c 100644 --- a/src/modules/webview/WebViewConfig.h.in +++ b/src/modules/webview/WebViewConfig.h.in @@ -1,3 +1,6 @@ +/* SPDX-FileCopyrightText: no + SPDX-License-Identifier: CC0-1.0 +*/ #ifndef CALAMARESWEBVIEWCONFIG_H #define CALAMARESWEBVIEWCONFIG_H diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index 50c270b09..8e7c48f1a 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Rohan Garg - * Copyright 2016, Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Rohan Garg + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WebViewStep.h" @@ -28,7 +19,7 @@ #include #endif -CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin(); ) +CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin< WebViewStep >(); ) WebViewStep::WebViewStep( QObject* parent ) : Calamares::ViewStep( parent ) @@ -40,13 +31,9 @@ WebViewStep::WebViewStep( QObject* parent ) m_view = new C_QWEBVIEW(); #ifdef WEBVIEW_WITH_WEBKIT m_view->settings()->setFontFamily( QWebSettings::StandardFont, - m_view->settings()-> - fontFamily( QWebSettings::SansSerifFont ) ); - m_view->setRenderHints( QPainter::Antialiasing | - QPainter::TextAntialiasing | - QPainter::HighQualityAntialiasing | - QPainter::SmoothPixmapTransform | - QPainter::NonCosmeticDefaultPen ); + m_view->settings()->fontFamily( QWebSettings::SansSerifFont ) ); + m_view->setRenderHints( QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::HighQualityAntialiasing + | QPainter::SmoothPixmapTransform | QPainter::NonCosmeticDefaultPen ); #endif } @@ -54,7 +41,9 @@ WebViewStep::WebViewStep( QObject* parent ) WebViewStep::~WebViewStep() { if ( m_view && m_view->parent() == nullptr ) + { m_view->deleteLater(); + } } @@ -99,10 +88,11 @@ WebViewStep::isAtEnd() const return true; } -void WebViewStep::onActivate() +void +WebViewStep::onActivate() { - m_view->load(QUrl(m_url)); - m_view->show(); + m_view->load( QUrl( m_url ) ); + m_view->show(); } QList< Calamares::job_ptr > @@ -115,11 +105,14 @@ WebViewStep::jobs() const void WebViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - if ( configurationMap.contains("url") && - configurationMap.value("url").type() == QVariant::String ) - m_url = configurationMap.value("url").toString(); + if ( configurationMap.contains( "url" ) && configurationMap.value( "url" ).type() == QVariant::String ) + { + m_url = configurationMap.value( "url" ).toString(); + } - if ( configurationMap.contains("prettyName") && - configurationMap.value("prettyName").type() == QVariant::String ) - m_prettyName = configurationMap.value("prettyName").toString(); + if ( configurationMap.contains( "prettyName" ) + && configurationMap.value( "prettyName" ).type() == QVariant::String ) + { + m_prettyName = configurationMap.value( "prettyName" ).toString(); + } } diff --git a/src/modules/webview/WebViewStep.h b/src/modules/webview/WebViewStep.h index a97d465de..6fd71222e 100644 --- a/src/modules/webview/WebViewStep.h +++ b/src/modules/webview/WebViewStep.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2015, Rohan Garg - * Copyright 2016, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2015 Rohan Garg + * SPDX-FileCopyrightText: 2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WEBVIEWPLUGIN_H @@ -23,18 +14,24 @@ #include "WebViewConfig.h" +#include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include "DllMacro.h" - #include #ifdef WEBVIEW_WITH_WEBKIT #define C_QWEBVIEW QWebView -#else +#endif +#ifdef WEBVIEW_WITH_WEBENGINE +#ifdef C_QWEBVIEW +#error Both WEBENGINE and WEBKIT enabled +#endif #define C_QWEBVIEW QWebEngineView #endif +#ifndef C_QWEBVIEW +#error Neither WEBENGINE nor WEBKIT enabled +#endif class C_QWEBVIEW; @@ -44,7 +41,7 @@ class PLUGINDLLEXPORT WebViewStep : public Calamares::ViewStep public: explicit WebViewStep( QObject* parent = nullptr ); - virtual ~WebViewStep() override; + ~WebViewStep() override; QString prettyName() const override; @@ -63,11 +60,11 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: - C_QWEBVIEW *m_view; + C_QWEBVIEW* m_view; QString m_url; QString m_prettyName; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WebViewStepFactory ) -#endif // WEBVIEWPLUGIN_H +#endif // WEBVIEWPLUGIN_H diff --git a/src/modules/webview/owncloud.conf b/src/modules/webview/owncloud.conf index 46b639ade..4e2930919 100644 --- a/src/modules/webview/owncloud.conf +++ b/src/modules/webview/owncloud.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- prettyName: "OwnCloud" url: "https://owncloud.org" diff --git a/src/modules/webview/webview.conf b/src/modules/webview/webview.conf index c4e6568e9..353f81488 100644 --- a/src/modules/webview/webview.conf +++ b/src/modules/webview/webview.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# --- prettyName: "Webview" url: "https://calamares.io" diff --git a/src/modules/welcome/CMakeLists.txt b/src/modules/welcome/CMakeLists.txt index 9700b1601..01a89703a 100644 --- a/src/modules/welcome/CMakeLists.txt +++ b/src/modules/welcome/CMakeLists.txt @@ -1,30 +1,29 @@ -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) - +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) find_package( LIBPARTED ) if ( LIBPARTED_FOUND ) set( PARTMAN_SRC checker/partman_devices.c ) - set( CHECKER_LINK_LIBRARIES ${LIBPARTED_LIBRARY} ) + set( PARTMAN_LIB ${LIBPARTED_LIBRARY} ) else() set( PARTMAN_SRC ) - set( CHECKER_LINK_LIBRARIES ) + set( PARTMAN_LIB ) add_definitions( -DWITHOUT_LIBPARTED ) endif() -set( CHECKER_SOURCES - checker/CheckerContainer.cpp - checker/GeneralRequirements.cpp - checker/ResultWidget.cpp - checker/ResultsListWidget.cpp - ${PARTMAN_SRC} -) - calamares_add_plugin( welcome TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES - ${CHECKER_SOURCES} + checker/CheckerContainer.cpp + checker/GeneralRequirements.cpp + checker/ResultWidget.cpp + checker/ResultsListWidget.cpp + ${PARTMAN_SRC} WelcomeViewStep.cpp Config.cpp Config.h @@ -34,9 +33,23 @@ calamares_add_plugin( welcome RESOURCES welcome.qrc LINK_PRIVATE_LIBRARIES - calamaresui - ${CHECKER_LINK_LIBRARIES} + ${PARTMAN_LIB} Qt5::DBus Qt5::Network SHARED_LIB ) + +calamares_add_test( + welcometest + SOURCES + checker/GeneralRequirements.cpp + ${PARTMAN_SRC} + Config.cpp + Tests.cpp + LIBRARIES + ${PARTMAN_LIB} + Qt5::DBus + Qt5::Network + Qt5::Widgets + Calamares::calamaresui +) diff --git a/src/modules/welcome/Config.cpp b/src/modules/welcome/Config.cpp index 1c2b17c38..0baadd82f 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -1,55 +1,56 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "Config.h" #include "Branding.h" +#include "GlobalStorage.h" +#include "JobQueue.h" #include "Settings.h" +#include "geoip/Handler.h" +#include "locale/Global.h" +#include "locale/Lookup.h" +#include "modulesystem/ModuleManager.h" #include "utils/Logger.h" #include "utils/Retranslator.h" +#include "utils/Variant.h" + +#include Config::Config( QObject* parent ) : QObject( parent ) - , m_requirementsModel( new Calamares::RequirementsModel( this ) ) , m_languages( CalamaresUtils::Locale::availableTranslations() ) + , m_filtermodel( std::make_unique< QSortFilterProxyModel >() ) + , m_requirementsChecker( std::make_unique< GeneralRequirements >( this ) ) { - connect( m_requirementsModel, - &Calamares::RequirementsModel::satisfiedRequirementsChanged, - this, - &Config::setIsNextEnabled ); - initLanguages(); - CALAMARES_RETRANSLATE_SLOT( &Config::retranslate ) + CALAMARES_RETRANSLATE_SLOT( &Config::retranslate ); + // But also when the requirements model changes, update the messages + connect( requirementsModel(), &Calamares::RequirementsModel::progressMessageChanged, this, &Config::retranslate ); } void Config::retranslate() { - m_genericWelcomeMessage = genericWelcomeMessage().arg( *Calamares::Branding::VersionedName ); + const auto* branding = Calamares::Branding::instance(); + const auto* settings = Calamares::Settings::instance(); + m_genericWelcomeMessage = genericWelcomeMessage().arg( branding ? branding->versionedName() : QString() ); emit genericWelcomeMessageChanged( m_genericWelcomeMessage ); - if ( !m_requirementsModel->satisfiedRequirements() ) + const auto* r = requirementsModel(); + if ( r && !r->satisfiedRequirements() ) { QString message; - const bool setup = Calamares::Settings::instance()->isSetupMode(); + const bool setup = settings ? settings->isSetupMode() : false; - if ( !m_requirementsModel->satisfiedMandatory() ) + if ( !r->satisfiedMandatory() ) { message = setup ? tr( "This computer does not satisfy the minimum " "requirements for setting up %1.
" @@ -72,24 +73,44 @@ Config::retranslate() "might be disabled." ); } - m_warningMessage = message.arg( *Calamares::Branding::ShortVersionedName ); + m_warningMessage = message.arg( branding ? branding->shortVersionedName() : QString() ); } else { m_warningMessage = tr( "This program will ask you some questions and " "set up %2 on your computer." ) - .arg( *Calamares::Branding::ProductName ); + .arg( branding ? branding->productName() : QString() ); } emit warningMessageChanged( m_warningMessage ); } -CalamaresUtils::Locale::LabelModel* +CalamaresUtils::Locale::TranslationsModel* Config::languagesModel() const { return m_languages; } +Calamares::RequirementsModel* +Config::requirementsModel() const +{ + auto* manager = Calamares::ModuleManager::instance(); + return manager ? manager->requirementsModel() : nullptr; +} + +QAbstractItemModel* +Config::unsatisfiedRequirements() const +{ + if ( !m_filtermodel->sourceModel() ) + { + m_filtermodel->setFilterRole( Calamares::RequirementsModel::Roles::Satisfied ); + m_filtermodel->setFilterFixedString( QStringLiteral( "false" ) ); + m_filtermodel->setSourceModel( requirementsModel() ); + } + return m_filtermodel.get(); +} + + QString Config::languageIcon() const { @@ -100,46 +121,52 @@ void Config::initLanguages() { // Find the best initial translation - QLocale defaultLocale = QLocale( QLocale::system().name() ); + CalamaresUtils::Locale::Translation defaultTranslation; - cDebug() << "Matching locale" << defaultLocale; - int matchedLocaleIndex = m_languages->find( [&]( const QLocale& x ) { - return x.language() == defaultLocale.language() && x.country() == defaultLocale.country(); - } ); + cDebug() << "Trying to match locale" << defaultTranslation.id(); + int matchedLocaleIndex = m_languages->find( defaultTranslation.id() ); + // Need to match by some other means than the exact translation Id if ( matchedLocaleIndex < 0 ) { - cDebug() << Logger::SubEntry << "Matching approximate locale" << defaultLocale.language(); - matchedLocaleIndex - = m_languages->find( [&]( const QLocale& x ) { return x.language() == defaultLocale.language(); } ); - } + QLocale defaultLocale = defaultTranslation.locale(); - if ( matchedLocaleIndex < 0 ) - { - QLocale en_us( QLocale::English, QLocale::UnitedStates ); + cDebug() << "Trying to match locale" << defaultLocale; + matchedLocaleIndex = m_languages->find( + [ & ]( const QLocale& x ) + { return x.language() == defaultLocale.language() && x.country() == defaultLocale.country(); } ); - cDebug() << Logger::SubEntry << "Matching English (US)"; - matchedLocaleIndex = m_languages->find( en_us ); - - // Now, if it matched, because we didn't match the system locale, switch to the one found - if ( matchedLocaleIndex >= 0 ) + if ( matchedLocaleIndex < 0 ) { - QLocale::setDefault( m_languages->locale( matchedLocaleIndex ).locale() ); + cDebug() << Logger::SubEntry << "Trying to match approximate locale" << defaultLocale.language(); + + matchedLocaleIndex + = m_languages->find( [ & ]( const QLocale& x ) { return x.language() == defaultLocale.language(); } ); + } + + if ( matchedLocaleIndex < 0 ) + { + QLocale en_us( QLocale::English, QLocale::UnitedStates ); + + cDebug() << Logger::SubEntry << "Trying to match English (US)"; + matchedLocaleIndex = m_languages->find( en_us ); + + // Now, if it matched, because we didn't match the system locale, switch to the one found + if ( matchedLocaleIndex >= 0 ) + { + QLocale::setDefault( m_languages->locale( matchedLocaleIndex ).locale() ); + } } } if ( matchedLocaleIndex >= 0 ) { - QString name = m_languages->locale( matchedLocaleIndex ).name(); - cDebug() << Logger::SubEntry << "Matched with index" << matchedLocaleIndex << name; - - CalamaresUtils::installTranslator( name, Calamares::Branding::instance()->translationsDirectory() ); setLocaleIndex( matchedLocaleIndex ); } else { - cWarning() << "No available translation matched" << defaultLocale; + cWarning() << "No available translation matched" << defaultTranslation.id() << defaultTranslation.locale(); } } @@ -169,21 +196,22 @@ Config::setLocaleIndex( int index ) m_localeIndex = index; - const auto& selectedLocale = m_languages->locale( m_localeIndex ).locale(); - cDebug() << "Index" << index << "Selected locale" << selectedLocale; - - QLocale::setDefault( selectedLocale ); - CalamaresUtils::installTranslator( selectedLocale, Calamares::Branding::instance()->translationsDirectory() ); + const auto& selectedTranslation = m_languages->locale( m_localeIndex ); + cDebug() << "Index" << index << "Selected locale" << selectedTranslation.id().name; + QLocale::setDefault( selectedTranslation.locale() ); + const auto* branding = Calamares::Branding::instance(); + CalamaresUtils::installTranslator( selectedTranslation.id(), + branding ? branding->translationsDirectory() : QString() ); + if ( Calamares::JobQueue::instance() && Calamares::JobQueue::instance()->globalStorage() ) + { + CalamaresUtils::Locale::insertGS( *Calamares::JobQueue::instance()->globalStorage(), + QStringLiteral( "LANG" ), + CalamaresUtils::translatorLocaleName().name ); + } emit localeIndexChanged( m_localeIndex ); } -Calamares::RequirementsModel& -Config::requirementsModel() const -{ - return *m_requirementsModel; -} - void Config::setIsNextEnabled( bool isNextEnabled ) { @@ -191,12 +219,6 @@ Config::setIsNextEnabled( bool isNextEnabled ) emit isNextEnabledChanged( m_isNextEnabled ); } -QString -Config::donateUrl() const -{ - return m_donateUrl; -} - void Config::setDonateUrl( const QString& url ) { @@ -204,12 +226,6 @@ Config::setDonateUrl( const QString& url ) emit donateUrlChanged(); } -QString -Config::knownIssuesUrl() const -{ - return m_knownIssuesUrl; -} - void Config::setKnownIssuesUrl( const QString& url ) { @@ -224,18 +240,6 @@ Config::setReleaseNotesUrl( const QString& url ) emit releaseNotesUrlChanged(); } -QString -Config::releaseNotesUrl() const -{ - return m_releaseNotesUrl; -} - -QString -Config::supportUrl() const -{ - return m_supportUrl; -} - void Config::setSupportUrl( const QString& url ) { @@ -248,17 +252,19 @@ Config::genericWelcomeMessage() const { QString message; - if ( Calamares::Settings::instance()->isSetupMode() ) + const auto* settings = Calamares::Settings::instance(); + const auto* branding = Calamares::Branding::instance(); + const bool welcomeStyle = branding ? branding->welcomeStyleCalamares() : true; + + if ( settings ? settings->isSetupMode() : false ) { - message = Calamares::Branding::instance()->welcomeStyleCalamares() - ? tr( "

Welcome to the Calamares setup program for %1.

" ) - : tr( "

Welcome to %1 setup.

" ); + message = welcomeStyle ? tr( "

Welcome to the Calamares setup program for %1

" ) + : tr( "

Welcome to %1 setup

" ); } else { - message = Calamares::Branding::instance()->welcomeStyleCalamares() - ? tr( "

Welcome to the Calamares installer for %1.

" ) - : tr( "

Welcome to the %1 installer.

" ); + message = welcomeStyle ? tr( "

Welcome to the Calamares installer for %1

" ) + : tr( "

Welcome to the %1 installer

" ); } return message; @@ -269,3 +275,150 @@ Config::warningMessage() const { return m_warningMessage; } + +/** @brief Look up a URL for a button + * + * Looks up @p key in @p map; if it is a *boolean* value, then + * assume an old-style configuration, and fetch the string from + * the branding settings @p e. If it is a string, not a boolean, + * use it as-is. If not found, or a weird type, returns empty. + * + * This allows switching the showKnownIssuesUrl and similar settings + * in welcome.conf from a boolean (deferring to branding) to an + * actual string for immediate use. Empty strings, as well as + * "false" as a setting, will hide the buttons as before. + */ +static QString +jobOrBrandingSetting( Calamares::Branding::StringEntry e, const QVariantMap& map, const QString& key ) +{ + if ( !map.contains( key ) ) + { + return QString(); + } + auto v = map.value( key ); + if ( v.type() == QVariant::Bool ) + { + return v.toBool() ? ( Calamares::Branding::instance()->string( e ) ) : QString(); + } + if ( v.type() == QVariant::String ) + { + return v.toString(); + } + + return QString(); +} + +static inline void +setLanguageIcon( Config* c, const QVariantMap& configurationMap ) +{ + QString language = CalamaresUtils::getString( configurationMap, "languageIcon" ); + if ( !language.isEmpty() ) + { + auto icon = Calamares::Branding::instance()->image( language, QSize( 48, 48 ) ); + if ( !icon.isNull() ) + { + c->setLanguageIcon( language ); + } + } +} + +static inline void +logGeoIPHandler( CalamaresUtils::GeoIP::Handler* handler ) +{ + if ( handler ) + { + cDebug() << Logger::SubEntry << "Obtained from" << handler->url() << " (" + << static_cast< int >( handler->type() ) << handler->selector() << ')'; + } +} + +static void +setCountry( Config* config, const QString& countryCode, CalamaresUtils::GeoIP::Handler* handler ) +{ + if ( countryCode.length() != 2 ) + { + cDebug() << "Unusable country code" << countryCode; + logGeoIPHandler( handler ); + return; + } + + auto c_l = CalamaresUtils::Locale::countryData( countryCode ); + if ( c_l.first == QLocale::Country::AnyCountry ) + { + cDebug() << "Unusable country code" << countryCode; + logGeoIPHandler( handler ); + return; + } + else + { + int r = CalamaresUtils::Locale::availableTranslations()->find( countryCode ); + if ( r < 0 ) + { + cDebug() << "Unusable country code" << countryCode << "(no suitable translation)"; + } + if ( ( r >= 0 ) && config ) + { + config->setCountryCode( countryCode ); + } + } +} + +static inline void +setGeoIP( Config* config, const QVariantMap& configurationMap ) +{ + bool ok = false; + QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); + if ( ok ) + { + using FWString = QFutureWatcher< QString >; + + auto* handler = new CalamaresUtils::GeoIP::Handler( CalamaresUtils::getString( geoip, "style" ), + CalamaresUtils::getString( geoip, "url" ), + CalamaresUtils::getString( geoip, "selector" ) ); + if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None ) + { + auto* future = new FWString(); + QObject::connect( future, + &FWString::finished, + [ config, future, handler ]() + { + QString countryResult = future->future().result(); + cDebug() << "GeoIP result for welcome=" << countryResult; + ::setCountry( config, countryResult, handler ); + future->deleteLater(); + delete handler; + } ); + future->setFuture( handler->queryRaw() ); + } + else + { + // Would not produce useful country code anyway. + delete handler; + } + } +} + +void +Config::setConfigurationMap( const QVariantMap& configurationMap ) +{ + using Calamares::Branding; + + setSupportUrl( jobOrBrandingSetting( Branding::SupportUrl, configurationMap, "showSupportUrl" ) ); + setKnownIssuesUrl( jobOrBrandingSetting( Branding::KnownIssuesUrl, configurationMap, "showKnownIssuesUrl" ) ); + setReleaseNotesUrl( jobOrBrandingSetting( Branding::ReleaseNotesUrl, configurationMap, "showReleaseNotesUrl" ) ); + setDonateUrl( jobOrBrandingSetting( Branding::DonateUrl, configurationMap, "showDonateUrl" ) ); + + ::setLanguageIcon( this, configurationMap ); + ::setGeoIP( this, configurationMap ); + + if ( configurationMap.contains( "requirements" ) + && configurationMap.value( "requirements" ).type() == QVariant::Map ) + { + m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() ); + } + else + { + cWarning() << "no valid requirements map found in welcome " + "module configuration."; + } +} diff --git a/src/modules/welcome/Config.h b/src/modules/welcome/Config.h index 80e4eeea9..c01bdf7e3 100644 --- a/src/modules/welcome/Config.h +++ b/src/modules/welcome/Config.h @@ -1,36 +1,51 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOME_CONFIG_H #define WELCOME_CONFIG_H -#include "locale/LabelModel.h" -#include "modulesystem/Requirement.h" +#include "checker/GeneralRequirements.h" +#include "locale/TranslationsModel.h" #include "modulesystem/RequirementsModel.h" #include +#include #include +#include + class Config : public QObject { Q_OBJECT - Q_PROPERTY( CalamaresUtils::Locale::LabelModel* languagesModel READ languagesModel CONSTANT FINAL ) - Q_PROPERTY( Calamares::RequirementsModel* requirementsModel MEMBER m_requirementsModel CONSTANT FINAL ) + /** @brief The languages available in Calamares. + * + * This is a list-model, with names and descriptions for the translations + * available to Calamares. + */ + Q_PROPERTY( CalamaresUtils::Locale::TranslationsModel* languagesModel READ languagesModel CONSTANT FINAL ) + /** @brief The requirements (from modules) and their checked-status + * + * The model grows rows over time as each module is checked and its + * requirements are taken into account. The model **as a whole** + * has properties *satisfiedRequirements* and *satisfiedMandatory* + * to say if all of the requirements held in the model have been + * satisfied. See the model documentation for details. + */ + Q_PROPERTY( Calamares::RequirementsModel* requirementsModel READ requirementsModel CONSTANT FINAL ) + /** @brief The requirements (from modules) that are **unsatisfied** + * + * This is the same as requirementsModel(), except filtered so + * that only those requirements that are not satisfied are exposed. + * Note that the type is different, so you should still use the + * requirementsModel() for overall status like *satisfiedMandatory*. + */ + Q_PROPERTY( QAbstractItemModel* unsatisfiedRequirements READ unsatisfiedRequirements CONSTANT FINAL ) Q_PROPERTY( QString languageIcon READ languageIcon CONSTANT FINAL ) @@ -50,7 +65,7 @@ class Config : public QObject public: Config( QObject* parent = nullptr ); - Calamares::RequirementsModel& requirementsModel() const; + void setConfigurationMap( const QVariantMap& ); void setCountryCode( const QString& countryCode ); @@ -59,28 +74,36 @@ public: void setIsNextEnabled( bool isNextEnabled ); - void setLocaleIndex( int index ); int localeIndex() const { return m_localeIndex; } + void setLocaleIndex( int index ); - QString supportUrl() const; + QString supportUrl() const { return m_supportUrl; } void setSupportUrl( const QString& url ); - QString knownIssuesUrl() const; + QString knownIssuesUrl() const { return m_knownIssuesUrl; } void setKnownIssuesUrl( const QString& url ); - QString releaseNotesUrl() const; + QString releaseNotesUrl() const { return m_releaseNotesUrl; } void setReleaseNotesUrl( const QString& url ); - QString donateUrl() const; + QString donateUrl() const { return m_donateUrl; } void setDonateUrl( const QString& url ); QString genericWelcomeMessage() const; QString warningMessage() const; public slots: - CalamaresUtils::Locale::LabelModel* languagesModel() const; + CalamaresUtils::Locale::TranslationsModel* languagesModel() const; void retranslate(); + ///@brief The **global** requirements model, from ModuleManager + Calamares::RequirementsModel* requirementsModel() const; + + QAbstractItemModel* unsatisfiedRequirements() const; + + /// @brief Check the general requirements + Calamares::RequirementsList checkRequirements() const { return m_requirementsChecker->checkRequirements(); } + signals: void countryCodeChanged( QString countryCode ); void localeIndexChanged( int localeIndex ); @@ -97,8 +120,9 @@ signals: private: void initLanguages(); - Calamares::RequirementsModel* m_requirementsModel; - CalamaresUtils::Locale::LabelModel* m_languages; + CalamaresUtils::Locale::TranslationsModel* m_languages = nullptr; + std::unique_ptr< QSortFilterProxyModel > m_filtermodel; + std::unique_ptr< GeneralRequirements > m_requirementsChecker; QString m_languageIcon; QString m_countryCode; diff --git a/src/modules/welcome/Tests.cpp b/src/modules/welcome/Tests.cpp new file mode 100644 index 000000000..1e1d07c4b --- /dev/null +++ b/src/modules/welcome/Tests.cpp @@ -0,0 +1,167 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "Config.h" + +#include "Branding.h" +#include "Settings.h" +#include "network/Manager.h" +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Yaml.h" + +#include + +class WelcomeTests : public QObject +{ + Q_OBJECT +public: + WelcomeTests(); + ~WelcomeTests() override {} + +private Q_SLOTS: + void initTestCase(); + + void testOneUrl(); + void testUrls_data(); + void testUrls(); + + void testBadConfigDoesNotResetUrls(); +}; + +WelcomeTests::WelcomeTests() {} + +void +WelcomeTests::initTestCase() +{ + Logger::setupLogLevel( Logger::LOGDEBUG ); + cDebug() << "Welcome test started."; + + // Ensure we have a system object, expect it to be a "bogus" one + CalamaresUtils::System* system = CalamaresUtils::System::instance(); + QVERIFY( system ); + cDebug() << Logger::SubEntry << "System @" << Logger::Pointer( system ); + + const auto* settings = Calamares::Settings::instance(); + if ( !settings ) + { + (void)new Calamares::Settings( true ); + } +} + +void +WelcomeTests::testOneUrl() +{ + Config c; + + // BUILD_AS_TEST is the source-directory path + QString filename = QStringLiteral( "1a-checkinternet.conf" ); + QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + QVERIFY( map.count() > 0 ); + QVERIFY( map.contains( "requirements" ) ); + + c.setConfigurationMap( map ); + QCOMPARE( CalamaresUtils::Network::Manager::instance().getCheckInternetUrls().count(), 1 ); +} + +void +WelcomeTests::testUrls_data() +{ + QTest::addColumn< QString >( "filename" ); + QTest::addColumn< int >( "result" ); + + QTest::newRow( "one " ) << QString( "1a-checkinternet.conf" ) << 1; + QTest::newRow( "none " ) << QString( "1b-checkinternet.conf" ) << 0; + QTest::newRow( "blank" ) << QString( "1c-checkinternet.conf" ) << 1; + QTest::newRow( "bogus" ) << QString( "1d-checkinternet.conf" ) << 1; + QTest::newRow( "[] " ) << QString( "1e-checkinternet.conf" ) << 1; + QTest::newRow( "-3 " ) << QString( "1f-checkinternet.conf" ) << 3; + QTest::newRow( "[3] " ) << QString( "1g-checkinternet.conf" ) << 3; + QTest::newRow( "some " ) << QString( "1h-checkinternet.conf" ) << 3; +} + +void +WelcomeTests::testUrls() +{ + QFETCH( QString, filename ); + QFETCH( int, result ); + + Config c; + + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + + CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QVector< QUrl > {} ); + QCOMPARE( CalamaresUtils::Network::Manager::instance().getCheckInternetUrls().count(), 0 ); + c.setConfigurationMap( map ); + QCOMPARE( CalamaresUtils::Network::Manager::instance().getCheckInternetUrls().count(), result ); +} + +void +WelcomeTests::testBadConfigDoesNotResetUrls() +{ + auto& nam = CalamaresUtils::Network::Manager::instance(); + CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QVector< QUrl > {} ); + QCOMPARE( nam.getCheckInternetUrls().count(), 0 ); + nam.setCheckHasInternetUrl( QVector< QUrl > { QUrl( "http://example.com" ), QUrl( "https://www.kde.org" ) } ); + QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); + + Config c; + + // This is slightly surprising: if there is **no** requirements + // configuration, the list of check-URLs is left unchanged. + { + const QString filename = QStringLiteral( "1b-checkinternet.conf" ); // "none" + + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + + c.setConfigurationMap( map ); + } + QCOMPARE( nam.getCheckInternetUrls().count(), 2 ); + + // But if the config contains a requirements entry, even if broken, + // the list is changed (to the default). + { + const QString filename = QStringLiteral( "1d-checkinternet.conf" ); // "bogus" + + // BUILD_AS_TEST is the source-directory path + QFile fi( QString( "%1/tests/%2" ).arg( BUILD_AS_TEST, filename ) ); + QVERIFY( fi.exists() ); + + bool ok = false; + const auto map = CalamaresUtils::loadYaml( fi, &ok ); + QVERIFY( ok ); + + c.setConfigurationMap( map ); + } + QCOMPARE( nam.getCheckInternetUrls().count(), 1 ); +} + + +QTEST_GUILESS_MAIN( WelcomeTests ) + +#include "utils/moc-warnings.h" + +#include "Tests.moc" diff --git a/src/modules/welcome/WelcomePage.cpp b/src/modules/welcome/WelcomePage.cpp index e4be00fe7..dcfdea79e 100644 --- a/src/modules/welcome/WelcomePage.cpp +++ b/src/modules/welcome/WelcomePage.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2015, Anke Boersma - * Copyright 2017-2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2015 Anke Boersma + * SPDX-FileCopyrightText: 2017-2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WelcomePage.h" @@ -29,12 +20,13 @@ #include "Settings.h" #include "ViewManager.h" -#include "locale/LabelModel.h" #include "modulesystem/ModuleManager.h" +#include "modulesystem/RequirementsModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Retranslator.h" +#include "widgets/TranslationFix.h" #include #include @@ -44,44 +36,56 @@ #include #include -WelcomePage::WelcomePage( Config* conf, QWidget* parent ) +WelcomePage::WelcomePage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::WelcomePage ) - , m_checkingWidget( new CheckerContainer( conf->requirementsModel(), this ) ) + , m_checkingWidget( new CheckerContainer( config, this ) ) , m_languages( nullptr ) - , m_conf( conf ) + , m_conf( config ) { + using Branding = Calamares::Branding; + const int defaultFontHeight = CalamaresUtils::defaultFontHeight(); + ui->setupUi( this ); + ui->aboutButton->setIcon( CalamaresUtils::defaultPixmap( + CalamaresUtils::Information, CalamaresUtils::Original, 2 * QSize( defaultFontHeight, defaultFontHeight ) ) ); + + // insert system-check widget below welcome text + const int welcome_text_idx = ui->verticalLayout->indexOf( ui->mainText ); + ui->verticalLayout->insertWidget( welcome_text_idx + 1, m_checkingWidget ); + + // insert optional logo banner image above welcome text + QString bannerPath = Branding::instance()->imagePath( Branding::ProductBanner ); + if ( !bannerPath.isEmpty() ) + { + // If the name is not empty, the file exists -- Branding checks that at startup + QPixmap bannerPixmap = QPixmap( bannerPath ); + if ( !bannerPixmap.isNull() ) + { + QLabel* bannerLabel = new QLabel; + bannerLabel->setPixmap( bannerPixmap ); + bannerLabel->setMinimumHeight( 64 ); + bannerLabel->setAlignment( Qt::AlignCenter ); + ui->aboveTextSpacer->changeSize( 20, defaultFontHeight ); // Shrink it down + ui->aboveTextSpacer->invalidate(); + ui->verticalLayout->insertSpacing( welcome_text_idx, defaultFontHeight ); + ui->verticalLayout->insertWidget( welcome_text_idx, bannerLabel ); + } + } + + initLanguages(); + + CALAMARES_RETRANSLATE_SLOT( &WelcomePage::retranslate ); + + connect( ui->aboutButton, &QPushButton::clicked, this, &WelcomePage::showAboutBox ); connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, m_checkingWidget, &CheckerContainer::requirementsComplete ); - connect( Calamares::ModuleManager::instance(), - &Calamares::ModuleManager::requirementsProgress, + connect( Calamares::ModuleManager::instance()->requirementsModel(), + &Calamares::RequirementsModel::progressMessageChanged, m_checkingWidget, &CheckerContainer::requirementsProgress ); - ui->setupUi( this ); - - ui->verticalLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() * 2 ); - initLanguages(); - - ui->mainText->setAlignment( Qt::AlignCenter ); - ui->mainText->setWordWrap( true ); - ui->mainText->setOpenExternalLinks( true ); - - cDebug() << "Welcome string" << Calamares::Branding::instance()->welcomeStyleCalamares() - << *Calamares::Branding::VersionedName; - - CALAMARES_RETRANSLATE_SLOT( &WelcomePage::retranslate ) - - ui->aboutButton->setIcon( CalamaresUtils::defaultPixmap( - CalamaresUtils::Information, - CalamaresUtils::Original, - 2 * QSize( CalamaresUtils::defaultFontHeight(), CalamaresUtils::defaultFontHeight() ) ) ); - connect( ui->aboutButton, &QPushButton::clicked, this, &WelcomePage::showAboutBox ); - - int welcome_text_idx = ui->verticalLayout->indexOf( ui->mainText ); - ui->verticalLayout->insertWidget( welcome_text_idx + 1, m_checkingWidget ); } void @@ -146,7 +150,7 @@ WelcomePage::setupButton( Button role, const QString& url ) } if ( !button ) { - qWarning() << "Unknown button role" << smash( role ); + cWarning() << "Unknown button role" << smash( role ); return; } @@ -161,11 +165,11 @@ WelcomePage::setupButton( Button role, const QString& url ) { auto size = 2 * QSize( CalamaresUtils::defaultFontHeight(), CalamaresUtils::defaultFontHeight() ); button->setIcon( CalamaresUtils::defaultPixmap( icon, CalamaresUtils::Original, size ) ); - connect( button, &QPushButton::clicked, [u]() { QDesktopServices::openUrl( u ); } ); + connect( button, &QPushButton::clicked, [ u ]() { QDesktopServices::openUrl( u ); } ); } else { - qWarning() << "Welcome button" << smash( role ) << "URL" << url << "is invalid."; + cWarning() << "Welcome button" << smash( role ) << "URL" << url << "is invalid."; button->hide(); } } @@ -219,9 +223,9 @@ WelcomePage::retranslate() : tr( "

Welcome to the %1 installer.

" ); } - ui->mainText->setText( message.arg( *Calamares::Branding::VersionedName ) ); + ui->mainText->setText( message.arg( Calamares::Branding::instance()->versionedName() ) ); ui->retranslateUi( this ); - ui->supportButton->setText( tr( "%1 support" ).arg( *Calamares::Branding::ShortProductName ) ); + ui->supportButton->setText( tr( "%1 support" ).arg( Calamares::Branding::instance()->shortProductName() ) ); } void @@ -245,9 +249,10 @@ WelcomePage::showAboutBox() "Liberating Software." ) .arg( CALAMARES_APPLICATION_NAME ) .arg( CALAMARES_VERSION ) - .arg( *Calamares::Branding::VersionedName ), + .arg( Calamares::Branding::instance()->versionedName() ), QMessageBox::Ok, this ); + Calamares::fixButtonLabels( &mb ); mb.setIconPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Squid, CalamaresUtils::Original, @@ -271,5 +276,5 @@ LocaleTwoColumnDelegate::paint( QPainter* painter, const QStyleOptionViewItem& o Qt::AlignRight | Qt::AlignVCenter, option.palette, false, - index.data( CalamaresUtils::Locale::LabelModel::EnglishLabelRole ).toString() ); + index.data( CalamaresUtils::Locale::TranslationsModel::EnglishLabelRole ).toString() ); } diff --git a/src/modules/welcome/WelcomePage.h b/src/modules/welcome/WelcomePage.h index 17fedc812..dba1f6a28 100644 --- a/src/modules/welcome/WelcomePage.h +++ b/src/modules/welcome/WelcomePage.h @@ -1,26 +1,17 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac - * Copyright 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOMEPAGE_H #define WELCOMEPAGE_H -#include "locale/LabelModel.h" +#include "locale/TranslationsModel.h" #include #include @@ -36,7 +27,7 @@ class WelcomePage : public QWidget { Q_OBJECT public: - explicit WelcomePage( Config* conf, QWidget* parent = nullptr ); + WelcomePage( Config* config, QWidget* parent = nullptr ); enum class Button { @@ -73,7 +64,7 @@ private: Ui::WelcomePage* ui; CheckerContainer* m_checkingWidget; - CalamaresUtils::Locale::LabelModel* m_languages; + CalamaresUtils::Locale::TranslationsModel* m_languages; Config* m_conf; }; diff --git a/src/modules/welcome/WelcomePage.ui b/src/modules/welcome/WelcomePage.ui index 590029558..9460a6c56 100644 --- a/src/modules/welcome/WelcomePage.ui +++ b/src/modules/welcome/WelcomePage.ui @@ -1,5 +1,9 @@ + +SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> +SPDX-License-Identifier: GPL-3.0-or-later + WelcomePage @@ -17,7 +21,7 @@ - + Qt::Vertical @@ -43,6 +47,12 @@ <Calamares welcome text> + + Qt::AlignCenter + + + true +
@@ -78,15 +88,15 @@ - - Select application and system language - 2 0 + + Select application and system language + diff --git a/src/modules/welcome/WelcomeViewStep.cpp b/src/modules/welcome/WelcomeViewStep.cpp index 3a0bef18f..df42271fc 100644 --- a/src/modules/welcome/WelcomeViewStep.cpp +++ b/src/modules/welcome/WelcomeViewStep.cpp @@ -1,52 +1,34 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WelcomeViewStep.h" #include "Config.h" #include "WelcomePage.h" -#include "checker/GeneralRequirements.h" #include "Branding.h" -#include "geoip/Handler.h" -#include "locale/Lookup.h" #include "modulesystem/ModuleManager.h" #include "utils/Logger.h" #include "utils/Variant.h" -#include -#include - CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeViewStepFactory, registerPlugin< WelcomeViewStep >(); ) WelcomeViewStep::WelcomeViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_requirementsChecker( new GeneralRequirements( this ) ) , m_conf( new Config( this ) ) + , m_widget( new WelcomePage( m_conf ) ) { connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, this, &WelcomeViewStep::nextStatusChanged ); - - // the instance of the qqc2 or qwidgets page - m_widget = new WelcomePage( m_conf ); connect( m_conf, &Config::localeIndexChanged, m_widget, &WelcomePage::externallySelectedLanguage ); } @@ -107,94 +89,10 @@ WelcomeViewStep::jobs() const } -/** @brief Look up a URL for a button - * - * Looks up @p key in @p map; if it is a *boolean* value, then - * assume an old-style configuration, and fetch the string from - * the branding settings @p e. If it is a string, not a boolean, - * use it as-is. If not found, or a weird type, returns empty. - * - * This allows switching the showKnownIssuesUrl and similar settings - * in welcome.conf from a boolean (deferring to branding) to an - * actual string for immediate use. Empty strings, as well as - * "false" as a setting, will hide the buttons as before. - */ -static QString -jobOrBrandingSetting( Calamares::Branding::StringEntry e, const QVariantMap& map, const QString& key ) -{ - if ( !map.contains( key ) ) - { - return QString(); - } - auto v = map.value( key ); - if ( v.type() == QVariant::Bool ) - { - return v.toBool() ? ( *e ) : QString(); - } - if ( v.type() == QVariant::String ) - { - return v.toString(); - } - - return QString(); -} - void WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - using Calamares::Branding; - - m_conf->setSupportUrl( jobOrBrandingSetting( Branding::SupportUrl, configurationMap, "showSupportUrl" ) ); - m_conf->setKnownIssuesUrl( - jobOrBrandingSetting( Branding::KnownIssuesUrl, configurationMap, "showKnownIssuesUrl" ) ); - m_conf->setReleaseNotesUrl( - jobOrBrandingSetting( Branding::ReleaseNotesUrl, configurationMap, "showReleaseNotesUrl" ) ); - m_conf->setDonateUrl( CalamaresUtils::getString( configurationMap, "showDonateUrl" ) ); - - if ( configurationMap.contains( "requirements" ) - && configurationMap.value( "requirements" ).type() == QVariant::Map ) - { - m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() ); - - m_conf->requirementsModel().setRequirementsList( checkRequirements() ); - } - else - cWarning() << "no valid requirements map found in welcome " - "module configuration."; - - bool ok = false; - QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); - if ( ok ) - { - using FWString = QFutureWatcher< QString >; - - auto* handler = new CalamaresUtils::GeoIP::Handler( CalamaresUtils::getString( geoip, "style" ), - CalamaresUtils::getString( geoip, "url" ), - CalamaresUtils::getString( geoip, "selector" ) ); - if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None ) - { - auto* future = new FWString(); - connect( future, &FWString::finished, [view = this, f = future, h = handler]() { - QString countryResult = f->future().result(); - cDebug() << "GeoIP result for welcome=" << countryResult; - view->setCountry( countryResult, h ); - f->deleteLater(); - delete h; - } ); - future->setFuture( handler->queryRaw() ); - } - else - { - // Would not produce useful country code anyway. - delete handler; - } - } - - QString language = CalamaresUtils::getString( configurationMap, "languageIcon" ); - if ( !language.isEmpty() ) - { - m_conf->setLanguageIcon( language ); - } + m_conf->setConfigurationMap( configurationMap ); //here init the qml or qwidgets needed bits m_widget->init(); @@ -203,46 +101,5 @@ WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap ) Calamares::RequirementsList WelcomeViewStep::checkRequirements() { - return m_requirementsChecker->checkRequirements(); -} - -static inline void -logGeoIPHandler( CalamaresUtils::GeoIP::Handler* handler ) -{ - if ( handler ) - { - cDebug() << Logger::SubEntry << "Obtained from" << handler->url() << " (" - << static_cast< int >( handler->type() ) << handler->selector() << ')'; - } -} - -void -WelcomeViewStep::setCountry( const QString& countryCode, CalamaresUtils::GeoIP::Handler* handler ) -{ - if ( countryCode.length() != 2 ) - { - cDebug() << "Unusable country code" << countryCode; - logGeoIPHandler( handler ); - return; - } - - auto c_l = CalamaresUtils::Locale::countryData( countryCode ); - if ( c_l.first == QLocale::Country::AnyCountry ) - { - cDebug() << "Unusable country code" << countryCode; - logGeoIPHandler( handler ); - return; - } - else - { - int r = CalamaresUtils::Locale::availableTranslations()->find( countryCode ); - if ( r < 0 ) - { - cDebug() << "Unusable country code" << countryCode << "(no suitable translation)"; - } - if ( ( r >= 0 ) && m_conf ) - { - m_conf->setCountryCode( countryCode ); - } - } + return m_conf->checkRequirements(); } diff --git a/src/modules/welcome/WelcomeViewStep.h b/src/modules/welcome/WelcomeViewStep.h index 3265395fc..dfc6f1169 100644 --- a/src/modules/welcome/WelcomeViewStep.h +++ b/src/modules/welcome/WelcomeViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOMEVIEWSTEP_H @@ -46,7 +37,7 @@ class PLUGINDLLEXPORT WelcomeViewStep : public Calamares::ViewStep public: explicit WelcomeViewStep( QObject* parent = nullptr ); - virtual ~WelcomeViewStep() override; + ~WelcomeViewStep() override; QString prettyName() const override; @@ -73,9 +64,8 @@ public: Calamares::RequirementsList checkRequirements() override; private: - WelcomePage* m_widget; - GeneralRequirements* m_requirementsChecker; Config* m_conf; + WelcomePage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeViewStepFactory ) diff --git a/src/modules/welcome/checker/CheckerContainer.cpp b/src/modules/welcome/checker/CheckerContainer.cpp index 10da425ab..23055c2e0 100644 --- a/src/modules/welcome/checker/CheckerContainer.cpp +++ b/src/modules/welcome/checker/CheckerContainer.cpp @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Based on code extracted from RequirementsChecker.cpp */ @@ -31,19 +22,20 @@ #include -CheckerContainer::CheckerContainer( const Calamares::RequirementsModel &model, QWidget* parent ) +CheckerContainer::CheckerContainer( Config* config, QWidget* parent ) : QWidget( parent ) , m_waitingWidget( new WaitingWidget( QString(), this ) ) , m_checkerWidget( nullptr ) , m_verdict( false ) - , m_model( model ) + , m_config( config ) { QBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); mainLayout->addWidget( m_waitingWidget ); - CALAMARES_RETRANSLATE( if ( m_waitingWidget ) m_waitingWidget->setText( tr( "Gathering system information..." ) ); ) + CALAMARES_RETRANSLATE( if ( m_waitingWidget ) + m_waitingWidget->setText( tr( "Gathering system information..." ) ); ); } CheckerContainer::~CheckerContainer() @@ -55,12 +47,30 @@ CheckerContainer::~CheckerContainer() void CheckerContainer::requirementsComplete( bool ok ) { + if ( !ok ) + { + auto& model = *( m_config->requirementsModel() ); + cDebug() << "Requirements not satisfied" << model.count() << "entries:"; + for ( int i = 0; i < model.count(); ++i ) + { + auto index = model.index( i ); + const bool satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool(); + const bool mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool(); + if ( !satisfied ) + { + cDebug() << Logger::SubEntry << i << model.data( index, Calamares::RequirementsModel::Name ).toString() + << "not-satisfied" + << "mandatory?" << mandatory; + } + } + } layout()->removeWidget( m_waitingWidget ); m_waitingWidget->deleteLater(); m_waitingWidget = nullptr; // Don't delete in destructor - m_checkerWidget = new ResultsListWidget( m_model, this); + m_checkerWidget = new ResultsListWidget( m_config, this ); + m_checkerWidget->setObjectName( "requirementsChecker" ); layout()->addWidget( m_checkerWidget ); m_verdict = ok; diff --git a/src/modules/welcome/checker/CheckerContainer.h b/src/modules/welcome/checker/CheckerContainer.h index 5ebefa36e..7846f7010 100644 --- a/src/modules/welcome/checker/CheckerContainer.h +++ b/src/modules/welcome/checker/CheckerContainer.h @@ -1,21 +1,12 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* Based on code extracted from RequirementsChecker.cpp */ @@ -23,9 +14,10 @@ #ifndef CHECKERCONTAINER_H #define CHECKERCONTAINER_H -#include #include "Config.h" +#include + class ResultsListWidget; class WaitingWidget; @@ -40,8 +32,8 @@ class CheckerContainer : public QWidget { Q_OBJECT public: - explicit CheckerContainer(const Calamares::RequirementsModel &model, QWidget* parent = nullptr ); - virtual ~CheckerContainer(); + explicit CheckerContainer( Config* config, QWidget* parent = nullptr ); + ~CheckerContainer() override; bool verdict() const; @@ -52,13 +44,13 @@ public slots: void requirementsProgress( const QString& message ); protected: - WaitingWidget *m_waitingWidget; - ResultsListWidget *m_checkerWidget; + WaitingWidget* m_waitingWidget; + ResultsListWidget* m_checkerWidget; bool m_verdict; private: - const Calamares::RequirementsModel &m_model; -} ; + Config* m_config = nullptr; +}; #endif diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp index 00579aef6..5950bd396 100644 --- a/src/modules/welcome/checker/GeneralRequirements.cpp +++ b/src/modules/welcome/checker/GeneralRequirements.cpp @@ -1,22 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017-2018, 2020, Adriaan de Groot - * Copyright 2017, Gabriel Craciunescu - * Copyright 2019, Collabora Ltd + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017-2018 2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Gabriel Craciunescu + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "GeneralRequirements.h" @@ -38,12 +29,12 @@ #include "GlobalStorage.h" #include "JobQueue.h" -#include #include #include #include #include #include +#include #include #include //geteuid @@ -70,28 +61,58 @@ biggestSingleScreen() return s; } +/** @brief Distinguish has-not-been-checked-at-all from false. + * + */ +struct MaybeChecked +{ + bool hasBeenChecked = false; + bool value = false; + + MaybeChecked& operator=( bool b ) + { + hasBeenChecked = true; + value = b; + return *this; + } + + operator bool() const { return value; } +}; + +QDebug& +operator<<( QDebug& s, const MaybeChecked& c ) +{ + if ( c.hasBeenChecked ) + { + s << c.value; + } + else + { + s << "unchecked"; + } + return s; +} + Calamares::RequirementsList GeneralRequirements::checkRequirements() { QSize availableSize = biggestSingleScreen(); - bool enoughStorage = false; - bool enoughRam = false; - bool hasPower = false; - bool hasInternet = false; - bool isRoot = false; + MaybeChecked enoughStorage; + MaybeChecked enoughRam; + MaybeChecked hasPower; + MaybeChecked hasInternet; + MaybeChecked isRoot; bool enoughScreen = availableSize.isValid() && ( availableSize.width() >= CalamaresUtils::windowMinimumWidth ) && ( availableSize.height() >= CalamaresUtils::windowMinimumHeight ); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( m_requiredStorageGiB ); - cDebug() << "Need at least storage bytes:" << requiredStorageB; if ( m_entriesToCheck.contains( "storage" ) ) { enoughStorage = checkEnoughStorage( requiredStorageB ); } qint64 requiredRamB = CalamaresUtils::GiBtoBytes( m_requiredRamGiB ); - cDebug() << "Need at least ram bytes:" << requiredRamB; if ( m_entriesToCheck.contains( "ram" ) ) { enoughRam = checkEnoughRam( requiredRamB ); @@ -112,10 +133,18 @@ GeneralRequirements::checkRequirements() isRoot = checkIsRoot(); } - using TR = Logger::DebugRow< const char*, bool >; - cDebug() << "GeneralRequirements output:" << TR( "enoughStorage", enoughStorage ) << TR( "enoughRam", enoughRam ) - << TR( "hasPower", hasPower ) << TR( "hasInternet", hasInternet ) << TR( "isRoot", isRoot ); - + using TNum = Logger::DebugRow< const char*, qint64 >; + using TR = Logger::DebugRow< const char*, MaybeChecked >; + // clang-format off + cDebug() << "GeneralRequirements output:" + << TNum( "storage", requiredStorageB ) + << TR( "enoughStorage", enoughStorage ) + << TNum( "RAM", requiredRamB ) + << TR( "enoughRam", enoughRam ) + << TR( "hasPower", hasPower ) + << TR( "hasInternet", hasInternet ) + << TR( "isRoot", isRoot ); + // clang-format on Calamares::RequirementsList checkEntries; foreach ( const QString& entry, m_entriesToCheck ) { @@ -123,10 +152,10 @@ GeneralRequirements::checkRequirements() { checkEntries.append( { entry, - [req = m_requiredStorageGiB] { return tr( "has at least %1 GiB available drive space" ).arg( req ); }, - [req = m_requiredStorageGiB] { - return tr( "There is not enough drive space. At least %1 GiB is required." ).arg( req ); - }, + [ req = m_requiredStorageGiB ] + { return tr( "has at least %1 GiB available drive space" ).arg( req ); }, + [ req = m_requiredStorageGiB ] + { return tr( "There is not enough drive space. At least %1 GiB is required." ).arg( req ); }, enoughStorage, m_entriesToRequire.contains( entry ) } ); } @@ -134,8 +163,8 @@ GeneralRequirements::checkRequirements() { checkEntries.append( { entry, - [req = m_requiredRamGiB] { return tr( "has at least %1 GiB working memory" ).arg( req ); }, - [req = m_requiredRamGiB] { + [ req = m_requiredRamGiB ] { return tr( "has at least %1 GiB working memory" ).arg( req ); }, + [ req = m_requiredRamGiB ] { return tr( "The system does not have enough working memory. At least %1 GiB is required." ) .arg( req ); }, @@ -162,7 +191,8 @@ GeneralRequirements::checkRequirements() { checkEntries.append( { entry, [] { return tr( "is running the installer as an administrator (root)" ); }, - [] { + [] + { return Calamares::Settings::instance()->isSetupMode() ? tr( "The setup program is not running with administrator rights." ) : tr( "The installer is not running with administrator rights." ); @@ -174,7 +204,8 @@ GeneralRequirements::checkRequirements() { checkEntries.append( { entry, [] { return tr( "has a screen large enough to show the whole installer" ); }, - [] { + [] + { return Calamares::Settings::instance()->isSetupMode() ? tr( "The screen is too small to display the setup program." ) : tr( "The screen is too small to display the installer." ); @@ -186,6 +217,58 @@ GeneralRequirements::checkRequirements() return checkEntries; } +/** @brief Loads the check-internet URLs + * + * There may be zero or one or more URLs specified; returns + * @c true if the configuration is incomplete or damaged in some way. + */ +static bool +getCheckInternetUrls( const QVariantMap& configurationMap ) +{ + const QString exampleUrl = QStringLiteral( "http://example.com" ); + + bool incomplete = false; + QStringList checkInternetSetting = CalamaresUtils::getStringList( configurationMap, "internetCheckUrl" ); + if ( !checkInternetSetting.isEmpty() ) + { + QVector< QUrl > urls; + for ( const auto& urlString : qAsConst( checkInternetSetting ) ) + { + QUrl url( urlString.trimmed() ); + if ( url.isValid() ) + { + urls.append( url ); + } + else + { + cWarning() << "GeneralRequirements entry 'internetCheckUrl' in welcome.conf contains invalid" + << urlString; + } + } + + if ( urls.empty() ) + { + cWarning() << "GeneralRequirements entry 'internetCheckUrl' contains no valid URLs, " + << "reverting to default (" << exampleUrl << ")."; + CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QUrl( exampleUrl ) ); + incomplete = true; + } + else + { + CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( urls ); + } + } + else + { + cWarning() << "GeneralRequirements entry 'internetCheckUrl' is undefined in welcome.conf, " + "reverting to default (" + << exampleUrl << ")."; + CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( QUrl( exampleUrl ) ); + incomplete = true; + } + return incomplete; +} + void GeneralRequirements::setConfigurationMap( const QVariantMap& configurationMap ) @@ -273,30 +356,7 @@ GeneralRequirements::setConfigurationMap( const QVariantMap& configurationMap ) incompleteConfiguration = true; } - QUrl checkInternetUrl; - QString checkInternetSetting = CalamaresUtils::getString( configurationMap, "internetCheckUrl" ); - if ( !checkInternetSetting.isEmpty() ) - { - checkInternetUrl = QUrl( checkInternetSetting.trimmed() ); - if ( !checkInternetUrl.isValid() ) - { - cWarning() << "GeneralRequirements entry 'internetCheckUrl' is invalid in welcome.conf" - << checkInternetSetting << "reverting to default (http://example.com)."; - checkInternetUrl = QUrl( "http://example.com" ); - incompleteConfiguration = true; - } - } - else - { - cWarning() << "GeneralRequirements entry 'internetCheckUrl' is undefined in welcome.conf," - "reverting to default (http://example.com)."; - checkInternetUrl = "http://example.com"; - incompleteConfiguration = true; - } - if ( checkInternetUrl.isValid() ) - { - CalamaresUtils::Network::Manager::instance().setCheckHasInternetUrl( checkInternetUrl ); - } + incompleteConfiguration |= getCheckInternetUrls( configurationMap ); if ( incompleteConfiguration ) { @@ -324,7 +384,7 @@ GeneralRequirements::checkEnoughRam( qint64 requiredRam ) // Ignore the guesstimate-factor; we get an under-estimate // which is probably the usable RAM for programs. quint64 availableRam = CalamaresUtils::System::instance()->getTotalMemoryB().first; - return availableRam >= requiredRam * 0.95; // because MemTotal is variable + return double( availableRam ) >= double( requiredRam ) * 0.95; // cast to silence 64-bit-int conversion to double } diff --git a/src/modules/welcome/checker/GeneralRequirements.h b/src/modules/welcome/checker/GeneralRequirements.h index 8e5a6cd54..b6646da11 100644 --- a/src/modules/welcome/checker/GeneralRequirements.h +++ b/src/modules/welcome/checker/GeneralRequirements.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2017, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef GENERALREQUIREMENTS_H @@ -50,4 +41,4 @@ private: qreal m_requiredRamGiB; }; -#endif // REQUIREMENTSCHECKER_H +#endif // REQUIREMENTSCHECKER_H diff --git a/src/modules/welcome/checker/ResultWidget.cpp b/src/modules/welcome/checker/ResultWidget.cpp index 3c3af62d4..6e34a6c36 100644 --- a/src/modules/welcome/checker/ResultWidget.cpp +++ b/src/modules/welcome/checker/ResultWidget.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResultWidget.h" @@ -24,35 +15,41 @@ #include -static inline void setCondition( QLabel* label, CalamaresUtils::ImageType t ) +static inline void +setCondition( QLabel* label, CalamaresUtils::ImageType t ) { label->setPixmap( - CalamaresUtils::defaultPixmap( t, - CalamaresUtils::Original, - QSize( label->height(), label->height() ) ) ); + CalamaresUtils::defaultPixmap( t, CalamaresUtils::Original, QSize( label->height(), label->height() ) ) ); } -ResultWidget::ResultWidget( bool satisfied, - bool required, - QWidget* parent ) +ResultWidget::ResultWidget( bool satisfied, bool required, QWidget* parent ) : QWidget( parent ) { QBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); m_iconLabel = new QLabel( this ); - mainLayout->addWidget( m_iconLabel ); m_iconLabel->setFixedSize( CalamaresUtils::defaultIconSize() ); + m_iconLabel->setObjectName( "resultIcon" ); + mainLayout->addWidget( m_iconLabel ); + m_textLabel = new QLabel( this ); - mainLayout->addWidget( m_textLabel ); m_textLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); + m_textLabel->setObjectName( "resultText" ); + mainLayout->addWidget( m_textLabel ); if ( satisfied ) + { setCondition( m_iconLabel, CalamaresUtils::StatusOk ); + } else if ( required ) + { setCondition( m_iconLabel, CalamaresUtils::StatusError ); + } else + { setCondition( m_iconLabel, CalamaresUtils::StatusWarning ); + } } diff --git a/src/modules/welcome/checker/ResultWidget.h b/src/modules/welcome/checker/ResultWidget.h index d842339ef..d77c0d9bb 100644 --- a/src/modules/welcome/checker/ResultWidget.h +++ b/src/modules/welcome/checker/ResultWidget.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHECKER_RESULTWIDGET_H @@ -38,14 +29,14 @@ public: * * Use setText() to set up the text of the widget. */ - explicit ResultWidget( bool satisfied, bool required, - QWidget* parent = nullptr ); + explicit ResultWidget( bool satisfied, bool required, QWidget* parent = nullptr ); /// @brief Set the displayed description of the check. void setText( const QString& text ); + private: QLabel* m_textLabel; QLabel* m_iconLabel; }; -#endif // CHECKER_RESULTWIDGET_H +#endif // CHECKER_RESULTWIDGET_H diff --git a/src/modules/welcome/checker/ResultsListWidget.cpp b/src/modules/welcome/checker/ResultsListWidget.cpp index c16cda4c4..a5d92b590 100644 --- a/src/modules/welcome/checker/ResultsListWidget.cpp +++ b/src/modules/welcome/checker/ResultsListWidget.cpp @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "ResultsListWidget.h" @@ -47,29 +38,33 @@ static void createResultWidgets( QLayout* layout, QList< ResultWidget* >& resultWidgets, - const Calamares::RequirementsModel &model, - std::function< bool( const Calamares::RequirementEntry& ) > predicate - ) + const Calamares::RequirementsModel& model, + std::function< bool( const Calamares::RequirementsModel&, QModelIndex ) > predicate ) { resultWidgets.clear(); resultWidgets.reserve( model.count() ); for ( auto i = 0; i < model.count(); i++ ) { - const auto &entry = model.getEntry(i); - if ( !predicate(entry)) + const auto& index = model.index( i ); + if ( !predicate( model, index ) ) { resultWidgets.append( nullptr ); continue; } - ResultWidget* ciw = new ResultWidget( entry.satisfied, entry.mandatory ); + const QString checkName = model.data( index, Calamares::RequirementsModel::Name ).toString(); + const bool is_satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool(); + const bool is_mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool(); + ResultWidget* ciw = new ResultWidget( is_satisfied, is_mandatory ); + ciw->setObjectName( checkName ); + layout->addWidget( ciw ); ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); ciw->setAutoFillBackground( true ); QPalette pal( ciw->palette() ); QColor bgColor = pal.window().color(); - int bgHue = ( entry.satisfied ) ? bgColor.hue() : ( entry.mandatory ) ? 0 : 60; + int bgHue = ( is_satisfied ) ? bgColor.hue() : ( is_mandatory ) ? 0 : 60; bgColor.setHsv( bgHue, 64, bgColor.value() ); pal.setColor( QPalette::Window, bgColor ); ciw->setPalette( pal ); @@ -95,7 +90,7 @@ public: * or UB happens. */ ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent ); - virtual ~ResultsListDialog(); + ~ResultsListDialog() override; private: QLabel* m_title; @@ -105,7 +100,7 @@ private: void retranslate(); }; -ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent) +ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent ) : QDialog( parent ) , m_model( model ) { @@ -113,12 +108,16 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model, auto* entriesLayout = new QVBoxLayout; m_title = new QLabel( this ); + m_title->setObjectName( "resultDialogTitle" ); - createResultWidgets( entriesLayout, m_resultWidgets, model, []( const Calamares::RequirementEntry& e ) { - return e.hasDetails(); - } ); + createResultWidgets( entriesLayout, + m_resultWidgets, + model, + []( const Calamares::RequirementsModel& m, QModelIndex i ) + { return m.data( i, Calamares::RequirementsModel::HasDetails ).toBool(); } ); QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close, Qt::Horizontal, this ); + buttonBox->setObjectName( "resultDialogButtons" ); mainLayout->addWidget( m_title ); mainLayout->addLayout( entriesLayout ); @@ -128,8 +127,7 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model, connect( buttonBox, &QDialogButtonBox::clicked, this, &QDialog::close ); - CALAMARES_RETRANSLATE_SLOT( &ResultsListDialog::retranslate ) - retranslate(); // Do it now to fill in the texts + CALAMARES_RETRANSLATE_SLOT( &ResultsListDialog::retranslate ); } ResultsListDialog::~ResultsListDialog() {} @@ -142,18 +140,18 @@ ResultsListDialog::retranslate() for ( auto i = 0; i < m_model.count(); i++ ) { - const auto &entry = m_model.getEntry(i); if ( m_resultWidgets[ i ] ) { - m_resultWidgets[ i ]->setText( entry.enumerationText() ); + m_resultWidgets[ i ]->setText( + m_model.data( m_model.index( i ), Calamares::RequirementsModel::Details ).toString() ); } } } -ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel &model, QWidget* parent ) +ResultsListWidget::ResultsListWidget( Config* config, QWidget* parent ) : QWidget( parent ) - , m_model( model ) + , m_config( config ) { setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); @@ -171,20 +169,24 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel &model, spacerLayout->addSpacing( paddingSize ); CalamaresUtils::unmarginLayout( spacerLayout ); - m_explanation = new QLabel; - m_explanation->setWordWrap( true ); - m_explanation->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); - m_explanation->setOpenExternalLinks( false ); - connect( m_explanation, &QLabel::linkActivated, this, &ResultsListWidget::linkClicked ); - entriesLayout->addWidget( m_explanation ); + auto* explanation = new QLabel( m_config->warningMessage() ); + explanation->setWordWrap( true ); + explanation->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); + explanation->setOpenExternalLinks( false ); + explanation->setObjectName( "resultsExplanation" ); + entriesLayout->addWidget( explanation ); + + connect( config, &Config::warningMessageChanged, explanation, &QLabel::setText ); + connect( explanation, &QLabel::linkActivated, this, &ResultsListWidget::linkClicked ); // Check that all are satisfied (gives warnings if not) and // all *mandatory* entries are satisfied (gives errors if not). - const bool requirementsSatisfied = m_model.satisfiedRequirements(); - auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; + const bool requirementsSatisfied = config->requirementsModel()->satisfiedRequirements(); + auto isUnSatisfied = []( const Calamares::RequirementsModel& m, QModelIndex i ) + { return !m.data( i, Calamares::RequirementsModel::Satisfied ).toBool(); }; - createResultWidgets( entriesLayout, m_resultWidgets, model, isUnSatisfied ); + createResultWidgets( entriesLayout, m_resultWidgets, *( config->requirementsModel() ), isUnSatisfied ); if ( !requirementsSatisfied ) { @@ -213,16 +215,16 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel &model, } imageLabel->setContentsMargins( 4, CalamaresUtils::defaultFontHeight() * 3 / 4, 4, 4 ); - mainLayout->addWidget( imageLabel ); imageLabel->setAlignment( Qt::AlignCenter ); imageLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + imageLabel->setObjectName( "welcomeLogo" ); + mainLayout->addWidget( imageLabel ); } } - m_explanation->setAlignment( Qt::AlignCenter ); + explanation->setAlignment( Qt::AlignCenter ); } - CALAMARES_RETRANSLATE_SLOT( &ResultsListWidget::retranslate ) - retranslate(); + CALAMARES_RETRANSLATE_SLOT( &ResultsListWidget::retranslate ); } @@ -231,7 +233,7 @@ ResultsListWidget::linkClicked( const QString& link ) { if ( link == "#details" ) { - auto* dialog = new ResultsListDialog( m_model, this ); + auto* dialog = new ResultsListDialog( *( m_config->requirementsModel() ), this ); dialog->exec(); dialog->deleteLater(); } @@ -240,52 +242,15 @@ ResultsListWidget::linkClicked( const QString& link ) void ResultsListWidget::retranslate() { - for ( auto i = 0; i < m_model.count(); i++ ) + const auto& model = *( m_config->requirementsModel() ); + for ( auto i = 0; i < model.count(); i++ ) { - const auto &entry = m_model.getEntry(i); if ( m_resultWidgets[ i ] ) { - m_resultWidgets[ i ]->setText( entry.negatedText() ); + m_resultWidgets[ i ]->setText( + model.data( model.index( i ), Calamares::RequirementsModel::NegatedText ).toString() ); } } - - // Check that all are satisfied (gives warnings if not) and - // all *mandatory* entries are satisfied (gives errors if not). - - if ( !m_model.satisfiedRequirements() ) - { - QString message; - const bool setup = Calamares::Settings::instance()->isSetupMode(); - if ( !m_model.satisfiedMandatory() ) - { - message = setup ? tr( "This computer does not satisfy the minimum " - "requirements for setting up %1.
" - "Setup cannot continue. " - "
Details..." ) - : tr( "This computer does not satisfy the minimum " - "requirements for installing %1.
" - "Installation cannot continue. " - "Details..." ); - } - else - { - message = setup ? tr( "This computer does not satisfy some of the " - "recommended requirements for setting up %1.
" - "Setup can continue, but some features " - "might be disabled." ) - : tr( "This computer does not satisfy some of the " - "recommended requirements for installing %1.
" - "Installation can continue, but some features " - "might be disabled." ); - } - m_explanation->setText( message.arg( *Calamares::Branding::ShortVersionedName ) ); - } - else - { - m_explanation->setText( tr( "This program will ask you some questions and " - "set up %2 on your computer." ) - .arg( *Calamares::Branding::ProductName ) ); - } } #include "utils/moc-warnings.h" diff --git a/src/modules/welcome/checker/ResultsListWidget.h b/src/modules/welcome/checker/ResultsListWidget.h index 05a8adfa4..5e96b74a0 100644 --- a/src/modules/welcome/checker/ResultsListWidget.h +++ b/src/modules/welcome/checker/ResultsListWidget.h @@ -1,20 +1,11 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2019-2020, Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef CHECKER_RESULTSLISTWIDGET_H @@ -23,6 +14,7 @@ #include "ResultWidget.h" #include "Config.h" + #include class QLabel; @@ -30,16 +22,15 @@ class ResultsListWidget : public QWidget { Q_OBJECT public: - explicit ResultsListWidget(const Calamares::RequirementsModel &model, QWidget* parent); + explicit ResultsListWidget( Config* config, QWidget* parent ); private: /// @brief A link in the explanatory text has been clicked void linkClicked( const QString& link ); void retranslate(); - QLabel* m_explanation = nullptr; ///< Explanatory text above the list, with link - const Calamares::RequirementsModel &m_model; QList< ResultWidget* > m_resultWidgets; ///< One widget for each unsatisfied entry + Config* m_config = nullptr; }; #endif // CHECKER_RESULTSLISTWIDGET_H diff --git a/src/modules/welcome/checker/partman_devices.c b/src/modules/welcome/checker/partman_devices.c index 4fd3dd4c0..7cde7a86d 100644 --- a/src/modules/welcome/checker/partman_devices.c +++ b/src/modules/welcome/checker/partman_devices.c @@ -1,24 +1,19 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * * Based on parted_devices.c, from partman-base. * * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ +/* This is third-party ancient C code. Don't format it. */ +/* *INDENT-OFF* */ +/* clang-format off */ + #include "partman_devices.h" #include diff --git a/src/modules/welcome/checker/partman_devices.h b/src/modules/welcome/checker/partman_devices.h index 9f7695ee9..c894f6534 100644 --- a/src/modules/welcome/checker/partman_devices.h +++ b/src/modules/welcome/checker/partman_devices.h @@ -1,32 +1,24 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * SPDX-FileCopyrightText: 2014 Teo Mrnjavac + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef PARTMAN_DEVICES_H #define PARTMAN_DEVICES_H #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif -int check_big_enough(long long required_space); + int check_big_enough( long long required_space ); #ifdef __cplusplus } // extern "C" #endif -#endif // PARTMAN_DEVICES_H +#endif // PARTMAN_DEVICES_H diff --git a/src/modules/welcome/language-icon-128px.png.license b/src/modules/welcome/language-icon-128px.png.license new file mode 100644 index 000000000..bc39975ae --- /dev/null +++ b/src/modules/welcome/language-icon-128px.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcome/language-icon-48px.png.license b/src/modules/welcome/language-icon-48px.png.license new file mode 100644 index 000000000..bc39975ae --- /dev/null +++ b/src/modules/welcome/language-icon-48px.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcome/tests/1a-checkinternet.conf b/src/modules/welcome/tests/1a-checkinternet.conf new file mode 100644 index 000000000..d10a97d2a --- /dev/null +++ b/src/modules/welcome/tests/1a-checkinternet.conf @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +--- +requirements: + internetCheckUrl: http://example.com diff --git a/src/modules/welcome/tests/1b-checkinternet.conf b/src/modules/welcome/tests/1b-checkinternet.conf new file mode 100644 index 000000000..7cb9b4206 --- /dev/null +++ b/src/modules/welcome/tests/1b-checkinternet.conf @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Nothing at all +--- +bogus: 1 diff --git a/src/modules/welcome/tests/1c-checkinternet.conf b/src/modules/welcome/tests/1c-checkinternet.conf new file mode 100644 index 000000000..6dbfb8f37 --- /dev/null +++ b/src/modules/welcome/tests/1c-checkinternet.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Set to blank +--- +requirements: + internetCheckUrl: "" diff --git a/src/modules/welcome/tests/1d-checkinternet.conf b/src/modules/welcome/tests/1d-checkinternet.conf new file mode 100644 index 000000000..0f5896ce1 --- /dev/null +++ b/src/modules/welcome/tests/1d-checkinternet.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Set to something broken +--- +requirements: + internetCheckUrl: false diff --git a/src/modules/welcome/tests/1e-checkinternet.conf b/src/modules/welcome/tests/1e-checkinternet.conf new file mode 100644 index 000000000..98ff62695 --- /dev/null +++ b/src/modules/welcome/tests/1e-checkinternet.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Empty list +--- +requirements: + internetCheckUrl: [] diff --git a/src/modules/welcome/tests/1f-checkinternet.conf b/src/modules/welcome/tests/1f-checkinternet.conf new file mode 100644 index 000000000..158025c62 --- /dev/null +++ b/src/modules/welcome/tests/1f-checkinternet.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Multiple, all valid +--- +requirements: + internetCheckUrl: + - http://example.com + - http://bogus.example.com + - http://nonexistent.example.com diff --git a/src/modules/welcome/tests/1g-checkinternet.conf b/src/modules/welcome/tests/1g-checkinternet.conf new file mode 100644 index 000000000..1f4477f9f --- /dev/null +++ b/src/modules/welcome/tests/1g-checkinternet.conf @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Multiple, all valid, in short-list form +--- +requirements: + internetCheckUrl: [ http://example.com, http://bogus.example.com, http://nonexistent.example.com ] diff --git a/src/modules/welcome/tests/1h-checkinternet.conf b/src/modules/welcome/tests/1h-checkinternet.conf new file mode 100644 index 000000000..4984cf12b --- /dev/null +++ b/src/modules/welcome/tests/1h-checkinternet.conf @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# "0" is a valid URL (?) but "" is not +--- +requirements: + internetCheckUrl: + - http://example.com + - 0 + - "" + - http://nonexistent.example.com diff --git a/src/modules/welcome/welcome.conf b/src/modules/welcome/welcome.conf index 0361830aa..6e11817bf 100644 --- a/src/modules/welcome/welcome.conf +++ b/src/modules/welcome/welcome.conf @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# # Configuration for the welcome module. The welcome page # displays some information from the branding file. # Which parts it displays can be configured through @@ -7,22 +10,20 @@ # can check requirements for installation. --- # Display settings for various buttons on the welcome page. -# The URLs themselves come from branding.desc is the setting -# here is "true". If the setting is false, the button is hidden. +# The URLs themselves come from `branding.desc`. Each button +# is show if the corresponding *show* setting +# here is "true". If the setting is "false", the button is hidden. +# Empty or not-set is interpreted as "false". +# +# TODO:3.3 Remove the URL fallback here; URLs only in `branding.desc` +# # The setting can also be a full URL which will then be used -# instead of the one from the branding file, or empty or not-set -# which will hide the button. +# instead of the one from the branding file. showSupportUrl: true showKnownIssuesUrl: true -showReleaseNotesUrl: true - -# If this Url is set to something non-empty, a "donate" -# button is added to the welcome page alongside the -# others (see settings, above). Clicking the button opens -# the corresponding link. (This button has no corresponding -# branding.desc string) -# -# showDonateUrl: https://kde.org/community/donations/ +showReleaseNotesUrl: false +# TODO:3.3 Move to branding, keep only a bool here +showDonateUrl: https://kde.org/community/donations/ # Requirements checking. These are general, generic, things # that are checked. They may not match with the actual requirements @@ -30,7 +31,7 @@ showReleaseNotesUrl: true requirements: # Amount of available disk, in GiB. Floating-point is allowed here. # Note that this does not account for *usable* disk, so it is possible - # to pass this requirement, yet have no space to install to. + # to satisfy this requirement, yet have no space to install to. requiredStorage: 5.5 # Amount of available RAM, in GiB. Floating-point is allowed here. @@ -38,7 +39,25 @@ requirements: # To check for internet connectivity, Calamares does a HTTP GET # on this URL; on success (e.g. HTTP code 200) internet is OK. - internetCheckUrl: http://google.com + # Use a privacy-respecting URL here, preferably in your distro's domain. + # + # The URL is only used if "internet" is in the *check* list below. + internetCheckUrl: http://example.com + # + # This may be a single URL, or a list or URLs, in which case the + # URLs will be checked one-by-one; if any of them returns data, + # internet is assumed to be OK. This can be used to check via + # a number of places, where some domains may be down or blocked. + # + # To use a list of URLs, just use YAML list syntax (e.g. + # + # internetCheckUrl: + # - http://www.kde.org + # - http://www.freebsd.org + # + # or short-form + # + # internetCheckUrl: [ http://www.kde.org, http://www.freebsd.org ] # List conditions to check. Each listed condition will be # probed in some way, and yields true or false according to @@ -71,7 +90,16 @@ requirements: # # To disable GeoIP checking, either comment-out the entire geoip section, # or set the *style* key to an unsupported format (e.g. `none`). -# Also, note the analogous feature in src/modules/locale/locale.conf. +# Also, note the analogous feature in `src/modules/locale/locale.conf`, +# which is where you will find complete documentation. +# +# For testing, the *style* may be set to `fixed`, any URL that +# returns data (e.g. `http://example.com`) and then *selector* +# sets the data that is actually returned (e.g. "DE" to simulate +# the machine being in Germany). +# +# NOTE: the *selector* must pick the country code from the GeoIP +# data. Timezone, city, or other data will not be recognized. # geoip: style: "none" diff --git a/src/modules/welcome/welcome.schema.yaml b/src/modules/welcome/welcome.schema.yaml new file mode 100644 index 000000000..fbebcd968 --- /dev/null +++ b/src/modules/welcome/welcome.schema.yaml @@ -0,0 +1,38 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/welcome +additionalProperties: false +type: object +properties: + # TODO:3.3: drop the string alternatives and put the URL part in Branding + showSupportUrl: { anyOf: [ { type: boolean, default: true }, { type: string } ] } + showKnownIssuesUrl: { anyOf: [ { type: boolean, default: true }, { type: string } ] } + showReleaseNotesUrl: { anyOf: [ { type: boolean, default: true }, { type: string } ] } + showDonateUrl: { anyOf: [ { type: boolean, default: true }, { type: string } ] } + + requirements: + additionalProperties: false + type: object + properties: + requiredStorage: { type: number } + requiredRam: { type: number } + internetCheckUrl: { type: string } + check: + type: array + items: { type: string, enum: [storage, ram, power, internet, root, screen], unique: true } + required: # Key-name in the config-file + type: array + items: { type: string, enum: [storage, ram, power, internet, root, screen], unique: true } + required: [ requiredStorage, requiredRam, check ] # Schema keyword + + # TODO: refactor, this is reused in locale + geoip: + additionalProperties: false + type: object + properties: + style: { type: string, enum: [ none, fixed, xml, json ] } + url: { type: string } + selector: { type: string } + required: [ style, url, selector ] diff --git a/src/modules/welcomeq/CMakeLists.txt b/src/modules/welcomeq/CMakeLists.txt index 9cb89c3d9..b6f950dad 100644 --- a/src/modules/welcomeq/CMakeLists.txt +++ b/src/modules/welcomeq/CMakeLists.txt @@ -1,9 +1,20 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + # This is a re-write of the welcome module using QML view steps # instead of widgets. +if( NOT WITH_QML ) + calamares_skip_module( "welcomeq (QML is not supported in this build)" ) + return() +endif() + set( _welcome ${CMAKE_CURRENT_SOURCE_DIR}/../welcome ) -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ${CMAKE_CURRENT_SOURCE_DIR}/../../libcalamares ${_welcome} ) +include_directories( ${_welcome} ) # DUPLICATED WITH WELCOME MODULE find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) @@ -33,19 +44,8 @@ calamares_add_plugin( welcomeq RESOURCES welcomeq.qrc LINK_PRIVATE_LIBRARIES - calamaresui ${CHECKER_LINK_LIBRARIES} Qt5::DBus Qt5::Network SHARED_LIB ) - -# add_executable( welcomeqmltest qmlmain.cpp Config.cpp WelcomeQmlViewStep.cpp ${CHECKER_SOURCES} ) -# target_link_libraries( welcomeqmltest PRIVATE calamaresui Qt5::Core Qt5::Network Qt5::DBus ${CHECKER_LINK_LIBRARIES}) -# set_target_properties( welcomeqmltest -# PROPERTIES -# ENABLE_EXPORTS TRUE -# RUNTIME_OUTPUT_NAME welcomeqmltest -# ) -# calamares_automoc( welcomeqmltest ) -# calamares_autouic( welcomeqmltest ) diff --git a/src/modules/welcomeq/Recommended.qml b/src/modules/welcomeq/Recommended.qml new file mode 100644 index 000000000..1afc60950 --- /dev/null +++ b/src/modules/welcomeq/Recommended.qml @@ -0,0 +1,91 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +/* THIS COMPONENT IS UNUSED -- from the default welcomeq.qml at least */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami + +Rectangle { + focus: true + Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor + anchors.fill: parent + anchors.topMargin: 50 + + TextArea { + id: recommended + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: 1 + horizontalAlignment: TextEdit.AlignHCenter + width: 640 + font.pointSize: 11 + textFormat: Text.RichText + antialiasing: true + activeFocusOnPress: false + wrapMode: Text.WordWrap + + text: qsTr("

This computer does not satisfy some of the recommended requirements for setting up %1.
+ Setup can continue, but some features might be disabled.

").arg(Branding.string(Branding.VersionedName)) + } + + Rectangle { + width: 640 + height: 360 + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: recommended.bottom + anchors.topMargin: 5 + + Component { + id: requirementsDelegate + + Item { + width: 640 + height: 35 + + Column { + anchors.centerIn: parent + + Rectangle { + implicitWidth: 640 + implicitHeight: 35 + border.color: satisfied ? "#228b22" : "#ffa411" + color: satisfied ? "#f0fff0" : "#ffefd5" + + Image { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.margins: 20 + source: satisfied ? "qrc:/data/images/yes.svgz" : "qrc:/data/images/information.svgz" + } + + Text { + text: satisfied ? details : negatedText + anchors.centerIn: parent + font.pointSize: 11 + } + } + } + } + } + + ListView { + anchors.fill: parent + spacing: 5 + model: config.requirementsModel + delegate: requirementsDelegate + } + } +} diff --git a/src/modules/welcomeq/Requirements.qml b/src/modules/welcomeq/Requirements.qml new file mode 100644 index 000000000..159d88446 --- /dev/null +++ b/src/modules/welcomeq/Requirements.qml @@ -0,0 +1,103 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.core 1.0 +import io.calamares.ui 1.0 + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Layouts 1.3 +import org.kde.kirigami 2.7 as Kirigami + +Rectangle { + focus: true + Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor + anchors.fill: parent + anchors.topMargin: 50 + + TextArea { + id: required + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: 1 + horizontalAlignment: TextEdit.AlignHCenter + width: 640 + font.pointSize: 11 + textFormat: Text.RichText + antialiasing: true + activeFocusOnPress: false + wrapMode: Text.WordWrap + + property var requirementsText: qsTr("

This computer does not satisfy the minimum requirements for installing %1.
+ Installation cannot continue.

").arg(Branding.string(Branding.VersionedName)) + property var recommendationsText: qsTr("

This computer does not satisfy some of the recommended requirements for setting up %1.
+ Setup can continue, but some features might be disabled.

").arg(Branding.string(Branding.VersionedName)) + + text: config.requirementsModel.satisfiedMandatory ? recommendationsText : requirementsText + } + + Rectangle { + width: 640 + height: 360 + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: required.bottom + anchors.topMargin: 5 + + Component { + id: requirementsDelegate + + Item { + width: 640 + height: 35 + visible: true + + Column { + anchors.centerIn: parent + + Rectangle { + implicitWidth: 640 + implicitHeight: 35 + // Colors and images based on the two satisfied-bools: + // - if satisfied, then green / ok + // - otherwise if mandatory, then red / stop + // - otherwise, then yellow / warning + border.color: satisfied ? "#228b22" : (mandatory ? "#ff0000" : "#ffa411") + color: satisfied ? "#f0fff0" : (mandatory ? "#ffc0cb" : "#ffefd5") + + Image { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.margins: 20 + source: satisfied ? "qrc:/data/images/yes.svgz" : (mandatory ? "qrc:/data/images/no.svgz" : "qrc:/data/images/information.svgz") + } + + Text { + text: satisfied ? details : negatedText + anchors.centerIn: parent + font.pointSize: 11 + } + } + } + } + } + + ListView { + id: requirementsList + anchors.fill: parent + spacing: 5 + // This uses the filtered model, so that only unsatisfied + // requirements are ever shown. You could use *requirementsModel* + // to get all of them. + model: config.unsatisfiedRequirements + delegate: requirementsDelegate + } + } +} + diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.cpp b/src/modules/welcomeq/WelcomeQmlViewStep.cpp index c1046b506..a13911b18 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.cpp +++ b/src/modules/welcomeq/WelcomeQmlViewStep.cpp @@ -1,251 +1,94 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2018,2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #include "WelcomeQmlViewStep.h" #include "checker/GeneralRequirements.h" -#include "geoip/Handler.h" -#include "locale/LabelModel.h" -#include "locale/Lookup.h" +#include "locale/TranslationsModel.h" +#include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Variant.h" -#include "utils/Dirs.h" #include "Branding.h" #include "modulesystem/ModuleManager.h" -#include #include "utils/Yaml.h" -#include -#include -#include - CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeQmlViewStepFactory, registerPlugin< WelcomeQmlViewStep >(); ) WelcomeQmlViewStep::WelcomeQmlViewStep( QObject* parent ) -: Calamares::QmlViewStep(parent ) - , m_config( new Config( this ) ) // the qml singleton takes ownership and deletes it -// , m_nextEnabled( false ) - , m_requirementsChecker( new GeneralRequirements( this ) ) - + : Calamares::QmlViewStep( parent ) + , m_config( new Config( this ) ) { -// connect( m_config, -// &Config::isNextEnabledChanged, -// this, -// &WelcomeQmlViewStep::nextStatusChanged ); -// emit nextStatusChanged(true); + connect( Calamares::ModuleManager::instance(), + &Calamares::ModuleManager::requirementsComplete, + this, + &WelcomeQmlViewStep::nextStatusChanged ); } QString WelcomeQmlViewStep::prettyName() const { - return tr( "Welcome" ); + return tr( "Welcome" ); } bool WelcomeQmlViewStep::isNextEnabled() const { - // TODO: should return true -// return m_config->property("isNextEnabled").toBool(); - return true; + return m_config->requirementsModel()->satisfiedMandatory(); } bool WelcomeQmlViewStep::isBackEnabled() const { - // TODO: should return true (it's weird that you are not allowed to have welcome *after* anything - return false; + // TODO: should return true (it's weird that you are not allowed to have welcome *after* anything + return false; } bool WelcomeQmlViewStep::isAtBeginning() const { - // TODO: adjust to "pages" in the QML - return true; + return true; } bool WelcomeQmlViewStep::isAtEnd() const { - // TODO: adjust to "pages" in the QML - return true; + return true; } Calamares::JobList WelcomeQmlViewStep::jobs() const { - return Calamares::JobList(); -} - -/** @brief Look up a URL for a button - * - * Looks up @p key in @p map; if it is a *boolean* value, then - * assume an old-style configuration, and fetch the string from - * the branding settings @p e. If it is a string, not a boolean, - * use it as-is. If not found, or a weird type, returns empty. - * - * This allows switching the showKnownIssuesUrl and similar settings - * in welcome.conf from a boolean (deferring to branding) to an - * actual string for immediate use. Empty strings, as well as - * "false" as a setting, will hide the buttons as before. - */ -static QString -jobOrBrandingSetting( Calamares::Branding::StringEntry e, const QVariantMap& map, const QString& key ) -{ - if ( !map.contains( key ) ) - { - return QString(); - } - auto v = map.value( key ); - if ( v.type() == QVariant::Bool ) - { - return v.toBool() ? ( *e ) : QString(); - } - if ( v.type() == QVariant::String ) - { - return v.toString(); - } - - return QString(); + return Calamares::JobList(); } void WelcomeQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { - using Calamares::Branding; - m_config->setSupportUrl( jobOrBrandingSetting( Branding::SupportUrl, configurationMap, "showSupportUrl" ) ); - m_config->setKnownIssuesUrl( jobOrBrandingSetting( Branding::KnownIssuesUrl, configurationMap, "showKnownIssuesUrl" ) ); - m_config->setReleaseNotesUrl( jobOrBrandingSetting( Branding::ReleaseNotesUrl, configurationMap, "showReleaseNotesUrl" ) ); - m_config->setDonateUrl( CalamaresUtils::getString( configurationMap, "showDonateUrl" ) ); - - // TODO: expand Config class and set the remaining fields // with the configurationMap all those properties can be accessed without having to declare a property, get and setter for each - - // TODO: figure out how the requirements (held by ModuleManager) should be accessible - // to QML as a model. //will be model as a qvariantmap containing a alert level and the message string - if ( configurationMap.contains( "requirements" ) - && configurationMap.value( "requirements" ).type() == QVariant::Map ) - { - m_requirementsChecker->setConfigurationMap( configurationMap.value( "requirements" ).toMap() ); - - m_config->requirementsModel().setRequirementsList( checkRequirements() ); - } - else - cWarning() << "no valid requirements map found in welcome " - "module configuration."; - - bool ok = false; - QVariantMap geoip = CalamaresUtils::getSubMap( configurationMap, "geoip", ok ); - if ( ok ) - { - using FWString = QFutureWatcher< QString >; - - auto* handler = new CalamaresUtils::GeoIP::Handler( CalamaresUtils::getString( geoip, "style" ), - CalamaresUtils::getString( geoip, "url" ), - CalamaresUtils::getString( geoip, "selector" ) ); - if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None ) - { - auto* future = new FWString(); - connect( future, &FWString::finished, [view = this, f = future, h = handler]() { - QString countryResult = f->future().result(); - cDebug() << "GeoIP result for welcome=" << countryResult; - view->setCountry( countryResult, h ); - f->deleteLater(); - delete h; - } ); - future->setFuture( handler->queryRaw() ); - } - else - { - // Would not produce useful country code anyway. - delete handler; - } - } - - QString language = CalamaresUtils::getString( configurationMap, "languageIcon" ); - if ( !language.isEmpty() ) - { - auto icon = Calamares::Branding::instance()->image( language, QSize( 48, 48 ) ); - if ( !icon.isNull() ) - { - m_config->setLanguageIcon(language); - } - } - - Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last - setContextProperty( "Welcome", m_config ); + m_config->setConfigurationMap( configurationMap ); + Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } Calamares::RequirementsList WelcomeQmlViewStep::checkRequirements() { - return m_requirementsChecker->checkRequirements(); + return m_config->checkRequirements(); } QObject* WelcomeQmlViewStep::getConfig() { - return m_config; -} - -static inline void -logGeoIPHandler( CalamaresUtils::GeoIP::Handler* handler ) -{ - if ( handler ) - { - cDebug() << Logger::SubEntry << "Obtained from" << handler->url() << " (" - << static_cast< int >( handler->type() ) << handler->selector() << ')'; - } -} - -void -WelcomeQmlViewStep::setCountry( const QString& countryCode, CalamaresUtils::GeoIP::Handler* handler ) -{ - if ( countryCode.length() != 2 ) - { - cDebug() << "Unusable country code" << countryCode; - logGeoIPHandler( handler ); - return; - } - - auto c_l = CalamaresUtils::Locale::countryData( countryCode ); - if ( c_l.first == QLocale::Country::AnyCountry ) - { - cDebug() << "Unusable country code" << countryCode; - logGeoIPHandler( handler ); - return; - } - else - { - int r = CalamaresUtils::Locale::availableTranslations()->find( countryCode ); - if ( r < 0 ) - { - cDebug() << "Unusable country code" << countryCode << "(no suitable translation)"; - } - if ( ( r >= 0 ) ) - { - // TODO: update Config to point to selected language - m_config->setCountryCode( countryCode ); - } - } + return m_config; } diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.h b/src/modules/welcomeq/WelcomeQmlViewStep.h index 8e163083d..1ed90ce05 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.h +++ b/src/modules/welcomeq/WelcomeQmlViewStep.h @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2019-2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ #ifndef WELCOME_QMLVIEWSTEP_H @@ -38,16 +29,13 @@ class Handler; } } // namespace CalamaresUtils -class GeneralRequirements; -// TODO: Needs a generic Calamares::QmlViewStep as base class // TODO: refactor and move what makes sense to base class class PLUGINDLLEXPORT WelcomeQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: - explicit WelcomeQmlViewStep( QObject* parent = nullptr ); QString prettyName() const override; @@ -74,9 +62,7 @@ public: QObject* getConfig() override; private: - // TODO: a generic QML viewstep should return a config object from a method - Config *m_config; - GeneralRequirements* m_requirementsChecker; + Config* m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeQmlViewStepFactory ) diff --git a/src/modules/welcomeq/about.qml b/src/modules/welcomeq/about.qml index f301c6659..21050c4ea 100644 --- a/src/modules/welcomeq/about.qml +++ b/src/modules/welcomeq/about.qml @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ import io.calamares.ui 1.0 @@ -26,9 +17,9 @@ Item { width: parent.width height: parent.height focus: true - + property var appName: "Calamares" - property var appVersion: "3.2.22" + property var appVersion: "3.2.24" Rectangle { id: textArea @@ -36,19 +27,19 @@ Item { y: 14 anchors.fill: parent color: "#f2f2f2" - + Column { id: column x: 130 y: 40 - + Rectangle { width: 560 height: 250 radius: 10 border.width: 0 - + Text { width: 400 height: 250 @@ -58,25 +49,25 @@ Item { for %3

Copyright 2014-2017 Teo Mrnjavac <teo@kde.org>
Copyright 2017-2020 Adriaan de Groot <groot@kde.org>
- Thanks to the Calamares team - and the Calamares + Thanks to the Calamares team + and the Calamares translators team.

- Calamares + Calamares development is sponsored by
- Blue Systems - + Blue Systems - Liberating Software." ) .arg(appName) .arg(appVersion) .arg(Branding.string(Branding.VersionedName)) - + onLinkActivated: Qt.openUrlExternally(link) - + MouseArea { anchors.fill: parent acceptedButtons: Qt.NoButton cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor } - + font.pointSize: 10 anchors.verticalCenterOffset: 10 anchors.horizontalCenterOffset: 40 diff --git a/src/modules/welcomeq/img/chevron-left-solid.svg.license b/src/modules/welcomeq/img/chevron-left-solid.svg.license new file mode 100644 index 000000000..5f43e650d --- /dev/null +++ b/src/modules/welcomeq/img/chevron-left-solid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2020 demmm +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/img/language-icon-48px.png b/src/modules/welcomeq/img/language-icon-48px.png new file mode 100644 index 000000000..4012a4bee Binary files /dev/null and b/src/modules/welcomeq/img/language-icon-48px.png differ diff --git a/src/modules/welcomeq/img/language-icon-48px.png.license b/src/modules/welcomeq/img/language-icon-48px.png.license new file mode 100644 index 000000000..bc39975ae --- /dev/null +++ b/src/modules/welcomeq/img/language-icon-48px.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/img/squid.png.license b/src/modules/welcomeq/img/squid.png.license new file mode 100644 index 000000000..cc08e1f9f --- /dev/null +++ b/src/modules/welcomeq/img/squid.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2014 Teo Mrnjavac +SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/modules/welcomeq/release_notes.qml b/src/modules/welcomeq/release_notes.qml new file mode 100644 index 000000000..6da5bc7c9 --- /dev/null +++ b/src/modules/welcomeq/release_notes.qml @@ -0,0 +1,91 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +import io.calamares.ui 1.0 + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Window 2.2 +import QtQuick.Layouts 1.3 + +Rectangle { + width: parent.width + height: parent.height + focus: true + color: "#f2f2f2" + + Flickable { + id: flick + anchors.fill: parent + contentHeight: 3500 + + ScrollBar.vertical: ScrollBar { + id: fscrollbar + width: 10 + policy: ScrollBar.AlwaysOn + } + + TextArea { + id: intro + x: 130 + y: 8 + width: 640 + font.pointSize: 14 + textFormat: Text.RichText + antialiasing: true + activeFocusOnPress: false + wrapMode: Text.WordWrap + + text: qsTr("

%1

+

This an example QML file, showing options in RichText with Flickable content.

+ +

QML with RichText can use HTML tags, Flickable content is useful for touchscreens.

+ +

This is bold text

+

This is italic text

+

This is underlined text

+

This text will be center-aligned.

+

This is strikethrough

+ +

Code example: + ls -l /home

+ +

Lists:

+
    +
  • Intel CPU systems
  • +
  • AMD CPU systems
  • +
+ +

The vertical scrollbar is adjustable, current width set to 10.

").arg(Branding.string(Branding.VersionedName)) + + } + } + + ToolButton { + id: toolButton + x: 19 + y: 29 + width: 105 + height: 48 + text: qsTr("Back") + hoverEnabled: true + onClicked: load.source = "" + + Image { + id: image1 + x: 0 + y: 13 + width: 22 + height: 22 + source: "img/chevron-left-solid.svg" + fillMode: Image.PreserveAspectFit + } + } + +} diff --git a/src/modules/welcomeq/welcomeq.conf b/src/modules/welcomeq/welcomeq.conf index a5ab97f50..2efc51473 100644 --- a/src/modules/welcomeq/welcomeq.conf +++ b/src/modules/welcomeq/welcomeq.conf @@ -1,27 +1,40 @@ -# Configuration for the welcome module. The welcome page -# displays some information from the branding file. -# Which parts it displays can be configured through -# the show* variables. +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 # -# In addition to displaying the welcome page, this module -# can check requirements for installation. +# Configuration for the welcomeq module. +# +# The configuration for welcomeq is exactly the same +# as the welcome module, with the one exception of +# *qmlSearch* which governs QML loading. +# +# No documentation is given here: look in the welcome module. --- -# Setting for QML loading +# Setting for QML loading: use QRC, branding, or both sources of files qmlSearch: both -# Display settings for various buttons on the welcome page. -# The URLs themselves come from branding.desc is the setting -# here is "true". If the setting is false, the button is hidden. -# The setting can also be a full URL which will then be used -# instead of the one from the branding file, or empty or not-set -# which will hide the button. + +# Everythin below here is documented in `welcome.conf` showSupportUrl: true showKnownIssuesUrl: true showReleaseNotesUrl: true - -# If this Url is set to something non-empty, a "donate" -# button is added to the welcome page alongside the -# others (see settings, above). Clicking the button opens -# the corresponding link. (This button has no corresponding -# branding.desc string) -# # showDonateUrl: https://kde.org/community/donations/ + +requirements: + requiredStorage: 5.5 + requiredRam: 1.0 + internetCheckUrl: http://google.com + check: + - storage + - ram + - power + - internet + - root + - screen + required: + - ram + +geoip: + style: "none" + url: "https://geoip.kde.org/v1/ubiquity" # extended XML format + selector: "CountryCode" # blank uses default, which is wrong + +#languageIcon: languages diff --git a/src/modules/welcomeq/welcomeq.qml b/src/modules/welcomeq/welcomeq.qml index 729b61b28..02b5424c7 100644 --- a/src/modules/welcomeq/welcomeq.qml +++ b/src/modules/welcomeq/welcomeq.qml @@ -1,21 +1,13 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2020, Adriaan de Groot - * Copyright 2020, Anke Boersma + * SPDX-FileCopyrightText: 2020 Adriaan de Groot + * SPDX-FileCopyrightText: 2020 Anke Boersma + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ +import io.calamares.core 1.0 import io.calamares.ui 1.0 import QtQuick 2.10 @@ -29,21 +21,21 @@ Page { id: welcome - header: Item - { + header: Item { width: parent.width height: parent.height - Text - { + Text { id: welcomeTopText anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top + horizontalAlignment: Text.AlignHCenter + padding: 40 // In QML, QString::arg() only takes one argument - text: qsTr("

Welcome to the %1 %2 installer

").arg(Branding.string(Branding.ProductName)).arg(Branding.string(Branding.Version)) + text: qsTr("

Welcome to the %1 %2 installer

+

This program will ask you some questions and set up %1 on your computer.

").arg(Branding.string(Branding.ProductName)).arg(Branding.string(Branding.Version)) } - Image - { + Image { id: welcomeImage anchors.centerIn: parent // imagePath() returns a full pathname, so make it refer to the filesystem @@ -55,36 +47,35 @@ Page fillMode: Image.PreserveAspectFit } - RowLayout - { + Requirements { + visible: !config.requirementsModel.satisfiedRequirements + } + + RowLayout { id: buttonBar - width: parent.width + width: parent.width / 1.5 height: 64 anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter spacing: Kirigami.Units.largeSpacing* 2 -/* Traditionally Calamares has had an "About" button that talks about - * Calamares itself, which just isn't a very useful thing in someone - * else's installation ISO. - */ - Button - { + Button { Layout.fillWidth: true text: qsTr("About") icon.name: "dialog-information" Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) Kirigami.Theme.textColor: Kirigami.Theme.textColor - - visible: false - onClicked: { - //onClicked: load.source = "file:/usr/share/calamares/branding/kaos_branding/show.qml" + + visible: true + onClicked: { + //onClicked: load.source = "file:/usr/share/calamares/branding/default/show.qml" onClicked: load.source = "about.qml" } } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Support") icon.name: "system-help" @@ -94,8 +85,8 @@ Page visible: config.supportUrl !== "" onClicked: Qt.openUrlExternally(config.supportUrl) } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Known issues") icon.name: "tools-report-bug" @@ -105,8 +96,8 @@ Page visible: config.knownIssuesUrl !== "" onClicked: Qt.openUrlExternally(config.knownIssuesUrl) } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Release notes") icon.name: "folder-text" @@ -114,10 +105,11 @@ Page Kirigami.Theme.textColor: Kirigami.Theme.textColor visible: config.releaseNotesUrl !== "" - onClicked: Qt.openUrlExternally(config.releaseNotesUrl) + onClicked: load.source = "release_notes.qml" + //onClicked: load.source = "file:/usr/share/calamares/release_notes.qml" } - Button - { + + Button { Layout.fillWidth: true text: qsTr("Donate") icon.name: "taxes-finances" @@ -128,9 +120,60 @@ Page onClicked: Qt.openUrlExternally(config.donateUrl) } } - Loader - { - id:load + + RowLayout { + id: languageBar + width: parent.width /1.2 + height: 48 + + anchors.bottom: parent.bottom + anchors.bottomMargin: parent.height /7 + anchors.horizontalCenter: parent.horizontalCenter + spacing: Kirigami.Units.largeSpacing* 4 + + Rectangle { + width: parent.width + Layout.fillWidth: true + focus: true + + Loader { + id: imLoader + + Component { + id: icon + Kirigami.Icon { + source: config.languageIcon + height: 48 + width: 48 + } + } + + Component { + id: image + Image { + height: 48 + fillMode: Image.PreserveAspectFit + source: "img/language-icon-48px.png" + } + } + + sourceComponent: (config.languageIcon != "") ? icon : image + } + + ComboBox { + id: languages + anchors.left: imLoader.right + width: languageBar.width /1.1 + textRole: "label" + currentIndex: config.localeIndex + model: config.languagesModel + onCurrentIndexChanged: config.localeIndex = currentIndex + } + } + } + + Loader { + id:load anchors.fill: parent } } diff --git a/src/modules/welcomeq/welcomeq.qrc b/src/modules/welcomeq/welcomeq.qrc index 84e598a27..ef41f816a 100644 --- a/src/modules/welcomeq/welcomeq.qrc +++ b/src/modules/welcomeq/welcomeq.qrc @@ -2,7 +2,11 @@ welcomeq.qml about.qml + release_notes.qml + Recommended.qml + Requirements.qml img/squid.png img/chevron-left-solid.svg + img/language-icon-48px.png diff --git a/src/modules/zfs/CMakeLists.txt b/src/modules/zfs/CMakeLists.txt new file mode 100644 index 000000000..2feb911d0 --- /dev/null +++ b/src/modules/zfs/CMakeLists.txt @@ -0,0 +1,13 @@ +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +calamares_add_plugin( zfs + TYPE job + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + ZfsJob.cpp + SHARED_LIB +) + diff --git a/src/modules/zfs/README.md b/src/modules/zfs/README.md new file mode 100644 index 000000000..992fa5cb3 --- /dev/null +++ b/src/modules/zfs/README.md @@ -0,0 +1,21 @@ +## zfs Module Notes + + + +There are a few considerations to be aware of when enabling the zfs module +* You must provide zfs kernel modules or kernel support on the ISO for the zfs module to function + * The zfs kernel module must be loaded prior to the partition module running + * One way to achieve this is by running `modprobe zfs` +* Support for zfs in the partition module is conditional on the zfs module being enabled +* The config for the default pools and datasets is configured and described in modules/zfs.conf +* If you use grub with zfs, you must have `ZPOOL_VDEV_NAME_PATH=1` in your environment when running grub-install or grub-mkconfig. + * Calamares will ensure this happens during the bootloader module. + * It will also add it to `/etc/environment` so it will be available in the installation + * If you have an scripts or other processes that trigger grub-mkconfig during the install process, be sure to add that to the environment +* In most cases, you will need to enable services for zfs support appropriate to your distro. For example, when testing on Arch the following services were enabled: + * zfs.target + * zfs-import-cache + * zfs-mount + * zfs-import.target diff --git a/src/modules/zfs/ZfsJob.cpp b/src/modules/zfs/ZfsJob.cpp new file mode 100644 index 000000000..921645f0a --- /dev/null +++ b/src/modules/zfs/ZfsJob.cpp @@ -0,0 +1,365 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Evan James + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "ZfsJob.h" + +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "Settings.h" + +#include + +#include + +/** @brief Returns the alphanumeric portion of a string + * + * @p input is the input string + * + */ +static QString +alphaNumeric( QString input ) +{ + return input.remove( QRegExp( "[^a-zA-Z\\d\\s]" ) ); +} + +/** @brief Returns the best available device for zpool creation + * + * zfs partitions generally don't have UUID until the zpool is created. Generally, + * they are formed using either the id or the partuuid. The id isn't stored by kpmcore + * so this function checks to see if we have a partuuid. If so, it forms a device path + * for it. As a backup, it uses the device name i.e. /dev/sdax. + * + * The function returns a fully qualified path to the device or an empty string if no device + * is found + * + * @p pMap is the partition map from global storage + * + */ +static QString +findBestZfsDevice( QVariantMap pMap ) +{ + // Find the best device identifier, if one isn't available, skip this partition + QString deviceName; + if ( pMap[ "partuuid" ].toString() != "" ) + { + return "/dev/disk/by-partuuid/" + pMap[ "partuuid" ].toString().toLower(); + } + else if ( pMap[ "device" ].toString() != "" ) + { + return pMap[ "device" ].toString().toLower(); + } + else + { + return QString(); + } +} + +/** @brief Converts the value in a QVariant to a string which is a valid option for canmount + * + * Storing "on" and "off" in QVariant results in a conversion to boolean. This function takes + * the Qvariant in @p canMount and converts it to a QString holding "on", "off" or the string + * value in the QVariant. + * + */ +static QString +convertCanMount( QVariant canMount ) +{ + if ( canMount == true ) + { + return "on"; + } + else if ( canMount == false ) + { + return "off"; + } + else + { + return canMount.toString(); + } +} + +ZfsJob::ZfsJob( QObject* parent ) + : Calamares::CppJob( parent ) +{ +} + +ZfsJob::~ZfsJob() {} + +QString +ZfsJob::prettyName() const +{ + return tr( "Create ZFS pools and datasets" ); +} + +void +ZfsJob::collectMountpoints( const QVariantList& partitions ) +{ + m_mountpoints.empty(); + for ( const QVariant& partition : partitions ) + { + if ( partition.canConvert( QVariant::Map ) ) + { + QString mountpoint = partition.toMap().value( "mountPoint" ).toString(); + if ( !mountpoint.isEmpty() ) + { + m_mountpoints.append( mountpoint ); + } + } + } +} + +bool +ZfsJob::isMountpointOverlapping( const QString& targetMountpoint ) const +{ + for ( const QString& mountpoint : m_mountpoints ) + { + if ( mountpoint != '/' && targetMountpoint.startsWith( mountpoint ) ) + { + return true; + } + } + return false; +} + + +ZfsResult +ZfsJob::createZpool( QString deviceName, QString poolName, QString poolOptions, bool encrypt, QString passphrase ) const +{ + // zfs doesn't wait for the devices so pause for 2 seconds to ensure we give time for the device files to be created + sleep( 2 ); + + QStringList command; + if ( encrypt ) + { + command = QStringList() << "zpool" + << "create" << poolOptions.split( ' ' ) << "-O" + << "encryption=aes-256-gcm" + << "-O" + << "keyformat=passphrase" << poolName << deviceName; + } + else + { + command = QStringList() << "zpool" + << "create" << poolOptions.split( ' ' ) << poolName << deviceName; + } + + auto r = CalamaresUtils::System::instance()->runCommand( + CalamaresUtils::System::RunLocation::RunInHost, command, QString(), passphrase, std::chrono::seconds( 10 ) ); + + if ( r.getExitCode() != 0 ) + { + cWarning() << "Failed to run zpool create. The output was: " + r.getOutput(); + return { false, tr( "Failed to create zpool on " ) + deviceName }; + } + + return { true, QString() }; +} + +Calamares::JobResult +ZfsJob::exec() +{ + QVariantList partitions; + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs && gs->contains( "partitions" ) && gs->value( "partitions" ).canConvert( QVariant::List ) ) + { + partitions = gs->value( "partitions" ).toList(); + } + else + { + cWarning() << "No *partitions* defined."; + return Calamares::JobResult::internalError( tr( "Configuration Error" ), + tr( "No partitions are available for ZFS." ), + Calamares::JobResult::InvalidConfiguration ); + } + + const CalamaresUtils::System* system = CalamaresUtils::System::instance(); + + QVariantList poolNames; + + // Check to ensure the list of zfs info from the partition module is available and convert it to a list + if ( !gs->contains( "zfsInfo" ) && gs->value( "zfsInfo" ).canConvert( QVariant::List ) ) + { + return Calamares::JobResult::error( tr( "Internal data missing" ), tr( "Failed to create zpool" ) ); + } + QVariantList zfsInfoList = gs->value( "zfsInfo" ).toList(); + + for ( auto& partition : qAsConst( partitions ) ) + { + QVariantMap pMap; + if ( partition.canConvert( QVariant::Map ) ) + { + pMap = partition.toMap(); + } + + // If it isn't a zfs partition, ignore it + if ( pMap[ "fsName" ] != "zfs" ) + { + continue; + } + + // Find the best device identifier, if one isn't available, skip this partition + QString deviceName = findBestZfsDevice( pMap ); + if ( deviceName.isEmpty() ) + { + continue; + } + + // If the partition doesn't have a mountpoint, skip it + QString mountpoint = pMap[ "mountPoint" ].toString(); + if ( mountpoint.isEmpty() ) + { + continue; + } + + // Build a poolname off config pool name and the mountpoint, this is not ideal but should work until there is UI built for zfs + QString poolName = m_poolName; + if ( mountpoint != '/' ) + { + poolName += alphaNumeric( mountpoint ); + } + + // Look in the zfs info list to see if this partition should be encrypted + bool encrypt = false; + QString passphrase; + for ( const QVariant& zfsInfo : qAsConst( zfsInfoList ) ) + { + if ( zfsInfo.canConvert( QVariant::Map ) && zfsInfo.toMap().value( "encrypted" ).toBool() + && mountpoint == zfsInfo.toMap().value( "mountpoint" ) ) + { + encrypt = true; + passphrase = zfsInfo.toMap().value( "passphrase" ).toString(); + } + } + + // Create the zpool + ZfsResult zfsResult; + if ( encrypt ) + { + zfsResult = createZpool( deviceName, poolName, m_poolOptions, true, passphrase ); + } + else + { + zfsResult = createZpool( deviceName, poolName, m_poolOptions, false ); + } + + if ( !zfsResult.success ) + { + return Calamares::JobResult::error( tr( "Failed to create zpool" ), zfsResult.failureMessage ); + } + + // Save the poolname, dataset name and mountpoint. It will later be added to a list and placed in global storage. + // This will be used by later modules including mount and umount + QVariantMap poolNameEntry; + poolNameEntry[ "poolName" ] = poolName; + poolNameEntry[ "mountpoint" ] = mountpoint; + poolNameEntry[ "dsName" ] = "none"; + + // If the mountpoint is /, create datasets per the config file. If not, create a single dataset mounted at the partitions mountpoint + if ( mountpoint == '/' ) + { + collectMountpoints( partitions ); + QVariantList datasetList; + for ( const auto& dataset : qAsConst( m_datasets ) ) + { + QVariantMap datasetMap = dataset.toMap(); + + // Make sure all values are valid + if ( datasetMap[ "dsName" ].toString().isEmpty() || datasetMap[ "mountpoint" ].toString().isEmpty() + || datasetMap[ "canMount" ].toString().isEmpty() ) + { + cWarning() << "Bad dataset entry"; + continue; + } + + // We should skip this dataset if it conflicts with a permanent mountpoint + if ( isMountpointOverlapping( datasetMap[ "mountpoint" ].toString() ) ) + { + continue; + } + + QString canMount = convertCanMount( datasetMap[ "canMount" ].toString() ); + + // Create the dataset + auto r = system->runCommand( { QStringList() << "zfs" + << "create" << m_datasetOptions.split( ' ' ) << "-o" + << "canmount=" + canMount << "-o" + << "mountpoint=" + datasetMap[ "mountpoint" ].toString() + << poolName + "/" + datasetMap[ "dsName" ].toString() }, + std::chrono::seconds( 10 ) ); + if ( r.getExitCode() != 0 ) + { + cWarning() << "Failed to create dataset" << datasetMap[ "dsName" ].toString(); + continue; + } + + // Add the dataset to the list for global storage this information is used later to properly set + // the mount options on each dataset + datasetMap[ "zpool" ] = m_poolName; + datasetList.append( datasetMap ); + } + + // If the list isn't empty, add it to global storage + if ( !datasetList.isEmpty() ) + { + gs->insert( "zfsDatasets", datasetList ); + } + } + else + { + QString dsName = mountpoint; + dsName = alphaNumeric( mountpoint ); + auto r = system->runCommand( { QStringList() << "zfs" + << "create" << m_datasetOptions.split( ' ' ) << "-o" + << "canmount=on" + << "-o" + << "mountpoint=" + mountpoint << poolName + "/" + dsName }, + std::chrono::seconds( 10 ) ); + if ( r.getExitCode() != 0 ) + { + return Calamares::JobResult::error( tr( "Failed to create dataset" ), + tr( "The output was: " ) + r.getOutput() ); + } + poolNameEntry[ "dsName" ] = dsName; + } + + poolNames.append( poolNameEntry ); + + // Export the zpool so it can be reimported at the correct location later + auto r = system->runCommand( { "zpool", "export", poolName }, std::chrono::seconds( 10 ) ); + if ( r.getExitCode() != 0 ) + { + cWarning() << "Failed to export pool" << m_poolName; + } + } + + // Put the list of zpools into global storage + if ( !poolNames.isEmpty() ) + { + gs->insert( "zfsPoolInfo", poolNames ); + } + + return Calamares::JobResult::ok(); +} + + +void +ZfsJob::setConfigurationMap( const QVariantMap& map ) +{ + m_poolName = CalamaresUtils::getString( map, "poolName" ); + m_poolOptions = CalamaresUtils::getString( map, "poolOptions" ); + m_datasetOptions = CalamaresUtils::getString( map, "datasetOptions" ); + + m_datasets = CalamaresUtils::getList( map, "datasets" ); +} + +CALAMARES_PLUGIN_FACTORY_DEFINITION( ZfsJobFactory, registerPlugin< ZfsJob >(); ) diff --git a/src/modules/zfs/ZfsJob.h b/src/modules/zfs/ZfsJob.h new file mode 100644 index 000000000..58a6450ee --- /dev/null +++ b/src/modules/zfs/ZfsJob.h @@ -0,0 +1,89 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2021 Evan James + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#ifndef ZFSJOB_H +#define ZFSJOB_H + +#include +#include +#include + +#include "CppJob.h" + +#include "utils/PluginFactory.h" + +#include "DllMacro.h" + +struct ZfsResult +{ + bool success; + QString failureMessage; // This message is displayed to the user and should be translated at the time of population +}; + +/** @brief Create zpools and zfs datasets + * + */ +class PLUGINDLLEXPORT ZfsJob : public Calamares::CppJob +{ + Q_OBJECT + +public: + explicit ZfsJob( QObject* parent = nullptr ); + ~ZfsJob() override; + + QString prettyName() const override; + + Calamares::JobResult exec() override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + +private: + QString m_poolName; + QString m_poolOptions; + QString m_datasetOptions; + QStringList m_mountpoints; + + QList< QVariant > m_datasets; + + /** @brief Creates a zpool based on the provided arguments + * + * @p deviceName is a full path to the device the zpool should be created on + * @p poolName is a string containing the name of the pool to create + * @p poolOptions are the options to pass to zpool create + * @p encrypt is a boolean which determines if the pool should be encrypted + * @p passphrase is a string continaing the passphrase + * + */ + ZfsResult createZpool( QString deviceName, + QString poolName, + QString poolOptions, + bool encrypt, + QString passphrase = QString() ) const; + + /** @brief Collects all the mountpoints from the partitions + * + * Iterates over @p partitions to gather each mountpoint present + * in the list of maps and populates m_mountpoints + * + */ + void collectMountpoints( const QVariantList& partitions ); + + /** @brief Check to see if a given mountpoint overlaps with one of the defined moutnpoints + * + * Iterates over m_partitions and checks if @p targetMountpoint overlaps with them by comparing + * the beginning of targetMountpoint with all the values in m_mountpoints. Of course, / is excluded + * since all the mountpoints would begin with / + * + */ + bool isMountpointOverlapping( const QString& targetMountpoint ) const; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( ZfsJobFactory ) + +#endif // ZFSJOB_H diff --git a/src/modules/zfs/zfs.conf b/src/modules/zfs/zfs.conf new file mode 100644 index 000000000..e5a0aa348 --- /dev/null +++ b/src/modules/zfs/zfs.conf @@ -0,0 +1,45 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# The zfs module creates the zfs pools and datasets +# +# +# +--- +# The name to be used for the zpool +poolName: zpcala + +# A list of options that will be passed to zpool create +# +# Encryption options should generally not be added here since they will be added by +# selecting the encrypt disk option in the partition module +poolOptions: "-f -o ashift=12 -O mountpoint=none -O acltype=posixacl -O relatime=on" + +# A list of options that will be passed to zfs create when creating each dataset +# Do not include "canmount" or "mountpoint" as those are set below in the datasets array +datasetOptions: "-o compression=lz4 -o atime=off -o xattr=sa" + +# An array of datasets that will be created on the zpool mounted at / +# +# This default configuration is commonly used when support for booting more than one distro +# out of a single zpool is desired. If you decide to keep this default configuration, +# you should replace "distro" with an identifier that represents your distro. +datasets: + - dsName: ROOT + mountpoint: none + canMount: off + - dsName: ROOT/distro + mountpoint: none + canMount: off + - dsName: ROOT/distro/root + mountpoint: / + canMount: noauto + - dsName: ROOT/distro/home + mountpoint: /home + canMount: on + - dsName: ROOT/distro/varcache + mountpoint: /var/cache + canMount: on + - dsName: ROOT/distro/varlog + mountpoint: /var/log + canMount: on diff --git a/src/modules/zfs/zfs.schema.yaml b/src/modules/zfs/zfs.schema.yaml new file mode 100644 index 000000000..ddad6d77b --- /dev/null +++ b/src/modules/zfs/zfs.schema.yaml @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: GPL-3.0-or-later +--- +$schema: https://json-schema.org/schema# +$id: https://calamares.io/schemas/zfs +additionalProperties: false +type: object +properties: + poolName: { type: string } + poolOptions: { type: string } + datasetOptions: { type: string } + datasets: + type: array + items: + type: object + additionalProperties: false + properties: + dsName: { type: string } + mountpoint: { type: string } + # Nominally a string, but "on" and "off" are valid and get + # turned into a boolean in the YAML parser. + canMount: { anyOf: [ { type: string }, { type: boolean } ] } + required: [ dsName, mountpoint, canMount ] +required: [ poolName, datasets ] diff --git a/src/qml/CMakeLists.txt b/src/qml/CMakeLists.txt deleted file mode 100644 index 8a949d02e..000000000 --- a/src/qml/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory( calamares ) diff --git a/src/qml/calamares/CMakeLists.txt b/src/qml/calamares/CMakeLists.txt index 48f8ca96c..d74e79ea0 100644 --- a/src/qml/calamares/CMakeLists.txt +++ b/src/qml/calamares/CMakeLists.txt @@ -1,7 +1,18 @@ -file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# + +# Install "slideshows" and other QML-sources for Calamares. +# +# In practice, in the central source repositoy, this means +# just-install-the-slideshow-example. For alternative slideshows, +# see the approach in the calamares-extensions repository. # Iterate over all the subdirectories which have a qmldir file, copy them over to the build dir, # and install them into share/calamares/qml/calamares +file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/qmldir" ) diff --git a/src/qml/calamares/slideshow/BackButton.qml b/src/qml/calamares/slideshow/BackButton.qml index 2d5f4dd5e..4e420e064 100644 --- a/src/qml/calamares/slideshow/BackButton.qml +++ b/src/qml/calamares/slideshow/BackButton.qml @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ NavButton { diff --git a/src/qml/calamares/slideshow/ForwardButton.qml b/src/qml/calamares/slideshow/ForwardButton.qml index 9f6fecf8e..7838fab3b 100644 --- a/src/qml/calamares/slideshow/ForwardButton.qml +++ b/src/qml/calamares/slideshow/ForwardButton.qml @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ NavButton { diff --git a/src/qml/calamares/slideshow/NavButton.qml b/src/qml/calamares/slideshow/NavButton.qml index 33d8cad77..bdb2f402e 100644 --- a/src/qml/calamares/slideshow/NavButton.qml +++ b/src/qml/calamares/slideshow/NavButton.qml @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This is a navigation (arrow) button that fades in on hover, and @@ -27,14 +18,14 @@ import QtQuick 2.5; Image { id: fade - + property bool isForward : true - + width: 100 height: 100 anchors.verticalCenter: parent.verticalCenter opacity: 0.3 - + OpacityAnimator { id: fadeIn target: fade @@ -43,7 +34,7 @@ Image { duration: 500 running: false } - + OpacityAnimator { id: fadeOut target: fade @@ -52,7 +43,7 @@ Image { duration: 250 running: false } - + MouseArea { anchors.fill: parent hoverEnabled: true diff --git a/src/qml/calamares/slideshow/Presentation.qml b/src/qml/calamares/slideshow/Presentation.qml index 1d2fd9c85..1eed2e842 100644 --- a/src/qml/calamares/slideshow/Presentation.qml +++ b/src/qml/calamares/slideshow/Presentation.qml @@ -1,19 +1,22 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2017, Adriaan de Groot + * SPDX-FileCopyrightText: 2017 Adriaan de Groot + * SPDX-FileCopyrightText: 2016 The Qt Company Ltd. + * SPDX-License-Identifier: LGPL-2.1-only + * + * 2017, Adriaan de Groot * - added looping, keys-instead-of-shortcut - * Copyright 2018, Adriaan de Groot + * 2018, Adriaan de Groot * - make looping a property, drop the 'c' fade-key * - drop navigation through entering a slide number * (this and the 'c' key make sense in a *presentation* * slideshow, not in a passive slideshow like Calamares) * - remove quit key - * Copyright 2019, Adriaan de Groot + * 2019, Adriaan de Groot * - Support "V2" loading * - Disable shortcuts until the content is visible in Calamares - * - * SPDX-License-Identifier: LGPL-2.1 - * License-Filename: LICENSES/LGPLv2.1-Presentation + * 2020, Adriaan de Groot + * - Updated to SPDX headers */ /**************************************************************************** @@ -87,7 +90,7 @@ Item { // It is used in this example also to keep the keyboard shortcuts // enabled only while the slideshow is active. property bool activatedInCalamares: false - + // Private API property int _lastShownSlide: 0 diff --git a/src/qml/calamares/slideshow/Slide.qml b/src/qml/calamares/slideshow/Slide.qml index 6b32ddfbf..9cb9e7381 100644 --- a/src/qml/calamares/slideshow/Slide.qml +++ b/src/qml/calamares/slideshow/Slide.qml @@ -1,7 +1,7 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * SPDX-License-Identifier: LGPL-2.1 - * License-Filename: LICENSES/LGPLv2.1-Presentation + * SPDX-FileCopyrightText: 2012 Digia Plc and/or its subsidiary(-ies). + * SPDX-License-Identifier: LGPL-2.1-only */ /**************************************************************************** diff --git a/src/qml/calamares/slideshow/SlideCounter.qml b/src/qml/calamares/slideshow/SlideCounter.qml index e59476f5c..d5b2de7be 100644 --- a/src/qml/calamares/slideshow/SlideCounter.qml +++ b/src/qml/calamares/slideshow/SlideCounter.qml @@ -1,19 +1,10 @@ -/* === This file is part of Calamares - === +/* === This file is part of Calamares - === * - * Copyright 2018, Adriaan de Groot + * SPDX-FileCopyrightText: 2018 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later * - * Calamares is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * Calamares is Free Software: see the License-Identifier above. * - * Calamares is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Calamares. If not, see . */ /* This control just shows a (non-translated) count of the slides diff --git a/src/qml/calamares/slideshow/qmldir.license b/src/qml/calamares/slideshow/qmldir.license new file mode 100644 index 000000000..d2da9cf5b --- /dev/null +++ b/src/qml/calamares/slideshow/qmldir.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: no +SPDX-License-Identifier: CC0-1.0